From 70c08083214cd99a7dbb24ce3b2d8687fe96ceaf Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Mon, 13 May 2024 18:23:59 +0530 Subject: [PATCH 001/187] snap-sync consensus 0.2: start reading parent chain from the right block --- arbnode/node.go | 81 ++++++++++++++++++++++++++++++++++------ staker/rollup_watcher.go | 39 ++++++++++++++++++- 2 files changed, 108 insertions(+), 12 deletions(-) diff --git a/arbnode/node.go b/arbnode/node.go index c346a38e14..a209e81e3a 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -277,19 +277,21 @@ type Node struct { } type SnapSyncConfig struct { - Enabled bool - PrevBatchMessageCount uint64 - PrevDelayedRead uint64 - BatchCount uint64 - DelayedCount uint64 + Enabled bool + PrevBatchMessageCount uint64 + PrevDelayedRead uint64 + BatchCount uint64 + DelayedCount uint64 + ParentChainAssertionBlock uint64 } var DefaultSnapSyncConfig = SnapSyncConfig{ - Enabled: false, - PrevBatchMessageCount: 0, - BatchCount: 0, - DelayedCount: 0, - PrevDelayedRead: 0, + Enabled: false, + PrevBatchMessageCount: 0, + PrevDelayedRead: 0, + BatchCount: 0, + DelayedCount: 0, + ParentChainAssertionBlock: 0, } type ConfigFetcher interface { @@ -564,7 +566,25 @@ func createNodeImpl( if err != nil { return nil, err } - inboxReader, err := NewInboxReader(inboxTracker, l1client, l1Reader, new(big.Int).SetUint64(deployInfo.DeployedAt), delayedBridge, sequencerInbox, func() *InboxReaderConfig { return &configFetcher.Get().InboxReader }) + firstMessageBlock := new(big.Int).SetUint64(deployInfo.DeployedAt) + if config.SnapSyncTest.Enabled { + firstMessageToRead := config.SnapSyncTest.DelayedCount + if firstMessageToRead > config.SnapSyncTest.BatchCount { + firstMessageToRead = config.SnapSyncTest.BatchCount + } + if firstMessageToRead > 0 { + firstMessageToRead-- + } + // Find the first block containing the first message to read + // Subtract 1 to get the block before the first message to read, + // this is done to fetch previous batch metadata needed for snap sync. + block, err := FindBlockContainingBatch(ctx, deployInfo.Rollup, l1client, config.SnapSyncTest.ParentChainAssertionBlock, firstMessageToRead-1) + if err != nil { + return nil, err + } + firstMessageBlock.SetUint64(block) + } + inboxReader, err := NewInboxReader(inboxTracker, l1client, l1Reader, firstMessageBlock, delayedBridge, sequencerInbox, func() *InboxReaderConfig { return &configFetcher.Get().InboxReader }) if err != nil { return nil, err } @@ -740,6 +760,45 @@ func createNodeImpl( }, nil } +func FindBlockContainingBatch(ctx context.Context, rollupAddress common.Address, l1Client arbutil.L1Interface, parentChainAssertionBlock uint64, batch uint64) (uint64, error) { + callOpts := bind.CallOpts{Context: ctx} + rollup, err := staker.NewRollupWatcher(rollupAddress, l1Client, callOpts) + if err != nil { + return 0, err + } + high := parentChainAssertionBlock + low := high / 2 + // Exponentially reduce high and low by a factor of 2 until lowNode.InboxMaxCount < batch + // This will give us a range (low to high) of blocks that contain the batch + for low > 0 { + lowNode, err := rollup.LookupNodeByBlockNumber(ctx, low) + if err != nil { + return 0, err + } + if lowNode.InboxMaxCount.Uint64() > batch { + high = low + low = low / 2 + } else { + break + } + } + // Then binary search between low and high to find the block containing the batch + for low < high { + mid := low + (high-low)/2 + + midNode, err := rollup.LookupNodeByBlockNumber(ctx, mid) + if err != nil { + return 0, err + } + if midNode.InboxMaxCount.Uint64() < batch { + low = mid + 1 + } else { + high = mid + } + } + return low, nil +} + func (n *Node) OnConfigReload(_ *Config, _ *Config) error { // TODO return nil diff --git a/staker/rollup_watcher.go b/staker/rollup_watcher.go index 118ce15b44..0cc5b43999 100644 --- a/staker/rollup_watcher.go +++ b/staker/rollup_watcher.go @@ -57,7 +57,6 @@ func NewRollupWatcher(address common.Address, client arbutil.L1Interface, callOp if err != nil { return nil, err } - return &RollupWatcher{ address: address, client: client, @@ -165,6 +164,44 @@ func (r *RollupWatcher) LookupNode(ctx context.Context, number uint64) (*NodeInf }, nil } +func (r *RollupWatcher) LookupNodeByBlockNumber(ctx context.Context, blockNumber uint64) (*NodeInfo, error) { + var query = ethereum.FilterQuery{ + FromBlock: big.NewInt(int64(blockNumber)), + ToBlock: big.NewInt(int64(blockNumber)), + Addresses: []common.Address{r.address}, + Topics: [][]common.Hash{{nodeCreatedID}}, + } + logs, err := r.client.FilterLogs(ctx, query) + if err != nil { + return nil, err + } + if len(logs) == 0 { + return nil, fmt.Errorf("couldn't find node at the request blockNumber %v", blockNumber) + } + if len(logs) > 1 { + return nil, fmt.Errorf("found multiple instances of node at the requested blockNumber %v", blockNumber) + } + ethLog := logs[0] + parsedLog, err := r.ParseNodeCreated(ethLog) + if err != nil { + return nil, err + } + l1BlockProposed, err := arbutil.CorrespondingL1BlockNumber(ctx, r.client, ethLog.BlockNumber) + if err != nil { + return nil, err + } + return &NodeInfo{ + NodeNum: parsedLog.NodeNum, + L1BlockProposed: l1BlockProposed, + ParentChainBlockProposed: ethLog.BlockNumber, + Assertion: NewAssertionFromSolidity(parsedLog.Assertion), + InboxMaxCount: parsedLog.InboxMaxCount, + AfterInboxBatchAcc: parsedLog.AfterInboxBatchAcc, + NodeHash: parsedLog.NodeHash, + WasmModuleRoot: parsedLog.WasmModuleRoot, + }, nil +} + func (r *RollupWatcher) LookupNodeChildren(ctx context.Context, nodeNum uint64, nodeHash common.Hash) ([]*NodeInfo, error) { node, err := r.RollupUserLogic.GetNode(r.getCallOpts(ctx), nodeNum) if err != nil { From 0ddcc71b57fa14112cfa4d1ca3c363033a92bb86 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Mon, 13 May 2024 18:26:03 +0530 Subject: [PATCH 002/187] minor fix --- staker/rollup_watcher.go | 1 + 1 file changed, 1 insertion(+) diff --git a/staker/rollup_watcher.go b/staker/rollup_watcher.go index 0cc5b43999..fdf30a9d61 100644 --- a/staker/rollup_watcher.go +++ b/staker/rollup_watcher.go @@ -57,6 +57,7 @@ func NewRollupWatcher(address common.Address, client arbutil.L1Interface, callOp if err != nil { return nil, err } + return &RollupWatcher{ address: address, client: client, From 19643b77e08b2703ae7d303a5a9c096077a75d76 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Wed, 29 May 2024 17:35:07 +0530 Subject: [PATCH 003/187] Changes based on PR comments --- arbnode/node.go | 36 ++++++++++++++++-------------------- staker/rollup_watcher.go | 38 -------------------------------------- 2 files changed, 16 insertions(+), 58 deletions(-) diff --git a/arbnode/node.go b/arbnode/node.go index b4321f7767..e99433e392 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -567,17 +567,14 @@ func createNodeImpl( } firstMessageBlock := new(big.Int).SetUint64(deployInfo.DeployedAt) if config.SnapSyncTest.Enabled { - firstMessageToRead := config.SnapSyncTest.DelayedCount - if firstMessageToRead > config.SnapSyncTest.BatchCount { - firstMessageToRead = config.SnapSyncTest.BatchCount - } - if firstMessageToRead > 0 { - firstMessageToRead-- - } + batchCount := config.SnapSyncTest.BatchCount // Find the first block containing the first message to read // Subtract 1 to get the block before the first message to read, // this is done to fetch previous batch metadata needed for snap sync. - block, err := FindBlockContainingBatch(ctx, deployInfo.Rollup, l1client, config.SnapSyncTest.ParentChainAssertionBlock, firstMessageToRead-1) + if batchCount > 0 { + batchCount-- + } + block, err := FindBlockContainingBatchCount(ctx, deployInfo.Bridge, l1client, config.SnapSyncTest.ParentChainAssertionBlock, batchCount) if err != nil { return nil, err } @@ -759,37 +756,36 @@ func createNodeImpl( }, nil } -func FindBlockContainingBatch(ctx context.Context, rollupAddress common.Address, l1Client arbutil.L1Interface, parentChainAssertionBlock uint64, batch uint64) (uint64, error) { - callOpts := bind.CallOpts{Context: ctx} - rollup, err := staker.NewRollupWatcher(rollupAddress, l1Client, callOpts) +func FindBlockContainingBatchCount(ctx context.Context, bridgeAddress common.Address, l1Client arbutil.L1Interface, parentChainAssertionBlock uint64, batchCount uint64) (uint64, error) { + bridge, err := bridgegen.NewIBridge(bridgeAddress, l1Client) if err != nil { return 0, err } high := parentChainAssertionBlock - low := high / 2 - // Exponentially reduce high and low by a factor of 2 until lowNode.InboxMaxCount < batch - // This will give us a range (low to high) of blocks that contain the batch + low := high - 100 + // Reduce high and low by 100 until lowNode.InboxMaxCount < batchCount + // This will give us a range (low to high) of blocks that contain the batch count. for low > 0 { - lowNode, err := rollup.LookupNodeByBlockNumber(ctx, low) + lowCount, err := bridge.SequencerMessageCount(&bind.CallOpts{Context: ctx, BlockNumber: new(big.Int).SetUint64(low)}) if err != nil { return 0, err } - if lowNode.InboxMaxCount.Uint64() > batch { + if lowCount.Uint64() > batchCount { high = low - low = low / 2 + low = low - 100 } else { break } } - // Then binary search between low and high to find the block containing the batch + // Then binary search between low and high to find the block containing the batch count. for low < high { mid := low + (high-low)/2 - midNode, err := rollup.LookupNodeByBlockNumber(ctx, mid) + midCount, err := bridge.SequencerMessageCount(&bind.CallOpts{Context: ctx, BlockNumber: new(big.Int).SetUint64(mid)}) if err != nil { return 0, err } - if midNode.InboxMaxCount.Uint64() < batch { + if midCount.Uint64() < batchCount { low = mid + 1 } else { high = mid diff --git a/staker/rollup_watcher.go b/staker/rollup_watcher.go index fdf30a9d61..118ce15b44 100644 --- a/staker/rollup_watcher.go +++ b/staker/rollup_watcher.go @@ -165,44 +165,6 @@ func (r *RollupWatcher) LookupNode(ctx context.Context, number uint64) (*NodeInf }, nil } -func (r *RollupWatcher) LookupNodeByBlockNumber(ctx context.Context, blockNumber uint64) (*NodeInfo, error) { - var query = ethereum.FilterQuery{ - FromBlock: big.NewInt(int64(blockNumber)), - ToBlock: big.NewInt(int64(blockNumber)), - Addresses: []common.Address{r.address}, - Topics: [][]common.Hash{{nodeCreatedID}}, - } - logs, err := r.client.FilterLogs(ctx, query) - if err != nil { - return nil, err - } - if len(logs) == 0 { - return nil, fmt.Errorf("couldn't find node at the request blockNumber %v", blockNumber) - } - if len(logs) > 1 { - return nil, fmt.Errorf("found multiple instances of node at the requested blockNumber %v", blockNumber) - } - ethLog := logs[0] - parsedLog, err := r.ParseNodeCreated(ethLog) - if err != nil { - return nil, err - } - l1BlockProposed, err := arbutil.CorrespondingL1BlockNumber(ctx, r.client, ethLog.BlockNumber) - if err != nil { - return nil, err - } - return &NodeInfo{ - NodeNum: parsedLog.NodeNum, - L1BlockProposed: l1BlockProposed, - ParentChainBlockProposed: ethLog.BlockNumber, - Assertion: NewAssertionFromSolidity(parsedLog.Assertion), - InboxMaxCount: parsedLog.InboxMaxCount, - AfterInboxBatchAcc: parsedLog.AfterInboxBatchAcc, - NodeHash: parsedLog.NodeHash, - WasmModuleRoot: parsedLog.WasmModuleRoot, - }, nil -} - func (r *RollupWatcher) LookupNodeChildren(ctx context.Context, nodeNum uint64, nodeHash common.Hash) ([]*NodeInfo, error) { node, err := r.RollupUserLogic.GetNode(r.getCallOpts(ctx), nodeNum) if err != nil { From b75a4c8a5c1f80ffe7b27468aa1936b1df607c66 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Wed, 29 May 2024 17:38:04 +0530 Subject: [PATCH 004/187] fix comment --- arbnode/node.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arbnode/node.go b/arbnode/node.go index e99433e392..bcb5928c7d 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -568,8 +568,8 @@ func createNodeImpl( firstMessageBlock := new(big.Int).SetUint64(deployInfo.DeployedAt) if config.SnapSyncTest.Enabled { batchCount := config.SnapSyncTest.BatchCount - // Find the first block containing the first message to read - // Subtract 1 to get the block before the first message to read, + // Find the first block containing the batch count. + // Subtract 1 to get the block before the needed batch count, // this is done to fetch previous batch metadata needed for snap sync. if batchCount > 0 { batchCount-- From 5b39217575f83f78039e4b172db77d292263ffdf Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Wed, 29 May 2024 18:24:40 +0530 Subject: [PATCH 005/187] fix underflow --- arbnode/node.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/arbnode/node.go b/arbnode/node.go index bcb5928c7d..049d5da2eb 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -762,7 +762,10 @@ func FindBlockContainingBatchCount(ctx context.Context, bridgeAddress common.Add return 0, err } high := parentChainAssertionBlock - low := high - 100 + low := uint64(0) + if high > 100 { + low = high - 100 + } // Reduce high and low by 100 until lowNode.InboxMaxCount < batchCount // This will give us a range (low to high) of blocks that contain the batch count. for low > 0 { @@ -772,7 +775,11 @@ func FindBlockContainingBatchCount(ctx context.Context, bridgeAddress common.Add } if lowCount.Uint64() > batchCount { high = low - low = low - 100 + if low > 100 { + low = low - 100 + } else { + low = 0 + } } else { break } From 015f95642460e8b1e3eefb5356210652d1c55c99 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Tue, 6 Aug 2024 18:55:09 +0530 Subject: [PATCH 006/187] Add prestateTracer system_tests --- arbos/util/transfer.go | 58 +++++---- system_tests/debugapi_test.go | 235 ++++++++++++++++++++++++++++++++++ 2 files changed, 265 insertions(+), 28 deletions(-) diff --git a/arbos/util/transfer.go b/arbos/util/transfer.go index 1240928eb6..774a1092f4 100644 --- a/arbos/util/transfer.go +++ b/arbos/util/transfer.go @@ -7,9 +7,10 @@ package util import ( "errors" "fmt" - "github.com/ethereum/go-ethereum/core/tracing" "math/big" + "github.com/ethereum/go-ethereum/core/tracing" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" @@ -29,20 +30,6 @@ func TransferBalance( if amount.Sign() < 0 { panic(fmt.Sprintf("Tried to transfer negative amount %v from %v to %v", amount, from, to)) } - if from != nil { - balance := evm.StateDB.GetBalance(*from) - if arbmath.BigLessThan(balance.ToBig(), amount) { - return fmt.Errorf("%w: addr %v have %v want %v", vm.ErrInsufficientBalance, *from, balance, amount) - } - evm.StateDB.SubBalance(*from, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) - if evm.Context.ArbOSVersion >= 30 { - // ensure the from account is "touched" for EIP-161 - evm.StateDB.AddBalance(*from, &uint256.Int{}, tracing.BalanceChangeTransfer) - } - } - if to != nil { - evm.StateDB.AddBalance(*to, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) - } if tracer := evm.Config.Tracer; tracer != nil { if evm.Depth() != 0 && scenario != TracingDuringEVM { // A non-zero depth implies this transfer is occurring inside EVM execution @@ -52,23 +39,38 @@ func TransferBalance( if scenario != TracingDuringEVM { tracer.CaptureArbitrumTransfer(from, to, amount, scenario == TracingBeforeEVM, purpose) - return nil - } + } else { + fromCopy := from + toCopy := to + if fromCopy == nil { + fromCopy = &common.Address{} + } + if toCopy == nil { + toCopy = &common.Address{} + } - if from == nil { - from = &common.Address{} + info := &TracingInfo{ + Tracer: evm.Config.Tracer, + Scenario: scenario, + Contract: vm.NewContract(addressHolder{*toCopy}, addressHolder{*fromCopy}, uint256.NewInt(0), 0), + Depth: evm.Depth(), + } + info.MockCall([]byte{}, 0, *fromCopy, *toCopy, amount) } - if to == nil { - to = &common.Address{} + } + if from != nil { + balance := evm.StateDB.GetBalance(*from) + if arbmath.BigLessThan(balance.ToBig(), amount) { + return fmt.Errorf("%w: addr %v have %v want %v", vm.ErrInsufficientBalance, *from, balance, amount) } - - info := &TracingInfo{ - Tracer: evm.Config.Tracer, - Scenario: scenario, - Contract: vm.NewContract(addressHolder{*to}, addressHolder{*from}, uint256.NewInt(0), 0), - Depth: evm.Depth(), + evm.StateDB.SubBalance(*from, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) + if evm.Context.ArbOSVersion >= 30 { + // ensure the from account is "touched" for EIP-161 + evm.StateDB.AddBalance(*from, &uint256.Int{}, tracing.BalanceChangeTransfer) } - info.MockCall([]byte{}, 0, *from, *to, amount) + } + if to != nil { + evm.StateDB.AddBalance(*to, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) } return nil } diff --git a/system_tests/debugapi_test.go b/system_tests/debugapi_test.go index 30a2bee03e..e26fb3310a 100644 --- a/system_tests/debugapi_test.go +++ b/system_tests/debugapi_test.go @@ -3,6 +3,8 @@ package arbtest import ( "context" "encoding/json" + "fmt" + "math/big" "testing" "github.com/ethereum/go-ethereum/common" @@ -10,9 +12,15 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/gasestimator" "github.com/ethereum/go-ethereum/eth/tracers" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbos/l2pricing" + "github.com/offchainlabs/nitro/arbos/retryables" + "github.com/offchainlabs/nitro/solgen/go/node_interfacegen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" + "github.com/offchainlabs/nitro/util/arbmath" ) func TestDebugAPI(t *testing.T) { @@ -56,3 +64,230 @@ func TestDebugAPI(t *testing.T) { err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", tx.Hash(), &tracers.TraceConfig{Tracer: &flatCallTracer}) Require(t, err) } + +type account struct { + Balance *hexutil.Big `json:"balance,omitempty"` + Code []byte `json:"code,omitempty"` + Nonce uint64 `json:"nonce,omitempty"` + Storage map[common.Hash]common.Hash `json:"storage,omitempty"` +} +type prestateTrace struct { + Post map[common.Address]*account `json:"post"` + Pre map[common.Address]*account `json:"pre"` +} + +func TestPrestateTracingSimple(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + builder := NewNodeBuilder(ctx).DefaultConfig(t, true) + cleanup := builder.Build(t) + defer cleanup() + + builder.L2Info.GenerateAccount("User2") + sender := builder.L2Info.GetAddress("Owner") + receiver := builder.L2Info.GetAddress("User2") + ownerOldBalance, err := builder.L2.Client.BalanceAt(ctx, sender, nil) + Require(t, err) + user2OldBalance, err := builder.L2.Client.BalanceAt(ctx, receiver, nil) + Require(t, err) + + value := big.NewInt(1e6) + tx := builder.L2Info.PrepareTx("Owner", "User2", builder.L2Info.TransferGas, value, nil) + Require(t, builder.L2.Client.SendTransaction(ctx, tx)) + _, err = builder.L2.EnsureTxSucceeded(tx) + Require(t, err) + + l2rpc := builder.L2.Stack.Attach() + + var result prestateTrace + traceConfig := map[string]interface{}{ + "tracer": "prestateTracer", + "tracerConfig": map[string]interface{}{ + "diffMode": true, + }, + } + err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", tx.Hash(), traceConfig) + Require(t, err) + + if !arbmath.BigEquals(result.Pre[sender].Balance.ToInt(), ownerOldBalance) { + Fatal(t, "Unexpected initial balance of sender") + } + if !arbmath.BigEquals(result.Pre[receiver].Balance.ToInt(), user2OldBalance) { + Fatal(t, "Unexpected initial balance of receiver") + } + if !arbmath.BigEquals(result.Post[sender].Balance.ToInt(), arbmath.BigSub(ownerOldBalance, value)) { + Fatal(t, "Unexpected final balance of sender") + } + if !arbmath.BigEquals(result.Post[receiver].Balance.ToInt(), value) { + Fatal(t, "Unexpected final balance of receiver") + } + if result.Post[sender].Nonce != result.Pre[sender].Nonce+1 { + Fatal(t, "sender nonce increment wasn't registered") + } + if result.Post[receiver].Nonce != result.Pre[receiver].Nonce { + Fatal(t, "receiver nonce shouldn't change") + } +} + +func TestPrestateTracingComplex(t *testing.T) { + builder, delayedInbox, lookupL2Tx, ctx, teardown := retryableSetup(t) + defer teardown() + + // Test prestate tracing of a ArbitrumDepositTx type tx + faucetAddr := builder.L1Info.GetAddress("Faucet") + oldBalance, err := builder.L2.Client.BalanceAt(ctx, faucetAddr, nil) + Require(t, err) + + txOpts := builder.L1Info.GetDefaultTransactOpts("Faucet", ctx) + txOpts.Value = big.NewInt(13) + + l1tx, err := delayedInbox.DepositEth439370b1(&txOpts) + Require(t, err) + + l1Receipt, err := builder.L1.EnsureTxSucceeded(l1tx) + Require(t, err) + if l1Receipt.Status != types.ReceiptStatusSuccessful { + t.Errorf("Got transaction status: %v, want: %v", l1Receipt.Status, types.ReceiptStatusSuccessful) + } + waitForL1DelayBlocks(t, builder) + + l2Tx := lookupL2Tx(l1Receipt) + l2Receipt, err := builder.L2.EnsureTxSucceeded(l2Tx) + Require(t, err) + newBalance, err := builder.L2.Client.BalanceAt(ctx, faucetAddr, l2Receipt.BlockNumber) + Require(t, err) + if got := new(big.Int); got.Sub(newBalance, oldBalance).Cmp(txOpts.Value) != 0 { + t.Errorf("Got transferred: %v, want: %v", got, txOpts.Value) + } + + l2rpc := builder.L2.Stack.Attach() + var result prestateTrace + traceConfig := map[string]interface{}{ + "tracer": "prestateTracer", + "tracerConfig": map[string]interface{}{ + "diffMode": true, + }, + } + err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", l2Tx.Hash(), traceConfig) + Require(t, err) + + if _, ok := result.Pre[faucetAddr]; !ok { + Fatal(t, "Faucet account not found in the result of prestate tracer") + } + // Nonce shouldn't exist (in this case defaults to 0) in the Post map of the trace in DiffMode + if l2Tx.SkipAccountChecks() && result.Post[faucetAddr].Nonce != 0 { + Fatal(t, "Faucet account's nonce should remain unchanged ") + } + if !arbmath.BigEquals(result.Pre[faucetAddr].Balance.ToInt(), oldBalance) { + Fatal(t, "Unexpected initial balance of Faucet") + } + if !arbmath.BigEquals(result.Post[faucetAddr].Balance.ToInt(), arbmath.BigAdd(oldBalance, txOpts.Value)) { + Fatal(t, "Unexpected final balance of Faucet") + } + + // Test prestate tracing of a ArbitrumSubmitRetryableTx type tx + user2Address := builder.L2Info.GetAddress("User2") + beneficiaryAddress := builder.L2Info.GetAddress("Beneficiary") + + deposit := arbmath.BigMul(big.NewInt(1e12), big.NewInt(1e12)) + callValue := big.NewInt(1e6) + + nodeInterface, err := node_interfacegen.NewNodeInterface(types.NodeInterfaceAddress, builder.L2.Client) + Require(t, err, "failed to deploy NodeInterface") + + // estimate the gas needed to auto redeem the retryable + usertxoptsL2 := builder.L2Info.GetDefaultTransactOpts("Faucet", ctx) + usertxoptsL2.NoSend = true + usertxoptsL2.GasMargin = 0 + tx, err := nodeInterface.EstimateRetryableTicket( + &usertxoptsL2, + usertxoptsL2.From, + deposit, + user2Address, + callValue, + beneficiaryAddress, + beneficiaryAddress, + []byte{0x32, 0x42, 0x32, 0x88}, // increase the cost to beyond that of params.TxGas + ) + Require(t, err, "failed to estimate retryable submission") + estimate := tx.Gas() + expectedEstimate := params.TxGas + params.TxDataNonZeroGasEIP2028*4 + if float64(estimate) > float64(expectedEstimate)*(1+gasestimator.EstimateGasErrorRatio) { + t.Errorf("estimated retryable ticket at %v gas but expected %v, with error margin of %v", + estimate, + expectedEstimate, + gasestimator.EstimateGasErrorRatio, + ) + } + + // submit & auto redeem the retryable using the gas estimate + usertxoptsL1 := builder.L1Info.GetDefaultTransactOpts("Faucet", ctx) + usertxoptsL1.Value = deposit + l1tx, err = delayedInbox.CreateRetryableTicket( + &usertxoptsL1, + user2Address, + callValue, + big.NewInt(1e16), + beneficiaryAddress, + beneficiaryAddress, + arbmath.UintToBig(estimate), + big.NewInt(l2pricing.InitialBaseFeeWei*2), + []byte{0x32, 0x42, 0x32, 0x88}, + ) + Require(t, err) + + l1Receipt, err = builder.L1.EnsureTxSucceeded(l1tx) + Require(t, err) + if l1Receipt.Status != types.ReceiptStatusSuccessful { + Fatal(t, "l1Receipt indicated failure") + } + + waitForL1DelayBlocks(t, builder) + + l2Tx = lookupL2Tx(l1Receipt) + receipt, err := builder.L2.EnsureTxSucceeded(l2Tx) + Require(t, err) + if receipt.Status != types.ReceiptStatusSuccessful { + Fatal(t) + } + + l2balance, err := builder.L2.Client.BalanceAt(ctx, builder.L2Info.GetAddress("User2"), nil) + Require(t, err) + if !arbmath.BigEquals(l2balance, callValue) { + Fatal(t, "Unexpected balance:", l2balance) + } + + ticketId := receipt.Logs[0].Topics[1] + firstRetryTxId := receipt.Logs[1].Topics[2] + fmt.Println("submitretryable txid ", ticketId) + fmt.Println("auto redeem txid ", firstRetryTxId) + + // Trace ArbitrumSubmitRetryableTx + result = prestateTrace{} + err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", l2Tx.Hash(), traceConfig) + Require(t, err) + + escrowAddr := retryables.RetryableEscrowAddress(ticketId) + if _, ok := result.Pre[escrowAddr]; !ok { + Fatal(t, "Escrow account not found in the result of prestate tracer for a ArbitrumSubmitRetryableTx transaction") + } + + if !arbmath.BigEquals(result.Pre[escrowAddr].Balance.ToInt(), common.Big0) { + Fatal(t, "Unexpected initial balance of Escrow") + } + if !arbmath.BigEquals(result.Post[escrowAddr].Balance.ToInt(), callValue) { + Fatal(t, "Unexpected final balance of Escrow") + } + + // Trace ArbitrumRetryTx + result = prestateTrace{} + err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", firstRetryTxId, traceConfig) + Require(t, err) + + if !arbmath.BigEquals(result.Pre[user2Address].Balance.ToInt(), common.Big0) { + Fatal(t, "Unexpected initial balance of User2") + } + if !arbmath.BigEquals(result.Post[user2Address].Balance.ToInt(), callValue) { + Fatal(t, "Unexpected final balance of User2") + } +} From abb11f9a30c7c60faa1f100c4558b2bdadd3e543 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Thu, 22 Aug 2024 16:53:24 +0530 Subject: [PATCH 007/187] Update transfer.go --- arbos/util/transfer.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/arbos/util/transfer.go b/arbos/util/transfer.go index dd88450cc9..32ef4d1bd0 100644 --- a/arbos/util/transfer.go +++ b/arbos/util/transfer.go @@ -9,8 +9,6 @@ import ( "fmt" "math/big" - "github.com/ethereum/go-ethereum/core/tracing" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" From 2737e35e446ea36a57165214e2712c42298c0913 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Wed, 31 Jul 2024 16:08:44 -0300 Subject: [PATCH 008/187] Removes HardReorg config from InboxReader --- arbnode/delayed_seq_reorg_test.go | 153 ------------------------------ arbnode/inbox_reader.go | 13 +-- arbnode/inbox_tracker.go | 24 +++-- cmd/nitro/nitro.go | 4 - system_tests/seqinbox_test.go | 1 - 5 files changed, 13 insertions(+), 182 deletions(-) delete mode 100644 arbnode/delayed_seq_reorg_test.go diff --git a/arbnode/delayed_seq_reorg_test.go b/arbnode/delayed_seq_reorg_test.go deleted file mode 100644 index 699eb3e8f6..0000000000 --- a/arbnode/delayed_seq_reorg_test.go +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE - -package arbnode - -import ( - "context" - "encoding/binary" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/offchainlabs/nitro/arbos/arbostypes" - "github.com/offchainlabs/nitro/solgen/go/bridgegen" -) - -func TestSequencerReorgFromDelayed(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - exec, streamer, db, _ := NewTransactionStreamerForTest(t, common.Address{}) - tracker, err := NewInboxTracker(db, streamer, nil, DefaultSnapSyncConfig) - Require(t, err) - - err = streamer.Start(ctx) - Require(t, err) - exec.Start(ctx) - init, err := streamer.GetMessage(0) - Require(t, err) - - initMsgDelayed := &DelayedInboxMessage{ - BlockHash: [32]byte{}, - BeforeInboxAcc: [32]byte{}, - Message: init.Message, - } - delayedRequestId := common.BigToHash(common.Big1) - userDelayed := &DelayedInboxMessage{ - BlockHash: [32]byte{}, - BeforeInboxAcc: initMsgDelayed.AfterInboxAcc(), - Message: &arbostypes.L1IncomingMessage{ - Header: &arbostypes.L1IncomingMessageHeader{ - Kind: arbostypes.L1MessageType_EndOfBlock, - Poster: [20]byte{}, - BlockNumber: 0, - Timestamp: 0, - RequestId: &delayedRequestId, - L1BaseFee: common.Big0, - }, - }, - } - err = tracker.AddDelayedMessages([]*DelayedInboxMessage{initMsgDelayed, userDelayed}, false) - Require(t, err) - - serializedInitMsgBatch := make([]byte, 40) - binary.BigEndian.PutUint64(serializedInitMsgBatch[32:], 1) - initMsgBatch := &SequencerInboxBatch{ - BlockHash: [32]byte{}, - ParentChainBlockNumber: 0, - SequenceNumber: 0, - BeforeInboxAcc: [32]byte{}, - AfterInboxAcc: [32]byte{1}, - AfterDelayedAcc: initMsgDelayed.AfterInboxAcc(), - AfterDelayedCount: 1, - TimeBounds: bridgegen.IBridgeTimeBounds{}, - rawLog: types.Log{}, - dataLocation: 0, - bridgeAddress: [20]byte{}, - serialized: serializedInitMsgBatch, - } - serializedUserMsgBatch := make([]byte, 40) - binary.BigEndian.PutUint64(serializedUserMsgBatch[32:], 2) - userMsgBatch := &SequencerInboxBatch{ - BlockHash: [32]byte{}, - ParentChainBlockNumber: 0, - SequenceNumber: 1, - BeforeInboxAcc: [32]byte{1}, - AfterInboxAcc: [32]byte{2}, - AfterDelayedAcc: userDelayed.AfterInboxAcc(), - AfterDelayedCount: 2, - TimeBounds: bridgegen.IBridgeTimeBounds{}, - rawLog: types.Log{}, - dataLocation: 0, - bridgeAddress: [20]byte{}, - serialized: serializedUserMsgBatch, - } - emptyBatch := &SequencerInboxBatch{ - BlockHash: [32]byte{}, - ParentChainBlockNumber: 0, - SequenceNumber: 2, - BeforeInboxAcc: [32]byte{2}, - AfterInboxAcc: [32]byte{3}, - AfterDelayedAcc: userDelayed.AfterInboxAcc(), - AfterDelayedCount: 2, - TimeBounds: bridgegen.IBridgeTimeBounds{}, - rawLog: types.Log{}, - dataLocation: 0, - bridgeAddress: [20]byte{}, - serialized: serializedUserMsgBatch, - } - err = tracker.AddSequencerBatches(ctx, nil, []*SequencerInboxBatch{initMsgBatch, userMsgBatch, emptyBatch}) - Require(t, err) - - // Reorg out the user delayed message - err = tracker.ReorgDelayedTo(1, true) - Require(t, err) - - msgCount, err := streamer.GetMessageCount() - Require(t, err) - if msgCount != 1 { - Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 1)") - } - - delayedCount, err := tracker.GetDelayedCount() - Require(t, err) - if delayedCount != 1 { - Fail(t, "Unexpected tracker delayed message count", delayedCount, "(expected 1)") - } - - batchCount, err := tracker.GetBatchCount() - Require(t, err) - if batchCount != 1 { - Fail(t, "Unexpected tracker batch count", batchCount, "(expected 1)") - } - - emptyBatch = &SequencerInboxBatch{ - BlockHash: [32]byte{}, - ParentChainBlockNumber: 0, - SequenceNumber: 1, - BeforeInboxAcc: [32]byte{1}, - AfterInboxAcc: [32]byte{2}, - AfterDelayedAcc: initMsgDelayed.AfterInboxAcc(), - AfterDelayedCount: 1, - TimeBounds: bridgegen.IBridgeTimeBounds{}, - rawLog: types.Log{}, - dataLocation: 0, - bridgeAddress: [20]byte{}, - serialized: serializedInitMsgBatch, - } - err = tracker.AddSequencerBatches(ctx, nil, []*SequencerInboxBatch{emptyBatch}) - Require(t, err) - - msgCount, err = streamer.GetMessageCount() - Require(t, err) - if msgCount != 2 { - Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 2)") - } - - batchCount, err = tracker.GetBatchCount() - Require(t, err) - if batchCount != 2 { - Fail(t, "Unexpected tracker batch count", batchCount, "(expected 2)") - } -} diff --git a/arbnode/inbox_reader.go b/arbnode/inbox_reader.go index 98104b2ea7..a44d506d41 100644 --- a/arbnode/inbox_reader.go +++ b/arbnode/inbox_reader.go @@ -27,7 +27,6 @@ import ( type InboxReaderConfig struct { DelayBlocks uint64 `koanf:"delay-blocks" reload:"hot"` CheckDelay time.Duration `koanf:"check-delay" reload:"hot"` - HardReorg bool `koanf:"hard-reorg" reload:"hot"` MinBlocksToRead uint64 `koanf:"min-blocks-to-read" reload:"hot"` DefaultBlocksToRead uint64 `koanf:"default-blocks-to-read" reload:"hot"` TargetMessagesRead uint64 `koanf:"target-messages-read" reload:"hot"` @@ -51,7 +50,6 @@ func (c *InboxReaderConfig) Validate() error { func InboxReaderConfigAddOptions(prefix string, f *flag.FlagSet) { f.Uint64(prefix+".delay-blocks", DefaultInboxReaderConfig.DelayBlocks, "number of latest blocks to ignore to reduce reorgs") f.Duration(prefix+".check-delay", DefaultInboxReaderConfig.CheckDelay, "the maximum time to wait between inbox checks (if not enough new blocks are found)") - f.Bool(prefix+".hard-reorg", DefaultInboxReaderConfig.HardReorg, "erase future transactions in addition to overwriting existing ones on reorg") f.Uint64(prefix+".min-blocks-to-read", DefaultInboxReaderConfig.MinBlocksToRead, "the minimum number of blocks to read at once (when caught up lowers load on L1)") f.Uint64(prefix+".default-blocks-to-read", DefaultInboxReaderConfig.DefaultBlocksToRead, "the default number of blocks to read at once (will vary based on traffic by default)") f.Uint64(prefix+".target-messages-read", DefaultInboxReaderConfig.TargetMessagesRead, "if adjust-blocks-to-read is enabled, the target number of messages to read at once") @@ -62,7 +60,6 @@ func InboxReaderConfigAddOptions(prefix string, f *flag.FlagSet) { var DefaultInboxReaderConfig = InboxReaderConfig{ DelayBlocks: 0, CheckDelay: time.Minute, - HardReorg: false, MinBlocksToRead: 1, DefaultBlocksToRead: 100, TargetMessagesRead: 500, @@ -73,7 +70,6 @@ var DefaultInboxReaderConfig = InboxReaderConfig{ var TestInboxReaderConfig = InboxReaderConfig{ DelayBlocks: 0, CheckDelay: time.Millisecond * 10, - HardReorg: false, MinBlocksToRead: 1, DefaultBlocksToRead: 100, TargetMessagesRead: 500, @@ -338,7 +334,7 @@ func (r *InboxReader) run(ctx context.Context, hadError bool) error { missingDelayed = true } else if ourLatestDelayedCount > checkingDelayedCount { log.Info("backwards reorg of delayed messages", "from", ourLatestDelayedCount, "to", checkingDelayedCount) - err = r.tracker.ReorgDelayedTo(checkingDelayedCount, config.HardReorg) + err = r.tracker.ReorgDelayedTo(checkingDelayedCount) if err != nil { return err } @@ -373,11 +369,6 @@ func (r *InboxReader) run(ctx context.Context, hadError bool) error { if ourLatestBatchCount < checkingBatchCount { checkingBatchCount = ourLatestBatchCount missingSequencer = true - } else if ourLatestBatchCount > checkingBatchCount && config.HardReorg { - err = r.tracker.ReorgBatchesTo(checkingBatchCount) - if err != nil { - return err - } } if checkingBatchCount > 0 { checkingBatchSeqNum := checkingBatchCount - 1 @@ -566,7 +557,7 @@ func (r *InboxReader) run(ctx context.Context, hadError bool) error { } func (r *InboxReader) addMessages(ctx context.Context, sequencerBatches []*SequencerInboxBatch, delayedMessages []*DelayedInboxMessage) (bool, error) { - err := r.tracker.AddDelayedMessages(delayedMessages, r.config().HardReorg) + err := r.tracker.AddDelayedMessages(delayedMessages) if err != nil { return false, err } diff --git a/arbnode/inbox_tracker.go b/arbnode/inbox_tracker.go index 7686fe413f..0eed2f5e1a 100644 --- a/arbnode/inbox_tracker.go +++ b/arbnode/inbox_tracker.go @@ -404,7 +404,7 @@ func (t *InboxTracker) GetDelayedMessageBytes(ctx context.Context, seqNum uint64 return msg.Serialize() } -func (t *InboxTracker) AddDelayedMessages(messages []*DelayedInboxMessage, hardReorg bool) error { +func (t *InboxTracker) AddDelayedMessages(messages []*DelayedInboxMessage) error { var nextAcc common.Hash firstDelayedMsgToKeep := uint64(0) if len(messages) == 0 { @@ -440,17 +440,15 @@ func (t *InboxTracker) AddDelayedMessages(messages []*DelayedInboxMessage, hardR t.mutex.Lock() defer t.mutex.Unlock() - if !hardReorg { - // This math is safe to do as we know len(messages) > 0 - haveLastAcc, err := t.GetDelayedAcc(pos + uint64(len(messages)) - 1) - if err == nil { - if haveLastAcc == messages[len(messages)-1].AfterInboxAcc() { - // We already have these delayed messages - return nil - } - } else if !errors.Is(err, AccumulatorNotFoundErr) { - return err + // This math is safe to do as we know len(messages) > 0 + haveLastAcc, err := t.GetDelayedAcc(pos + uint64(len(messages)) - 1) + if err == nil { + if haveLastAcc == messages[len(messages)-1].AfterInboxAcc() { + // We already have these delayed messages + return nil } + } else if !errors.Is(err, AccumulatorNotFoundErr) { + return err } if pos > firstDelayedMsgToKeep { @@ -852,7 +850,7 @@ func (t *InboxTracker) AddSequencerBatches(ctx context.Context, client *ethclien return nil } -func (t *InboxTracker) ReorgDelayedTo(count uint64, canReorgBatches bool) error { +func (t *InboxTracker) ReorgDelayedTo(count uint64) error { t.mutex.Lock() defer t.mutex.Unlock() @@ -867,7 +865,7 @@ func (t *InboxTracker) ReorgDelayedTo(count uint64, canReorgBatches bool) error return errors.New("attempted to reorg to future delayed count") } - return t.setDelayedCountReorgAndWriteBatch(t.db.NewBatch(), count, canReorgBatches) + return t.setDelayedCountReorgAndWriteBatch(t.db.NewBatch(), count, false) } func (t *InboxTracker) ReorgBatchesTo(count uint64) error { diff --git a/cmd/nitro/nitro.go b/cmd/nitro/nitro.go index bc2155a475..1d54e26a01 100644 --- a/cmd/nitro/nitro.go +++ b/cmd/nitro/nitro.go @@ -231,10 +231,6 @@ func mainImpl() int { nodeConfig.Node.ParentChainReader.Enable = true } - if nodeConfig.Execution.Sequencer.Enable && nodeConfig.Node.ParentChainReader.Enable && nodeConfig.Node.InboxReader.HardReorg { - flag.Usage() - log.Crit("hard reorgs cannot safely be enabled with sequencer mode enabled") - } if nodeConfig.Execution.Sequencer.Enable != nodeConfig.Node.Sequencer { log.Error("consensus and execution must agree if sequencing is enabled or not", "Execution.Sequencer.Enable", nodeConfig.Execution.Sequencer.Enable, "Node.Sequencer", nodeConfig.Node.Sequencer) } diff --git a/system_tests/seqinbox_test.go b/system_tests/seqinbox_test.go index a9f66b0e2f..e0da2d4f3f 100644 --- a/system_tests/seqinbox_test.go +++ b/system_tests/seqinbox_test.go @@ -139,7 +139,6 @@ func testSequencerInboxReaderImpl(t *testing.T, validator bool) { defer cancel() builder := NewNodeBuilder(ctx).DefaultConfig(t, true) - builder.nodeConfig.InboxReader.HardReorg = true if validator { builder.nodeConfig.BlockValidator.Enable = true } From 94a07f076e0e264387c28303755e4e53f2b2cb0e Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 4 Oct 2024 12:35:17 -0300 Subject: [PATCH 009/187] TestSequencerReorgFromDelayed --- arbnode/delayed_seq_reorg_test.go | 209 ++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 arbnode/delayed_seq_reorg_test.go diff --git a/arbnode/delayed_seq_reorg_test.go b/arbnode/delayed_seq_reorg_test.go new file mode 100644 index 0000000000..78e7fe42ce --- /dev/null +++ b/arbnode/delayed_seq_reorg_test.go @@ -0,0 +1,209 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE + +package arbnode + +import ( + "context" + "encoding/binary" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbos/arbostypes" + "github.com/offchainlabs/nitro/solgen/go/bridgegen" +) + +func TestSequencerReorgFromDelayed(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + exec, streamer, db, _ := NewTransactionStreamerForTest(t, common.Address{}) + tracker, err := NewInboxTracker(db, streamer, nil, DefaultSnapSyncConfig) + Require(t, err) + + err = streamer.Start(ctx) + Require(t, err) + exec.Start(ctx) + init, err := streamer.GetMessage(0) + Require(t, err) + + initMsgDelayed := &DelayedInboxMessage{ + BlockHash: [32]byte{}, + BeforeInboxAcc: [32]byte{}, + Message: init.Message, + } + delayedRequestId := common.BigToHash(common.Big1) + userDelayed := &DelayedInboxMessage{ + BlockHash: [32]byte{}, + BeforeInboxAcc: initMsgDelayed.AfterInboxAcc(), + Message: &arbostypes.L1IncomingMessage{ + Header: &arbostypes.L1IncomingMessageHeader{ + Kind: arbostypes.L1MessageType_EndOfBlock, + Poster: [20]byte{}, + BlockNumber: 0, + Timestamp: 0, + RequestId: &delayedRequestId, + L1BaseFee: common.Big0, + }, + }, + } + delayedRequestId2 := common.BigToHash(common.Big2) + userDelayed2 := &DelayedInboxMessage{ + BlockHash: [32]byte{}, + BeforeInboxAcc: userDelayed.AfterInboxAcc(), + Message: &arbostypes.L1IncomingMessage{ + Header: &arbostypes.L1IncomingMessageHeader{ + Kind: arbostypes.L1MessageType_EndOfBlock, + Poster: [20]byte{}, + BlockNumber: 0, + Timestamp: 0, + RequestId: &delayedRequestId2, + L1BaseFee: common.Big0, + }, + }, + } + err = tracker.AddDelayedMessages([]*DelayedInboxMessage{initMsgDelayed, userDelayed, userDelayed2}) + Require(t, err) + + serializedInitMsgBatch := make([]byte, 40) + binary.BigEndian.PutUint64(serializedInitMsgBatch[32:], 1) + initMsgBatch := &SequencerInboxBatch{ + BlockHash: [32]byte{}, + ParentChainBlockNumber: 0, + SequenceNumber: 0, + BeforeInboxAcc: [32]byte{}, + AfterInboxAcc: [32]byte{1}, + AfterDelayedAcc: initMsgDelayed.AfterInboxAcc(), + AfterDelayedCount: 1, + TimeBounds: bridgegen.IBridgeTimeBounds{}, + rawLog: types.Log{}, + dataLocation: 0, + bridgeAddress: [20]byte{}, + serialized: serializedInitMsgBatch, + } + serializedUserMsgBatch := make([]byte, 40) + binary.BigEndian.PutUint64(serializedUserMsgBatch[32:], 2) + userMsgBatch := &SequencerInboxBatch{ + BlockHash: [32]byte{}, + ParentChainBlockNumber: 0, + SequenceNumber: 1, + BeforeInboxAcc: [32]byte{1}, + AfterInboxAcc: [32]byte{2}, + AfterDelayedAcc: userDelayed2.AfterInboxAcc(), + AfterDelayedCount: 3, + TimeBounds: bridgegen.IBridgeTimeBounds{}, + rawLog: types.Log{}, + dataLocation: 0, + bridgeAddress: [20]byte{}, + serialized: serializedUserMsgBatch, + } + emptyBatch := &SequencerInboxBatch{ + BlockHash: [32]byte{}, + ParentChainBlockNumber: 0, + SequenceNumber: 2, + BeforeInboxAcc: [32]byte{2}, + AfterInboxAcc: [32]byte{3}, + AfterDelayedAcc: userDelayed2.AfterInboxAcc(), + AfterDelayedCount: 3, + TimeBounds: bridgegen.IBridgeTimeBounds{}, + rawLog: types.Log{}, + dataLocation: 0, + bridgeAddress: [20]byte{}, + serialized: serializedUserMsgBatch, + } + err = tracker.AddSequencerBatches(ctx, nil, []*SequencerInboxBatch{initMsgBatch, userMsgBatch, emptyBatch}) + Require(t, err) + + msgCount, err := streamer.GetMessageCount() + Require(t, err) + if msgCount != 3 { + Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 3)") + } + + delayedCount, err := tracker.GetDelayedCount() + Require(t, err) + if delayedCount != 3 { + Fail(t, "Unexpected tracker delayed message count", delayedCount, "(expected 3)") + } + + // By modifying the timestamp of the userDelayed message, and adding it again, we remove userDelayed2 message. + userDelayedModified := &DelayedInboxMessage{ + BlockHash: [32]byte{}, + BeforeInboxAcc: initMsgDelayed.AfterInboxAcc(), + Message: &arbostypes.L1IncomingMessage{ + Header: &arbostypes.L1IncomingMessageHeader{ + Kind: arbostypes.L1MessageType_EndOfBlock, + Poster: [20]byte{}, + BlockNumber: 0, + Timestamp: userDelayed.Message.Header.Timestamp + 1, + RequestId: &delayedRequestId, + L1BaseFee: common.Big0, + }, + }, + } + err = tracker.AddDelayedMessages([]*DelayedInboxMessage{userDelayedModified}) + Require(t, err) + + // userMsgBatch, and emptyBatch will be deleted since their AfterDelayedAcc are not valid anymore after the reorg + msgCount, err = streamer.GetMessageCount() + Require(t, err) + if msgCount != 1 { + Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 1)") + } + + // userDelayed2 will be deleted since its AfterDelayedAcc is not valid anymore after the reorg + delayedCount, err = tracker.GetDelayedCount() + Require(t, err) + if delayedCount != 2 { + Fail(t, "Unexpected tracker delayed message count", delayedCount, "(expected 2)") + } + + // guarantees that delayed msg 1 is userDelayedModified and not userDelayed + msg, err := tracker.GetDelayedMessage(ctx, 1) + Require(t, err) + if (*msg.Header.RequestId).Cmp(*userDelayedModified.Message.Header.RequestId) != 0 { + Fail(t, "Unexpected delayed message requestId", msg.Header.RequestId, "(expected", userDelayedModified.Message.Header.RequestId, ")") + } + if msg.Header.Timestamp != userDelayedModified.Message.Header.Timestamp { + Fail(t, "Unexpected delayed message timestamp", msg.Header.Timestamp, "(expected", userDelayedModified.Message.Header.Timestamp, ")") + } + if userDelayedModified.Message.Header.Timestamp == userDelayed.Message.Header.Timestamp { + Fail(t, "Unexpected delayed message timestamp", userDelayedModified.Message.Header.Timestamp, "(expected", userDelayed.Message.Header.Timestamp, ")") + } + + batchCount, err := tracker.GetBatchCount() + Require(t, err) + if batchCount != 1 { + Fail(t, "Unexpected tracker batch count", batchCount, "(expected 1)") + } + + emptyBatch = &SequencerInboxBatch{ + BlockHash: [32]byte{}, + ParentChainBlockNumber: 0, + SequenceNumber: 1, + BeforeInboxAcc: [32]byte{1}, + AfterInboxAcc: [32]byte{2}, + AfterDelayedAcc: initMsgDelayed.AfterInboxAcc(), + AfterDelayedCount: 1, + TimeBounds: bridgegen.IBridgeTimeBounds{}, + rawLog: types.Log{}, + dataLocation: 0, + bridgeAddress: [20]byte{}, + serialized: serializedInitMsgBatch, + } + err = tracker.AddSequencerBatches(ctx, nil, []*SequencerInboxBatch{emptyBatch}) + Require(t, err) + + msgCount, err = streamer.GetMessageCount() + Require(t, err) + if msgCount != 2 { + Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 2)") + } + + batchCount, err = tracker.GetBatchCount() + Require(t, err) + if batchCount != 2 { + Fail(t, "Unexpected tracker batch count", batchCount, "(expected 2)") + } +} From 176ffb3fe03770d0909a60d3827bf4170bcf56cf Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 4 Oct 2024 13:00:22 -0300 Subject: [PATCH 010/187] Fix lint issue --- arbnode/delayed_seq_reorg_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbnode/delayed_seq_reorg_test.go b/arbnode/delayed_seq_reorg_test.go index 78e7fe42ce..ae7775cda9 100644 --- a/arbnode/delayed_seq_reorg_test.go +++ b/arbnode/delayed_seq_reorg_test.go @@ -162,7 +162,7 @@ func TestSequencerReorgFromDelayed(t *testing.T) { // guarantees that delayed msg 1 is userDelayedModified and not userDelayed msg, err := tracker.GetDelayedMessage(ctx, 1) Require(t, err) - if (*msg.Header.RequestId).Cmp(*userDelayedModified.Message.Header.RequestId) != 0 { + if msg.Header.RequestId.Cmp(*userDelayedModified.Message.Header.RequestId) != 0 { Fail(t, "Unexpected delayed message requestId", msg.Header.RequestId, "(expected", userDelayedModified.Message.Header.RequestId, ")") } if msg.Header.Timestamp != userDelayedModified.Message.Header.Timestamp { From 4f8f8621fde2bc793b860ea1ab7a8827e314214c Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 4 Oct 2024 16:04:58 -0300 Subject: [PATCH 011/187] Improves TestSequencerReorgFromDelayed --- arbnode/delayed_seq_reorg_test.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/arbnode/delayed_seq_reorg_test.go b/arbnode/delayed_seq_reorg_test.go index ae7775cda9..17f4756a53 100644 --- a/arbnode/delayed_seq_reorg_test.go +++ b/arbnode/delayed_seq_reorg_test.go @@ -127,7 +127,13 @@ func TestSequencerReorgFromDelayed(t *testing.T) { Fail(t, "Unexpected tracker delayed message count", delayedCount, "(expected 3)") } - // By modifying the timestamp of the userDelayed message, and adding it again, we remove userDelayed2 message. + batchCount, err := tracker.GetBatchCount() + Require(t, err) + if batchCount != 3 { + Fail(t, "Unexpected tracker batch count", batchCount, "(expected 3)") + } + + // By modifying the timestamp of the userDelayed message, and adding it again, we cause a reorg userDelayedModified := &DelayedInboxMessage{ BlockHash: [32]byte{}, BeforeInboxAcc: initMsgDelayed.AfterInboxAcc(), @@ -145,14 +151,20 @@ func TestSequencerReorgFromDelayed(t *testing.T) { err = tracker.AddDelayedMessages([]*DelayedInboxMessage{userDelayedModified}) Require(t, err) - // userMsgBatch, and emptyBatch will be deleted since their AfterDelayedAcc are not valid anymore after the reorg + // userMsgBatch, and emptyBatch will be reorged out msgCount, err = streamer.GetMessageCount() Require(t, err) if msgCount != 1 { Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 1)") } - // userDelayed2 will be deleted since its AfterDelayedAcc is not valid anymore after the reorg + batchCount, err = tracker.GetBatchCount() + Require(t, err) + if batchCount != 1 { + Fail(t, "Unexpected tracker batch count", batchCount, "(expected 1)") + } + + // userDelayed2 will be deleted delayedCount, err = tracker.GetDelayedCount() Require(t, err) if delayedCount != 2 { @@ -172,12 +184,6 @@ func TestSequencerReorgFromDelayed(t *testing.T) { Fail(t, "Unexpected delayed message timestamp", userDelayedModified.Message.Header.Timestamp, "(expected", userDelayed.Message.Header.Timestamp, ")") } - batchCount, err := tracker.GetBatchCount() - Require(t, err) - if batchCount != 1 { - Fail(t, "Unexpected tracker batch count", batchCount, "(expected 1)") - } - emptyBatch = &SequencerInboxBatch{ BlockHash: [32]byte{}, ParentChainBlockNumber: 0, From fa075bff1b3818e5bab8f7fe69c6fe140ceb178e Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Wed, 9 Oct 2024 10:48:50 -0300 Subject: [PATCH 012/187] TestSequencerReorgFromLastDelayedMsg --- arbnode/delayed_seq_reorg_test.go | 200 ++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) diff --git a/arbnode/delayed_seq_reorg_test.go b/arbnode/delayed_seq_reorg_test.go index 17f4756a53..86506a7f62 100644 --- a/arbnode/delayed_seq_reorg_test.go +++ b/arbnode/delayed_seq_reorg_test.go @@ -213,3 +213,203 @@ func TestSequencerReorgFromDelayed(t *testing.T) { Fail(t, "Unexpected tracker batch count", batchCount, "(expected 2)") } } + +func TestSequencerReorgFromLastDelayedMsg(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + exec, streamer, db, _ := NewTransactionStreamerForTest(t, common.Address{}) + tracker, err := NewInboxTracker(db, streamer, nil, DefaultSnapSyncConfig) + Require(t, err) + + err = streamer.Start(ctx) + Require(t, err) + exec.Start(ctx) + init, err := streamer.GetMessage(0) + Require(t, err) + + initMsgDelayed := &DelayedInboxMessage{ + BlockHash: [32]byte{}, + BeforeInboxAcc: [32]byte{}, + Message: init.Message, + } + delayedRequestId := common.BigToHash(common.Big1) + userDelayed := &DelayedInboxMessage{ + BlockHash: [32]byte{}, + BeforeInboxAcc: initMsgDelayed.AfterInboxAcc(), + Message: &arbostypes.L1IncomingMessage{ + Header: &arbostypes.L1IncomingMessageHeader{ + Kind: arbostypes.L1MessageType_EndOfBlock, + Poster: [20]byte{}, + BlockNumber: 0, + Timestamp: 0, + RequestId: &delayedRequestId, + L1BaseFee: common.Big0, + }, + }, + } + delayedRequestId2 := common.BigToHash(common.Big2) + userDelayed2 := &DelayedInboxMessage{ + BlockHash: [32]byte{}, + BeforeInboxAcc: userDelayed.AfterInboxAcc(), + Message: &arbostypes.L1IncomingMessage{ + Header: &arbostypes.L1IncomingMessageHeader{ + Kind: arbostypes.L1MessageType_EndOfBlock, + Poster: [20]byte{}, + BlockNumber: 0, + Timestamp: 0, + RequestId: &delayedRequestId2, + L1BaseFee: common.Big0, + }, + }, + } + err = tracker.AddDelayedMessages([]*DelayedInboxMessage{initMsgDelayed, userDelayed, userDelayed2}) + Require(t, err) + + serializedInitMsgBatch := make([]byte, 40) + binary.BigEndian.PutUint64(serializedInitMsgBatch[32:], 1) + initMsgBatch := &SequencerInboxBatch{ + BlockHash: [32]byte{}, + ParentChainBlockNumber: 0, + SequenceNumber: 0, + BeforeInboxAcc: [32]byte{}, + AfterInboxAcc: [32]byte{1}, + AfterDelayedAcc: initMsgDelayed.AfterInboxAcc(), + AfterDelayedCount: 1, + TimeBounds: bridgegen.IBridgeTimeBounds{}, + rawLog: types.Log{}, + dataLocation: 0, + bridgeAddress: [20]byte{}, + serialized: serializedInitMsgBatch, + } + serializedUserMsgBatch := make([]byte, 40) + binary.BigEndian.PutUint64(serializedUserMsgBatch[32:], 2) + userMsgBatch := &SequencerInboxBatch{ + BlockHash: [32]byte{}, + ParentChainBlockNumber: 0, + SequenceNumber: 1, + BeforeInboxAcc: [32]byte{1}, + AfterInboxAcc: [32]byte{2}, + AfterDelayedAcc: userDelayed2.AfterInboxAcc(), + AfterDelayedCount: 3, + TimeBounds: bridgegen.IBridgeTimeBounds{}, + rawLog: types.Log{}, + dataLocation: 0, + bridgeAddress: [20]byte{}, + serialized: serializedUserMsgBatch, + } + emptyBatch := &SequencerInboxBatch{ + BlockHash: [32]byte{}, + ParentChainBlockNumber: 0, + SequenceNumber: 2, + BeforeInboxAcc: [32]byte{2}, + AfterInboxAcc: [32]byte{3}, + AfterDelayedAcc: userDelayed2.AfterInboxAcc(), + AfterDelayedCount: 3, + TimeBounds: bridgegen.IBridgeTimeBounds{}, + rawLog: types.Log{}, + dataLocation: 0, + bridgeAddress: [20]byte{}, + serialized: serializedUserMsgBatch, + } + err = tracker.AddSequencerBatches(ctx, nil, []*SequencerInboxBatch{initMsgBatch, userMsgBatch, emptyBatch}) + Require(t, err) + + msgCount, err := streamer.GetMessageCount() + Require(t, err) + if msgCount != 3 { + Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 3)") + } + + delayedCount, err := tracker.GetDelayedCount() + Require(t, err) + if delayedCount != 3 { + Fail(t, "Unexpected tracker delayed message count", delayedCount, "(expected 3)") + } + + batchCount, err := tracker.GetBatchCount() + Require(t, err) + if batchCount != 3 { + Fail(t, "Unexpected tracker batch count", batchCount, "(expected 3)") + } + + // By modifying the timestamp of the userDelayed2 message, and adding it again, we cause a reorg + userDelayed2Modified := &DelayedInboxMessage{ + BlockHash: [32]byte{}, + BeforeInboxAcc: userDelayed.AfterInboxAcc(), + Message: &arbostypes.L1IncomingMessage{ + Header: &arbostypes.L1IncomingMessageHeader{ + Kind: arbostypes.L1MessageType_EndOfBlock, + Poster: [20]byte{}, + BlockNumber: 0, + Timestamp: userDelayed2.Message.Header.Timestamp + 1, + RequestId: &delayedRequestId2, + L1BaseFee: common.Big0, + }, + }, + } + err = tracker.AddDelayedMessages([]*DelayedInboxMessage{userDelayed2Modified}) + Require(t, err) + + // FAILS HERE + // userMsgBatch, and emptyBatch will be reorged out + msgCount, err = streamer.GetMessageCount() + Require(t, err) + if msgCount != 1 { + Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 1)") + } + + batchCount, err = tracker.GetBatchCount() + Require(t, err) + if batchCount != 1 { + Fail(t, "Unexpected tracker batch count", batchCount, "(expected 1)") + } + + delayedCount, err = tracker.GetDelayedCount() + Require(t, err) + if delayedCount != 3 { + Fail(t, "Unexpected tracker delayed message count", delayedCount, "(expected 3)") + } + + // guarantees that delayed msg 2 is userDelayedModified and not userDelayed + msg, err := tracker.GetDelayedMessage(ctx, 2) + Require(t, err) + if msg.Header.RequestId.Cmp(*userDelayed2Modified.Message.Header.RequestId) != 0 { + Fail(t, "Unexpected delayed message requestId", msg.Header.RequestId, "(expected", userDelayed2Modified.Message.Header.RequestId, ")") + } + if msg.Header.Timestamp != userDelayed2Modified.Message.Header.Timestamp { + Fail(t, "Unexpected delayed message timestamp", msg.Header.Timestamp, "(expected", userDelayed2Modified.Message.Header.Timestamp, ")") + } + if userDelayed2Modified.Message.Header.Timestamp == userDelayed2.Message.Header.Timestamp { + Fail(t, "Unexpected delayed message timestamp", userDelayed2Modified.Message.Header.Timestamp, "(expected", userDelayed2.Message.Header.Timestamp, ")") + } + + emptyBatch = &SequencerInboxBatch{ + BlockHash: [32]byte{}, + ParentChainBlockNumber: 0, + SequenceNumber: 1, + BeforeInboxAcc: [32]byte{1}, + AfterInboxAcc: [32]byte{2}, + AfterDelayedAcc: initMsgDelayed.AfterInboxAcc(), + AfterDelayedCount: 1, + TimeBounds: bridgegen.IBridgeTimeBounds{}, + rawLog: types.Log{}, + dataLocation: 0, + bridgeAddress: [20]byte{}, + serialized: serializedInitMsgBatch, + } + err = tracker.AddSequencerBatches(ctx, nil, []*SequencerInboxBatch{emptyBatch}) + Require(t, err) + + msgCount, err = streamer.GetMessageCount() + Require(t, err) + if msgCount != 2 { + Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 2)") + } + + batchCount, err = tracker.GetBatchCount() + Require(t, err) + if batchCount != 2 { + Fail(t, "Unexpected tracker batch count", batchCount, "(expected 2)") + } +} From 1bb666593d668fd93f38ffa39f71712be06d36b6 Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Tue, 15 Oct 2024 22:19:57 +0200 Subject: [PATCH 013/187] compile module only when activating or in targets list --- arbos/programs/native.go | 165 +++++++++++++++++++++--------- arbos/programs/programs.go | 4 +- arbos/programs/wasmstorehelper.go | 3 +- execution/gethexec/node.go | 3 - 4 files changed, 123 insertions(+), 52 deletions(-) diff --git a/arbos/programs/native.go b/arbos/programs/native.go index 725b302ac0..7fc3500e2e 100644 --- a/arbos/programs/native.go +++ b/arbos/programs/native.go @@ -70,7 +70,9 @@ func activateProgram( debug bool, burner burn.Burner, ) (*activationInfo, error) { - info, asmMap, err := activateProgramInternal(db, program, codehash, wasm, page_limit, stylusVersion, arbosVersionForGas, debug, burner.GasLeft()) + targets := db.Database().WasmTargets() + moduleActivationMandatory := true + info, asmMap, err := activateProgramInternal(program, codehash, wasm, page_limit, stylusVersion, arbosVersionForGas, debug, burner.GasLeft(), targets, moduleActivationMandatory) if err != nil { return nil, err } @@ -78,8 +80,7 @@ func activateProgram( return info, nil } -func activateProgramInternal( - db vm.StateDB, +func activateModule( addressForLogging common.Address, codehash common.Hash, wasm []byte, @@ -88,7 +89,7 @@ func activateProgramInternal( arbosVersionForGas uint64, debug bool, gasLeft *uint64, -) (*activationInfo, map[ethdb.WasmTarget][]byte, error) { +) (*activationInfo, []byte, error) { output := &rustBytes{} moduleHash := &bytes32{} stylusData := &C.StylusData{} @@ -106,7 +107,6 @@ func activateProgramInternal( stylusData, (*u64)(gasLeft), )) - module, msg, err := status_mod.toResult(output.intoBytes(), debug) if err != nil { if debug { @@ -114,72 +114,143 @@ func activateProgramInternal( } if errors.Is(err, vm.ErrExecutionReverted) { return nil, nil, fmt.Errorf("%w: %s", ErrProgramActivation, msg) + } else { + return nil, nil, err + } + } + info := &activationInfo{ + moduleHash: moduleHash.toHash(), + initGas: uint16(stylusData.init_cost), + cachedInitGas: uint16(stylusData.cached_init_cost), + asmEstimate: uint32(stylusData.asm_estimate), + footprint: uint16(stylusData.footprint), + } + return info, module, nil +} + +func compileNative( + wasm []byte, + stylusVersion uint16, + debug bool, + target ethdb.WasmTarget, +) ([]byte, error) { + output := &rustBytes{} + status_asm := C.stylus_compile( + goSlice(wasm), + u16(stylusVersion), + cbool(debug), + goSlice([]byte(target)), + output, + ) + asm := output.intoBytes() + if status_asm != 0 { + return nil, fmt.Errorf("%w: %s", ErrProgramActivation, string(asm)) + } + return asm, nil +} + +func activateProgramInternal( + addressForLogging common.Address, + codehash common.Hash, + wasm []byte, + page_limit uint16, + stylusVersion uint16, + arbosVersionForGas uint64, + debug bool, + gasLeft *uint64, + targets []ethdb.WasmTarget, + moduleActivationMandatory bool, +) (*activationInfo, map[ethdb.WasmTarget][]byte, error) { + var wavmFound bool + for _, target := range targets { + if target == rawdb.TargetWavm { + wavmFound = true + break } - return nil, nil, err } - hash := moduleHash.toHash() - targets := db.Database().WasmTargets() type result struct { target ethdb.WasmTarget asm []byte err error } + asmMap := make(map[ethdb.WasmTarget][]byte, len(targets)) + + // info can be set in separate thread, make sure to wait before reading + var info *activationInfo + var moduleActivationStarted bool + if moduleActivationMandatory { + moduleActivationStarted = true + var err error + var module []byte + info, module, err = activateModule(addressForLogging, codehash, wasm, page_limit, stylusVersion, arbosVersionForGas, debug, gasLeft) + if err != nil { + return nil, nil, err + } + if wavmFound { + asmMap[rawdb.TargetWavm] = module + } + } + results := make(chan result, len(targets)) for _, target := range targets { target := target if target == rawdb.TargetWavm { - results <- result{target, module, nil} + if moduleActivationStarted { + // skip if already started or activated because of moduleActivationMandatory + results <- result{target, nil, nil} + continue + } + go func() { + var err error + var module []byte + info, module, err = activateModule(addressForLogging, codehash, wasm, page_limit, stylusVersion, arbosVersionForGas, debug, gasLeft) + results <- result{target, module, err} + }() + moduleActivationStarted = true } else { go func() { - output := &rustBytes{} - status_asm := C.stylus_compile( - goSlice(wasm), - u16(stylusVersion), - cbool(debug), - goSlice([]byte(target)), - output, - ) - asm := output.intoBytes() - if status_asm != 0 { - results <- result{target, nil, fmt.Errorf("%w: %s", ErrProgramActivation, string(asm))} - return - } - results <- result{target, asm, nil} + asm, err := compileNative(wasm, stylusVersion, debug, target) + results <- result{target, asm, err} }() } } - asmMap := make(map[ethdb.WasmTarget][]byte, len(targets)) + var err error for range targets { res := <-results - if res.err != nil { - err = errors.Join(res.err, err) + if res.asm == nil { + continue + } else if res.err != nil { + err = errors.Join(res.err, fmt.Errorf("%s:%w", res.target, err)) } else { asmMap[res.target] = res.asm } } - if err != nil { - log.Error( - "Compilation failed for one or more targets despite activation succeeding", - "address", addressForLogging, - "codeHash", codeHash, - "moduleHash", hash, - "targets", targets, - "err", err, - ) + if err != nil && moduleActivationMandatory { + if info != nil { + log.Error( + "Compilation failed for one or more targets despite activation succeeding", + "address", addressForLogging, + "codehash", codehash, + "moduleHash", info.moduleHash, + "targets", targets, + "err", err, + ) + } else { + log.Error( + "Compilation failed for one or more targets despite activation succeeding", + "address", addressForLogging, + "codehash", codehash, + "targets", targets, + "err", err, + ) + } panic(fmt.Sprintf("Compilation of %v failed for one or more targets despite activation succeeding: %v", addressForLogging, err)) } - info := &activationInfo{ - moduleHash: hash, - initGas: uint16(stylusData.init_cost), - cachedInitGas: uint16(stylusData.cached_init_cost), - asmEstimate: uint32(stylusData.asm_estimate), - footprint: uint16(stylusData.footprint), - } return info, asmMap, err } -func getLocalAsm(statedb vm.StateDB, moduleHash common.Hash, addressForLogging common.Address, code []byte, codeHash common.Hash, pagelimit uint16, time uint64, debugMode bool, program Program) ([]byte, error) { +func getLocalAsm(statedb vm.StateDB, moduleHash common.Hash, addressForLogging common.Address, code []byte, codehash common.Hash, pagelimit uint16, time uint64, debugMode bool, program Program) ([]byte, error) { localTarget := rawdb.LocalTarget() localAsm, err := statedb.TryGetActivatedAsm(localTarget, moduleHash) if err == nil && len(localAsm) > 0 { @@ -197,8 +268,10 @@ func getLocalAsm(statedb vm.StateDB, moduleHash common.Hash, addressForLogging c zeroArbosVersion := uint64(0) zeroGas := uint64(0) + targets := statedb.Database().WasmTargets() // we know program is activated, so it must be in correct version and not use too much memory - info, asmMap, err := activateProgramInternal(statedb, addressForLogging, codeHash, wasm, pagelimit, program.version, zeroArbosVersion, debugMode, &zeroGas) + moduleActivationMandatory := false + info, asmMap, err := activateProgramInternal(addressForLogging, codehash, wasm, pagelimit, program.version, zeroArbosVersion, debugMode, &zeroGas, targets, moduleActivationMandatory) if err != nil { log.Error("failed to reactivate program", "address", addressForLogging, "expected moduleHash", moduleHash, "err", err) return nil, fmt.Errorf("failed to reactivate program address: %v err: %w", addressForLogging, err) @@ -300,10 +373,10 @@ func handleReqImpl(apiId usize, req_type u32, data *rustSlice, costPtr *u64, out // Caches a program in Rust. We write a record so that we can undo on revert. // For gas estimation and eth_call, we ignore permanent updates and rely on Rust's LRU. -func cacheProgram(db vm.StateDB, module common.Hash, program Program, addressForLogging common.Address, code []byte, codeHash common.Hash, params *StylusParams, debug bool, time uint64, runMode core.MessageRunMode) { +func cacheProgram(db vm.StateDB, module common.Hash, program Program, addressForLogging common.Address, code []byte, codehash common.Hash, params *StylusParams, debug bool, time uint64, runMode core.MessageRunMode) { if runMode == core.MessageCommitMode { // address is only used for logging - asm, err := getLocalAsm(db, module, addressForLogging, code, codeHash, params.PageLimit, time, debug, program) + asm, err := getLocalAsm(db, module, addressForLogging, code, codehash, params.PageLimit, time, debug, program) if err != nil { panic("unable to recreate wasm") } diff --git a/arbos/programs/programs.go b/arbos/programs/programs.go index 06ff4137da..5861181bff 100644 --- a/arbos/programs/programs.go +++ b/arbos/programs/programs.go @@ -170,7 +170,7 @@ func (p Programs) CallProgram( tracingInfo *util.TracingInfo, calldata []byte, reentrant bool, - runmode core.MessageRunMode, + runMode core.MessageRunMode, ) ([]byte, error) { evm := interpreter.Evm() contract := scope.Contract @@ -246,7 +246,7 @@ func (p Programs) CallProgram( address = *contract.CodeAddr } var arbos_tag uint32 - if runmode == core.MessageCommitMode { + if runMode == core.MessageCommitMode { arbos_tag = statedb.Database().WasmCacheTag() } ret, err := callProgram(address, moduleHash, localAsm, scope, interpreter, tracingInfo, calldata, evmData, goParams, model, arbos_tag) diff --git a/arbos/programs/wasmstorehelper.go b/arbos/programs/wasmstorehelper.go index c2d1aa65b0..1393752b72 100644 --- a/arbos/programs/wasmstorehelper.go +++ b/arbos/programs/wasmstorehelper.go @@ -62,7 +62,8 @@ func (p Programs) SaveActiveProgramToWasmStore(statedb *state.StateDB, codeHash // We know program is activated, so it must be in correct version and not use too much memory // Empty program address is supplied because we dont have access to this during rebuilding of wasm store - info, asmMap, err := activateProgramInternal(statedb, common.Address{}, codeHash, wasm, progParams.PageLimit, program.version, zeroArbosVersion, debugMode, &zeroGas) + moduleActivationMandatory := false + info, asmMap, err := activateProgramInternal(common.Address{}, codeHash, wasm, progParams.PageLimit, program.version, zeroArbosVersion, debugMode, &zeroGas, targets, moduleActivationMandatory) if err != nil { log.Error("failed to reactivate program while rebuilding wasm store", "expected moduleHash", moduleHash, "err", err) return fmt.Errorf("failed to reactivate program while rebuilding wasm store: %w", err) diff --git a/execution/gethexec/node.go b/execution/gethexec/node.go index 499a13164e..79c5c8896e 100644 --- a/execution/gethexec/node.go +++ b/execution/gethexec/node.go @@ -53,9 +53,6 @@ func (c *StylusTargetConfig) Validate() error { } targetsSet[target] = true } - if !targetsSet[rawdb.TargetWavm] { - return fmt.Errorf("%s target not found in archs list, archs: %v", rawdb.TargetWavm, c.ExtraArchs) - } targetsSet[rawdb.LocalTarget()] = true targets := make([]ethdb.WasmTarget, 0, len(c.ExtraArchs)+1) for target := range targetsSet { From 17bdb495fb1f2b068b61cc3ccb27105834379edc Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Wed, 16 Oct 2024 17:41:09 -0600 Subject: [PATCH 014/187] update wasmer pin tp merge 4.3.7 --- arbitrator/tools/wasmer | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbitrator/tools/wasmer b/arbitrator/tools/wasmer index 6b15433d83..84aec79c13 160000 --- a/arbitrator/tools/wasmer +++ b/arbitrator/tools/wasmer @@ -1 +1 @@ -Subproject commit 6b15433d83f951555c24f0c56dc05e4751b0cc76 +Subproject commit 84aec79c13888bf3fb324ddbd69b3fecc22d4a8c From 0dca996a58e829253817c4284330d2708c3cec19 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Wed, 16 Oct 2024 17:42:25 -0600 Subject: [PATCH 015/187] update cargo.lock for new wasmer --- arbitrator/Cargo.lock | 61 +++++++++++++++++----------- arbitrator/wasm-libraries/Cargo.lock | 14 ++++++- 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/arbitrator/Cargo.lock b/arbitrator/Cargo.lock index 2b437968fa..9688d07229 100644 --- a/arbitrator/Cargo.lock +++ b/arbitrator/Cargo.lock @@ -747,11 +747,12 @@ dependencies = [ [[package]] name = "dashmap" -version = "5.5.3" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ "cfg-if 1.0.0", + "crossbeam-utils", "hashbrown 0.14.5", "lock_api", "once_cell", @@ -974,8 +975,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -1312,15 +1315,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - [[package]] name = "mach2" version = "0.4.2" @@ -2558,7 +2552,7 @@ dependencies = [ [[package]] name = "wasmer" -version = "4.2.8" +version = "4.3.7" dependencies = [ "bytes", "cfg-if 1.0.0", @@ -2580,12 +2574,12 @@ dependencies = [ "wasmer-types", "wasmer-vm", "wat", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "wasmer-compiler" -version = "4.2.8" +version = "4.3.7" dependencies = [ "backtrace", "bytes", @@ -2594,6 +2588,7 @@ dependencies = [ "enumset", "lazy_static", "leb128", + "libc", "memmap2 0.5.10", "more-asserts", "region", @@ -2605,12 +2600,13 @@ dependencies = [ "wasmer-types", "wasmer-vm", "wasmparser", - "winapi", + "windows-sys 0.59.0", + "xxhash-rust", ] [[package]] name = "wasmer-compiler-cranelift" -version = "4.2.8" +version = "4.3.7" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -2627,7 +2623,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-llvm" -version = "4.2.8" +version = "4.3.7" dependencies = [ "byteorder", "cc", @@ -2649,7 +2645,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-singlepass" -version = "4.2.8" +version = "4.3.7" dependencies = [ "byteorder", "dynasm", @@ -2666,7 +2662,7 @@ dependencies = [ [[package]] name = "wasmer-derive" -version = "4.2.8" +version = "4.3.7" dependencies = [ "proc-macro-error", "proc-macro2", @@ -2676,21 +2672,25 @@ dependencies = [ [[package]] name = "wasmer-types" -version = "4.2.8" +version = "4.3.7" dependencies = [ "bytecheck", "enum-iterator 0.7.0", "enumset", + "getrandom", + "hex", "indexmap 1.9.3", "more-asserts", "rkyv", + "sha2 0.10.8", "target-lexicon", "thiserror", + "xxhash-rust", ] [[package]] name = "wasmer-vm" -version = "4.2.8" +version = "4.3.7" dependencies = [ "backtrace", "cc", @@ -2704,14 +2704,14 @@ dependencies = [ "indexmap 1.9.3", "lazy_static", "libc", - "mach", + "mach2", "memoffset", "more-asserts", "region", "scopeguard", "thiserror", "wasmer-types", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -2830,6 +2830,15 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -2942,6 +2951,12 @@ dependencies = [ "tap", ] +[[package]] +name = "xxhash-rust" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" + [[package]] name = "zerocopy" version = "0.6.6" diff --git a/arbitrator/wasm-libraries/Cargo.lock b/arbitrator/wasm-libraries/Cargo.lock index a5a066e5c9..e62acf43a6 100644 --- a/arbitrator/wasm-libraries/Cargo.lock +++ b/arbitrator/wasm-libraries/Cargo.lock @@ -518,8 +518,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -1633,16 +1635,20 @@ dependencies = [ [[package]] name = "wasmer-types" -version = "4.2.8" +version = "4.3.7" dependencies = [ "bytecheck", "enum-iterator 0.7.0", "enumset", + "getrandom", + "hex", "indexmap 1.9.3", "more-asserts", "rkyv", + "sha2 0.10.8", "target-lexicon", "thiserror", + "xxhash-rust", ] [[package]] @@ -1803,6 +1809,12 @@ dependencies = [ "tap", ] +[[package]] +name = "xxhash-rust" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" + [[package]] name = "zerocopy" version = "0.7.35" From 80bfa33f29555b73fca061906768c399f71916a0 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Tue, 22 Oct 2024 09:38:23 -0500 Subject: [PATCH 016/187] Fix setDelayedCountReorgAndWriteBatch --- arbnode/inbox_tracker.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/arbnode/inbox_tracker.go b/arbnode/inbox_tracker.go index 0eed2f5e1a..ffd7ed9ab8 100644 --- a/arbnode/inbox_tracker.go +++ b/arbnode/inbox_tracker.go @@ -462,6 +462,7 @@ func (t *InboxTracker) AddDelayedMessages(messages []*DelayedInboxMessage) error } } + firstPos := pos batch := t.db.NewBatch() for _, message := range messages { seqNum, err := message.Message.Header.SeqNum() @@ -504,13 +505,16 @@ func (t *InboxTracker) AddDelayedMessages(messages []*DelayedInboxMessage) error pos++ } - return t.setDelayedCountReorgAndWriteBatch(batch, pos, true) + return t.setDelayedCountReorgAndWriteBatch(batch, firstPos, pos, true) } // All-in-one delayed message count adjuster. Can go forwards or backwards. // Requires the mutex is held. Sets the delayed count and performs any sequencer batch reorg necessary. // Also deletes any future delayed messages. -func (t *InboxTracker) setDelayedCountReorgAndWriteBatch(batch ethdb.Batch, newDelayedCount uint64, canReorgBatches bool) error { +func (t *InboxTracker) setDelayedCountReorgAndWriteBatch(batch ethdb.Batch, firstNewDelayedMessagePos uint64, newDelayedCount uint64, canReorgBatches bool) error { + if firstNewDelayedMessagePos > newDelayedCount { + return fmt.Errorf("firstNewDelayedMessagePos %v is after newDelayedCount %v", firstNewDelayedMessagePos, newDelayedCount) + } err := deleteStartingAt(t.db, batch, rlpDelayedMessagePrefix, uint64ToKey(newDelayedCount)) if err != nil { return err @@ -533,7 +537,7 @@ func (t *InboxTracker) setDelayedCountReorgAndWriteBatch(batch ethdb.Batch, newD return err } - seqBatchIter := t.db.NewIterator(delayedSequencedPrefix, uint64ToKey(newDelayedCount+1)) + seqBatchIter := t.db.NewIterator(delayedSequencedPrefix, uint64ToKey(firstNewDelayedMessagePos+1)) defer seqBatchIter.Release() var reorgSeqBatchesToCount *uint64 for seqBatchIter.Next() { @@ -865,7 +869,7 @@ func (t *InboxTracker) ReorgDelayedTo(count uint64) error { return errors.New("attempted to reorg to future delayed count") } - return t.setDelayedCountReorgAndWriteBatch(t.db.NewBatch(), count, false) + return t.setDelayedCountReorgAndWriteBatch(t.db.NewBatch(), count, count, false) } func (t *InboxTracker) ReorgBatchesTo(count uint64) error { From 241aed530dd4de0592ddc5f626a204211402ed96 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Tue, 22 Oct 2024 20:04:10 -0500 Subject: [PATCH 017/187] Address PR comment and update test --- arbnode/delayed_seq_reorg_test.go | 33 +++++++++++++++++++++++++++++-- arbnode/inbox_tracker.go | 16 +++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/arbnode/delayed_seq_reorg_test.go b/arbnode/delayed_seq_reorg_test.go index 86506a7f62..6cec1e0904 100644 --- a/arbnode/delayed_seq_reorg_test.go +++ b/arbnode/delayed_seq_reorg_test.go @@ -333,6 +333,37 @@ func TestSequencerReorgFromLastDelayedMsg(t *testing.T) { Fail(t, "Unexpected tracker batch count", batchCount, "(expected 3)") } + // Adding an already existing message alongside a new one shouldn't cause a reorg + delayedRequestId3 := common.BigToHash(common.Big3) + userDelayed3 := &DelayedInboxMessage{ + BlockHash: [32]byte{}, + BeforeInboxAcc: userDelayed2.AfterInboxAcc(), + Message: &arbostypes.L1IncomingMessage{ + Header: &arbostypes.L1IncomingMessageHeader{ + Kind: arbostypes.L1MessageType_EndOfBlock, + Poster: [20]byte{}, + BlockNumber: 0, + Timestamp: 0, + RequestId: &delayedRequestId3, + L1BaseFee: common.Big0, + }, + }, + } + err = tracker.AddDelayedMessages([]*DelayedInboxMessage{userDelayed2, userDelayed3}) + Require(t, err) + + msgCount, err = streamer.GetMessageCount() + Require(t, err) + if msgCount != 3 { + Fail(t, "Unexpected tx streamer message count", msgCount, "(expected 3)") + } + + batchCount, err = tracker.GetBatchCount() + Require(t, err) + if batchCount != 3 { + Fail(t, "Unexpected tracker batch count", batchCount, "(expected 3)") + } + // By modifying the timestamp of the userDelayed2 message, and adding it again, we cause a reorg userDelayed2Modified := &DelayedInboxMessage{ BlockHash: [32]byte{}, @@ -351,8 +382,6 @@ func TestSequencerReorgFromLastDelayedMsg(t *testing.T) { err = tracker.AddDelayedMessages([]*DelayedInboxMessage{userDelayed2Modified}) Require(t, err) - // FAILS HERE - // userMsgBatch, and emptyBatch will be reorged out msgCount, err = streamer.GetMessageCount() Require(t, err) if msgCount != 1 { diff --git a/arbnode/inbox_tracker.go b/arbnode/inbox_tracker.go index ffd7ed9ab8..04b60924d5 100644 --- a/arbnode/inbox_tracker.go +++ b/arbnode/inbox_tracker.go @@ -479,6 +479,22 @@ func (t *InboxTracker) AddDelayedMessages(messages []*DelayedInboxMessage) error } nextAcc = message.AfterInboxAcc() + if firstPos == pos { + // Check if this message is a duplicate + haveAcc, err := t.GetDelayedAcc(seqNum) + if err == nil { + if haveAcc == nextAcc { + // Skip this message, as we already have it in our database + pos++ + firstPos++ + messages = messages[1:] + continue + } + } else if !errors.Is(err, AccumulatorNotFoundErr) { + return err + } + } + delayedMsgKey := dbKey(rlpDelayedMessagePrefix, seqNum) msgData, err := rlp.EncodeToBytes(message.Message) From 81155d85bee23c6a0783a7f24bff5bbca67c058a Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Wed, 23 Oct 2024 16:44:58 +0200 Subject: [PATCH 018/187] system_tests: fix checkWasmStoreContent helper --- system_tests/common_test.go | 4 +++- system_tests/program_test.go | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/system_tests/common_test.go b/system_tests/common_test.go index 027a41d875..21eaf89cd7 100644 --- a/system_tests/common_test.go +++ b/system_tests/common_test.go @@ -1322,6 +1322,7 @@ func createNonL1BlockChainWithStackConfig( if execConfig == nil { execConfig = ExecConfigDefaultTest(t) } + Require(t, execConfig.Validate()) stack, err := node.New(stackConfig) Require(t, err) @@ -1409,6 +1410,8 @@ func Create2ndNodeWithConfig( if execConfig == nil { execConfig = ExecConfigDefaultNonSequencerTest(t) } + Require(t, execConfig.Validate()) + feedErrChan := make(chan error, 10) parentChainRpcClient := parentChainStack.Attach() parentChainClient := ethclient.NewClient(parentChainRpcClient) @@ -1442,7 +1445,6 @@ func Create2ndNodeWithConfig( AddValNodeIfNeeded(t, ctx, nodeConfig, true, "", valnodeConfig.Wasm.RootPath) - Require(t, execConfig.Validate()) Require(t, nodeConfig.Validate()) configFetcher := func() *gethexec.Config { return execConfig } currentExec, err := gethexec.CreateExecutionNode(ctx, chainStack, chainDb, blockchain, parentChainClient, configFetcher) diff --git a/system_tests/program_test.go b/system_tests/program_test.go index 4c896d1791..156d9d3638 100644 --- a/system_tests/program_test.go +++ b/system_tests/program_test.go @@ -1991,6 +1991,7 @@ func readModuleHashes(t *testing.T, wasmDb ethdb.KeyValueStore) []common.Hash { } func checkWasmStoreContent(t *testing.T, wasmDb ethdb.KeyValueStore, targets []string, numModules int) { + t.Helper() modules := readModuleHashes(t, wasmDb) if len(modules) != numModules { t.Fatalf("Unexpected number of module hashes found in wasm store, want: %d, have: %d", numModules, len(modules)) @@ -2002,12 +2003,16 @@ func checkWasmStoreContent(t *testing.T, wasmDb ethdb.KeyValueStore, targets []s t.Fatalf("internal test error - unsupported target passed to checkWasmStoreContent: %v", target) } func() { + t.Helper() defer func() { if r := recover(); r != nil { t.Fatalf("Failed to read activated asm for target: %v, module: %v", target, module) } }() - _ = rawdb.ReadActivatedAsm(wasmDb, wasmTarget, module) + asm := rawdb.ReadActivatedAsm(wasmDb, wasmTarget, module) + if len(asm) == 0 { + t.Fatalf("Missing activated asm for target: %v, module: %v", target, module) + } }() } } From 8914c571031897357d203632cab0b0f558b65901 Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Wed, 23 Oct 2024 19:32:40 +0200 Subject: [PATCH 019/187] run some tests with single wasm target --- system_tests/program_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/system_tests/program_test.go b/system_tests/program_test.go index 156d9d3638..342807cbe2 100644 --- a/system_tests/program_test.go +++ b/system_tests/program_test.go @@ -58,6 +58,12 @@ func TestProgramKeccak(t *testing.T) { builder.WithExtraArchs(allWasmTargets) }) }) + + t.Run("WithOnlyLocalTarget", func(t *testing.T) { + keccakTest(t, true, func(builder *NodeBuilder) { + builder.WithExtraArchs([]string{string(rawdb.LocalTarget())}) + }) + }) } func keccakTest(t *testing.T, jit bool, builderOpts ...func(*NodeBuilder)) { @@ -163,6 +169,11 @@ func TestProgramActivateTwice(t *testing.T) { builder.WithExtraArchs(allWasmTargets) }) }) + t.Run("WithOnlyLocalTarget", func(t *testing.T) { + testActivateTwice(t, true, func(builder *NodeBuilder) { + builder.WithExtraArchs([]string{string(rawdb.LocalTarget())}) + }) + }) } func testActivateTwice(t *testing.T, jit bool, builderOpts ...func(*NodeBuilder)) { From 1abc820181760f4b0ceddc4b16deaf27d6744756 Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Wed, 23 Oct 2024 21:54:35 +0200 Subject: [PATCH 020/187] system_tests: check for unexpected extra asm in checkWasmStoreContent --- system_tests/program_test.go | 63 ++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/system_tests/program_test.go b/system_tests/program_test.go index 342807cbe2..65710a86a8 100644 --- a/system_tests/program_test.go +++ b/system_tests/program_test.go @@ -74,7 +74,7 @@ func keccakTest(t *testing.T, jit bool, builderOpts ...func(*NodeBuilder)) { programAddress := deployWasm(t, ctx, auth, l2client, rustFile("keccak")) wasmDb := builder.L2.ExecNode.Backend.ArbInterface().BlockChain().StateCache().WasmStore() - checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.ExtraArchs, 1) + checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.WasmTargets(), 1) wasm, _ := readWasmFile(t, rustFile("keccak")) otherAddressSameCode := deployContract(t, ctx, auth, l2client, wasm) @@ -87,7 +87,7 @@ func keccakTest(t *testing.T, jit bool, builderOpts ...func(*NodeBuilder)) { Fatal(t, "activate should have failed with ProgramUpToDate", err) } }) - checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.ExtraArchs, 1) + checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.WasmTargets(), 1) if programAddress == otherAddressSameCode { Fatal(t, "expected to deploy at two separate program addresses") @@ -205,7 +205,7 @@ func testActivateTwice(t *testing.T, jit bool, builderOpts ...func(*NodeBuilder) multiAddr := deployWasm(t, ctx, auth, l2client, rustFile("multicall")) wasmDb := builder.L2.ExecNode.Backend.ArbInterface().BlockChain().StateCache().WasmStore() - checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.ExtraArchs, 1) + checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.WasmTargets(), 1) preimage := []byte("it's time to du-du-du-du d-d-d-d-d-d-d de-duplicate") @@ -230,7 +230,7 @@ func testActivateTwice(t *testing.T, jit bool, builderOpts ...func(*NodeBuilder) // Calling the contract pre-activation should fail. checkReverts() - checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.ExtraArchs, 1) + checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.WasmTargets(), 1) // mechanisms for creating calldata activateProgram, _ := util.NewCallParser(pgen.ArbWasmABI, "activateProgram") @@ -253,7 +253,7 @@ func testActivateTwice(t *testing.T, jit bool, builderOpts ...func(*NodeBuilder) // Ensure the revert also reverted keccak's activation checkReverts() - checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.ExtraArchs, 1) + checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.WasmTargets(), 1) // Activate keccak program A, then call into B, which should succeed due to being the same codehash args = argsForMulticall(vm.CALL, types.ArbWasmAddress, oneEth, pack(activateProgram(keccakA))) @@ -261,7 +261,7 @@ func testActivateTwice(t *testing.T, jit bool, builderOpts ...func(*NodeBuilder) tx = l2info.PrepareTxTo("Owner", &multiAddr, 1e9, oneEth, args) ensure(tx, l2client.SendTransaction(ctx, tx)) - checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.ExtraArchs, 2) + checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.WasmTargets(), 2) validateBlocks(t, 7, jit, builder) } @@ -1917,7 +1917,7 @@ func TestWasmStoreRebuilding(t *testing.T) { storeMap, err := createMapFromDb(wasmDb) Require(t, err) - checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.ExtraArchs, 1) + checkWasmStoreContent(t, wasmDb, builder.execConfig.StylusTarget.WasmTargets(), 1) // close nodeB cleanupB() @@ -1974,7 +1974,7 @@ func TestWasmStoreRebuilding(t *testing.T) { } } - checkWasmStoreContent(t, wasmDbAfterRebuild, builder.execConfig.StylusTarget.ExtraArchs, 1) + checkWasmStoreContent(t, wasmDbAfterRebuild, builder.execConfig.StylusTarget.WasmTargets(), 1) cleanupB() } @@ -2001,30 +2001,43 @@ func readModuleHashes(t *testing.T, wasmDb ethdb.KeyValueStore) []common.Hash { return modules } -func checkWasmStoreContent(t *testing.T, wasmDb ethdb.KeyValueStore, targets []string, numModules int) { +func checkWasmStoreContent(t *testing.T, wasmDb ethdb.KeyValueStore, expectedTargets []ethdb.WasmTarget, numModules int) { t.Helper() modules := readModuleHashes(t, wasmDb) if len(modules) != numModules { t.Fatalf("Unexpected number of module hashes found in wasm store, want: %d, have: %d", numModules, len(modules)) } - for _, module := range modules { - for _, target := range targets { - wasmTarget := ethdb.WasmTarget(target) - if !rawdb.IsSupportedWasmTarget(wasmTarget) { - t.Fatalf("internal test error - unsupported target passed to checkWasmStoreContent: %v", target) - } - func() { - t.Helper() - defer func() { - if r := recover(); r != nil { - t.Fatalf("Failed to read activated asm for target: %v, module: %v", target, module) - } - }() - asm := rawdb.ReadActivatedAsm(wasmDb, wasmTarget, module) - if len(asm) == 0 { - t.Fatalf("Missing activated asm for target: %v, module: %v", target, module) + readAsm := func(module common.Hash, target string) []byte { + wasmTarget := ethdb.WasmTarget(target) + if !rawdb.IsSupportedWasmTarget(wasmTarget) { + t.Fatalf("internal test error - unsupported target passed to checkWasmStoreContent: %v", target) + } + return func() []byte { + t.Helper() + defer func() { + if r := recover(); r != nil { + t.Fatalf("Failed to read activated asm for target: %v, module: %v", target, module) } }() + return rawdb.ReadActivatedAsm(wasmDb, wasmTarget, module) + }() + } + for _, module := range modules { + for _, target := range allWasmTargets { + var expected bool + for _, expectedTarget := range expectedTargets { + if ethdb.WasmTarget(target) == expectedTarget { + expected = true + break + } + } + asm := readAsm(module, target) + if expected && len(asm) == 0 { + t.Fatalf("Missing asm for target: %v, module: %v", target, module) + } + if !expected && len(asm) > 0 { + t.Fatalf("Found asm for target: %v, module: %v, expected targets: %v", target, module, expectedTargets) + } } } } From bde52acec9e52d84228419da74177353a090e275 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Tue, 29 Oct 2024 20:51:50 +0530 Subject: [PATCH 021/187] fix linter --- arbnode/node.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbnode/node.go b/arbnode/node.go index 46fbec4b61..51c41d684b 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -787,7 +787,7 @@ func createNodeImpl( }, nil } -func FindBlockContainingBatchCount(ctx context.Context, bridgeAddress common.Address, l1Client arbutil.L1Interface, parentChainAssertionBlock uint64, batchCount uint64) (uint64, error) { +func FindBlockContainingBatchCount(ctx context.Context, bridgeAddress common.Address, l1Client *ethclient.Client, parentChainAssertionBlock uint64, batchCount uint64) (uint64, error) { bridge, err := bridgegen.NewIBridge(bridgeAddress, l1Client) if err != nil { return 0, err From 233c3248c94d6cc2707a021c8068a8267f13d594 Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Wed, 13 Nov 2024 18:09:58 +0100 Subject: [PATCH 022/187] always recompile module when recompiling native targets to validate module hash --- arbos/programs/native.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbos/programs/native.go b/arbos/programs/native.go index 7fc3500e2e..8144cafb75 100644 --- a/arbos/programs/native.go +++ b/arbos/programs/native.go @@ -270,7 +270,7 @@ func getLocalAsm(statedb vm.StateDB, moduleHash common.Hash, addressForLogging c targets := statedb.Database().WasmTargets() // we know program is activated, so it must be in correct version and not use too much memory - moduleActivationMandatory := false + moduleActivationMandatory := true // TODO: refactor the parameter, always set to true info, asmMap, err := activateProgramInternal(addressForLogging, codehash, wasm, pagelimit, program.version, zeroArbosVersion, debugMode, &zeroGas, targets, moduleActivationMandatory) if err != nil { log.Error("failed to reactivate program", "address", addressForLogging, "expected moduleHash", moduleHash, "err", err) From e6571ca397c43642dda0dc6da31140c16a3a5013 Mon Sep 17 00:00:00 2001 From: Antonio Nunez Date: Fri, 15 Nov 2024 17:55:28 +0800 Subject: [PATCH 023/187] feat: update google-cloud-storage parameters and object retention setting --- das/google_cloud_storage_service.go | 173 +++++++++------------------- 1 file changed, 57 insertions(+), 116 deletions(-) diff --git a/das/google_cloud_storage_service.go b/das/google_cloud_storage_service.go index 829f4b5265..adf039347c 100644 --- a/das/google_cloud_storage_service.go +++ b/das/google_cloud_storage_service.go @@ -21,151 +21,88 @@ import ( "github.com/offchainlabs/nitro/util/pretty" ) -type GoogleCloudStorageOperator interface { - Bucket(name string) *googlestorage.BucketHandle - Upload(ctx context.Context, bucket, objectPrefix string, value []byte) error - Download(ctx context.Context, bucket, objectPrefix string, key common.Hash) ([]byte, error) - Close(ctx context.Context) error -} - -type GoogleCloudStorageClient struct { - client *googlestorage.Client -} - -func (g *GoogleCloudStorageClient) Bucket(name string) *googlestorage.BucketHandle { - return g.client.Bucket(name) -} - -func (g *GoogleCloudStorageClient) Upload(ctx context.Context, bucket, objectPrefix string, value []byte) error { - obj := g.client.Bucket(bucket).Object(objectPrefix + EncodeStorageServiceKey(dastree.Hash(value))) - w := obj.NewWriter(ctx) - - if _, err := fmt.Fprintln(w, value); err != nil { - return err - } - return w.Close() - -} - -func (g *GoogleCloudStorageClient) Download(ctx context.Context, bucket, objectPrefix string, key common.Hash) ([]byte, error) { - obj := g.client.Bucket(bucket).Object(objectPrefix + EncodeStorageServiceKey(key)) - reader, err := obj.NewReader(ctx) - if err != nil { - return nil, err - } - return io.ReadAll(reader) -} - -func (g *GoogleCloudStorageClient) Close(ctx context.Context) error { - return g.client.Close() -} - type GoogleCloudStorageServiceConfig struct { - Enable bool `koanf:"enable"` - AccessToken string `koanf:"access-token"` - Bucket string `koanf:"bucket"` - ObjectPrefix string `koanf:"object-prefix"` - EnableExpiry bool `koanf:"enable-expiry"` - MaxRetention time.Duration `koanf:"max-retention"` + Enable bool `koanf:"enable"` + AccessTokenFile string `koanf:"access-token-file"` + Bucket string `koanf:"bucket"` + ObjectPrefix string `koanf:"object-prefix"` + DiscardAfterTimeout bool `koanf:"discard-after-timeout"` } var DefaultGoogleCloudStorageServiceConfig = GoogleCloudStorageServiceConfig{} func GoogleCloudConfigAddOptions(prefix string, f *flag.FlagSet) { f.Bool(prefix+".enable", DefaultGoogleCloudStorageServiceConfig.Enable, "EXPERIMENTAL/unsupported - enable storage/retrieval of sequencer batch data from an Google Cloud Storage bucket") - f.String(prefix+".access-token", DefaultGoogleCloudStorageServiceConfig.AccessToken, "Google Cloud Storage access token") + f.String(prefix+".access-token-file", DefaultGoogleCloudStorageServiceConfig.AccessTokenFile, "Google Cloud Storage access token") f.String(prefix+".bucket", DefaultGoogleCloudStorageServiceConfig.Bucket, "Google Cloud Storage bucket") f.String(prefix+".object-prefix", DefaultGoogleCloudStorageServiceConfig.ObjectPrefix, "prefix to add to Google Cloud Storage objects") - f.Bool(prefix+".enable-expiry", DefaultLocalFileStorageConfig.EnableExpiry, "enable expiry of batches") - f.Duration(prefix+".max-retention", DefaultLocalFileStorageConfig.MaxRetention, "store requests with expiry times farther in the future than max-retention will be rejected") + f.Bool(prefix+".discard-after-timeout", DefaultGoogleCloudStorageServiceConfig.DiscardAfterTimeout, "discard data after its expiry timeout") } type GoogleCloudStorageService struct { - operator GoogleCloudStorageOperator - bucket string - objectPrefix string - enableExpiry bool - maxRetention time.Duration + client *googlestorage.Client + bucket string + objectPrefix string + discardAfterTimeout bool } func NewGoogleCloudStorageService(config GoogleCloudStorageServiceConfig) (StorageService, error) { - var client *googlestorage.Client - var err error - // Note that if the credentials are not specified, the client library will find credentials using ADC(Application Default Credentials) - // https://cloud.google.com/docs/authentication/provide-credentials-adc. - if config.AccessToken == "" { - client, err = googlestorage.NewClient(context.Background()) - } else { - client, err = googlestorage.NewClient(context.Background(), option.WithCredentialsJSON([]byte(config.AccessToken))) - } + client, err := buildGoogleCloudStorageClient(config.AccessTokenFile) if err != nil { return nil, fmt.Errorf("error creating Google Cloud Storage client: %w", err) } - service := &GoogleCloudStorageService{ - operator: &GoogleCloudStorageClient{client: client}, - bucket: config.Bucket, - objectPrefix: config.ObjectPrefix, - enableExpiry: config.EnableExpiry, - maxRetention: config.MaxRetention, - } - if config.EnableExpiry { - lifecycleRule := googlestorage.LifecycleRule{ - Action: googlestorage.LifecycleAction{Type: "Delete"}, - Condition: googlestorage.LifecycleCondition{AgeInDays: int64(config.MaxRetention.Hours() / 24)}, // Objects older than 30 days - } - ctx := context.Background() - bucket := service.operator.Bucket(service.bucket) - // check if bucket exists (and others), and update expiration policy if enabled - attrs, err := bucket.Attrs(ctx) - if err != nil { - return nil, fmt.Errorf("error getting bucket attributes: %w", err) - } - attrs.Lifecycle.Rules = append(attrs.Lifecycle.Rules, lifecycleRule) - - bucketAttrsToUpdate := googlestorage.BucketAttrsToUpdate{ - Lifecycle: &attrs.Lifecycle, - } - if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil { - return nil, fmt.Errorf("failed to update bucket lifecycle: %w", err) - } - } - return service, nil + return &GoogleCloudStorageService{ + client: client, + bucket: config.Bucket, + objectPrefix: config.ObjectPrefix, + discardAfterTimeout: config.DiscardAfterTimeout, + }, nil } -func (gcs *GoogleCloudStorageService) Put(ctx context.Context, data []byte, expiry uint64) error { - logPut("das.GoogleCloudStorageService.Store", data, expiry, gcs) - if expiry > math.MaxInt64 { - return fmt.Errorf("request expiry time (%v) exceeds max int64", expiry) - } - // #nosec G115 - expiryTime := time.Unix(int64(expiry), 0) - currentTimePlusRetention := time.Now().Add(gcs.maxRetention) - if expiryTime.After(currentTimePlusRetention) { - return fmt.Errorf("requested expiry time (%v) exceeds current time plus maximum allowed retention period(%v)", expiryTime, currentTimePlusRetention) - } - if err := gcs.operator.Upload(ctx, gcs.bucket, gcs.objectPrefix, data); err != nil { - log.Error("das.GoogleCloudStorageService.Store", "err", err) - return err +func buildGoogleCloudStorageClient(accessTokenFile string) (*googlestorage.Client, error) { + // Note that if the credentials are not specified, the client library will find credentials using ADC(Application Default Credentials) + // https://cloud.google.com/docs/authentication/provide-credentials-adc. + if accessTokenFile == "" { + return googlestorage.NewClient(context.Background()) } - return nil + return googlestorage.NewClient(context.Background(), option.WithCredentialsFile(accessTokenFile)) } func (gcs *GoogleCloudStorageService) GetByHash(ctx context.Context, key common.Hash) ([]byte, error) { log.Trace("das.GoogleCloudStorageService.GetByHash", "key", pretty.PrettyHash(key), "this", gcs) - buf, err := gcs.operator.Download(ctx, gcs.bucket, gcs.objectPrefix, key) + obj := gcs.client.Bucket(gcs.bucket).Object(gcs.objectPrefix + EncodeStorageServiceKey(key)) + reader, err := obj.NewReader(ctx) if err != nil { log.Error("das.GoogleCloudStorageService.GetByHash", "err", err) return nil, err } + buf, err := io.ReadAll(reader) + if err != nil { + log.Error("das.GoogleCloudStorageService.GetByHash", "err", err) + } return buf, nil } -func (gcs *GoogleCloudStorageService) ExpirationPolicy(ctx context.Context) (daprovider.ExpirationPolicy, error) { - if gcs.enableExpiry { - return daprovider.KeepForever, nil +func (gcs *GoogleCloudStorageService) Put(ctx context.Context, value []byte, timeout uint64) error { + logPut("das.GoogleCloudStorageService.Store", value, timeout, gcs) + obj := gcs.client.Bucket(gcs.bucket).Object(gcs.objectPrefix + EncodeStorageServiceKey(dastree.Hash(value))) + w := obj.NewWriter(ctx) + if gcs.discardAfterTimeout && timeout <= math.MaxInt64 { + w.Retention = &googlestorage.ObjectRetention{ + Mode: "Unlocked", + RetainUntil: time.Unix(int64(timeout), 0), + } + } + if _, err := fmt.Fprintln(w, value); err != nil { + log.Error("das.GoogleCloudStorageService.Store", "err", err) + return err + } + err := w.Close() + if err != nil { + log.Error("das.GoogleCloudStorageService.Store", "err", err) } - return daprovider.DiscardAfterDataTimeout, nil + return err } func (gcs *GoogleCloudStorageService) Sync(ctx context.Context) error { @@ -173,7 +110,14 @@ func (gcs *GoogleCloudStorageService) Sync(ctx context.Context) error { } func (gcs *GoogleCloudStorageService) Close(ctx context.Context) error { - return gcs.operator.Close(ctx) + return gcs.client.Close() +} + +func (gcs *GoogleCloudStorageService) ExpirationPolicy(ctx context.Context) (daprovider.ExpirationPolicy, error) { + if gcs.discardAfterTimeout { + return daprovider.DiscardAfterDataTimeout, nil + } + return daprovider.KeepForever, nil } func (gcs *GoogleCloudStorageService) String() string { @@ -181,11 +125,9 @@ func (gcs *GoogleCloudStorageService) String() string { } func (gcs *GoogleCloudStorageService) HealthCheck(ctx context.Context) error { - bucket := gcs.operator.Bucket(gcs.bucket) + bucket := gcs.client.Bucket(gcs.bucket) // check if we have bucket permissions permissions := []string{ - "storage.buckets.get", - "storage.buckets.list", "storage.objects.create", "storage.objects.delete", "storage.objects.list", @@ -200,6 +142,5 @@ func (gcs *GoogleCloudStorageService) HealthCheck(ctx context.Context) error { if !cmp.Equal(perms, permissions) { return fmt.Errorf("permissions mismatch (-want +got):\n%s", cmp.Diff(permissions, perms)) } - return nil } From 03d71e4880aafd4acddc8e2f1e499e7e08e3c63c Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Tue, 19 Nov 2024 17:14:30 +0530 Subject: [PATCH 024/187] Add flag to disable DAS chunked stores --- cmd/datool/datool.go | 4 +++- das/aggregator.go | 3 +++ das/dasRpcClient.go | 39 +++++++++++++++++++++++++-------------- das/rpc_aggregator.go | 2 +- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/cmd/datool/datool.go b/cmd/datool/datool.go index 06f94dc952..cb8507593c 100644 --- a/cmd/datool/datool.go +++ b/cmd/datool/datool.go @@ -92,6 +92,7 @@ type ClientStoreConfig struct { SigningWallet string `koanf:"signing-wallet"` SigningWalletPassword string `koanf:"signing-wallet-password"` MaxStoreChunkBodySize int `koanf:"max-store-chunk-body-size"` + UseLegacyStore bool `koanf:"use-legacy-store"` } func parseClientStoreConfig(args []string) (*ClientStoreConfig, error) { @@ -104,6 +105,7 @@ func parseClientStoreConfig(args []string) (*ClientStoreConfig, error) { f.String("signing-wallet-password", genericconf.PASSWORD_NOT_SET, "password to unlock the wallet, if not specified the user is prompted for the password") f.Duration("das-retention-period", 24*time.Hour, "The period which DASes are requested to retain the stored batches.") f.Int("max-store-chunk-body-size", 512*1024, "The maximum HTTP POST body size for a chunked store request") + f.Bool("use-legacy-store", false, "enabling this forces the das rpc clients to use das_store. Disabled by default") k, err := confighelpers.BeginCommonParse(f, args) if err != nil { @@ -152,7 +154,7 @@ func startClientStore(args []string) error { } } - client, err := das.NewDASRPCClient(config.URL, signer, config.MaxStoreChunkBodySize) + client, err := das.NewDASRPCClient(config.URL, signer, config.MaxStoreChunkBodySize, config.UseLegacyStore) if err != nil { return err } diff --git a/das/aggregator.go b/das/aggregator.go index 372e448e76..99cc2d58b0 100644 --- a/das/aggregator.go +++ b/das/aggregator.go @@ -41,12 +41,14 @@ type AggregatorConfig struct { AssumedHonest int `koanf:"assumed-honest"` Backends BackendConfigList `koanf:"backends"` MaxStoreChunkBodySize int `koanf:"max-store-chunk-body-size"` + UseLegacyStore bool `koanf:"use-legacy-store"` } var DefaultAggregatorConfig = AggregatorConfig{ AssumedHonest: 0, Backends: nil, MaxStoreChunkBodySize: 512 * 1024, + UseLegacyStore: false, } var parsedBackendsConf BackendConfigList @@ -56,6 +58,7 @@ func AggregatorConfigAddOptions(prefix string, f *flag.FlagSet) { f.Int(prefix+".assumed-honest", DefaultAggregatorConfig.AssumedHonest, "Number of assumed honest backends (H). If there are N backends, K=N+1-H valid responses are required to consider an Store request to be successful.") f.Var(&parsedBackendsConf, prefix+".backends", "JSON RPC backend configuration. This can be specified on the command line as a JSON array, eg: [{\"url\": \"...\", \"pubkey\": \"...\"},...], or as a JSON array in the config file.") f.Int(prefix+".max-store-chunk-body-size", DefaultAggregatorConfig.MaxStoreChunkBodySize, "maximum HTTP POST body size to use for individual batch chunks, including JSON RPC overhead and an estimated overhead of 512B of headers") + f.Bool(prefix+".use-legacy-store", DefaultAggregatorConfig.UseLegacyStore, "enabling this forces the das rpc clients to use das_store. Disabled by default") } type Aggregator struct { diff --git a/das/dasRpcClient.go b/das/dasRpcClient.go index 3ea6c4e2c6..37c3c30220 100644 --- a/das/dasRpcClient.go +++ b/das/dasRpcClient.go @@ -35,10 +35,11 @@ var ( ) type DASRPCClient struct { // implements DataAvailabilityService - clnt *rpc.Client - url string - signer signature.DataSignerFunc - chunkSize uint64 + clnt *rpc.Client + url string + signer signature.DataSignerFunc + chunkSize uint64 + useLegacyStore bool } func nilSigner(_ []byte) ([]byte, error) { @@ -47,7 +48,7 @@ func nilSigner(_ []byte) ([]byte, error) { const sendChunkJSONBoilerplate = "{\"jsonrpc\":\"2.0\",\"id\":4294967295,\"method\":\"das_sendChunked\",\"params\":[\"\"]}" -func NewDASRPCClient(target string, signer signature.DataSignerFunc, maxStoreChunkBodySize int) (*DASRPCClient, error) { +func NewDASRPCClient(target string, signer signature.DataSignerFunc, maxStoreChunkBodySize int, useLegacyStore bool) (*DASRPCClient, error) { clnt, err := rpc.Dial(target) if err != nil { return nil, err @@ -56,18 +57,23 @@ func NewDASRPCClient(target string, signer signature.DataSignerFunc, maxStoreChu signer = nilSigner } + client := &DASRPCClient{ + clnt: clnt, + url: target, + signer: signer, + useLegacyStore: useLegacyStore, + } + // Byte arrays are encoded in base64 - chunkSize := (maxStoreChunkBodySize - len(sendChunkJSONBoilerplate) - 512 /* headers */) / 2 - if chunkSize <= 0 { - return nil, fmt.Errorf("max-store-chunk-body-size %d doesn't leave enough room for chunk payload", maxStoreChunkBodySize) + if !useLegacyStore { + chunkSize := (maxStoreChunkBodySize - len(sendChunkJSONBoilerplate) - 512 /* headers */) / 2 + if chunkSize <= 0 { + return nil, fmt.Errorf("max-store-chunk-body-size %d doesn't leave enough room for chunk payload", maxStoreChunkBodySize) + } + client.chunkSize = uint64(chunkSize) } - return &DASRPCClient{ - clnt: clnt, - url: target, - signer: signer, - chunkSize: uint64(chunkSize), - }, nil + return client, nil } func (c *DASRPCClient) Store(ctx context.Context, message []byte, timeout uint64) (*daprovider.DataAvailabilityCertificate, error) { @@ -83,6 +89,11 @@ func (c *DASRPCClient) Store(ctx context.Context, message []byte, timeout uint64 rpcClientStoreDurationHistogram.Update(time.Since(start).Nanoseconds()) }() + if c.useLegacyStore { + log.Info("Legacy store is being force-used by the DAS client", "url", c.url) + return c.legacyStore(ctx, message, timeout) + } + // #nosec G115 timestamp := uint64(start.Unix()) nChunks := uint64(len(message)) / c.chunkSize diff --git a/das/rpc_aggregator.go b/das/rpc_aggregator.go index 916637aac6..6869e140f1 100644 --- a/das/rpc_aggregator.go +++ b/das/rpc_aggregator.go @@ -110,7 +110,7 @@ func ParseServices(config AggregatorConfig, signer signature.DataSignerFunc) ([] } metricName := metricsutil.CanonicalizeMetricName(url.Hostname()) - service, err := NewDASRPCClient(b.URL, signer, config.MaxStoreChunkBodySize) + service, err := NewDASRPCClient(b.URL, signer, config.MaxStoreChunkBodySize, config.UseLegacyStore) if err != nil { return nil, err } From 12a4a053e2bf135872a29e173645b33ec2874874 Mon Sep 17 00:00:00 2001 From: Antonio Nunez Date: Tue, 19 Nov 2024 22:19:00 +0800 Subject: [PATCH 025/187] updated --- das/google_cloud_storage_service.go | 119 ++++++++++++++--------- das/google_cloud_storage_service_test.go | 5 +- 2 files changed, 76 insertions(+), 48 deletions(-) diff --git a/das/google_cloud_storage_service.go b/das/google_cloud_storage_service.go index adf039347c..85fa796420 100644 --- a/das/google_cloud_storage_service.go +++ b/das/google_cloud_storage_service.go @@ -21,6 +21,51 @@ import ( "github.com/offchainlabs/nitro/util/pretty" ) +type GoogleCloudStorageOperator interface { + Bucket(name string) *googlestorage.BucketHandle + Upload(ctx context.Context, bucket, objectPrefix string, value []byte, discardAfterTimeout bool, timeout uint64) error + Download(ctx context.Context, bucket, objectPrefix string, key common.Hash) ([]byte, error) + Close(ctx context.Context) error +} + +type GoogleCloudStorageClient struct { + client *googlestorage.Client +} + +func (g *GoogleCloudStorageClient) Bucket(name string) *googlestorage.BucketHandle { + return g.client.Bucket(name) +} + +func (g *GoogleCloudStorageClient) Upload(ctx context.Context, bucket, objectPrefix string, value []byte, discardAfterTimeout bool, timeout uint64) error { + obj := g.client.Bucket(bucket).Object(objectPrefix + EncodeStorageServiceKey(dastree.Hash(value))) + w := obj.NewWriter(ctx) + + if discardAfterTimeout && timeout <= math.MaxInt64 { + w.Retention = &googlestorage.ObjectRetention{ + Mode: "Unlocked", + RetainUntil: time.Unix(int64(timeout), 0), + } + } + + if _, err := fmt.Fprintln(w, value); err != nil { + return err + } + return w.Close() +} + +func (g *GoogleCloudStorageClient) Download(ctx context.Context, bucket, objectPrefix string, key common.Hash) ([]byte, error) { + obj := g.client.Bucket(bucket).Object(objectPrefix + EncodeStorageServiceKey(key)) + reader, err := obj.NewReader(ctx) + if err != nil { + return nil, err + } + return io.ReadAll(reader) +} + +func (g *GoogleCloudStorageClient) Close(ctx context.Context) error { + return g.client.Close() +} + type GoogleCloudStorageServiceConfig struct { Enable bool `koanf:"enable"` AccessTokenFile string `koanf:"access-token-file"` @@ -37,72 +82,62 @@ func GoogleCloudConfigAddOptions(prefix string, f *flag.FlagSet) { f.String(prefix+".bucket", DefaultGoogleCloudStorageServiceConfig.Bucket, "Google Cloud Storage bucket") f.String(prefix+".object-prefix", DefaultGoogleCloudStorageServiceConfig.ObjectPrefix, "prefix to add to Google Cloud Storage objects") f.Bool(prefix+".discard-after-timeout", DefaultGoogleCloudStorageServiceConfig.DiscardAfterTimeout, "discard data after its expiry timeout") - } type GoogleCloudStorageService struct { - client *googlestorage.Client + operator GoogleCloudStorageOperator bucket string objectPrefix string discardAfterTimeout bool } func NewGoogleCloudStorageService(config GoogleCloudStorageServiceConfig) (StorageService, error) { - client, err := buildGoogleCloudStorageClient(config.AccessTokenFile) + var client *googlestorage.Client + var err error + // Note that if the credentials are not specified, the client library will find credentials using ADC(Application Default Credentials) + // https://cloud.google.com/docs/authentication/provide-credentials-adc. + if config.AccessTokenFile == "" { + client, err = googlestorage.NewClient(context.Background()) + } else { + client, err = googlestorage.NewClient(context.Background(), option.WithCredentialsFile(config.AccessTokenFile)) + } if err != nil { return nil, fmt.Errorf("error creating Google Cloud Storage client: %w", err) } - return &GoogleCloudStorageService{ - client: client, + service := &GoogleCloudStorageService{ + operator: &GoogleCloudStorageClient{client: client}, bucket: config.Bucket, objectPrefix: config.ObjectPrefix, discardAfterTimeout: config.DiscardAfterTimeout, - }, nil + } + return service, nil } -func buildGoogleCloudStorageClient(accessTokenFile string) (*googlestorage.Client, error) { - // Note that if the credentials are not specified, the client library will find credentials using ADC(Application Default Credentials) - // https://cloud.google.com/docs/authentication/provide-credentials-adc. - if accessTokenFile == "" { - return googlestorage.NewClient(context.Background()) +func (gcs *GoogleCloudStorageService) Put(ctx context.Context, value []byte, timeout uint64) error { + logPut("das.GoogleCloudStorageService.Store", value, timeout, gcs) + + if err := gcs.operator.Upload(ctx, gcs.bucket, gcs.objectPrefix, value, gcs.discardAfterTimeout, timeout); err != nil { + log.Error("das.GoogleCloudStorageService.Store", "err", err) + return err } - return googlestorage.NewClient(context.Background(), option.WithCredentialsFile(accessTokenFile)) + return nil } func (gcs *GoogleCloudStorageService) GetByHash(ctx context.Context, key common.Hash) ([]byte, error) { log.Trace("das.GoogleCloudStorageService.GetByHash", "key", pretty.PrettyHash(key), "this", gcs) - obj := gcs.client.Bucket(gcs.bucket).Object(gcs.objectPrefix + EncodeStorageServiceKey(key)) - reader, err := obj.NewReader(ctx) + buf, err := gcs.operator.Download(ctx, gcs.bucket, gcs.objectPrefix, key) if err != nil { log.Error("das.GoogleCloudStorageService.GetByHash", "err", err) return nil, err } - buf, err := io.ReadAll(reader) - if err != nil { - log.Error("das.GoogleCloudStorageService.GetByHash", "err", err) - } return buf, nil } -func (gcs *GoogleCloudStorageService) Put(ctx context.Context, value []byte, timeout uint64) error { - logPut("das.GoogleCloudStorageService.Store", value, timeout, gcs) - obj := gcs.client.Bucket(gcs.bucket).Object(gcs.objectPrefix + EncodeStorageServiceKey(dastree.Hash(value))) - w := obj.NewWriter(ctx) - if gcs.discardAfterTimeout && timeout <= math.MaxInt64 { - w.Retention = &googlestorage.ObjectRetention{ - Mode: "Unlocked", - RetainUntil: time.Unix(int64(timeout), 0), - } - } - if _, err := fmt.Fprintln(w, value); err != nil { - log.Error("das.GoogleCloudStorageService.Store", "err", err) - return err - } - err := w.Close() - if err != nil { - log.Error("das.GoogleCloudStorageService.Store", "err", err) +func (gcs *GoogleCloudStorageService) ExpirationPolicy(ctx context.Context) (daprovider.ExpirationPolicy, error) { + if gcs.discardAfterTimeout { + return daprovider.DiscardAfterDataTimeout, nil } - return err + return daprovider.KeepForever, nil } func (gcs *GoogleCloudStorageService) Sync(ctx context.Context) error { @@ -110,14 +145,7 @@ func (gcs *GoogleCloudStorageService) Sync(ctx context.Context) error { } func (gcs *GoogleCloudStorageService) Close(ctx context.Context) error { - return gcs.client.Close() -} - -func (gcs *GoogleCloudStorageService) ExpirationPolicy(ctx context.Context) (daprovider.ExpirationPolicy, error) { - if gcs.discardAfterTimeout { - return daprovider.DiscardAfterDataTimeout, nil - } - return daprovider.KeepForever, nil + return gcs.operator.Close(ctx) } func (gcs *GoogleCloudStorageService) String() string { @@ -125,7 +153,7 @@ func (gcs *GoogleCloudStorageService) String() string { } func (gcs *GoogleCloudStorageService) HealthCheck(ctx context.Context) error { - bucket := gcs.client.Bucket(gcs.bucket) + bucket := gcs.operator.Bucket(gcs.bucket) // check if we have bucket permissions permissions := []string{ "storage.objects.create", @@ -142,5 +170,6 @@ func (gcs *GoogleCloudStorageService) HealthCheck(ctx context.Context) error { if !cmp.Equal(perms, permissions) { return fmt.Errorf("permissions mismatch (-want +got):\n%s", cmp.Diff(permissions, perms)) } + return nil } diff --git a/das/google_cloud_storage_service_test.go b/das/google_cloud_storage_service_test.go index 94d6f3ee44..545437708b 100644 --- a/das/google_cloud_storage_service_test.go +++ b/das/google_cloud_storage_service_test.go @@ -34,7 +34,7 @@ func (c *mockGCSClient) Close(ctx context.Context) error { return nil } -func (c *mockGCSClient) Upload(ctx context.Context, bucket, objectPrefix string, value []byte) error { +func (c *mockGCSClient) Upload(ctx context.Context, bucket, objectPrefix string, value []byte, discardAfterTimeout bool, timeout uint64) error { key := objectPrefix + EncodeStorageServiceKey(dastree.Hash(value)) c.storage[key] = value return nil @@ -47,7 +47,7 @@ func NewTestGoogleCloudStorageService(ctx context.Context, googleCloudStorageCon operator: &mockGCSClient{ storage: make(map[string][]byte), }, - maxRetention: googleCloudStorageConfig.MaxRetention, + discardAfterTimeout: true, }, nil } @@ -57,7 +57,6 @@ func TestNewGoogleCloudStorageService(t *testing.T) { expiry := uint64(time.Now().Add(time.Hour).Unix()) googleCloudStorageServiceConfig := DefaultGoogleCloudStorageServiceConfig googleCloudStorageServiceConfig.Enable = true - googleCloudStorageServiceConfig.MaxRetention = time.Hour * 24 googleCloudService, err := NewTestGoogleCloudStorageService(ctx, googleCloudStorageServiceConfig) Require(t, err) From c174c1f819406baba0d76821d7e4e3f80260bc6d Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Tue, 19 Nov 2024 17:56:28 +0100 Subject: [PATCH 026/187] add SyncMode pebble config, default to NO-SYNC mode and increasing levels file sizes --- cmd/conf/database.go | 5 ++++- go-ethereum | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cmd/conf/database.go b/cmd/conf/database.go index 8857b615f3..e454edf842 100644 --- a/cmd/conf/database.go +++ b/cmd/conf/database.go @@ -112,11 +112,13 @@ func (c *PersistentConfig) Validate() error { } type PebbleConfig struct { + SyncMode bool `koanf:"sync-mode"` MaxConcurrentCompactions int `koanf:"max-concurrent-compactions"` Experimental PebbleExperimentalConfig `koanf:"experimental"` } var PebbleConfigDefault = PebbleConfig{ + SyncMode: false, // use NO-SYNC mode, see: https://github.com/ethereum/go-ethereum/issues/29819 MaxConcurrentCompactions: runtime.NumCPU(), Experimental: PebbleExperimentalConfigDefault, } @@ -180,7 +182,7 @@ var PebbleExperimentalConfigDefault = PebbleExperimentalConfig{ BlockSize: 4 << 10, // 4 KB IndexBlockSize: 4 << 10, // 4 KB TargetFileSize: 2 << 20, // 2 MB - TargetFileSizeEqualLevels: true, + TargetFileSizeEqualLevels: false, L0CompactionConcurrency: 10, CompactionDebtConcurrency: 1 << 30, // 1GB @@ -251,6 +253,7 @@ func (c *PebbleConfig) ExtraOptions(namespace string) *pebble.ExtraOptions { walDir = path.Join(walDir, namespace) } return &pebble.ExtraOptions{ + SyncMode: c.SyncMode, BytesPerSync: c.Experimental.BytesPerSync, L0CompactionFileThreshold: c.Experimental.L0CompactionFileThreshold, L0CompactionThreshold: c.Experimental.L0CompactionThreshold, diff --git a/go-ethereum b/go-ethereum index ed53c04acc..162a93751a 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit ed53c04acc1637bbe1e07725fff82066c6687512 +Subproject commit 162a93751aafb99c27037e5aabd8e329d29a9805 From 077f55bff188c2fac6249d6121746883b34b29ee Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Tue, 19 Nov 2024 18:17:06 +0100 Subject: [PATCH 027/187] update geth pin --- go-ethereum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go-ethereum b/go-ethereum index 162a93751a..50bb1f8110 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 162a93751aafb99c27037e5aabd8e329d29a9805 +Subproject commit 50bb1f81101d321301e1d372422bef2950dd314f From b730c3f51a1e5eae2ad8154e2e08ea0dac69adb6 Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Tue, 19 Nov 2024 20:15:53 +0100 Subject: [PATCH 028/187] add missing sync-mode flag in PebbleConfigAddOptions --- cmd/conf/database.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/conf/database.go b/cmd/conf/database.go index e454edf842..8d05c44500 100644 --- a/cmd/conf/database.go +++ b/cmd/conf/database.go @@ -124,6 +124,7 @@ var PebbleConfigDefault = PebbleConfig{ } func PebbleConfigAddOptions(prefix string, f *flag.FlagSet, defaultConfig *PebbleConfig) { + f.Bool(prefix+".sync-mode", defaultConfig.SyncMode, "if true sync mode is used (data needs to be written to WAL before the write is marked as completed)") f.Int(prefix+".max-concurrent-compactions", defaultConfig.MaxConcurrentCompactions, "maximum number of concurrent compactions") PebbleExperimentalConfigAddOptions(prefix+".experimental", f, &defaultConfig.Experimental) } From a391c6352e8cb4eedef99cbb84046d048a62a85b Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Wed, 20 Nov 2024 09:50:58 +0530 Subject: [PATCH 029/187] address PR comments --- cmd/datool/datool.go | 6 +++--- das/aggregator.go | 6 +++--- das/dasRpcClient.go | 24 ++++++++++++------------ das/rpc_aggregator.go | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/cmd/datool/datool.go b/cmd/datool/datool.go index cb8507593c..fc186c76c4 100644 --- a/cmd/datool/datool.go +++ b/cmd/datool/datool.go @@ -92,7 +92,7 @@ type ClientStoreConfig struct { SigningWallet string `koanf:"signing-wallet"` SigningWalletPassword string `koanf:"signing-wallet-password"` MaxStoreChunkBodySize int `koanf:"max-store-chunk-body-size"` - UseLegacyStore bool `koanf:"use-legacy-store"` + DisableChunkedStore bool `koanf:"disable-chunked-store"` } func parseClientStoreConfig(args []string) (*ClientStoreConfig, error) { @@ -105,7 +105,7 @@ func parseClientStoreConfig(args []string) (*ClientStoreConfig, error) { f.String("signing-wallet-password", genericconf.PASSWORD_NOT_SET, "password to unlock the wallet, if not specified the user is prompted for the password") f.Duration("das-retention-period", 24*time.Hour, "The period which DASes are requested to retain the stored batches.") f.Int("max-store-chunk-body-size", 512*1024, "The maximum HTTP POST body size for a chunked store request") - f.Bool("use-legacy-store", false, "enabling this forces the das rpc clients to use das_store. Disabled by default") + f.Bool("disable-chunked-store", false, "force data to always be sent to DAS all at once instead of splitting into chunks. Disabled by default") k, err := confighelpers.BeginCommonParse(f, args) if err != nil { @@ -154,7 +154,7 @@ func startClientStore(args []string) error { } } - client, err := das.NewDASRPCClient(config.URL, signer, config.MaxStoreChunkBodySize, config.UseLegacyStore) + client, err := das.NewDASRPCClient(config.URL, signer, config.MaxStoreChunkBodySize, config.DisableChunkedStore) if err != nil { return err } diff --git a/das/aggregator.go b/das/aggregator.go index 99cc2d58b0..3797922bb5 100644 --- a/das/aggregator.go +++ b/das/aggregator.go @@ -41,14 +41,14 @@ type AggregatorConfig struct { AssumedHonest int `koanf:"assumed-honest"` Backends BackendConfigList `koanf:"backends"` MaxStoreChunkBodySize int `koanf:"max-store-chunk-body-size"` - UseLegacyStore bool `koanf:"use-legacy-store"` + DisableChunkedStore bool `koanf:"disable-chunked-store"` } var DefaultAggregatorConfig = AggregatorConfig{ AssumedHonest: 0, Backends: nil, MaxStoreChunkBodySize: 512 * 1024, - UseLegacyStore: false, + DisableChunkedStore: false, } var parsedBackendsConf BackendConfigList @@ -58,7 +58,7 @@ func AggregatorConfigAddOptions(prefix string, f *flag.FlagSet) { f.Int(prefix+".assumed-honest", DefaultAggregatorConfig.AssumedHonest, "Number of assumed honest backends (H). If there are N backends, K=N+1-H valid responses are required to consider an Store request to be successful.") f.Var(&parsedBackendsConf, prefix+".backends", "JSON RPC backend configuration. This can be specified on the command line as a JSON array, eg: [{\"url\": \"...\", \"pubkey\": \"...\"},...], or as a JSON array in the config file.") f.Int(prefix+".max-store-chunk-body-size", DefaultAggregatorConfig.MaxStoreChunkBodySize, "maximum HTTP POST body size to use for individual batch chunks, including JSON RPC overhead and an estimated overhead of 512B of headers") - f.Bool(prefix+".use-legacy-store", DefaultAggregatorConfig.UseLegacyStore, "enabling this forces the das rpc clients to use das_store. Disabled by default") + f.Bool(prefix+".disable-chunked-store", DefaultAggregatorConfig.DisableChunkedStore, "force data to always be sent to DAS all at once instead of splitting into chunks. Disabled by default") } type Aggregator struct { diff --git a/das/dasRpcClient.go b/das/dasRpcClient.go index 37c3c30220..cd4ed078f4 100644 --- a/das/dasRpcClient.go +++ b/das/dasRpcClient.go @@ -35,11 +35,11 @@ var ( ) type DASRPCClient struct { // implements DataAvailabilityService - clnt *rpc.Client - url string - signer signature.DataSignerFunc - chunkSize uint64 - useLegacyStore bool + clnt *rpc.Client + url string + signer signature.DataSignerFunc + chunkSize uint64 + disableChunkedStore bool } func nilSigner(_ []byte) ([]byte, error) { @@ -48,7 +48,7 @@ func nilSigner(_ []byte) ([]byte, error) { const sendChunkJSONBoilerplate = "{\"jsonrpc\":\"2.0\",\"id\":4294967295,\"method\":\"das_sendChunked\",\"params\":[\"\"]}" -func NewDASRPCClient(target string, signer signature.DataSignerFunc, maxStoreChunkBodySize int, useLegacyStore bool) (*DASRPCClient, error) { +func NewDASRPCClient(target string, signer signature.DataSignerFunc, maxStoreChunkBodySize int, disableChunkedStore bool) (*DASRPCClient, error) { clnt, err := rpc.Dial(target) if err != nil { return nil, err @@ -58,14 +58,14 @@ func NewDASRPCClient(target string, signer signature.DataSignerFunc, maxStoreChu } client := &DASRPCClient{ - clnt: clnt, - url: target, - signer: signer, - useLegacyStore: useLegacyStore, + clnt: clnt, + url: target, + signer: signer, + disableChunkedStore: disableChunkedStore, } // Byte arrays are encoded in base64 - if !useLegacyStore { + if !disableChunkedStore { chunkSize := (maxStoreChunkBodySize - len(sendChunkJSONBoilerplate) - 512 /* headers */) / 2 if chunkSize <= 0 { return nil, fmt.Errorf("max-store-chunk-body-size %d doesn't leave enough room for chunk payload", maxStoreChunkBodySize) @@ -89,7 +89,7 @@ func (c *DASRPCClient) Store(ctx context.Context, message []byte, timeout uint64 rpcClientStoreDurationHistogram.Update(time.Since(start).Nanoseconds()) }() - if c.useLegacyStore { + if c.disableChunkedStore { log.Info("Legacy store is being force-used by the DAS client", "url", c.url) return c.legacyStore(ctx, message, timeout) } diff --git a/das/rpc_aggregator.go b/das/rpc_aggregator.go index 6869e140f1..91fdc07b45 100644 --- a/das/rpc_aggregator.go +++ b/das/rpc_aggregator.go @@ -110,7 +110,7 @@ func ParseServices(config AggregatorConfig, signer signature.DataSignerFunc) ([] } metricName := metricsutil.CanonicalizeMetricName(url.Hostname()) - service, err := NewDASRPCClient(b.URL, signer, config.MaxStoreChunkBodySize, config.UseLegacyStore) + service, err := NewDASRPCClient(b.URL, signer, config.MaxStoreChunkBodySize, config.DisableChunkedStore) if err != nil { return nil, err } From 26cfce8ff986633bd8ebd5394d7a3f789ca85472 Mon Sep 17 00:00:00 2001 From: Antonio Nunez Date: Wed, 20 Nov 2024 13:58:41 +0800 Subject: [PATCH 030/187] support both access-token and access-token-file parameters --- das/google_cloud_storage_service.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/das/google_cloud_storage_service.go b/das/google_cloud_storage_service.go index 85fa796420..71924a690c 100644 --- a/das/google_cloud_storage_service.go +++ b/das/google_cloud_storage_service.go @@ -68,6 +68,7 @@ func (g *GoogleCloudStorageClient) Close(ctx context.Context) error { type GoogleCloudStorageServiceConfig struct { Enable bool `koanf:"enable"` + AccessToken string `koanf:"access-token"` AccessTokenFile string `koanf:"access-token-file"` Bucket string `koanf:"bucket"` ObjectPrefix string `koanf:"object-prefix"` @@ -78,7 +79,8 @@ var DefaultGoogleCloudStorageServiceConfig = GoogleCloudStorageServiceConfig{} func GoogleCloudConfigAddOptions(prefix string, f *flag.FlagSet) { f.Bool(prefix+".enable", DefaultGoogleCloudStorageServiceConfig.Enable, "EXPERIMENTAL/unsupported - enable storage/retrieval of sequencer batch data from an Google Cloud Storage bucket") - f.String(prefix+".access-token-file", DefaultGoogleCloudStorageServiceConfig.AccessTokenFile, "Google Cloud Storage access token") + f.String(prefix+".access-token", DefaultGoogleCloudStorageServiceConfig.AccessToken, "Google Cloud Storage access token (JSON string)") + f.String(prefix+".access-token-file", DefaultGoogleCloudStorageServiceConfig.AccessTokenFile, "Google Cloud Storage access token (JSON file path)") f.String(prefix+".bucket", DefaultGoogleCloudStorageServiceConfig.Bucket, "Google Cloud Storage bucket") f.String(prefix+".object-prefix", DefaultGoogleCloudStorageServiceConfig.ObjectPrefix, "prefix to add to Google Cloud Storage objects") f.Bool(prefix+".discard-after-timeout", DefaultGoogleCloudStorageServiceConfig.DiscardAfterTimeout, "discard data after its expiry timeout") @@ -96,10 +98,12 @@ func NewGoogleCloudStorageService(config GoogleCloudStorageServiceConfig) (Stora var err error // Note that if the credentials are not specified, the client library will find credentials using ADC(Application Default Credentials) // https://cloud.google.com/docs/authentication/provide-credentials-adc. - if config.AccessTokenFile == "" { - client, err = googlestorage.NewClient(context.Background()) - } else { + if config.AccessToken != "" { + client, err = googlestorage.NewClient(context.Background(), option.WithCredentialsJSON([]byte(config.AccessToken))) + } else if config.AccessTokenFile != "" { client, err = googlestorage.NewClient(context.Background(), option.WithCredentialsFile(config.AccessTokenFile)) + } else { + client, err = googlestorage.NewClient(context.Background()) } if err != nil { return nil, fmt.Errorf("error creating Google Cloud Storage client: %w", err) From 0b31ccb531b3eed3255749b3b30d911082201c4c Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Mon, 25 Nov 2024 10:50:29 +0530 Subject: [PATCH 031/187] address PR comments --- cmd/datool/datool.go | 2 +- das/aggregator.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/datool/datool.go b/cmd/datool/datool.go index fc186c76c4..9cc2f5ebd9 100644 --- a/cmd/datool/datool.go +++ b/cmd/datool/datool.go @@ -105,7 +105,7 @@ func parseClientStoreConfig(args []string) (*ClientStoreConfig, error) { f.String("signing-wallet-password", genericconf.PASSWORD_NOT_SET, "password to unlock the wallet, if not specified the user is prompted for the password") f.Duration("das-retention-period", 24*time.Hour, "The period which DASes are requested to retain the stored batches.") f.Int("max-store-chunk-body-size", 512*1024, "The maximum HTTP POST body size for a chunked store request") - f.Bool("disable-chunked-store", false, "force data to always be sent to DAS all at once instead of splitting into chunks. Disabled by default") + f.Bool("disable-chunked-store", false, "force data to always be sent to DAS all at once instead of splitting into chunks") k, err := confighelpers.BeginCommonParse(f, args) if err != nil { diff --git a/das/aggregator.go b/das/aggregator.go index 3797922bb5..44f1568272 100644 --- a/das/aggregator.go +++ b/das/aggregator.go @@ -58,7 +58,7 @@ func AggregatorConfigAddOptions(prefix string, f *flag.FlagSet) { f.Int(prefix+".assumed-honest", DefaultAggregatorConfig.AssumedHonest, "Number of assumed honest backends (H). If there are N backends, K=N+1-H valid responses are required to consider an Store request to be successful.") f.Var(&parsedBackendsConf, prefix+".backends", "JSON RPC backend configuration. This can be specified on the command line as a JSON array, eg: [{\"url\": \"...\", \"pubkey\": \"...\"},...], or as a JSON array in the config file.") f.Int(prefix+".max-store-chunk-body-size", DefaultAggregatorConfig.MaxStoreChunkBodySize, "maximum HTTP POST body size to use for individual batch chunks, including JSON RPC overhead and an estimated overhead of 512B of headers") - f.Bool(prefix+".disable-chunked-store", DefaultAggregatorConfig.DisableChunkedStore, "force data to always be sent to DAS all at once instead of splitting into chunks. Disabled by default") + f.Bool(prefix+".disable-chunked-store", DefaultAggregatorConfig.DisableChunkedStore, "force data to always be sent to DAS all at once instead of splitting into chunks") } type Aggregator struct { From 0eec255ec01fc4cb8c1c6bc4e5610eb9ef29c727 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Tue, 26 Nov 2024 16:13:56 +0530 Subject: [PATCH 032/187] Filter transaction --- arbos/block_processor.go | 6 +- execution/gethexec/sequencer.go | 2 +- go-ethereum | 2 +- system_tests/seq_filter_test.go | 97 +++++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+), 5 deletions(-) create mode 100644 system_tests/seq_filter_test.go diff --git a/arbos/block_processor.go b/arbos/block_processor.go index 77475856ac..006e9f5fdd 100644 --- a/arbos/block_processor.go +++ b/arbos/block_processor.go @@ -118,7 +118,7 @@ type SequencingHooks struct { TxErrors []error DiscardInvalidTxsEarly bool PreTxFilter func(*params.ChainConfig, *types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, *arbitrum_types.ConditionalOptions, common.Address, *L1Info) error - PostTxFilter func(*types.Header, *arbosState.ArbosState, *types.Transaction, common.Address, uint64, *core.ExecutionResult) error + PostTxFilter func(*types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, common.Address, uint64, *core.ExecutionResult) error ConditionalOptionsForTx []*arbitrum_types.ConditionalOptions } @@ -129,7 +129,7 @@ func NoopSequencingHooks() *SequencingHooks { func(*params.ChainConfig, *types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, *arbitrum_types.ConditionalOptions, common.Address, *L1Info) error { return nil }, - func(*types.Header, *arbosState.ArbosState, *types.Transaction, common.Address, uint64, *core.ExecutionResult) error { + func(*types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, common.Address, uint64, *core.ExecutionResult) error { return nil }, nil, @@ -322,7 +322,7 @@ func ProduceBlockAdvanced( vm.Config{}, runMode, func(result *core.ExecutionResult) error { - return hooks.PostTxFilter(header, state, tx, sender, dataGas, result) + return hooks.PostTxFilter(header, statedb, state, tx, sender, dataGas, result) }, ) if err != nil { diff --git a/execution/gethexec/sequencer.go b/execution/gethexec/sequencer.go index 92d440e8cb..9db5c206fe 100644 --- a/execution/gethexec/sequencer.go +++ b/execution/gethexec/sequencer.go @@ -490,7 +490,7 @@ func (s *Sequencer) preTxFilter(_ *params.ChainConfig, header *types.Header, sta return nil } -func (s *Sequencer) postTxFilter(header *types.Header, _ *arbosState.ArbosState, tx *types.Transaction, sender common.Address, dataGas uint64, result *core.ExecutionResult) error { +func (s *Sequencer) postTxFilter(header *types.Header, _ *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, sender common.Address, dataGas uint64, result *core.ExecutionResult) error { if result.Err != nil && result.UsedGas > dataGas && result.UsedGas-dataGas <= s.config().MaxRevertGasReject { return arbitrum.NewRevertReason(result) } diff --git a/go-ethereum b/go-ethereum index d840c42249..cf0ca286a6 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit d840c4224963814f4a9a1dfb08510ded118bf1bf +Subproject commit cf0ca286a6e6cb435fc2331078a382f5efdaadb3 diff --git a/system_tests/seq_filter_test.go b/system_tests/seq_filter_test.go new file mode 100644 index 0000000000..728e7d1fd4 --- /dev/null +++ b/system_tests/seq_filter_test.go @@ -0,0 +1,97 @@ +package arbtest + +import ( + "context" + "errors" + "math/big" + "testing" + "time" + + "github.com/ethereum/go-ethereum/arbitrum_types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos" + "github.com/offchainlabs/nitro/arbos/arbosState" + "github.com/offchainlabs/nitro/arbos/arbostypes" + "github.com/offchainlabs/nitro/arbos/l1pricing" + "github.com/offchainlabs/nitro/util/arbmath" +) + +func TestSequencerFilter(t *testing.T) { + t.Parallel() + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + builder := NewNodeBuilder(ctx).DefaultConfig(t, false) + builder.isSequencer = true + cleanup := builder.Build(t) + defer cleanup() + + builder.L2Info.GenerateAccount("User") + var latestL2 uint64 + var err error + for i := 0; latestL2 < 3; i++ { + _, _ = builder.L2.TransferBalance(t, "Owner", "User", big.NewInt(1e18), builder.L2Info) + latestL2, err = builder.L2.Client.BlockNumber(ctx) + Require(t, err) + } + + preTxFilter := func(withBlock bool) func(_ *params.ChainConfig, _ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ *arbitrum_types.ConditionalOptions, _ common.Address, _ *arbos.L1Info) error { + return func(_ *params.ChainConfig, _ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ *arbitrum_types.ConditionalOptions, _ common.Address, _ *arbos.L1Info) error { + switch tx.GetInner().(type) { + case *types.DynamicFeeTx: + statedb.FilterTx(withBlock) + } + return nil + } + } + postTxFilter := func(_ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, _ *types.Transaction, _ common.Address, _ uint64, _ *core.ExecutionResult) error { + if statedb.IsTxInvalid() { + return errors.New("internal error") + } + return nil + } + + header := &arbostypes.L1IncomingMessageHeader{ + Kind: arbostypes.L1MessageType_L2Message, + Poster: l1pricing.BatchPosterAddress, + BlockNumber: 1, + Timestamp: arbmath.SaturatingUCast[uint64](time.Now().Unix()), + RequestId: nil, + L1BaseFee: nil, + } + var txes types.Transactions + txes = append(txes, builder.L2Info.PrepareTx("Owner", "User", builder.L2Info.TransferGas, big.NewInt(1e12), nil)) + txes = append(txes, builder.L2Info.PrepareTx("User", "Owner", builder.L2Info.TransferGas, big.NewInt(1e12), nil)) + + hooks := &arbos.SequencingHooks{TxErrors: []error{}, DiscardInvalidTxsEarly: false, PreTxFilter: preTxFilter(false), PostTxFilter: postTxFilter, ConditionalOptionsForTx: nil} + block, err := builder.L2.ExecNode.ExecEngine.SequenceTransactions(header, txes, hooks) + if block != nil { + t.Fatal("block shouldn't be generated when all txes have failed") + } + Require(t, err) // There shouldn't be any error in block generation + if len(hooks.TxErrors) != 2 { + t.Fatalf("expected 2 tx errors, found: %d", len(hooks.TxErrors)) + } + for _, err := range hooks.TxErrors { + if err.Error() != state.ErrArbTxFilter.Error() { + t.Fatalf("expected ErrArbTxFilter, found: %s", err.Error()) + } + } + + hooks.TxErrors = []error{} + hooks.PreTxFilter = preTxFilter(true) + block, err = builder.L2.ExecNode.ExecEngine.SequenceTransactions(header, txes, hooks) + if block != nil { + t.Fatal("block shouldn't be generated when all txes have failed") + } + if err == nil { + t.Fatal("expected ErrArbTxFilter but found nil") + } + if err.Error() != state.ErrArbTxFilter.Error() { + t.Fatalf("expected ErrArbTxFilter, found: %s", err.Error()) + } +} From 53b11fc599351cc25005b72dc46da16c59c6964d Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Tue, 26 Nov 2024 17:29:52 +0530 Subject: [PATCH 033/187] fix lint error --- system_tests/seq_filter_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system_tests/seq_filter_test.go b/system_tests/seq_filter_test.go index 728e7d1fd4..e054c8318f 100644 --- a/system_tests/seq_filter_test.go +++ b/system_tests/seq_filter_test.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/arbostypes" @@ -41,8 +42,7 @@ func TestSequencerFilter(t *testing.T) { preTxFilter := func(withBlock bool) func(_ *params.ChainConfig, _ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ *arbitrum_types.ConditionalOptions, _ common.Address, _ *arbos.L1Info) error { return func(_ *params.ChainConfig, _ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ *arbitrum_types.ConditionalOptions, _ common.Address, _ *arbos.L1Info) error { - switch tx.GetInner().(type) { - case *types.DynamicFeeTx: + if _, ok := tx.GetInner().(*types.DynamicFeeTx); ok { statedb.FilterTx(withBlock) } return nil From a471aab128545224dfcad0431cf10614335f193c Mon Sep 17 00:00:00 2001 From: Pepper Lebeck-Jobe Date: Fri, 29 Nov 2024 14:27:03 +0100 Subject: [PATCH 034/187] Create ADR-0001 Avoid primative constraint types This PR creates the ADR (Architectural Decision Record) structure in the docs in our repository and adds the first two ADRs. The first is sort of a meta-ADR in that it just captures our decision to actually use ADRs to record our architecturally-significant decisions for posterity and which format to use. --- ...markdown-architectural-decision-records.md | 29 ++++++ .../0001-avoid-primative-constraint-types.md | 96 +++++++++++++++++++ docs/decisions/README.md | 10 ++ docs/decisions/adr-template-bare-minimal.md | 16 ++++ docs/decisions/adr-template-bare.md | 44 +++++++++ docs/decisions/adr-template-minimal.md | 23 +++++ docs/decisions/adr-template.md | 74 ++++++++++++++ 7 files changed, 292 insertions(+) create mode 100644 docs/decisions/0000-use-markdown-architectural-decision-records.md create mode 100644 docs/decisions/0001-avoid-primative-constraint-types.md create mode 100644 docs/decisions/README.md create mode 100644 docs/decisions/adr-template-bare-minimal.md create mode 100644 docs/decisions/adr-template-bare.md create mode 100644 docs/decisions/adr-template-minimal.md create mode 100644 docs/decisions/adr-template.md diff --git a/docs/decisions/0000-use-markdown-architectural-decision-records.md b/docs/decisions/0000-use-markdown-architectural-decision-records.md new file mode 100644 index 0000000000..506f5fa28b --- /dev/null +++ b/docs/decisions/0000-use-markdown-architectural-decision-records.md @@ -0,0 +1,29 @@ +# Use Markdown Architectural Decision Records + +## Context and Problem Statement + +We want to record architectural decisions made in this project independent +whether decisions concern the architecture ("architectural decision record"), +the code, or other fields. + +Which format and structure should these records follow? + +## Considered Options + +* [MADR](https://adr.github.io/madr/) 4.0.0 – The Markdown Architectural Decision Records +* [Michael Nygard's template](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions) – The first incarnation of the term "ADR" +* [Sustainable Architectural Decisions](https://www.infoq.com/articles/sustainable-architectural-design-decisions) – The Y-Statements +* Other templates listed at +* Formless – No conventions for file format and structure + +## Decision Outcome + +Chosen option: "MADR 4.0.0", because + +* Implicit assumptions should be made explicit. + Design documentation is important to enable people understanding the decisions later on. + See also ["A rational design process: How and why to fake it"](https://doi.org/10.1109/TSE.1986.6312940). +* MADR allows for structured capturing of any decision. +* The MADR format is lean and fits our development style. +* The MADR structure is comprehensible and facilitates usage & maintenance. +* The MADR project is vivid. diff --git a/docs/decisions/0001-avoid-primative-constraint-types.md b/docs/decisions/0001-avoid-primative-constraint-types.md new file mode 100644 index 0000000000..b52cea8bdd --- /dev/null +++ b/docs/decisions/0001-avoid-primative-constraint-types.md @@ -0,0 +1,96 @@ +--- +status: accepted +date: 2024-11-29 +decision-makers: eljobe@ plasmapower@ +--- + +# Avoid primative constraint types + +## Context and Problem Statement + +When working on the go code for BoLD, we became slightly annoyed that several +places in the history package were checking the constraint that the `virtual` +argumet to a function was positive. One possible workaround would have been +to create a constrained wrapper type around `uint64` which would only allow +positive values. For example: + +```go +// Pos64 is a type which represents a positive uint64. +// +// The "zero" value of Pos64 is 1. +type Pos64 struct { + uint64 +} + +// NewPos64 returns a new Pos64 with the given value. +// +// errors if v is 0. +func NewPos64(v uint64) (Pos64, error) { + if v == 0 { + return Pos64{}, errors.New("v must be positive. got: 0") + } + return Pos64{v}, nil +} + +// MustPos64 returns a new Pos64 with the given value. +// +// panics if v is 0. +func MustPos64(v uint64) Pos64 { + if v == 0 { + panic("v must be positive. got: 0") + } + return Pos64{v} +} + +// Val returns the value of the Pos64. +func (p Pos64) Val() uint64 { + // The zero value of Pos64 is 1. + if p.uint64 == 0 { + return 1 + } + return p.uint64 +} +``` + +The idea being that within a package, all of the functions which needed to deal +with a `virtual` argument, could take in a `Pos64` instead of a `uint64` and it +would be up to clients of the package to ensure that they only passed in +positive values. + +## Considered Options + +* New Package: `util/chk` for checking type constraint +* Status Quo: check the constraint in multiple places +* Minimize Checks: no check in package private functions + +## Decision Outcome + +Chosen option: "Status Quo", because the "New Package" option introduces a +regression in being able to use type type with operators, and "Minimize Checks" +is too prone to bugs introduced by refactoring. + + +## Pros and Cons of the Options + +### New Pacakge: `util/chk` for checking type constraint + +* Good, because it is expressive +* Good, because the constraint only needs to be checked during construction +* Bad, because `Pos64` doesn't compile with operators like `+ * - /` + +### Status Quo: check the constraint in multiple places + +* Good, because it is what the code is already doing +* Good, because when a funciton becomes public, the constraint holds +* Good, because when a function moves to another file or package, the constraint holds +* Bad, because it means the check may need to be repeated. DRY + +### Minimize Checks: no check in package private functions + +* Good, because it reduces the amount of times a constraint is checked +* Bad, because the assumption might be violated if a private function becomes + public, or gains an additional caller. + +## More Information + +See the discussion on now-closed #2743 diff --git a/docs/decisions/README.md b/docs/decisions/README.md new file mode 100644 index 0000000000..63b1a18cd2 --- /dev/null +++ b/docs/decisions/README.md @@ -0,0 +1,10 @@ +# Decisions + +For new Architectural Decision Records (ADRs), please use one of the following templates as a starting point: + +* [adr-template.md](adr-template.md) has all sections, with explanations about them. +* [adr-template-minmal.md](adr-template-minimal.md) only contains mandatory sections, with explanations about them. +* [adr-template-bare.md](adr-template-bare.md) has all sections, wich are empty (no explanations). +* [adr-template-bare-minimal.md](adr-template-bare-minimal.md) has the mandatory sections, without explanations. + +The MADR documentation is available at while general information about ADRs is available at . diff --git a/docs/decisions/adr-template-bare-minimal.md b/docs/decisions/adr-template-bare-minimal.md new file mode 100644 index 0000000000..bd16d0ea21 --- /dev/null +++ b/docs/decisions/adr-template-bare-minimal.md @@ -0,0 +1,16 @@ +# + +## Context and Problem Statement + + + +## Considered Options + + + +## Decision Outcome + + + +### Consequences + diff --git a/docs/decisions/adr-template-bare.md b/docs/decisions/adr-template-bare.md new file mode 100644 index 0000000000..26f6598f70 --- /dev/null +++ b/docs/decisions/adr-template-bare.md @@ -0,0 +1,44 @@ +--- +status: +date: +decision-makers: +consulted: +informed: +--- + +# + +## Context and Problem Statement + + + +## Decision Drivers + +* + +## Considered Options + +* + +## Decision Outcome + +Chosen option: "", because + +### Consequences + +* Good, because +* Bad, because + +### Confirmation + + + +## Pros and Cons of the Options + +### + +* Good, because +* Neutral, because +* Bad, because + +## More Information diff --git a/docs/decisions/adr-template-minimal.md b/docs/decisions/adr-template-minimal.md new file mode 100644 index 0000000000..267640bfbc --- /dev/null +++ b/docs/decisions/adr-template-minimal.md @@ -0,0 +1,23 @@ +# {short title, representative of solved problem and found solution} + +## Context and Problem Statement + +{Describe the context and problem statement, e.g., in free form using two to three sentences or in the form of an illustrative story. You may want to articulate the problem in form of a question and add links to collaboration boards or issue management systems.} + +## Considered Options + +* {title of option 1} +* {title of option 2} +* {title of option 3} +* … + +## Decision Outcome + +Chosen option: "{title of option 1}", because {justification. e.g., only option, which meets k.o. criterion decision driver | which resolves force {force} | … | comes out best (see below)}. + + +### Consequences + +* Good, because {positive consequence, e.g., improvement of one or more desired qualities, …} +* Bad, because {negative consequence, e.g., compromising one or more desired qualities, …} +* … diff --git a/docs/decisions/adr-template.md b/docs/decisions/adr-template.md new file mode 100644 index 0000000000..08dac30ed8 --- /dev/null +++ b/docs/decisions/adr-template.md @@ -0,0 +1,74 @@ +--- +# These are optional metadata elements. Feel free to remove any of them. +status: "{proposed | rejected | accepted | deprecated | … | superseded by ADR-0123" +date: {YYYY-MM-DD when the decision was last updated} +decision-makers: {list everyone involved in the decision} +consulted: {list everyone whose opinions are sought (typically subject-matter experts); and with whom there is a two-way communication} +informed: {list everyone who is kept up-to-date on progress; and with whom there is a one-way communication} +--- + +# {short title, representative of solved problem and found solution} + +## Context and Problem Statement + +{Describe the context and problem statement, e.g., in free form using two to three sentences or in the form of an illustrative story. You may want to articulate the problem in form of a question and add links to collaboration boards or issue management systems.} + + +## Decision Drivers + +* {decision driver 1, e.g., a force, facing concern, …} +* {decision driver 2, e.g., a force, facing concern, …} +* … + +## Considered Options + +* {title of option 1} +* {title of option 2} +* {title of option 3} +* … + +## Decision Outcome + +Chosen option: "{title of option 1}", because {justification. e.g., only option, which meets k.o. criterion decision driver | which resolves force {force} | … | comes out best (see below)}. + + +### Consequences + +* Good, because {positive consequence, e.g., improvement of one or more desired qualities, …} +* Bad, because {negative consequence, e.g., compromising one or more desired qualities, …} +* … + + +### Confirmation + +{Describe how the implementation of/compliance with the ADR can/will be confirmed. Are the design that was decided for and its implementation in line with the decision made? E.g., a design/code review or a test with a library such as ArchUnit can help validate this. Not that although we classify this element as optional, it is included in many ADRs.} + + +## Pros and Cons of the Options + +### {title of option 1} + + +{example | description | pointer to more information | …} + +* Good, because {argument a} +* Good, because {argument b} + +* Neutral, because {argument c} +* Bad, because {argument d} +* … + +### {title of other option} + +{example | description | pointer to more information | …} + +* Good, because {argument a} +* Good, because {argument b} +* Neutral, because {argument c} +* Bad, because {argument d} +* … + + +## More Information + +{You might want to provide additional evidence/confidence for the decision outcome here and/or document the team agreement on the decision and/or define when/how this decision the decision should be realized and if/when it should be re-visited. Links to other decisions and resources might appear here as well.} From c25a7c6bcf27eb937b8e565cb62645e157be00a5 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Mon, 2 Dec 2024 15:37:44 -0600 Subject: [PATCH 035/187] address PR comments --- go-ethereum | 2 +- system_tests/seq_filter_test.go | 97 +++++++++++++++++++-------------- 2 files changed, 57 insertions(+), 42 deletions(-) diff --git a/go-ethereum b/go-ethereum index cf0ca286a6..30abfa28d1 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit cf0ca286a6e6cb435fc2331078a382f5efdaadb3 +Subproject commit 30abfa28d13911257bc4a94631268ae46934db43 diff --git a/system_tests/seq_filter_test.go b/system_tests/seq_filter_test.go index e054c8318f..35e35a68a6 100644 --- a/system_tests/seq_filter_test.go +++ b/system_tests/seq_filter_test.go @@ -21,15 +21,51 @@ import ( "github.com/offchainlabs/nitro/util/arbmath" ) -func TestSequencerFilter(t *testing.T) { +func TestSequencerTxFilter(t *testing.T) { t.Parallel() + + builder, header, txes, hooks, cleanup := setupSequencerFilterTest(t, false) + defer cleanup() + + block, err := builder.L2.ExecNode.ExecEngine.SequenceTransactions(header, txes, hooks) + if block != nil { + t.Fatal("block shouldn't be generated when all txes have failed") + } + Require(t, err) // There shouldn't be any error in block generation + if len(hooks.TxErrors) != 2 { + t.Fatalf("expected 2 tx errors, found: %d", len(hooks.TxErrors)) + } + for _, err := range hooks.TxErrors { + if err.Error() != state.ErrArbTxFilter.Error() { + t.Fatalf("expected ErrArbTxFilter, found: %s", err.Error()) + } + } +} + +func TestSequencerBlockFilter(t *testing.T) { + t.Parallel() + + builder, header, txes, hooks, cleanup := setupSequencerFilterTest(t, true) + defer cleanup() + + block, err := builder.L2.ExecNode.ExecEngine.SequenceTransactions(header, txes, hooks) + if block != nil { + t.Fatal("block shouldn't be generated when all txes have failed") + } + if err == nil { + t.Fatal("expected ErrArbTxFilter but found nil") + } + if err.Error() != state.ErrArbTxFilter.Error() { + t.Fatalf("expected ErrArbTxFilter, found: %s", err.Error()) + } +} + +func setupSequencerFilterTest(t *testing.T, withBlock bool) (*NodeBuilder, *arbostypes.L1IncomingMessageHeader, types.Transactions, *arbos.SequencingHooks, func()) { ctx, cancel := context.WithCancel(context.Background()) - defer cancel() builder := NewNodeBuilder(ctx).DefaultConfig(t, false) builder.isSequencer = true - cleanup := builder.Build(t) - defer cleanup() + builderCleanup := builder.Build(t) builder.L2Info.GenerateAccount("User") var latestL2 uint64 @@ -40,21 +76,6 @@ func TestSequencerFilter(t *testing.T) { Require(t, err) } - preTxFilter := func(withBlock bool) func(_ *params.ChainConfig, _ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ *arbitrum_types.ConditionalOptions, _ common.Address, _ *arbos.L1Info) error { - return func(_ *params.ChainConfig, _ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ *arbitrum_types.ConditionalOptions, _ common.Address, _ *arbos.L1Info) error { - if _, ok := tx.GetInner().(*types.DynamicFeeTx); ok { - statedb.FilterTx(withBlock) - } - return nil - } - } - postTxFilter := func(_ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, _ *types.Transaction, _ common.Address, _ uint64, _ *core.ExecutionResult) error { - if statedb.IsTxInvalid() { - return errors.New("internal error") - } - return nil - } - header := &arbostypes.L1IncomingMessageHeader{ Kind: arbostypes.L1MessageType_L2Message, Poster: l1pricing.BatchPosterAddress, @@ -63,35 +84,29 @@ func TestSequencerFilter(t *testing.T) { RequestId: nil, L1BaseFee: nil, } + var txes types.Transactions txes = append(txes, builder.L2Info.PrepareTx("Owner", "User", builder.L2Info.TransferGas, big.NewInt(1e12), nil)) txes = append(txes, builder.L2Info.PrepareTx("User", "Owner", builder.L2Info.TransferGas, big.NewInt(1e12), nil)) - hooks := &arbos.SequencingHooks{TxErrors: []error{}, DiscardInvalidTxsEarly: false, PreTxFilter: preTxFilter(false), PostTxFilter: postTxFilter, ConditionalOptionsForTx: nil} - block, err := builder.L2.ExecNode.ExecEngine.SequenceTransactions(header, txes, hooks) - if block != nil { - t.Fatal("block shouldn't be generated when all txes have failed") - } - Require(t, err) // There shouldn't be any error in block generation - if len(hooks.TxErrors) != 2 { - t.Fatalf("expected 2 tx errors, found: %d", len(hooks.TxErrors)) + preTxFilter := func(_ *params.ChainConfig, _ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ *arbitrum_types.ConditionalOptions, _ common.Address, _ *arbos.L1Info) error { + if _, ok := tx.GetInner().(*types.DynamicFeeTx); ok { + statedb.FilterTx(withBlock) + } + return nil } - for _, err := range hooks.TxErrors { - if err.Error() != state.ErrArbTxFilter.Error() { - t.Fatalf("expected ErrArbTxFilter, found: %s", err.Error()) + postTxFilter := func(_ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, _ *types.Transaction, _ common.Address, _ uint64, _ *core.ExecutionResult) error { + if statedb.IsTxInvalid() { + return errors.New("internal error") } + return nil } + hooks := &arbos.SequencingHooks{TxErrors: []error{}, DiscardInvalidTxsEarly: false, PreTxFilter: preTxFilter, PostTxFilter: postTxFilter, ConditionalOptionsForTx: nil} - hooks.TxErrors = []error{} - hooks.PreTxFilter = preTxFilter(true) - block, err = builder.L2.ExecNode.ExecEngine.SequenceTransactions(header, txes, hooks) - if block != nil { - t.Fatal("block shouldn't be generated when all txes have failed") - } - if err == nil { - t.Fatal("expected ErrArbTxFilter but found nil") - } - if err.Error() != state.ErrArbTxFilter.Error() { - t.Fatalf("expected ErrArbTxFilter, found: %s", err.Error()) + cleanup := func() { + builderCleanup() + cancel() } + + return builder, header, txes, hooks, cleanup } From 5eb9704138f997a7b76f1ebf18745116f4ed2c68 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Mon, 9 Dec 2024 15:46:36 -0600 Subject: [PATCH 036/187] Allow waiting for a minimum amount of time since parent assertion was created to post a new assertion --- arbnode/node.go | 2 ++ bold | 2 +- staker/bold/bold_staker.go | 7 ++++++- system_tests/bold_challenge_protocol_test.go | 1 + system_tests/bold_new_challenge_test.go | 1 + system_tests/overflow_assertions_test.go | 1 + 6 files changed, 12 insertions(+), 2 deletions(-) diff --git a/arbnode/node.go b/arbnode/node.go index f2e3433ecd..48920cdbdd 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -212,6 +212,7 @@ func ConfigDefaultL1NonSequencerTest() *Config { config.Staker = legacystaker.TestL1ValidatorConfig config.Staker.Enable = false config.BlockValidator.ValidationServerConfigs = []rpcclient.ClientConfig{{URL: ""}} + config.Bold.MinimumGapToParentAssertion = 0 return &config } @@ -230,6 +231,7 @@ func ConfigDefaultL2Test() *Config { config.Staker.Enable = false config.BlockValidator.ValidationServerConfigs = []rpcclient.ClientConfig{{URL: ""}} config.TransactionStreamer = DefaultTransactionStreamerConfig + config.Bold.MinimumGapToParentAssertion = 0 return &config } diff --git a/bold b/bold index d0a87de774..1b1c34c319 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit d0a87de774aecfa97161efd1b0a924d4d5fbcf74 +Subproject commit 1b1c34c31967242a492d29925640ede98d921fca diff --git a/staker/bold/bold_staker.go b/staker/bold/bold_staker.go index 1a8eed80fa..ad0e24e338 100644 --- a/staker/bold/bold_staker.go +++ b/staker/bold/bold_staker.go @@ -57,7 +57,9 @@ type BoldConfig struct { // How often to scan for newly created assertions onchain. AssertionScanningInterval time.Duration `koanf:"assertion-scanning-interval"` // How often to confirm assertions onchain. - AssertionConfirmingInterval time.Duration `koanf:"assertion-confirming-interval"` + AssertionConfirmingInterval time.Duration `koanf:"assertion-confirming-interval"` + // How long to wait since parent assertion was created to post a new assertion + MinimumGapToParentAssertion time.Duration `koanf:"minimum-gap-to-parent-assertion"` API bool `koanf:"api"` APIHost string `koanf:"api-host"` APIPort uint16 `koanf:"api-port"` @@ -98,6 +100,7 @@ var DefaultBoldConfig = BoldConfig{ AssertionPostingInterval: time.Minute * 15, AssertionScanningInterval: time.Minute, AssertionConfirmingInterval: time.Minute, + MinimumGapToParentAssertion: time.Minute, // Correct default? API: false, APIHost: "127.0.0.1", APIPort: 9393, @@ -121,6 +124,7 @@ func BoldConfigAddOptions(prefix string, f *flag.FlagSet) { f.Duration(prefix+".assertion-posting-interval", DefaultBoldConfig.AssertionPostingInterval, "assertion posting interval") f.Duration(prefix+".assertion-scanning-interval", DefaultBoldConfig.AssertionScanningInterval, "scan assertion interval") f.Duration(prefix+".assertion-confirming-interval", DefaultBoldConfig.AssertionConfirmingInterval, "confirm assertion interval") + f.Duration(prefix+".minimum-gap-to-parent-assertion", DefaultBoldConfig.MinimumGapToParentAssertion, "minimum duration to wait since the parent assertion was created to post a new assertion") f.Duration(prefix+".check-staker-switch-interval", DefaultBoldConfig.CheckStakerSwitchInterval, "how often to check if staker can switch to bold") f.Bool(prefix+".api", DefaultBoldConfig.API, "enable api") f.String(prefix+".api-host", DefaultBoldConfig.APIHost, "bold api host") @@ -448,6 +452,7 @@ func newBOLDChallengeManager( challengemanager.StackWithPollingInterval(scanningInterval), challengemanager.StackWithPostingInterval(postingInterval), challengemanager.StackWithConfirmationInterval(confirmingInterval), + challengemanager.StackWithMinimumGapToParentAssertion(config.MinimumGapToParentAssertion), challengemanager.StackWithTrackChallengeParentAssertionHashes(config.TrackChallengeParentAssertionHashes), challengemanager.StackWithHeaderProvider(l1Reader), } diff --git a/system_tests/bold_challenge_protocol_test.go b/system_tests/bold_challenge_protocol_test.go index 777817bf3e..3677021c00 100644 --- a/system_tests/bold_challenge_protocol_test.go +++ b/system_tests/bold_challenge_protocol_test.go @@ -417,6 +417,7 @@ func testChallengeProtocolBOLD(t *testing.T, spawnerOpts ...server_arb.SpawnerOp challengemanager.StackWithMode(modes.MakeMode), challengemanager.StackWithPostingInterval(time.Second * 3), challengemanager.StackWithPollingInterval(time.Second), + challengemanager.StackWithMinimumGapToParentAssertionCreationTime(0), challengemanager.StackWithAverageBlockCreationTime(time.Second), } diff --git a/system_tests/bold_new_challenge_test.go b/system_tests/bold_new_challenge_test.go index ad6e44bc71..eb452ca5d4 100644 --- a/system_tests/bold_new_challenge_test.go +++ b/system_tests/bold_new_challenge_test.go @@ -344,6 +344,7 @@ func startBoldChallengeManager(t *testing.T, ctx context.Context, builder *NodeB challengemanager.StackWithPostingInterval(time.Second * 3), challengemanager.StackWithPollingInterval(time.Second), challengemanager.StackWithAverageBlockCreationTime(time.Second), + challengemanager.StackWithMinimumGapToParentAssertionCreationTime(0), } challengeManager, err := challengemanager.NewChallengeStack( diff --git a/system_tests/overflow_assertions_test.go b/system_tests/overflow_assertions_test.go index c024a43070..848c61e7d3 100644 --- a/system_tests/overflow_assertions_test.go +++ b/system_tests/overflow_assertions_test.go @@ -224,6 +224,7 @@ func TestOverflowAssertions(t *testing.T) { challengemanager.StackWithPostingInterval(time.Second), challengemanager.StackWithPollingInterval(time.Millisecond * 500), challengemanager.StackWithAverageBlockCreationTime(time.Second), + challengemanager.StackWithMinimumGapToParentAssertionCreationTime(0), } manager, err := challengemanager.NewChallengeStack( From 81dcb5a01589dcb58fd009fd622af1aef38f8e1a Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Mon, 9 Dec 2024 16:23:57 -0600 Subject: [PATCH 037/187] minor fix --- system_tests/bold_challenge_protocol_test.go | 2 +- system_tests/bold_new_challenge_test.go | 2 +- system_tests/overflow_assertions_test.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/system_tests/bold_challenge_protocol_test.go b/system_tests/bold_challenge_protocol_test.go index 3677021c00..83700fc838 100644 --- a/system_tests/bold_challenge_protocol_test.go +++ b/system_tests/bold_challenge_protocol_test.go @@ -417,7 +417,7 @@ func testChallengeProtocolBOLD(t *testing.T, spawnerOpts ...server_arb.SpawnerOp challengemanager.StackWithMode(modes.MakeMode), challengemanager.StackWithPostingInterval(time.Second * 3), challengemanager.StackWithPollingInterval(time.Second), - challengemanager.StackWithMinimumGapToParentAssertionCreationTime(0), + challengemanager.StackWithMinimumGapToParentAssertion(0), challengemanager.StackWithAverageBlockCreationTime(time.Second), } diff --git a/system_tests/bold_new_challenge_test.go b/system_tests/bold_new_challenge_test.go index eb452ca5d4..fae4a57deb 100644 --- a/system_tests/bold_new_challenge_test.go +++ b/system_tests/bold_new_challenge_test.go @@ -344,7 +344,7 @@ func startBoldChallengeManager(t *testing.T, ctx context.Context, builder *NodeB challengemanager.StackWithPostingInterval(time.Second * 3), challengemanager.StackWithPollingInterval(time.Second), challengemanager.StackWithAverageBlockCreationTime(time.Second), - challengemanager.StackWithMinimumGapToParentAssertionCreationTime(0), + challengemanager.StackWithMinimumGapToParentAssertion(0), } challengeManager, err := challengemanager.NewChallengeStack( diff --git a/system_tests/overflow_assertions_test.go b/system_tests/overflow_assertions_test.go index 848c61e7d3..eb2bb01470 100644 --- a/system_tests/overflow_assertions_test.go +++ b/system_tests/overflow_assertions_test.go @@ -224,7 +224,7 @@ func TestOverflowAssertions(t *testing.T) { challengemanager.StackWithPostingInterval(time.Second), challengemanager.StackWithPollingInterval(time.Millisecond * 500), challengemanager.StackWithAverageBlockCreationTime(time.Second), - challengemanager.StackWithMinimumGapToParentAssertionCreationTime(0), + challengemanager.StackWithMinimumGapToParentAssertion(0), } manager, err := challengemanager.NewChallengeStack( From e89533b377e392ba6aa5b78e90bdf37b921bd7a4 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Mon, 9 Dec 2024 16:25:57 -0600 Subject: [PATCH 038/187] address PR comments --- cmd/datool/datool.go | 6 +++--- das/aggregator.go | 6 +++--- das/dasRpcClient.go | 24 ++++++++++++------------ das/rpc_aggregator.go | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/cmd/datool/datool.go b/cmd/datool/datool.go index 9cc2f5ebd9..7ff82be229 100644 --- a/cmd/datool/datool.go +++ b/cmd/datool/datool.go @@ -92,7 +92,7 @@ type ClientStoreConfig struct { SigningWallet string `koanf:"signing-wallet"` SigningWalletPassword string `koanf:"signing-wallet-password"` MaxStoreChunkBodySize int `koanf:"max-store-chunk-body-size"` - DisableChunkedStore bool `koanf:"disable-chunked-store"` + EnableChunkedStore bool `koanf:"enable-chunked-store"` } func parseClientStoreConfig(args []string) (*ClientStoreConfig, error) { @@ -105,7 +105,7 @@ func parseClientStoreConfig(args []string) (*ClientStoreConfig, error) { f.String("signing-wallet-password", genericconf.PASSWORD_NOT_SET, "password to unlock the wallet, if not specified the user is prompted for the password") f.Duration("das-retention-period", 24*time.Hour, "The period which DASes are requested to retain the stored batches.") f.Int("max-store-chunk-body-size", 512*1024, "The maximum HTTP POST body size for a chunked store request") - f.Bool("disable-chunked-store", false, "force data to always be sent to DAS all at once instead of splitting into chunks") + f.Bool("enable-chunked-store", true, "force data to always be sent to DAS all at once instead of splitting into chunks") k, err := confighelpers.BeginCommonParse(f, args) if err != nil { @@ -154,7 +154,7 @@ func startClientStore(args []string) error { } } - client, err := das.NewDASRPCClient(config.URL, signer, config.MaxStoreChunkBodySize, config.DisableChunkedStore) + client, err := das.NewDASRPCClient(config.URL, signer, config.MaxStoreChunkBodySize, config.EnableChunkedStore) if err != nil { return err } diff --git a/das/aggregator.go b/das/aggregator.go index 44f1568272..46ca89415d 100644 --- a/das/aggregator.go +++ b/das/aggregator.go @@ -41,14 +41,14 @@ type AggregatorConfig struct { AssumedHonest int `koanf:"assumed-honest"` Backends BackendConfigList `koanf:"backends"` MaxStoreChunkBodySize int `koanf:"max-store-chunk-body-size"` - DisableChunkedStore bool `koanf:"disable-chunked-store"` + EnableChunkedStore bool `koanf:"enable-chunked-store"` } var DefaultAggregatorConfig = AggregatorConfig{ AssumedHonest: 0, Backends: nil, MaxStoreChunkBodySize: 512 * 1024, - DisableChunkedStore: false, + EnableChunkedStore: true, } var parsedBackendsConf BackendConfigList @@ -58,7 +58,7 @@ func AggregatorConfigAddOptions(prefix string, f *flag.FlagSet) { f.Int(prefix+".assumed-honest", DefaultAggregatorConfig.AssumedHonest, "Number of assumed honest backends (H). If there are N backends, K=N+1-H valid responses are required to consider an Store request to be successful.") f.Var(&parsedBackendsConf, prefix+".backends", "JSON RPC backend configuration. This can be specified on the command line as a JSON array, eg: [{\"url\": \"...\", \"pubkey\": \"...\"},...], or as a JSON array in the config file.") f.Int(prefix+".max-store-chunk-body-size", DefaultAggregatorConfig.MaxStoreChunkBodySize, "maximum HTTP POST body size to use for individual batch chunks, including JSON RPC overhead and an estimated overhead of 512B of headers") - f.Bool(prefix+".disable-chunked-store", DefaultAggregatorConfig.DisableChunkedStore, "force data to always be sent to DAS all at once instead of splitting into chunks") + f.Bool(prefix+".enable-chunked-store", DefaultAggregatorConfig.EnableChunkedStore, "force data to always be sent to DAS all at once instead of splitting into chunks") } type Aggregator struct { diff --git a/das/dasRpcClient.go b/das/dasRpcClient.go index cd4ed078f4..aaa26a3aa9 100644 --- a/das/dasRpcClient.go +++ b/das/dasRpcClient.go @@ -35,11 +35,11 @@ var ( ) type DASRPCClient struct { // implements DataAvailabilityService - clnt *rpc.Client - url string - signer signature.DataSignerFunc - chunkSize uint64 - disableChunkedStore bool + clnt *rpc.Client + url string + signer signature.DataSignerFunc + chunkSize uint64 + enableChunkedStore bool } func nilSigner(_ []byte) ([]byte, error) { @@ -48,7 +48,7 @@ func nilSigner(_ []byte) ([]byte, error) { const sendChunkJSONBoilerplate = "{\"jsonrpc\":\"2.0\",\"id\":4294967295,\"method\":\"das_sendChunked\",\"params\":[\"\"]}" -func NewDASRPCClient(target string, signer signature.DataSignerFunc, maxStoreChunkBodySize int, disableChunkedStore bool) (*DASRPCClient, error) { +func NewDASRPCClient(target string, signer signature.DataSignerFunc, maxStoreChunkBodySize int, enableChunkedStore bool) (*DASRPCClient, error) { clnt, err := rpc.Dial(target) if err != nil { return nil, err @@ -58,14 +58,14 @@ func NewDASRPCClient(target string, signer signature.DataSignerFunc, maxStoreChu } client := &DASRPCClient{ - clnt: clnt, - url: target, - signer: signer, - disableChunkedStore: disableChunkedStore, + clnt: clnt, + url: target, + signer: signer, + enableChunkedStore: enableChunkedStore, } // Byte arrays are encoded in base64 - if !disableChunkedStore { + if enableChunkedStore { chunkSize := (maxStoreChunkBodySize - len(sendChunkJSONBoilerplate) - 512 /* headers */) / 2 if chunkSize <= 0 { return nil, fmt.Errorf("max-store-chunk-body-size %d doesn't leave enough room for chunk payload", maxStoreChunkBodySize) @@ -89,7 +89,7 @@ func (c *DASRPCClient) Store(ctx context.Context, message []byte, timeout uint64 rpcClientStoreDurationHistogram.Update(time.Since(start).Nanoseconds()) }() - if c.disableChunkedStore { + if !c.enableChunkedStore { log.Info("Legacy store is being force-used by the DAS client", "url", c.url) return c.legacyStore(ctx, message, timeout) } diff --git a/das/rpc_aggregator.go b/das/rpc_aggregator.go index 91fdc07b45..1c9e2eecab 100644 --- a/das/rpc_aggregator.go +++ b/das/rpc_aggregator.go @@ -110,7 +110,7 @@ func ParseServices(config AggregatorConfig, signer signature.DataSignerFunc) ([] } metricName := metricsutil.CanonicalizeMetricName(url.Hostname()) - service, err := NewDASRPCClient(b.URL, signer, config.MaxStoreChunkBodySize, config.DisableChunkedStore) + service, err := NewDASRPCClient(b.URL, signer, config.MaxStoreChunkBodySize, config.EnableChunkedStore) if err != nil { return nil, err } From 3f7dd3e035caa9b2847f2bb79197d53df91a68d0 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Mon, 9 Dec 2024 17:21:46 -0600 Subject: [PATCH 039/187] fix failing tests --- das/aggregator_test.go | 4 ++-- das/rpc_test.go | 1 + system_tests/das_test.go | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/das/aggregator_test.go b/das/aggregator_test.go index 217315eef0..b14c2961ce 100644 --- a/das/aggregator_test.go +++ b/das/aggregator_test.go @@ -50,7 +50,7 @@ func TestDAS_BasicAggregationLocal(t *testing.T) { backends = append(backends, *details) } - aggregator, err := NewAggregator(ctx, DataAvailabilityConfig{RPCAggregator: AggregatorConfig{AssumedHonest: 1}, ParentChainNodeURL: "none"}, backends) + aggregator, err := NewAggregator(ctx, DataAvailabilityConfig{RPCAggregator: AggregatorConfig{AssumedHonest: 1, EnableChunkedStore: true}, ParentChainNodeURL: "none"}, backends) Require(t, err) rawMsg := []byte("It's time for you to see the fnords.") @@ -207,7 +207,7 @@ func testConfigurableStorageFailures(t *testing.T, shouldFailAggregation bool) { aggregator, err := NewAggregator( ctx, DataAvailabilityConfig{ - RPCAggregator: AggregatorConfig{AssumedHonest: assumedHonest}, + RPCAggregator: AggregatorConfig{AssumedHonest: assumedHonest, EnableChunkedStore: true}, ParentChainNodeURL: "none", RequestTimeout: time.Millisecond * 2000, }, backends) diff --git a/das/rpc_test.go b/das/rpc_test.go index ebc4b736d5..c4ee71aa4f 100644 --- a/das/rpc_test.go +++ b/das/rpc_test.go @@ -84,6 +84,7 @@ func testRpcImpl(t *testing.T, size, times int, concurrent bool) { AssumedHonest: 1, Backends: beConfigs, MaxStoreChunkBodySize: (chunkSize * 2) + len(sendChunkJSONBoilerplate), + EnableChunkedStore: true, }, RequestTimeout: time.Minute, } diff --git a/system_tests/das_test.go b/system_tests/das_test.go index 52703c879d..ba50dcfff2 100644 --- a/system_tests/das_test.go +++ b/system_tests/das_test.go @@ -90,6 +90,7 @@ func aggConfigForBackend(backendConfig das.BackendConfig) das.AggregatorConfig { AssumedHonest: 1, Backends: das.BackendConfigList{backendConfig}, MaxStoreChunkBodySize: 512 * 1024, + EnableChunkedStore: true, } } From 296314bf92d7f230ac368c2513a3aa7bdf1331ff Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Tue, 10 Dec 2024 09:19:14 -0600 Subject: [PATCH 040/187] address PR comment --- cmd/datool/datool.go | 2 +- das/aggregator.go | 2 +- das/dasRpcClient.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/datool/datool.go b/cmd/datool/datool.go index 7ff82be229..67998880e0 100644 --- a/cmd/datool/datool.go +++ b/cmd/datool/datool.go @@ -105,7 +105,7 @@ func parseClientStoreConfig(args []string) (*ClientStoreConfig, error) { f.String("signing-wallet-password", genericconf.PASSWORD_NOT_SET, "password to unlock the wallet, if not specified the user is prompted for the password") f.Duration("das-retention-period", 24*time.Hour, "The period which DASes are requested to retain the stored batches.") f.Int("max-store-chunk-body-size", 512*1024, "The maximum HTTP POST body size for a chunked store request") - f.Bool("enable-chunked-store", true, "force data to always be sent to DAS all at once instead of splitting into chunks") + f.Bool("enable-chunked-store", true, "enable data to be sent to DAS in chunks instead of all at once") k, err := confighelpers.BeginCommonParse(f, args) if err != nil { diff --git a/das/aggregator.go b/das/aggregator.go index 46ca89415d..d6922fced8 100644 --- a/das/aggregator.go +++ b/das/aggregator.go @@ -58,7 +58,7 @@ func AggregatorConfigAddOptions(prefix string, f *flag.FlagSet) { f.Int(prefix+".assumed-honest", DefaultAggregatorConfig.AssumedHonest, "Number of assumed honest backends (H). If there are N backends, K=N+1-H valid responses are required to consider an Store request to be successful.") f.Var(&parsedBackendsConf, prefix+".backends", "JSON RPC backend configuration. This can be specified on the command line as a JSON array, eg: [{\"url\": \"...\", \"pubkey\": \"...\"},...], or as a JSON array in the config file.") f.Int(prefix+".max-store-chunk-body-size", DefaultAggregatorConfig.MaxStoreChunkBodySize, "maximum HTTP POST body size to use for individual batch chunks, including JSON RPC overhead and an estimated overhead of 512B of headers") - f.Bool(prefix+".enable-chunked-store", DefaultAggregatorConfig.EnableChunkedStore, "force data to always be sent to DAS all at once instead of splitting into chunks") + f.Bool(prefix+".enable-chunked-store", DefaultAggregatorConfig.EnableChunkedStore, "enable data to be sent to DAS in chunks instead of all at once") } type Aggregator struct { diff --git a/das/dasRpcClient.go b/das/dasRpcClient.go index aaa26a3aa9..5d4ca0dc93 100644 --- a/das/dasRpcClient.go +++ b/das/dasRpcClient.go @@ -90,7 +90,7 @@ func (c *DASRPCClient) Store(ctx context.Context, message []byte, timeout uint64 }() if !c.enableChunkedStore { - log.Info("Legacy store is being force-used by the DAS client", "url", c.url) + log.Debug("Legacy store is being force-used by the DAS client", "url", c.url) return c.legacyStore(ctx, message, timeout) } From 39b063cddc8fcbe21c5fed7d4991ba0d95858dd2 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Tue, 10 Dec 2024 10:15:35 -0600 Subject: [PATCH 041/187] merge master and resolve conflict --- .github/workflows/ci.yml | 4 +- .gitmodules | 3 + .golangci.yml | 8 + Dockerfile | 1 + LICENSE.md | 2 +- README.md | 2 +- arbcompress/native.go | 1 + arbitrator/bench/src/bin.rs | 8 +- arbitrator/prover/src/lib.rs | 6 + arbitrator/prover/src/machine.rs | 39 + arbitrator/prover/test-cases/dynamic.wat | 2 +- arbitrator/prover/test-cases/go/main.go | 2 +- arbitrator/prover/test-cases/link.wat | 2 +- arbitrator/prover/test-cases/user.wat | 12 + .../stylus/tests/hostio-test/src/main.rs | 33 + .../wasm-libraries/user-host-trait/src/lib.rs | 2 +- arbnode/api.go | 1 + arbnode/batch_poster.go | 9 +- arbnode/dataposter/data_poster.go | 25 +- arbnode/dataposter/dataposter_test.go | 6 +- arbnode/dataposter/dbstorage/storage.go | 1 + .../externalsignertest/externalsignertest.go | 1 + arbnode/dataposter/redis/redisstorage.go | 3 +- arbnode/dataposter/storage/storage.go | 1 + arbnode/dataposter/storage_test.go | 6 +- arbnode/delayed.go | 6 +- arbnode/delayed_seq_reorg_test.go | 1 + arbnode/delayed_sequencer.go | 3 +- arbnode/inbox_reader.go | 3 +- arbnode/inbox_test.go | 20 +- arbnode/inbox_tracker_test.go | 1 + arbnode/maintenance.go | 4 +- arbnode/message_pruner.go | 4 +- arbnode/message_pruner_test.go | 1 + arbnode/node.go | 62 +- arbnode/redislock/redis.go | 6 +- .../resourcemanager/resource_management.go | 3 +- arbnode/seq_coordinator.go | 2 +- arbnode/sequencer_inbox.go | 8 +- arbnode/sync_monitor.go | 16 +- arbnode/transaction_streamer.go | 3 +- arbos/activate_test.go | 1 + arbos/addressSet/addressSet.go | 1 + arbos/addressSet/addressSet_test.go | 11 +- arbos/addressTable/addressTable.go | 1 + arbos/addressTable/addressTable_test.go | 1 + arbos/arbosState/arbosstate.go | 3 +- arbos/arbosState/arbosstate_test.go | 1 + arbos/arbosState/initialization_test.go | 5 +- arbos/arbosState/initialize.go | 18 +- arbos/arbostypes/incomingmessage.go | 3 +- arbos/arbostypes/messagewithmeta.go | 1 + arbos/block_processor.go | 40 +- arbos/blockhash/blockhash.go | 1 + arbos/blockhash/blockhash_test.go | 1 + arbos/burn/burn.go | 1 + arbos/engine.go | 2 +- arbos/extra_transaction_checks.go | 1 + arbos/incomingmessage_test.go | 1 + arbos/internal_tx.go | 7 +- arbos/l1pricing/batchPoster.go | 1 + arbos/l1pricing/batchPoster_test.go | 1 + arbos/l1pricing/l1PricingOldVersions.go | 1 + arbos/l1pricing/l1pricing.go | 17 +- arbos/l1pricing/l1pricing_test.go | 1 + arbos/l1pricing_test.go | 14 +- arbos/l2pricing/model.go | 1 + arbos/merkleAccumulator/merkleAccumulator.go | 1 + arbos/parse_l2.go | 1 + arbos/programs/api.go | 4 +- arbos/programs/native.go | 2 + arbos/programs/native_api.go | 2 + arbos/programs/params.go | 1 + arbos/programs/programs.go | 1 + arbos/programs/testcompile.go | 1 + arbos/queue_test.go | 1 - arbos/retryable_test.go | 10 +- arbos/retryables/retryable.go | 1 + arbos/storage/queue.go | 4 +- arbos/storage/storage.go | 1 + arbos/storage/storage_test.go | 1 + arbos/tx_processor.go | 18 +- arbos/util/retryable_encoding_test.go | 9 +- arbos/util/storage_cache.go | 3 +- arbos/util/storage_cache_test.go | 4 +- arbos/util/tracing.go | 3 +- arbos/util/transfer.go | 11 +- arbos/util/util.go | 1 + arbstate/daprovider/reader.go | 1 + arbstate/inbox_fuzz_test.go | 1 + arbutil/hash_test.go | 3 +- blocks_reexecutor/blocks_reexecutor.go | 4 +- bold | 1 + broadcastclient/broadcastclient.go | 31 +- broadcastclient/broadcastclient_test.go | 74 +- broadcaster/backlog/backlog.go | 9 +- broadcaster/message/message.go | 1 + .../message/message_serialization_test.go | 1 + cmd/chaininfo/arbitrum_chain_info.json | 2 + cmd/chaininfo/chain_defaults.go | 141 +++ cmd/chaininfo/chain_defaults_test.go | 17 + cmd/chaininfo/chain_info.go | 5 +- cmd/conf/chain.go | 3 +- cmd/conf/database.go | 3 +- cmd/conf/init.go | 9 +- .../data_availability_check.go | 4 +- cmd/datool/datool.go | 2 +- cmd/dbconv/dbconv/config.go | 3 +- cmd/dbconv/dbconv/dbconv.go | 1 + cmd/dbconv/main.go | 4 +- cmd/deploy/deploy.go | 12 +- cmd/genericconf/config.go | 3 +- cmd/genericconf/filehandler_test.go | 7 +- cmd/genericconf/liveconfig.go | 1 + cmd/genericconf/logging.go | 3 +- cmd/genericconf/pprof.go | 1 - cmd/nitro-val/config.go | 5 +- cmd/nitro/config_test.go | 6 +- cmd/nitro/init.go | 43 +- cmd/nitro/init_test.go | 4 +- cmd/nitro/nitro.go | 47 +- cmd/pruning/pruning.go | 1 + cmd/replay/db.go | 1 + .../rediscoordinator/redis_coordinator.go | 3 +- .../seq-coordinator-manager.go | 6 +- cmd/util/confighelpers/configuration.go | 1 + das/aggregator.go | 18 +- das/aggregator_test.go | 4 +- das/cache_storage_service.go | 7 +- das/chain_fetch_das.go | 4 +- das/das.go | 3 +- das/dasRpcClient.go | 5 +- das/dasRpcServer.go | 1 - das/dastree/dastree.go | 1 + das/dastree/dastree_test.go | 1 + das/db_storage_service.go | 4 +- das/fallback_storage_service.go | 1 + das/fallback_storage_service_test.go | 1 + das/google_cloud_storage_service_test.go | 9 +- das/key_utils.go | 1 + das/local_file_storage_service.go | 6 +- das/memory_backed_storage_service.go | 1 + das/panic_wrapper.go | 1 + das/reader_aggregator_strategies.go | 6 +- das/reader_aggregator_strategies_test.go | 7 +- das/redis_storage_service.go | 10 +- das/redis_storage_service_test.go | 1 + das/redundant_storage_service.go | 1 + das/restful_client.go | 1 + das/restful_server.go | 1 + das/rpc_aggregator.go | 7 +- das/rpc_test.go | 1 + das/s3_storage_service.go | 8 +- das/signature_verifier.go | 1 + das/simple_das_reader_aggregator.go | 4 +- das/storage_service.go | 1 + das/syncing_fallback_storage.go | 4 +- das/util.go | 1 + deploy/deploy.go | 1 + execution/gethexec/api.go | 1 + execution/gethexec/block_recorder.go | 4 +- execution/gethexec/blockchain.go | 1 + execution/gethexec/executionengine.go | 9 +- execution/gethexec/forwarder.go | 5 +- execution/gethexec/node.go | 4 +- execution/gethexec/sequencer.go | 11 +- execution/gethexec/stylus_tracer.go | 1 + execution/gethexec/sync_monitor.go | 3 +- execution/gethexec/tx_pre_checker.go | 4 +- execution/gethexec/wasmstorerebuilder.go | 1 + execution/interface.go | 1 + execution/nodeInterface/NodeInterface.go | 13 +- execution/nodeInterface/NodeInterfaceDebug.go | 1 + execution/nodeInterface/virtual-contracts.go | 1 + gethhook/geth-hook.go | 1 + gethhook/geth_test.go | 3 +- go-ethereum | 2 +- go.mod | 30 +- go.sum | 387 +------- linters/koanf/handlers.go | 6 +- linters/linters.go | 3 +- nitro-testnode | 2 +- precompiles/ArbAddressTable_test.go | 5 +- precompiles/ArbAggregator_test.go | 1 + precompiles/ArbGasInfo.go | 1 + precompiles/ArbGasInfo_test.go | 1 + precompiles/ArbInfo.go | 1 + precompiles/ArbOwner.go | 6 +- precompiles/ArbOwner_test.go | 9 +- precompiles/ArbRetryableTx.go | 2 +- precompiles/ArbRetryableTx_test.go | 6 +- precompiles/ArbSys.go | 1 + precompiles/ArbWasm.go | 1 + precompiles/precompile.go | 14 +- precompiles/precompile_test.go | 6 +- precompiles/wrapper.go | 6 +- pubsub/common.go | 3 +- pubsub/consumer.go | 6 +- pubsub/producer.go | 8 +- pubsub/pubsub_test.go | 6 +- relay/relay_stress_test.go | 1 + scripts/split-val-entry.sh | 2 +- staker/block_validator.go | 6 +- staker/block_validator_schema.go | 1 + staker/bold/bold_staker.go | 536 ++++++++++ staker/bold/bold_state_provider.go | 542 ++++++++++ staker/bold/data_poster_transactor.go | 44 + staker/challenge-cache/cache.go | 35 +- staker/challenge-cache/cache_test.go | 37 +- staker/execution_challenge_bakend.go | 1 + .../{ => legacy}/block_challenge_backend.go | 12 +- staker/{ => legacy}/challenge_manager.go | 26 +- staker/{ => legacy}/challenge_test.go | 23 +- staker/{ => legacy}/common_test.go | 2 +- staker/{ => legacy}/fast_confirm.go | 21 +- staker/{ => legacy}/l1_validator.go | 75 +- .../legacy/mock_machine_test.go | 18 +- staker/{ => legacy}/staker.go | 162 ++- .../multi_protocol/multi_protocol_staker.go | 249 +++++ staker/rollup_watcher.go | 12 +- staker/stateless_block_validator.go | 30 +- staker/txbuilder/builder.go | 162 +-- staker/validatorwallet/contract.go | 80 +- staker/validatorwallet/eoa.go | 17 +- staker/validatorwallet/noop.go | 4 +- statetransfer/data.go | 1 + statetransfer/interface.go | 1 + statetransfer/jsondatareader.go | 4 + statetransfer/memdatareader.go | 4 + system_tests/aliasing_test.go | 1 + system_tests/batch_poster_test.go | 1 + system_tests/block_hash_test.go | 1 + system_tests/blocks_reexecutor_test.go | 1 + system_tests/bloom_test.go | 1 + system_tests/bold_challenge_protocol_test.go | 922 ++++++++++++++++++ system_tests/bold_new_challenge_test.go | 358 +++++++ system_tests/bold_state_provider_test.go | 419 ++++++++ system_tests/common_test.go | 174 +++- system_tests/conditionaltx_test.go | 1 + system_tests/contract_tx_test.go | 5 +- system_tests/das_test.go | 6 +- system_tests/db_conversion_test.go | 1 + system_tests/debugapi_test.go | 1 + system_tests/delayedinbox_test.go | 1 + system_tests/estimation_test.go | 1 + system_tests/fast_confirm_test.go | 22 +- system_tests/forwarder_test.go | 2 + system_tests/full_challenge_impl_test.go | 9 +- system_tests/infra_fee_test.go | 1 + system_tests/initialization_test.go | 5 +- system_tests/log_subscription_test.go | 1 + system_tests/meaningless_reorg_test.go | 1 + system_tests/mock_machine_test.go | 41 + system_tests/nodeinterface_test.go | 1 + system_tests/outbox_test.go | 2 +- system_tests/overflow_assertions_test.go | 316 ++++++ system_tests/precompile_doesnt_revert_test.go | 5 +- system_tests/precompile_fuzz_test.go | 5 +- system_tests/precompile_test.go | 8 +- system_tests/program_gas_test.go | 159 +++ system_tests/program_norace_test.go | 1 + system_tests/program_recursive_test.go | 1 + system_tests/program_test.go | 26 + system_tests/pruning_test.go | 1 + system_tests/recreatestate_rpc_test.go | 1 + system_tests/retryable_test.go | 5 +- system_tests/seq_coordinator_test.go | 13 +- system_tests/seq_nonce_test.go | 1 + system_tests/seq_pause_test.go | 1 + system_tests/seq_reject_test.go | 5 +- system_tests/seqcompensation_test.go | 1 + system_tests/seqfeed_test.go | 14 +- system_tests/staker_test.go | 27 +- system_tests/state_fuzz_test.go | 6 +- system_tests/staterecovery_test.go | 1 + system_tests/stylus_trace_test.go | 4 +- system_tests/stylus_tracer_test.go | 4 +- system_tests/test_info.go | 6 +- system_tests/triedb_race_test.go | 1 + system_tests/twonodeslong_test.go | 4 +- system_tests/unsupported_txtypes_test.go | 3 +- system_tests/validation_mock_test.go | 16 +- system_tests/wrap_transaction_test.go | 1 + util/arbmath/bits.go | 3 +- util/arbmath/math_test.go | 1 + util/containers/syncmap.go | 17 +- util/contracts/address_verifier.go | 1 + util/dbutil/dbutil.go | 3 +- util/headerreader/blob_client.go | 5 +- util/headerreader/blob_client_test.go | 3 +- util/headerreader/header_reader.go | 4 +- util/jsonapi/preimages_test.go | 1 + util/merkletree/merkleAccumulator_test.go | 1 + util/merkletree/merkleEventProof.go | 1 + util/merkletree/merkleEventProof_test.go | 1 + util/merkletree/merkleTree.go | 1 + util/redisutil/redisutil.go | 225 ++++- util/redisutil/test_redis.go | 1 + util/rpcclient/rpcclient_test.go | 6 +- util/sharedmetrics/sharedmetrics.go | 1 + util/signature/sign_verify.go | 4 +- util/stopwaiter/stopwaiter.go | 17 +- util/stopwaiter/stopwaiter_test.go | 18 + util/testhelpers/env/env.go | 2 +- util/testhelpers/port.go | 11 + util/testhelpers/port_test.go | 12 +- util/testhelpers/testhelpers.go | 1 + validator/client/redis/producer.go | 6 +- validator/client/validation_client.go | 30 +- validator/execution_state.go | 8 + validator/interface.go | 4 +- validator/server_api/json.go | 2 +- validator/server_arb/bold_machine.go | 145 +++ validator/server_arb/execution_run.go | 28 +- validator/server_arb/execution_run_test.go | 17 +- validator/server_arb/machine.go | 11 + validator/server_arb/machine_loader.go | 1 + validator/server_arb/machine_test.go | 1 + validator/server_arb/nitro_machine.go | 2 + validator/server_arb/prover_interface.go | 2 + validator/server_arb/validator_spawner.go | 65 +- validator/server_common/machine_loader.go | 1 + validator/server_common/valrun.go | 1 + validator/server_jit/jit_machine.go | 1 + validator/server_jit/machine_loader.go | 1 + validator/server_jit/spawner.go | 3 +- validator/validation_entry.go | 1 + validator/valnode/redis/consumer.go | 4 +- validator/valnode/redis/consumer_test.go | 1 + validator/valnode/validation_api.go | 16 +- validator/valnode/valnode.go | 9 +- wavmio/stub.go | 1 + wsbroadcastserver/clientconnection.go | 9 +- wsbroadcastserver/connectionlimiter.go | 3 +- wsbroadcastserver/utils.go | 5 +- wsbroadcastserver/wsbroadcastserver.go | 1 + 336 files changed, 5809 insertions(+), 1336 deletions(-) create mode 160000 bold create mode 100644 cmd/chaininfo/chain_defaults.go create mode 100644 cmd/chaininfo/chain_defaults_test.go create mode 100644 staker/bold/bold_staker.go create mode 100644 staker/bold/bold_state_provider.go create mode 100644 staker/bold/data_poster_transactor.go rename staker/{ => legacy}/block_challenge_backend.go (96%) rename staker/{ => legacy}/challenge_manager.go (97%) rename staker/{ => legacy}/challenge_test.go (93%) rename staker/{ => legacy}/common_test.go (95%) rename staker/{ => legacy}/fast_confirm.go (94%) rename staker/{ => legacy}/l1_validator.go (90%) rename validator/server_arb/mock_machine.go => staker/legacy/mock_machine_test.go (78%) rename staker/{ => legacy}/staker.go (92%) create mode 100644 staker/multi_protocol/multi_protocol_staker.go create mode 100644 system_tests/bold_challenge_protocol_test.go create mode 100644 system_tests/bold_new_challenge_test.go create mode 100644 system_tests/bold_state_provider_test.go create mode 100644 system_tests/mock_machine_test.go create mode 100644 system_tests/overflow_assertions_test.go create mode 100644 validator/server_arb/bold_machine.go diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ed49634ad..1eda1d9b7e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: redis: image: redis ports: - - 6379:6379 + - 6379:6379 strategy: fail-fast: false @@ -192,7 +192,7 @@ jobs: - name: run challenge tests if: matrix.test-mode == 'challenge' - run: ${{ github.workspace }}/.github/workflows/gotestsum.sh --tags challengetest --run TestChallenge --cover + run: ${{ github.workspace }}/.github/workflows/gotestsum.sh --tags challengetest --run TestChallenge --timeout 60m --cover - name: run stylus tests if: matrix.test-mode == 'stylus' diff --git a/.gitmodules b/.gitmodules index d4d26282ae..24df007a79 100644 --- a/.gitmodules +++ b/.gitmodules @@ -23,6 +23,9 @@ [submodule "nitro-testnode"] path = nitro-testnode url = https://github.com/OffchainLabs/nitro-testnode.git +[submodule "bold"] + path = bold + url = https://github.com/OffchainLabs/bold.git [submodule "arbitrator/langs/rust"] path = arbitrator/langs/rust url = https://github.com/OffchainLabs/stylus-sdk-rs.git diff --git a/.golangci.yml b/.golangci.yml index 0594670137..8e597f950a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -16,6 +16,7 @@ linters: enable: - asciicheck # check for non-ascii characters - errorlint # enure error wrapping is safely done + - gci # keep imports sorted deterministically - gocritic # check for certain simplifications - gofmt # ensure code is formatted - gosec # check for security concerns @@ -30,6 +31,13 @@ linters-settings: # check-type-assertions: true + gci: + sections: + - standard + - default + - prefix(github.com/ethereum/go-ethereum) + - prefix(github.com/offchainlabs) + gocritic: disabled-tags: - experimental diff --git a/Dockerfile b/Dockerfile index aba5432254..ba1f2feb3e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -234,6 +234,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ COPY go.mod go.sum ./ COPY go-ethereum/go.mod go-ethereum/go.sum go-ethereum/ COPY fastcache/go.mod fastcache/go.sum fastcache/ +COPY bold/go.mod bold/go.sum bold/ RUN go mod download COPY . ./ COPY --from=contracts-builder workspace/contracts/build/ contracts/build/ diff --git a/LICENSE.md b/LICENSE.md index 25768b3010..13e28a591a 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -19,7 +19,7 @@ Additional Use Grant: You may use the Licensed Work in a production environment validating the correctness of the posted chain state, or to deploy and operate (x) a blockchain that settles to a Covered Arbitrum Chain or (y) a blockchain in accordance with, and subject to, the [Arbitrum - Expansion Program Term of Use](https://docs.arbitrum.foundation/assets/files/Arbitrum%20Expansion%20Program%20Jan182024-4f08b0c2cb476a55dc153380fa3e64b0.pdf). For purposes of this + Expansion Program Term of Use](https://docs.arbitrum.foundation/aep/ArbitrumExpansionProgramTerms.pdf). For purposes of this Additional Use Grant, the "Covered Arbitrum Chains" are (a) Arbitrum One (chainid:42161), Arbitrum Nova (chainid:42170), Arbitrum Rinkeby testnet/Rinkarby (chainid:421611),Arbitrum Nitro diff --git a/README.md b/README.md index 1f0e4ac81c..30904238dc 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Nitro is currently licensed under a [Business Source License](./LICENSE.md), sim The Additional Use Grant also permits the deployment of the Nitro software, in a permissionless fashion and without cost, as a new blockchain provided that the chain settles to either Arbitrum One or Arbitrum Nova. -For those that prefer to deploy the Nitro software either directly on Ethereum (i.e. an L2) or have it settle to another Layer-2 on top of Ethereum, the [Arbitrum Expansion Program (the "AEP")](https://docs.arbitrum.foundation/assets/files/Arbitrum%20Expansion%20Program%20Jan182024-4f08b0c2cb476a55dc153380fa3e64b0.pdf) was recently established. The AEP allows for the permissionless deployment in the aforementioned fashion provided that 10% of net revenue (as more fully described in the AEP) is contributed back to the Arbitrum community in accordance with the requirements of the AEP. +For those that prefer to deploy the Nitro software either directly on Ethereum (i.e. an L2) or have it settle to another Layer-2 on top of Ethereum, the [Arbitrum Expansion Program (the "AEP")](https://docs.arbitrum.foundation/aep/ArbitrumExpansionProgramTerms.pdf) was recently established. The AEP allows for the permissionless deployment in the aforementioned fashion provided that 10% of net revenue (as more fully described in the AEP) is contributed back to the Arbitrum community in accordance with the requirements of the AEP. ## Contact diff --git a/arbcompress/native.go b/arbcompress/native.go index f7b8f0b8e0..943d21e89e 100644 --- a/arbcompress/native.go +++ b/arbcompress/native.go @@ -12,6 +12,7 @@ package arbcompress #include "arbitrator.h" */ import "C" + import ( "errors" "fmt" diff --git a/arbitrator/bench/src/bin.rs b/arbitrator/bench/src/bin.rs index 60a7036e2b..f9bd85ce53 100644 --- a/arbitrator/bench/src/bin.rs +++ b/arbitrator/bench/src/bin.rs @@ -18,13 +18,13 @@ use prover::prepare::prepare_machine; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] struct Args { - /// Path to a preimages text file + /// Path to a preimages json file #[arg(short, long)] - preimages_path: PathBuf, + json_inputs: PathBuf, /// Path to a machine.wavm.br #[arg(short, long)] - machine_path: PathBuf, + binary: PathBuf, } fn main() -> eyre::Result<()> { @@ -33,7 +33,7 @@ fn main() -> eyre::Result<()> { println!("Running benchmark with always merkleize feature on"); for step_size in step_sizes { - let mut machine = prepare_machine(args.preimages_path.clone(), args.machine_path.clone())?; + let mut machine = prepare_machine(args.json_inputs.clone(), args.binary.clone())?; let _ = machine.hash(); let mut hash_times = vec![]; let mut step_times = vec![]; diff --git a/arbitrator/prover/src/lib.rs b/arbitrator/prover/src/lib.rs index 08473c2598..bc2bd4bc48 100644 --- a/arbitrator/prover/src/lib.rs +++ b/arbitrator/prover/src/lib.rs @@ -127,6 +127,12 @@ pub unsafe extern "C" fn arbitrator_load_wavm_binary(binary_path: *const c_char) } } +#[no_mangle] +#[cfg(feature = "native")] +pub unsafe extern "C" fn arbitrator_new_finished(gs: GlobalState) -> *mut Machine { + Box::into_raw(Box::new(Machine::new_finished(gs))) +} + unsafe fn cstr_to_string(c_str: *const c_char) -> String { CStr::from_ptr(c_str).to_string_lossy().into_owned() } diff --git a/arbitrator/prover/src/machine.rs b/arbitrator/prover/src/machine.rs index dec355ac7c..0d39d87e77 100644 --- a/arbitrator/prover/src/machine.rs +++ b/arbitrator/prover/src/machine.rs @@ -1565,6 +1565,36 @@ impl Machine { Ok(mach) } + // new_finished returns a Machine in the Finished state at step 0. + // + // This allows the Mahine to be set up to model the final state of the + // machine at the end of the execution of a block. + pub fn new_finished(gs: GlobalState) -> Machine { + Machine { + steps: 0, + status: MachineStatus::Finished, + global_state: gs, + // The machine is in the Finished state, so nothing else really matters. + // values_stacks and frame_stacks cannot be empty for proof serialization, + // but everything else can just be entirely blank. + thread_state: ThreadState::Main, + value_stacks: vec![Vec::new()], + frame_stacks: vec![Vec::new()], + internal_stack: Default::default(), + modules: Default::default(), + modules_merkle: Default::default(), + pc: Default::default(), + stdio_output: Default::default(), + inbox_contents: Default::default(), + first_too_far: Default::default(), + preimage_resolver: PreimageResolverWrapper::new(Arc::new(|_, _, _| None)), + stylus_modules: Default::default(), + initial_hash: Default::default(), + context: Default::default(), + debug_info: Default::default(), + } + } + pub fn new_from_wavm(wavm_binary: &Path) -> Result { let mut modules: Vec = { let compressed = std::fs::read(wavm_binary)?; @@ -2867,6 +2897,15 @@ impl Machine { let mod_merkle = self.get_modules_merkle(); out!(mod_merkle.root()); + if self.is_halted() { + // If the machine is halted, instead of serializing the module, + // serialize the global state and return. + // This is for the "kickstart" BoLD proof, but it's backwards compatible + // with the old OSP behavior which reads no further. + out!(self.global_state.serialize()); + return data; + } + // End machine serialization, serialize module let module = &self.modules[self.pc.module()]; diff --git a/arbitrator/prover/test-cases/dynamic.wat b/arbitrator/prover/test-cases/dynamic.wat index 8771bde87c..5de0dbdca1 100644 --- a/arbitrator/prover/test-cases/dynamic.wat +++ b/arbitrator/prover/test-cases/dynamic.wat @@ -12,7 +12,7 @@ ;; WAVM Module hash (data (i32.const 0x000) - "\a1\49\cf\81\13\ff\9c\95\f2\c8\c2\a1\42\35\75\36\7d\e8\6d\d4\22\d8\71\14\bb\9e\a4\7b\af\53\5d\d7") ;; user + "\ae\87\91\cf\6a\c4\55\ff\28\06\b9\55\d5\a7\36\e8\1b\c7\91\f7\93\8a\22\a4\08\23\25\16\37\01\48\25") ;; user (func $start (local $user i32) (local $internals i32) ;; link in user.wat i32.const 0 diff --git a/arbitrator/prover/test-cases/go/main.go b/arbitrator/prover/test-cases/go/main.go index 1f81553af2..b959454d26 100644 --- a/arbitrator/prover/test-cases/go/main.go +++ b/arbitrator/prover/test-cases/go/main.go @@ -73,7 +73,7 @@ const BYTES_PER_FIELD_ELEMENT = 32 var BLS_MODULUS, _ = new(big.Int).SetString("52435875175126190479447740508185965837690552500527637822603658699938581184513", 10) -var stylusModuleHash = common.HexToHash("a149cf8113ff9c95f2c8c2a1423575367de86dd422d87114bb9ea47baf535dd7") // user.wat +var stylusModuleHash = common.HexToHash("ae8791cf6ac455ff2806b955d5a736e81bc791f7938a22a40823251637014825") // user.wat func callStylusProgram(recurse int) { evmData := programs.EvmData{} diff --git a/arbitrator/prover/test-cases/link.wat b/arbitrator/prover/test-cases/link.wat index ef15326481..85490a40b1 100644 --- a/arbitrator/prover/test-cases/link.wat +++ b/arbitrator/prover/test-cases/link.wat @@ -30,7 +30,7 @@ (data (i32.const 0x140) "\47\f7\4f\9c\21\51\4f\52\24\ea\d3\37\5c\bf\a9\1b\1a\5f\ef\22\a5\2a\60\30\c5\52\18\90\6b\b1\51\e5") ;; iops (data (i32.const 0x160) - "\a1\49\cf\81\13\ff\9c\95\f2\c8\c2\a1\42\35\75\36\7d\e8\6d\d4\22\d8\71\14\bb\9e\a4\7b\af\53\5d\d7") ;; user + "\ae\87\91\cf\6a\c4\55\ff\28\06\b9\55\d5\a7\36\e8\1b\c7\91\f7\93\8a\22\a4\08\23\25\16\37\01\48\25") ;; user (data (i32.const 0x180) "\ee\47\08\f6\47\b2\10\88\1f\89\86\e7\e3\79\6b\b2\77\43\f1\4e\ee\cf\45\4a\9b\7c\d7\c4\5b\63\b6\d7") ;; return diff --git a/arbitrator/prover/test-cases/user.wat b/arbitrator/prover/test-cases/user.wat index 9ecb4dcc45..694d2f3ed8 100644 --- a/arbitrator/prover/test-cases/user.wat +++ b/arbitrator/prover/test-cases/user.wat @@ -22,6 +22,12 @@ i32.const 0xFFFFFF i32.load ) + (func $infinite_loop (result i32) + (loop $loop + br $loop + ) + unreachable + ) (func (export "user_entrypoint") (param $args_len i32) (result i32) ;; this func uses $args_len to select which func to call @@ -43,6 +49,12 @@ (then (call $out_of_bounds) (return)) ) + ;; reverts due to an out-of-gas error + (i32.eq (local.get $args_len) (i32.const 4)) + (if + (then (call $infinite_loop) (return)) + ) + (i32.eq (local.get $args_len) (i32.const 32)) (if (then (call $storage_load) (return)) diff --git a/arbitrator/stylus/tests/hostio-test/src/main.rs b/arbitrator/stylus/tests/hostio-test/src/main.rs index 17a5d10266..47b46daad2 100644 --- a/arbitrator/stylus/tests/hostio-test/src/main.rs +++ b/arbitrator/stylus/tests/hostio-test/src/main.rs @@ -204,4 +204,37 @@ impl HostioTest { fn tx_origin() -> Result
{ Ok(tx::origin()) } + + fn storage_cache_bytes32() { + let key = B256::ZERO; + let val = B256::ZERO; + unsafe { + hostio::storage_cache_bytes32(key.as_ptr(), val.as_ptr()); + } + } + + fn pay_for_memory_grow(pages: U256) { + let pages: u16 = pages.try_into().unwrap(); + unsafe { + hostio::pay_for_memory_grow(pages); + } + } + + fn write_result_empty() { + } + + fn write_result(size: U256) -> Result> { + let size: usize = size.try_into().unwrap(); + let data = vec![0; size]; + Ok(data) + } + + fn read_args_no_args() { + } + + fn read_args_one_arg(_arg1: U256) { + } + + fn read_args_three_args(_arg1: U256, _arg2: U256, _arg3: U256) { + } } diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index 35a4a31347..2f410849fc 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -936,7 +936,7 @@ pub trait UserHost: GasMeteredMachine { fn pay_for_memory_grow(&mut self, pages: u16) -> Result<(), Self::Err> { if pages == 0 { self.buy_ink(HOSTIO_INK)?; - return Ok(()); + return trace!("pay_for_memory_grow", self, be!(pages), &[]); } let gas_cost = self.evm_api().add_pages(pages); // no sentry needed since the work happens after the hostio self.buy_gas(gas_cost)?; diff --git a/arbnode/api.go b/arbnode/api.go index 2dabd41bff..55dc92434f 100644 --- a/arbnode/api.go +++ b/arbnode/api.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/ethdb" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/staker" "github.com/offchainlabs/nitro/validator" diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index 185f43fce7..a3256cb78f 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -203,11 +203,15 @@ func (c *BatchPosterConfig) Validate() error { type BatchPosterConfigFetcher func() *BatchPosterConfig +func DangerousBatchPosterConfigAddOptions(prefix string, f *pflag.FlagSet) { + f.Bool(prefix+".allow-posting-first-batch-when-sequencer-message-count-mismatch", DefaultBatchPosterConfig.Dangerous.AllowPostingFirstBatchWhenSequencerMessageCountMismatch, "allow posting the first batch even if sequence number doesn't match chain (useful after force-inclusion)") +} + func BatchPosterConfigAddOptions(prefix string, f *pflag.FlagSet) { f.Bool(prefix+".enable", DefaultBatchPosterConfig.Enable, "enable posting batches to l1") f.Bool(prefix+".disable-dap-fallback-store-data-on-chain", DefaultBatchPosterConfig.DisableDapFallbackStoreDataOnChain, "If unable to batch to DA provider, disable fallback storing data on chain") - f.Int(prefix+".max-size", DefaultBatchPosterConfig.MaxSize, "maximum batch size") - f.Int(prefix+".max-4844-batch-size", DefaultBatchPosterConfig.Max4844BatchSize, "maximum 4844 blob enabled batch size") + f.Int(prefix+".max-size", DefaultBatchPosterConfig.MaxSize, "maximum estimated compressed batch size") + f.Int(prefix+".max-4844-batch-size", DefaultBatchPosterConfig.Max4844BatchSize, "maximum estimated compressed 4844 blob enabled batch size") f.Duration(prefix+".max-delay", DefaultBatchPosterConfig.MaxDelay, "maximum batch posting delay") f.Bool(prefix+".wait-for-max-delay", DefaultBatchPosterConfig.WaitForMaxDelay, "wait for the max batch delay, even if the batch is full") f.Duration(prefix+".poll-interval", DefaultBatchPosterConfig.PollInterval, "how long to wait after no batches are ready to be posted before checking again") @@ -229,6 +233,7 @@ func BatchPosterConfigAddOptions(prefix string, f *pflag.FlagSet) { redislock.AddConfigOptions(prefix+".redis-lock", f) dataposter.DataPosterConfigAddOptions(prefix+".data-poster", f, dataposter.DefaultDataPosterConfig) genericconf.WalletConfigAddOptions(prefix+".parent-chain-wallet", f, DefaultBatchPosterConfig.ParentChainWallet.Pathname) + DangerousBatchPosterConfigAddOptions(prefix+".dangerous", f) } var DefaultBatchPosterConfig = BatchPosterConfig{ diff --git a/arbnode/dataposter/data_poster.go b/arbnode/dataposter/data_poster.go index 0949d929e1..a977b9fc08 100644 --- a/arbnode/dataposter/data_poster.go +++ b/arbnode/dataposter/data_poster.go @@ -20,6 +20,10 @@ import ( "time" "github.com/Knetic/govaluate" + "github.com/holiman/uint256" + "github.com/redis/go-redis/v9" + "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -35,9 +39,10 @@ import ( "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/signer/core/apitypes" - "github.com/holiman/uint256" + "github.com/offchainlabs/nitro/arbnode/dataposter/dbstorage" "github.com/offchainlabs/nitro/arbnode/dataposter/noop" + redisstorage "github.com/offchainlabs/nitro/arbnode/dataposter/redis" "github.com/offchainlabs/nitro/arbnode/dataposter/slice" "github.com/offchainlabs/nitro/arbnode/dataposter/storage" "github.com/offchainlabs/nitro/util/arbmath" @@ -46,10 +51,6 @@ import ( "github.com/offchainlabs/nitro/util/rpcclient" "github.com/offchainlabs/nitro/util/signature" "github.com/offchainlabs/nitro/util/stopwaiter" - "github.com/redis/go-redis/v9" - "github.com/spf13/pflag" - - redisstorage "github.com/offchainlabs/nitro/arbnode/dataposter/redis" ) var ( @@ -711,13 +712,23 @@ func (p *DataPoster) feeAndTipCaps(ctx context.Context, nonce uint64, gasLimit u return newBaseFeeCap, newTipCap, newBlobFeeCap, nil } -func (p *DataPoster) PostSimpleTransaction(ctx context.Context, nonce uint64, to common.Address, calldata []byte, gasLimit uint64, value *big.Int) (*types.Transaction, error) { - return p.PostTransaction(ctx, time.Now(), nonce, nil, to, calldata, gasLimit, value, nil, nil) +func (p *DataPoster) PostSimpleTransaction(ctx context.Context, to common.Address, calldata []byte, gasLimit uint64, value *big.Int) (*types.Transaction, error) { + p.mutex.Lock() + defer p.mutex.Unlock() + nonce, _, _, _, err := p.getNextNonceAndMaybeMeta(ctx, 1) + if err != nil { + return nil, err + } + return p.postTransactionWithMutex(ctx, time.Now(), nonce, nil, to, calldata, gasLimit, value, nil, nil) } func (p *DataPoster) PostTransaction(ctx context.Context, dataCreatedAt time.Time, nonce uint64, meta []byte, to common.Address, calldata []byte, gasLimit uint64, value *big.Int, kzgBlobs []kzg4844.Blob, accessList types.AccessList) (*types.Transaction, error) { p.mutex.Lock() defer p.mutex.Unlock() + return p.postTransactionWithMutex(ctx, dataCreatedAt, nonce, meta, to, calldata, gasLimit, value, kzgBlobs, accessList) +} + +func (p *DataPoster) postTransactionWithMutex(ctx context.Context, dataCreatedAt time.Time, nonce uint64, meta []byte, to common.Address, calldata []byte, gasLimit uint64, value *big.Int, kzgBlobs []kzg4844.Blob, accessList types.AccessList) (*types.Transaction, error) { if p.config().DisableNewTx { return nil, fmt.Errorf("posting new transaction is disabled") diff --git a/arbnode/dataposter/dataposter_test.go b/arbnode/dataposter/dataposter_test.go index 7bf0f86e6f..dc5df1a6c4 100644 --- a/arbnode/dataposter/dataposter_test.go +++ b/arbnode/dataposter/dataposter_test.go @@ -9,6 +9,9 @@ import ( "time" "github.com/Knetic/govaluate" + "github.com/google/go-cmp/cmp" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -17,8 +20,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" - "github.com/google/go-cmp/cmp" - "github.com/holiman/uint256" + "github.com/offchainlabs/nitro/arbnode/dataposter/externalsignertest" "github.com/offchainlabs/nitro/util/arbmath" ) diff --git a/arbnode/dataposter/dbstorage/storage.go b/arbnode/dataposter/dbstorage/storage.go index 6a6cd3cfa4..88989cf757 100644 --- a/arbnode/dataposter/dbstorage/storage.go +++ b/arbnode/dataposter/dbstorage/storage.go @@ -11,6 +11,7 @@ import ( "strconv" "github.com/ethereum/go-ethereum/ethdb" + "github.com/offchainlabs/nitro/arbnode/dataposter/storage" "github.com/offchainlabs/nitro/util/dbutil" ) diff --git a/arbnode/dataposter/externalsignertest/externalsignertest.go b/arbnode/dataposter/externalsignertest/externalsignertest.go index 554defc764..51ccec1903 100644 --- a/arbnode/dataposter/externalsignertest/externalsignertest.go +++ b/arbnode/dataposter/externalsignertest/externalsignertest.go @@ -22,6 +22,7 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/signer/core/apitypes" + "github.com/offchainlabs/nitro/util/testhelpers" ) diff --git a/arbnode/dataposter/redis/redisstorage.go b/arbnode/dataposter/redis/redisstorage.go index b54abf618b..364f9fc85c 100644 --- a/arbnode/dataposter/redis/redisstorage.go +++ b/arbnode/dataposter/redis/redisstorage.go @@ -9,9 +9,10 @@ import ( "errors" "fmt" + "github.com/redis/go-redis/v9" + "github.com/offchainlabs/nitro/arbnode/dataposter/storage" "github.com/offchainlabs/nitro/util/signature" - "github.com/redis/go-redis/v9" ) // Storage implements redis sorted set backed storage. It does not support diff --git a/arbnode/dataposter/storage/storage.go b/arbnode/dataposter/storage/storage.go index 8e5a7e1798..dfd4c2745c 100644 --- a/arbnode/dataposter/storage/storage.go +++ b/arbnode/dataposter/storage/storage.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" + "github.com/offchainlabs/nitro/arbutil" ) diff --git a/arbnode/dataposter/storage_test.go b/arbnode/dataposter/storage_test.go index c6316caea7..cd4e4babae 100644 --- a/arbnode/dataposter/storage_test.go +++ b/arbnode/dataposter/storage_test.go @@ -9,12 +9,14 @@ import ( "path" "testing" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/rlp" - "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" + "github.com/offchainlabs/nitro/arbnode/dataposter/dbstorage" "github.com/offchainlabs/nitro/arbnode/dataposter/redis" "github.com/offchainlabs/nitro/arbnode/dataposter/slice" diff --git a/arbnode/delayed.go b/arbnode/delayed.go index 354fa671b3..f28a9617a3 100644 --- a/arbnode/delayed.go +++ b/arbnode/delayed.go @@ -334,7 +334,11 @@ func (b *DelayedBridge) parseMessage(ctx context.Context, ethLog types.Log) (*bi if err != nil { return nil, nil, err } - return parsedLog.MessageNum, args["messageData"].([]byte), nil + dataBytes, ok := args["messageData"].([]byte) + if !ok { + return nil, nil, errors.New("messageData not a byte array") + } + return parsedLog.MessageNum, dataBytes, nil default: return nil, nil, errors.New("unexpected log type") } diff --git a/arbnode/delayed_seq_reorg_test.go b/arbnode/delayed_seq_reorg_test.go index 699eb3e8f6..f821d71e63 100644 --- a/arbnode/delayed_seq_reorg_test.go +++ b/arbnode/delayed_seq_reorg_test.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/solgen/go/bridgegen" ) diff --git a/arbnode/delayed_sequencer.go b/arbnode/delayed_sequencer.go index b29a66dd05..abd24dbd12 100644 --- a/arbnode/delayed_sequencer.go +++ b/arbnode/delayed_sequencer.go @@ -10,10 +10,11 @@ import ( "math/big" "sync" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - flag "github.com/spf13/pflag" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/execution" diff --git a/arbnode/inbox_reader.go b/arbnode/inbox_reader.go index 14ca83ab13..50893ca392 100644 --- a/arbnode/inbox_reader.go +++ b/arbnode/inbox_reader.go @@ -13,10 +13,11 @@ import ( "sync/atomic" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" - flag "github.com/spf13/pflag" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/arbnode/inbox_test.go b/arbnode/inbox_test.go index e588ef399b..0c31008ff1 100644 --- a/arbnode/inbox_test.go +++ b/arbnode/inbox_test.go @@ -11,23 +11,23 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/params" + + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/l2pricing" "github.com/offchainlabs/nitro/arbutil" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/execution/gethexec" "github.com/offchainlabs/nitro/statetransfer" - "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/testhelpers" "github.com/offchainlabs/nitro/util/testhelpers/env" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/params" - "github.com/offchainlabs/nitro/arbos" ) type execClientWrapper struct { @@ -45,7 +45,7 @@ func (w *execClientWrapper) FullSyncProgressMap() map[string]interface{} { } func NewTransactionStreamerForTest(t *testing.T, ownerAddress common.Address) (*gethexec.ExecutionEngine, *TransactionStreamer, ethdb.Database, *core.BlockChain) { - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() initData := statetransfer.ArbosInitializationInfo{ Accounts: []statetransfer.AccountInitializationInfo{ diff --git a/arbnode/inbox_tracker_test.go b/arbnode/inbox_tracker_test.go index 582b334aee..82d380b03c 100644 --- a/arbnode/inbox_tracker_test.go +++ b/arbnode/inbox_tracker_test.go @@ -4,6 +4,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/offchainlabs/nitro/util/containers" ) diff --git a/arbnode/maintenance.go b/arbnode/maintenance.go index 7397229c2e..5e4e56b577 100644 --- a/arbnode/maintenance.go +++ b/arbnode/maintenance.go @@ -10,12 +10,14 @@ import ( "strings" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbnode/redislock" "github.com/offchainlabs/nitro/execution" "github.com/offchainlabs/nitro/util/stopwaiter" - flag "github.com/spf13/pflag" ) // Regularly runs db compaction if configured diff --git a/arbnode/message_pruner.go b/arbnode/message_pruner.go index b249bd886c..840a15f328 100644 --- a/arbnode/message_pruner.go +++ b/arbnode/message_pruner.go @@ -11,14 +11,14 @@ import ( "sync" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/stopwaiter" "github.com/offchainlabs/nitro/validator" - - flag "github.com/spf13/pflag" ) type MessagePruner struct { diff --git a/arbnode/message_pruner_test.go b/arbnode/message_pruner_test.go index e64bb4f838..8e6b744430 100644 --- a/arbnode/message_pruner_test.go +++ b/arbnode/message_pruner_test.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" + "github.com/offchainlabs/nitro/arbutil" ) diff --git a/arbnode/node.go b/arbnode/node.go index c5b3bbe071..f2e3433ecd 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -24,6 +24,7 @@ import ( "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbnode/dataposter" "github.com/offchainlabs/nitro/arbnode/dataposter/storage" "github.com/offchainlabs/nitro/arbnode/resourcemanager" @@ -41,6 +42,9 @@ import ( "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/solgen/go/rollupgen" "github.com/offchainlabs/nitro/staker" + boldstaker "github.com/offchainlabs/nitro/staker/bold" + legacystaker "github.com/offchainlabs/nitro/staker/legacy" + multiprotocolstaker "github.com/offchainlabs/nitro/staker/multi_protocol" "github.com/offchainlabs/nitro/staker/validatorwallet" "github.com/offchainlabs/nitro/util/contracts" "github.com/offchainlabs/nitro/util/headerreader" @@ -78,22 +82,23 @@ func GenerateRollupConfig(prod bool, wasmModuleRoot common.Hash, rollupOwner com } type Config struct { - Sequencer bool `koanf:"sequencer"` - ParentChainReader headerreader.Config `koanf:"parent-chain-reader" reload:"hot"` - InboxReader InboxReaderConfig `koanf:"inbox-reader" reload:"hot"` - DelayedSequencer DelayedSequencerConfig `koanf:"delayed-sequencer" reload:"hot"` - BatchPoster BatchPosterConfig `koanf:"batch-poster" reload:"hot"` - MessagePruner MessagePrunerConfig `koanf:"message-pruner" reload:"hot"` - BlockValidator staker.BlockValidatorConfig `koanf:"block-validator" reload:"hot"` - Feed broadcastclient.FeedConfig `koanf:"feed" reload:"hot"` - Staker staker.L1ValidatorConfig `koanf:"staker" reload:"hot"` - SeqCoordinator SeqCoordinatorConfig `koanf:"seq-coordinator"` - DataAvailability das.DataAvailabilityConfig `koanf:"data-availability"` - SyncMonitor SyncMonitorConfig `koanf:"sync-monitor"` - Dangerous DangerousConfig `koanf:"dangerous"` - TransactionStreamer TransactionStreamerConfig `koanf:"transaction-streamer" reload:"hot"` - Maintenance MaintenanceConfig `koanf:"maintenance" reload:"hot"` - ResourceMgmt resourcemanager.Config `koanf:"resource-mgmt" reload:"hot"` + Sequencer bool `koanf:"sequencer"` + ParentChainReader headerreader.Config `koanf:"parent-chain-reader" reload:"hot"` + InboxReader InboxReaderConfig `koanf:"inbox-reader" reload:"hot"` + DelayedSequencer DelayedSequencerConfig `koanf:"delayed-sequencer" reload:"hot"` + BatchPoster BatchPosterConfig `koanf:"batch-poster" reload:"hot"` + MessagePruner MessagePrunerConfig `koanf:"message-pruner" reload:"hot"` + BlockValidator staker.BlockValidatorConfig `koanf:"block-validator" reload:"hot"` + Feed broadcastclient.FeedConfig `koanf:"feed" reload:"hot"` + Staker legacystaker.L1ValidatorConfig `koanf:"staker" reload:"hot"` + Bold boldstaker.BoldConfig `koanf:"bold"` + SeqCoordinator SeqCoordinatorConfig `koanf:"seq-coordinator"` + DataAvailability das.DataAvailabilityConfig `koanf:"data-availability"` + SyncMonitor SyncMonitorConfig `koanf:"sync-monitor"` + Dangerous DangerousConfig `koanf:"dangerous"` + TransactionStreamer TransactionStreamerConfig `koanf:"transaction-streamer" reload:"hot"` + Maintenance MaintenanceConfig `koanf:"maintenance" reload:"hot"` + ResourceMgmt resourcemanager.Config `koanf:"resource-mgmt" reload:"hot"` // SnapSyncConfig is only used for testing purposes, these should not be configured in production. SnapSyncTest SnapSyncConfig } @@ -152,7 +157,8 @@ func ConfigAddOptions(prefix string, f *flag.FlagSet, feedInputEnable bool, feed MessagePrunerConfigAddOptions(prefix+".message-pruner", f) staker.BlockValidatorConfigAddOptions(prefix+".block-validator", f) broadcastclient.FeedConfigAddOptions(prefix+".feed", f, feedInputEnable, feedOutputEnable) - staker.L1ValidatorConfigAddOptions(prefix+".staker", f) + legacystaker.L1ValidatorConfigAddOptions(prefix+".staker", f) + boldstaker.BoldConfigAddOptions(prefix+".bold", f) SeqCoordinatorConfigAddOptions(prefix+".seq-coordinator", f) das.DataAvailabilityConfigAddNodeOptions(prefix+".data-availability", f) SyncMonitorConfigAddOptions(prefix+".sync-monitor", f) @@ -170,7 +176,8 @@ var ConfigDefault = Config{ MessagePruner: DefaultMessagePrunerConfig, BlockValidator: staker.DefaultBlockValidatorConfig, Feed: broadcastclient.FeedConfigDefault, - Staker: staker.DefaultL1ValidatorConfig, + Staker: legacystaker.DefaultL1ValidatorConfig, + Bold: boldstaker.DefaultBoldConfig, SeqCoordinator: DefaultSeqCoordinatorConfig, DataAvailability: das.DefaultDataAvailabilityConfig, SyncMonitor: DefaultSyncMonitorConfig, @@ -202,7 +209,7 @@ func ConfigDefaultL1NonSequencerTest() *Config { config.SeqCoordinator.Enable = false config.BlockValidator = staker.TestBlockValidatorConfig config.SyncMonitor = TestSyncMonitorConfig - config.Staker = staker.TestL1ValidatorConfig + config.Staker = legacystaker.TestL1ValidatorConfig config.Staker.Enable = false config.BlockValidator.ValidationServerConfigs = []rpcclient.ClientConfig{{URL: ""}} @@ -218,7 +225,7 @@ func ConfigDefaultL2Test() *Config { config.Feed.Output.Signed = false config.SeqCoordinator.Signer.ECDSA.AcceptSequencer = false config.SeqCoordinator.Signer.ECDSA.Dangerous.AcceptMissing = true - config.Staker = staker.TestL1ValidatorConfig + config.Staker = legacystaker.TestL1ValidatorConfig config.SyncMonitor = TestSyncMonitorConfig config.Staker.Enable = false config.BlockValidator.ValidationServerConfigs = []rpcclient.ClientConfig{{URL: ""}} @@ -266,7 +273,7 @@ type Node struct { MessagePruner *MessagePruner BlockValidator *staker.BlockValidator StatelessBlockValidator *staker.StatelessBlockValidator - Staker *staker.Staker + Staker *multiprotocolstaker.MultiProtocolStaker BroadcastServer *broadcaster.Broadcaster BroadcastClients *broadcastclients.BroadcastClients SeqCoordinator *SeqCoordinator @@ -632,7 +639,7 @@ func createNodeImpl( } } - var stakerObj *staker.Staker + var stakerObj *multiprotocolstaker.MultiProtocolStaker var messagePruner *MessagePruner var stakerAddr common.Address @@ -652,7 +659,7 @@ func createNodeImpl( getExtraGas := func() uint64 { return configFetcher.Get().Staker.ExtraGas } // TODO: factor this out into separate helper, and split rest of node // creation into multiple helpers. - var wallet staker.ValidatorWalletInterface = validatorwallet.NewNoOp(l1client, deployInfo.Rollup) + var wallet legacystaker.ValidatorWalletInterface = validatorwallet.NewNoOp(l1client, deployInfo.Rollup) if !strings.EqualFold(config.Staker.Strategy, "watchtower") { if config.Staker.UseSmartContractWallet || (txOptsValidator == nil && config.Staker.DataPoster.ExternalSigner.URL == "") { var existingWalletAddress *common.Address @@ -680,13 +687,13 @@ func createNodeImpl( } } - var confirmedNotifiers []staker.LatestConfirmedNotifier + var confirmedNotifiers []legacystaker.LatestConfirmedNotifier if config.MessagePruner.Enable { messagePruner = NewMessagePruner(txStreamer, inboxTracker, func() *MessagePrunerConfig { return &configFetcher.Get().MessagePruner }) confirmedNotifiers = append(confirmedNotifiers, messagePruner) } - stakerObj, err = staker.NewStaker(l1Reader, wallet, bind.CallOpts{}, func() *staker.L1ValidatorConfig { return &configFetcher.Get().Staker }, blockValidator, statelessBlockValidator, nil, confirmedNotifiers, deployInfo.ValidatorUtils, fatalErrChan) + stakerObj, err = multiprotocolstaker.NewMultiProtocolStaker(stack, l1Reader, wallet, bind.CallOpts{}, func() *legacystaker.L1ValidatorConfig { return &configFetcher.Get().Staker }, &configFetcher.Get().Bold, blockValidator, statelessBlockValidator, nil, deployInfo.StakeToken, confirmedNotifiers, deployInfo.ValidatorUtils, deployInfo.Bridge, fatalErrChan) if err != nil { return nil, err } @@ -696,11 +703,6 @@ func createNodeImpl( if dp != nil { stakerAddr = dp.Sender() } - whitelisted, err := stakerObj.IsWhitelisted(ctx) - if err != nil { - return nil, err - } - log.Info("running as validator", "txSender", stakerAddr, "actingAsWallet", wallet.Address(), "whitelisted", whitelisted, "strategy", config.Staker.Strategy) } var batchPoster *BatchPoster diff --git a/arbnode/redislock/redis.go b/arbnode/redislock/redis.go index de9508323a..075ff60c09 100644 --- a/arbnode/redislock/redis.go +++ b/arbnode/redislock/redis.go @@ -11,10 +11,12 @@ import ( "sync/atomic" "time" - "github.com/ethereum/go-ethereum/log" - "github.com/offchainlabs/nitro/util/stopwaiter" "github.com/redis/go-redis/v9" flag "github.com/spf13/pflag" + + "github.com/ethereum/go-ethereum/log" + + "github.com/offchainlabs/nitro/util/stopwaiter" ) type Simple struct { diff --git a/arbnode/resourcemanager/resource_management.go b/arbnode/resourcemanager/resource_management.go index 249b689443..462b38c578 100644 --- a/arbnode/resourcemanager/resource_management.go +++ b/arbnode/resourcemanager/resource_management.go @@ -14,10 +14,11 @@ import ( "strings" "time" + "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/node" - "github.com/spf13/pflag" ) var ( diff --git a/arbnode/seq_coordinator.go b/arbnode/seq_coordinator.go index 5987801d5f..fc2f3c9cf6 100644 --- a/arbnode/seq_coordinator.go +++ b/arbnode/seq_coordinator.go @@ -662,7 +662,7 @@ func (c *SeqCoordinator) update(ctx context.Context) time.Duration { for msgToRead < readUntil && localMsgCount >= remoteFinalizedMsgCount { var resString string resString, msgReadErr = client.Get(ctx, redisutil.MessageKeyFor(msgToRead)).Result() - if msgReadErr != nil { + if msgReadErr != nil && c.sequencer.Synced() { log.Warn("coordinator failed reading message", "pos", msgToRead, "err", msgReadErr) break } diff --git a/arbnode/sequencer_inbox.go b/arbnode/sequencer_inbox.go index 81146ed46e..9dae7cfb8d 100644 --- a/arbnode/sequencer_inbox.go +++ b/arbnode/sequencer_inbox.go @@ -16,9 +16,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/arbutil" - "github.com/offchainlabs/nitro/solgen/go/bridgegen" ) @@ -124,7 +124,11 @@ func (m *SequencerInboxBatch) getSequencerData(ctx context.Context, client *ethc if err != nil { return nil, err } - return args["data"].([]byte), nil + dataBytes, ok := args["data"].([]byte) + if !ok { + return nil, errors.New("args[\"data\"] not a byte array") + } + return dataBytes, nil case batchDataSeparateEvent: var numberAsHash common.Hash binary.BigEndian.PutUint64(numberAsHash[(32-8):], m.SequenceNumber) diff --git a/arbnode/sync_monitor.go b/arbnode/sync_monitor.go index 5ab1ede2d6..f06e9ca49f 100644 --- a/arbnode/sync_monitor.go +++ b/arbnode/sync_monitor.go @@ -5,10 +5,12 @@ import ( "sync" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/stopwaiter" - flag "github.com/spf13/pflag" ) type SyncMonitor struct { @@ -144,11 +146,13 @@ func (s *SyncMonitor) FullSyncProgressMap() map[string]interface{} { batchProcessed := s.inboxReader.GetLastReadBatchCount() res["batchProcessed"] = batchProcessed - processedBatchMsgs, err := s.inboxReader.Tracker().GetBatchMessageCount(batchProcessed - 1) - if err != nil { - res["batchMetadataError"] = err.Error() - } else { - res["messageOfProcessedBatch"] = processedBatchMsgs + if batchProcessed > 0 { + processedBatchMsgs, err := s.inboxReader.Tracker().GetBatchMessageCount(batchProcessed - 1) + if err != nil { + res["batchMetadataError"] = err.Error() + } else { + res["messageOfProcessedBatch"] = processedBatchMsgs + } } l1reader := s.inboxReader.l1Reader diff --git a/arbnode/transaction_streamer.go b/arbnode/transaction_streamer.go index 38b1c003db..1a961ebd3f 100644 --- a/arbnode/transaction_streamer.go +++ b/arbnode/transaction_streamer.go @@ -8,6 +8,7 @@ import ( "context" "encoding/binary" "encoding/json" + "errors" "fmt" "math/big" "reflect" @@ -17,8 +18,6 @@ import ( "testing" "time" - "errors" - flag "github.com/spf13/pflag" "github.com/ethereum/go-ethereum/common" diff --git a/arbos/activate_test.go b/arbos/activate_test.go index a89a38639a..b723c37aa6 100644 --- a/arbos/activate_test.go +++ b/arbos/activate_test.go @@ -9,6 +9,7 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/programs" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/arbos/addressSet/addressSet.go b/arbos/addressSet/addressSet.go index 156f36e7e7..4bb87e614d 100644 --- a/arbos/addressSet/addressSet.go +++ b/arbos/addressSet/addressSet.go @@ -9,6 +9,7 @@ import ( "errors" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" ) diff --git a/arbos/addressSet/addressSet_test.go b/arbos/addressSet/addressSet_test.go index d32e07a546..b65c278b2b 100644 --- a/arbos/addressSet/addressSet_test.go +++ b/arbos/addressSet/addressSet_test.go @@ -8,16 +8,17 @@ import ( "math/rand" "testing" - "github.com/ethereum/go-ethereum/common/math" - "github.com/ethereum/go-ethereum/params" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core/state" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/util/colors" "github.com/offchainlabs/nitro/util/testhelpers" ) @@ -26,7 +27,7 @@ func TestEmptyAddressSet(t *testing.T) { sto := storage.NewMemoryBacked(burn.NewSystemBurner(nil, false)) Require(t, Initialize(sto)) aset := OpenAddressSet(sto) - version := params.ArbitrumDevTestParams().InitialArbOSVersion + version := chaininfo.ArbitrumDevTestParams().InitialArbOSVersion if size(t, aset) != 0 { Fail(t) @@ -49,7 +50,7 @@ func TestAddressSet(t *testing.T) { sto := storage.NewGeth(db, burn.NewSystemBurner(nil, false)) Require(t, Initialize(sto)) aset := OpenAddressSet(sto) - version := params.ArbitrumDevTestParams().InitialArbOSVersion + version := chaininfo.ArbitrumDevTestParams().InitialArbOSVersion statedb, _ := (db).(*state.StateDB) stateHashBeforeChanges := statedb.IntermediateRoot(false) @@ -144,7 +145,7 @@ func TestAddressSetAllMembers(t *testing.T) { sto := storage.NewGeth(db, burn.NewSystemBurner(nil, false)) Require(t, Initialize(sto)) aset := OpenAddressSet(sto) - version := params.ArbitrumDevTestParams().InitialArbOSVersion + version := chaininfo.ArbitrumDevTestParams().InitialArbOSVersion addr1 := testhelpers.RandomAddress() addr2 := testhelpers.RandomAddress() diff --git a/arbos/addressTable/addressTable.go b/arbos/addressTable/addressTable.go index 6ae271060d..608883c34d 100644 --- a/arbos/addressTable/addressTable.go +++ b/arbos/addressTable/addressTable.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/rlp" + "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" ) diff --git a/arbos/addressTable/addressTable_test.go b/arbos/addressTable/addressTable_test.go index 6b06ed3406..873d5a4d1c 100644 --- a/arbos/addressTable/addressTable_test.go +++ b/arbos/addressTable/addressTable_test.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/util/testhelpers" diff --git a/arbos/arbosState/arbosstate.go b/arbos/arbosState/arbosstate.go index f53d9c892a..a3d1ae8386 100644 --- a/arbos/arbosState/arbosstate.go +++ b/arbos/arbosState/arbosstate.go @@ -32,6 +32,7 @@ import ( "github.com/offchainlabs/nitro/arbos/retryables" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/util/testhelpers/env" ) @@ -128,7 +129,7 @@ func NewArbosMemoryBackedArbOSState() (*ArbosState, *state.StateDB) { log.Crit("failed to init empty statedb", "error", err) } burner := burn.NewSystemBurner(nil, false) - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() newState, err := InitializeArbosState(statedb, burner, chainConfig, arbostypes.TestInitMessage) if err != nil { log.Crit("failed to open the ArbOS state", "error", err) diff --git a/arbos/arbosState/arbosstate_test.go b/arbos/arbosState/arbosstate_test.go index ef63c23386..440598991c 100644 --- a/arbos/arbosState/arbosstate_test.go +++ b/arbos/arbosState/arbosstate_test.go @@ -8,6 +8,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" diff --git a/arbos/arbosState/initialization_test.go b/arbos/arbosState/initialization_test.go index 697a41e4fd..8ccfbc7cfb 100644 --- a/arbos/arbosState/initialization_test.go +++ b/arbos/arbosState/initialization_test.go @@ -13,9 +13,10 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/burn" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/statetransfer" "github.com/offchainlabs/nitro/util/testhelpers" "github.com/offchainlabs/nitro/util/testhelpers/env" @@ -61,7 +62,7 @@ func tryMarshalUnmarshal(input *statetransfer.ArbosInitializationInfo, t *testin raw := rawdb.NewMemoryDatabase() initReader := statetransfer.NewMemoryInitDataReader(&initData) - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() cacheConfig := core.DefaultCacheConfigWithScheme(env.GetTestStateScheme()) stateroot, err := InitializeArbosInDatabase(raw, cacheConfig, initReader, chainConfig, arbostypes.TestInitMessage, 0, 0) diff --git a/arbos/arbosState/initialize.go b/arbos/arbosState/initialize.go index 374eff2cea..8fd417c2b2 100644 --- a/arbos/arbosState/initialize.go +++ b/arbos/arbosState/initialize.go @@ -5,21 +5,23 @@ package arbosState import ( "errors" - "github.com/ethereum/go-ethereum/core/tracing" "math/big" "regexp" "sort" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" - "github.com/holiman/uint256" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/l2pricing" @@ -52,7 +54,7 @@ func MakeGenesisBlock(parentHash common.Hash, blockNumber uint64, timestamp uint } genesisHeaderInfo.UpdateHeaderWithInfo(head) - return types.NewBlock(head, nil, nil, nil, trie.NewStackTrie(nil)) + return types.NewBlock(head, nil, nil, trie.NewStackTrie(nil)) } func InitializeArbosInDatabase(db ethdb.Database, cacheConfig *core.CacheConfig, initData statetransfer.InitDataReader, chainConfig *params.ChainConfig, initMessage *arbostypes.ParsedInitMessage, timestamp uint64, accountsPerSync uint) (root common.Hash, err error) { @@ -97,6 +99,16 @@ func InitializeArbosInDatabase(db ethdb.Database, cacheConfig *core.CacheConfig, log.Crit("failed to open the ArbOS state", "error", err) } + chainOwner, err := initData.GetChainOwner() + if err != nil { + return common.Hash{}, err + } + if chainOwner != (common.Address{}) { + err = arbosState.ChainOwners().Add(chainOwner) + if err != nil { + return common.Hash{}, err + } + } addrTable := arbosState.AddressTable() addrTableSize, err := addrTable.Size() if err != nil { diff --git a/arbos/arbostypes/incomingmessage.go b/arbos/arbostypes/incomingmessage.go index c4c2dc037b..b9a366cbd5 100644 --- a/arbos/arbostypes/incomingmessage.go +++ b/arbos/arbostypes/incomingmessage.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/util/arbmath" ) @@ -265,7 +266,7 @@ type ParsedInitMessage struct { var DefaultInitialL1BaseFee = big.NewInt(50 * params.GWei) var TestInitMessage = &ParsedInitMessage{ - ChainId: params.ArbitrumDevTestChainConfig().ChainID, + ChainId: chaininfo.ArbitrumDevTestChainConfig().ChainID, InitialL1BaseFee: DefaultInitialL1BaseFee, } diff --git a/arbos/arbostypes/messagewithmeta.go b/arbos/arbostypes/messagewithmeta.go index 79b7c4f9d2..a3bc167526 100644 --- a/arbos/arbostypes/messagewithmeta.go +++ b/arbos/arbostypes/messagewithmeta.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" + "github.com/offchainlabs/nitro/arbutil" ) diff --git a/arbos/block_processor.go b/arbos/block_processor.go index 19fc36b351..77475856ac 100644 --- a/arbos/block_processor.go +++ b/arbos/block_processor.go @@ -10,12 +10,6 @@ import ( "math" "math/big" - "github.com/offchainlabs/nitro/arbos/arbosState" - "github.com/offchainlabs/nitro/arbos/arbostypes" - "github.com/offchainlabs/nitro/arbos/l2pricing" - "github.com/offchainlabs/nitro/arbos/util" - "github.com/offchainlabs/nitro/util/arbmath" - "github.com/ethereum/go-ethereum/arbitrum_types" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -25,6 +19,12 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" + + "github.com/offchainlabs/nitro/arbos/arbosState" + "github.com/offchainlabs/nitro/arbos/arbostypes" + "github.com/offchainlabs/nitro/arbos/l2pricing" + "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/util/arbmath" ) // set by the precompile module, to avoid a package dependence cycle @@ -340,18 +340,6 @@ func ProduceBlockAdvanced( return receipt, result, nil })() - if tx.Type() == types.ArbitrumInternalTxType { - // ArbOS might have upgraded to a new version, so we need to refresh our state - state, err = arbosState.OpenSystemArbosState(statedb, nil, true) - if err != nil { - return nil, nil, err - } - // Update the ArbOS version in the header (if it changed) - extraInfo := types.DeserializeHeaderExtraInformation(header) - extraInfo.ArbOSFormatVersion = state.ArbOSVersion() - extraInfo.UpdateHeaderWithInfo(header) - } - // append the err, even if it is nil hooks.TxErrors = append(hooks.TxErrors, err) @@ -373,6 +361,18 @@ func ProduceBlockAdvanced( continue } + if tx.Type() == types.ArbitrumInternalTxType { + // ArbOS might have upgraded to a new version, so we need to refresh our state + state, err = arbosState.OpenSystemArbosState(statedb, nil, true) + if err != nil { + return nil, nil, err + } + // Update the ArbOS version in the header (if it changed) + extraInfo := types.DeserializeHeaderExtraInformation(header) + extraInfo.ArbOSFormatVersion = state.ArbOSVersion() + extraInfo.UpdateHeaderWithInfo(header) + } + if tx.Type() == types.ArbitrumInternalTxType && result.Err != nil { return nil, nil, fmt.Errorf("failed to apply internal transaction: %w", result.Err) } @@ -460,7 +460,7 @@ func ProduceBlockAdvanced( FinalizeBlock(header, complete, statedb, chainConfig) // Touch up the block hashes in receipts - tmpBlock := types.NewBlock(header, complete, nil, receipts, trie.NewStackTrie(nil)) + tmpBlock := types.NewBlock(header, &types.Body{Transactions: complete}, receipts, trie.NewStackTrie(nil)) blockHash := tmpBlock.Hash() for _, receipt := range receipts { @@ -470,7 +470,7 @@ func ProduceBlockAdvanced( } } - block := types.NewBlock(header, complete, nil, receipts, trie.NewStackTrie(nil)) + block := types.NewBlock(header, &types.Body{Transactions: complete}, receipts, trie.NewStackTrie(nil)) if len(block.Transactions()) != len(receipts) { return nil, nil, fmt.Errorf("block has %d txes but %d receipts", len(block.Transactions()), len(receipts)) diff --git a/arbos/blockhash/blockhash.go b/arbos/blockhash/blockhash.go index 34c907207c..ff29bbca9a 100644 --- a/arbos/blockhash/blockhash.go +++ b/arbos/blockhash/blockhash.go @@ -8,6 +8,7 @@ import ( "errors" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/storage" ) diff --git a/arbos/blockhash/blockhash_test.go b/arbos/blockhash/blockhash_test.go index bf3ee5ee11..c7cc04d966 100644 --- a/arbos/blockhash/blockhash_test.go +++ b/arbos/blockhash/blockhash_test.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/util/testhelpers" diff --git a/arbos/burn/burn.go b/arbos/burn/burn.go index 7d30ad12ec..c94f6bec2f 100644 --- a/arbos/burn/burn.go +++ b/arbos/burn/burn.go @@ -7,6 +7,7 @@ import ( "fmt" glog "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbos/util" ) diff --git a/arbos/engine.go b/arbos/engine.go index a4aa9c46a9..a812e5486b 100644 --- a/arbos/engine.go +++ b/arbos/engine.go @@ -56,7 +56,7 @@ func (e Engine) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *t e.Finalize(chain, header, state, body) - block := types.NewBlock(header, body.Transactions, nil, receipts, trie.NewStackTrie(nil)) + block := types.NewBlock(header, &types.Body{Transactions: body.Transactions}, receipts, trie.NewStackTrie(nil)) return block, nil } diff --git a/arbos/extra_transaction_checks.go b/arbos/extra_transaction_checks.go index 0f970c9925..480058cb0f 100644 --- a/arbos/extra_transaction_checks.go +++ b/arbos/extra_transaction_checks.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/arbosState" ) diff --git a/arbos/incomingmessage_test.go b/arbos/incomingmessage_test.go index 2933f6a719..22aba05bce 100644 --- a/arbos/incomingmessage_test.go +++ b/arbos/incomingmessage_test.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/arbostypes" ) diff --git a/arbos/internal_tx.go b/arbos/internal_tx.go index 9832ac8005..64dede6290 100644 --- a/arbos/internal_tx.go +++ b/arbos/internal_tx.go @@ -8,15 +8,14 @@ import ( "fmt" "math/big" - "github.com/offchainlabs/nitro/util/arbmath" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/util/arbmath" ) func InternalTxStartBlock( diff --git a/arbos/l1pricing/batchPoster.go b/arbos/l1pricing/batchPoster.go index a3428c441c..5975e95d0f 100644 --- a/arbos/l1pricing/batchPoster.go +++ b/arbos/l1pricing/batchPoster.go @@ -9,6 +9,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/addressSet" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/arbos/l1pricing/batchPoster_test.go b/arbos/l1pricing/batchPoster_test.go index 4e9b8565c0..3263ffca81 100644 --- a/arbos/l1pricing/batchPoster_test.go +++ b/arbos/l1pricing/batchPoster_test.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/storage" ) diff --git a/arbos/l1pricing/l1PricingOldVersions.go b/arbos/l1pricing/l1PricingOldVersions.go index 821d743e7d..1377351af3 100644 --- a/arbos/l1pricing/l1PricingOldVersions.go +++ b/arbos/l1pricing/l1PricingOldVersions.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" + "github.com/offchainlabs/nitro/arbos/util" am "github.com/offchainlabs/nitro/util/arbmath" ) diff --git a/arbos/l1pricing/l1pricing.go b/arbos/l1pricing/l1pricing.go index 392bf36d37..37dae08c33 100644 --- a/arbos/l1pricing/l1pricing.go +++ b/arbos/l1pricing/l1pricing.go @@ -10,20 +10,19 @@ import ( "math/big" "sync/atomic" - "github.com/ethereum/go-ethereum/crypto" - + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbcompress" - "github.com/offchainlabs/nitro/util/arbmath" - am "github.com/offchainlabs/nitro/util/arbmath" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/cmd/chaininfo" + "github.com/offchainlabs/nitro/util/arbmath" + am "github.com/offchainlabs/nitro/util/arbmath" ) type L1PricingState struct { @@ -540,7 +539,7 @@ var randomNonce = binary.BigEndian.Uint64(crypto.Keccak256([]byte("Nonce"))[:8]) var randomGasTipCap = new(big.Int).SetBytes(crypto.Keccak256([]byte("GasTipCap"))[:4]) var randomGasFeeCap = new(big.Int).SetBytes(crypto.Keccak256([]byte("GasFeeCap"))[:4]) var RandomGas = uint64(binary.BigEndian.Uint32(crypto.Keccak256([]byte("Gas"))[:4])) -var randV = arbmath.BigMulByUint(params.ArbitrumOneChainConfig().ChainID, 3) +var randV = arbmath.BigMulByUint(chaininfo.ArbitrumOneChainConfig().ChainID, 3) var randR = crypto.Keccak256Hash([]byte("R")).Big() var randS = crypto.Keccak256Hash([]byte("S")).Big() diff --git a/arbos/l1pricing/l1pricing_test.go b/arbos/l1pricing/l1pricing_test.go index b301c94257..b842c26db7 100644 --- a/arbos/l1pricing/l1pricing_test.go +++ b/arbos/l1pricing/l1pricing_test.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/storage" ) diff --git a/arbos/l1pricing_test.go b/arbos/l1pricing_test.go index 6de69db1de..6ab0135be9 100644 --- a/arbos/l1pricing_test.go +++ b/arbos/l1pricing_test.go @@ -4,22 +4,24 @@ package arbos import ( - "github.com/ethereum/go-ethereum/core/tracing" "math/big" "testing" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" - "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/arbosState" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/l1pricing" "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/util/arbmath" - - "github.com/ethereum/go-ethereum/params" - "github.com/offchainlabs/nitro/arbos/burn" ) type l1PricingTest struct { @@ -316,7 +318,7 @@ func _withinOnePercent(v1, v2 *big.Int) bool { } func newMockEVMForTesting() *vm.EVM { - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() _, statedb := arbosState.NewArbosMemoryBackedArbOSState() context := vm.BlockContext{ BlockNumber: big.NewInt(0), diff --git a/arbos/l2pricing/model.go b/arbos/l2pricing/model.go index 476effa8aa..367e8b6e1a 100644 --- a/arbos/l2pricing/model.go +++ b/arbos/l2pricing/model.go @@ -7,6 +7,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/util/arbmath" ) diff --git a/arbos/merkleAccumulator/merkleAccumulator.go b/arbos/merkleAccumulator/merkleAccumulator.go index e62303e5fd..0d51602c02 100644 --- a/arbos/merkleAccumulator/merkleAccumulator.go +++ b/arbos/merkleAccumulator/merkleAccumulator.go @@ -6,6 +6,7 @@ package merkleAccumulator import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/util/arbmath" ) diff --git a/arbos/parse_l2.go b/arbos/parse_l2.go index 06722e4063..cd926f47bf 100644 --- a/arbos/parse_l2.go +++ b/arbos/parse_l2.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/arbos/programs/api.go b/arbos/programs/api.go index 5ec8c97207..d8f12ffbd3 100644 --- a/arbos/programs/api.go +++ b/arbos/programs/api.go @@ -4,12 +4,14 @@ package programs import ( + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" - "github.com/holiman/uint256" + "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/util/arbmath" am "github.com/offchainlabs/nitro/util/arbmath" diff --git a/arbos/programs/native.go b/arbos/programs/native.go index 725b302ac0..f162704995 100644 --- a/arbos/programs/native.go +++ b/arbos/programs/native.go @@ -18,6 +18,7 @@ typedef uint64_t u64; typedef size_t usize; */ import "C" + import ( "errors" "fmt" @@ -30,6 +31,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/arbutil" diff --git a/arbos/programs/native_api.go b/arbos/programs/native_api.go index 6cecb8ef63..ab15800ef9 100644 --- a/arbos/programs/native_api.go +++ b/arbos/programs/native_api.go @@ -22,6 +22,7 @@ void handleReqWrap(usize api, u32 req_type, RustSlice *data, u64 *out_cost, GoSl } */ import "C" + import ( "runtime" "sync" @@ -29,6 +30,7 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/arbutil" ) diff --git a/arbos/programs/params.go b/arbos/programs/params.go index a0b8acd95c..9b219737d9 100644 --- a/arbos/programs/params.go +++ b/arbos/programs/params.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" am "github.com/offchainlabs/nitro/util/arbmath" diff --git a/arbos/programs/programs.go b/arbos/programs/programs.go index 06ff4137da..06ba6ead8c 100644 --- a/arbos/programs/programs.go +++ b/arbos/programs/programs.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" gethParams "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbcompress" "github.com/offchainlabs/nitro/arbos/addressSet" "github.com/offchainlabs/nitro/arbos/storage" diff --git a/arbos/programs/testcompile.go b/arbos/programs/testcompile.go index 615b0f3f72..8a4e38444a 100644 --- a/arbos/programs/testcompile.go +++ b/arbos/programs/testcompile.go @@ -20,6 +20,7 @@ typedef size_t usize; void handleReqWrap(usize api, u32 req_type, RustSlice *data, u64 *out_cost, GoSliceData *out_result, GoSliceData *out_raw_data); */ import "C" + import ( "fmt" "os" diff --git a/arbos/queue_test.go b/arbos/queue_test.go index ff993a233f..75d60b82c3 100644 --- a/arbos/queue_test.go +++ b/arbos/queue_test.go @@ -7,7 +7,6 @@ import ( "testing" "github.com/offchainlabs/nitro/arbos/arbosState" - "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" ) diff --git a/arbos/retryable_test.go b/arbos/retryable_test.go index 2eccaea6c2..b2989de331 100644 --- a/arbos/retryable_test.go +++ b/arbos/retryable_test.go @@ -9,17 +9,17 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/retryables" "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/util/colors" "github.com/offchainlabs/nitro/util/testhelpers" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/params" ) func TestOpenNonexistentRetryable(t *testing.T) { diff --git a/arbos/retryables/retryable.go b/arbos/retryables/retryable.go index 5938244782..23ba2458ff 100644 --- a/arbos/retryables/retryable.go +++ b/arbos/retryables/retryable.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/arbos/storage/queue.go b/arbos/storage/queue.go index 9c02dc1ee7..3c852a5743 100644 --- a/arbos/storage/queue.go +++ b/arbos/storage/queue.go @@ -4,9 +4,9 @@ package storage import ( - "github.com/offchainlabs/nitro/arbos/util" - "github.com/ethereum/go-ethereum/common" + + "github.com/offchainlabs/nitro/arbos/util" ) type Queue struct { diff --git a/arbos/storage/storage.go b/arbos/storage/storage.go index bc16491af0..63db8ee928 100644 --- a/arbos/storage/storage.go +++ b/arbos/storage/storage.go @@ -21,6 +21,7 @@ import ( "github.com/ethereum/go-ethereum/triedb" "github.com/ethereum/go-ethereum/triedb/hashdb" "github.com/ethereum/go-ethereum/triedb/pathdb" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/arbos/storage/storage_test.go b/arbos/storage/storage_test.go index b2e8bdb2ea..dd2c40b8f0 100644 --- a/arbos/storage/storage_test.go +++ b/arbos/storage/storage_test.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/util/arbmath" ) diff --git a/arbos/tx_processor.go b/arbos/tx_processor.go index e05368dea7..aec08b15b5 100644 --- a/arbos/tx_processor.go +++ b/arbos/tx_processor.go @@ -9,22 +9,20 @@ import ( "math/big" "github.com/holiman/uint256" - "github.com/offchainlabs/nitro/arbos/l1pricing" - - "github.com/offchainlabs/nitro/arbos/util" - "github.com/offchainlabs/nitro/util/arbmath" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + glog "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" - "github.com/offchainlabs/nitro/arbos/retryables" "github.com/offchainlabs/nitro/arbos/arbosState" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/vm" - glog "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbos/l1pricing" + "github.com/offchainlabs/nitro/arbos/retryables" + "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/util/arbmath" ) var arbosAddress = types.ArbosAddress diff --git a/arbos/util/retryable_encoding_test.go b/arbos/util/retryable_encoding_test.go index d7a5480138..b74983ed0b 100644 --- a/arbos/util/retryable_encoding_test.go +++ b/arbos/util/retryable_encoding_test.go @@ -10,16 +10,15 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/util/testhelpers" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" ) func TestRetryableEncoding(t *testing.T) { diff --git a/arbos/util/storage_cache.go b/arbos/util/storage_cache.go index 9573d1ffc7..a9be5fe870 100644 --- a/arbos/util/storage_cache.go +++ b/arbos/util/storage_cache.go @@ -4,8 +4,9 @@ package util import ( - "github.com/ethereum/go-ethereum/common" "slices" + + "github.com/ethereum/go-ethereum/common" ) type storageCacheEntry struct { diff --git a/arbos/util/storage_cache_test.go b/arbos/util/storage_cache_test.go index 9fd452851d..0ba2c5285e 100644 --- a/arbos/util/storage_cache_test.go +++ b/arbos/util/storage_cache_test.go @@ -7,8 +7,10 @@ import ( "slices" "testing" - "github.com/ethereum/go-ethereum/common" "github.com/google/go-cmp/cmp" + + "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/util/testhelpers" ) diff --git a/arbos/util/tracing.go b/arbos/util/tracing.go index fb39460d44..f092d32c2d 100644 --- a/arbos/util/tracing.go +++ b/arbos/util/tracing.go @@ -7,11 +7,12 @@ import ( "encoding/binary" "math/big" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" - "github.com/holiman/uint256" ) type TracingScenario uint64 diff --git a/arbos/util/transfer.go b/arbos/util/transfer.go index ed5e07c8cf..c5873b7e93 100644 --- a/arbos/util/transfer.go +++ b/arbos/util/transfer.go @@ -9,11 +9,13 @@ import ( "fmt" "math/big" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" - "github.com/holiman/uint256" + "github.com/offchainlabs/nitro/util/arbmath" ) @@ -64,11 +66,10 @@ func TransferBalance( if arbmath.BigLessThan(balance.ToBig(), amount) { return fmt.Errorf("%w: addr %v have %v want %v", vm.ErrInsufficientBalance, *from, balance, amount) } - evm.StateDB.SubBalance(*from, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) - if evm.Context.ArbOSVersion >= 30 { - // ensure the from account is "touched" for EIP-161 - evm.StateDB.AddBalance(*from, &uint256.Int{}, tracing.BalanceChangeTransfer) + if evm.Context.ArbOSVersion < 30 && amount.Sign() == 0 { + evm.StateDB.CreateZombieIfDeleted(*from) } + evm.StateDB.SubBalance(*from, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) } if to != nil { evm.StateDB.AddBalance(*to, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) diff --git a/arbos/util/util.go b/arbos/util/util.go index 69d90171a0..abb7135757 100644 --- a/arbos/util/util.go +++ b/arbos/util/util.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/solgen/go/precompilesgen" pgen "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/arbstate/daprovider/reader.go b/arbstate/daprovider/reader.go index 488b156454..e2fd884340 100644 --- a/arbstate/daprovider/reader.go +++ b/arbstate/daprovider/reader.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/blobs" ) diff --git a/arbstate/inbox_fuzz_test.go b/arbstate/inbox_fuzz_test.go index 5ede321810..5a77b7e298 100644 --- a/arbstate/inbox_fuzz_test.go +++ b/arbstate/inbox_fuzz_test.go @@ -10,6 +10,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbstate/daprovider" ) diff --git a/arbutil/hash_test.go b/arbutil/hash_test.go index 2b93353d08..4b39bf328e 100644 --- a/arbutil/hash_test.go +++ b/arbutil/hash_test.go @@ -4,8 +4,9 @@ import ( "bytes" "testing" - "github.com/ethereum/go-ethereum/common" "github.com/google/go-cmp/cmp" + + "github.com/ethereum/go-ethereum/common" ) func TestSlotAddress(t *testing.T) { diff --git a/blocks_reexecutor/blocks_reexecutor.go b/blocks_reexecutor/blocks_reexecutor.go index 5a883e5d42..d074457626 100644 --- a/blocks_reexecutor/blocks_reexecutor.go +++ b/blocks_reexecutor/blocks_reexecutor.go @@ -9,6 +9,8 @@ import ( "strings" "sync" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/arbitrum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -19,9 +21,9 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/triedb" "github.com/ethereum/go-ethereum/triedb/hashdb" + "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/stopwaiter" - flag "github.com/spf13/pflag" ) type Config struct { diff --git a/bold b/bold new file mode 160000 index 0000000000..d0a87de774 --- /dev/null +++ b/bold @@ -0,0 +1 @@ +Subproject commit d0a87de774aecfa97161efd1b0a924d4d5fbcf74 diff --git a/broadcastclient/broadcastclient.go b/broadcastclient/broadcastclient.go index 4e97ca8cd0..c4a3743276 100644 --- a/broadcastclient/broadcastclient.go +++ b/broadcastclient/broadcastclient.go @@ -25,6 +25,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/offchainlabs/nitro/arbutil" m "github.com/offchainlabs/nitro/broadcaster/message" "github.com/offchainlabs/nitro/util/contracts" @@ -129,9 +130,10 @@ type BroadcastClient struct { chainId uint64 - // Protects conn and shuttingDown - connMutex sync.Mutex - conn net.Conn + // Protects conn, shuttingDown and compression + connMutex sync.Mutex + conn net.Conn + compression bool retryCount atomic.Int64 @@ -298,7 +300,7 @@ func (bc *BroadcastClient) connect(ctx context.Context, nextSeqNum arbutil.Messa return nil, nil } - conn, br, _, err := timeoutDialer.Dial(ctx, bc.websocketUrl) + conn, br, hs, err := timeoutDialer.Dial(ctx, bc.websocketUrl) if errors.Is(err, ErrIncorrectFeedServerVersion) || errors.Is(err, ErrIncorrectChainId) { return nil, err } @@ -324,6 +326,24 @@ func (bc *BroadcastClient) connect(ctx context.Context, nextSeqNum arbutil.Messa return nil, ErrMissingFeedServerVersion } + compressionNegotiated := false + for _, ext := range hs.Extensions { + if ext.Equal(deflateExt) { + compressionNegotiated = true + break + } + } + if !compressionNegotiated && config.EnableCompression { + log.Warn("Compression was not negotiated when connecting to feed server.") + } + if compressionNegotiated && !config.EnableCompression { + err := conn.Close() + if err != nil { + return nil, fmt.Errorf("error closing connection when negotiated disabled extension: %w", err) + } + return nil, errors.New("error dialing feed server: negotiated compression ws extension, but it is disabled") + } + var earlyFrameData io.Reader if br != nil { // Depending on how long the client takes to read the response, there may be @@ -338,6 +358,7 @@ func (bc *BroadcastClient) connect(ctx context.Context, nextSeqNum arbutil.Messa bc.connMutex.Lock() bc.conn = conn + bc.compression = compressionNegotiated bc.connMutex.Unlock() log.Info("Feed connected", "feedServerVersion", feedServerVersion, "chainId", chainId, "requestedSeqNum", nextSeqNum) @@ -361,7 +382,7 @@ func (bc *BroadcastClient) startBackgroundReader(earlyFrameData io.Reader) { var op ws.OpCode var err error config := bc.config() - msg, op, err = wsbroadcastserver.ReadData(ctx, bc.conn, earlyFrameData, config.Timeout, ws.StateClientSide, config.EnableCompression, flateReader) + msg, op, err = wsbroadcastserver.ReadData(ctx, bc.conn, earlyFrameData, config.Timeout, ws.StateClientSide, bc.compression, flateReader) if err != nil { if bc.isShuttingDown() { return diff --git a/broadcastclient/broadcastclient_test.go b/broadcastclient/broadcastclient_test.go index a499628cd5..0d9b8443e6 100644 --- a/broadcastclient/broadcastclient_test.go +++ b/broadcastclient/broadcastclient_test.go @@ -30,43 +30,30 @@ import ( "github.com/offchainlabs/nitro/wsbroadcastserver" ) -func TestReceiveMessagesWithoutCompression(t *testing.T) { +func TestReceiveMessages(t *testing.T) { t.Parallel() - testReceiveMessages(t, false, false, false, false) -} - -func TestReceiveMessagesWithCompression(t *testing.T) { - t.Parallel() - testReceiveMessages(t, true, true, false, false) -} - -func TestReceiveMessagesWithServerOptionalCompression(t *testing.T) { - t.Parallel() - testReceiveMessages(t, true, true, false, false) -} - -func TestReceiveMessagesWithServerOnlyCompression(t *testing.T) { - t.Parallel() - testReceiveMessages(t, false, true, false, false) -} - -func TestReceiveMessagesWithClientOnlyCompression(t *testing.T) { - t.Parallel() - testReceiveMessages(t, true, false, false, false) -} - -func TestReceiveMessagesWithRequiredCompression(t *testing.T) { - t.Parallel() - testReceiveMessages(t, true, true, true, false) -} - -func TestReceiveMessagesWithRequiredCompressionButClientDisabled(t *testing.T) { - t.Parallel() - testReceiveMessages(t, false, true, true, true) + t.Run("withoutCompression", func(t *testing.T) { + testReceiveMessages(t, false, false, false, false) + }) + t.Run("withServerOptionalCompression", func(t *testing.T) { + testReceiveMessages(t, true, true, false, false) + }) + t.Run("withServerOnlyCompression", func(t *testing.T) { + testReceiveMessages(t, false, true, false, false) + }) + t.Run("withClientOnlyCompression", func(t *testing.T) { + testReceiveMessages(t, true, false, false, false) + }) + t.Run("withRequiredCompression", func(t *testing.T) { + testReceiveMessages(t, true, true, true, false) + }) + t.Run("withRequiredCompressionButClientDisabled", func(t *testing.T) { + testReceiveMessages(t, false, true, true, true) + }) } func testReceiveMessages(t *testing.T, clientCompression bool, serverCompression bool, serverRequire bool, expectNoMessagesReceived bool) { - t.Helper() + t.Parallel() ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -138,7 +125,11 @@ func TestInvalidSignature(t *testing.T) { badPrivateKey, err := crypto.GenerateKey() Require(t, err) badPublicKey := badPrivateKey.Public() - badSequencerAddr := crypto.PubkeyToAddress(*badPublicKey.(*ecdsa.PublicKey)) + badECDSA, ok := badPublicKey.(*ecdsa.PublicKey) + if !ok { + t.Fatal("badPublicKey is not an ecdsa.PublicKey") + } + badSequencerAddr := crypto.PubkeyToAddress(*badECDSA) config := DefaultTestConfig ts := NewDummyTransactionStreamer(chainId, &badSequencerAddr) @@ -151,6 +142,7 @@ func TestInvalidSignature(t *testing.T) { nil, fatalErrChan, &badSequencerAddr, + t, ) Require(t, err) broadcastClient.Start(ctx) @@ -201,8 +193,9 @@ func (ts *dummyTransactionStreamer) AddBroadcastMessages(feedMessages []*m.Broad return nil } -func newTestBroadcastClient(config Config, listenerAddress net.Addr, chainId uint64, currentMessageCount arbutil.MessageIndex, txStreamer TransactionStreamerInterface, confirmedSequenceNumberListener chan arbutil.MessageIndex, feedErrChan chan error, validAddr *common.Address) (*BroadcastClient, error) { - port := listenerAddress.(*net.TCPAddr).Port +func newTestBroadcastClient(config Config, listenerAddress net.Addr, chainId uint64, currentMessageCount arbutil.MessageIndex, txStreamer TransactionStreamerInterface, confirmedSequenceNumberListener chan arbutil.MessageIndex, feedErrChan chan error, validAddr *common.Address, t *testing.T) (*BroadcastClient, error) { + t.Helper() + port := testhelpers.AddrTCPPort(listenerAddress, t) var av contracts.AddressVerifierInterface if validAddr != nil { config.Verify.AcceptSequencer = true @@ -225,6 +218,7 @@ func startMakeBroadcastClient(ctx context.Context, t *testing.T, clientConfig Co nil, feedErrChan, sequencerAddr, + t, ) Require(t, err) broadcastClient.Start(ctx) @@ -313,6 +307,7 @@ func TestServerClientDisconnect(t *testing.T) { nil, feedErrChan, &sequencerAddr, + t, ) Require(t, err) broadcastClient.Start(ctx) @@ -384,6 +379,7 @@ func TestBroadcastClientConfirmedMessage(t *testing.T) { confirmedSequenceNumberListener, feedErrChan, &sequencerAddr, + t, ) Require(t, err) broadcastClient.Start(ctx) @@ -456,6 +452,7 @@ func TestServerIncorrectChainId(t *testing.T) { nil, badFeedErrChan, &sequencerAddr, + t, ) Require(t, err) badBroadcastClient.Start(ctx) @@ -515,6 +512,7 @@ func TestServerMissingChainId(t *testing.T) { nil, badFeedErrChan, &sequencerAddr, + t, ) Require(t, err) badBroadcastClient.Start(ctx) @@ -572,6 +570,7 @@ func TestServerIncorrectFeedServerVersion(t *testing.T) { nil, badFeedErrChan, &sequencerAddr, + t, ) Require(t, err) badBroadcastClient.Start(ctx) @@ -631,6 +630,7 @@ func TestServerMissingFeedServerVersion(t *testing.T) { nil, badFeedErrChan, &sequencerAddr, + t, ) Require(t, err) badBroadcastClient.Start(ctx) @@ -682,6 +682,7 @@ func TestBroadcastClientReconnectsOnServerDisconnect(t *testing.T) { nil, feedErrChan, &sequencerAddr, + t, ) Require(t, err) broadcastClient.Start(ctx) @@ -794,6 +795,7 @@ func connectAndGetCachedMessages(ctx context.Context, addr net.Addr, chainId uin nil, feedErrChan, sequencerAddr, + t, ) Require(t, err) broadcastClient.Start(ctx) diff --git a/broadcaster/backlog/backlog.go b/broadcaster/backlog/backlog.go index b7b935fb7a..0897eedd10 100644 --- a/broadcaster/backlog/backlog.go +++ b/broadcaster/backlog/backlog.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + m "github.com/offchainlabs/nitro/broadcaster/message" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/containers" @@ -328,7 +329,13 @@ func newBacklogSegment() *backlogSegment { func IsBacklogSegmentNil(segment BacklogSegment) bool { if segment == nil { return true - } else if segment.(*backlogSegment) == nil { + } + bs, ok := segment.(*backlogSegment) + if !ok { + log.Error("error in backlogSegment type assertion: clearing backlog") + return false + } + if bs == nil { return true } return false diff --git a/broadcaster/message/message.go b/broadcaster/message/message.go index 1e26e6da5e..f2439912f8 100644 --- a/broadcaster/message/message.go +++ b/broadcaster/message/message.go @@ -2,6 +2,7 @@ package message import ( "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbutil" ) diff --git a/broadcaster/message/message_serialization_test.go b/broadcaster/message/message_serialization_test.go index 1d8c10e388..5fb9d55dda 100644 --- a/broadcaster/message/message_serialization_test.go +++ b/broadcaster/message/message_serialization_test.go @@ -10,6 +10,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/arbostypes" ) diff --git a/cmd/chaininfo/arbitrum_chain_info.json b/cmd/chaininfo/arbitrum_chain_info.json index f862c6dfbf..fcfbb6e26a 100644 --- a/cmd/chaininfo/arbitrum_chain_info.json +++ b/cmd/chaininfo/arbitrum_chain_info.json @@ -44,6 +44,7 @@ "sequencer-inbox": "0x1c479675ad559dc151f6ec7ed3fbf8cee79582b6", "validator-utils": "0x9e40625f52829cf04bc4839f186d621ee33b0e67", "validator-wallet-creator": "0x960953f7c69cd2bc2322db9223a815c680ccc7ea", + "stake-token": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", "deployed-at": 15411056 } }, @@ -90,6 +91,7 @@ "sequencer-inbox": "0x211e1c4c7f1bf5351ac850ed10fd68cffcf6c21b", "validator-utils": "0x2B081fbaB646D9013f2699BebEf62B7e7d7F0976", "validator-wallet-creator": "0xe05465Aab36ba1277dAE36aa27a7B74830e74DE4", + "stake-token": "0x765277eebeca2e31912c9946eae1021199b39c61", "deployed-at": 15016829 } }, diff --git a/cmd/chaininfo/chain_defaults.go b/cmd/chaininfo/chain_defaults.go new file mode 100644 index 0000000000..a69472cafc --- /dev/null +++ b/cmd/chaininfo/chain_defaults.go @@ -0,0 +1,141 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE + +package chaininfo + +import ( + "encoding/json" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/params" +) + +var DefaultChainConfigs map[string]*params.ChainConfig + +func init() { + var chainsInfo []ChainInfo + err := json.Unmarshal(DefaultChainsInfoBytes, &chainsInfo) + if err != nil { + panic(fmt.Errorf("error initializing default chainsInfo: %w", err)) + } + if len(chainsInfo) == 0 { + panic("Default chainsInfo is empty") + } + DefaultChainConfigs = make(map[string]*params.ChainConfig) + for _, chainInfo := range chainsInfo { + DefaultChainConfigs[chainInfo.ChainName] = chainInfo.ChainConfig + } +} + +func CopyArbitrumChainParams(arbChainParams params.ArbitrumChainParams) params.ArbitrumChainParams { + return params.ArbitrumChainParams{ + EnableArbOS: arbChainParams.EnableArbOS, + AllowDebugPrecompiles: arbChainParams.AllowDebugPrecompiles, + DataAvailabilityCommittee: arbChainParams.DataAvailabilityCommittee, + InitialArbOSVersion: arbChainParams.InitialArbOSVersion, + InitialChainOwner: arbChainParams.InitialChainOwner, + GenesisBlockNum: arbChainParams.GenesisBlockNum, + MaxCodeSize: arbChainParams.MaxCodeSize, + MaxInitCodeSize: arbChainParams.MaxInitCodeSize, + } +} + +func CopyChainConfig(chainConfig *params.ChainConfig) *params.ChainConfig { + copy := ¶ms.ChainConfig{ + DAOForkSupport: chainConfig.DAOForkSupport, + ArbitrumChainParams: CopyArbitrumChainParams(chainConfig.ArbitrumChainParams), + Clique: ¶ms.CliqueConfig{ + Period: chainConfig.Clique.Period, + Epoch: chainConfig.Clique.Epoch, + }, + } + if chainConfig.ChainID != nil { + copy.ChainID = new(big.Int).Set(chainConfig.ChainID) + } + if chainConfig.HomesteadBlock != nil { + copy.HomesteadBlock = new(big.Int).Set(chainConfig.HomesteadBlock) + } + if chainConfig.DAOForkBlock != nil { + copy.DAOForkBlock = new(big.Int).Set(chainConfig.DAOForkBlock) + } + if chainConfig.EIP150Block != nil { + copy.EIP150Block = new(big.Int).Set(chainConfig.EIP150Block) + } + if chainConfig.EIP155Block != nil { + copy.EIP155Block = new(big.Int).Set(chainConfig.EIP155Block) + } + if chainConfig.EIP158Block != nil { + copy.EIP158Block = new(big.Int).Set(chainConfig.EIP158Block) + } + if chainConfig.ByzantiumBlock != nil { + copy.ByzantiumBlock = new(big.Int).Set(chainConfig.ByzantiumBlock) + } + if chainConfig.ConstantinopleBlock != nil { + copy.ConstantinopleBlock = new(big.Int).Set(chainConfig.ConstantinopleBlock) + } + if chainConfig.PetersburgBlock != nil { + copy.PetersburgBlock = new(big.Int).Set(chainConfig.PetersburgBlock) + } + if chainConfig.IstanbulBlock != nil { + copy.IstanbulBlock = new(big.Int).Set(chainConfig.IstanbulBlock) + } + if chainConfig.MuirGlacierBlock != nil { + copy.MuirGlacierBlock = new(big.Int).Set(chainConfig.MuirGlacierBlock) + } + if chainConfig.BerlinBlock != nil { + copy.BerlinBlock = new(big.Int).Set(chainConfig.BerlinBlock) + } + if chainConfig.LondonBlock != nil { + copy.LondonBlock = new(big.Int).Set(chainConfig.LondonBlock) + } + return copy +} + +func fetchArbitrumChainParams(chainName string) params.ArbitrumChainParams { + originalConfig, ok := DefaultChainConfigs[chainName] + if !ok { + panic(fmt.Sprintf("%s chain config not found in DefaultChainConfigs", chainName)) + } + return CopyArbitrumChainParams(originalConfig.ArbitrumChainParams) +} + +func ArbitrumOneParams() params.ArbitrumChainParams { + return fetchArbitrumChainParams("arb1") +} +func ArbitrumNovaParams() params.ArbitrumChainParams { + return fetchArbitrumChainParams("nova") +} +func ArbitrumRollupGoerliTestnetParams() params.ArbitrumChainParams { + return fetchArbitrumChainParams("goerli-rollup") +} +func ArbitrumDevTestParams() params.ArbitrumChainParams { + return fetchArbitrumChainParams("arb-dev-test") +} +func ArbitrumDevTestDASParams() params.ArbitrumChainParams { + return fetchArbitrumChainParams("anytrust-dev-test") +} + +func fetchChainConfig(chainName string) *params.ChainConfig { + originalConfig, ok := DefaultChainConfigs[chainName] + if !ok { + panic(fmt.Sprintf("%s chain config not found in DefaultChainConfigs", chainName)) + } + return CopyChainConfig(originalConfig) +} + +func ArbitrumOneChainConfig() *params.ChainConfig { + return fetchChainConfig("arb1") +} +func ArbitrumNovaChainConfig() *params.ChainConfig { + return fetchChainConfig("nova") +} +func ArbitrumRollupGoerliTestnetChainConfig() *params.ChainConfig { + return fetchChainConfig("goerli-rollup") +} +func ArbitrumDevTestChainConfig() *params.ChainConfig { + return fetchChainConfig("arb-dev-test") +} +func ArbitrumDevTestDASChainConfig() *params.ChainConfig { + return fetchChainConfig("anytrust-dev-test") +} diff --git a/cmd/chaininfo/chain_defaults_test.go b/cmd/chaininfo/chain_defaults_test.go new file mode 100644 index 0000000000..a19e5849a6 --- /dev/null +++ b/cmd/chaininfo/chain_defaults_test.go @@ -0,0 +1,17 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE + +package chaininfo + +import ( + "reflect" + "testing" +) + +func TestDefaultChainConfigsCopyCorrectly(t *testing.T) { + for _, chainName := range []string{"arb1", "nova", "goerli-rollup", "arb-dev-test", "anytrust-dev-test"} { + if !reflect.DeepEqual(DefaultChainConfigs[chainName], fetchChainConfig(chainName)) { + t.Fatalf("copy of %s default chain config mismatch", chainName) + } + } +} diff --git a/cmd/chaininfo/chain_info.go b/cmd/chaininfo/chain_info.go index 13e586ced2..35f28bebb9 100644 --- a/cmd/chaininfo/chain_info.go +++ b/cmd/chaininfo/chain_info.go @@ -16,7 +16,7 @@ import ( ) //go:embed arbitrum_chain_info.json -var DefaultChainInfo []byte +var DefaultChainsInfoBytes []byte type ChainInfo struct { ChainName string `json:"chain-name"` @@ -80,7 +80,7 @@ func ProcessChainInfo(chainId uint64, chainName string, l2ChainInfoFiles []strin } } - chainInfo, err := findChainInfo(chainId, chainName, DefaultChainInfo) + chainInfo, err := findChainInfo(chainId, chainName, DefaultChainsInfoBytes) if err != nil || chainInfo != nil { return chainInfo, err } @@ -120,5 +120,6 @@ type RollupAddresses struct { UpgradeExecutor common.Address `json:"upgrade-executor"` ValidatorUtils common.Address `json:"validator-utils"` ValidatorWalletCreator common.Address `json:"validator-wallet-creator"` + StakeToken common.Address `json:"stake-token"` DeployedAt uint64 `json:"deployed-at"` } diff --git a/cmd/conf/chain.go b/cmd/conf/chain.go index 28b06aad2b..435246e357 100644 --- a/cmd/conf/chain.go +++ b/cmd/conf/chain.go @@ -6,10 +6,11 @@ package conf import ( "time" + flag "github.com/spf13/pflag" + "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/util/headerreader" "github.com/offchainlabs/nitro/util/rpcclient" - flag "github.com/spf13/pflag" ) type ParentChainConfig struct { diff --git a/cmd/conf/database.go b/cmd/conf/database.go index af18bacd57..8857b615f3 100644 --- a/cmd/conf/database.go +++ b/cmd/conf/database.go @@ -12,8 +12,9 @@ import ( "runtime" "time" - "github.com/ethereum/go-ethereum/ethdb/pebble" flag "github.com/spf13/pflag" + + "github.com/ethereum/go-ethereum/ethdb/pebble" ) type PersistentConfig struct { diff --git a/cmd/conf/init.go b/cmd/conf/init.go index f01d99f8b7..74bd89fd16 100644 --- a/cmd/conf/init.go +++ b/cmd/conf/init.go @@ -6,8 +6,9 @@ import ( "strings" "time" - "github.com/ethereum/go-ethereum/log" "github.com/spf13/pflag" + + "github.com/ethereum/go-ethereum/log" ) type InitConfig struct { @@ -20,11 +21,13 @@ type InitConfig struct { DownloadPoll time.Duration `koanf:"download-poll"` DevInit bool `koanf:"dev-init"` DevInitAddress string `koanf:"dev-init-address"` + DevMaxCodeSize uint64 `koanf:"dev-max-code-size"` DevInitBlockNum uint64 `koanf:"dev-init-blocknum"` Empty bool `koanf:"empty"` ImportWasm bool `koanf:"import-wasm"` AccountsPerSync uint `koanf:"accounts-per-sync"` ImportFile string `koanf:"import-file"` + GenesisJsonFile string `koanf:"genesis-json-file"` ThenQuit bool `koanf:"then-quit"` Prune string `koanf:"prune"` PruneBloomSize uint64 `koanf:"prune-bloom-size"` @@ -47,10 +50,12 @@ var InitConfigDefault = InitConfig{ DownloadPoll: time.Minute, DevInit: false, DevInitAddress: "", + DevMaxCodeSize: 0, DevInitBlockNum: 0, Empty: false, ImportWasm: false, ImportFile: "", + GenesisJsonFile: "", AccountsPerSync: 100000, ThenQuit: false, Prune: "", @@ -75,10 +80,12 @@ func InitConfigAddOptions(prefix string, f *pflag.FlagSet) { f.Bool(prefix+".dev-init", InitConfigDefault.DevInit, "init with dev data (1 account with balance) instead of file import") f.String(prefix+".dev-init-address", InitConfigDefault.DevInitAddress, "Address of dev-account. Leave empty to use the dev-wallet.") f.Uint64(prefix+".dev-init-blocknum", InitConfigDefault.DevInitBlockNum, "Number of preinit blocks. Must exist in ancient database.") + f.Uint64(prefix+".dev-max-code-size", InitConfigDefault.DevMaxCodeSize, "Max code size for dev accounts") f.Bool(prefix+".empty", InitConfigDefault.Empty, "init with empty state") f.Bool(prefix+".import-wasm", InitConfigDefault.ImportWasm, "if set, import the wasm directory when downloading a database (contains executable code - only use with highly trusted source)") f.Bool(prefix+".then-quit", InitConfigDefault.ThenQuit, "quit after init is done") f.String(prefix+".import-file", InitConfigDefault.ImportFile, "path for json data to import") + f.String(prefix+".genesis-json-file", InitConfigDefault.GenesisJsonFile, "path for genesis json file") f.Uint(prefix+".accounts-per-sync", InitConfigDefault.AccountsPerSync, "during init - sync database every X accounts. Lower value for low-memory systems. 0 disables.") f.String(prefix+".prune", InitConfigDefault.Prune, "pruning for a given use: \"full\" for full nodes serving RPC requests, or \"validator\" for validators") f.Uint64(prefix+".prune-bloom-size", InitConfigDefault.PruneBloomSize, "the amount of memory in megabytes to use for the pruning bloom filter (higher values prune better)") diff --git a/cmd/dataavailability/data_availability_check.go b/cmd/dataavailability/data_availability_check.go index d80c0475bf..e961215925 100644 --- a/cmd/dataavailability/data_availability_check.go +++ b/cmd/dataavailability/data_availability_check.go @@ -13,6 +13,8 @@ import ( "syscall" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" @@ -27,8 +29,6 @@ import ( "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/util/metricsutil" "github.com/offchainlabs/nitro/util/stopwaiter" - - flag "github.com/spf13/pflag" ) // Data availability check is done to as to make sure that the data that is being stored by DAS is available at all time. diff --git a/cmd/datool/datool.go b/cmd/datool/datool.go index f791d8cbc4..06f94dc952 100644 --- a/cmd/datool/datool.go +++ b/cmd/datool/datool.go @@ -22,10 +22,10 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/cmd/util" - "github.com/offchainlabs/nitro/cmd/util/confighelpers" "github.com/offchainlabs/nitro/das" "github.com/offchainlabs/nitro/das/dastree" diff --git a/cmd/dbconv/dbconv/config.go b/cmd/dbconv/dbconv/config.go index 917f34261d..fdebda2d54 100644 --- a/cmd/dbconv/dbconv/config.go +++ b/cmd/dbconv/dbconv/config.go @@ -4,9 +4,10 @@ import ( "errors" "fmt" + flag "github.com/spf13/pflag" + "github.com/offchainlabs/nitro/cmd/conf" "github.com/offchainlabs/nitro/cmd/genericconf" - flag "github.com/spf13/pflag" ) type DBConfig struct { diff --git a/cmd/dbconv/dbconv/dbconv.go b/cmd/dbconv/dbconv/dbconv.go index 6a97df31c0..fdba1907c2 100644 --- a/cmd/dbconv/dbconv/dbconv.go +++ b/cmd/dbconv/dbconv/dbconv.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/dbutil" ) diff --git a/cmd/dbconv/main.go b/cmd/dbconv/main.go index 2d61c96552..f5aaced40b 100644 --- a/cmd/dbconv/main.go +++ b/cmd/dbconv/main.go @@ -6,13 +6,15 @@ import ( "os" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/metrics/exp" + "github.com/offchainlabs/nitro/cmd/dbconv/dbconv" "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/cmd/util/confighelpers" - flag "github.com/spf13/pflag" ) func parseDBConv(args []string) (*dbconv.DBConvConfig, error) { diff --git a/cmd/deploy/deploy.go b/cmd/deploy/deploy.go index c70ceb1d94..a597799b06 100644 --- a/cmd/deploy/deploy.go +++ b/cmd/deploy/deploy.go @@ -14,20 +14,20 @@ import ( "strings" "time" - "github.com/offchainlabs/nitro/cmd/chaininfo" - "github.com/offchainlabs/nitro/cmd/genericconf" - "github.com/offchainlabs/nitro/solgen/go/precompilesgen" - "github.com/offchainlabs/nitro/util/headerreader" - "github.com/offchainlabs/nitro/validator/server_common" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbnode" + "github.com/offchainlabs/nitro/cmd/chaininfo" + "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/cmd/util" deploycode "github.com/offchainlabs/nitro/deploy" + "github.com/offchainlabs/nitro/solgen/go/precompilesgen" + "github.com/offchainlabs/nitro/util/headerreader" + "github.com/offchainlabs/nitro/validator/server_common" ) func main() { diff --git a/cmd/genericconf/config.go b/cmd/genericconf/config.go index 7c0c5034b3..408ba9a552 100644 --- a/cmd/genericconf/config.go +++ b/cmd/genericconf/config.go @@ -9,9 +9,10 @@ import ( "log/slog" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" - flag "github.com/spf13/pflag" ) type ConfConfig struct { diff --git a/cmd/genericconf/filehandler_test.go b/cmd/genericconf/filehandler_test.go index daa9ed397c..7d24fbb69f 100644 --- a/cmd/genericconf/filehandler_test.go +++ b/cmd/genericconf/filehandler_test.go @@ -12,6 +12,7 @@ import ( "time" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/testhelpers" ) @@ -55,7 +56,11 @@ func readLogMessagesFromJSONFile(t *testing.T, path string) ([]string, error) { if !ok { testhelpers.FailImpl(t, "Incorrect record, msg key is missing", "record", record) } - messages = append(messages, msg.(string)) + msgString, ok := msg.(string) + if !ok { + testhelpers.FailImpl(t, "Incorrect record, msg is not a string", "record", record) + } + messages = append(messages, msgString) } if errors.Is(err, io.EOF) { return messages, nil diff --git a/cmd/genericconf/liveconfig.go b/cmd/genericconf/liveconfig.go index 1054140e9e..f256fe6612 100644 --- a/cmd/genericconf/liveconfig.go +++ b/cmd/genericconf/liveconfig.go @@ -9,6 +9,7 @@ import ( "time" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/stopwaiter" ) diff --git a/cmd/genericconf/logging.go b/cmd/genericconf/logging.go index fa45953278..4cdaa5f3e8 100644 --- a/cmd/genericconf/logging.go +++ b/cmd/genericconf/logging.go @@ -8,8 +8,9 @@ import ( "os" "sync" - "github.com/ethereum/go-ethereum/log" "gopkg.in/natefinch/lumberjack.v2" + + "github.com/ethereum/go-ethereum/log" ) var globalFileLoggerFactory = fileLoggerFactory{} diff --git a/cmd/genericconf/pprof.go b/cmd/genericconf/pprof.go index 9fd3a6f2a4..0bde03decd 100644 --- a/cmd/genericconf/pprof.go +++ b/cmd/genericconf/pprof.go @@ -3,7 +3,6 @@ package genericconf import ( "fmt" "net/http" - // Blank import pprof registers its HTTP handlers. _ "net/http/pprof" // #nosec G108 diff --git a/cmd/nitro-val/config.go b/cmd/nitro-val/config.go index 2adbe5e9aa..bca83277b3 100644 --- a/cmd/nitro-val/config.go +++ b/cmd/nitro-val/config.go @@ -2,19 +2,20 @@ package main import ( "fmt" - "reflect" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/nat" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/cmd/conf" "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/util/colors" "github.com/offchainlabs/nitro/validator/valnode" - flag "github.com/spf13/pflag" ) type ValidationNodeConfig struct { diff --git a/cmd/nitro/config_test.go b/cmd/nitro/config_test.go index 9626893083..ef41d704f1 100644 --- a/cmd/nitro/config_test.go +++ b/cmd/nitro/config_test.go @@ -14,14 +14,14 @@ import ( "testing" "time" + "github.com/r3labs/diff/v3" + flag "github.com/spf13/pflag" + "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/cmd/util/confighelpers" "github.com/offchainlabs/nitro/das" "github.com/offchainlabs/nitro/util/colors" "github.com/offchainlabs/nitro/util/testhelpers" - - "github.com/r3labs/diff/v3" - flag "github.com/spf13/pflag" ) func TestEmptyCliConfig(t *testing.T) { diff --git a/cmd/nitro/init.go b/cmd/nitro/init.go index f0b303817c..acad672bb0 100644 --- a/cmd/nitro/init.go +++ b/cmd/nitro/init.go @@ -25,6 +25,7 @@ import ( "github.com/cavaliergopher/grab/v3" "github.com/codeclysm/extract/v3" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" @@ -681,12 +682,43 @@ func openInitializeChainDb(ctx context.Context, stack *node.Node, config *NodeCo Nonce: 0, }, }, + ChainOwner: common.HexToAddress(config.Init.DevInitAddress), } initDataReader = statetransfer.NewMemoryInitDataReader(&initData) } var chainConfig *params.ChainConfig + if config.Init.GenesisJsonFile != "" { + if initDataReader != nil { + return chainDb, nil, errors.New("multiple init methods supplied") + } + genesisJson, err := os.ReadFile(config.Init.GenesisJsonFile) + if err != nil { + return chainDb, nil, err + } + var gen core.Genesis + if err := json.Unmarshal(genesisJson, &gen); err != nil { + return chainDb, nil, err + } + var accounts []statetransfer.AccountInitializationInfo + for address, account := range gen.Alloc { + accounts = append(accounts, statetransfer.AccountInitializationInfo{ + Addr: address, + EthBalance: account.Balance, + Nonce: account.Nonce, + ContractInfo: &statetransfer.AccountInitContractInfo{ + Code: account.Code, + ContractStorage: account.Storage, + }, + }) + } + initDataReader = statetransfer.NewMemoryInitDataReader(&statetransfer.ArbosInitializationInfo{ + Accounts: accounts, + }) + chainConfig = gen.Config + } + var l2BlockChain *core.BlockChain txIndexWg := sync.WaitGroup{} if initDataReader == nil { @@ -712,9 +744,14 @@ func openInitializeChainDb(ctx context.Context, stack *node.Node, config *NodeCo if err != nil { return chainDb, nil, err } - chainConfig, err = chaininfo.GetChainConfig(new(big.Int).SetUint64(config.Chain.ID), config.Chain.Name, genesisBlockNr, config.Chain.InfoFiles, config.Chain.InfoJson) - if err != nil { - return chainDb, nil, err + if chainConfig == nil { + chainConfig, err = chaininfo.GetChainConfig(new(big.Int).SetUint64(config.Chain.ID), config.Chain.Name, genesisBlockNr, config.Chain.InfoFiles, config.Chain.InfoJson) + if err != nil { + return chainDb, nil, err + } + } + if config.Init.DevInit && config.Init.DevMaxCodeSize != 0 { + chainConfig.ArbitrumChainParams.MaxCodeSize = config.Init.DevMaxCodeSize } testUpdateTxIndex(chainDb, chainConfig, &txIndexWg) ancients, err := chainDb.Ancients() diff --git a/cmd/nitro/init_test.go b/cmd/nitro/init_test.go index 48d969f053..8e7afe369d 100644 --- a/cmd/nitro/init_test.go +++ b/cmd/nitro/init_test.go @@ -23,11 +23,13 @@ import ( "testing" "time" + "github.com/google/go-cmp/cmp" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/node" - "github.com/google/go-cmp/cmp" + "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/cmd/conf" diff --git a/cmd/nitro/nitro.go b/cmd/nitro/nitro.go index 50abc414dc..c0362ba050 100644 --- a/cmd/nitro/nitro.go +++ b/cmd/nitro/nitro.go @@ -59,7 +59,7 @@ import ( "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/solgen/go/rollupgen" - "github.com/offchainlabs/nitro/staker" + legacystaker "github.com/offchainlabs/nitro/staker/legacy" "github.com/offchainlabs/nitro/staker/validatorwallet" "github.com/offchainlabs/nitro/util/colors" "github.com/offchainlabs/nitro/util/dbutil" @@ -257,7 +257,7 @@ func mainImpl() int { defaultL1WalletConfig.ResolveDirectoryNames(nodeConfig.Persistent.Chain) nodeConfig.Node.Staker.ParentChainWallet.ResolveDirectoryNames(nodeConfig.Persistent.Chain) - defaultValidatorL1WalletConfig := staker.DefaultValidatorL1WalletConfig + defaultValidatorL1WalletConfig := legacystaker.DefaultValidatorL1WalletConfig defaultValidatorL1WalletConfig.ResolveDirectoryNames(nodeConfig.Persistent.Chain) nodeConfig.Node.BatchPoster.ParentChainWallet.ResolveDirectoryNames(nodeConfig.Persistent.Chain) @@ -290,11 +290,11 @@ func mainImpl() int { flag.Usage() log.Crit("validator must have the parent chain reader enabled") } - strategy, err := nodeConfig.Node.Staker.ParseStrategy() + strategy, err := legacystaker.ParseStrategy(nodeConfig.Node.Staker.Strategy) if err != nil { log.Crit("couldn't parse staker strategy", "err", err) } - if strategy != staker.WatchtowerStrategy && !nodeConfig.Node.Staker.Dangerous.WithoutBlockValidator { + if strategy != legacystaker.WatchtowerStrategy && !nodeConfig.Node.Staker.Dangerous.WithoutBlockValidator { nodeConfig.Node.BlockValidator.Enable = true } } @@ -466,28 +466,29 @@ func mainImpl() int { fatalErrChan := make(chan error, 10) - var blocksReExecutor *blocksreexecutor.BlocksReExecutor if nodeConfig.BlocksReExecutor.Enable && l2BlockChain != nil { - blocksReExecutor, err = blocksreexecutor.New(&nodeConfig.BlocksReExecutor, l2BlockChain, chainDb, fatalErrChan) + if !nodeConfig.Init.ThenQuit { + log.Error("blocks-reexecutor cannot be enabled without --init.then-quit") + return 1 + } + blocksReExecutor, err := blocksreexecutor.New(&nodeConfig.BlocksReExecutor, l2BlockChain, chainDb, fatalErrChan) if err != nil { log.Error("error initializing blocksReExecutor", "err", err) return 1 } - if nodeConfig.Init.ThenQuit { - if err := gethexec.PopulateStylusTargetCache(&nodeConfig.Execution.StylusTarget); err != nil { - log.Error("error populating stylus target cache", "err", err) - return 1 - } - success := make(chan struct{}) - blocksReExecutor.Start(ctx, success) - deferFuncs = append(deferFuncs, func() { blocksReExecutor.StopAndWait() }) - select { - case err := <-fatalErrChan: - log.Error("shutting down due to fatal error", "err", err) - defer log.Error("shut down due to fatal error", "err", err) - return 1 - case <-success: - } + if err := gethexec.PopulateStylusTargetCache(&nodeConfig.Execution.StylusTarget); err != nil { + log.Error("error populating stylus target cache", "err", err) + return 1 + } + success := make(chan struct{}) + blocksReExecutor.Start(ctx, success) + deferFuncs = append(deferFuncs, func() { blocksReExecutor.StopAndWait() }) + select { + case err := <-fatalErrChan: + log.Error("shutting down due to fatal error", "err", err) + defer log.Error("shut down due to fatal error", "err", err) + return 1 + case <-success: } } @@ -639,10 +640,6 @@ func mainImpl() int { // remove previous deferFuncs, StopAndWait closes database and blockchain. deferFuncs = []func(){func() { currentNode.StopAndWait() }} } - if blocksReExecutor != nil && !nodeConfig.Init.ThenQuit { - blocksReExecutor.Start(ctx, nil) - deferFuncs = append(deferFuncs, func() { blocksReExecutor.StopAndWait() }) - } sigint := make(chan os.Signal, 1) signal.Notify(sigint, os.Interrupt, syscall.SIGTERM) diff --git a/cmd/pruning/pruning.go b/cmd/pruning/pruning.go index 0755f5ff9e..e89c79bc89 100644 --- a/cmd/pruning/pruning.go +++ b/cmd/pruning/pruning.go @@ -20,6 +20,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbnode/dataposter/storage" "github.com/offchainlabs/nitro/arbutil" diff --git a/cmd/replay/db.go b/cmd/replay/db.go index 7147c48f75..3dc9f15da0 100644 --- a/cmd/replay/db.go +++ b/cmd/replay/db.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/wavmio" ) diff --git a/cmd/seq-coordinator-manager/rediscoordinator/redis_coordinator.go b/cmd/seq-coordinator-manager/rediscoordinator/redis_coordinator.go index b897b23252..b6b5342ca2 100644 --- a/cmd/seq-coordinator-manager/rediscoordinator/redis_coordinator.go +++ b/cmd/seq-coordinator-manager/rediscoordinator/redis_coordinator.go @@ -5,8 +5,9 @@ import ( "errors" "strings" - "github.com/offchainlabs/nitro/util/redisutil" "github.com/redis/go-redis/v9" + + "github.com/offchainlabs/nitro/util/redisutil" ) // RedisCoordinator builds upon RedisCoordinator of redisutil with additional functionality diff --git a/cmd/seq-coordinator-manager/seq-coordinator-manager.go b/cmd/seq-coordinator-manager/seq-coordinator-manager.go index 43d90441ef..7b5dc68699 100644 --- a/cmd/seq-coordinator-manager/seq-coordinator-manager.go +++ b/cmd/seq-coordinator-manager/seq-coordinator-manager.go @@ -7,11 +7,13 @@ import ( "strconv" "github.com/enescakir/emoji" - "github.com/ethereum/go-ethereum/log" "github.com/gdamore/tcell/v2" + "github.com/rivo/tview" + + "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/cmd/seq-coordinator-manager/rediscoordinator" "github.com/offchainlabs/nitro/util/redisutil" - "github.com/rivo/tview" ) // Tview diff --git a/cmd/util/confighelpers/configuration.go b/cmd/util/confighelpers/configuration.go index 19b5b1a24c..8c4ef2a70b 100644 --- a/cmd/util/confighelpers/configuration.go +++ b/cmd/util/confighelpers/configuration.go @@ -209,6 +209,7 @@ func devFlagArgs() []string { "--init.empty=false", "--http.port", "8547", "--http.addr", "127.0.0.1", + "--http.api=net,web3,eth,arb,arbdebug,debug", } return args } diff --git a/das/aggregator.go b/das/aggregator.go index 372e448e76..85fccb078f 100644 --- a/das/aggregator.go +++ b/das/aggregator.go @@ -254,7 +254,7 @@ func (a *Aggregator) Store(ctx context.Context, message []byte, timeout uint64) var sigs []blsSignatures.Signature var aggSignersMask uint64 var successfullyStoredCount int - var returned bool + var returned int // 0-no status, 1-succeeded, 2-failed for i := 0; i < len(a.services); i++ { select { case <-ctx.Done(): @@ -276,26 +276,26 @@ func (a *Aggregator) Store(ctx context.Context, message []byte, timeout uint64) // certDetailsChan, so the Store function can return, but also continue // running until all responses are received (or the context is canceled) // in order to produce accurate logs/metrics. - if !returned { + if returned == 0 { if successfullyStoredCount >= a.requiredServicesForStore { cd := certDetails{} cd.pubKeys = append(cd.pubKeys, pubKeys...) cd.sigs = append(cd.sigs, sigs...) cd.aggSignersMask = aggSignersMask certDetailsChan <- cd - returned = true - if a.maxAllowedServiceStoreFailures > 0 && // Ignore the case where AssumedHonest = 1, probably a testnet - int(storeFailures.Load())+1 > a.maxAllowedServiceStoreFailures { - log.Error("das.Aggregator: storing the batch data succeeded to enough DAS commitee members to generate the Data Availability Cert, but if one more had failed then the cert would not have been able to be generated. Look for preceding logs with \"Error from backend\"") - } + returned = 1 } else if int(storeFailures.Load()) > a.maxAllowedServiceStoreFailures { cd := certDetails{} cd.err = fmt.Errorf("aggregator failed to store message to at least %d out of %d DASes (assuming %d are honest). %w", a.requiredServicesForStore, len(a.services), a.config.AssumedHonest, daprovider.ErrBatchToDasFailed) certDetailsChan <- cd - returned = true + returned = 2 } } - + } + if returned == 1 && + a.maxAllowedServiceStoreFailures > 0 && // Ignore the case where AssumedHonest = 1, probably a testnet + int(storeFailures.Load())+1 > a.maxAllowedServiceStoreFailures { + log.Error("das.Aggregator: storing the batch data succeeded to enough DAS commitee members to generate the Data Availability Cert, but if one more had failed then the cert would not have been able to be generated. Look for preceding logs with \"Error from backend\"") } }() diff --git a/das/aggregator_test.go b/das/aggregator_test.go index 4bc209513e..217315eef0 100644 --- a/das/aggregator_test.go +++ b/das/aggregator_test.go @@ -16,10 +16,10 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/blsSignatures" - - "github.com/ethereum/go-ethereum/log" ) func TestDAS_BasicAggregationLocal(t *testing.T) { diff --git a/das/cache_storage_service.go b/das/cache_storage_service.go index 439ccda086..0ba20ac55b 100644 --- a/das/cache_storage_service.go +++ b/das/cache_storage_service.go @@ -7,14 +7,15 @@ import ( "context" "fmt" - "github.com/offchainlabs/nitro/arbstate/daprovider" - "github.com/offchainlabs/nitro/das/dastree" - "github.com/offchainlabs/nitro/util/pretty" flag "github.com/spf13/pflag" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/log" + + "github.com/offchainlabs/nitro/arbstate/daprovider" + "github.com/offchainlabs/nitro/das/dastree" + "github.com/offchainlabs/nitro/util/pretty" ) type CacheConfig struct { diff --git a/das/chain_fetch_das.go b/das/chain_fetch_das.go index 4de6c981cf..34b10d45ec 100644 --- a/das/chain_fetch_das.go +++ b/das/chain_fetch_das.go @@ -8,14 +8,14 @@ import ( "errors" "sync" - "github.com/offchainlabs/nitro/util/pretty" - "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/das/dastree" "github.com/offchainlabs/nitro/solgen/go/bridgegen" + "github.com/offchainlabs/nitro/util/pretty" ) type syncedKeysetCache struct { diff --git a/das/das.go b/das/das.go index 0b03c05ad6..e870761ac2 100644 --- a/das/das.go +++ b/das/das.go @@ -10,10 +10,11 @@ import ( "math" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" - flag "github.com/spf13/pflag" "github.com/offchainlabs/nitro/arbstate/daprovider" ) diff --git a/das/dasRpcClient.go b/das/dasRpcClient.go index d6e2c389c9..3ea6c4e2c6 100644 --- a/das/dasRpcClient.go +++ b/das/dasRpcClient.go @@ -9,13 +9,14 @@ import ( "strings" "time" + "golang.org/x/sync/errgroup" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" - "golang.org/x/sync/errgroup" - "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/blsSignatures" "github.com/offchainlabs/nitro/util/pretty" diff --git a/das/dasRpcServer.go b/das/dasRpcServer.go index bb1be0384e..adddf26571 100644 --- a/das/dasRpcServer.go +++ b/das/dasRpcServer.go @@ -17,7 +17,6 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/rpc" "github.com/offchainlabs/nitro/blsSignatures" diff --git a/das/dastree/dastree.go b/das/dastree/dastree.go index 2bcbccaae3..29a6b2495c 100644 --- a/das/dastree/dastree.go +++ b/das/dastree/dastree.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/arbmath" ) diff --git a/das/dastree/dastree_test.go b/das/dastree/dastree_test.go index 4d24c9ae98..b24d6ce69b 100644 --- a/das/dastree/dastree_test.go +++ b/das/dastree/dastree_test.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/colors" "github.com/offchainlabs/nitro/util/pretty" diff --git a/das/db_storage_service.go b/das/db_storage_service.go index 74bf12b927..0e38505a13 100644 --- a/das/db_storage_service.go +++ b/das/db_storage_service.go @@ -14,13 +14,15 @@ import ( "time" badger "github.com/dgraph-io/badger/v4" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/das/dastree" "github.com/offchainlabs/nitro/util/pretty" "github.com/offchainlabs/nitro/util/stopwaiter" - flag "github.com/spf13/pflag" ) type LocalDBStorageConfig struct { diff --git a/das/fallback_storage_service.go b/das/fallback_storage_service.go index 0a451678d0..64bc3c2a7a 100644 --- a/das/fallback_storage_service.go +++ b/das/fallback_storage_service.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/das/dastree" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/das/fallback_storage_service_test.go b/das/fallback_storage_service_test.go index b73df31624..4c7c0351e9 100644 --- a/das/fallback_storage_service_test.go +++ b/das/fallback_storage_service_test.go @@ -10,6 +10,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common/math" + "github.com/offchainlabs/nitro/das/dastree" ) diff --git a/das/google_cloud_storage_service_test.go b/das/google_cloud_storage_service_test.go index 799d999bad..94d6f3ee44 100644 --- a/das/google_cloud_storage_service_test.go +++ b/das/google_cloud_storage_service_test.go @@ -2,13 +2,16 @@ package das import ( "bytes" - googlestorage "cloud.google.com/go/storage" "context" "errors" - "github.com/ethereum/go-ethereum/common" - "github.com/offchainlabs/nitro/das/dastree" "testing" "time" + + googlestorage "cloud.google.com/go/storage" + + "github.com/ethereum/go-ethereum/common" + + "github.com/offchainlabs/nitro/das/dastree" ) type mockGCSClient struct { diff --git a/das/key_utils.go b/das/key_utils.go index 33f29788b6..0262e7f666 100644 --- a/das/key_utils.go +++ b/das/key_utils.go @@ -11,6 +11,7 @@ import ( "os" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/blsSignatures" ) diff --git a/das/local_file_storage_service.go b/das/local_file_storage_service.go index 5e64c34b10..71c98c7879 100644 --- a/das/local_file_storage_service.go +++ b/das/local_file_storage_service.go @@ -20,14 +20,16 @@ import ( "syscall" "time" + flag "github.com/spf13/pflag" + "golang.org/x/sys/unix" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/das/dastree" "github.com/offchainlabs/nitro/util/pretty" "github.com/offchainlabs/nitro/util/stopwaiter" - flag "github.com/spf13/pflag" - "golang.org/x/sys/unix" ) type LocalFileStorageConfig struct { diff --git a/das/memory_backed_storage_service.go b/das/memory_backed_storage_service.go index c013b501b9..8a2df28902 100644 --- a/das/memory_backed_storage_service.go +++ b/das/memory_backed_storage_service.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/das/dastree" ) diff --git a/das/panic_wrapper.go b/das/panic_wrapper.go index 3530cb651d..4729792c33 100644 --- a/das/panic_wrapper.go +++ b/das/panic_wrapper.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" ) diff --git a/das/reader_aggregator_strategies.go b/das/reader_aggregator_strategies.go index 8e10d52c16..e072fdd85c 100644 --- a/das/reader_aggregator_strategies.go +++ b/das/reader_aggregator_strategies.go @@ -5,6 +5,7 @@ package das import ( "errors" + "maps" "math/rand" "sort" "sync" @@ -33,10 +34,7 @@ func (s *abstractAggregatorStrategy) update(readers []daprovider.DASReader, stat s.readers = make([]daprovider.DASReader, len(readers)) copy(s.readers, readers) - s.stats = make(map[daprovider.DASReader]readerStats) - for k, v := range stats { - s.stats[k] = v - } + s.stats = maps.Clone(stats) } // Exponentially growing Explore Exploit Strategy diff --git a/das/reader_aggregator_strategies_test.go b/das/reader_aggregator_strategies_test.go index cdb85b25e9..e211ee38fe 100644 --- a/das/reader_aggregator_strategies_test.go +++ b/das/reader_aggregator_strategies_test.go @@ -11,6 +11,7 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbstate/daprovider" ) @@ -72,8 +73,10 @@ func TestDAS_SimpleExploreExploit(t *testing.T) { } for i := 0; i < len(was) && doMatch; i++ { - if expected[i].(*dummyReader).int != was[i].(*dummyReader).int { - Fail(t, fmt.Sprintf("expected %d, was %d", expected[i].(*dummyReader).int, was[i].(*dummyReader).int)) + expR, expOK := expected[i].(*dummyReader) + wasR, wasOK := was[i].(*dummyReader) + if !expOK || !wasOK || expR.int != wasR.int { + Fail(t, fmt.Sprintf("expected %d, was %d", expected[i], was[i])) } } } diff --git a/das/redis_storage_service.go b/das/redis_storage_service.go index e57240992c..cdd18ea974 100644 --- a/das/redis_storage_service.go +++ b/das/redis_storage_service.go @@ -10,17 +10,17 @@ import ( "fmt" "time" + "github.com/redis/go-redis/v9" + flag "github.com/spf13/pflag" "golang.org/x/crypto/sha3" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/das/dastree" "github.com/offchainlabs/nitro/util/pretty" "github.com/offchainlabs/nitro/util/redisutil" - "github.com/redis/go-redis/v9" - flag "github.com/spf13/pflag" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" ) type RedisConfig struct { diff --git a/das/redis_storage_service_test.go b/das/redis_storage_service_test.go index 77d3e8cd0f..41ca6bac90 100644 --- a/das/redis_storage_service_test.go +++ b/das/redis_storage_service_test.go @@ -11,6 +11,7 @@ import ( "time" "github.com/alicebob/miniredis/v2" + "github.com/offchainlabs/nitro/das/dastree" ) diff --git a/das/redundant_storage_service.go b/das/redundant_storage_service.go index 3158d28076..85274188d6 100644 --- a/das/redundant_storage_service.go +++ b/das/redundant_storage_service.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/util/pretty" ) diff --git a/das/restful_client.go b/das/restful_client.go index b65426e7cd..3004ea1b59 100644 --- a/das/restful_client.go +++ b/das/restful_client.go @@ -14,6 +14,7 @@ import ( "strings" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/das/dastree" ) diff --git a/das/restful_server.go b/das/restful_server.go index b1607729e2..6c5e2ec453 100644 --- a/das/restful_server.go +++ b/das/restful_server.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/util/pretty" diff --git a/das/rpc_aggregator.go b/das/rpc_aggregator.go index 9cf481e015..916637aac6 100644 --- a/das/rpc_aggregator.go +++ b/das/rpc_aggregator.go @@ -14,14 +14,15 @@ import ( "github.com/knadh/koanf" "github.com/knadh/koanf/providers/confmap" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/blsSignatures" "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/util/metricsutil" "github.com/offchainlabs/nitro/util/signature" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/ethclient" ) type BackendConfig struct { diff --git a/das/rpc_test.go b/das/rpc_test.go index 370ec0a872..ebc4b736d5 100644 --- a/das/rpc_test.go +++ b/das/rpc_test.go @@ -14,6 +14,7 @@ import ( "time" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/blsSignatures" "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/util/signature" diff --git a/das/s3_storage_service.go b/das/s3_storage_service.go index d251f12214..4c0dcaf5a3 100644 --- a/das/s3_storage_service.go +++ b/das/s3_storage_service.go @@ -16,14 +16,14 @@ import ( "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/feature/s3/manager" "github.com/aws/aws-sdk-go-v2/service/s3" - "github.com/offchainlabs/nitro/arbstate/daprovider" - "github.com/offchainlabs/nitro/das/dastree" - "github.com/offchainlabs/nitro/util/pretty" + flag "github.com/spf13/pflag" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" - flag "github.com/spf13/pflag" + "github.com/offchainlabs/nitro/arbstate/daprovider" + "github.com/offchainlabs/nitro/das/dastree" + "github.com/offchainlabs/nitro/util/pretty" ) type S3Uploader interface { diff --git a/das/signature_verifier.go b/das/signature_verifier.go index 0aa42bceb6..453b2fe305 100644 --- a/das/signature_verifier.go +++ b/das/signature_verifier.go @@ -11,6 +11,7 @@ import ( "os" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/util/contracts" ) diff --git a/das/simple_das_reader_aggregator.go b/das/simple_das_reader_aggregator.go index f45c56afe0..ff28d6a22a 100644 --- a/das/simple_das_reader_aggregator.go +++ b/das/simple_das_reader_aggregator.go @@ -12,13 +12,15 @@ import ( "sync" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/das/dastree" "github.com/offchainlabs/nitro/util/pretty" "github.com/offchainlabs/nitro/util/stopwaiter" - flag "github.com/spf13/pflag" ) // Most of the time we will use the SimpleDASReaderAggregator only to aggregate diff --git a/das/storage_service.go b/das/storage_service.go index b7526077e9..925bbb520a 100644 --- a/das/storage_service.go +++ b/das/storage_service.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/offchainlabs/nitro/arbstate/daprovider" ) diff --git a/das/syncing_fallback_storage.go b/das/syncing_fallback_storage.go index 0670a29c73..1aec2b7328 100644 --- a/das/syncing_fallback_storage.go +++ b/das/syncing_fallback_storage.go @@ -12,6 +12,8 @@ import ( "sync" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -19,13 +21,13 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/headerreader" "github.com/offchainlabs/nitro/util/stopwaiter" - flag "github.com/spf13/pflag" ) var sequencerInboxABI *abi.ABI diff --git a/das/util.go b/das/util.go index 114e075e79..cd300175bb 100644 --- a/das/util.go +++ b/das/util.go @@ -7,6 +7,7 @@ import ( "time" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/util/pretty" ) diff --git a/deploy/deploy.go b/deploy/deploy.go index bb4b2e6594..2738373c72 100644 --- a/deploy/deploy.go +++ b/deploy/deploy.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/solgen/go/challengegen" diff --git a/execution/gethexec/api.go b/execution/gethexec/api.go index 4fa60693d5..713d1496f9 100644 --- a/execution/gethexec/api.go +++ b/execution/gethexec/api.go @@ -18,6 +18,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/retryables" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/execution/gethexec/block_recorder.go b/execution/gethexec/block_recorder.go index 6f30e16e5c..2e3d51fec9 100644 --- a/execution/gethexec/block_recorder.go +++ b/execution/gethexec/block_recorder.go @@ -6,18 +6,20 @@ import ( "sync" "testing" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/arbitrum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/execution" - flag "github.com/spf13/pflag" ) // BlockRecorder uses a separate statedatabase from the blockchain. diff --git a/execution/gethexec/blockchain.go b/execution/gethexec/blockchain.go index fda8f49093..53b494a3c2 100644 --- a/execution/gethexec/blockchain.go +++ b/execution/gethexec/blockchain.go @@ -18,6 +18,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/arbostypes" diff --git a/execution/gethexec/executionengine.go b/execution/gethexec/executionengine.go index 6571672b71..69535e82be 100644 --- a/execution/gethexec/executionengine.go +++ b/execution/gethexec/executionengine.go @@ -12,6 +12,7 @@ package gethexec #include "arbitrator.h" */ import "C" + import ( "bytes" "context" @@ -26,20 +27,22 @@ import ( "testing" "time" + "github.com/google/uuid" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/params" - "github.com/google/uuid" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/l1pricing" "github.com/offchainlabs/nitro/arbos/programs" "github.com/offchainlabs/nitro/arbutil" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/execution" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/sharedmetrics" @@ -901,7 +904,7 @@ func (s *ExecutionEngine) digestMessageWithBlockMutex(num arbutil.MessageIndex, timestamp = time.Unix(int64(timestampInt), 0) timeUntilUpgrade = time.Until(timestamp) } - maxSupportedVersion := params.ArbitrumDevTestChainConfig().ArbitrumChainParams.InitialArbOSVersion + maxSupportedVersion := chaininfo.ArbitrumDevTestChainConfig().ArbitrumChainParams.InitialArbOSVersion logLevel := log.Warn if timeUntilUpgrade < time.Hour*24 { logLevel = log.Error diff --git a/execution/gethexec/forwarder.go b/execution/gethexec/forwarder.go index cdb4f394e5..8e64508e6c 100644 --- a/execution/gethexec/forwarder.go +++ b/execution/gethexec/forwarder.go @@ -14,8 +14,6 @@ import ( "sync/atomic" "time" - "github.com/offchainlabs/nitro/util/redisutil" - "github.com/offchainlabs/nitro/util/stopwaiter" flag "github.com/spf13/pflag" "github.com/ethereum/go-ethereum/arbitrum" @@ -24,6 +22,9 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" + + "github.com/offchainlabs/nitro/util/redisutil" + "github.com/offchainlabs/nitro/util/stopwaiter" ) type ForwarderConfig struct { diff --git a/execution/gethexec/node.go b/execution/gethexec/node.go index 499a13164e..11d173a21e 100644 --- a/execution/gethexec/node.go +++ b/execution/gethexec/node.go @@ -9,6 +9,8 @@ import ( "sync/atomic" "testing" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/arbitrum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -21,6 +23,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/programs" "github.com/offchainlabs/nitro/arbutil" @@ -28,7 +31,6 @@ import ( "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/util/dbutil" "github.com/offchainlabs/nitro/util/headerreader" - flag "github.com/spf13/pflag" ) type StylusTargetConfig struct { diff --git a/execution/gethexec/sequencer.go b/execution/gethexec/sequencer.go index cc98c7930f..92d440e8cb 100644 --- a/execution/gethexec/sequencer.go +++ b/execution/gethexec/sequencer.go @@ -15,11 +15,6 @@ import ( "sync/atomic" "time" - "github.com/offchainlabs/nitro/arbutil" - "github.com/offchainlabs/nitro/execution" - "github.com/offchainlabs/nitro/util/arbmath" - "github.com/offchainlabs/nitro/util/containers" - "github.com/offchainlabs/nitro/util/headerreader" flag "github.com/spf13/pflag" "github.com/ethereum/go-ethereum/arbitrum" @@ -34,10 +29,16 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/l1pricing" + "github.com/offchainlabs/nitro/arbutil" + "github.com/offchainlabs/nitro/execution" + "github.com/offchainlabs/nitro/util/arbmath" + "github.com/offchainlabs/nitro/util/containers" + "github.com/offchainlabs/nitro/util/headerreader" "github.com/offchainlabs/nitro/util/stopwaiter" ) diff --git a/execution/gethexec/stylus_tracer.go b/execution/gethexec/stylus_tracer.go index cb4e858048..8a024941d3 100644 --- a/execution/gethexec/stylus_tracer.go +++ b/execution/gethexec/stylus_tracer.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/containers" ) diff --git a/execution/gethexec/sync_monitor.go b/execution/gethexec/sync_monitor.go index 86949c7767..7f04b2ee4a 100644 --- a/execution/gethexec/sync_monitor.go +++ b/execution/gethexec/sync_monitor.go @@ -3,9 +3,10 @@ package gethexec import ( "context" - "github.com/offchainlabs/nitro/execution" "github.com/pkg/errors" flag "github.com/spf13/pflag" + + "github.com/offchainlabs/nitro/execution" ) type SyncMonitorConfig struct { diff --git a/execution/gethexec/tx_pre_checker.go b/execution/gethexec/tx_pre_checker.go index e0ae330148..e7ef20bae9 100644 --- a/execution/gethexec/tx_pre_checker.go +++ b/execution/gethexec/tx_pre_checker.go @@ -8,6 +8,8 @@ import ( "fmt" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/arbitrum_types" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -15,11 +17,11 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/l1pricing" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/headerreader" - flag "github.com/spf13/pflag" ) var ( diff --git a/execution/gethexec/wasmstorerebuilder.go b/execution/gethexec/wasmstorerebuilder.go index e3eb8e9268..b40a7cd128 100644 --- a/execution/gethexec/wasmstorerebuilder.go +++ b/execution/gethexec/wasmstorerebuilder.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" + "github.com/offchainlabs/nitro/arbos/arbosState" ) diff --git a/execution/interface.go b/execution/interface.go index 2a3d79c697..c0aa71c146 100644 --- a/execution/interface.go +++ b/execution/interface.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbutil" ) diff --git a/execution/nodeInterface/NodeInterface.go b/execution/nodeInterface/NodeInterface.go index 00da1ba4b6..20282f8231 100644 --- a/execution/nodeInterface/NodeInterface.go +++ b/execution/nodeInterface/NodeInterface.go @@ -21,6 +21,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/l1pricing" "github.com/offchainlabs/nitro/arbos/retryables" @@ -525,7 +526,11 @@ func (n NodeInterface) GasEstimateL1Component( if err := args.CallDefaults(randomGas, evm.Context.BaseFee, evm.ChainConfig().ChainID); err != nil { return 0, nil, nil, err } - msg := args.ToMessage(evm.Context.BaseFee, randomGas, n.header, evm.StateDB.(*state.StateDB), core.MessageEthcallMode) + sdb, ok := evm.StateDB.(*state.StateDB) + if !ok { + return 0, nil, nil, errors.New("failed to cast to stateDB") + } + msg := args.ToMessage(evm.Context.BaseFee, randomGas, n.header, sdb, core.MessageEthcallMode) pricing := c.State.L1PricingState() l1BaseFeeEstimate, err := pricing.PricePerUnit() @@ -581,7 +586,11 @@ func (n NodeInterface) GasEstimateComponents( if err := args.CallDefaults(gasCap, evm.Context.BaseFee, evm.ChainConfig().ChainID); err != nil { return 0, 0, nil, nil, err } - msg := args.ToMessage(evm.Context.BaseFee, gasCap, n.header, evm.StateDB.(*state.StateDB), core.MessageGasEstimationMode) + sdb, ok := evm.StateDB.(*state.StateDB) + if !ok { + return 0, 0, nil, nil, errors.New("failed to cast to stateDB") + } + msg := args.ToMessage(evm.Context.BaseFee, gasCap, n.header, sdb, core.MessageGasEstimationMode) brotliCompressionLevel, err := c.State.BrotliCompressionLevel() if err != nil { return 0, 0, nil, nil, fmt.Errorf("failed to get brotli compression level: %w", err) diff --git a/execution/nodeInterface/NodeInterfaceDebug.go b/execution/nodeInterface/NodeInterfaceDebug.go index ae9c157ce4..7066bf2ed2 100644 --- a/execution/nodeInterface/NodeInterfaceDebug.go +++ b/execution/nodeInterface/NodeInterfaceDebug.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/solgen/go/node_interfacegen" ) diff --git a/execution/nodeInterface/virtual-contracts.go b/execution/nodeInterface/virtual-contracts.go index 86382870b7..5b9f4b3474 100644 --- a/execution/nodeInterface/virtual-contracts.go +++ b/execution/nodeInterface/virtual-contracts.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/l1pricing" diff --git a/gethhook/geth-hook.go b/gethhook/geth-hook.go index 776e8cc452..3ad275b352 100644 --- a/gethhook/geth-hook.go +++ b/gethhook/geth-hook.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/precompiles" ) diff --git a/gethhook/geth_test.go b/gethhook/geth_test.go index 57ce2ddec0..381c128071 100644 --- a/gethhook/geth_test.go +++ b/gethhook/geth_test.go @@ -20,6 +20,7 @@ import ( "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/util/testhelpers" ) @@ -49,7 +50,7 @@ var testChainConfig = ¶ms.ChainConfig{ MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), - ArbitrumChainParams: params.ArbitrumDevTestParams(), + ArbitrumChainParams: chaininfo.ArbitrumDevTestParams(), } func TestEthDepositMessage(t *testing.T) { diff --git a/go-ethereum b/go-ethereum index ed53c04acc..4f47f4c6ea 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit ed53c04acc1637bbe1e07725fff82066c6687512 +Subproject commit 4f47f4c6eafd81290d51a7f11fbd99bc2fc3c5a6 diff --git a/go.mod b/go.mod index cbe473d15b..7a48b0520d 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,8 @@ replace github.com/VictoriaMetrics/fastcache => ./fastcache replace github.com/ethereum/go-ethereum => ./go-ethereum +replace github.com/offchainlabs/bold => ./bold + require ( cloud.google.com/go/storage v1.43.0 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible @@ -22,7 +24,7 @@ require ( github.com/codeclysm/extract/v3 v3.0.2 github.com/dgraph-io/badger/v4 v4.2.0 github.com/enescakir/emoji v1.0.0 - github.com/ethereum/go-ethereum v1.10.26 + github.com/ethereum/go-ethereum v1.13.15 github.com/fatih/structtag v1.2.0 github.com/gdamore/tcell/v2 v2.7.1 github.com/gobwas/httphead v0.1.0 @@ -36,6 +38,7 @@ require ( github.com/knadh/koanf v1.4.0 github.com/mailru/easygo v0.0.0-20190618140210-3c14a0dc985f github.com/mitchellh/mapstructure v1.4.1 + github.com/offchainlabs/bold v0.0.0-00010101000000-000000000000 github.com/pkg/errors v0.9.1 github.com/r3labs/diff/v3 v3.0.1 github.com/redis/go-redis/v9 v9.6.1 @@ -57,6 +60,7 @@ require ( cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.8 // indirect + github.com/ccoveille/go-safecast v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -64,6 +68,8 @@ require ( github.com/google/s2a-go v0.1.7 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.5 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/testify v1.9.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect go.opentelemetry.io/otel v1.24.0 // indirect @@ -73,13 +79,13 @@ require ( google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d // indirect - google.golang.org/grpc v1.64.0 // indirect + google.golang.org/grpc v1.64.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) require ( - github.com/DataDog/zstd v1.4.5 // indirect + github.com/DataDog/zstd v1.5.2 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/StackExchange/wmi v1.2.1 // indirect github.com/VictoriaMetrics/fastcache v1.12.1 // indirect github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.5 // indirect @@ -98,7 +104,7 @@ require ( github.com/aws/smithy-go v1.22.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.10.0 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cockroachdb/errors v1.11.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect @@ -137,6 +143,7 @@ require ( github.com/google/flatbuffers v1.12.1 // indirect github.com/google/go-github/v62 v62.0.0 github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b // indirect + github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/graph-gophers/graphql-go v1.3.0 // indirect github.com/h2non/filetype v1.0.6 // indirect @@ -145,6 +152,7 @@ require ( github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/huin/goupnp v1.3.0 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect + github.com/jmoiron/sqlx v1.3.5 // indirect github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 // indirect github.com/juju/loggo v0.0.0-20180524022052-584905176618 // indirect github.com/klauspost/compress v1.17.2 // indirect @@ -154,7 +162,8 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/mattn/go-sqlite3 v1.14.6 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/pointerstructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect @@ -163,14 +172,14 @@ require ( github.com/opentracing/opentracing-go v1.1.0 // indirect github.com/prometheus/client_golang v1.14.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/common v0.39.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect github.com/rhnvrm/simples3 v0.6.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/rs/cors v1.7.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect + github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/status-im/keycard-go v0.2.0 // indirect github.com/supranational/blst v0.3.11 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect @@ -181,11 +190,12 @@ require ( github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/yuin/gopher-lua v1.1.1 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect go.opencensus.io v0.24.0 // indirect golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.22.0 - golang.org/x/sync v0.7.0 + golang.org/x/sync v0.8.0 golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/protobuf v1.34.2 // indirect diff --git a/go.sum b/go.sum index 25b594cc25..55ad86267a 100644 --- a/go.sum +++ b/go.sum @@ -1,69 +1,29 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= cloud.google.com/go/auth v0.6.1 h1:T0Zw1XM5c1GlpN2HYr2s+m3vr1p2wy+8VN+Z1FKxW38= cloud.google.com/go/auth v0.6.1/go.mod h1:eFHG7zDzbXHKmjJddFG/rBlcGp6t25SwRUiEQSlO4x4= cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/iam v1.1.8 h1:r7umDwhj+BQyz0ScZMp4QrGXjSTI3ZINnpgU2nlB/K0= cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE= cloud.google.com/go/longrunning v0.5.7 h1:WLbHekDbjK1fVFD3ibpFFVoyizlLRl73I7YKuAKilhU= cloud.google.com/go/longrunning v0.5.7/go.mod h1:8GClkudohy1Fxm3owmBGid8W0pSgodEMwEAztp38Xng= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= -github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= +github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= github.com/alicebob/miniredis/v2 v2.32.1 h1:Bz7CciDnYSaa0mX5xODh6GUITRSx+cVhjNoOR4JssBo= @@ -124,8 +84,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.31.4/go.mod h1:yMWe0F+XG0DkRZK5ODZhG github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM= github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= @@ -135,12 +93,14 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= -github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/cavaliergopher/grab/v3 v3.0.1 h1:4z7TkBfmPjmLAAmkkAZNX/6QJ1nNFdv3SdIHXju0Fr4= github.com/cavaliergopher/grab/v3 v3.0.1/go.mod h1:1U/KNnD+Ft6JJiYoYBAimKH2XrYptb8Kl3DFGmsjpq4= +github.com/ccoveille/go-safecast v1.1.0 h1:iHKNWaZm+OznO7Eh6EljXPjGfGQsSfa6/sxPlIEKO+g= +github.com/ccoveille/go-safecast v1.1.0/go.mod h1:QqwNjxQ7DAqY0C721OIO9InMk9zCwcsO7tnRuHytad8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= @@ -240,29 +200,19 @@ github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkN github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= @@ -274,7 +224,6 @@ github.com/gobwas/ws-examples v0.0.0-20190625122829-a9e8908d9484 h1:XC9N1eiAyO1z github.com/gobwas/ws-examples v0.0.0-20190625122829-a9e8908d9484/go.mod h1:5nDZF4afNA1S7ZKcBXCMvDo4nuCTp1931DND7/W4aXo= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= @@ -282,24 +231,13 @@ github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -308,16 +246,12 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= @@ -326,13 +260,10 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -340,25 +271,13 @@ github.com/google/go-github/v62 v62.0.0 h1:/6mGCaRywZz9MuHyw9gD1CwsbmBX8GWsbFkwM github.com/google/go-github/v62 v62.0.0/go.mod h1:EMxeUqGJq2xRu9DYBMwel/mr7kZrzUOfQmmpYrZn2a4= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg= github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b h1:RMpPgZTSApbPf7xaVel+QkoGPRLFLrwFO89uDUHEGf0= github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= @@ -367,10 +286,10 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBYGmXdxA= github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= @@ -412,21 +331,15 @@ github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXei github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= +github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/juju/clock v0.0.0-20180524022203-d293bb356ca4/go.mod h1:nD0vlnrUjcjJhqN5WuCWZyzfd5AHZAC9/ajvbSx69xA= github.com/juju/errors v0.0.0-20150916125642-1b5e39b83d18/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 h1:rhqTjzJlm7EbkELJDKMTU7udov+Se0xZkWmugr6zGok= @@ -439,17 +352,12 @@ github.com/juju/testing v0.0.0-20200510222523-6c8c298c77a0 h1:+WWUkhnTjV6RNOxkcw github.com/juju/testing v0.0.0-20200510222523-6c8c298c77a0/go.mod h1:hpGvhGHPVbNBraRLZEhoQwFLMrjK8PSlO4D3nDjKYXo= github.com/juju/utils v0.0.0-20180808125547-9dfc6dbfb02b/go.mod h1:6/KLg8Wz/y2KVGWEpkK9vMNGkOnu4k/cqs8Z1fKjTOk= github.com/juju/version v0.0.0-20161031051906-1f41e27e54f2/go.mod h1:kE8gK5X0CImdr7qpSKl3xB2PmpySSmfj7zVbkZFs81U= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/knadh/koanf v1.4.0 h1:/k0Bh49SqLyLNfte9r6cvuZWrApOQhglOmhIU3L/zDw= github.com/knadh/koanf v1.4.0/go.mod h1:1cfH5223ZeZUOs8FU2UdTmaNfHpqgtjV0+NHjRO43gs= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= @@ -463,6 +371,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mailru/easygo v0.0.0-20190618140210-3c14a0dc985f h1:4+gHs0jJFJ06bfN8PshnM6cHcxGjRUVRLo5jndDiKRQ= @@ -477,9 +387,10 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= +github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= @@ -499,13 +410,6 @@ github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= @@ -529,39 +433,20 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= +github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/r3labs/diff/v3 v3.0.1 h1:CBKqf3XmNRHXKmdU7mZP1w7TV0pDyVCis1AUHtA4Xtg= github.com/r3labs/diff/v3 v3.0.1/go.mod h1:f1S9bourRbiM66NskseyUdo0fTmEE0qKrikYJX63dgo= github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4= @@ -574,7 +459,6 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= @@ -584,19 +468,17 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -627,18 +509,13 @@ github.com/wealdtech/go-merkletree v1.0.0 h1:DsF1xMzj5rK3pSQM6mPv8jlyJyHXhFxpnA2 github.com/wealdtech/go-merkletree v1.0.0/go.mod h1:cdil512d/8ZC7Kx3bfrDvGMQXB25NTKbsm0rFrmDax4= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M= github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= @@ -654,45 +531,18 @@ go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35 go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= golang.org/x/crypto v0.0.0-20180214000028-650f4a345ab4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -703,51 +553,21 @@ golang.org/x/net v0.0.0-20180406214816-61147c48b25b/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -756,66 +576,32 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -836,9 +622,7 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -849,52 +633,16 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= @@ -905,60 +653,14 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/api v0.187.0 h1:Mxs7VATVC2v7CY+7Xwm4ndkX71hpElcvx0D1Ji/p1eo= google.golang.org/api v0.187.0/go.mod h1:KIHlTc4x7N7gKKuVsdmfBXN13yEEWXWFURWY6SBp2gk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d h1:PksQg4dV6Sem3/HkBX+Ltq8T0ke0PKIRBNBatoDTVls= google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:s7iA721uChleev562UJO2OYB0PPT9CMFjV+Ce7VJH5M= google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4 h1:MuYw1wJzT+ZkybKfaOXKp5hJiZDn2iHaXRw0mRYdHSc= @@ -967,21 +669,13 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= -google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= +google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -990,18 +684,13 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20160105164936-4f90aeace3a2/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -1015,10 +704,8 @@ gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.0.0-20170712054546-1be3d31502d6/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1027,14 +714,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/linters/koanf/handlers.go b/linters/koanf/handlers.go index 5ee3b80f9f..e3f7c67f68 100644 --- a/linters/koanf/handlers.go +++ b/linters/koanf/handlers.go @@ -126,7 +126,11 @@ func checkFlagDefs(pass *analysis.Pass, f *ast.FuncDecl, cnt map[string]int) Res if !ok { continue } - handleSelector(pass, callE.Args[1].(*ast.SelectorExpr), -1, cnt) + sel, ok := callE.Args[1].(*ast.SelectorExpr) + if !ok { + continue + } + handleSelector(pass, sel, -1, cnt) if normSL := normalizeTag(sl); !strings.EqualFold(normSL, s) { res.Errors = append(res.Errors, koanfError{ Pos: f.Pos(), diff --git a/linters/linters.go b/linters/linters.go index a6c9f6d55e..8d2807c0b2 100644 --- a/linters/linters.go +++ b/linters/linters.go @@ -1,11 +1,12 @@ package main import ( + "golang.org/x/tools/go/analysis/multichecker" + "github.com/offchainlabs/nitro/linters/koanf" "github.com/offchainlabs/nitro/linters/pointercheck" "github.com/offchainlabs/nitro/linters/rightshift" "github.com/offchainlabs/nitro/linters/structinit" - "golang.org/x/tools/go/analysis/multichecker" ) func main() { diff --git a/nitro-testnode b/nitro-testnode index 72141dd495..fa19e22104 160000 --- a/nitro-testnode +++ b/nitro-testnode @@ -1 +1 @@ -Subproject commit 72141dd495ad965aa2a23723ea3e755037903ad7 +Subproject commit fa19e2210403ad24519ea46c2d337f54a9f47593 diff --git a/precompiles/ArbAddressTable_test.go b/precompiles/ArbAddressTable_test.go index 62ce177480..3feaca6279 100644 --- a/precompiles/ArbAddressTable_test.go +++ b/precompiles/ArbAddressTable_test.go @@ -12,9 +12,10 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbosState" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/util/testhelpers" ) @@ -173,7 +174,7 @@ func newMockEVMForTestingWithVersionAndRunMode(version *uint64, runMode core.Mes } func newMockEVMForTestingWithVersion(version *uint64) *vm.EVM { - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() if version != nil { chainConfig.ArbitrumChainParams.InitialArbOSVersion = *version } diff --git a/precompiles/ArbAggregator_test.go b/precompiles/ArbAggregator_test.go index 879fc737e4..eb72f12f25 100644 --- a/precompiles/ArbAggregator_test.go +++ b/precompiles/ArbAggregator_test.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/l1pricing" ) diff --git a/precompiles/ArbGasInfo.go b/precompiles/ArbGasInfo.go index b41dfda8a2..8d916926f3 100644 --- a/precompiles/ArbGasInfo.go +++ b/precompiles/ArbGasInfo.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/l1pricing" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/precompiles/ArbGasInfo_test.go b/precompiles/ArbGasInfo_test.go index 260d7b3cef..76489c3c9a 100644 --- a/precompiles/ArbGasInfo_test.go +++ b/precompiles/ArbGasInfo_test.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/storage" diff --git a/precompiles/ArbInfo.go b/precompiles/ArbInfo.go index 9f8cf34532..60e23ffb6e 100644 --- a/precompiles/ArbInfo.go +++ b/precompiles/ArbInfo.go @@ -5,6 +5,7 @@ package precompiles import ( "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/util/arbmath" ) diff --git a/precompiles/ArbOwner.go b/precompiles/ArbOwner.go index 8b87445e0e..90a7b4ccc2 100644 --- a/precompiles/ArbOwner.go +++ b/precompiles/ArbOwner.go @@ -10,13 +10,13 @@ import ( "fmt" "math/big" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/l1pricing" "github.com/offchainlabs/nitro/arbos/programs" "github.com/offchainlabs/nitro/util/arbmath" am "github.com/offchainlabs/nitro/util/arbmath" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/params" ) // ArbOwner precompile provides owners with tools for managing the rollup. diff --git a/precompiles/ArbOwner_test.go b/precompiles/ArbOwner_test.go index fe995c6b32..51b2fc0cd9 100644 --- a/precompiles/ArbOwner_test.go +++ b/precompiles/ArbOwner_test.go @@ -6,21 +6,22 @@ package precompiles import ( "bytes" "encoding/json" - "github.com/ethereum/go-ethereum/core/tracing" "math/big" "testing" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" - "github.com/holiman/uint256" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/l1pricing" "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/util/testhelpers" ) @@ -181,7 +182,7 @@ func TestArbOwnerSetChainConfig(t *testing.T) { prec := &ArbOwner{} callCtx := testContext(caller, evm) - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() chainConfig.ArbitrumChainParams.AllowDebugPrecompiles = false serializedChainConfig, err := json.Marshal(chainConfig) Require(t, err) diff --git a/precompiles/ArbRetryableTx.go b/precompiles/ArbRetryableTx.go index d925499180..49cc9a3264 100644 --- a/precompiles/ArbRetryableTx.go +++ b/precompiles/ArbRetryableTx.go @@ -9,8 +9,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/retryables" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" diff --git a/precompiles/ArbRetryableTx_test.go b/precompiles/ArbRetryableTx_test.go index 47450299ce..d5b93640c9 100644 --- a/precompiles/ArbRetryableTx_test.go +++ b/precompiles/ArbRetryableTx_test.go @@ -7,12 +7,12 @@ import ( "math/big" "testing" - "github.com/offchainlabs/nitro/arbos" - "github.com/offchainlabs/nitro/arbos/storage" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/vm" + + "github.com/offchainlabs/nitro/arbos" + "github.com/offchainlabs/nitro/arbos/storage" templates "github.com/offchainlabs/nitro/solgen/go/precompilesgen" ) diff --git a/precompiles/ArbSys.go b/precompiles/ArbSys.go index 689d3b18de..04cde46ebe 100644 --- a/precompiles/ArbSys.go +++ b/precompiles/ArbSys.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" + "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/merkletree" diff --git a/precompiles/ArbWasm.go b/precompiles/ArbWasm.go index bc24c8a6e8..eecca35ce6 100644 --- a/precompiles/ArbWasm.go +++ b/precompiles/ArbWasm.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" gethparams "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/programs" "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/precompiles/precompile.go b/precompiles/precompile.go index 9a356c5a8e..5b5376a4ca 100644 --- a/precompiles/precompile.go +++ b/precompiles/precompile.go @@ -14,13 +14,6 @@ import ( "strings" "unicode" - "github.com/offchainlabs/nitro/arbos" - "github.com/offchainlabs/nitro/arbos/arbosState" - "github.com/offchainlabs/nitro/arbos/programs" - "github.com/offchainlabs/nitro/arbos/util" - pgen "github.com/offchainlabs/nitro/solgen/go/precompilesgen" - "github.com/offchainlabs/nitro/util/arbmath" - "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -30,6 +23,13 @@ import ( "github.com/ethereum/go-ethereum/log" glog "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" + + "github.com/offchainlabs/nitro/arbos" + "github.com/offchainlabs/nitro/arbos/arbosState" + "github.com/offchainlabs/nitro/arbos/programs" + "github.com/offchainlabs/nitro/arbos/util" + pgen "github.com/offchainlabs/nitro/solgen/go/precompilesgen" + "github.com/offchainlabs/nitro/util/arbmath" ) type ArbosPrecompile interface { diff --git a/precompiles/precompile_test.go b/precompiles/precompile_test.go index 18b33714aa..c8b8a46b96 100644 --- a/precompiles/precompile_test.go +++ b/precompiles/precompile_test.go @@ -10,12 +10,12 @@ import ( "os" "testing" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/storage" templates "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/precompiles/wrapper.go b/precompiles/wrapper.go index b9363c40a2..edc079fc5b 100644 --- a/precompiles/wrapper.go +++ b/precompiles/wrapper.go @@ -7,12 +7,12 @@ import ( "errors" "math/big" - "github.com/offchainlabs/nitro/arbos/arbosState" - "github.com/offchainlabs/nitro/arbos/util" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + + "github.com/offchainlabs/nitro/arbos/arbosState" + "github.com/offchainlabs/nitro/arbos/util" ) // DebugPrecompile is a precompile wrapper for those not allowed in production diff --git a/pubsub/common.go b/pubsub/common.go index ad36b6e622..a4fc141bb5 100644 --- a/pubsub/common.go +++ b/pubsub/common.go @@ -5,8 +5,9 @@ import ( "fmt" "strings" - "github.com/ethereum/go-ethereum/log" "github.com/redis/go-redis/v9" + + "github.com/ethereum/go-ethereum/log" ) func ResultKeyFor(streamName, id string) string { return fmt.Sprintf("%s.%s", streamName, id) } diff --git a/pubsub/consumer.go b/pubsub/consumer.go index 391042bd7e..3f28749473 100644 --- a/pubsub/consumer.go +++ b/pubsub/consumer.go @@ -10,11 +10,13 @@ import ( "strconv" "time" - "github.com/ethereum/go-ethereum/log" "github.com/google/uuid" - "github.com/offchainlabs/nitro/util/stopwaiter" "github.com/redis/go-redis/v9" "github.com/spf13/pflag" + + "github.com/ethereum/go-ethereum/log" + + "github.com/offchainlabs/nitro/util/stopwaiter" ) type ConsumerConfig struct { diff --git a/pubsub/producer.go b/pubsub/producer.go index 722c145a09..5aaca77aa7 100644 --- a/pubsub/producer.go +++ b/pubsub/producer.go @@ -18,12 +18,14 @@ import ( "sync" "time" - "github.com/ethereum/go-ethereum/log" "github.com/google/uuid" - "github.com/offchainlabs/nitro/util/containers" - "github.com/offchainlabs/nitro/util/stopwaiter" "github.com/redis/go-redis/v9" "github.com/spf13/pflag" + + "github.com/ethereum/go-ethereum/log" + + "github.com/offchainlabs/nitro/util/containers" + "github.com/offchainlabs/nitro/util/stopwaiter" ) const ( diff --git a/pubsub/pubsub_test.go b/pubsub/pubsub_test.go index 8bd1aed25d..c82a35e0b8 100644 --- a/pubsub/pubsub_test.go +++ b/pubsub/pubsub_test.go @@ -9,12 +9,14 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/log" "github.com/google/go-cmp/cmp" "github.com/google/uuid" + "github.com/redis/go-redis/v9" + + "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/containers" "github.com/offchainlabs/nitro/util/redisutil" - "github.com/redis/go-redis/v9" ) var ( diff --git a/relay/relay_stress_test.go b/relay/relay_stress_test.go index 575a77ee6f..93ba510193 100644 --- a/relay/relay_stress_test.go +++ b/relay/relay_stress_test.go @@ -7,6 +7,7 @@ import ( "time" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/broadcastclient" diff --git a/scripts/split-val-entry.sh b/scripts/split-val-entry.sh index 42e0c5fe08..ab8c520918 100755 --- a/scripts/split-val-entry.sh +++ b/scripts/split-val-entry.sh @@ -39,4 +39,4 @@ for port in 52000 52001; do done done echo launching nitro-node -/usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines --node.block-validator.validation-server-configs-list='[{"jwtsecret":"/tmp/nitro-val.jwt","url":"ws://127.0.0.10:52000"}, {"jwtsecret":"/tmp/nitro-val.jwt","url":"ws://127.0.0.10:52001"}]' "$@" +exec /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines --node.block-validator.validation-server-configs-list='[{"jwtsecret":"/tmp/nitro-val.jwt","url":"ws://127.0.0.10:52000"}, {"jwtsecret":"/tmp/nitro-val.jwt","url":"ws://127.0.0.10:52001"}]' "$@" diff --git a/staker/block_validator.go b/staker/block_validator.go index 5a1f123693..43e5c7d28f 100644 --- a/staker/block_validator.go +++ b/staker/block_validator.go @@ -16,12 +16,15 @@ import ( "testing" "time" + "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" + "github.com/offchainlabs/nitro/arbnode/resourcemanager" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/containers" @@ -31,7 +34,6 @@ import ( "github.com/offchainlabs/nitro/validator/client/redis" "github.com/offchainlabs/nitro/validator/inputs" "github.com/offchainlabs/nitro/validator/server_api" - "github.com/spf13/pflag" ) var ( @@ -1115,7 +1117,7 @@ func (v *BlockValidator) Reorg(ctx context.Context, count arbutil.MessageIndex) } v.validations.Delete(iPos) } - v.nextCreateStartGS = buildGlobalState(*res, endPosition) + v.nextCreateStartGS = BuildGlobalState(*res, endPosition) v.nextCreatePrevDelayed = msg.DelayedMessagesRead v.nextCreateBatchReread = true v.prevBatchCache = make(map[uint64][]byte) diff --git a/staker/block_validator_schema.go b/staker/block_validator_schema.go index f6eb39f015..330116dda0 100644 --- a/staker/block_validator_schema.go +++ b/staker/block_validator_schema.go @@ -5,6 +5,7 @@ package staker import ( "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/validator" ) diff --git a/staker/bold/bold_staker.go b/staker/bold/bold_staker.go new file mode 100644 index 0000000000..1a8eed80fa --- /dev/null +++ b/staker/bold/bold_staker.go @@ -0,0 +1,536 @@ +// Copyright 2023-2024, Offchain Labs, Inc. +// For license information, see https://github.com/offchainlabs/nitro/blob/main/LICENSE +package bold + +import ( + "context" + "errors" + "fmt" + "math/big" + "time" + + flag "github.com/spf13/pflag" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/rpc" + + protocol "github.com/offchainlabs/bold/chain-abstraction" + solimpl "github.com/offchainlabs/bold/chain-abstraction/sol-implementation" + challengemanager "github.com/offchainlabs/bold/challenge-manager" + boldtypes "github.com/offchainlabs/bold/challenge-manager/types" + l2stateprovider "github.com/offchainlabs/bold/layer2-state-provider" + "github.com/offchainlabs/bold/solgen/go/challengeV2gen" + boldrollup "github.com/offchainlabs/bold/solgen/go/rollupgen" + "github.com/offchainlabs/bold/util" + "github.com/offchainlabs/nitro/arbnode/dataposter" + "github.com/offchainlabs/nitro/arbutil" + "github.com/offchainlabs/nitro/staker" + legacystaker "github.com/offchainlabs/nitro/staker/legacy" + "github.com/offchainlabs/nitro/util/headerreader" + "github.com/offchainlabs/nitro/util/stopwaiter" + "github.com/offchainlabs/nitro/validator" +) + +var assertionCreatedId common.Hash + +func init() { + rollupAbi, err := boldrollup.RollupCoreMetaData.GetAbi() + if err != nil { + panic(err) + } + assertionCreatedEvent, ok := rollupAbi.Events["AssertionCreated"] + if !ok { + panic("RollupCore ABI missing AssertionCreated event") + } + assertionCreatedId = assertionCreatedEvent.ID +} + +type BoldConfig struct { + Enable bool `koanf:"enable"` + Strategy string `koanf:"strategy"` + // How often to post assertions onchain. + AssertionPostingInterval time.Duration `koanf:"assertion-posting-interval"` + // How often to scan for newly created assertions onchain. + AssertionScanningInterval time.Duration `koanf:"assertion-scanning-interval"` + // How often to confirm assertions onchain. + AssertionConfirmingInterval time.Duration `koanf:"assertion-confirming-interval"` + API bool `koanf:"api"` + APIHost string `koanf:"api-host"` + APIPort uint16 `koanf:"api-port"` + APIDBPath string `koanf:"api-db-path"` + TrackChallengeParentAssertionHashes []string `koanf:"track-challenge-parent-assertion-hashes"` + CheckStakerSwitchInterval time.Duration `koanf:"check-staker-switch-interval"` + StateProviderConfig StateProviderConfig `koanf:"state-provider-config"` + StartValidationFromStaked bool `koanf:"start-validation-from-staked"` + strategy legacystaker.StakerStrategy +} + +func (c *BoldConfig) Validate() error { + strategy, err := legacystaker.ParseStrategy(c.Strategy) + if err != nil { + return err + } + c.strategy = strategy + return nil +} + +type StateProviderConfig struct { + // A name identifier for the validator for cosmetic purposes. + ValidatorName string `koanf:"validator-name"` + CheckBatchFinality bool `koanf:"check-batch-finality"` + // Path to a filesystem directory that will cache machine hashes for BOLD. + MachineLeavesCachePath string `koanf:"machine-leaves-cache-path"` +} + +var DefaultStateProviderConfig = StateProviderConfig{ + ValidatorName: "default-validator", + CheckBatchFinality: true, + MachineLeavesCachePath: "machine-hashes-cache", +} + +var DefaultBoldConfig = BoldConfig{ + Enable: false, + Strategy: "Watchtower", + AssertionPostingInterval: time.Minute * 15, + AssertionScanningInterval: time.Minute, + AssertionConfirmingInterval: time.Minute, + API: false, + APIHost: "127.0.0.1", + APIPort: 9393, + APIDBPath: "bold-api-db", + TrackChallengeParentAssertionHashes: []string{}, + CheckStakerSwitchInterval: time.Minute, // Every minute, check if the Nitro node staker should switch to using BOLD. + StateProviderConfig: DefaultStateProviderConfig, + StartValidationFromStaked: true, +} + +var BoldModes = map[legacystaker.StakerStrategy]boldtypes.Mode{ + legacystaker.WatchtowerStrategy: boldtypes.WatchTowerMode, + legacystaker.DefensiveStrategy: boldtypes.DefensiveMode, + legacystaker.ResolveNodesStrategy: boldtypes.ResolveMode, + legacystaker.MakeNodesStrategy: boldtypes.MakeMode, +} + +func BoldConfigAddOptions(prefix string, f *flag.FlagSet) { + f.Bool(prefix+".enable", DefaultBoldConfig.Enable, "enable bold challenge protocol") + f.String(prefix+".strategy", DefaultBoldConfig.Strategy, "define the bold validator staker strategy, either watchtower, defensive, stakeLatest, or makeNodes") + f.Duration(prefix+".assertion-posting-interval", DefaultBoldConfig.AssertionPostingInterval, "assertion posting interval") + f.Duration(prefix+".assertion-scanning-interval", DefaultBoldConfig.AssertionScanningInterval, "scan assertion interval") + f.Duration(prefix+".assertion-confirming-interval", DefaultBoldConfig.AssertionConfirmingInterval, "confirm assertion interval") + f.Duration(prefix+".check-staker-switch-interval", DefaultBoldConfig.CheckStakerSwitchInterval, "how often to check if staker can switch to bold") + f.Bool(prefix+".api", DefaultBoldConfig.API, "enable api") + f.String(prefix+".api-host", DefaultBoldConfig.APIHost, "bold api host") + f.Uint16(prefix+".api-port", DefaultBoldConfig.APIPort, "bold api port") + f.String(prefix+".api-db-path", DefaultBoldConfig.APIDBPath, "bold api db path") + f.StringSlice(prefix+".track-challenge-parent-assertion-hashes", DefaultBoldConfig.TrackChallengeParentAssertionHashes, "only track challenges/edges with these parent assertion hashes") + StateProviderConfigAddOptions(prefix+".state-provider-config", f) + f.Bool(prefix+".start-validation-from-staked", DefaultBoldConfig.StartValidationFromStaked, "assume staked nodes are valid") +} + +func StateProviderConfigAddOptions(prefix string, f *flag.FlagSet) { + f.String(prefix+".validator-name", DefaultStateProviderConfig.ValidatorName, "name identifier for cosmetic purposes") + f.Bool(prefix+".check-batch-finality", DefaultStateProviderConfig.CheckBatchFinality, "check batch finality") + f.String(prefix+".machine-leaves-cache-path", DefaultStateProviderConfig.MachineLeavesCachePath, "path to machine cache") +} + +type BOLDStaker struct { + stopwaiter.StopWaiter + config *BoldConfig + chalManager *challengemanager.Manager + blockValidator *staker.BlockValidator + statelessBlockValidator *staker.StatelessBlockValidator + rollupAddress common.Address + l1Reader *headerreader.HeaderReader + client protocol.ChainBackend + callOpts bind.CallOpts + wallet legacystaker.ValidatorWalletInterface + stakedNotifiers []legacystaker.LatestStakedNotifier + confirmedNotifiers []legacystaker.LatestConfirmedNotifier +} + +func NewBOLDStaker( + ctx context.Context, + stack *node.Node, + rollupAddress common.Address, + callOpts bind.CallOpts, + txOpts *bind.TransactOpts, + l1Reader *headerreader.HeaderReader, + blockValidator *staker.BlockValidator, + statelessBlockValidator *staker.StatelessBlockValidator, + config *BoldConfig, + dataPoster *dataposter.DataPoster, + wallet legacystaker.ValidatorWalletInterface, + stakedNotifiers []legacystaker.LatestStakedNotifier, + confirmedNotifiers []legacystaker.LatestConfirmedNotifier, +) (*BOLDStaker, error) { + if err := config.Validate(); err != nil { + return nil, err + } + wrappedClient := util.NewBackendWrapper(l1Reader.Client(), rpc.LatestBlockNumber) + manager, err := newBOLDChallengeManager(ctx, stack, rollupAddress, txOpts, l1Reader, wrappedClient, blockValidator, statelessBlockValidator, config, dataPoster) + if err != nil { + return nil, err + } + return &BOLDStaker{ + config: config, + chalManager: manager, + blockValidator: blockValidator, + statelessBlockValidator: statelessBlockValidator, + rollupAddress: rollupAddress, + l1Reader: l1Reader, + client: wrappedClient, + callOpts: callOpts, + wallet: wallet, + stakedNotifiers: stakedNotifiers, + confirmedNotifiers: confirmedNotifiers, + }, nil +} + +// Initialize Updates the block validator module root. +// And updates the init state of the block validator if block validator has not started yet. +func (b *BOLDStaker) Initialize(ctx context.Context) error { + err := b.updateBlockValidatorModuleRoot(ctx) + if err != nil { + log.Warn("error updating latest wasm module root", "err", err) + } + walletAddressOrZero := b.wallet.AddressOrZero() + var stakerAddr common.Address + if b.wallet.DataPoster() != nil { + stakerAddr = b.wallet.DataPoster().Sender() + } + log.Info("running as validator", "txSender", stakerAddr, "actingAsWallet", walletAddressOrZero, "strategy", b.config.Strategy) + + if b.blockValidator != nil && b.config.StartValidationFromStaked && !b.blockValidator.Started() { + rollupUserLogic, err := boldrollup.NewRollupUserLogic(b.rollupAddress, b.client) + if err != nil { + return err + } + latestStaked, err := rollupUserLogic.LatestStakedAssertion(b.getCallOpts(ctx), walletAddressOrZero) + if err != nil { + return err + } + if latestStaked == [32]byte{} { + latestConfirmed, err := rollupUserLogic.LatestConfirmed(&bind.CallOpts{Context: ctx}) + if err != nil { + return err + } + latestStaked = latestConfirmed + } + assertion, err := readBoldAssertionCreationInfo( + ctx, + rollupUserLogic, + b.client, + b.rollupAddress, + latestStaked, + ) + if err != nil { + return err + } + afterState := protocol.GoGlobalStateFromSolidity(assertion.AfterState.GlobalState) + return b.blockValidator.InitAssumeValid(validator.GoGlobalState(afterState)) + } + return nil +} + +func (b *BOLDStaker) Start(ctxIn context.Context) { + b.StopWaiter.Start(ctxIn, b) + b.chalManager.Start(ctxIn) + b.CallIteratively(func(ctx context.Context) time.Duration { + err := b.updateBlockValidatorModuleRoot(ctx) + if err != nil { + log.Warn("error updating latest wasm module root", "err", err) + } + agreedMsgCount, agreedGlobalState, err := b.getLatestState(ctx, false) + if err != nil { + log.Error("staker: error checking latest agreed", "err", err) + } + + if agreedGlobalState != nil { + for _, notifier := range b.stakedNotifiers { + notifier.UpdateLatestStaked(agreedMsgCount, *agreedGlobalState) + } + } + confirmedMsgCount, confirmedGlobalState, err := b.getLatestState(ctx, true) + if err != nil { + log.Error("staker: error checking latest confirmed", "err", err) + } + + if confirmedGlobalState != nil { + for _, notifier := range b.confirmedNotifiers { + notifier.UpdateLatestConfirmed(confirmedMsgCount, *confirmedGlobalState) + } + } + return b.config.AssertionPostingInterval + }) +} + +func (b *BOLDStaker) getLatestState(ctx context.Context, confirmed bool) (arbutil.MessageIndex, *validator.GoGlobalState, error) { + var globalState protocol.GoGlobalState + var err error + if confirmed { + globalState, err = b.chalManager.LatestConfirmedState(ctx) + } else { + globalState, err = b.chalManager.LatestAgreedState(ctx) + } + var assertionType string + if confirmed { + assertionType = "confirmed" + } else { + assertionType = "agreed" + } + if err != nil { + return 0, nil, fmt.Errorf("error getting latest %s: %w", assertionType, err) + } + caughtUp, count, err := staker.GlobalStateToMsgCount(b.statelessBlockValidator.InboxTracker(), b.statelessBlockValidator.InboxStreamer(), validator.GoGlobalState(globalState)) + if err != nil { + if errors.Is(err, staker.ErrGlobalStateNotInChain) { + return 0, nil, fmt.Errorf("latest %s assertion of %v not yet in our node: %w", assertionType, globalState, err) + } + return 0, nil, fmt.Errorf("error getting message count: %w", err) + } + + if !caughtUp { + log.Info(fmt.Sprintf("latest %s assertion not yet in our node", assertionType), "state", globalState) + return 0, nil, nil + } + + processedCount, err := b.statelessBlockValidator.InboxStreamer().GetProcessedMessageCount() + if err != nil { + return 0, nil, err + } + + if processedCount < count { + log.Info("execution catching up to rollup", "rollupCount", count, "processedCount", processedCount) + return 0, nil, nil + } + + return count, (*validator.GoGlobalState)(&globalState), nil +} + +func (b *BOLDStaker) StopAndWait() { + b.chalManager.StopAndWait() + b.StopWaiter.StopAndWait() +} + +func (b *BOLDStaker) updateBlockValidatorModuleRoot(ctx context.Context) error { + if b.blockValidator == nil { + return nil + } + boldRollup, err := boldrollup.NewRollupUserLogic(b.rollupAddress, b.client) + if err != nil { + return err + } + moduleRoot, err := boldRollup.WasmModuleRoot(b.getCallOpts(ctx)) + if err != nil { + return err + } + return b.blockValidator.SetCurrentWasmModuleRoot(moduleRoot) +} + +func (b *BOLDStaker) getCallOpts(ctx context.Context) *bind.CallOpts { + opts := b.callOpts + opts.Context = ctx + return &opts +} + +// Sets up a BOLD challenge manager implementation by providing it with +// its necessary dependencies and configuration. The challenge manager can then be started, as it +// implements the StopWaiter pattern as part of the Nitro validator. +func newBOLDChallengeManager( + ctx context.Context, + stack *node.Node, + rollupAddress common.Address, + txOpts *bind.TransactOpts, + l1Reader *headerreader.HeaderReader, + client protocol.ChainBackend, + blockValidator *staker.BlockValidator, + statelessBlockValidator *staker.StatelessBlockValidator, + config *BoldConfig, + dataPoster *dataposter.DataPoster, +) (*challengemanager.Manager, error) { + // Initializes the BOLD contract bindings and the assertion chain abstraction. + rollupBindings, err := boldrollup.NewRollupUserLogic(rollupAddress, client) + if err != nil { + return nil, fmt.Errorf("could not create rollup bindings: %w", err) + } + chalManager, err := rollupBindings.ChallengeManager(&bind.CallOpts{}) + if err != nil { + return nil, fmt.Errorf("could not get challenge manager: %w", err) + } + chalManagerBindings, err := challengeV2gen.NewEdgeChallengeManager(chalManager, client) + if err != nil { + return nil, fmt.Errorf("could not create challenge manager bindings: %w", err) + } + assertionChain, err := solimpl.NewAssertionChain(ctx, rollupAddress, chalManager, txOpts, client, NewDataPosterTransactor(dataPoster)) + if err != nil { + return nil, fmt.Errorf("could not create assertion chain: %w", err) + } + + blockChallengeHeightBig, err := chalManagerBindings.LAYERZEROBLOCKEDGEHEIGHT(&bind.CallOpts{}) + if err != nil { + return nil, fmt.Errorf("could not get block challenge height: %w", err) + } + if !blockChallengeHeightBig.IsUint64() { + return nil, errors.New("block challenge height was not a uint64") + } + bigStepHeightBig, err := chalManagerBindings.LAYERZEROBIGSTEPEDGEHEIGHT(&bind.CallOpts{}) + if err != nil { + return nil, fmt.Errorf("could not get big step challenge height: %w", err) + } + if !bigStepHeightBig.IsUint64() { + return nil, errors.New("big step challenge height was not a uint64") + } + smallStepHeightBig, err := chalManagerBindings.LAYERZEROSMALLSTEPEDGEHEIGHT(&bind.CallOpts{}) + if err != nil { + return nil, fmt.Errorf("could not get small step challenge height: %w", err) + } + if !smallStepHeightBig.IsUint64() { + return nil, errors.New("small step challenge height was not a uint64") + } + numBigSteps, err := chalManagerBindings.NUMBIGSTEPLEVEL(&bind.CallOpts{}) + if err != nil { + return nil, fmt.Errorf("could not get number of big steps: %w", err) + } + blockChallengeLeafHeight := l2stateprovider.Height(blockChallengeHeightBig.Uint64()) + bigStepHeight := l2stateprovider.Height(bigStepHeightBig.Uint64()) + smallStepHeight := l2stateprovider.Height(smallStepHeightBig.Uint64()) + + apiDBPath := config.APIDBPath + if apiDBPath != "" { + apiDBPath = stack.ResolvePath(apiDBPath) + } + machineHashesPath := config.StateProviderConfig.MachineLeavesCachePath + if machineHashesPath != "" { + machineHashesPath = stack.ResolvePath(machineHashesPath) + } + + // Sets up the state provider interface that BOLD will use to request data such as + // execution states for assertions, history commitments for machine execution, and one step proofs. + stateProvider, err := NewBOLDStateProvider( + blockValidator, + statelessBlockValidator, + // Specify the height constants needed for the state provider. + // TODO: Fetch these from the smart contract instead. + blockChallengeLeafHeight, + &config.StateProviderConfig, + machineHashesPath, + ) + if err != nil { + return nil, fmt.Errorf("could not create state manager: %w", err) + } + providerHeights := []l2stateprovider.Height{blockChallengeLeafHeight} + for i := uint8(0); i < numBigSteps; i++ { + providerHeights = append(providerHeights, bigStepHeight) + } + providerHeights = append(providerHeights, smallStepHeight) + provider := l2stateprovider.NewHistoryCommitmentProvider( + stateProvider, + stateProvider, + stateProvider, + providerHeights, + stateProvider, + nil, // Nil API database for the history commitment provider, as it will be provided later. TODO: Improve this dependency injection. + ) + // The interval at which the challenge manager will attempt to post assertions. + postingInterval := config.AssertionPostingInterval + // The interval at which the manager will scan for newly created assertions onchain. + scanningInterval := config.AssertionScanningInterval + // The interval at which the manager will attempt to confirm assertions. + confirmingInterval := config.AssertionConfirmingInterval + + stackOpts := []challengemanager.StackOpt{ + challengemanager.StackWithName(config.StateProviderConfig.ValidatorName), + challengemanager.StackWithMode(BoldModes[config.strategy]), + challengemanager.StackWithPollingInterval(scanningInterval), + challengemanager.StackWithPostingInterval(postingInterval), + challengemanager.StackWithConfirmationInterval(confirmingInterval), + challengemanager.StackWithTrackChallengeParentAssertionHashes(config.TrackChallengeParentAssertionHashes), + challengemanager.StackWithHeaderProvider(l1Reader), + } + if config.API { + apiAddr := fmt.Sprintf("%s:%d", config.APIHost, config.APIPort) + stackOpts = append(stackOpts, challengemanager.StackWithAPIEnabled(apiAddr, apiDBPath)) + } + + manager, err := challengemanager.NewChallengeStack( + assertionChain, + provider, + stackOpts..., + ) + if err != nil { + return nil, fmt.Errorf("could not create challenge manager: %w", err) + } + return manager, nil +} + +// Read the creation info for an assertion by looking up its creation +// event from the rollup contracts. +func readBoldAssertionCreationInfo( + ctx context.Context, + rollup *boldrollup.RollupUserLogic, + client bind.ContractFilterer, + rollupAddress common.Address, + assertionHash common.Hash, +) (*protocol.AssertionCreatedInfo, error) { + var creationBlock uint64 + var topics [][]common.Hash + if assertionHash == (common.Hash{}) { + rollupDeploymentBlock, err := rollup.RollupDeploymentBlock(&bind.CallOpts{Context: ctx}) + if err != nil { + return nil, err + } + if !rollupDeploymentBlock.IsUint64() { + return nil, errors.New("rollup deployment block was not a uint64") + } + creationBlock = rollupDeploymentBlock.Uint64() + } else { + var b [32]byte + copy(b[:], assertionHash[:]) + node, err := rollup.GetAssertion(&bind.CallOpts{Context: ctx}, b) + if err != nil { + return nil, err + } + creationBlock = node.CreatedAtBlock + } + topics = [][]common.Hash{{assertionCreatedId}, {assertionHash}} + var query = ethereum.FilterQuery{ + FromBlock: new(big.Int).SetUint64(creationBlock), + ToBlock: new(big.Int).SetUint64(creationBlock), + Addresses: []common.Address{rollupAddress}, + Topics: topics, + } + logs, err := client.FilterLogs(ctx, query) + if err != nil { + return nil, err + } + if len(logs) == 0 { + return nil, errors.New("no assertion creation logs found") + } + if len(logs) > 1 { + return nil, errors.New("found multiple instances of requested node") + } + ethLog := logs[0] + parsedLog, err := rollup.ParseAssertionCreated(ethLog) + if err != nil { + return nil, err + } + afterState := parsedLog.Assertion.AfterState + return &protocol.AssertionCreatedInfo{ + ConfirmPeriodBlocks: parsedLog.ConfirmPeriodBlocks, + RequiredStake: parsedLog.RequiredStake, + ParentAssertionHash: protocol.AssertionHash{Hash: parsedLog.ParentAssertionHash}, + BeforeState: parsedLog.Assertion.BeforeState, + AfterState: afterState, + InboxMaxCount: parsedLog.InboxMaxCount, + AfterInboxBatchAcc: parsedLog.AfterInboxBatchAcc, + AssertionHash: protocol.AssertionHash{Hash: parsedLog.AssertionHash}, + WasmModuleRoot: parsedLog.WasmModuleRoot, + ChallengeManager: parsedLog.ChallengeManager, + TransactionHash: ethLog.TxHash, + CreationBlock: ethLog.BlockNumber, + }, nil +} diff --git a/staker/bold/bold_state_provider.go b/staker/bold/bold_state_provider.go new file mode 100644 index 0000000000..48b7cbd91e --- /dev/null +++ b/staker/bold/bold_state_provider.go @@ -0,0 +1,542 @@ +// Copyright 2023, Offchain Labs, Inc. +// For license information, see +// https://github.com/offchainlabs/bold/blob/main/LICENSE +package bold + +import ( + "context" + "errors" + "fmt" + "strings" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + + protocol "github.com/offchainlabs/bold/chain-abstraction" + "github.com/offchainlabs/bold/containers/option" + l2stateprovider "github.com/offchainlabs/bold/layer2-state-provider" + "github.com/offchainlabs/bold/state-commitments/history" + "github.com/offchainlabs/nitro/arbutil" + "github.com/offchainlabs/nitro/staker" + challengecache "github.com/offchainlabs/nitro/staker/challenge-cache" + "github.com/offchainlabs/nitro/validator" + "github.com/offchainlabs/nitro/validator/server_arb" +) + +var ( + _ l2stateprovider.ProofCollector = (*BOLDStateProvider)(nil) + _ l2stateprovider.L2MessageStateCollector = (*BOLDStateProvider)(nil) + _ l2stateprovider.MachineHashCollector = (*BOLDStateProvider)(nil) + _ l2stateprovider.ExecutionProvider = (*BOLDStateProvider)(nil) +) + +var executionNodeOfflineGauge = metrics.NewRegisteredGauge("arb/state_provider/execution_node_offline", nil) + +var ( + ErrChainCatchingUp = errors.New("chain catching up") +) + +type BOLDStateProvider struct { + validator *staker.BlockValidator + statelessValidator *staker.StatelessBlockValidator + historyCache challengecache.HistoryCommitmentCacher + blockChallengeLeafHeight l2stateprovider.Height + stateProviderConfig *StateProviderConfig + sync.RWMutex +} + +func NewBOLDStateProvider( + blockValidator *staker.BlockValidator, + statelessValidator *staker.StatelessBlockValidator, + blockChallengeLeafHeight l2stateprovider.Height, + stateProviderConfig *StateProviderConfig, + machineHashesCachePath string, +) (*BOLDStateProvider, error) { + historyCache, err := challengecache.New(machineHashesCachePath) + if err != nil { + return nil, err + } + sp := &BOLDStateProvider{ + validator: blockValidator, + statelessValidator: statelessValidator, + historyCache: historyCache, + blockChallengeLeafHeight: blockChallengeLeafHeight, + stateProviderConfig: stateProviderConfig, + } + return sp, nil +} + +// ExecutionStateAfterPreviousState Produces the L2 execution state for the next +// assertion. Returns the state at maxSeqInboxCount or blockChallengeLeafHeight +// after the previous state, whichever is earlier. If previousGlobalState is +// nil, defaults to returning the state at maxSeqInboxCount. +func (s *BOLDStateProvider) ExecutionStateAfterPreviousState( + ctx context.Context, + maxSeqInboxCount uint64, + previousGlobalState protocol.GoGlobalState, +) (*protocol.ExecutionState, error) { + if maxSeqInboxCount == 0 { + return nil, errors.New("max inbox count cannot be zero") + } + batchIndex := maxSeqInboxCount + maxNumberOfBlocks := uint64(s.blockChallengeLeafHeight) + messageCount, err := s.statelessValidator.InboxTracker().GetBatchMessageCount(batchIndex - 1) + if err != nil { + if strings.Contains(err.Error(), "not found") { + return nil, fmt.Errorf("%w: batch count %d", l2stateprovider.ErrChainCatchingUp, maxSeqInboxCount) + } + return nil, err + } + var previousMessageCount arbutil.MessageIndex + if previousGlobalState.Batch > 0 { + previousMessageCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(previousGlobalState.Batch - 1) + if err != nil { + if strings.Contains(err.Error(), "not found") { + return nil, fmt.Errorf("%w: batch count %d", l2stateprovider.ErrChainCatchingUp, maxSeqInboxCount) + } + return nil, err + } + } + previousMessageCount += arbutil.MessageIndex(previousGlobalState.PosInBatch) + messageDiffBetweenBatches := messageCount - previousMessageCount + maxMessageCount := previousMessageCount + arbutil.MessageIndex(maxNumberOfBlocks) + if messageDiffBetweenBatches > maxMessageCount { + messageCount = maxMessageCount + batchIndex, _, err = s.statelessValidator.InboxTracker().FindInboxBatchContainingMessage(messageCount) + if err != nil { + return nil, err + } + } + globalState, err := s.findGlobalStateFromMessageCountAndBatch(messageCount, l2stateprovider.Batch(batchIndex)) + if err != nil { + return nil, err + } + // If the state we are requested to produce is neither validated nor past + // threshold, we return ErrChainCatchingUp as an error. + stateValidatedAndMessageCountPastThreshold, err := s.isStateValidatedAndMessageCountPastThreshold(ctx, globalState, messageCount) + if err != nil { + return nil, err + } + if !stateValidatedAndMessageCountPastThreshold { + return nil, fmt.Errorf("%w: batch count %d", l2stateprovider.ErrChainCatchingUp, maxSeqInboxCount) + } + + executionState := &protocol.ExecutionState{ + GlobalState: protocol.GoGlobalState(globalState), + MachineStatus: protocol.MachineStatusFinished, + } + toBatch := executionState.GlobalState.Batch + historyCommitStates, _, err := s.StatesInBatchRange( + ctx, + previousGlobalState, + toBatch, + l2stateprovider.Height(maxNumberOfBlocks), + ) + if err != nil { + return nil, err + } + historyCommit, err := history.NewCommitment(historyCommitStates, maxNumberOfBlocks+1) + if err != nil { + return nil, err + } + executionState.EndHistoryRoot = historyCommit.Merkle + return executionState, nil +} + +func (s *BOLDStateProvider) isStateValidatedAndMessageCountPastThreshold( + ctx context.Context, gs validator.GoGlobalState, messageCount arbutil.MessageIndex, +) (bool, error) { + if s.stateProviderConfig.CheckBatchFinality { + finalizedMessageCount, err := s.statelessValidator.InboxReader().GetFinalizedMsgCount(ctx) + if err != nil { + return false, err + } + if messageCount > finalizedMessageCount { + return false, nil + } + } + if s.validator == nil { + // If we do not have a validator, we cannot check if the state is validated. + // So we assume it is validated and return true. + return true, nil + } + lastValidatedGs, err := s.validator.ReadLastValidatedInfo() + if err != nil { + return false, err + } + if lastValidatedGs == nil { + return false, ErrChainCatchingUp + } + stateValidated := gs.Batch < lastValidatedGs.GlobalState.Batch || (gs.Batch == lastValidatedGs.GlobalState.Batch && gs.PosInBatch <= lastValidatedGs.GlobalState.PosInBatch) + return stateValidated, nil +} + +func (s *BOLDStateProvider) StatesInBatchRange( + ctx context.Context, + fromState protocol.GoGlobalState, + batchLimit uint64, + toHeight l2stateprovider.Height, +) ([]common.Hash, []validator.GoGlobalState, error) { + // Check the integrity of the arguments. + if batchLimit < fromState.Batch || (batchLimit == fromState.Batch && fromState.PosInBatch > 0) { + return nil, nil, fmt.Errorf("batch limit %v cannot be less than from batch %v", batchLimit, fromState.Batch) + } + // Compute the total desired hashes from this request. + totalDesiredHashes := uint64(toHeight + 1) + machineHashes := make([]common.Hash, 0) + states := make([]validator.GoGlobalState, 0) + + var prevBatchMsgCount arbutil.MessageIndex + var err error + if fromState.Batch > 0 { + prevBatchMsgCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(fromState.Batch) - 1) + if err != nil { + return nil, nil, err + } + } + + batchNum := fromState.Batch + currBatchMsgCount, err := s.statelessValidator.InboxTracker().GetBatchMessageCount(batchNum) + if err != nil { + return nil, nil, err + } + posInBatch := fromState.PosInBatch + initialPos := prevBatchMsgCount + arbutil.MessageIndex(posInBatch) + if initialPos >= currBatchMsgCount { + return nil, nil, fmt.Errorf("initial position %v is past end of from batch %v message count %v", initialPos, batchNum, currBatchMsgCount) + } + for pos := initialPos; uint64(len(states)) < totalDesiredHashes; pos++ { + if ctx.Err() != nil { + return nil, nil, ctx.Err() + } + executionResult, err := s.statelessValidator.InboxStreamer().ResultAtCount(arbutil.MessageIndex(pos)) + if err != nil { + return nil, nil, err + } + state := validator.GoGlobalState{ + BlockHash: executionResult.BlockHash, + SendRoot: executionResult.SendRoot, + Batch: batchNum, + PosInBatch: posInBatch, + } + states = append(states, state) + machineHashes = append(machineHashes, machineHash(state)) + if batchNum >= batchLimit { + break + } + // Check if the next message is in the next batch. + if uint64(pos+1) == uint64(currBatchMsgCount) { + posInBatch = 0 + batchNum++ + // Only get the next batch metadata if it'll be needed. + // Otherwise, we might try to read too many batches, and hit an error that + // the next batch isn't found. + if uint64(len(states)) < totalDesiredHashes && batchNum < batchLimit { + currBatchMsgCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(batchNum) + if err != nil { + return nil, nil, err + } + } + } else { + posInBatch++ + } + } + return machineHashes, states, nil +} + +func machineHash(gs validator.GoGlobalState) common.Hash { + return crypto.Keccak256Hash([]byte("Machine finished:"), gs.Hash().Bytes()) +} + +func (s *BOLDStateProvider) findGlobalStateFromMessageCountAndBatch(count arbutil.MessageIndex, batchIndex l2stateprovider.Batch) (validator.GoGlobalState, error) { + var prevBatchMsgCount arbutil.MessageIndex + var err error + if batchIndex > 0 { + prevBatchMsgCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(batchIndex) - 1) + if err != nil { + return validator.GoGlobalState{}, err + } + if prevBatchMsgCount > count { + return validator.GoGlobalState{}, fmt.Errorf("bad batch %v provided for message count %v as previous batch ended at message count %v", batchIndex, count, prevBatchMsgCount) + } + } + if count != prevBatchMsgCount { + batchMsgCount, err := s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(batchIndex)) + if err != nil { + return validator.GoGlobalState{}, err + } + if count > batchMsgCount { + return validator.GoGlobalState{}, fmt.Errorf("message count %v is past end of batch %v message count %v", count, batchIndex, batchMsgCount) + } + } + res, err := s.statelessValidator.InboxStreamer().ResultAtCount(count) + if err != nil { + return validator.GoGlobalState{}, fmt.Errorf("%s: could not check if we have result at count %d: %w", s.stateProviderConfig.ValidatorName, count, err) + } + return validator.GoGlobalState{ + BlockHash: res.BlockHash, + SendRoot: res.SendRoot, + Batch: uint64(batchIndex), + PosInBatch: uint64(count - prevBatchMsgCount), + }, nil +} + +// L2MessageStatesUpTo Computes a block history commitment from a start L2 +// message to an end L2 message index and up to a required batch index. The +// hashes used for this commitment are the machine hashes at each message +// number. +func (s *BOLDStateProvider) L2MessageStatesUpTo( + ctx context.Context, + fromState protocol.GoGlobalState, + batchLimit l2stateprovider.Batch, + toHeight option.Option[l2stateprovider.Height], +) ([]common.Hash, error) { + var to l2stateprovider.Height + if !toHeight.IsNone() { + to = toHeight.Unwrap() + } else { + to = s.blockChallengeLeafHeight + } + items, _, err := s.StatesInBatchRange(ctx, fromState, uint64(batchLimit), to) + if err != nil { + return nil, err + } + return items, nil +} + +// CollectMachineHashes Collects a list of machine hashes at a message number +// based on some configuration parameters. +func (s *BOLDStateProvider) CollectMachineHashes( + ctx context.Context, cfg *l2stateprovider.HashCollectorConfig, +) ([]common.Hash, error) { + s.Lock() + defer s.Unlock() + batchLimit := cfg.AssertionMetadata.BatchLimit + messageNum, err := s.messageNum(cfg.AssertionMetadata, cfg.BlockChallengeHeight) + if err != nil { + return nil, err + } + // Check if we have a virtual global state. + vs, err := s.virtualState(messageNum, batchLimit) + if err != nil { + return nil, err + } + if vs.IsSome() { + m := server_arb.NewFinishedMachine(vs.Unwrap()) + defer m.Destroy() + return []common.Hash{m.Hash()}, nil + } + stepHeights := make([]uint64, len(cfg.StepHeights)) + for i, h := range cfg.StepHeights { + stepHeights[i] = uint64(h) + } + messageResult, err := s.statelessValidator.InboxStreamer().ResultAtCount(arbutil.MessageIndex(messageNum + 1)) + if err != nil { + return nil, err + } + cacheKey := &challengecache.Key{ + RollupBlockHash: messageResult.BlockHash, + WavmModuleRoot: cfg.AssertionMetadata.WasmModuleRoot, + MessageHeight: uint64(messageNum), + StepHeights: stepHeights, + } + if s.historyCache != nil { + cachedRoots, err := s.historyCache.Get(cacheKey, cfg.NumDesiredHashes) + switch { + case err == nil: + log.Info( + "In collect machine hashes", + "cfg", fmt.Sprintf("%+v", cfg), + "firstHash", fmt.Sprintf("%#x", cachedRoots[0]), + "lastHash", fmt.Sprintf("%#x", cachedRoots[len(cachedRoots)-1]), + ) + return cachedRoots, nil + case !errors.Is(err, challengecache.ErrNotFoundInCache): + return nil, err + } + } + entry, err := s.statelessValidator.CreateReadyValidationEntry(ctx, messageNum) + if err != nil { + return nil, err + } + input, err := entry.ToInput([]ethdb.WasmTarget{rawdb.TargetWavm}) + if err != nil { + return nil, err + } + // TODO: Enable Redis streams. + wasmModRoot := cfg.AssertionMetadata.WasmModuleRoot + execRun, err := s.statelessValidator.ExecutionSpawners()[0].CreateExecutionRun(wasmModRoot, input, true).Await(ctx) + if err != nil { + return nil, err + } + defer execRun.Close() + ctxCheckAlive, cancelCheckAlive := ctxWithCheckAlive(ctx, execRun) + defer cancelCheckAlive() + stepLeaves := execRun.GetMachineHashesWithStepSize(uint64(cfg.MachineStartIndex), uint64(cfg.StepSize), cfg.NumDesiredHashes) + result, err := stepLeaves.Await(ctxCheckAlive) + if err != nil { + return nil, err + } + log.Info(fmt.Sprintf("Finished gathering machine hashes for request %+v", cfg)) + // Do not save a history commitment of length 1 to the cache. + if len(result) > 1 && s.historyCache != nil { + if err := s.historyCache.Put(cacheKey, result); err != nil { + if !errors.Is(err, challengecache.ErrFileAlreadyExists) { + return nil, err + } + } + } + return result, nil +} + +// messageNum returns the message number at which the BoLD protocol should +// process machine hashes based on the AssociatedAssertionMetadata and +// chalHeight. +func (s *BOLDStateProvider) messageNum(md *l2stateprovider.AssociatedAssertionMetadata, chalHeight l2stateprovider.Height) (arbutil.MessageIndex, error) { + var prevBatchMsgCount arbutil.MessageIndex + bNum := md.FromState.Batch + posInBatch := md.FromState.PosInBatch + if bNum > 0 { + var err error + prevBatchMsgCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(bNum - 1)) + if err != nil { + return 0, fmt.Errorf("could not get prevBatchMsgCount at %d: %w", bNum-1, err) + } + } + return prevBatchMsgCount + arbutil.MessageIndex(posInBatch) + arbutil.MessageIndex(chalHeight), nil +} + +// virtualState returns an optional global state. +// +// If messageNum is a virtual block or the last real block to which this +// validator's assertion committed, then this function retuns a global state +// representing that virtual block's finished machine. Otherwise, it returns +// an Option.None. +// +// This can happen in the BoLD protocol when the rival block-level challenge +// edge has committed to more blocks that this validator expected for the +// current batch. In that case, the chalHeight will be a block in the virtual +// padding of the history commitment of this validator. +// +// If there is an Option.Some() retrun value, it means that callers don't need +// to actually step through a machine to produce a series of hashes, because all +// of the hashes can just be "virtual" copies of a single machine in the +// FINISHED state's hash. +func (s *BOLDStateProvider) virtualState(msgNum arbutil.MessageIndex, limit l2stateprovider.Batch) (option.Option[validator.GoGlobalState], error) { + gs := option.None[validator.GoGlobalState]() + limitMsgCount, err := s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(limit) - 1) + if err != nil { + return gs, fmt.Errorf("could not get limitMsgCount at %d: %w", limit, err) + } + if msgNum >= limitMsgCount { + result, err := s.statelessValidator.InboxStreamer().ResultAtCount(arbutil.MessageIndex(limitMsgCount)) + if err != nil { + return gs, fmt.Errorf("could not get global state at limitMsgCount %d: %w", limitMsgCount, err) + } + gs = option.Some(validator.GoGlobalState{ + BlockHash: result.BlockHash, + SendRoot: result.SendRoot, + Batch: uint64(limit), + PosInBatch: 0, + }) + } + return gs, nil +} + +// CtxWithCheckAlive Creates a context with a check alive routine that will +// cancel the context if the check alive routine fails. +func ctxWithCheckAlive(ctxIn context.Context, execRun validator.ExecutionRun) (context.Context, context.CancelFunc) { + // Create a context that will cancel if the check alive routine fails. + // This is to ensure that we do not have the validator froze indefinitely if + // the execution run is no longer alive. + ctx, cancel := context.WithCancel(ctxIn) + go func() { + // Call cancel so that the calling function is canceled if the check alive + // routine fails/returns. + defer cancel() + ticker := time.NewTicker(10 * time.Second) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + // Create a context with a timeout, so that the check alive routine does + // not run indefinitely. + ctxCheckAliveWithTimeout, cancelCheckAliveWithTimeout := context.WithTimeout(ctx, 5*time.Second) + err := execRun.CheckAlive(ctxCheckAliveWithTimeout) + if err != nil { + executionNodeOfflineGauge.Inc(1) + cancelCheckAliveWithTimeout() + return + } + cancelCheckAliveWithTimeout() + } + } + }() + return ctx, cancel +} + +// CollectProof collects a one-step proof at a message number and OpcodeIndex. +func (s *BOLDStateProvider) CollectProof( + ctx context.Context, + assertionMetadata *l2stateprovider.AssociatedAssertionMetadata, + blockChallengeHeight l2stateprovider.Height, + machineIndex l2stateprovider.OpcodeIndex, +) ([]byte, error) { + messageNum, err := s.messageNum(assertionMetadata, blockChallengeHeight) + if err != nil { + return nil, err + } + // Check if we have a virtual global state. + vs, err := s.virtualState(messageNum, assertionMetadata.BatchLimit) + if err != nil { + return nil, err + } + if vs.IsSome() { + m := server_arb.NewFinishedMachine(vs.Unwrap()) + defer m.Destroy() + log.Info( + "Getting machine OSP from virtual state", + "fromBatch", assertionMetadata.FromState.Batch, + "fromPosInBatch", assertionMetadata.FromState.PosInBatch, + "blockChallengeHeight", blockChallengeHeight, + "messageNum", messageNum, + "machineIndex", machineIndex, + ) + return m.ProveNextStep(), nil + } + entry, err := s.statelessValidator.CreateReadyValidationEntry(ctx, messageNum) + if err != nil { + return nil, err + } + input, err := entry.ToInput([]ethdb.WasmTarget{rawdb.TargetWavm}) + if err != nil { + return nil, err + } + log.Info( + "Getting machine OSP", + "fromBatch", assertionMetadata.FromState.Batch, + "fromPosInBatch", assertionMetadata.FromState.PosInBatch, + "blockChallengeHeight", blockChallengeHeight, + "messageNum", messageNum, + "machineIndex", machineIndex, + "startState", fmt.Sprintf("%+v", input.StartState), + ) + wasmModRoot := assertionMetadata.WasmModuleRoot + execRun, err := s.statelessValidator.ExecutionSpawners()[0].CreateExecutionRun(wasmModRoot, input, true).Await(ctx) + if err != nil { + return nil, err + } + defer execRun.Close() + ctxCheckAlive, cancelCheckAlive := ctxWithCheckAlive(ctx, execRun) + defer cancelCheckAlive() + oneStepProofPromise := execRun.GetProofAt(uint64(machineIndex)) + return oneStepProofPromise.Await(ctxCheckAlive) +} diff --git a/staker/bold/data_poster_transactor.go b/staker/bold/data_poster_transactor.go new file mode 100644 index 0000000000..aa5f8d9768 --- /dev/null +++ b/staker/bold/data_poster_transactor.go @@ -0,0 +1,44 @@ +// Copyright 2023-2024, Offchain Labs, Inc. +// For license information, see https://github.com/offchainlabs/nitro/blob/main/LICENSE +package bold + +import ( + "context" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/core/types" + + solimpl "github.com/offchainlabs/bold/chain-abstraction/sol-implementation" + "github.com/offchainlabs/nitro/arbnode/dataposter" +) + +// DataPosterTransactor is a wrapper around a DataPoster that implements the Transactor interface. +type DataPosterTransactor struct { + fifo *solimpl.FIFO + *dataposter.DataPoster +} + +func NewDataPosterTransactor(dataPoster *dataposter.DataPoster) *DataPosterTransactor { + return &DataPosterTransactor{ + fifo: solimpl.NewFIFO(1000), + DataPoster: dataPoster, + } +} + +func (d *DataPosterTransactor) SendTransaction(ctx context.Context, fn func(opts *bind.TransactOpts) (*types.Transaction, error), opts *bind.TransactOpts, gas uint64) (*types.Transaction, error) { + // Try to acquire lock and if it fails, wait for a bit and try again. + for !d.fifo.Lock() { + select { + case <-time.After(100 * time.Millisecond): + case <-ctx.Done(): + return nil, ctx.Err() + } + } + defer d.fifo.Unlock() + tx, err := fn(opts) + if err != nil { + return nil, err + } + return d.PostSimpleTransaction(ctx, *tx.To(), tx.Data(), gas, tx.Value()) +} diff --git a/staker/challenge-cache/cache.go b/staker/challenge-cache/cache.go index 5dca2764e8..98310c742a 100644 --- a/staker/challenge-cache/cache.go +++ b/staker/challenge-cache/cache.go @@ -79,29 +79,21 @@ type Cache struct { // New cache from a base directory path. func New(baseDir string) (*Cache, error) { - return &Cache{ - baseDir: baseDir, - tempWritesDir: "", - }, nil -} - -// Init a cache by verifying its base directory exists. -func (c *Cache) Init(_ context.Context) error { - if _, err := os.Stat(c.baseDir); err != nil { - if err := os.MkdirAll(c.baseDir, os.ModePerm); err != nil { - return fmt.Errorf("could not make initialize challenge cache directory %s: %w", c.baseDir, err) - } + if err := os.MkdirAll(baseDir, os.ModePerm); err != nil { + return nil, err } // We create a temp directory to write our hashes to first when putting to the cache. // Once writing succeeds, we rename in an atomic operation to the correct file name // in the cache directory hierarchy in the `Put` function. All of these temporary writes // will occur in a subdir of the base directory called temp. - tempWritesDir, err := os.MkdirTemp(c.baseDir, "temp") + tempWritesDir, err := os.MkdirTemp(baseDir, "temp") if err != nil { - return err + return nil, err } - c.tempWritesDir = tempWritesDir - return nil + return &Cache{ + baseDir: baseDir, + tempWritesDir: tempWritesDir, + }, nil } // Get a list of hashes from the cache from index 0 up to a certain index. Hashes are saved as files in the directory @@ -217,11 +209,11 @@ func (c *Cache) Prune(ctx context.Context, messageNumber uint64) error { } // Reads 32 bytes at a time from a reader up to a specified height. If none, then read all. -func readHashes(r io.Reader, numToRead uint64) ([]common.Hash, error) { +func readHashes(r io.Reader, toReadLimit uint64) ([]common.Hash, error) { br := bufio.NewReader(r) hashes := make([]common.Hash, 0) buf := make([]byte, 0, common.HashLength) - for totalRead := uint64(0); totalRead < numToRead; totalRead++ { + for totalRead := uint64(0); totalRead < toReadLimit; totalRead++ { n, err := br.Read(buf[:cap(buf)]) if err != nil { // If we try to read but reach EOF, we break out of the loop. @@ -236,13 +228,6 @@ func readHashes(r io.Reader, numToRead uint64) ([]common.Hash, error) { } hashes = append(hashes, common.BytesToHash(buf)) } - if numToRead > uint64(len(hashes)) { - return nil, fmt.Errorf( - "wanted to read %d hashes, but only read %d hashes", - numToRead, - len(hashes), - ) - } return hashes, nil } diff --git a/staker/challenge-cache/cache_test.go b/staker/challenge-cache/cache_test.go index 40be627b7a..4328ceee12 100644 --- a/staker/challenge-cache/cache_test.go +++ b/staker/challenge-cache/cache_test.go @@ -18,8 +18,6 @@ import ( var _ HistoryCommitmentCacher = (*Cache)(nil) func TestCache(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() basePath := t.TempDir() if err := os.MkdirAll(basePath, os.ModePerm); err != nil { t.Fatal(err) @@ -28,9 +26,6 @@ func TestCache(t *testing.T) { if err != nil { t.Fatal(err) } - if err = cache.Init(ctx); err != nil { - t.Fatal(err) - } key := &Key{ WavmModuleRoot: common.BytesToHash([]byte("foo")), MessageHeight: 0, @@ -81,9 +76,6 @@ func TestPrune(t *testing.T) { if err != nil { t.Fatal(err) } - if err = cache.Init(ctx); err != nil { - t.Fatal(err) - } key := &Key{ WavmModuleRoot: common.BytesToHash([]byte("foo")), MessageHeight: 20, @@ -212,16 +204,6 @@ func TestPrune(t *testing.T) { } func TestReadWriteStatehashes(t *testing.T) { - t.Run("read up to, but had empty reader", func(t *testing.T) { - b := bytes.NewBuffer([]byte{}) - _, err := readHashes(b, 100) - if err == nil { - t.Fatal("Wanted error") - } - if !strings.Contains(err.Error(), "only read 0 hashes") { - t.Fatal("Unexpected error") - } - }) t.Run("read single root", func(t *testing.T) { b := bytes.NewBuffer([]byte{}) want := common.BytesToHash([]byte("foo")) @@ -324,20 +306,20 @@ func Test_readHashes(t *testing.T) { t.Fatalf("Unexpected error: %v", err) } }) - t.Run("EOF, but did not read as much as was expected", func(t *testing.T) { + t.Run("EOF, but did not read as much as was possible", func(t *testing.T) { want := []common.Hash{ common.BytesToHash([]byte("foo")), common.BytesToHash([]byte("bar")), common.BytesToHash([]byte("baz")), } - m := &mockReader{wantErr: true, hashes: want, err: io.EOF} - _, err := readHashes(m, 100) - if err == nil { - t.Fatal(err) - } - if !strings.Contains(err.Error(), "wanted to read 100") { + m := &mockReader{wantErr: false, hashes: want, bytesRead: 32} + hashes, err := readHashes(m, 100) + if err != nil { t.Fatalf("Unexpected error: %v", err) } + if len(hashes) != len(want) { + t.Fatalf("Wrong number of hashes. Expected %d, got %d", len(want), len(hashes)) + } }) t.Run("Reads wrong number of bytes", func(t *testing.T) { want := []common.Hash{ @@ -424,8 +406,6 @@ func Test_determineFilePath(t *testing.T) { } func BenchmarkCache_Read_32Mb(b *testing.B) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() b.StopTimer() basePath := os.TempDir() if err := os.MkdirAll(basePath, os.ModePerm); err != nil { @@ -435,9 +415,6 @@ func BenchmarkCache_Read_32Mb(b *testing.B) { if err != nil { b.Fatal(err) } - if err = cache.Init(ctx); err != nil { - b.Fatal(err) - } key := &Key{ WavmModuleRoot: common.BytesToHash([]byte("foo")), MessageHeight: 0, diff --git a/staker/execution_challenge_bakend.go b/staker/execution_challenge_bakend.go index 8ab60efced..6616d8f8c1 100644 --- a/staker/execution_challenge_bakend.go +++ b/staker/execution_challenge_bakend.go @@ -7,6 +7,7 @@ import ( "context" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/validator" ) diff --git a/staker/block_challenge_backend.go b/staker/legacy/block_challenge_backend.go similarity index 96% rename from staker/block_challenge_backend.go rename to staker/legacy/block_challenge_backend.go index 0dd89865bd..969c482586 100644 --- a/staker/block_challenge_backend.go +++ b/staker/legacy/block_challenge_backend.go @@ -1,7 +1,7 @@ // Copyright 2021-2022, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -package staker +package legacystaker import ( "context" @@ -13,19 +13,21 @@ import ( "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/solgen/go/challengegen" + "github.com/offchainlabs/nitro/staker" "github.com/offchainlabs/nitro/validator" ) type BlockChallengeBackend struct { - streamer TransactionStreamerInterface + streamer staker.TransactionStreamerInterface startMsgCount arbutil.MessageIndex startPosition uint64 endPosition uint64 startGs validator.GoGlobalState endGs validator.GoGlobalState - inboxTracker InboxTrackerInterface + inboxTracker staker.InboxTrackerInterface tooFarStartsAtPosition uint64 } @@ -35,8 +37,8 @@ var _ ChallengeBackend = (*BlockChallengeBackend)(nil) func NewBlockChallengeBackend( initialState *challengegen.ChallengeManagerInitiatedChallenge, maxBatchesRead uint64, - streamer TransactionStreamerInterface, - inboxTracker InboxTrackerInterface, + streamer staker.TransactionStreamerInterface, + inboxTracker staker.InboxTrackerInterface, ) (*BlockChallengeBackend, error) { startGs := validator.GoGlobalStateFromSolidity(initialState.StartState) diff --git a/staker/challenge_manager.go b/staker/legacy/challenge_manager.go similarity index 97% rename from staker/challenge_manager.go rename to staker/legacy/challenge_manager.go index 27cb92a5c7..1aa13a9e05 100644 --- a/staker/challenge_manager.go +++ b/staker/legacy/challenge_manager.go @@ -1,7 +1,7 @@ // Copyright 2021-2022, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -package staker +package legacystaker import ( "context" @@ -10,7 +10,7 @@ import ( "fmt" "math/big" - "github.com/ethereum/go-ethereum" + ethereum "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" @@ -19,8 +19,10 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/solgen/go/challengegen" + "github.com/offchainlabs/nitro/staker" "github.com/offchainlabs/nitro/validator" ) @@ -48,7 +50,7 @@ type ChallengeBackend interface { } // Assert that ExecutionChallengeBackend implements ChallengeBackend -var _ ChallengeBackend = (*ExecutionChallengeBackend)(nil) +var _ ChallengeBackend = (*staker.ExecutionChallengeBackend)(nil) type challengeCore struct { con *challengegen.ChallengeManager @@ -69,13 +71,13 @@ type ChallengeManager struct { blockChallengeBackend *BlockChallengeBackend // fields below are only used to create execution challenge from block challenge - validator *StatelessBlockValidator + validator *staker.StatelessBlockValidator maxBatchesRead uint64 wasmModuleRoot common.Hash // these fields are empty until working on execution challenge initialMachineMessageCount arbutil.MessageIndex - executionChallengeBackend *ExecutionChallengeBackend + executionChallengeBackend *staker.ExecutionChallengeBackend machineFinalStepCount uint64 } @@ -88,7 +90,7 @@ func NewChallengeManager( fromAddr common.Address, challengeManagerAddr common.Address, challengeIndex uint64, - val *StatelessBlockValidator, + val *staker.StatelessBlockValidator, startL1Block uint64, confirmationBlocks int64, ) (*ChallengeManager, error) { @@ -128,8 +130,8 @@ func NewChallengeManager( backend, err := NewBlockChallengeBackend( parsedLog, challengeInfo.MaxInboxMessages, - val.streamer, - val.inboxTracker, + val.InboxStreamer(), + val.InboxTracker(), ) if err != nil { return nil, fmt.Errorf("error creating block challenge backend for challenge %v: %w", challengeIndex, err) @@ -166,7 +168,7 @@ func NewExecutionChallengeManager( if err != nil { return nil, err } - backend, err := NewExecutionChallengeBackend(exec) + backend, err := staker.NewExecutionChallengeBackend(exec) if err != nil { return nil, err } @@ -481,9 +483,9 @@ func (m *ChallengeManager) createExecutionBackend(ctx context.Context, step uint } input.BatchInfo = prunedBatches var execRun validator.ExecutionRun - for _, spawner := range m.validator.execSpawners { + for _, spawner := range m.validator.ExecutionSpawners() { if validator.SpawnerSupportsModule(spawner, m.wasmModuleRoot) { - execRun, err = spawner.CreateExecutionRun(m.wasmModuleRoot, input).Await(ctx) + execRun, err = spawner.CreateExecutionRun(m.wasmModuleRoot, input, false).Await(ctx) if err != nil { return fmt.Errorf("error creating execution backend for msg %v: %w", initialCount, err) } @@ -493,7 +495,7 @@ func (m *ChallengeManager) createExecutionBackend(ctx context.Context, step uint if execRun == nil { return fmt.Errorf("did not find valid execution backend") } - backend, err := NewExecutionChallengeBackend(execRun) + backend, err := staker.NewExecutionChallengeBackend(execRun) if err != nil { return err } diff --git a/staker/challenge_test.go b/staker/legacy/challenge_test.go similarity index 93% rename from staker/challenge_test.go rename to staker/legacy/challenge_test.go index 33f1644c63..a34e4e885d 100644 --- a/staker/challenge_test.go +++ b/staker/legacy/challenge_test.go @@ -1,7 +1,7 @@ // Copyright 2021-2022, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -package staker +package legacystaker import ( "context" @@ -17,9 +17,10 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/ospgen" "github.com/offchainlabs/nitro/validator" @@ -97,12 +98,12 @@ func createTransactOpts(t *testing.T) *bind.TransactOpts { return opts } -func createGenesisAlloc(accts ...*bind.TransactOpts) core.GenesisAlloc { - alloc := make(core.GenesisAlloc) +func createGenesisAlloc(accts ...*bind.TransactOpts) types.GenesisAlloc { + alloc := make(types.GenesisAlloc) amount := big.NewInt(10) amount.Exp(amount, big.NewInt(20), nil) for _, opts := range accts { - alloc[opts.From] = core.GenesisAccount{ + alloc[opts.From] = types.Account{ Balance: new(big.Int).Set(amount), } } @@ -241,7 +242,7 @@ func runChallengeTest( func createBaseMachine(t *testing.T, wasmname string, wasmModules []string) *server_arb.ArbitratorMachine { _, filename, _, _ := runtime.Caller(0) - wasmDir := path.Join(path.Dir(filename), "../arbitrator/prover/test-cases/") + wasmDir := path.Join(path.Dir(filename), "../../arbitrator/prover/test-cases/") wasmPath := path.Join(wasmDir, wasmname) @@ -258,31 +259,31 @@ func createBaseMachine(t *testing.T, wasmname string, wasmModules []string) *ser func TestChallengeToOSP(t *testing.T) { machine := createBaseMachine(t, "global-state.wasm", []string{"global-state-wrapper.wasm"}) - IncorrectMachine := server_arb.NewIncorrectMachine(machine, 200) + IncorrectMachine := NewIncorrectMachine(machine, 200) runChallengeTest(t, machine, IncorrectMachine, false, false, 0) } func TestChallengeToFailedOSP(t *testing.T) { machine := createBaseMachine(t, "global-state.wasm", []string{"global-state-wrapper.wasm"}) - IncorrectMachine := server_arb.NewIncorrectMachine(machine, 200) + IncorrectMachine := NewIncorrectMachine(machine, 200) runChallengeTest(t, machine, IncorrectMachine, true, false, 0) } func TestChallengeToErroredOSP(t *testing.T) { machine := createBaseMachine(t, "const.wasm", nil) - IncorrectMachine := server_arb.NewIncorrectMachine(machine, 10) + IncorrectMachine := NewIncorrectMachine(machine, 10) runChallengeTest(t, machine, IncorrectMachine, false, false, 0) } func TestChallengeToFailedErroredOSP(t *testing.T) { machine := createBaseMachine(t, "const.wasm", nil) - IncorrectMachine := server_arb.NewIncorrectMachine(machine, 10) + IncorrectMachine := NewIncorrectMachine(machine, 10) runChallengeTest(t, machine, IncorrectMachine, true, false, 0) } func TestChallengeToTimeout(t *testing.T) { machine := createBaseMachine(t, "global-state.wasm", []string{"global-state-wrapper.wasm"}) - IncorrectMachine := server_arb.NewIncorrectMachine(machine, 200) + IncorrectMachine := NewIncorrectMachine(machine, 200) runChallengeTest(t, machine, IncorrectMachine, false, true, 0) } diff --git a/staker/common_test.go b/staker/legacy/common_test.go similarity index 95% rename from staker/common_test.go rename to staker/legacy/common_test.go index eec6882fde..06ebeeffa3 100644 --- a/staker/common_test.go +++ b/staker/legacy/common_test.go @@ -1,7 +1,7 @@ // Copyright 2021-2022, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -package staker +package legacystaker import ( "testing" diff --git a/staker/fast_confirm.go b/staker/legacy/fast_confirm.go similarity index 94% rename from staker/fast_confirm.go rename to staker/legacy/fast_confirm.go index 5dc7f01205..13ce32b849 100644 --- a/staker/fast_confirm.go +++ b/staker/legacy/fast_confirm.go @@ -1,7 +1,7 @@ // Copyright 2023-2024, Offchain Labs, Inc. // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE -package staker +package legacystaker import ( "context" @@ -46,7 +46,7 @@ func NewFastConfirmSafe( gasRefunder: gasRefunder, l1Reader: l1Reader, } - safe, err := contractsgen.NewSafe(fastConfirmSafeAddress, builder) + safe, err := contractsgen.NewSafe(fastConfirmSafeAddress, wallet.L1Client()) if err != nil { return nil, err } @@ -127,11 +127,7 @@ func (f *FastConfirmSafe) tryFastConfirmation(ctx context.Context, blockHash com } log.Info("Approving Safe tx hash to fast confirm", "safeHash", safeTxHash, "nodeHash", nodeHash) - auth, err := f.builder.Auth(ctx) - if err != nil { - return err - } - _, err = f.safe.ApproveHash(auth, safeTxHash) + _, err = f.safe.ApproveHash(f.builder.Auth(ctx), safeTxHash) if err != nil { return err } @@ -160,7 +156,7 @@ func (f *FastConfirmSafe) tryFastConfirmation(ctx context.Context, blockHash com } func (f *FastConfirmSafe) flushTransactions(ctx context.Context) error { - arbTx, err := f.wallet.ExecuteTransactions(ctx, f.builder, f.gasRefunder) + arbTx, err := f.builder.ExecuteTransactions(ctx) if err != nil { return err } @@ -172,7 +168,6 @@ func (f *FastConfirmSafe) flushTransactions(ctx context.Context) error { return fmt.Errorf("error waiting for tx receipt: %w", err) } } - f.builder.ClearTransactions() return nil } @@ -229,13 +224,9 @@ func (f *FastConfirmSafe) checkApprovedHashAndExecTransaction(ctx context.Contex } } if approvedHashCount >= f.threshold { - auth, err := f.builder.Auth(ctx) - if err != nil { - return false, err - } log.Info("Executing Safe tx to fast confirm", "safeHash", safeTxHash) - _, err = f.safe.ExecTransaction( - auth, + _, err := f.safe.ExecTransaction( + f.builder.Auth(ctx), f.wallet.RollupAddress(), big.NewInt(0), fastConfirmCallData, diff --git a/staker/l1_validator.go b/staker/legacy/l1_validator.go similarity index 90% rename from staker/l1_validator.go rename to staker/legacy/l1_validator.go index 5b0c211324..f88ab93d0e 100644 --- a/staker/l1_validator.go +++ b/staker/legacy/l1_validator.go @@ -1,7 +1,7 @@ // Copyright 2021-2022, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -package staker +package legacystaker import ( "context" @@ -10,19 +10,20 @@ import ( "math/big" "time" - "github.com/offchainlabs/nitro/staker/txbuilder" - "github.com/offchainlabs/nitro/util/arbmath" - "github.com/offchainlabs/nitro/util/headerreader" - "github.com/offchainlabs/nitro/validator" - "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/solgen/go/rollupgen" + "github.com/offchainlabs/nitro/staker" + "github.com/offchainlabs/nitro/staker/txbuilder" + "github.com/offchainlabs/nitro/util/arbmath" + "github.com/offchainlabs/nitro/util/headerreader" + "github.com/offchainlabs/nitro/validator" ) type ConfirmType uint8 @@ -43,7 +44,7 @@ const ( ) type L1Validator struct { - rollup *RollupWatcher + rollup *staker.RollupWatcher rollupAddress common.Address validatorUtils *rollupgen.ValidatorUtils client *ethclient.Client @@ -51,9 +52,9 @@ type L1Validator struct { wallet ValidatorWalletInterface callOpts bind.CallOpts - inboxTracker InboxTrackerInterface - txStreamer TransactionStreamerInterface - blockValidator *BlockValidator + inboxTracker staker.InboxTrackerInterface + txStreamer staker.TransactionStreamerInterface + blockValidator *staker.BlockValidator lastWasmModuleRoot common.Hash } @@ -61,16 +62,17 @@ func NewL1Validator( client *ethclient.Client, wallet ValidatorWalletInterface, validatorUtilsAddress common.Address, + gasRefunder common.Address, callOpts bind.CallOpts, - inboxTracker InboxTrackerInterface, - txStreamer TransactionStreamerInterface, - blockValidator *BlockValidator, + inboxTracker staker.InboxTrackerInterface, + txStreamer staker.TransactionStreamerInterface, + blockValidator *staker.BlockValidator, ) (*L1Validator, error) { - builder, err := txbuilder.NewBuilder(wallet) + builder, err := txbuilder.NewBuilder(wallet, gasRefunder) if err != nil { return nil, err } - rollup, err := NewRollupWatcher(wallet.RollupAddress(), builder, callOpts) + rollup, err := staker.NewRollupWatcher(wallet.RollupAddress(), wallet.L1Client(), callOpts) if err != nil { return nil, err } @@ -102,8 +104,7 @@ func (v *L1Validator) getCallOpts(ctx context.Context) *bind.CallOpts { } func (v *L1Validator) Initialize(ctx context.Context) error { - err := v.rollup.Initialize(ctx) - if err != nil { + if err := v.rollup.Initialize(ctx); err != nil { return err } return v.updateBlockValidatorModuleRoot(ctx) @@ -141,7 +142,7 @@ func (v *L1Validator) resolveTimedOutChallenges(ctx context.Context) (*types.Tra return v.wallet.TimeoutChallenges(ctx, challengesToEliminate) } -func (v *L1Validator) resolveNextNode(ctx context.Context, info *StakerInfo, latestConfirmedNode *uint64) (bool, error) { +func (v *L1Validator) resolveNextNode(ctx context.Context, info *staker.StakerInfo, latestConfirmedNode *uint64) (bool, error) { callOpts := v.getCallOpts(ctx) confirmType, err := v.validatorUtils.CheckDecidableNextNode(callOpts, v.rollupAddress) if err != nil { @@ -159,11 +160,7 @@ func (v *L1Validator) resolveNextNode(ctx context.Context, info *StakerInfo, lat return false, nil } log.Warn("rejecting node", "node", unresolvedNodeIndex) - auth, err := v.builder.Auth(ctx) - if err != nil { - return false, err - } - _, err = v.rollup.RejectNextNode(auth, *addr) + _, err = v.rollup.RejectNextNode(v.builder.Auth(ctx), *addr) return true, err case CONFIRM_TYPE_VALID: nodeInfo, err := v.rollup.LookupNode(ctx, unresolvedNodeIndex) @@ -172,11 +169,7 @@ func (v *L1Validator) resolveNextNode(ctx context.Context, info *StakerInfo, lat } afterGs := nodeInfo.AfterState().GlobalState log.Info("confirming node", "node", unresolvedNodeIndex) - auth, err := v.builder.Auth(ctx) - if err != nil { - return false, err - } - _, err = v.rollup.ConfirmNextNode(auth, afterGs.BlockHash, afterGs.SendRoot) + _, err = v.rollup.ConfirmNextNode(v.builder.Auth(ctx), afterGs.BlockHash, afterGs.SendRoot) if err != nil { return false, err } @@ -205,7 +198,7 @@ func (v *L1Validator) isRequiredStakeElevated(ctx context.Context) (bool, error) } type createNodeAction struct { - assertion *Assertion + assertion *staker.Assertion prevInboxMaxCount *big.Int hash common.Hash } @@ -222,7 +215,7 @@ type OurStakerInfo struct { LatestStakedNodeHash common.Hash CanProgress bool StakeExists bool - *StakerInfo + *staker.StakerInfo } func (v *L1Validator) generateNodeAction( @@ -266,16 +259,16 @@ func (v *L1Validator) generateNodeAction( return nil, false, nil } - caughtUp, startCount, err := GlobalStateToMsgCount(v.inboxTracker, v.txStreamer, startState.GlobalState) + caughtUp, startCount, err := staker.GlobalStateToMsgCount(v.inboxTracker, v.txStreamer, startState.GlobalState) if err != nil { return nil, false, fmt.Errorf("start state not in chain: %w", err) } if !caughtUp { - target := GlobalStatePosition{ + target := staker.GlobalStatePosition{ BatchNumber: startState.GlobalState.Batch, PosInBatch: startState.GlobalState.PosInBatch, } - var current GlobalStatePosition + var current staker.GlobalStatePosition head, err := v.txStreamer.GetProcessedMessageCount() if err != nil { _, current, err = v.blockValidator.GlobalStatePositionsAtCount(head) @@ -296,7 +289,7 @@ func (v *L1Validator) generateNodeAction( return nil, false, err } validatedGlobalState = valInfo.GlobalState - caughtUp, validatedCount, err = GlobalStateToMsgCount( + caughtUp, validatedCount, err = staker.GlobalStateToMsgCount( v.inboxTracker, v.txStreamer, valInfo.GlobalState, ) if err != nil { @@ -355,11 +348,11 @@ func (v *L1Validator) generateNodeAction( if err != nil { return nil, false, err } - _, gsPos, err := GlobalStatePositionsAtCount(v.inboxTracker, validatedCount, batchNum) + _, gsPos, err := staker.GlobalStatePositionsAtCount(v.inboxTracker, validatedCount, batchNum) if err != nil { return nil, false, fmt.Errorf("%w: failed calculating GSposition for count %d", err, validatedCount) } - validatedGlobalState = buildGlobalState(*execResult, gsPos) + validatedGlobalState = staker.BuildGlobalState(*execResult, gsPos) } currentL1BlockNum, err := v.client.BlockNumber(ctx) @@ -426,8 +419,8 @@ func (v *L1Validator) generateNodeAction( log.Error("Found incorrect assertion: Machine status not finished", "node", nd.NodeNum, "machineStatus", nd.Assertion.AfterState.MachineStatus) continue } - caughtUp, nodeMsgCount, err := GlobalStateToMsgCount(v.inboxTracker, v.txStreamer, afterGS) - if errors.Is(err, ErrGlobalStateNotInChain) { + caughtUp, nodeMsgCount, err := staker.GlobalStateToMsgCount(v.inboxTracker, v.txStreamer, afterGS) + if errors.Is(err, staker.ErrGlobalStateNotInChain) { wrongNodesExist = true log.Error("Found incorrect assertion", "node", nd.NodeNum, "afterGS", afterGS, "err", err) continue @@ -510,7 +503,7 @@ func (v *L1Validator) createNewNodeAction( hasSiblingByte[0] = 1 } assertionNumBlocks := uint64(validatedCount - startCount) - assertion := &Assertion{ + assertion := &staker.Assertion{ BeforeState: startState, AfterState: &validator.ExecutionState{ GlobalState: validatedGS, @@ -540,13 +533,13 @@ func (v *L1Validator) createNewNodeAction( } // Returns (execution state, inbox max count, L1 block proposed, parent chain block proposed, error) -func lookupNodeStartState(ctx context.Context, rollup *RollupWatcher, nodeNum uint64, nodeHash common.Hash) (*validator.ExecutionState, *big.Int, uint64, uint64, error) { +func lookupNodeStartState(ctx context.Context, rollup *staker.RollupWatcher, nodeNum uint64, nodeHash common.Hash) (*validator.ExecutionState, *big.Int, uint64, uint64, error) { if nodeNum == 0 { creationEvent, err := rollup.LookupCreation(ctx) if err != nil { return nil, nil, 0, 0, fmt.Errorf("error looking up rollup creation event: %w", err) } - l1BlockNumber, err := arbutil.CorrespondingL1BlockNumber(ctx, rollup.client, creationEvent.Raw.BlockNumber) + l1BlockNumber, err := arbutil.CorrespondingL1BlockNumber(ctx, rollup.Client(), creationEvent.Raw.BlockNumber) if err != nil { return nil, nil, 0, 0, err } diff --git a/validator/server_arb/mock_machine.go b/staker/legacy/mock_machine_test.go similarity index 78% rename from validator/server_arb/mock_machine.go rename to staker/legacy/mock_machine_test.go index 3cf0f9f771..a5dc5400a7 100644 --- a/validator/server_arb/mock_machine.go +++ b/staker/legacy/mock_machine_test.go @@ -1,33 +1,37 @@ // Copyright 2021-2022, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -package server_arb +package legacystaker import ( "context" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/validator" + "github.com/offchainlabs/nitro/validator/server_arb" ) +// IncorrectMachine will report a bad global state after the incorrectStep onwards. +// It'll also extend the step count to incorrectStep if necessary. type IncorrectMachine struct { - inner *ArbitratorMachine + inner *server_arb.ArbitratorMachine incorrectStep uint64 stepCount uint64 } var badGlobalState = validator.GoGlobalState{Batch: 0xbadbadbadbad, PosInBatch: 0xbadbadbadbad} -var _ MachineInterface = (*IncorrectMachine)(nil) +var _ server_arb.MachineInterface = (*IncorrectMachine)(nil) -func NewIncorrectMachine(inner *ArbitratorMachine, incorrectStep uint64) *IncorrectMachine { +func NewIncorrectMachine(inner *server_arb.ArbitratorMachine, incorrectStep uint64) *IncorrectMachine { return &IncorrectMachine{ inner: inner.Clone(), incorrectStep: incorrectStep, } } -func (m *IncorrectMachine) CloneMachineInterface() MachineInterface { +func (m *IncorrectMachine) CloneMachineInterface() server_arb.MachineInterface { return &IncorrectMachine{ inner: m.inner.Clone(), incorrectStep: m.incorrectStep, @@ -57,6 +61,10 @@ func (m *IncorrectMachine) IsRunning() bool { return m.inner.IsRunning() || m.stepCount < m.incorrectStep } +func (m *IncorrectMachine) IsErrored() bool { + return !m.IsRunning() && m.inner.IsErrored() +} + func (m *IncorrectMachine) ValidForStep(step uint64) bool { return m.inner.ValidForStep(step) } diff --git a/staker/staker.go b/staker/legacy/staker.go similarity index 92% rename from staker/staker.go rename to staker/legacy/staker.go index 45e6f6f551..fa74be327f 100644 --- a/staker/staker.go +++ b/staker/legacy/staker.go @@ -1,7 +1,7 @@ // Copyright 2021-2022, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -package staker +package legacystaker import ( "context" @@ -12,6 +12,9 @@ import ( "strings" "time" + "github.com/google/btree" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" @@ -19,14 +22,12 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rpc" - "github.com/google/btree" - flag "github.com/spf13/pflag" "github.com/offchainlabs/nitro/arbnode/dataposter" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/solgen/go/rollupgen" - "github.com/offchainlabs/nitro/staker/txbuilder" + "github.com/offchainlabs/nitro/staker" "github.com/offchainlabs/nitro/util" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/headerreader" @@ -100,8 +101,8 @@ type L1ValidatorConfig struct { gasRefunder common.Address } -func (c *L1ValidatorConfig) ParseStrategy() (StakerStrategy, error) { - switch strings.ToLower(c.Strategy) { +func ParseStrategy(strategy string) (StakerStrategy, error) { + switch strings.ToLower(strategy) { case "watchtower": return WatchtowerStrategy, nil case "defensive": @@ -113,7 +114,7 @@ func (c *L1ValidatorConfig) ParseStrategy() (StakerStrategy, error) { case "makenodes": return MakeNodesStrategy, nil default: - return WatchtowerStrategy, fmt.Errorf("unknown staker strategy \"%v\"", c.Strategy) + return WatchtowerStrategy, fmt.Errorf("unknown staker strategy \"%v\"", strategy) } } @@ -131,7 +132,7 @@ func (c *L1ValidatorConfig) ValidatorRequired() bool { } func (c *L1ValidatorConfig) Validate() error { - strategy, err := c.ParseStrategy() + strategy, err := ParseStrategy(c.Strategy) if err != nil { return err } @@ -143,7 +144,12 @@ func (c *L1ValidatorConfig) Validate() error { return nil } -type L1ValidatorConfigFetcher func() *L1ValidatorConfig +func (c *L1ValidatorConfig) GasRefunder() common.Address { + return c.gasRefunder +} +func (c *L1ValidatorConfig) StrategyType() StakerStrategy { + return c.strategy +} var DefaultL1ValidatorConfig = L1ValidatorConfig{ Enable: true, @@ -252,6 +258,8 @@ type validatedNode struct { hash common.Hash } +type L1ValidatorConfigFetcher func() *L1ValidatorConfig + type Staker struct { *L1Validator stopwaiter.StopWaiter @@ -266,8 +274,8 @@ type Staker struct { inactiveLastCheckedNode *nodeAndHash inactiveValidatedNodes *btree.BTreeG[validatedNode] bringActiveUntilNode uint64 - inboxReader InboxReaderInterface - statelessBlockValidator *StatelessBlockValidator + inboxReader staker.InboxReaderInterface + statelessBlockValidator *staker.StatelessBlockValidator fatalErr chan<- error fastConfirmSafe *FastConfirmSafe } @@ -283,7 +291,7 @@ type ValidatorWalletInterface interface { ChallengeManagerAddress() common.Address L1Client() *ethclient.Client TestTransactions(context.Context, []*types.Transaction) error - ExecuteTransactions(context.Context, *txbuilder.Builder, common.Address) (*types.Transaction, error) + ExecuteTransactions(context.Context, []*types.Transaction, common.Address) (*types.Transaction, error) TimeoutChallenges(context.Context, []uint64) (*types.Transaction, error) CanBatchTxs() bool AuthIfEoa() *bind.TransactOpts @@ -298,8 +306,8 @@ func NewStaker( wallet ValidatorWalletInterface, callOpts bind.CallOpts, config L1ValidatorConfigFetcher, - blockValidator *BlockValidator, - statelessBlockValidator *StatelessBlockValidator, + blockValidator *staker.BlockValidator, + statelessBlockValidator *staker.StatelessBlockValidator, stakedNotifiers []LatestStakedNotifier, confirmedNotifiers []LatestConfirmedNotifier, validatorUtilsAddress common.Address, @@ -309,8 +317,8 @@ func NewStaker( return nil, err } client := l1Reader.Client() - val, err := NewL1Validator(client, wallet, validatorUtilsAddress, callOpts, - statelessBlockValidator.inboxTracker, statelessBlockValidator.streamer, blockValidator) + val, err := NewL1Validator(client, wallet, validatorUtilsAddress, config().GasRefunder(), callOpts, + statelessBlockValidator.InboxTracker(), statelessBlockValidator.InboxStreamer(), blockValidator) if err != nil { return nil, err } @@ -330,7 +338,7 @@ func NewStaker( config: config, highGasBlocksBuffer: big.NewInt(config().PostingStrategy.HighGasDelayBlocks), lastActCalledBlock: nil, - inboxReader: statelessBlockValidator.inboxReader, + inboxReader: statelessBlockValidator.InboxReader(), statelessBlockValidator: statelessBlockValidator, fatalErr: fatalErr, inactiveValidatedNodes: inactiveValidatedNodes, @@ -346,6 +354,21 @@ func (s *Staker) Initialize(ctx context.Context) error { if walletAddressOrZero != (common.Address{}) { s.updateStakerBalanceMetric(ctx) } + var stakerAddr common.Address + if s.L1Validator.wallet.DataPoster() != nil { + stakerAddr = s.L1Validator.wallet.DataPoster().Sender() + } + whiteListed, err := s.isWhitelisted(ctx) + if err != nil { + return fmt.Errorf("error checking if whitelisted: %w", err) + } + log.Info( + "running as validator", + "txSender", stakerAddr, + "actingAsWallet", walletAddressOrZero, + "whitelisted", whiteListed, + "strategy", s.Strategy(), + ) if s.blockValidator != nil && s.config().StartValidationFromStaked { latestStaked, _, err := s.validatorUtils.LatestStaked(&s.baseCallOpts, s.rollupAddress, walletAddressOrZero) if err != nil { @@ -406,7 +429,7 @@ func (s *Staker) setupFastConfirmation(ctx context.Context) error { fastConfirmer, s.builder, s.wallet, - cfg.gasRefunder, + cfg.GasRefunder(), s.l1Reader, ) if err != nil { @@ -443,23 +466,20 @@ func (s *Staker) tryFastConfirmation(ctx context.Context, blockHash common.Hash, if s.fastConfirmSafe != nil { return s.fastConfirmSafe.tryFastConfirmation(ctx, blockHash, sendRoot, nodeHash) } - auth, err := s.builder.Auth(ctx) - if err != nil { - return err - } + auth := s.builder.Auth(ctx) log.Info("Fast confirming node with wallet", "wallet", auth.From, "nodeHash", nodeHash) - _, err = s.rollup.FastConfirmNextNode(auth, blockHash, sendRoot, nodeHash) + _, err := s.rollup.FastConfirmNextNode(auth, blockHash, sendRoot, nodeHash) return err } -func (s *Staker) getLatestStakedState(ctx context.Context, staker common.Address) (uint64, arbutil.MessageIndex, *validator.GoGlobalState, error) { +func (s *Staker) getLatestStakedState(ctx context.Context, stakerAddress common.Address) (uint64, arbutil.MessageIndex, *validator.GoGlobalState, error) { callOpts := s.getCallOpts(ctx) if s.l1Reader.UseFinalityData() { callOpts.BlockNumber = big.NewInt(int64(rpc.FinalizedBlockNumber)) } - latestStaked, _, err := s.validatorUtils.LatestStaked(s.getCallOpts(ctx), s.rollupAddress, staker) + latestStaked, _, err := s.validatorUtils.LatestStaked(s.getCallOpts(ctx), s.rollupAddress, stakerAddress) if err != nil { - return 0, 0, nil, fmt.Errorf("couldn't get LatestStaked(%v): %w", staker, err) + return 0, 0, nil, fmt.Errorf("couldn't get LatestStaked(%v): %w", stakerAddress, err) } if latestStaked == 0 { return latestStaked, 0, nil, nil @@ -467,21 +487,21 @@ func (s *Staker) getLatestStakedState(ctx context.Context, staker common.Address stakedInfo, err := s.rollup.LookupNode(ctx, latestStaked) if err != nil { - return 0, 0, nil, fmt.Errorf("couldn't look up latest assertion of %v (%v): %w", staker, latestStaked, err) + return 0, 0, nil, fmt.Errorf("couldn't look up latest assertion of %v (%v): %w", stakerAddress, latestStaked, err) } globalState := stakedInfo.AfterState().GlobalState - caughtUp, count, err := GlobalStateToMsgCount(s.inboxTracker, s.txStreamer, globalState) + caughtUp, count, err := staker.GlobalStateToMsgCount(s.inboxTracker, s.txStreamer, globalState) if err != nil { - if errors.Is(err, ErrGlobalStateNotInChain) && s.fatalErr != nil { - fatal := fmt.Errorf("latest assertion of %v (%v) not in chain: %w", staker, latestStaked, err) + if errors.Is(err, staker.ErrGlobalStateNotInChain) && s.fatalErr != nil { + fatal := fmt.Errorf("latest assertion of %v (%v) not in chain: %w", stakerAddress, latestStaked, err) s.fatalErr <- fatal } - return 0, 0, nil, fmt.Errorf("latest assertion of %v (%v): %w", staker, latestStaked, err) + return 0, 0, nil, fmt.Errorf("latest assertion of %v (%v): %w", stakerAddress, latestStaked, err) } if !caughtUp { - log.Info("latest assertion not yet in our node", "staker", staker, "assertion", latestStaked, "state", globalState) + log.Info("latest assertion not yet in our node", "stakerAddress", stakerAddress, "assertion", latestStaked, "state", globalState) return latestStaked, 0, nil, nil } @@ -491,7 +511,7 @@ func (s *Staker) getLatestStakedState(ctx context.Context, staker common.Address } if processedCount < count { - log.Info("execution catching up to rollup", "staker", staker, "rollupCount", count, "processedCount", processedCount) + log.Info("execution catching up to rollup", "stakerAddress", stakerAddress, "rollupCount", count, "processedCount", processedCount) return latestStaked, 0, nil, nil } @@ -506,9 +526,6 @@ func (s *Staker) StopAndWait() { } func (s *Staker) Start(ctxIn context.Context) { - if s.Strategy() != WatchtowerStrategy { - s.wallet.Start(ctxIn) - } s.StopWaiter.Start(ctxIn, s) backoff := time.Second isAheadOfOnChainNonceEphemeralErrorHandler := util.NewEphemeralErrorHandler(10*time.Minute, "is ahead of on-chain nonce", 0) @@ -606,7 +623,7 @@ func (s *Staker) Start(ctxIn context.Context) { }) } -func (s *Staker) IsWhitelisted(ctx context.Context) (bool, error) { +func (s *Staker) isWhitelisted(ctx context.Context) (bool, error) { callOpts := s.getCallOpts(ctx) whitelistDisabled, err := s.rollup.ValidatorWhitelistDisabled(callOpts) if err != nil { @@ -695,12 +712,12 @@ func (s *Staker) confirmDataPosterIsReady(ctx context.Context) error { func (s *Staker) Act(ctx context.Context) (*types.Transaction, error) { cfg := s.config() - if cfg.strategy != WatchtowerStrategy { + if cfg.StrategyType() != WatchtowerStrategy { err := s.confirmDataPosterIsReady(ctx) if err != nil { return nil, err } - whitelisted, err := s.IsWhitelisted(ctx) + whitelisted, err := s.isWhitelisted(ctx) if err != nil { return nil, fmt.Errorf("error checking if whitelisted: %w", err) } @@ -714,7 +731,7 @@ func (s *Staker) Act(ctx context.Context) (*types.Transaction, error) { } callOpts := s.getCallOpts(ctx) s.builder.ClearTransactions() - var rawInfo *StakerInfo + var rawInfo *staker.StakerInfo walletAddressOrZero := s.wallet.AddressOrZero() if walletAddressOrZero != (common.Address{}) { var err error @@ -750,7 +767,7 @@ func (s *Staker) Act(ctx context.Context) (*types.Transaction, error) { StakeExists: rawInfo != nil, } - effectiveStrategy := cfg.strategy + effectiveStrategy := cfg.StrategyType() nodesLinear, err := s.validatorUtils.AreUnresolvedNodesLinear(callOpts, s.rollupAddress) if err != nil { return nil, fmt.Errorf("error checking for rollup assertion fork: %w", err) @@ -817,7 +834,7 @@ func (s *Staker) Act(ctx context.Context) (*types.Transaction, error) { } if s.builder.BuildingTransactionCount() > 0 { // Try to fast confirm previous nodes before working on new ones - return s.wallet.ExecuteTransactions(ctx, s.builder, cfg.gasRefunder) + return s.builder.ExecuteTransactions(ctx) } } } @@ -887,24 +904,17 @@ func (s *Staker) Act(ctx context.Context) (*types.Transaction, error) { stakeIsUnwanted := effectiveStrategy < StakeLatestStrategy if stakeIsTooOutdated || stakeIsUnwanted { // Note: we must have an address if rawInfo != nil - auth, err := s.builder.Auth(ctx) - if err != nil { - return nil, err - } + auth := s.builder.Auth(ctx) _, err = s.rollup.ReturnOldDeposit(auth, walletAddressOrZero) if err != nil { return nil, fmt.Errorf("error returning old deposit (from our staker %v): %w", walletAddressOrZero, err) } - auth, err = s.builder.Auth(ctx) - if err != nil { - return nil, err - } _, err = s.rollup.WithdrawStakerFunds(auth) if err != nil { return nil, fmt.Errorf("error withdrawing staker funds from our staker %v: %w", walletAddressOrZero, err) } log.Info("removing old stake and withdrawing funds") - return s.wallet.ExecuteTransactions(ctx, s.builder, cfg.gasRefunder) + return s.builder.ExecuteTransactions(ctx) } } @@ -914,11 +924,7 @@ func (s *Staker) Act(ctx context.Context) (*types.Transaction, error) { return nil, fmt.Errorf("error checking withdrawable funds of our staker %v: %w", walletAddressOrZero, err) } if withdrawable.Sign() > 0 { - auth, err := s.builder.Auth(ctx) - if err != nil { - return nil, err - } - _, err = s.rollup.WithdrawStakerFunds(auth) + _, err = s.rollup.WithdrawStakerFunds(s.builder.Auth(ctx)) if err != nil { return nil, fmt.Errorf("error withdrawing our staker %v funds: %w", walletAddressOrZero, err) } @@ -958,10 +964,10 @@ func (s *Staker) Act(ctx context.Context) (*types.Transaction, error) { if info.StakerInfo == nil && info.StakeExists { log.Info("staking to execute transactions") } - return s.wallet.ExecuteTransactions(ctx, s.builder, cfg.gasRefunder) + return s.builder.ExecuteTransactions(ctx) } -func (s *Staker) handleConflict(ctx context.Context, info *StakerInfo) error { +func (s *Staker) handleConflict(ctx context.Context, info *staker.StakerInfo) error { if info.CurrentChallenge == nil { s.activeChallenge = nil return nil @@ -977,8 +983,8 @@ func (s *Staker) handleConflict(ctx context.Context, info *StakerInfo) error { newChallengeManager, err := NewChallengeManager( ctx, - s.builder, - s.builder.BuilderAuth(), + s.client, + s.builder.Auth(context.TODO()), *s.builder.WalletAddress(), s.wallet.ChallengeManagerAddress(), *info.CurrentChallenge, @@ -1036,11 +1042,7 @@ func (s *Staker) advanceStake(ctx context.Context, info *OurStakerInfo, effectiv // We'll return early if we already have a stake if info.StakeExists { - auth, err := s.builder.Auth(ctx) - if err != nil { - return err - } - _, err = s.rollup.StakeOnNewNode(auth, action.assertion.AsSolidityStruct(), action.hash, action.prevInboxMaxCount) + _, err = s.rollup.StakeOnNewNode(s.builder.Auth(ctx), action.assertion.AsSolidityStruct(), action.hash, action.prevInboxMaxCount) if err != nil { return fmt.Errorf("error staking on new node: %w", err) } @@ -1052,12 +1054,8 @@ func (s *Staker) advanceStake(ctx context.Context, info *OurStakerInfo, effectiv if err != nil { return fmt.Errorf("error getting current required stake: %w", err) } - auth, err := s.builder.AuthWithAmount(ctx, stakeAmount) - if err != nil { - return err - } _, err = s.rollup.NewStakeOnNewNode( - auth, + s.builder.AuthWithAmount(ctx, stakeAmount), action.assertion.AsSolidityStruct(), action.hash, action.prevInboxMaxCount, @@ -1090,11 +1088,7 @@ func (s *Staker) advanceStake(ctx context.Context, info *OurStakerInfo, effectiv log.Info("staking on existing node", "node", action.number) // We'll return early if we already havea stake if info.StakeExists { - auth, err := s.builder.Auth(ctx) - if err != nil { - return err - } - _, err = s.rollup.StakeOnExistingNode(auth, action.number, action.hash) + _, err = s.rollup.StakeOnExistingNode(s.builder.Auth(ctx), action.number, action.hash) if err != nil { return fmt.Errorf("error staking on existing node: %w", err) } @@ -1106,12 +1100,8 @@ func (s *Staker) advanceStake(ctx context.Context, info *OurStakerInfo, effectiv if err != nil { return fmt.Errorf("error getting current required stake: %w", err) } - auth, err := s.builder.AuthWithAmount(ctx, stakeAmount) - if err != nil { - return err - } _, err = s.rollup.NewStakeOnExistingNode( - auth, + s.builder.AuthWithAmount(ctx, stakeAmount), action.number, action.hash, ) @@ -1125,7 +1115,7 @@ func (s *Staker) advanceStake(ctx context.Context, info *OurStakerInfo, effectiv } } -func (s *Staker) createConflict(ctx context.Context, info *StakerInfo) error { +func (s *Staker) createConflict(ctx context.Context, info *staker.StakerInfo) error { if info.CurrentChallenge != nil { return nil } @@ -1187,12 +1177,8 @@ func (s *Staker) createConflict(ctx context.Context, info *StakerInfo) error { return fmt.Errorf("error looking up node %v: %w", conflictInfo.Node2, err) } log.Warn("creating challenge", "node1", conflictInfo.Node1, "node2", conflictInfo.Node2, "otherStaker", staker) - auth, err := s.builder.Auth(ctx) - if err != nil { - return err - } _, err = s.rollup.CreateChallenge( - auth, + s.builder.Auth(ctx), [2]common.Address{staker1, staker2}, [2]uint64{conflictInfo.Node1, conflictInfo.Node2}, node1Info.MachineStatuses(), @@ -1211,10 +1197,10 @@ func (s *Staker) createConflict(ctx context.Context, info *StakerInfo) error { } func (s *Staker) Strategy() StakerStrategy { - return s.config().strategy + return s.config().StrategyType() } -func (s *Staker) Rollup() *RollupWatcher { +func (s *Staker) Rollup() *staker.RollupWatcher { return s.rollup } diff --git a/staker/multi_protocol/multi_protocol_staker.go b/staker/multi_protocol/multi_protocol_staker.go new file mode 100644 index 0000000000..0c104094ed --- /dev/null +++ b/staker/multi_protocol/multi_protocol_staker.go @@ -0,0 +1,249 @@ +package multiprotocolstaker + +import ( + "context" + "fmt" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + + "github.com/offchainlabs/bold/solgen/go/bridgegen" + boldrollup "github.com/offchainlabs/bold/solgen/go/rollupgen" + "github.com/offchainlabs/nitro/staker" + boldstaker "github.com/offchainlabs/nitro/staker/bold" + legacystaker "github.com/offchainlabs/nitro/staker/legacy" + "github.com/offchainlabs/nitro/staker/txbuilder" + "github.com/offchainlabs/nitro/util/headerreader" + "github.com/offchainlabs/nitro/util/stopwaiter" +) + +const boldArt = ` + _______ __ _______ +/ \ / | / \ +$$$$$$$ | ______ $$ | $$$$$$$ | +$$ |__$$ | / \ $$ | $$ | $$ | +$$ $$< /$$$$$$ |$$ | $$ | $$ | +$$$$$$$ |$$ | $$ |$$ | $$ | $$ | +$$ |__$$ |$$ \__$$ |$$ |_____ $$ |__$$ | +$$ $$/ $$ $$/ $$ |$$ $$/ +$$$$$$$/ $$$$$$/ $$$$$$$$/ $$$$$$$/ +` + +type MultiProtocolStaker struct { + stopwaiter.StopWaiter + bridge *bridgegen.IBridge + oldStaker *legacystaker.Staker + boldStaker *boldstaker.BOLDStaker + legacyConfig legacystaker.L1ValidatorConfigFetcher + stakedNotifiers []legacystaker.LatestStakedNotifier + confirmedNotifiers []legacystaker.LatestConfirmedNotifier + statelessBlockValidator *staker.StatelessBlockValidator + wallet legacystaker.ValidatorWalletInterface + l1Reader *headerreader.HeaderReader + blockValidator *staker.BlockValidator + callOpts bind.CallOpts + boldConfig *boldstaker.BoldConfig + stakeTokenAddress common.Address + stack *node.Node +} + +func NewMultiProtocolStaker( + stack *node.Node, + l1Reader *headerreader.HeaderReader, + wallet legacystaker.ValidatorWalletInterface, + callOpts bind.CallOpts, + legacyConfig legacystaker.L1ValidatorConfigFetcher, + boldConfig *boldstaker.BoldConfig, + blockValidator *staker.BlockValidator, + statelessBlockValidator *staker.StatelessBlockValidator, + stakedNotifiers []legacystaker.LatestStakedNotifier, + stakeTokenAddress common.Address, + confirmedNotifiers []legacystaker.LatestConfirmedNotifier, + validatorUtilsAddress common.Address, + bridgeAddress common.Address, + fatalErr chan<- error, +) (*MultiProtocolStaker, error) { + if err := legacyConfig().Validate(); err != nil { + return nil, err + } + if legacyConfig().StartValidationFromStaked && blockValidator != nil { + stakedNotifiers = append(stakedNotifiers, blockValidator) + } + oldStaker, err := legacystaker.NewStaker( + l1Reader, + wallet, + callOpts, + legacyConfig, + blockValidator, + statelessBlockValidator, + stakedNotifiers, + confirmedNotifiers, + validatorUtilsAddress, + fatalErr, + ) + if err != nil { + return nil, err + } + bridge, err := bridgegen.NewIBridge(bridgeAddress, l1Reader.Client()) + if err != nil { + return nil, err + } + return &MultiProtocolStaker{ + oldStaker: oldStaker, + boldStaker: nil, + bridge: bridge, + legacyConfig: legacyConfig, + stakedNotifiers: stakedNotifiers, + confirmedNotifiers: confirmedNotifiers, + statelessBlockValidator: statelessBlockValidator, + wallet: wallet, + l1Reader: l1Reader, + blockValidator: blockValidator, + callOpts: callOpts, + boldConfig: boldConfig, + stakeTokenAddress: stakeTokenAddress, + stack: stack, + }, nil +} + +func (m *MultiProtocolStaker) Initialize(ctx context.Context) error { + boldActive, rollupAddress, err := m.isBoldActive(ctx) + if err != nil { + return err + } + if boldActive { + log.Info("BoLD protocol is active, initializing BoLD staker") + log.Info(boldArt) + if err := m.setupBoldStaker(ctx, rollupAddress); err != nil { + return err + } + m.oldStaker = nil + return m.boldStaker.Initialize(ctx) + } + log.Info("BoLD protocol not detected on startup, using old staker until upgrade") + return m.oldStaker.Initialize(ctx) +} + +func (m *MultiProtocolStaker) Start(ctxIn context.Context) { + m.StopWaiter.Start(ctxIn, m) + m.wallet.Start(ctxIn) + if m.boldStaker != nil { + log.Info("Starting BOLD staker") + m.boldStaker.Start(ctxIn) + } else { + log.Info("Starting pre-BOLD staker") + m.oldStaker.Start(ctxIn) + stakerSwitchInterval := m.boldConfig.CheckStakerSwitchInterval + m.CallIteratively(func(ctx context.Context) time.Duration { + switchedToBoldProtocol, err := m.checkAndSwitchToBoldStaker(ctxIn) + if err != nil { + log.Warn("staker: error in checking switch to bold staker", "err", err) + return stakerSwitchInterval + } + if switchedToBoldProtocol { + log.Info("Detected BOLD protocol upgrade, stopping old staker and starting BOLD staker") + // Ready to stop the old staker. + m.oldStaker.StopOnly() + m.StopOnly() + } + return stakerSwitchInterval + }) + } +} + +func (m *MultiProtocolStaker) StopAndWait() { + if m.boldStaker != nil { + m.boldStaker.StopAndWait() + } + if m.oldStaker != nil { + m.oldStaker.StopAndWait() + } + m.StopWaiter.StopAndWait() +} + +func (m *MultiProtocolStaker) isBoldActive(ctx context.Context) (bool, common.Address, error) { + var addr common.Address + if !m.boldConfig.Enable { + return false, addr, nil + } + callOpts := m.getCallOpts(ctx) + rollupAddress, err := m.bridge.Rollup(callOpts) + if err != nil { + return false, addr, err + } + userLogic, err := boldrollup.NewRollupUserLogic(rollupAddress, m.l1Reader.Client()) + if err != nil { + return false, addr, err + } + _, err = userLogic.ChallengeGracePeriodBlocks(callOpts) + if err != nil && !headerreader.ExecutionRevertedRegexp.MatchString(err.Error()) { + // Unexpected error, perhaps an L1 issue? + return false, addr, err + } + // ChallengeGracePeriodBlocks only exists in the BOLD rollup contracts. + return err == nil, rollupAddress, nil +} + +func (m *MultiProtocolStaker) checkAndSwitchToBoldStaker(ctx context.Context) (bool, error) { + shouldSwitch, rollupAddress, err := m.isBoldActive(ctx) + if err != nil { + return false, err + } + if !shouldSwitch { + return false, nil + } + if err := m.setupBoldStaker(ctx, rollupAddress); err != nil { + return false, err + } + if err = m.boldStaker.Initialize(ctx); err != nil { + return false, err + } + m.boldStaker.Start(ctx) + return true, nil +} + +func (m *MultiProtocolStaker) getCallOpts(ctx context.Context) *bind.CallOpts { + opts := m.callOpts + opts.Context = ctx + return &opts +} + +func (m *MultiProtocolStaker) setupBoldStaker( + ctx context.Context, + rollupAddress common.Address, +) error { + stakeTokenContract, err := m.l1Reader.Client().CodeAt(ctx, m.stakeTokenAddress, nil) + if err != nil { + return err + } + if len(stakeTokenContract) == 0 { + return fmt.Errorf("stake token address for BoLD %v does not point to a contract", m.stakeTokenAddress) + } + txBuilder, err := txbuilder.NewBuilder(m.wallet, m.legacyConfig().GasRefunder()) + if err != nil { + return err + } + boldStaker, err := boldstaker.NewBOLDStaker( + ctx, + m.stack, + rollupAddress, + m.callOpts, + txBuilder.SingleTxAuth(), + m.l1Reader, + m.blockValidator, + m.statelessBlockValidator, + m.boldConfig, + m.wallet.DataPoster(), + m.wallet, + m.stakedNotifiers, + m.confirmedNotifiers, + ) + if err != nil { + return err + } + m.boldStaker = boldStaker + return nil +} diff --git a/staker/rollup_watcher.go b/staker/rollup_watcher.go index 4d7db52322..b117b30c2b 100644 --- a/staker/rollup_watcher.go +++ b/staker/rollup_watcher.go @@ -13,17 +13,17 @@ import ( "strings" "sync/atomic" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/solgen/go/rollupgen" "github.com/offchainlabs/nitro/util/headerreader" - - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/core/types" ) var rollupInitializedID common.Hash @@ -137,6 +137,10 @@ func (r *RollupWatcher) Initialize(ctx context.Context) error { return err } +func (r *RollupWatcher) Client() RollupWatcherL1Interface { + return r.client +} + func (r *RollupWatcher) LookupCreation(ctx context.Context) (*rollupgen.RollupUserLogicRollupInitialized, error) { var query = ethereum.FilterQuery{ FromBlock: r.fromBlock, diff --git a/staker/stateless_block_validator.go b/staker/stateless_block_validator.go index d9c9c5446b..62e772d5f8 100644 --- a/staker/stateless_block_validator.go +++ b/staker/stateless_block_validator.go @@ -9,23 +9,22 @@ import ( "fmt" "testing" - "github.com/offchainlabs/nitro/arbstate/daprovider" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/arbostypes" + "github.com/offchainlabs/nitro/arbstate/daprovider" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/execution" "github.com/offchainlabs/nitro/util/rpcclient" "github.com/offchainlabs/nitro/validator" + validatorclient "github.com/offchainlabs/nitro/validator/client" "github.com/offchainlabs/nitro/validator/client/redis" "github.com/offchainlabs/nitro/validator/server_api" - - validatorclient "github.com/offchainlabs/nitro/validator/client" ) type StatelessBlockValidator struct { @@ -69,6 +68,7 @@ type TransactionStreamerInterface interface { type InboxReaderInterface interface { GetSequencerMessageBytes(ctx context.Context, seqNum uint64) ([]byte, common.Hash, error) + GetFinalizedMsgCount(ctx context.Context) (arbutil.MessageIndex, error) } type GlobalStatePosition struct { @@ -282,6 +282,22 @@ func (v *StatelessBlockValidator) readPostedBatch(ctx context.Context, batchNum return postedData, err } +func (v *StatelessBlockValidator) InboxTracker() InboxTrackerInterface { + return v.inboxTracker +} + +func (v *StatelessBlockValidator) InboxReader() InboxReaderInterface { + return v.inboxReader +} + +func (v *StatelessBlockValidator) InboxStreamer() TransactionStreamerInterface { + return v.streamer +} + +func (v *StatelessBlockValidator) ExecutionSpawners() []validator.ExecutionSpawner { + return v.execSpawners +} + func (v *StatelessBlockValidator) readFullBatch(ctx context.Context, batchNum uint64) (bool, *FullBatchInfo, error) { batchCount, err := v.inboxTracker.GetBatchCount() if err != nil { @@ -380,7 +396,7 @@ func (v *StatelessBlockValidator) ValidationEntryRecord(ctx context.Context, e * return nil } -func buildGlobalState(res execution.MessageResult, pos GlobalStatePosition) validator.GoGlobalState { +func BuildGlobalState(res execution.MessageResult, pos GlobalStatePosition) validator.GoGlobalState { return validator.GoGlobalState{ BlockHash: res.BlockHash, SendRoot: res.SendRoot, @@ -432,8 +448,8 @@ func (v *StatelessBlockValidator) CreateReadyValidationEntry(ctx context.Context if err != nil { return nil, fmt.Errorf("failed calculating position for validation: %w", err) } - start := buildGlobalState(*prevResult, startPos) - end := buildGlobalState(*result, endPos) + start := BuildGlobalState(*prevResult, startPos) + end := BuildGlobalState(*result, endPos) found, fullBatchInfo, err := v.readFullBatch(ctx, start.Batch) if err != nil { return nil, err diff --git a/staker/txbuilder/builder.go b/staker/txbuilder/builder.go index f52b03a781..b352036c7a 100644 --- a/staker/txbuilder/builder.go +++ b/staker/txbuilder/builder.go @@ -5,59 +5,97 @@ package txbuilder import ( "context" + "fmt" "math/big" + "sync" - "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethclient" ) type ValidatorWalletInterface interface { // Address must be able to be called concurrently with other functions Address() *common.Address - L1Client() *ethclient.Client - TestTransactions(context.Context, []*types.Transaction) error - ExecuteTransactions(context.Context, *Builder, common.Address) (*types.Transaction, error) + TestTransactions(ctx context.Context, txs []*types.Transaction) error + ExecuteTransactions(ctx context.Context, txs []*types.Transaction, gasRefunder common.Address) (*types.Transaction, error) AuthIfEoa() *bind.TransactOpts } -// Builder combines any transactions sent to it via SendTransaction into one batch, +// Builder combines any transactions signed via it into one batch, // which is then sent to the validator wallet. // This lets the validator make multiple atomic transactions. -// This inherits from an ethclient.Client so it can be used to transparently -// intercept calls to SendTransaction and queue them for the next batch. type Builder struct { - *ethclient.Client transactions []*types.Transaction - builderAuth *bind.TransactOpts + singleTxAuth bind.TransactOpts + multiTxAuth bind.TransactOpts isAuthFake bool + authMutex sync.Mutex wallet ValidatorWalletInterface + gasRefunder common.Address } -func NewBuilder(wallet ValidatorWalletInterface) (*Builder, error) { - randKey, err := crypto.GenerateKey() - if err != nil { - return nil, err - } - builderAuth := wallet.AuthIfEoa() +func NewBuilder(wallet ValidatorWalletInterface, gasRefunder common.Address) (*Builder, error) { + var builderAuth bind.TransactOpts var isAuthFake bool - if builderAuth == nil { - // Make a fake auth so we have txs to give to the smart contract wallet - builderAuth, err = bind.NewKeyedTransactorWithChainID(randKey, big.NewInt(9999999)) + if authIfEoa := wallet.AuthIfEoa(); authIfEoa != nil { + builderAuth = *authIfEoa + } else { + isAuthFake = true + var addressOrZero common.Address + if addr := wallet.Address(); addr != nil { + addressOrZero = *addr + } + builderAuth = bind.TransactOpts{ + From: addressOrZero, + GasLimit: 123, // don't gas estimate, that's done when the real tx is created + Signer: func(_ common.Address, tx *types.Transaction) (*types.Transaction, error) { + return tx, nil + }, + } + } + builderAuth.NoSend = true + builder := &Builder{ + singleTxAuth: builderAuth, + multiTxAuth: builderAuth, + wallet: wallet, + isAuthFake: isAuthFake, + gasRefunder: gasRefunder, + } + originalSigner := builderAuth.Signer + builder.multiTxAuth.Signer = func(addr common.Address, tx *types.Transaction) (*types.Transaction, error) { + tx, err := originalSigner(addr, tx) if err != nil { return nil, err } - isAuthFake = true + // Append the transaction to the builder's queue of transactions + builder.transactions = append(builder.transactions, tx) + err = builder.wallet.TestTransactions(context.TODO(), builder.transactions) + if err != nil { + // Remove the bad tx + builder.transactions = builder.transactions[:len(builder.transactions)-1] + return nil, err + } + return tx, nil + } + builder.singleTxAuth.Signer = func(addr common.Address, tx *types.Transaction) (*types.Transaction, error) { + if !isAuthFake { + return originalSigner(addr, tx) + } + // Try to process the transaction on its own + ctx := context.TODO() + txs := []*types.Transaction{tx} + err := builder.wallet.TestTransactions(ctx, txs) + if err != nil { + return nil, fmt.Errorf("failed to test builder transaction: %w", err) + } + signedTx, err := builder.wallet.ExecuteTransactions(ctx, txs, gasRefunder) + if err != nil { + return nil, fmt.Errorf("failed to execute builder transaction: %w", err) + } + return signedTx, nil } - return &Builder{ - builderAuth: builderAuth, - wallet: wallet, - Client: wallet.L1Client(), - isAuthFake: isAuthFake, - }, nil + return builder, nil } func (b *Builder) BuildingTransactionCount() int { @@ -68,59 +106,45 @@ func (b *Builder) ClearTransactions() { b.transactions = nil } -func (b *Builder) EstimateGas(ctx context.Context, call ethereum.CallMsg) (gas uint64, err error) { - if len(b.transactions) == 0 && !b.isAuthFake { - return b.Client.EstimateGas(ctx, call) +func (b *Builder) tryToFillAuthAddress() { + if b.multiTxAuth.From == (common.Address{}) { + if addr := b.wallet.Address(); addr != nil { + b.multiTxAuth.From = *addr + b.singleTxAuth.From = *addr + } } - return 0, nil } -func (b *Builder) SendTransaction(ctx context.Context, tx *types.Transaction) error { - b.transactions = append(b.transactions, tx) - err := b.wallet.TestTransactions(ctx, b.transactions) - if err != nil { - // Remove the bad tx - b.transactions = b.transactions[:len(b.transactions)-1] - return err - } - return nil -} - -// While this is not currently required, it's recommended not to reuse the returned auth for multiple transactions, -// as for an EOA this has the nonce in it. However, the EOA wwallet currently will only publish the first created tx, -// which is why that doesn't really matter. -func (b *Builder) AuthWithAmount(ctx context.Context, amount *big.Int) (*bind.TransactOpts, error) { - nonce, err := b.NonceAt(ctx, b.builderAuth.From, nil) - if err != nil { - return nil, err - } - return &bind.TransactOpts{ - From: b.builderAuth.From, - Nonce: new(big.Int).SetUint64(nonce), - Signer: b.builderAuth.Signer, - Value: amount, - GasPrice: b.builderAuth.GasPrice, - GasLimit: b.builderAuth.GasLimit, - Context: ctx, - }, nil +func (b *Builder) AuthWithAmount(ctx context.Context, amount *big.Int) *bind.TransactOpts { + b.authMutex.Lock() + defer b.authMutex.Unlock() + b.tryToFillAuthAddress() + auth := b.multiTxAuth + auth.Context = ctx + auth.Value = amount + return &auth } // Auth is the same as AuthWithAmount with a 0 amount specified. -// See AuthWithAmount docs for important details. -func (b *Builder) Auth(ctx context.Context) (*bind.TransactOpts, error) { +func (b *Builder) Auth(ctx context.Context) *bind.TransactOpts { return b.AuthWithAmount(ctx, common.Big0) } -func (b *Builder) Transactions() []*types.Transaction { - return b.transactions -} - -// Auth is the same as AuthWithAmount with a 0 amount specified. -// See AuthWithAmount docs for important details. -func (b *Builder) BuilderAuth() *bind.TransactOpts { - return b.builderAuth +// SingleTxAuth should be used if you need an auth without the transaction batching of the builder. +func (b *Builder) SingleTxAuth() *bind.TransactOpts { + b.authMutex.Lock() + defer b.authMutex.Unlock() + b.tryToFillAuthAddress() + auth := b.singleTxAuth + return &auth } func (b *Builder) WalletAddress() *common.Address { return b.wallet.Address() } + +func (b *Builder) ExecuteTransactions(ctx context.Context) (*types.Transaction, error) { + tx, err := b.wallet.ExecuteTransactions(ctx, b.transactions, b.gasRefunder) + b.ClearTransactions() + return tx, err +} diff --git a/staker/validatorwallet/contract.go b/staker/validatorwallet/contract.go index 3202d58569..22f579b82d 100644 --- a/staker/validatorwallet/contract.go +++ b/staker/validatorwallet/contract.go @@ -9,6 +9,7 @@ import ( "fmt" "math/big" "strings" + "sync" "sync/atomic" "github.com/ethereum/go-ethereum" @@ -19,9 +20,9 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbnode/dataposter" "github.com/offchainlabs/nitro/solgen/go/rollupgen" - "github.com/offchainlabs/nitro/staker/txbuilder" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/headerreader" ) @@ -60,6 +61,7 @@ type Contract struct { challengeManagerAddress common.Address dataPoster *dataposter.DataPoster getExtraGas func() uint64 + populateWalletMutex sync.Mutex } func NewContract(dp *dataposter.DataPoster, address *common.Address, walletFactoryAddr, rollupAddress common.Address, l1Reader *headerreader.HeaderReader, auth *bind.TransactOpts, rollupFromBlock int64, onWalletCreated func(common.Address), @@ -154,42 +156,22 @@ func (v *Contract) From() common.Address { return v.auth.From } -// nil value == 0 value -func getAuthWithUpdatedNonceFromL1(ctx context.Context, l1Reader *headerreader.HeaderReader, auth bind.TransactOpts, value *big.Int) (*bind.TransactOpts, error) { - auth.Context = ctx - auth.Value = value - nonce, err := l1Reader.Client().NonceAt(ctx, auth.From, nil) - if err != nil { - return nil, err - } - auth.Nonce = new(big.Int).SetUint64(nonce) - return &auth, nil -} - -func (v *Contract) getAuth(ctx context.Context, value *big.Int) (*bind.TransactOpts, error) { - return getAuthWithUpdatedNonceFromL1(ctx, v.l1Reader, *v.auth, value) -} - func (v *Contract) executeTransaction(ctx context.Context, tx *types.Transaction, gasRefunder common.Address) (*types.Transaction, error) { - auth, err := v.getAuth(ctx, tx.Value()) - if err != nil { - return nil, err - } data, err := validatorABI.Pack("executeTransactionWithGasRefunder", gasRefunder, tx.Data(), *tx.To(), tx.Value()) if err != nil { return nil, fmt.Errorf("packing arguments for executeTransactionWithGasRefunder: %w", err) } - gas, err := v.gasForTxData(ctx, auth, data) + gas, err := v.gasForTxData(ctx, data, tx.Value()) if err != nil { return nil, fmt.Errorf("getting gas for tx data: %w", err) } - return v.dataPoster.PostSimpleTransaction(ctx, auth.Nonce.Uint64(), *v.Address(), data, gas, auth.Value) + return v.dataPoster.PostSimpleTransaction(ctx, *v.Address(), data, gas, tx.Value()) } func createWalletContract( ctx context.Context, l1Reader *headerreader.HeaderReader, - auth *bind.TransactOpts, + from common.Address, dataPoster *dataposter.DataPoster, getExtraGas func() uint64, validatorWalletFactoryAddr common.Address, @@ -203,19 +185,22 @@ func createWalletContract( gas, err := gasForTxData( ctx, l1Reader, - auth, + from, &validatorWalletFactoryAddr, txData, + common.Big0, getExtraGas, ) if err != nil { return nil, fmt.Errorf("getting gas for tx data when creating validator wallet, validatorWalletFactory=%v: %w", validatorWalletFactoryAddr, err) } - return dataPoster.PostSimpleTransaction(ctx, auth.Nonce.Uint64(), validatorWalletFactoryAddr, txData, gas, common.Big0) + return dataPoster.PostSimpleTransaction(ctx, validatorWalletFactoryAddr, txData, gas, common.Big0) } func (v *Contract) populateWallet(ctx context.Context, createIfMissing bool) error { + v.populateWalletMutex.Lock() + defer v.populateWalletMutex.Unlock() if v.con != nil { return nil } @@ -268,9 +253,7 @@ func combineTxes(txes []*types.Transaction) ([][]byte, []common.Address, []*big. return data, dest, amount, totalAmount } -// Not thread safe! Don't call this from multiple threads at the same time. -func (v *Contract) ExecuteTransactions(ctx context.Context, builder *txbuilder.Builder, gasRefunder common.Address) (*types.Transaction, error) { - txes := builder.Transactions() +func (v *Contract) ExecuteTransactions(ctx context.Context, txes []*types.Transaction, gasRefunder common.Address) (*types.Transaction, error) { if len(txes) == 0 { return nil, nil } @@ -285,7 +268,6 @@ func (v *Contract) ExecuteTransactions(ctx context.Context, builder *txbuilder.B if err != nil { return nil, err } - builder.ClearTransactions() return arbTx, nil } @@ -310,31 +292,22 @@ func (v *Contract) ExecuteTransactions(ctx context.Context, builder *txbuilder.B if callValue.Sign() < 0 { callValue.SetInt64(0) } - auth, err := v.getAuth(ctx, callValue) - if err != nil { - return nil, err - } txData, err := validatorABI.Pack("executeTransactionsWithGasRefunder", gasRefunder, data, dest, amount) if err != nil { return nil, fmt.Errorf("packing arguments for executeTransactionWithGasRefunder: %w", err) } - gas, err := v.gasForTxData(ctx, auth, txData) + gas, err := v.gasForTxData(ctx, txData, callValue) if err != nil { return nil, fmt.Errorf("getting gas for tx data: %w", err) } - arbTx, err := v.dataPoster.PostSimpleTransaction(ctx, auth.Nonce.Uint64(), *v.Address(), txData, gas, auth.Value) + arbTx, err := v.dataPoster.PostSimpleTransaction(ctx, *v.Address(), txData, gas, callValue) if err != nil { return nil, err } - builder.ClearTransactions() return arbTx, nil } -func gasForTxData(ctx context.Context, l1Reader *headerreader.HeaderReader, auth *bind.TransactOpts, to *common.Address, data []byte, getExtraGas func() uint64) (uint64, error) { - if auth.GasLimit != 0 { - return auth.GasLimit, nil - } - +func gasForTxData(ctx context.Context, l1Reader *headerreader.HeaderReader, from common.Address, to *common.Address, data []byte, value *big.Int, getExtraGas func() uint64) (uint64, error) { h, err := l1Reader.LastHeader(ctx) if err != nil { return 0, fmt.Errorf("getting the last header: %w", err) @@ -350,9 +323,9 @@ func gasForTxData(ctx context.Context, l1Reader *headerreader.HeaderReader, auth g, err := l1Reader.Client().EstimateGas( ctx, ethereum.CallMsg{ - From: auth.From, + From: from, To: to, - Value: auth.Value, + Value: value, Data: data, GasFeeCap: gasFeeCap, GasTipCap: gasTipCap, @@ -364,24 +337,20 @@ func gasForTxData(ctx context.Context, l1Reader *headerreader.HeaderReader, auth return g + getExtraGas(), nil } -func (v *Contract) gasForTxData(ctx context.Context, auth *bind.TransactOpts, data []byte) (uint64, error) { - return gasForTxData(ctx, v.l1Reader, auth, v.Address(), data, v.getExtraGas) +func (v *Contract) gasForTxData(ctx context.Context, data []byte, value *big.Int) (uint64, error) { + return gasForTxData(ctx, v.l1Reader, v.From(), v.Address(), data, value, v.getExtraGas) } func (v *Contract) TimeoutChallenges(ctx context.Context, challenges []uint64) (*types.Transaction, error) { - auth, err := v.getAuth(ctx, nil) - if err != nil { - return nil, err - } data, err := validatorABI.Pack("timeoutChallenges", v.challengeManagerAddress, challenges) if err != nil { return nil, fmt.Errorf("packing arguments for timeoutChallenges: %w", err) } - gas, err := v.gasForTxData(ctx, auth, data) + gas, err := v.gasForTxData(ctx, data, common.Big0) if err != nil { return nil, fmt.Errorf("getting gas for tx data: %w", err) } - return v.dataPoster.PostSimpleTransaction(ctx, auth.Nonce.Uint64(), *v.Address(), data, gas, auth.Value) + return v.dataPoster.PostSimpleTransaction(ctx, *v.Address(), data, gas, common.Big0) } func (v *Contract) L1Client() *ethclient.Client { @@ -485,12 +454,7 @@ func GetValidatorWalletContract( return nil, nil } - transactAuth, err = getAuthWithUpdatedNonceFromL1(ctx, l1Reader, *transactAuth, nil) - if err != nil { - return nil, err - } - - tx, err := createWalletContract(ctx, l1Reader, transactAuth, dataPoster, getExtraGas, validatorWalletFactoryAddr) + tx, err := createWalletContract(ctx, l1Reader, transactAuth.From, dataPoster, getExtraGas, validatorWalletFactoryAddr) if err != nil { return nil, err } diff --git a/staker/validatorwallet/eoa.go b/staker/validatorwallet/eoa.go index 7c7f472579..80b805b396 100644 --- a/staker/validatorwallet/eoa.go +++ b/staker/validatorwallet/eoa.go @@ -11,12 +11,15 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" + "github.com/offchainlabs/nitro/arbnode/dataposter" "github.com/offchainlabs/nitro/solgen/go/challengegen" "github.com/offchainlabs/nitro/solgen/go/rollupgen" - "github.com/offchainlabs/nitro/staker/txbuilder" ) +// EOA is a ValidatorWallet that uses an Externally Owned Account to sign transactions. +// An Ethereum Externally Owned Account is directly represented by a private key, +// as opposed to a smart contract wallet where the smart contract authorizes transactions. type EOA struct { auth *bind.TransactOpts client *ethclient.Client @@ -80,21 +83,17 @@ func (w *EOA) TestTransactions(context.Context, []*types.Transaction) error { return nil } -func (w *EOA) ExecuteTransactions(ctx context.Context, builder *txbuilder.Builder, _ common.Address) (*types.Transaction, error) { - if len(builder.Transactions()) == 0 { +func (w *EOA) ExecuteTransactions(ctx context.Context, txes []*types.Transaction, _ common.Address) (*types.Transaction, error) { + if len(txes) == 0 { return nil, nil } - tx := builder.Transactions()[0] // we ignore future txs and only execute the first + tx := txes[0] // we ignore future txs and only execute the first return w.postTransaction(ctx, tx) } func (w *EOA) postTransaction(ctx context.Context, baseTx *types.Transaction) (*types.Transaction, error) { - nonce, err := w.L1Client().NonceAt(ctx, w.auth.From, nil) - if err != nil { - return nil, err - } gas := baseTx.Gas() + w.getExtraGas() - newTx, err := w.dataPoster.PostSimpleTransaction(ctx, nonce, *baseTx.To(), baseTx.Data(), gas, baseTx.Value()) + newTx, err := w.dataPoster.PostSimpleTransaction(ctx, *baseTx.To(), baseTx.Data(), gas, baseTx.Value()) if err != nil { return nil, fmt.Errorf("post transaction: %w", err) } diff --git a/staker/validatorwallet/noop.go b/staker/validatorwallet/noop.go index fec39ac2b1..b483927753 100644 --- a/staker/validatorwallet/noop.go +++ b/staker/validatorwallet/noop.go @@ -11,8 +11,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" + "github.com/offchainlabs/nitro/arbnode/dataposter" - "github.com/offchainlabs/nitro/staker/txbuilder" ) // NoOp validator wallet is used for watchtower mode. @@ -38,7 +38,7 @@ func (*NoOp) TxSenderAddress() *common.Address { return nil } func (*NoOp) From() common.Address { return common.Address{} } -func (*NoOp) ExecuteTransactions(context.Context, *txbuilder.Builder, common.Address) (*types.Transaction, error) { +func (*NoOp) ExecuteTransactions(context.Context, []*types.Transaction, common.Address) (*types.Transaction, error) { return nil, errors.New("no op validator wallet cannot execute transactions") } diff --git a/statetransfer/data.go b/statetransfer/data.go index df4694aa17..21268a443a 100644 --- a/statetransfer/data.go +++ b/statetransfer/data.go @@ -14,6 +14,7 @@ type ArbosInitializationInfo struct { AddressTableContents []common.Address RetryableData []InitializationDataForRetryable Accounts []AccountInitializationInfo + ChainOwner common.Address } type InitializationDataForRetryable struct { diff --git a/statetransfer/interface.go b/statetransfer/interface.go index 7d592b4430..cb70fdd14d 100644 --- a/statetransfer/interface.go +++ b/statetransfer/interface.go @@ -17,6 +17,7 @@ type InitDataReader interface { GetNextBlockNumber() (uint64, error) GetRetryableDataReader() (RetryableDataReader, error) GetAccountDataReader() (AccountDataReader, error) + GetChainOwner() (common.Address, error) } type ListReader interface { diff --git a/statetransfer/jsondatareader.go b/statetransfer/jsondatareader.go index c36061c0b0..5e992df3f0 100644 --- a/statetransfer/jsondatareader.go +++ b/statetransfer/jsondatareader.go @@ -210,3 +210,7 @@ func (r *JsonInitDataReader) GetAccountDataReader() (AccountDataReader, error) { JsonListReader: listreader, }, nil } + +func (r *JsonInitDataReader) GetChainOwner() (common.Address, error) { + return common.Address{}, nil +} diff --git a/statetransfer/memdatareader.go b/statetransfer/memdatareader.go index 1d60888937..3d6b68343c 100644 --- a/statetransfer/memdatareader.go +++ b/statetransfer/memdatareader.go @@ -99,6 +99,10 @@ func (r *MemoryInitDataReader) GetAccountDataReader() (AccountDataReader, error) }, nil } +func (r *MemoryInitDataReader) GetChainOwner() (common.Address, error) { + return r.d.ChainOwner, nil +} + func (r *MemoryInitDataReader) Close() error { return nil } diff --git a/system_tests/aliasing_test.go b/system_tests/aliasing_test.go index 60a89468a5..e6c9dab45f 100644 --- a/system_tests/aliasing_test.go +++ b/system_tests/aliasing_test.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" diff --git a/system_tests/batch_poster_test.go b/system_tests/batch_poster_test.go index 0ec03e84c4..39d7fa576c 100644 --- a/system_tests/batch_poster_test.go +++ b/system_tests/batch_poster_test.go @@ -13,6 +13,7 @@ import ( "time" "github.com/andybalholm/brotli" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" diff --git a/system_tests/block_hash_test.go b/system_tests/block_hash_test.go index b437f3dad9..454b4359ad 100644 --- a/system_tests/block_hash_test.go +++ b/system_tests/block_hash_test.go @@ -8,6 +8,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/offchainlabs/nitro/solgen/go/mocksgen" ) diff --git a/system_tests/blocks_reexecutor_test.go b/system_tests/blocks_reexecutor_test.go index 1a97919e66..e9ef5a2260 100644 --- a/system_tests/blocks_reexecutor_test.go +++ b/system_tests/blocks_reexecutor_test.go @@ -6,6 +6,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" + blocksreexecutor "github.com/offchainlabs/nitro/blocks_reexecutor" ) diff --git a/system_tests/bloom_test.go b/system_tests/bloom_test.go index 68fb7c3add..df6c549dda 100644 --- a/system_tests/bloom_test.go +++ b/system_tests/bloom_test.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/solgen/go/mocksgen" ) diff --git a/system_tests/bold_challenge_protocol_test.go b/system_tests/bold_challenge_protocol_test.go new file mode 100644 index 0000000000..777817bf3e --- /dev/null +++ b/system_tests/bold_challenge_protocol_test.go @@ -0,0 +1,922 @@ +// Copyright 2023, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE + +//go:build challengetest && !race + +package arbtest + +import ( + "bytes" + "context" + "encoding/json" + "io" + "math/big" + "os" + "strings" + "testing" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" + protocol "github.com/offchainlabs/bold/chain-abstraction" + solimpl "github.com/offchainlabs/bold/chain-abstraction/sol-implementation" + challengemanager "github.com/offchainlabs/bold/challenge-manager" + modes "github.com/offchainlabs/bold/challenge-manager/types" + l2stateprovider "github.com/offchainlabs/bold/layer2-state-provider" + "github.com/offchainlabs/bold/solgen/go/bridgegen" + "github.com/offchainlabs/bold/solgen/go/challengeV2gen" + "github.com/offchainlabs/bold/solgen/go/mocksgen" + "github.com/offchainlabs/bold/solgen/go/rollupgen" + challengetesting "github.com/offchainlabs/bold/testing" + "github.com/offchainlabs/bold/testing/setup" + butil "github.com/offchainlabs/bold/util" + "github.com/offchainlabs/nitro/arbcompress" + "github.com/offchainlabs/nitro/arbnode" + "github.com/offchainlabs/nitro/arbnode/dataposter/storage" + "github.com/offchainlabs/nitro/arbos" + "github.com/offchainlabs/nitro/arbos/l2pricing" + "github.com/offchainlabs/nitro/arbstate" + "github.com/offchainlabs/nitro/cmd/chaininfo" + "github.com/offchainlabs/nitro/execution/gethexec" + "github.com/offchainlabs/nitro/staker" + "github.com/offchainlabs/nitro/staker/bold" + "github.com/offchainlabs/nitro/statetransfer" + "github.com/offchainlabs/nitro/util" + "github.com/offchainlabs/nitro/util/signature" + "github.com/offchainlabs/nitro/util/testhelpers" + "github.com/offchainlabs/nitro/validator/server_arb" + "github.com/offchainlabs/nitro/validator/server_common" + "github.com/offchainlabs/nitro/validator/valnode" +) + +func TestChallengeProtocolBOLDReadInboxChallenge(t *testing.T) { + testChallengeProtocolBOLD(t) +} + +func TestChallengeProtocolBOLDStartStepChallenge(t *testing.T) { + opts := []server_arb.SpawnerOption{ + server_arb.WithWrapper(func(inner server_arb.MachineInterface) server_arb.MachineInterface { + // This wrapper is applied after the BOLD wrapper, so step 0 is the finished machine. + // Modifying its hash results in invalid inclusion proofs for the evil validator, + // so we start modifying hashes at step 1 (the first machine step in the running state). + return NewIncorrectIntermediateMachine(inner, 1) + }), + } + testChallengeProtocolBOLD(t, opts...) +} + +func testChallengeProtocolBOLD(t *testing.T, spawnerOpts ...server_arb.SpawnerOption) { + goodDir, err := os.MkdirTemp("", "good_*") + Require(t, err) + evilDir, err := os.MkdirTemp("", "evil_*") + Require(t, err) + t.Cleanup(func() { + Require(t, os.RemoveAll(goodDir)) + Require(t, os.RemoveAll(evilDir)) + }) + ctx, cancelCtx := context.WithCancel(context.Background()) + defer cancelCtx() + var transferGas = util.NormalizeL2GasForL1GasInitial(800_000, params.GWei) // include room for aggregator L1 costs + l2chainConfig := chaininfo.ArbitrumDevTestChainConfig() + l2info := NewBlockChainTestInfo( + t, + types.NewArbitrumSigner(types.NewLondonSigner(l2chainConfig.ChainID)), big.NewInt(l2pricing.InitialBaseFeeWei*2), + transferGas, + ) + ownerBal := big.NewInt(params.Ether) + ownerBal.Mul(ownerBal, big.NewInt(1_000_000)) + l2info.GenerateGenesisAccount("Owner", ownerBal) + sconf := setup.RollupStackConfig{ + UseMockBridge: false, + UseMockOneStepProver: false, + MinimumAssertionPeriod: 0, + } + + _, l2nodeA, _, _, l1info, _, l1client, l1stack, assertionChain, stakeTokenAddr := createTestNodeOnL1ForBoldProtocol( + t, + ctx, + true, + nil, + l2chainConfig, + nil, + sconf, + l2info, + ) + defer requireClose(t, l1stack) + defer l2nodeA.StopAndWait() + + // Make sure we shut down test functionality before the rest of the node + ctx, cancelCtx = context.WithCancel(ctx) + defer cancelCtx() + + go keepChainMoving(t, ctx, l1info, l1client) + + l2nodeConfig := arbnode.ConfigDefaultL1Test() + _, l2nodeB, _ := create2ndNodeWithConfigForBoldProtocol( + t, + ctx, + l2nodeA, + l1stack, + l1info, + &l2info.ArbInitData, + l2nodeConfig, + nil, + sconf, + stakeTokenAddr, + ) + defer l2nodeB.StopAndWait() + + genesisA, err := l2nodeA.Execution.ResultAtPos(0) + Require(t, err) + genesisB, err := l2nodeB.Execution.ResultAtPos(0) + Require(t, err) + if genesisA.BlockHash != genesisB.BlockHash { + Fatal(t, "genesis blocks mismatch between nodes") + } + + balance := big.NewInt(params.Ether) + balance.Mul(balance, big.NewInt(100)) + TransferBalance(t, "Faucet", "Asserter", balance, l1info, l1client, ctx) + TransferBalance(t, "Faucet", "EvilAsserter", balance, l1info, l1client, ctx) + + valCfg := valnode.TestValidationConfig + valCfg.UseJit = false + _, valStack := createTestValidationNode(t, ctx, &valCfg) + blockValidatorConfig := staker.TestBlockValidatorConfig + + statelessA, err := staker.NewStatelessBlockValidator( + l2nodeA.InboxReader, + l2nodeA.InboxTracker, + l2nodeA.TxStreamer, + l2nodeA.Execution, + l2nodeA.ArbDB, + nil, + StaticFetcherFrom(t, &blockValidatorConfig), + valStack, + ) + Require(t, err) + err = statelessA.Start(ctx) + Require(t, err) + _, valStackB := createTestValidationNode(t, ctx, &valCfg, spawnerOpts...) + + statelessB, err := staker.NewStatelessBlockValidator( + l2nodeB.InboxReader, + l2nodeB.InboxTracker, + l2nodeB.TxStreamer, + l2nodeB.Execution, + l2nodeB.ArbDB, + nil, + StaticFetcherFrom(t, &blockValidatorConfig), + valStackB, + ) + Require(t, err) + err = statelessB.Start(ctx) + Require(t, err) + + blockValidatorA, err := staker.NewBlockValidator( + statelessA, + l2nodeA.InboxTracker, + l2nodeA.TxStreamer, + StaticFetcherFrom(t, &blockValidatorConfig), + nil, + ) + Require(t, err) + Require(t, blockValidatorA.Initialize(ctx)) + Require(t, blockValidatorA.Start(ctx)) + + blockValidatorB, err := staker.NewBlockValidator( + statelessB, + l2nodeB.InboxTracker, + l2nodeB.TxStreamer, + StaticFetcherFrom(t, &blockValidatorConfig), + nil, + ) + Require(t, err) + Require(t, blockValidatorB.Initialize(ctx)) + Require(t, blockValidatorB.Start(ctx)) + + stateManager, err := bold.NewBOLDStateProvider( + blockValidatorA, + statelessA, + l2stateprovider.Height(blockChallengeLeafHeight), + &bold.StateProviderConfig{ + ValidatorName: "good", + MachineLeavesCachePath: goodDir, + CheckBatchFinality: false, + }, + goodDir, + ) + Require(t, err) + + stateManagerB, err := bold.NewBOLDStateProvider( + blockValidatorB, + statelessB, + l2stateprovider.Height(blockChallengeLeafHeight), + &bold.StateProviderConfig{ + ValidatorName: "evil", + MachineLeavesCachePath: evilDir, + CheckBatchFinality: false, + }, + evilDir, + ) + Require(t, err) + + Require(t, l2nodeA.Start(ctx)) + Require(t, l2nodeB.Start(ctx)) + + chalManagerAddr := assertionChain.SpecChallengeManager() + evilOpts := l1info.GetDefaultTransactOpts("EvilAsserter", ctx) + l1ChainId, err := l1client.ChainID(ctx) + Require(t, err) + dp, err := arbnode.StakerDataposter( + ctx, + rawdb.NewTable(l2nodeB.ArbDB, storage.StakerPrefix), + l2nodeB.L1Reader, + &evilOpts, + NewFetcherFromConfig(l2nodeConfig), + l2nodeB.SyncMonitor, + l1ChainId, + ) + Require(t, err) + chainB, err := solimpl.NewAssertionChain( + ctx, + assertionChain.RollupAddress(), + chalManagerAddr.Address(), + &evilOpts, + butil.NewBackendWrapper(l1client, rpc.LatestBlockNumber), + bold.NewDataPosterTransactor(dp), + solimpl.WithRpcHeadBlockNumber(rpc.LatestBlockNumber), + ) + Require(t, err) + + l2info.GenerateAccount("Destination") + sequencerTxOpts := l1info.GetDefaultTransactOpts("Sequencer", ctx) + + honestSeqInbox := l1info.GetAddress("SequencerInbox") + evilSeqInbox := l1info.GetAddress("EvilSequencerInbox") + honestSeqInboxBinding, err := bridgegen.NewSequencerInbox(honestSeqInbox, l1client) + Require(t, err) + evilSeqInboxBinding, err := bridgegen.NewSequencerInbox(evilSeqInbox, l1client) + Require(t, err) + + // Post batches to the honest and evil sequencer inbox that are internally equal. + // This means the honest and evil sequencer inboxes will agree with all messages in the batch. + seqInboxABI, err := abi.JSON(strings.NewReader(bridgegen.SequencerInboxABI)) + Require(t, err) + + honestUpgradeExec, err := mocksgen.NewUpgradeExecutorMock(l1info.GetAddress("UpgradeExecutor"), l1client) + Require(t, err) + data, err := seqInboxABI.Pack( + "setIsBatchPoster", + sequencerTxOpts.From, + true, + ) + Require(t, err) + honestRollupOwnerOpts := l1info.GetDefaultTransactOpts("RollupOwner", ctx) + _, err = honestUpgradeExec.ExecuteCall(&honestRollupOwnerOpts, honestSeqInbox, data) + Require(t, err) + + evilUpgradeExec, err := mocksgen.NewUpgradeExecutorMock(l1info.GetAddress("EvilUpgradeExecutor"), l1client) + Require(t, err) + data, err = seqInboxABI.Pack( + "setIsBatchPoster", + sequencerTxOpts.From, + true, + ) + Require(t, err) + evilRollupOwnerOpts := l1info.GetDefaultTransactOpts("RollupOwner", ctx) + _, err = evilUpgradeExec.ExecuteCall(&evilRollupOwnerOpts, evilSeqInbox, data) + Require(t, err) + + totalMessagesPosted := int64(0) + numMessagesPerBatch := int64(5) + divergeAt := int64(-1) + makeBoldBatch(t, l2nodeA, l2info, l1client, &sequencerTxOpts, honestSeqInboxBinding, honestSeqInbox, numMessagesPerBatch, divergeAt) + l2info.Accounts["Owner"].Nonce.Store(0) + makeBoldBatch(t, l2nodeB, l2info, l1client, &sequencerTxOpts, evilSeqInboxBinding, evilSeqInbox, numMessagesPerBatch, divergeAt) + totalMessagesPosted += numMessagesPerBatch + + // Next, we post another batch, this time containing more messages. + // We diverge at message index 5 within the evil node's batch. + l2info.Accounts["Owner"].Nonce.Store(5) + numMessagesPerBatch = int64(10) + makeBoldBatch(t, l2nodeA, l2info, l1client, &sequencerTxOpts, honestSeqInboxBinding, honestSeqInbox, numMessagesPerBatch, divergeAt) + l2info.Accounts["Owner"].Nonce.Store(5) + divergeAt = int64(5) + makeBoldBatch(t, l2nodeB, l2info, l1client, &sequencerTxOpts, evilSeqInboxBinding, evilSeqInbox, numMessagesPerBatch, divergeAt) + totalMessagesPosted += numMessagesPerBatch + + bcA, err := l2nodeA.InboxTracker.GetBatchCount() + Require(t, err) + bcB, err := l2nodeB.InboxTracker.GetBatchCount() + Require(t, err) + msgA, err := l2nodeA.InboxTracker.GetBatchMessageCount(bcA - 1) + Require(t, err) + msgB, err := l2nodeB.InboxTracker.GetBatchMessageCount(bcB - 1) + Require(t, err) + + t.Logf("Node A batch count %d, msgs %d", bcA, msgA) + t.Logf("Node B batch count %d, msgs %d", bcB, msgB) + + // Wait for both nodes' chains to catch up. + nodeAExec, ok := l2nodeA.Execution.(*gethexec.ExecutionNode) + if !ok { + Fatal(t, "not geth execution node") + } + nodeBExec, ok := l2nodeB.Execution.(*gethexec.ExecutionNode) + if !ok { + Fatal(t, "not geth execution node") + } + for { + nodeALatest := nodeAExec.Backend.APIBackend().CurrentHeader() + nodeBLatest := nodeBExec.Backend.APIBackend().CurrentHeader() + isCaughtUp := nodeALatest.Number.Uint64() == uint64(totalMessagesPosted) + areEqual := nodeALatest.Number.Uint64() == nodeBLatest.Number.Uint64() + if isCaughtUp && areEqual { + if nodeALatest.Hash() == nodeBLatest.Hash() { + Fatal(t, "node A L2 hash", nodeALatest, "matches node B L2 hash", nodeBLatest) + } + break + } + } + + bridgeBinding, err := bridgegen.NewBridge(l1info.GetAddress("Bridge"), l1client) + Require(t, err) + totalBatchesBig, err := bridgeBinding.SequencerMessageCount(&bind.CallOpts{Context: ctx}) + Require(t, err) + totalBatches := totalBatchesBig.Uint64() + + // Wait until the validators have validated the batches. + for { + lastInfo, err := blockValidatorA.ReadLastValidatedInfo() + if lastInfo == nil || err != nil { + continue + } + t.Log(lastInfo.GlobalState.Batch, totalBatches-1) + if lastInfo.GlobalState.Batch >= totalBatches-1 { + break + } + time.Sleep(time.Millisecond * 200) + } + for { + lastInfo, err := blockValidatorB.ReadLastValidatedInfo() + if lastInfo == nil || err != nil { + continue + } + t.Log(lastInfo.GlobalState.Batch, totalBatches-1) + if lastInfo.GlobalState.Batch >= totalBatches-1 { + break + } + time.Sleep(time.Millisecond * 200) + } + + provider := l2stateprovider.NewHistoryCommitmentProvider( + stateManager, + stateManager, + stateManager, + []l2stateprovider.Height{ + l2stateprovider.Height(blockChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(smallStepChallengeLeafHeight), + }, + stateManager, + nil, // Api db + ) + + evilProvider := l2stateprovider.NewHistoryCommitmentProvider( + stateManagerB, + stateManagerB, + stateManagerB, + []l2stateprovider.Height{ + l2stateprovider.Height(blockChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(smallStepChallengeLeafHeight), + }, + stateManagerB, + nil, // Api db + ) + + stackOpts := []challengemanager.StackOpt{ + challengemanager.StackWithName("honest"), + challengemanager.StackWithMode(modes.MakeMode), + challengemanager.StackWithPostingInterval(time.Second * 3), + challengemanager.StackWithPollingInterval(time.Second), + challengemanager.StackWithAverageBlockCreationTime(time.Second), + } + + manager, err := challengemanager.NewChallengeStack( + assertionChain, + provider, + stackOpts..., + ) + Require(t, err) + + evilStackOpts := append(stackOpts, challengemanager.StackWithName("evil")) + + managerB, err := challengemanager.NewChallengeStack( + chainB, + evilProvider, + evilStackOpts..., + ) + Require(t, err) + + manager.Start(ctx) + managerB.Start(ctx) + + chalManager := assertionChain.SpecChallengeManager() + filterer, err := challengeV2gen.NewEdgeChallengeManagerFilterer(chalManager.Address(), l1client) + Require(t, err) + + fromBlock := uint64(0) + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + for { + select { + case <-ticker.C: + latestBlock, err := l1client.HeaderByNumber(ctx, nil) + Require(t, err) + toBlock := latestBlock.Number.Uint64() + if fromBlock == toBlock { + continue + } + filterOpts := &bind.FilterOpts{ + Start: fromBlock, + End: &toBlock, + Context: ctx, + } + it, err := filterer.FilterEdgeConfirmedByOneStepProof(filterOpts, nil, nil) + Require(t, err) + for it.Next() { + if it.Error() != nil { + t.Fatalf("Error in filter iterator: %v", it.Error()) + } + t.Log("Received event of OSP confirmation!") + tx, _, err := l1client.TransactionByHash(ctx, it.Event.Raw.TxHash) + Require(t, err) + signer := types.NewCancunSigner(tx.ChainId()) + address, err := signer.Sender(tx) + Require(t, err) + if address == l1info.GetDefaultTransactOpts("Asserter", ctx).From { + t.Log("Honest party won OSP, impossible for evil party to win if honest party continues") + Require(t, it.Close()) + return + } + } + fromBlock = toBlock + case <-ctx.Done(): + return + } + } +} + +// Every 3 seconds, send an L1 transaction to keep the chain moving. +func keepChainMoving(t *testing.T, ctx context.Context, l1Info *BlockchainTestInfo, l1Client *ethclient.Client) { + delay := time.Second * 3 + for { + select { + case <-ctx.Done(): + return + default: + time.Sleep(delay) + if ctx.Err() != nil { + break + } + TransferBalance(t, "Faucet", "Faucet", common.Big0, l1Info, l1Client, ctx) + latestBlock, err := l1Client.BlockNumber(ctx) + if ctx.Err() != nil { + break + } + Require(t, err) + if latestBlock > 150 { + delay = time.Second + } + } + } +} + +func createTestNodeOnL1ForBoldProtocol( + t *testing.T, + ctx context.Context, + isSequencer bool, + nodeConfig *arbnode.Config, + chainConfig *params.ChainConfig, + _ *node.Config, + rollupStackConf setup.RollupStackConfig, + l2infoIn info, +) ( + l2info info, currentNode *arbnode.Node, l2client *ethclient.Client, l2stack *node.Node, + l1info info, l1backend *eth.Ethereum, l1client *ethclient.Client, l1stack *node.Node, + assertionChain *solimpl.AssertionChain, stakeTokenAddr common.Address, +) { + if nodeConfig == nil { + nodeConfig = arbnode.ConfigDefaultL1Test() + } + nodeConfig.ParentChainReader.OldHeaderTimeout = time.Minute * 10 + if chainConfig == nil { + chainConfig = chaininfo.ArbitrumDevTestChainConfig() + } + nodeConfig.BatchPoster.DataPoster.MaxMempoolTransactions = 18 + fatalErrChan := make(chan error, 10) + l1info, l1client, l1backend, l1stack = createTestL1BlockChain(t, nil) + var l2chainDb ethdb.Database + var l2arbDb ethdb.Database + var l2blockchain *core.BlockChain + l2info = l2infoIn + if l2info == nil { + l2info = NewArbTestInfo(t, chainConfig.ChainID) + } + + l1info.GenerateAccount("RollupOwner") + l1info.GenerateAccount("Sequencer") + l1info.GenerateAccount("User") + l1info.GenerateAccount("Asserter") + l1info.GenerateAccount("EvilAsserter") + + SendWaitTestTransactions(t, ctx, l1client, []*types.Transaction{ + l1info.PrepareTx("Faucet", "RollupOwner", 30000, big.NewInt(9223372036854775807), nil), + l1info.PrepareTx("Faucet", "Sequencer", 30000, big.NewInt(9223372036854775807), nil), + l1info.PrepareTx("Faucet", "User", 30000, big.NewInt(9223372036854775807), nil), + l1info.PrepareTx("Faucet", "Asserter", 30000, big.NewInt(9223372036854775807), nil), + l1info.PrepareTx("Faucet", "EvilAsserter", 30000, big.NewInt(9223372036854775807), nil), + }) + + l1TransactionOpts := l1info.GetDefaultTransactOpts("RollupOwner", ctx) + stakeToken, tx, tokenBindings, err := mocksgen.DeployTestWETH9( + &l1TransactionOpts, + l1client, + "Weth", + "WETH", + ) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, l1client, tx) + Require(t, err) + stakeTokenAddr = stakeToken + value, ok := new(big.Int).SetString("10000", 10) + if !ok { + t.Fatal(t, "could not set value") + } + l1TransactionOpts.Value = value + tx, err = tokenBindings.Deposit(&l1TransactionOpts) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, l1client, tx) + Require(t, err) + l1TransactionOpts.Value = nil + + addresses := deployContractsOnly(t, ctx, l1info, l1client, chainConfig.ChainID, rollupStackConf, stakeToken) + rollupUser, err := rollupgen.NewRollupUserLogic(addresses.Rollup, l1client) + Require(t, err) + chalManagerAddr, err := rollupUser.ChallengeManager(&bind.CallOpts{}) + Require(t, err) + l1info.SetContract("Bridge", addresses.Bridge) + l1info.SetContract("SequencerInbox", addresses.SequencerInbox) + l1info.SetContract("Inbox", addresses.Inbox) + l1info.SetContract("Rollup", addresses.Rollup) + l1info.SetContract("UpgradeExecutor", addresses.UpgradeExecutor) + + execConfig := ExecConfigDefaultNonSequencerTest(t) + Require(t, execConfig.Validate()) + execConfig.Caching.StateScheme = rawdb.HashScheme + useWasmCache := uint32(1) + initMessage := getInitMessage(ctx, t, l1client, addresses) + _, l2stack, l2chainDb, l2arbDb, l2blockchain = createNonL1BlockChainWithStackConfig(t, l2info, "", chainConfig, initMessage, nil, execConfig, useWasmCache) + var sequencerTxOptsPtr *bind.TransactOpts + var dataSigner signature.DataSignerFunc + if isSequencer { + sequencerTxOpts := l1info.GetDefaultTransactOpts("Sequencer", ctx) + sequencerTxOptsPtr = &sequencerTxOpts + dataSigner = signature.DataSignerFromPrivateKey(l1info.GetInfoWithPrivKey("Sequencer").PrivateKey) + } + + if !isSequencer { + nodeConfig.BatchPoster.Enable = false + nodeConfig.DelayedSequencer.Enable = false + } + + AddValNodeIfNeeded(t, ctx, nodeConfig, true, "", "") + + execConfigFetcher := func() *gethexec.Config { return execConfig } + execNode, err := gethexec.CreateExecutionNode(ctx, l2stack, l2chainDb, l2blockchain, l1client, execConfigFetcher) + Require(t, err) + + parentChainId, err := l1client.ChainID(ctx) + Require(t, err) + currentNode, err = arbnode.CreateNode( + ctx, l2stack, execNode, l2arbDb, NewFetcherFromConfig(nodeConfig), l2blockchain.Config(), l1client, + addresses, sequencerTxOptsPtr, sequencerTxOptsPtr, dataSigner, fatalErrChan, parentChainId, + nil, // Blob reader. + ) + Require(t, err) + + l2client = ClientForStack(t, l2stack) + + StartWatchChanErr(t, ctx, fatalErrChan, currentNode) + + opts := l1info.GetDefaultTransactOpts("Asserter", ctx) + dp, err := arbnode.StakerDataposter( + ctx, + rawdb.NewTable(l2arbDb, storage.StakerPrefix), + currentNode.L1Reader, + &opts, + NewFetcherFromConfig(nodeConfig), + currentNode.SyncMonitor, + parentChainId, + ) + Require(t, err) + assertionChainBindings, err := solimpl.NewAssertionChain( + ctx, + addresses.Rollup, + chalManagerAddr, + &opts, + butil.NewBackendWrapper(l1client, rpc.LatestBlockNumber), + bold.NewDataPosterTransactor(dp), + solimpl.WithRpcHeadBlockNumber(rpc.LatestBlockNumber), + ) + Require(t, err) + assertionChain = assertionChainBindings + + return +} + +func deployContractsOnly( + t *testing.T, + ctx context.Context, + l1info info, + backend *ethclient.Client, + chainId *big.Int, + rollupStackConf setup.RollupStackConfig, + stakeToken common.Address, +) *chaininfo.RollupAddresses { + l1TransactionOpts := l1info.GetDefaultTransactOpts("RollupOwner", ctx) + locator, err := server_common.NewMachineLocator("") + Require(t, err) + wasmModuleRoot := locator.LatestWasmModuleRoot() + + loserStakeEscrow := l1TransactionOpts.From + genesisExecutionState := rollupgen.AssertionState{ + GlobalState: rollupgen.GlobalState{}, + MachineStatus: 1, + EndHistoryRoot: [32]byte{}, + } + genesisInboxCount := big.NewInt(0) + anyTrustFastConfirmer := common.Address{} + miniStakeValues := []*big.Int{big.NewInt(5), big.NewInt(4), big.NewInt(3), big.NewInt(2), big.NewInt(1)} + cfg := challengetesting.GenerateRollupConfig( + false, + wasmModuleRoot, + l1TransactionOpts.From, + chainId, + loserStakeEscrow, + miniStakeValues, + stakeToken, + genesisExecutionState, + genesisInboxCount, + anyTrustFastConfirmer, + challengetesting.WithLayerZeroHeights(&protocol.LayerZeroHeights{ + BlockChallengeHeight: protocol.Height(blockChallengeLeafHeight), + BigStepChallengeHeight: protocol.Height(bigStepChallengeLeafHeight), + SmallStepChallengeHeight: protocol.Height(smallStepChallengeLeafHeight), + }), + challengetesting.WithNumBigStepLevels(uint8(3)), // TODO: Hardcoded. + challengetesting.WithConfirmPeriodBlocks(uint64(120)), // TODO: Hardcoded. + ) + config, err := json.Marshal(chaininfo.ArbitrumDevTestChainConfig()) + Require(t, err) + cfg.ChainConfig = string(config) + addresses, err := setup.DeployFullRollupStack( + ctx, + butil.NewBackendWrapper(backend, rpc.LatestBlockNumber), + &l1TransactionOpts, + l1info.GetAddress("Sequencer"), + cfg, + rollupStackConf, + ) + Require(t, err) + + asserter := l1info.GetDefaultTransactOpts("Asserter", ctx) + evilAsserter := l1info.GetDefaultTransactOpts("EvilAsserter", ctx) + userLogic, err := rollupgen.NewRollupUserLogic(addresses.Rollup, backend) + Require(t, err) + chalManagerAddr, err := userLogic.ChallengeManager(&bind.CallOpts{}) + Require(t, err) + seed, ok := new(big.Int).SetString("1000", 10) + if !ok { + t.Fatal("not ok") + } + value, ok := new(big.Int).SetString("10000", 10) + if !ok { + t.Fatal(t, "could not set value") + } + tokenBindings, err := mocksgen.NewTestWETH9(stakeToken, backend) + Require(t, err) + tx, err := tokenBindings.TestWETH9Transactor.Transfer(&l1TransactionOpts, asserter.From, seed) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, backend, tx) + Require(t, err) + tx, err = tokenBindings.TestWETH9Transactor.Approve(&asserter, addresses.Rollup, value) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, backend, tx) + Require(t, err) + tx, err = tokenBindings.TestWETH9Transactor.Approve(&asserter, chalManagerAddr, value) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, backend, tx) + Require(t, err) + + tx, err = tokenBindings.TestWETH9Transactor.Transfer(&l1TransactionOpts, evilAsserter.From, seed) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, backend, tx) + Require(t, err) + tx, err = tokenBindings.TestWETH9Transactor.Approve(&evilAsserter, addresses.Rollup, value) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, backend, tx) + Require(t, err) + tx, err = tokenBindings.TestWETH9Transactor.Approve(&evilAsserter, chalManagerAddr, value) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, backend, tx) + Require(t, err) + + return &chaininfo.RollupAddresses{ + Bridge: addresses.Bridge, + Inbox: addresses.Inbox, + SequencerInbox: addresses.SequencerInbox, + Rollup: addresses.Rollup, + ValidatorUtils: addresses.ValidatorUtils, + ValidatorWalletCreator: addresses.ValidatorWalletCreator, + DeployedAt: addresses.DeployedAt, + UpgradeExecutor: addresses.UpgradeExecutor, + } +} + +func create2ndNodeWithConfigForBoldProtocol( + t *testing.T, + ctx context.Context, + first *arbnode.Node, + l1stack *node.Node, + l1info *BlockchainTestInfo, + l2InitData *statetransfer.ArbosInitializationInfo, + nodeConfig *arbnode.Config, + stackConfig *node.Config, + rollupStackConf setup.RollupStackConfig, + stakeTokenAddr common.Address, +) (*ethclient.Client, *arbnode.Node, *solimpl.AssertionChain) { + fatalErrChan := make(chan error, 10) + l1rpcClient := l1stack.Attach() + l1client := ethclient.NewClient(l1rpcClient) + firstExec, ok := first.Execution.(*gethexec.ExecutionNode) + if !ok { + Fatal(t, "not geth execution node") + } + chainConfig := firstExec.ArbInterface.BlockChain().Config() + addresses := deployContractsOnly(t, ctx, l1info, l1client, chainConfig.ChainID, rollupStackConf, stakeTokenAddr) + + l1info.SetContract("EvilBridge", addresses.Bridge) + l1info.SetContract("EvilSequencerInbox", addresses.SequencerInbox) + l1info.SetContract("EvilInbox", addresses.Inbox) + l1info.SetContract("EvilRollup", addresses.Rollup) + l1info.SetContract("EvilUpgradeExecutor", addresses.UpgradeExecutor) + + if nodeConfig == nil { + nodeConfig = arbnode.ConfigDefaultL1NonSequencerTest() + } + nodeConfig.ParentChainReader.OldHeaderTimeout = 10 * time.Minute + nodeConfig.BatchPoster.DataPoster.MaxMempoolTransactions = 18 + if stackConfig == nil { + stackConfig = testhelpers.CreateStackConfigForTest(t.TempDir()) + } + l2stack, err := node.New(stackConfig) + Require(t, err) + + l2chainDb, err := l2stack.OpenDatabase("chaindb", 0, 0, "", false) + Require(t, err) + l2arbDb, err := l2stack.OpenDatabase("arbdb", 0, 0, "", false) + Require(t, err) + + AddValNodeIfNeeded(t, ctx, nodeConfig, true, "", "") + + dataSigner := signature.DataSignerFromPrivateKey(l1info.GetInfoWithPrivKey("Sequencer").PrivateKey) + txOpts := l1info.GetDefaultTransactOpts("Sequencer", ctx) + + initReader := statetransfer.NewMemoryInitDataReader(l2InitData) + initMessage := getInitMessage(ctx, t, l1client, first.DeployInfo) + + execConfig := ExecConfigDefaultNonSequencerTest(t) + Require(t, execConfig.Validate()) + execConfig.Caching.StateScheme = rawdb.HashScheme + coreCacheConfig := gethexec.DefaultCacheConfigFor(l2stack, &execConfig.Caching) + l2blockchain, err := gethexec.WriteOrTestBlockChain(l2chainDb, coreCacheConfig, initReader, chainConfig, initMessage, execConfig.TxLookupLimit, 0) + Require(t, err) + + execConfigFetcher := func() *gethexec.Config { return execConfig } + execNode, err := gethexec.CreateExecutionNode(ctx, l2stack, l2chainDb, l2blockchain, l1client, execConfigFetcher) + Require(t, err) + l1ChainId, err := l1client.ChainID(ctx) + Require(t, err) + l2node, err := arbnode.CreateNode(ctx, l2stack, execNode, l2arbDb, NewFetcherFromConfig(nodeConfig), l2blockchain.Config(), l1client, addresses, &txOpts, &txOpts, dataSigner, fatalErrChan, l1ChainId, nil /* blob reader */) + Require(t, err) + + l2client := ClientForStack(t, l2stack) + + StartWatchChanErr(t, ctx, fatalErrChan, l2node) + + rollupUserLogic, err := rollupgen.NewRollupUserLogic(addresses.Rollup, l1client) + Require(t, err) + chalManagerAddr, err := rollupUserLogic.ChallengeManager(&bind.CallOpts{}) + Require(t, err) + evilOpts := l1info.GetDefaultTransactOpts("EvilAsserter", ctx) + dp, err := arbnode.StakerDataposter( + ctx, + rawdb.NewTable(l2arbDb, storage.StakerPrefix), + l2node.L1Reader, + &evilOpts, + NewFetcherFromConfig(nodeConfig), + l2node.SyncMonitor, + l1ChainId, + ) + Require(t, err) + assertionChain, err := solimpl.NewAssertionChain( + ctx, + addresses.Rollup, + chalManagerAddr, + &evilOpts, + butil.NewBackendWrapper(l1client, rpc.LatestBlockNumber), + bold.NewDataPosterTransactor(dp), + ) + Require(t, err) + + return l2client, l2node, assertionChain +} + +func makeBoldBatch( + t *testing.T, + l2Node *arbnode.Node, + l2Info *BlockchainTestInfo, + backend *ethclient.Client, + sequencer *bind.TransactOpts, + seqInbox *bridgegen.SequencerInbox, + seqInboxAddr common.Address, + numMessages, + divergeAtIndex int64, +) { + ctx := context.Background() + + batchBuffer := bytes.NewBuffer([]byte{}) + for i := int64(0); i < numMessages; i++ { + value := i + if i == divergeAtIndex { + value++ + } + err := writeTxToBatchBold(batchBuffer, l2Info.PrepareTx("Owner", "Destination", 1000000, big.NewInt(value), []byte{})) + Require(t, err) + } + compressed, err := arbcompress.CompressWell(batchBuffer.Bytes()) + Require(t, err) + message := append([]byte{0}, compressed...) + + seqNum := new(big.Int).Lsh(common.Big1, 256) + seqNum.Sub(seqNum, common.Big1) + tx, err := seqInbox.AddSequencerL2BatchFromOrigin8f111f3c(sequencer, seqNum, message, big.NewInt(1), common.Address{}, big.NewInt(0), big.NewInt(0)) + Require(t, err) + receipt, err := EnsureTxSucceeded(ctx, backend, tx) + Require(t, err) + + nodeSeqInbox, err := arbnode.NewSequencerInbox(backend, seqInboxAddr, 0) + Require(t, err) + batches, err := nodeSeqInbox.LookupBatchesInRange(ctx, receipt.BlockNumber, receipt.BlockNumber) + Require(t, err) + if len(batches) == 0 { + Fatal(t, "batch not found after AddSequencerL2BatchFromOrigin") + } + err = l2Node.InboxTracker.AddSequencerBatches(ctx, backend, batches) + Require(t, err) + batchMetaData, err := l2Node.InboxTracker.GetBatchMetadata(batches[0].SequenceNumber) + log.Info("Batch metadata", "md", batchMetaData) + Require(t, err, "failed to get batch metadata after adding batch:") +} + +func writeTxToBatchBold(writer io.Writer, tx *types.Transaction) error { + txData, err := tx.MarshalBinary() + if err != nil { + return err + } + var segment []byte + segment = append(segment, arbstate.BatchSegmentKindL2Message) + segment = append(segment, arbos.L2MessageKind_SignedTx) + segment = append(segment, txData...) + err = rlp.Encode(writer, segment) + return err +} diff --git a/system_tests/bold_new_challenge_test.go b/system_tests/bold_new_challenge_test.go new file mode 100644 index 0000000000..ad6e44bc71 --- /dev/null +++ b/system_tests/bold_new_challenge_test.go @@ -0,0 +1,358 @@ +// Copyright 2024, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE + +//go:build challengetest && !race + +package arbtest + +import ( + "context" + "fmt" + "math/big" + "testing" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" + protocol "github.com/offchainlabs/bold/chain-abstraction" + solimpl "github.com/offchainlabs/bold/chain-abstraction/sol-implementation" + challengemanager "github.com/offchainlabs/bold/challenge-manager" + modes "github.com/offchainlabs/bold/challenge-manager/types" + "github.com/offchainlabs/bold/containers/option" + l2stateprovider "github.com/offchainlabs/bold/layer2-state-provider" + "github.com/offchainlabs/bold/solgen/go/challengeV2gen" + "github.com/offchainlabs/bold/solgen/go/mocksgen" + "github.com/offchainlabs/bold/solgen/go/rollupgen" + "github.com/offchainlabs/bold/state-commitments/history" + butil "github.com/offchainlabs/bold/util" + "github.com/offchainlabs/nitro/arbnode" + "github.com/offchainlabs/nitro/arbnode/dataposter/storage" + "github.com/offchainlabs/nitro/staker/bold" +) + +type incorrectBlockStateProvider struct { + honest BoldStateProviderInterface + chain protocol.AssertionChain + wrongAtFirstVirtual bool + wrongAtBlockHeight uint64 + honestMachineHash common.Hash + evilMachineHash common.Hash +} + +func (s *incorrectBlockStateProvider) ExecutionStateAfterPreviousState( + ctx context.Context, + maxInboxCount uint64, + previousGlobalState protocol.GoGlobalState, +) (*protocol.ExecutionState, error) { + maxNumberOfBlocks := s.chain.SpecChallengeManager().LayerZeroHeights().BlockChallengeHeight.Uint64() + executionState, err := s.honest.ExecutionStateAfterPreviousState(ctx, maxInboxCount, previousGlobalState) + if err != nil { + return nil, err + } + evilStates, err := s.L2MessageStatesUpTo(ctx, previousGlobalState, l2stateprovider.Batch(maxInboxCount), option.Some(l2stateprovider.Height(maxNumberOfBlocks))) + if err != nil { + return nil, err + } + historyCommit, err := history.NewCommitment(evilStates, maxNumberOfBlocks+1) + if err != nil { + return nil, err + } + executionState.EndHistoryRoot = historyCommit.Merkle + return executionState, nil +} + +func (s *incorrectBlockStateProvider) L2MessageStatesUpTo( + ctx context.Context, + fromState protocol.GoGlobalState, + batchLimit l2stateprovider.Batch, + toHeight option.Option[l2stateprovider.Height], +) ([]common.Hash, error) { + states, err := s.honest.L2MessageStatesUpTo(ctx, fromState, batchLimit, toHeight) + if err != nil { + return nil, err + } + // Double check that virtual blocks aren't being enumerated by the honest impl + for i := len(states) - 1; i >= 1; i-- { + if states[i] == states[i-1] { + panic("Virtual block found repeated in honest impl (test case currently doesn't accomodate this)") + } else { + break + } + } + if s.wrongAtFirstVirtual && (toHeight.IsNone() || uint64(len(states)) < uint64(toHeight.Unwrap())) { + // We've found the first virtual block, now let's make it wrong + s.wrongAtFirstVirtual = false + s.wrongAtBlockHeight = uint64(len(states)) + } + if toHeight.IsNone() || uint64(toHeight.Unwrap()) >= s.wrongAtBlockHeight { + for uint64(len(states)) <= s.wrongAtBlockHeight { + states = append(states, states[len(states)-1]) + } + s.honestMachineHash = states[s.wrongAtBlockHeight] + states[s.wrongAtBlockHeight][0] ^= 0xFF + s.evilMachineHash = states[s.wrongAtBlockHeight] + if uint64(len(states)) == s.wrongAtBlockHeight+1 && (toHeight.IsNone() || uint64(len(states)) < uint64(toHeight.Unwrap())) { + // don't break the end inclusion proof + states = append(states, s.honestMachineHash) + } + } + return states, nil +} + +func (s *incorrectBlockStateProvider) CollectMachineHashes( + ctx context.Context, cfg *l2stateprovider.HashCollectorConfig, +) ([]common.Hash, error) { + honestHashes, err := s.honest.CollectMachineHashes(ctx, cfg) + if err != nil { + return nil, err + } + if uint64(cfg.BlockChallengeHeight)+1 == s.wrongAtBlockHeight { + if uint64(len(honestHashes)) < cfg.NumDesiredHashes && honestHashes[len(honestHashes)-1] == s.honestMachineHash { + honestHashes = append(honestHashes, s.evilMachineHash) + } + } else if uint64(cfg.BlockChallengeHeight) >= s.wrongAtBlockHeight { + panic(fmt.Sprintf("challenge occured at block height %v at or after wrongAtBlockHeight %v", cfg.BlockChallengeHeight, s.wrongAtBlockHeight)) + } + return honestHashes, nil +} + +func (s *incorrectBlockStateProvider) CollectProof( + ctx context.Context, + assertionMetadata *l2stateprovider.AssociatedAssertionMetadata, + blockChallengeHeight l2stateprovider.Height, + machineIndex l2stateprovider.OpcodeIndex, +) ([]byte, error) { + return s.honest.CollectProof(ctx, assertionMetadata, blockChallengeHeight, machineIndex) +} + +func testChallengeProtocolBOLDVirtualBlocks(t *testing.T, wrongAtFirstVirtual bool) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + builder := NewNodeBuilder(ctx).DefaultConfig(t, true).WithBoldDeployment() + + // Block validation requires db hash scheme + builder.execConfig.Caching.StateScheme = rawdb.HashScheme + builder.nodeConfig.BlockValidator.Enable = true + builder.valnodeConfig.UseJit = false + + cleanup := builder.Build(t) + defer cleanup() + + evilNodeConfig := arbnode.ConfigDefaultL1NonSequencerTest() + evilNodeConfig.BlockValidator.Enable = true + evilNode, cleanupEvilNode := builder.Build2ndNode(t, &SecondNodeParams{ + nodeConfig: evilNodeConfig, + }) + defer cleanupEvilNode() + + go keepChainMoving(t, ctx, builder.L1Info, builder.L1.Client) + + builder.L1Info.GenerateAccount("HonestAsserter") + fundBoldStaker(t, ctx, builder, "HonestAsserter") + builder.L1Info.GenerateAccount("EvilAsserter") + fundBoldStaker(t, ctx, builder, "EvilAsserter") + + assertionChain, cleanupHonestChallengeManager := startBoldChallengeManager(t, ctx, builder, builder.L2, "HonestAsserter", nil) + defer cleanupHonestChallengeManager() + + _, cleanupEvilChallengeManager := startBoldChallengeManager(t, ctx, builder, evilNode, "EvilAsserter", func(stateManager BoldStateProviderInterface) BoldStateProviderInterface { + p := &incorrectBlockStateProvider{ + honest: stateManager, + chain: assertionChain, + wrongAtFirstVirtual: wrongAtFirstVirtual, + } + if !wrongAtFirstVirtual { + p.wrongAtBlockHeight = blockChallengeLeafHeight - 2 + } + return p + }) + defer cleanupEvilChallengeManager() + + TransferBalance(t, "Faucet", "Faucet", common.Big0, builder.L2Info, builder.L2.Client, ctx) + + // Everything's setup, now just wait for the challenge to complete and ensure the honest party won + + chalManager := assertionChain.SpecChallengeManager() + filterer, err := challengeV2gen.NewEdgeChallengeManagerFilterer(chalManager.Address(), builder.L1.Client) + Require(t, err) + + fromBlock := uint64(0) + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + for { + select { + case <-ticker.C: + latestBlock, err := builder.L1.Client.HeaderByNumber(ctx, nil) + Require(t, err) + toBlock := latestBlock.Number.Uint64() + if fromBlock == toBlock { + continue + } + filterOpts := &bind.FilterOpts{ + Start: fromBlock, + End: &toBlock, + Context: ctx, + } + it, err := filterer.FilterEdgeConfirmedByOneStepProof(filterOpts, nil, nil) + Require(t, err) + for it.Next() { + if it.Error() != nil { + t.Fatalf("Error in filter iterator: %v", it.Error()) + } + t.Log("Received event of OSP confirmation!") + tx, _, err := builder.L1.Client.TransactionByHash(ctx, it.Event.Raw.TxHash) + Require(t, err) + signer := types.NewCancunSigner(tx.ChainId()) + address, err := signer.Sender(tx) + Require(t, err) + if address == builder.L1Info.GetAddress("HonestAsserter") { + t.Log("Honest party won OSP, impossible for evil party to win if honest party continues") + Require(t, it.Close()) + return + } + } + fromBlock = toBlock + case <-ctx.Done(): + return + } + } +} + +func fundBoldStaker(t *testing.T, ctx context.Context, builder *NodeBuilder, name string) { + balance := big.NewInt(params.Ether) + balance.Mul(balance, big.NewInt(100)) + TransferBalance(t, "Faucet", name, balance, builder.L1Info, builder.L1.Client, ctx) + + rollupUserLogic, err := rollupgen.NewRollupUserLogic(builder.addresses.Rollup, builder.L1.Client) + Require(t, err) + stakeToken, err := rollupUserLogic.StakeToken(&bind.CallOpts{Context: ctx}) + Require(t, err) + stakeTokenWeth, err := mocksgen.NewTestWETH9(stakeToken, builder.L1.Client) + Require(t, err) + + txOpts := builder.L1Info.GetDefaultTransactOpts(name, ctx) + + txOpts.Value = big.NewInt(params.Ether) + tx, err := stakeTokenWeth.Deposit(&txOpts) + Require(t, err) + _, err = builder.L1.EnsureTxSucceeded(tx) + Require(t, err) + txOpts.Value = nil + + tx, err = stakeTokenWeth.Approve(&txOpts, builder.addresses.Rollup, balance) + _, err = builder.L1.EnsureTxSucceeded(tx) + Require(t, err) + + challengeManager, err := rollupUserLogic.ChallengeManager(&bind.CallOpts{Context: ctx}) + Require(t, err) + tx, err = stakeTokenWeth.Approve(&txOpts, challengeManager, balance) + _, err = builder.L1.EnsureTxSucceeded(tx) + Require(t, err) +} + +func TestChallengeProtocolBOLDNearLastVirtualBlock(t *testing.T) { + testChallengeProtocolBOLDVirtualBlocks(t, false) +} + +func TestChallengeProtocolBOLDFirstVirtualBlock(t *testing.T) { + testChallengeProtocolBOLDVirtualBlocks(t, true) +} + +type BoldStateProviderInterface interface { + l2stateprovider.L2MessageStateCollector + l2stateprovider.MachineHashCollector + l2stateprovider.ProofCollector + l2stateprovider.ExecutionProvider +} + +func startBoldChallengeManager(t *testing.T, ctx context.Context, builder *NodeBuilder, node *TestClient, addressName string, mockStateProvider func(BoldStateProviderInterface) BoldStateProviderInterface) (*solimpl.AssertionChain, func()) { + if !builder.deployBold { + t.Fatal("bold deployment not enabled") + } + + var stateManager BoldStateProviderInterface + var err error + cacheDir := t.TempDir() + stateManager, err = bold.NewBOLDStateProvider( + node.ConsensusNode.BlockValidator, + node.ConsensusNode.StatelessBlockValidator, + l2stateprovider.Height(blockChallengeLeafHeight), + &bold.StateProviderConfig{ + ValidatorName: addressName, + MachineLeavesCachePath: cacheDir, + CheckBatchFinality: false, + }, + cacheDir, + ) + Require(t, err) + + if mockStateProvider != nil { + stateManager = mockStateProvider(stateManager) + } + + provider := l2stateprovider.NewHistoryCommitmentProvider( + stateManager, + stateManager, + stateManager, + []l2stateprovider.Height{ + l2stateprovider.Height(blockChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(smallStepChallengeLeafHeight), + }, + stateManager, + nil, // Api db + ) + + rollupUserLogic, err := rollupgen.NewRollupUserLogic(builder.addresses.Rollup, builder.L1.Client) + Require(t, err) + chalManagerAddr, err := rollupUserLogic.ChallengeManager(&bind.CallOpts{}) + Require(t, err) + + txOpts := builder.L1Info.GetDefaultTransactOpts(addressName, ctx) + + dp, err := arbnode.StakerDataposter( + ctx, + rawdb.NewTable(node.ConsensusNode.ArbDB, storage.StakerPrefix), + node.ConsensusNode.L1Reader, + &txOpts, + NewFetcherFromConfig(builder.nodeConfig), + node.ConsensusNode.SyncMonitor, + builder.L1Info.Signer.ChainID(), + ) + Require(t, err) + + assertionChain, err := solimpl.NewAssertionChain( + ctx, + builder.addresses.Rollup, + chalManagerAddr, + &txOpts, + butil.NewBackendWrapper(builder.L1.Client, rpc.LatestBlockNumber), + bold.NewDataPosterTransactor(dp), + ) + Require(t, err) + + stackOpts := []challengemanager.StackOpt{ + challengemanager.StackWithName(addressName), + challengemanager.StackWithMode(modes.MakeMode), + challengemanager.StackWithPostingInterval(time.Second * 3), + challengemanager.StackWithPollingInterval(time.Second), + challengemanager.StackWithAverageBlockCreationTime(time.Second), + } + + challengeManager, err := challengemanager.NewChallengeStack( + assertionChain, + provider, + stackOpts..., + ) + Require(t, err) + + challengeManager.Start(ctx) + return assertionChain, challengeManager.StopAndWait +} diff --git a/system_tests/bold_state_provider_test.go b/system_tests/bold_state_provider_test.go new file mode 100644 index 0000000000..0ecce5ba64 --- /dev/null +++ b/system_tests/bold_state_provider_test.go @@ -0,0 +1,419 @@ +// Copyright 2023, Offchain Labs, Inc. +// For license information, see https://github.com/offchainlabs/bold/blob/main/LICENSE + +//go:build challengetest && !race + +package arbtest + +import ( + "context" + "errors" + "math/big" + "strings" + "testing" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" + + "github.com/offchainlabs/nitro/arbnode" + "github.com/offchainlabs/nitro/arbos/l2pricing" + "github.com/offchainlabs/nitro/cmd/chaininfo" + "github.com/offchainlabs/nitro/staker" + "github.com/offchainlabs/nitro/staker/bold" + "github.com/offchainlabs/nitro/util" + "github.com/offchainlabs/nitro/validator/valnode" + + protocol "github.com/offchainlabs/bold/chain-abstraction" + "github.com/offchainlabs/bold/containers/option" + l2stateprovider "github.com/offchainlabs/bold/layer2-state-provider" + "github.com/offchainlabs/bold/solgen/go/bridgegen" + "github.com/offchainlabs/bold/solgen/go/mocksgen" + prefixproofs "github.com/offchainlabs/bold/state-commitments/prefix-proofs" + mockmanager "github.com/offchainlabs/bold/testing/mocks/state-provider" + "github.com/offchainlabs/bold/testing/setup" +) + +func TestChallengeProtocolBOLD_Bisections(t *testing.T) { + t.Parallel() + ctx, cancelCtx := context.WithCancel(context.Background()) + defer cancelCtx() + l2node, l1info, l2info, l1stack, l1client, stateManager, blockValidator := setupBoldStateProvider(t, ctx, 1<<5) + defer requireClose(t, l1stack) + defer l2node.StopAndWait() + l2info.GenerateAccount("Destination") + sequencerTxOpts := l1info.GetDefaultTransactOpts("Sequencer", ctx) + + seqInbox := l1info.GetAddress("SequencerInbox") + seqInboxBinding, err := bridgegen.NewSequencerInbox(seqInbox, l1client) + Require(t, err) + + seqInboxABI, err := abi.JSON(strings.NewReader(bridgegen.SequencerInboxABI)) + Require(t, err) + + honestUpgradeExec, err := mocksgen.NewUpgradeExecutorMock(l1info.GetAddress("UpgradeExecutor"), l1client) + Require(t, err) + data, err := seqInboxABI.Pack( + "setIsBatchPoster", + sequencerTxOpts.From, + true, + ) + Require(t, err) + honestRollupOwnerOpts := l1info.GetDefaultTransactOpts("RollupOwner", ctx) + _, err = honestUpgradeExec.ExecuteCall(&honestRollupOwnerOpts, seqInbox, data) + Require(t, err) + + // Make two batchs. One with 5 messages, and one with 10 messages. + numMessagesPerBatch := int64(5) + divergeAt := int64(-1) // No divergence. + makeBoldBatch(t, l2node, l2info, l1client, &sequencerTxOpts, seqInboxBinding, seqInbox, numMessagesPerBatch, divergeAt) + numMessagesPerBatch = int64(10) + makeBoldBatch(t, l2node, l2info, l1client, &sequencerTxOpts, seqInboxBinding, seqInbox, numMessagesPerBatch, divergeAt) + + bridgeBinding, err := bridgegen.NewBridge(l1info.GetAddress("Bridge"), l1client) + Require(t, err) + totalBatchesBig, err := bridgeBinding.SequencerMessageCount(&bind.CallOpts{Context: ctx}) + Require(t, err) + totalBatches := totalBatchesBig.Uint64() + totalMessageCount, err := l2node.InboxTracker.GetBatchMessageCount(totalBatches - 1) + Require(t, err) + log.Info("Status", "totalBatches", totalBatches, "totalMessageCount", totalMessageCount) + t.Logf("totalBatches: %v, totalMessageCount: %v\n", totalBatches, totalMessageCount) + + // Wait until the validator has validated the batches. + for { + time.Sleep(time.Millisecond * 100) + lastInfo, err := blockValidator.ReadLastValidatedInfo() + if lastInfo == nil || err != nil { + continue + } + if lastInfo.GlobalState.Batch >= totalBatches { + break + } + batchMsgCount, err := l2node.InboxTracker.GetBatchMessageCount(lastInfo.GlobalState.Batch) + if err != nil { + continue + } + if batchMsgCount >= totalMessageCount { + break + } + } + + historyCommitter := l2stateprovider.NewHistoryCommitmentProvider( + stateManager, + stateManager, + stateManager, []l2stateprovider.Height{ + 1 << 5, + 1 << 5, + 1 << 5, + }, + stateManager, + nil, // api db + ) + bisectionHeight := l2stateprovider.Height(16) + request := &l2stateprovider.HistoryCommitmentRequest{ + AssertionMetadata: &l2stateprovider.AssociatedAssertionMetadata{ + FromState: protocol.GoGlobalState{ + Batch: 1, + }, + BatchLimit: 3, + WasmModuleRoot: common.Hash{}, + }, + UpperChallengeOriginHeights: []l2stateprovider.Height{}, + UpToHeight: option.Some(bisectionHeight), + } + bisectionCommitment, err := historyCommitter.HistoryCommitment(ctx, request) + Require(t, err) + + request.UpToHeight = option.None[l2stateprovider.Height]() + packedProof, err := historyCommitter.PrefixProof(ctx, request, bisectionHeight) + Require(t, err) + + dataItem, err := mockmanager.ProofArgs.Unpack(packedProof) + Require(t, err) + preExpansion, ok := dataItem[0].([][32]byte) + if !ok { + Fatal(t, "wrong type") + } + + hashes := make([]common.Hash, len(preExpansion)) + for i, h := range preExpansion { + hash := h + hashes[i] = hash + } + + computed, err := prefixproofs.Root(hashes) + Require(t, err) + if computed != bisectionCommitment.Merkle { + Fatal(t, "wrong commitment") + } +} + +func TestChallengeProtocolBOLD_StateProvider(t *testing.T) { + // t.Parallel() + ctx, cancelCtx := context.WithCancel(context.Background()) + defer cancelCtx() + maxNumBlocks := uint64(1 << 14) + l2node, l1info, l2info, l1stack, l1client, stateManager, blockValidator := setupBoldStateProvider(t, ctx, maxNumBlocks) + defer requireClose(t, l1stack) + defer l2node.StopAndWait() + l2info.GenerateAccount("Destination") + sequencerTxOpts := l1info.GetDefaultTransactOpts("Sequencer", ctx) + + seqInbox := l1info.GetAddress("SequencerInbox") + seqInboxBinding, err := bridgegen.NewSequencerInbox(seqInbox, l1client) + Require(t, err) + + seqInboxABI, err := abi.JSON(strings.NewReader(bridgegen.SequencerInboxABI)) + Require(t, err) + + honestUpgradeExec, err := mocksgen.NewUpgradeExecutorMock(l1info.GetAddress("UpgradeExecutor"), l1client) + Require(t, err) + data, err := seqInboxABI.Pack( + "setIsBatchPoster", + sequencerTxOpts.From, + true, + ) + Require(t, err) + honestRollupOwnerOpts := l1info.GetDefaultTransactOpts("RollupOwner", ctx) + _, err = honestUpgradeExec.ExecuteCall(&honestRollupOwnerOpts, seqInbox, data) + Require(t, err) + + // We will make two batches, with 5 messages in each batch. + numMessagesPerBatch := int64(5) + divergeAt := int64(-1) // No divergence. + makeBoldBatch(t, l2node, l2info, l1client, &sequencerTxOpts, seqInboxBinding, seqInbox, numMessagesPerBatch, divergeAt) + makeBoldBatch(t, l2node, l2info, l1client, &sequencerTxOpts, seqInboxBinding, seqInbox, numMessagesPerBatch, divergeAt) + + bridgeBinding, err := bridgegen.NewBridge(l1info.GetAddress("Bridge"), l1client) + Require(t, err) + totalBatchesBig, err := bridgeBinding.SequencerMessageCount(&bind.CallOpts{Context: ctx}) + Require(t, err) + totalBatches := totalBatchesBig.Uint64() + totalMessageCount, err := l2node.InboxTracker.GetBatchMessageCount(totalBatches - 1) + Require(t, err) + + // Wait until the validator has validated the batches. + for { + time.Sleep(time.Millisecond * 100) + lastInfo, err := blockValidator.ReadLastValidatedInfo() + if lastInfo == nil || err != nil { + continue + } + if lastInfo.GlobalState.Batch >= totalBatches { + break + } + } + + t.Run("StatesInBatchRange", func(t *testing.T) { + toBatch := uint64(3) + toHeight := l2stateprovider.Height(10) + fromState := protocol.GoGlobalState{ + Batch: 1, + } + stateRoots, states, err := stateManager.StatesInBatchRange(ctx, fromState, toBatch, toHeight) + Require(t, err) + want := 11 + got := len(stateRoots) + + if got != want { + t.Errorf("len(stateRoots): got %v, want %v", got, want) + } + firstState := states[0] + if firstState.Batch != 1 && firstState.PosInBatch != 0 { + Fatal(t, "wrong first state") + } + lastState := states[len(states)-1] + if lastState.Batch != 3 && lastState.PosInBatch != 0 { + Fatal(t, "wrong last state") + } + }) + t.Run("AgreesWithExecutionState", func(t *testing.T) { + // Non-zero position in batch should fail. + _, err = stateManager.ExecutionStateAfterPreviousState( + ctx, + 0, + protocol.GoGlobalState{ + Batch: 0, + PosInBatch: 1, + }, + ) + if err == nil { + Fatal(t, "should not agree with execution state") + } + if !strings.Contains(err.Error(), "max inbox count cannot be zero") { + Fatal(t, "wrong error message") + } + + // Always agrees with genesis. + genesis, err := stateManager.ExecutionStateAfterPreviousState( + ctx, + 1, + protocol.GoGlobalState{ + Batch: 0, + PosInBatch: 0, + }, + ) + Require(t, err) + if genesis == nil { + Fatal(t, "genesis should not be nil") + } + + // Always agrees with the init message. + first, err := stateManager.ExecutionStateAfterPreviousState( + ctx, + 2, + genesis.GlobalState, + ) + Require(t, err) + if first == nil { + Fatal(t, "genesis should not be nil") + } + + // Chain catching up if it has not seen batch 10. + _, err = stateManager.ExecutionStateAfterPreviousState( + ctx, + 10, + first.GlobalState, + ) + if err == nil { + Fatal(t, "should not agree with execution state") + } + if !errors.Is(err, l2stateprovider.ErrChainCatchingUp) { + Fatal(t, "wrong error") + } + + // Check if we agree with the last posted batch to the inbox. + result, err := l2node.TxStreamer.ResultAtCount(totalMessageCount) + Require(t, err) + _ = result + + state := protocol.GoGlobalState{ + BlockHash: result.BlockHash, + SendRoot: result.SendRoot, + Batch: 3, + } + got, err := stateManager.ExecutionStateAfterPreviousState(ctx, 3, first.GlobalState) + Require(t, err) + if state.Batch != got.GlobalState.Batch { + Fatal(t, "wrong batch") + } + if state.SendRoot != got.GlobalState.SendRoot { + Fatal(t, "wrong send root") + } + if state.BlockHash != got.GlobalState.BlockHash { + Fatal(t, "wrong batch") + } + + // See if we agree with one batch immediately after that and see that we fail with + // "ErrChainCatchingUp". + _, err = stateManager.ExecutionStateAfterPreviousState( + ctx, + state.Batch+1, + got.GlobalState, + ) + if err == nil { + Fatal(t, "should not agree with execution state") + } + if !errors.Is(err, l2stateprovider.ErrChainCatchingUp) { + Fatal(t, "wrong error") + } + }) + t.Run("ExecutionStateAfterBatchCount", func(t *testing.T) { + _, err = stateManager.ExecutionStateAfterPreviousState(ctx, 0, protocol.GoGlobalState{}) + if err == nil { + Fatal(t, "should have failed") + } + if !strings.Contains(err.Error(), "max inbox count cannot be zero") { + Fatal(t, "wrong error message", err) + } + + genesis, err := stateManager.ExecutionStateAfterPreviousState(ctx, 1, protocol.GoGlobalState{}) + Require(t, err) + execState, err := stateManager.ExecutionStateAfterPreviousState(ctx, totalBatches, genesis.GlobalState) + Require(t, err) + if execState == nil { + Fatal(t, "should not be nil") + } + }) +} + +func setupBoldStateProvider(t *testing.T, ctx context.Context, blockChallengeHeight uint64) (*arbnode.Node, *BlockchainTestInfo, *BlockchainTestInfo, *node.Node, *ethclient.Client, *bold.BOLDStateProvider, *staker.BlockValidator) { + var transferGas = util.NormalizeL2GasForL1GasInitial(800_000, params.GWei) // include room for aggregator L1 costs + l2chainConfig := chaininfo.ArbitrumDevTestChainConfig() + l2info := NewBlockChainTestInfo( + t, + types.NewArbitrumSigner(types.NewLondonSigner(l2chainConfig.ChainID)), big.NewInt(l2pricing.InitialBaseFeeWei*2), + transferGas, + ) + ownerBal := big.NewInt(params.Ether) + ownerBal.Mul(ownerBal, big.NewInt(1_000_000)) + l2info.GenerateGenesisAccount("Owner", ownerBal) + sconf := setup.RollupStackConfig{ + UseMockBridge: false, + UseMockOneStepProver: false, + MinimumAssertionPeriod: 0, + } + + _, l2node, _, _, l1info, _, l1client, l1stack, _, _ := createTestNodeOnL1ForBoldProtocol( + t, + ctx, + false, + nil, + l2chainConfig, + nil, + sconf, + l2info, + ) + + valnode.TestValidationConfig.UseJit = false + _, valStack := createTestValidationNode(t, ctx, &valnode.TestValidationConfig) + blockValidatorConfig := staker.TestBlockValidatorConfig + + stateless, err := staker.NewStatelessBlockValidator( + l2node.InboxReader, + l2node.InboxTracker, + l2node.TxStreamer, + l2node.Execution, + l2node.ArbDB, + nil, + StaticFetcherFrom(t, &blockValidatorConfig), + valStack, + ) + Require(t, err) + Require(t, stateless.Start(ctx)) + + blockValidator, err := staker.NewBlockValidator( + stateless, + l2node.InboxTracker, + l2node.TxStreamer, + StaticFetcherFrom(t, &blockValidatorConfig), + nil, + ) + Require(t, err) + Require(t, blockValidator.Initialize(ctx)) + Require(t, blockValidator.Start(ctx)) + + dir := t.TempDir() + stateManager, err := bold.NewBOLDStateProvider( + blockValidator, + stateless, + l2stateprovider.Height(blockChallengeHeight), + &bold.StateProviderConfig{ + ValidatorName: "", + MachineLeavesCachePath: dir, + CheckBatchFinality: false, + }, + dir, + ) + Require(t, err) + + Require(t, l2node.Start(ctx)) + return l2node, l1info, l2info, l1stack, l1client, stateManager, blockValidator +} diff --git a/system_tests/common_test.go b/system_tests/common_test.go index 9d491f522b..72d2645910 100644 --- a/system_tests/common_test.go +++ b/system_tests/common_test.go @@ -22,27 +22,6 @@ import ( "testing" "time" - "github.com/offchainlabs/nitro/arbos" - "github.com/offchainlabs/nitro/arbos/arbostypes" - "github.com/offchainlabs/nitro/arbos/util" - "github.com/offchainlabs/nitro/arbstate/daprovider" - "github.com/offchainlabs/nitro/arbutil" - "github.com/offchainlabs/nitro/blsSignatures" - "github.com/offchainlabs/nitro/cmd/chaininfo" - "github.com/offchainlabs/nitro/cmd/conf" - "github.com/offchainlabs/nitro/cmd/genericconf" - "github.com/offchainlabs/nitro/das" - "github.com/offchainlabs/nitro/deploy" - "github.com/offchainlabs/nitro/execution/gethexec" - "github.com/offchainlabs/nitro/util/arbmath" - "github.com/offchainlabs/nitro/util/headerreader" - "github.com/offchainlabs/nitro/util/redisutil" - "github.com/offchainlabs/nitro/util/signature" - "github.com/offchainlabs/nitro/validator/inputs" - "github.com/offchainlabs/nitro/validator/server_api" - "github.com/offchainlabs/nitro/validator/server_common" - "github.com/offchainlabs/nitro/validator/valnode" - rediscons "github.com/offchainlabs/nitro/validator/valnode/redis" "github.com/redis/go-redis/v9" "github.com/ethereum/go-ethereum" @@ -72,16 +51,42 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" + boldMocksgen "github.com/offchainlabs/bold/solgen/go/mocksgen" + "github.com/offchainlabs/bold/solgen/go/rollupgen" + "github.com/offchainlabs/bold/testing/setup" + butil "github.com/offchainlabs/bold/util" "github.com/offchainlabs/nitro/arbnode" + "github.com/offchainlabs/nitro/arbos" + "github.com/offchainlabs/nitro/arbos/arbostypes" + "github.com/offchainlabs/nitro/arbos/util" + "github.com/offchainlabs/nitro/arbstate/daprovider" + "github.com/offchainlabs/nitro/arbutil" + "github.com/offchainlabs/nitro/blsSignatures" + "github.com/offchainlabs/nitro/cmd/chaininfo" + "github.com/offchainlabs/nitro/cmd/conf" + "github.com/offchainlabs/nitro/cmd/genericconf" + "github.com/offchainlabs/nitro/das" + "github.com/offchainlabs/nitro/deploy" + "github.com/offchainlabs/nitro/execution/gethexec" _ "github.com/offchainlabs/nitro/execution/nodeInterface" "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/solgen/go/upgrade_executorgen" "github.com/offchainlabs/nitro/statetransfer" + "github.com/offchainlabs/nitro/util/arbmath" + "github.com/offchainlabs/nitro/util/headerreader" + "github.com/offchainlabs/nitro/util/redisutil" + "github.com/offchainlabs/nitro/util/signature" "github.com/offchainlabs/nitro/util/testhelpers" "github.com/offchainlabs/nitro/util/testhelpers/env" "github.com/offchainlabs/nitro/util/testhelpers/github" + "github.com/offchainlabs/nitro/validator/inputs" + "github.com/offchainlabs/nitro/validator/server_api" + "github.com/offchainlabs/nitro/validator/server_arb" + "github.com/offchainlabs/nitro/validator/server_common" + "github.com/offchainlabs/nitro/validator/valnode" + rediscons "github.com/offchainlabs/nitro/validator/valnode/redis" ) type info = *BlockchainTestInfo @@ -237,6 +242,7 @@ type NodeBuilder struct { l2StackConfig *node.Config valnodeConfig *valnode.Config l3Config *NitroConfig + deployBold bool L1Info info L2Info info L3Info info @@ -286,7 +292,7 @@ func L3NitroConfigDefaultTest(t *testing.T) *NitroConfig { MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), - ArbitrumChainParams: params.ArbitrumDevTestParams(), + ArbitrumChainParams: chaininfo.ArbitrumDevTestParams(), Clique: ¶ms.CliqueConfig{ Period: 0, Epoch: 0, @@ -320,7 +326,7 @@ func (b *NodeBuilder) DefaultConfig(t *testing.T, withL1 bool) *NodeBuilder { b.takeOwnership = true b.nodeConfig = arbnode.ConfigDefaultL2Test() } - b.chainConfig = params.ArbitrumDevTestChainConfig() + b.chainConfig = chaininfo.ArbitrumDevTestChainConfig() b.L1Info = NewL1TestInfo(t) b.L2Info = NewArbTestInfo(t, b.chainConfig.ChainID) b.dataDir = t.TempDir() @@ -345,6 +351,11 @@ func (b *NodeBuilder) WithProdConfirmPeriodBlocks() *NodeBuilder { return b } +func (b *NodeBuilder) WithBoldDeployment() *NodeBuilder { + b.deployBold = true + return b +} + func (b *NodeBuilder) WithWasmRootDir(wasmRootDir string) *NodeBuilder { b.valnodeConfig.Wasm.RootPath = wasmRootDir return b @@ -375,7 +386,7 @@ func (b *NodeBuilder) Build(t *testing.T) func() { func (b *NodeBuilder) CheckConfig(t *testing.T) { if b.chainConfig == nil { - b.chainConfig = params.ArbitrumDevTestChainConfig() + b.chainConfig = chaininfo.ArbitrumDevTestChainConfig() } if b.nodeConfig == nil { b.nodeConfig = arbnode.ConfigDefaultL1Test() @@ -413,6 +424,7 @@ func (b *NodeBuilder) BuildL1(t *testing.T) { locator.LatestWasmModuleRoot(), b.withProdConfirmPeriodBlocks, true, + b.deployBold, ) b.L1.cleanup = func() { requireClose(t, b.L1.Stack) } } @@ -516,6 +528,7 @@ func (b *NodeBuilder) BuildL3OnL2(t *testing.T) func() { locator.LatestWasmModuleRoot(), b.l3Config.withProdConfirmPeriodBlocks, false, + b.deployBold, ) b.L3 = buildOnParentChain( @@ -1079,7 +1092,7 @@ func destroyRedisGroup(ctx context.Context, t *testing.T, streamName string, cli } } -func createTestValidationNode(t *testing.T, ctx context.Context, config *valnode.Config) (*valnode.ValidationNode, *node.Node) { +func createTestValidationNode(t *testing.T, ctx context.Context, config *valnode.Config, spawnerOpts ...server_arb.SpawnerOption) (*valnode.ValidationNode, *node.Node) { stackConf := node.DefaultConfig stackConf.HTTPPort = 0 stackConf.DataDir = "" @@ -1096,7 +1109,7 @@ func createTestValidationNode(t *testing.T, ctx context.Context, config *valnode Require(t, err) configFetcher := func() *valnode.Config { return config } - valnode, err := valnode.CreateValidationNode(configFetcher, stack, nil) + valnode, err := valnode.CreateValidationNode(configFetcher, stack, nil, spawnerOpts...) Require(t, err) err = stack.Start() @@ -1179,7 +1192,7 @@ func createTestL1BlockChain(t *testing.T, l1info info) (info, *ethclient.Client, stackConfig := testhelpers.CreateStackConfigForTest(t.TempDir()) l1info.GenerateAccount("Faucet") - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() chainConfig.ArbitrumChainParams = params.ArbitrumChainParams{} stack, err := node.New(stackConfig) @@ -1247,6 +1260,12 @@ func getInitMessage(ctx context.Context, t *testing.T, parentChainClient *ethcli return initMessage } +var ( + blockChallengeLeafHeight = uint64(1 << 5) // 32 + bigStepChallengeLeafHeight = uint64(1 << 10) + smallStepChallengeLeafHeight = uint64(1 << 10) +) + func deployOnParentChain( t *testing.T, ctx context.Context, @@ -1257,6 +1276,7 @@ func deployOnParentChain( wasmModuleRoot common.Hash, prodConfirmPeriodBlocks bool, chainSupportsBlobs bool, + deployBold bool, ) (*chaininfo.RollupAddresses, *arbostypes.ParsedInitMessage) { parentChainInfo.GenerateAccount("RollupOwner") parentChainInfo.GenerateAccount("Sequencer") @@ -1281,18 +1301,88 @@ func deployOnParentChain( nativeToken := common.Address{} maxDataSize := big.NewInt(117964) - addresses, err := deploy.DeployOnParentChain( - ctx, - parentChainReader, - &parentChainTransactionOpts, - []common.Address{parentChainInfo.GetAddress("Sequencer")}, - parentChainInfo.GetAddress("RollupOwner"), - 0, - arbnode.GenerateRollupConfig(prodConfirmPeriodBlocks, wasmModuleRoot, parentChainInfo.GetAddress("RollupOwner"), chainConfig, serializedChainConfig, common.Address{}), - nativeToken, - maxDataSize, - chainSupportsBlobs, - ) + var addresses *chaininfo.RollupAddresses + if deployBold { + stakeToken, tx, _, err := boldMocksgen.DeployTestWETH9( + &parentChainTransactionOpts, + parentChainReader.Client(), + "Weth", + "WETH", + ) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, parentChainReader.Client(), tx) + Require(t, err) + miniStakeValues := []*big.Int{big.NewInt(5), big.NewInt(4), big.NewInt(3), big.NewInt(2), big.NewInt(1)} + genesisExecutionState := rollupgen.AssertionState{ + GlobalState: rollupgen.GlobalState{}, + MachineStatus: 1, // Finished + EndHistoryRoot: [32]byte{}, + } + cfg := rollupgen.Config{ + MiniStakeValues: miniStakeValues, + ConfirmPeriodBlocks: 120, + StakeToken: stakeToken, + BaseStake: big.NewInt(1), + WasmModuleRoot: wasmModuleRoot, + Owner: parentChainTransactionOpts.From, + LoserStakeEscrow: parentChainTransactionOpts.From, + ChainId: chainConfig.ChainID, + ChainConfig: string(serializedChainConfig), + SequencerInboxMaxTimeVariation: rollupgen.ISequencerInboxMaxTimeVariation{ + DelayBlocks: big.NewInt(60 * 60 * 24 / 15), + FutureBlocks: big.NewInt(12), + DelaySeconds: big.NewInt(60 * 60 * 24), + FutureSeconds: big.NewInt(60 * 60), + }, + LayerZeroBlockEdgeHeight: new(big.Int).SetUint64(blockChallengeLeafHeight), + LayerZeroBigStepEdgeHeight: new(big.Int).SetUint64(bigStepChallengeLeafHeight), + LayerZeroSmallStepEdgeHeight: new(big.Int).SetUint64(smallStepChallengeLeafHeight), + GenesisAssertionState: genesisExecutionState, + GenesisInboxCount: common.Big0, + AnyTrustFastConfirmer: common.Address{}, + NumBigStepLevel: 3, + ChallengeGracePeriodBlocks: 3, + } + wrappedClient := butil.NewBackendWrapper(parentChainReader.Client(), rpc.LatestBlockNumber) + boldAddresses, err := setup.DeployFullRollupStack( + ctx, + wrappedClient, + &parentChainTransactionOpts, + parentChainInfo.GetAddress("Sequencer"), + cfg, + setup.RollupStackConfig{ + UseMockBridge: false, + UseMockOneStepProver: false, + MinimumAssertionPeriod: 0, + }, + ) + Require(t, err) + addresses = &chaininfo.RollupAddresses{ + Bridge: boldAddresses.Bridge, + Inbox: boldAddresses.Inbox, + SequencerInbox: boldAddresses.SequencerInbox, + Rollup: boldAddresses.Rollup, + NativeToken: nativeToken, + UpgradeExecutor: boldAddresses.UpgradeExecutor, + ValidatorUtils: boldAddresses.ValidatorUtils, + ValidatorWalletCreator: boldAddresses.ValidatorWalletCreator, + StakeToken: stakeToken, + DeployedAt: boldAddresses.DeployedAt, + } + } else { + addresses, err = deploy.DeployOnParentChain( + ctx, + parentChainReader, + &parentChainTransactionOpts, + []common.Address{parentChainInfo.GetAddress("Sequencer")}, + parentChainInfo.GetAddress("RollupOwner"), + 0, + arbnode.GenerateRollupConfig(prodConfirmPeriodBlocks, wasmModuleRoot, parentChainInfo.GetAddress("RollupOwner"), chainConfig, serializedChainConfig, common.Address{}), + nativeToken, + maxDataSize, + chainSupportsBlobs, + ) + } Require(t, err) parentChainInfo.SetContract("Bridge", addresses.Bridge) parentChainInfo.SetContract("SequencerInbox", addresses.SequencerInbox) @@ -1509,7 +1599,7 @@ func setupConfigWithDAS( t *testing.T, ctx context.Context, dasModeString string, ) (*params.ChainConfig, *arbnode.Config, *das.LifecycleManager, string, *blsSignatures.PublicKey) { l1NodeConfigA := arbnode.ConfigDefaultL1Test() - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() var dbPath string var err error @@ -1517,10 +1607,10 @@ func setupConfigWithDAS( switch dasModeString { case "db": enableDbStorage = true - chainConfig = params.ArbitrumDevTestDASChainConfig() + chainConfig = chaininfo.ArbitrumDevTestDASChainConfig() case "files": enableFileStorage = true - chainConfig = params.ArbitrumDevTestDASChainConfig() + chainConfig = chaininfo.ArbitrumDevTestDASChainConfig() case "onchain": enableDas = false default: diff --git a/system_tests/conditionaltx_test.go b/system_tests/conditionaltx_test.go index 286060e666..2d9140ffcd 100644 --- a/system_tests/conditionaltx_test.go +++ b/system_tests/conditionaltx_test.go @@ -21,6 +21,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/execution/gethexec" "github.com/offchainlabs/nitro/solgen/go/mocksgen" ) diff --git a/system_tests/contract_tx_test.go b/system_tests/contract_tx_test.go index c1ef840c43..306b8fada3 100644 --- a/system_tests/contract_tx_test.go +++ b/system_tests/contract_tx_test.go @@ -14,9 +14,10 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbostypes" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/util/arbmath" ) @@ -54,7 +55,7 @@ func TestContractTxDeploy(t *testing.T) { // #nosec G115 requestId[0] = uint8(stateNonce) contractTx := &types.ArbitrumContractTx{ - ChainId: params.ArbitrumDevTestChainConfig().ChainID, + ChainId: chaininfo.ArbitrumDevTestChainConfig().ChainID, RequestId: requestId, From: from, GasFeeCap: big.NewInt(1e9), diff --git a/system_tests/das_test.go b/system_tests/das_test.go index 689ee924e1..52703c879d 100644 --- a/system_tests/das_test.go +++ b/system_tests/das_test.go @@ -21,10 +21,10 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/blsSignatures" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/das" "github.com/offchainlabs/nitro/solgen/go/bridgegen" @@ -201,7 +201,7 @@ func TestDASComplexConfigAndRestMirror(t *testing.T) { // Setup L1 chain and contracts builder := NewNodeBuilder(ctx).DefaultConfig(t, true) - builder.chainConfig = params.ArbitrumDevTestDASChainConfig() + builder.chainConfig = chaininfo.ArbitrumDevTestDASChainConfig() builder.BuildL1(t) arbSys, _ := precompilesgen.NewArbSys(types.ArbSysAddress, builder.L1.Client) @@ -329,7 +329,7 @@ func TestDASBatchPosterFallback(t *testing.T) { // Setup L1 builder := NewNodeBuilder(ctx).DefaultConfig(t, true) - builder.chainConfig = params.ArbitrumDevTestDASChainConfig() + builder.chainConfig = chaininfo.ArbitrumDevTestDASChainConfig() builder.BuildL1(t) l1client := builder.L1.Client l1info := builder.L1Info diff --git a/system_tests/db_conversion_test.go b/system_tests/db_conversion_test.go index aca28262cb..d19629fade 100644 --- a/system_tests/db_conversion_test.go +++ b/system_tests/db_conversion_test.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/trie" + "github.com/offchainlabs/nitro/cmd/dbconv/dbconv" "github.com/offchainlabs/nitro/util/arbmath" ) diff --git a/system_tests/debugapi_test.go b/system_tests/debugapi_test.go index 357e2547ea..fd1aa746a3 100644 --- a/system_tests/debugapi_test.go +++ b/system_tests/debugapi_test.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbos/l2pricing" "github.com/offchainlabs/nitro/arbos/retryables" "github.com/offchainlabs/nitro/solgen/go/node_interfacegen" diff --git a/system_tests/delayedinbox_test.go b/system_tests/delayedinbox_test.go index ca3e7b5999..346b0fbc2f 100644 --- a/system_tests/delayedinbox_test.go +++ b/system_tests/delayedinbox_test.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/solgen/go/bridgegen" ) diff --git a/system_tests/estimation_test.go b/system_tests/estimation_test.go index 6285702342..e489b1864e 100644 --- a/system_tests/estimation_test.go +++ b/system_tests/estimation_test.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/eth/gasestimator" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/node_interfacegen" diff --git a/system_tests/fast_confirm_test.go b/system_tests/fast_confirm_test.go index dae2699b9f..8eb71bffd4 100644 --- a/system_tests/fast_confirm_test.go +++ b/system_tests/fast_confirm_test.go @@ -10,6 +10,7 @@ package arbtest import ( "context" "errors" + "fmt" "math/big" "strings" "testing" @@ -32,6 +33,7 @@ import ( "github.com/offchainlabs/nitro/solgen/go/rollupgen" "github.com/offchainlabs/nitro/solgen/go/upgrade_executorgen" "github.com/offchainlabs/nitro/staker" + legacystaker "github.com/offchainlabs/nitro/staker/legacy" "github.com/offchainlabs/nitro/staker/validatorwallet" "github.com/offchainlabs/nitro/util" "github.com/offchainlabs/nitro/validator/valnode" @@ -94,7 +96,7 @@ func TestFastConfirmation(t *testing.T) { _, err = builder.L1.EnsureTxSucceeded(tx) Require(t, err) - valConfig := staker.TestL1ValidatorConfig + valConfig := legacystaker.TestL1ValidatorConfig valConfig.EnableFastConfirmation = true parentChainID, err := builder.L1.Client.ChainID(ctx) if err != nil { @@ -156,11 +158,11 @@ func TestFastConfirmation(t *testing.T) { Require(t, err) err = valWallet.Initialize(ctx) Require(t, err) - stakerA, err := staker.NewStaker( + stakerA, err := legacystaker.NewStaker( l2node.L1Reader, valWallet, bind.CallOpts{}, - func() *staker.L1ValidatorConfig { return &valConfig }, + func() *legacystaker.L1ValidatorConfig { return &valConfig }, nil, stateless, nil, @@ -211,7 +213,7 @@ func TestFastConfirmation(t *testing.T) { latestConfirmAfterAct, err := rollup.LatestConfirmed(&bind.CallOpts{}) Require(t, err) if latestConfirmAfterAct <= latestConfirmBeforeAct { - Fatal(t, "staker A didn't advance the latest confirmed node") + Fatal(t, fmt.Sprintf("staker A didn't advance the latest confirmed node: want > %d, got: %d", latestConfirmBeforeAct, latestConfirmAfterAct)) } } @@ -293,7 +295,7 @@ func TestFastConfirmationWithSafe(t *testing.T) { _, err = builder.L1.EnsureTxSucceeded(tx) Require(t, err) - valConfigA := staker.TestL1ValidatorConfig + valConfigA := legacystaker.TestL1ValidatorConfig valConfigA.EnableFastConfirmation = true parentChainID, err := builder.L1.Client.ChainID(ctx) @@ -357,11 +359,11 @@ func TestFastConfirmationWithSafe(t *testing.T) { Require(t, err) err = valWalletA.Initialize(ctx) Require(t, err) - stakerA, err := staker.NewStaker( + stakerA, err := legacystaker.NewStaker( l2nodeA.L1Reader, valWalletA, bind.CallOpts{}, - func() *staker.L1ValidatorConfig { return &valConfigA }, + func() *legacystaker.L1ValidatorConfig { return &valConfigA }, nil, statelessA, nil, @@ -391,7 +393,7 @@ func TestFastConfirmationWithSafe(t *testing.T) { } valWalletB, err := validatorwallet.NewEOA(dpB, l2nodeB.DeployInfo.Rollup, l2nodeB.L1Reader.Client(), func() uint64 { return 0 }) Require(t, err) - valConfigB := staker.TestL1ValidatorConfig + valConfigB := legacystaker.TestL1ValidatorConfig valConfigB.EnableFastConfirmation = true valConfigB.Strategy = "watchtower" statelessB, err := staker.NewStatelessBlockValidator( @@ -409,11 +411,11 @@ func TestFastConfirmationWithSafe(t *testing.T) { Require(t, err) err = valWalletB.Initialize(ctx) Require(t, err) - stakerB, err := staker.NewStaker( + stakerB, err := legacystaker.NewStaker( l2nodeB.L1Reader, valWalletB, bind.CallOpts{}, - func() *staker.L1ValidatorConfig { return &valConfigB }, + func() *legacystaker.L1ValidatorConfig { return &valConfigB }, nil, statelessB, nil, diff --git a/system_tests/forwarder_test.go b/system_tests/forwarder_test.go index 6a1d1c68d8..843668454d 100644 --- a/system_tests/forwarder_test.go +++ b/system_tests/forwarder_test.go @@ -15,7 +15,9 @@ import ( "time" "github.com/alicebob/miniredis/v2" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/util/redisutil" ) diff --git a/system_tests/full_challenge_impl_test.go b/system_tests/full_challenge_impl_test.go index bf30c928d8..4d902f87ba 100644 --- a/system_tests/full_challenge_impl_test.go +++ b/system_tests/full_challenge_impl_test.go @@ -32,6 +32,7 @@ import ( "github.com/offchainlabs/nitro/solgen/go/ospgen" "github.com/offchainlabs/nitro/solgen/go/yulgen" "github.com/offchainlabs/nitro/staker" + legacystaker "github.com/offchainlabs/nitro/staker/legacy" "github.com/offchainlabs/nitro/validator" "github.com/offchainlabs/nitro/validator/server_common" ) @@ -101,8 +102,8 @@ func CreateChallenge( auth, wasmModuleRoot, [2]uint8{ - staker.StatusFinished, - staker.StatusFinished, + legacystaker.StatusFinished, + legacystaker.StatusFinished, }, [2]mocksgen.GlobalState{ { @@ -397,7 +398,7 @@ func RunChallengeTest(t *testing.T, asserterIsCorrect bool, useStubs bool, chall Fatal(t, err) } defer asserterValidator.Stop() - asserterManager, err := staker.NewChallengeManager(ctx, l1Backend, &asserterTxOpts, asserterTxOpts.From, challengeManagerAddr, 1, asserterValidator, 0, 0) + asserterManager, err := legacystaker.NewChallengeManager(ctx, l1Backend, &asserterTxOpts, asserterTxOpts.From, challengeManagerAddr, 1, asserterValidator, 0, 0) if err != nil { Fatal(t, err) } @@ -414,7 +415,7 @@ func RunChallengeTest(t *testing.T, asserterIsCorrect bool, useStubs bool, chall Fatal(t, err) } defer challengerValidator.Stop() - challengerManager, err := staker.NewChallengeManager(ctx, l1Backend, &challengerTxOpts, challengerTxOpts.From, challengeManagerAddr, 1, challengerValidator, 0, 0) + challengerManager, err := legacystaker.NewChallengeManager(ctx, l1Backend, &challengerTxOpts, challengerTxOpts.From, challengeManagerAddr, 1, challengerValidator, 0, 0) if err != nil { Fatal(t, err) } diff --git a/system_tests/infra_fee_test.go b/system_tests/infra_fee_test.go index 9366fc204e..2e03eb0815 100644 --- a/system_tests/infra_fee_test.go +++ b/system_tests/infra_fee_test.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/l2pricing" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/util/arbmath" diff --git a/system_tests/initialization_test.go b/system_tests/initialization_test.go index 17e020e6ab..4807a8e67a 100644 --- a/system_tests/initialization_test.go +++ b/system_tests/initialization_test.go @@ -10,7 +10,8 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/params" + + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/statetransfer" "github.com/offchainlabs/nitro/util/testhelpers" ) @@ -50,7 +51,7 @@ func TestInitContract(t *testing.T) { defer cancel() expectedSums := make(map[common.Address]*big.Int) prand := testhelpers.NewPseudoRandomDataSource(t, 1) - l2info := NewArbTestInfo(t, params.ArbitrumDevTestChainConfig().ChainID) + l2info := NewArbTestInfo(t, chaininfo.ArbitrumDevTestChainConfig().ChainID) for i := 0; i < 50; i++ { contractData, sum := InitOneContract(prand) accountAddress := prand.GetAddress() diff --git a/system_tests/log_subscription_test.go b/system_tests/log_subscription_test.go index e4402533a6..4d38ea6e9c 100644 --- a/system_tests/log_subscription_test.go +++ b/system_tests/log_subscription_test.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/solgen/go/precompilesgen" ) diff --git a/system_tests/meaningless_reorg_test.go b/system_tests/meaningless_reorg_test.go index 06a5d3d2b3..350b21a6cf 100644 --- a/system_tests/meaningless_reorg_test.go +++ b/system_tests/meaningless_reorg_test.go @@ -10,6 +10,7 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/solgen/go/bridgegen" ) diff --git a/system_tests/mock_machine_test.go b/system_tests/mock_machine_test.go new file mode 100644 index 0000000000..ea7fcbaef1 --- /dev/null +++ b/system_tests/mock_machine_test.go @@ -0,0 +1,41 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE + +package arbtest + +import ( + "github.com/ethereum/go-ethereum/common" + + "github.com/offchainlabs/nitro/validator/server_arb" +) + +// IncorrectIntermediateMachine will report an incorrect hash while running from incorrectStep onwards. +// However, it'll reach the correct final hash and global state once finished. +type IncorrectIntermediateMachine struct { + server_arb.MachineInterface + incorrectStep uint64 +} + +var _ server_arb.MachineInterface = (*IncorrectIntermediateMachine)(nil) + +func NewIncorrectIntermediateMachine(inner server_arb.MachineInterface, incorrectStep uint64) *IncorrectIntermediateMachine { + return &IncorrectIntermediateMachine{ + MachineInterface: inner, + incorrectStep: incorrectStep, + } +} + +func (m *IncorrectIntermediateMachine) CloneMachineInterface() server_arb.MachineInterface { + return &IncorrectIntermediateMachine{ + MachineInterface: m.MachineInterface.CloneMachineInterface(), + incorrectStep: m.incorrectStep, + } +} + +func (m *IncorrectIntermediateMachine) Hash() common.Hash { + h := m.MachineInterface.Hash() + if m.GetStepCount() >= m.incorrectStep && m.IsRunning() { + h[0] ^= 0xFF + } + return h +} diff --git a/system_tests/nodeinterface_test.go b/system_tests/nodeinterface_test.go index 927dc1b630..5c32dcf20f 100644 --- a/system_tests/nodeinterface_test.go +++ b/system_tests/nodeinterface_test.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/solgen/go/node_interfacegen" ) diff --git a/system_tests/outbox_test.go b/system_tests/outbox_test.go index 25c52396f9..10d1ebec42 100644 --- a/system_tests/outbox_test.go +++ b/system_tests/outbox_test.go @@ -18,6 +18,7 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/gethhook" "github.com/offchainlabs/nitro/solgen/go/node_interfacegen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" @@ -53,7 +54,6 @@ func TestP256VerifyEnabled(t *testing.T) { func TestOutboxProofs(t *testing.T) { t.Parallel() gethhook.RequireHookedGeth() - rand.Seed(time.Now().UTC().UnixNano()) ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/system_tests/overflow_assertions_test.go b/system_tests/overflow_assertions_test.go new file mode 100644 index 0000000000..c024a43070 --- /dev/null +++ b/system_tests/overflow_assertions_test.go @@ -0,0 +1,316 @@ +// Copyright 2024, Offchain Labs, Inc. +// For license information, see: +// https://github.com/OffchainLabs/nitro/blob/master/LICENSE.md + +//go:build challengetest && !race + +package arbtest + +import ( + "context" + "math/big" + "os" + "strings" + "testing" + "time" + + "github.com/ccoveille/go-safecast" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + + protocol "github.com/offchainlabs/bold/chain-abstraction" + challengemanager "github.com/offchainlabs/bold/challenge-manager" + modes "github.com/offchainlabs/bold/challenge-manager/types" + l2stateprovider "github.com/offchainlabs/bold/layer2-state-provider" + "github.com/offchainlabs/bold/solgen/go/bridgegen" + "github.com/offchainlabs/bold/solgen/go/mocksgen" + "github.com/offchainlabs/bold/solgen/go/rollupgen" + "github.com/offchainlabs/bold/testing/setup" + "github.com/offchainlabs/nitro/arbos/l2pricing" + "github.com/offchainlabs/nitro/cmd/chaininfo" + "github.com/offchainlabs/nitro/execution/gethexec" + "github.com/offchainlabs/nitro/staker" + "github.com/offchainlabs/nitro/staker/bold" + "github.com/offchainlabs/nitro/util" + "github.com/offchainlabs/nitro/validator/valnode" +) + +func TestOverflowAssertions(t *testing.T) { + // Get a simulated geth backend running. + // + // Create enough messages in batches to overflow the block level challenge + // height. (height == 32, messages = 45) + // + // Start the challenge manager with a minimumAssertionPeriod of 7 and make + // sure that it posts overflow-assertions right away instead of waiting for + // the 7 blocks to pass. + goodDir, err := os.MkdirTemp("", "good_*") + Require(t, err) + t.Cleanup(func() { + Require(t, os.RemoveAll(goodDir)) + }) + ctx, cancelCtx := context.WithCancel(context.Background()) + defer cancelCtx() + var transferGas = util.NormalizeL2GasForL1GasInitial(800_000, params.GWei) // include room for aggregator L1 costs + l2chainConfig := chaininfo.ArbitrumDevTestChainConfig() + l2info := NewBlockChainTestInfo( + t, + types.NewArbitrumSigner(types.NewLondonSigner(l2chainConfig.ChainID)), big.NewInt(l2pricing.InitialBaseFeeWei*2), + transferGas, + ) + // This is important to show that overflow assertions don't wait. + minAssertionBlocks := int64(7) + ownerBal := big.NewInt(params.Ether) + ownerBal.Mul(ownerBal, big.NewInt(1_000_000)) + l2info.GenerateGenesisAccount("Owner", ownerBal) + sconf := setup.RollupStackConfig{ + UseMockBridge: false, + UseMockOneStepProver: false, + MinimumAssertionPeriod: minAssertionBlocks, + } + + _, l2node, _, _, l1info, _, l1client, l1stack, assertionChain, _ := createTestNodeOnL1ForBoldProtocol(t, ctx, true, nil, l2chainConfig, nil, sconf, l2info) + defer requireClose(t, l1stack) + defer l2node.StopAndWait() + + // Make sure we shut down test functionality before the rest of the node + ctx, cancelCtx = context.WithCancel(ctx) + defer cancelCtx() + + go keepChainMoving(t, ctx, l1info, l1client) + + balance := big.NewInt(params.Ether) + balance.Mul(balance, big.NewInt(100)) + TransferBalance(t, "Faucet", "Asserter", balance, l1info, l1client, ctx) + + valCfg := valnode.TestValidationConfig + valCfg.UseJit = false + _, valStack := createTestValidationNode(t, ctx, &valCfg) + blockValidatorConfig := staker.TestBlockValidatorConfig + + stateless, err := staker.NewStatelessBlockValidator( + l2node.InboxReader, + l2node.InboxTracker, + l2node.TxStreamer, + l2node.Execution, + l2node.ArbDB, + nil, + StaticFetcherFrom(t, &blockValidatorConfig), + valStack, + ) + Require(t, err) + err = stateless.Start(ctx) + Require(t, err) + + blockValidator, err := staker.NewBlockValidator( + stateless, + l2node.InboxTracker, + l2node.TxStreamer, + StaticFetcherFrom(t, &blockValidatorConfig), + nil, + ) + Require(t, err) + Require(t, blockValidator.Initialize(ctx)) + Require(t, blockValidator.Start(ctx)) + + stateManager, err := bold.NewBOLDStateProvider( + blockValidator, + stateless, + l2stateprovider.Height(blockChallengeLeafHeight), + &bold.StateProviderConfig{ + ValidatorName: "good", + MachineLeavesCachePath: goodDir, + CheckBatchFinality: false, + }, + goodDir, + ) + Require(t, err) + + Require(t, l2node.Start(ctx)) + + l2info.GenerateAccount("Destination") + sequencerTxOpts := l1info.GetDefaultTransactOpts("Sequencer", ctx) + + honestSeqInbox := l1info.GetAddress("SequencerInbox") + honestSeqInboxBinding, err := bridgegen.NewSequencerInbox(honestSeqInbox, l1client) + Require(t, err) + + // Post batches to the honest and inbox. + seqInboxABI, err := abi.JSON(strings.NewReader(bridgegen.SequencerInboxABI)) + Require(t, err) + + honestUpgradeExec, err := mocksgen.NewUpgradeExecutorMock(l1info.GetAddress("UpgradeExecutor"), l1client) + Require(t, err) + data, err := seqInboxABI.Pack( + "setIsBatchPoster", + sequencerTxOpts.From, + true, + ) + Require(t, err) + honestRollupOwnerOpts := l1info.GetDefaultTransactOpts("RollupOwner", ctx) + _, err = honestUpgradeExec.ExecuteCall(&honestRollupOwnerOpts, honestSeqInbox, data) + Require(t, err) + + // Post enough messages (45 across 2 batches) to overflow the block level + // challenge height (32). + totalMessagesPosted := int64(0) + numMessagesPerBatch := int64(32) + divergeAt := int64(-1) + makeBoldBatch(t, l2node, l2info, l1client, &sequencerTxOpts, honestSeqInboxBinding, honestSeqInbox, numMessagesPerBatch, divergeAt) + totalMessagesPosted += numMessagesPerBatch + + numMessagesPerBatch = int64(13) + makeBoldBatch(t, l2node, l2info, l1client, &sequencerTxOpts, honestSeqInboxBinding, honestSeqInbox, numMessagesPerBatch, divergeAt) + totalMessagesPosted += numMessagesPerBatch + + bc, err := l2node.InboxTracker.GetBatchCount() + Require(t, err) + msgs, err := l2node.InboxTracker.GetBatchMessageCount(bc - 1) + Require(t, err) + + t.Logf("Node batch count %d, msgs %d", bc, msgs) + + // Wait for the node to catch up. + nodeExec, ok := l2node.Execution.(*gethexec.ExecutionNode) + if !ok { + Fatal(t, "not geth execution node") + } + for { + latest := nodeExec.Backend.APIBackend().CurrentHeader() + isCaughtUp := latest.Number.Uint64() == uint64(totalMessagesPosted) + if isCaughtUp { + break + } + time.Sleep(time.Millisecond * 200) + } + + bridgeBinding, err := bridgegen.NewBridge(l1info.GetAddress("Bridge"), l1client) + Require(t, err) + totalBatchesBig, err := bridgeBinding.SequencerMessageCount(&bind.CallOpts{Context: ctx}) + Require(t, err) + totalBatches := totalBatchesBig.Uint64() + + // Wait until the validator has validated the batches. + for { + lastInfo, err := blockValidator.ReadLastValidatedInfo() + if lastInfo == nil || err != nil { + continue + } + t.Log("Batch", lastInfo.GlobalState.Batch, "Total", totalBatches-1) + if lastInfo.GlobalState.Batch >= totalBatches-1 { + break + } + time.Sleep(time.Millisecond * 200) + } + + provider := l2stateprovider.NewHistoryCommitmentProvider( + stateManager, + stateManager, + stateManager, + []l2stateprovider.Height{ + l2stateprovider.Height(blockChallengeLeafHeight), + l2stateprovider.Height(bigStepChallengeLeafHeight), + l2stateprovider.Height(smallStepChallengeLeafHeight), + }, + stateManager, + nil, // Api db + ) + + stackOpts := []challengemanager.StackOpt{ + challengemanager.StackWithName("default"), + challengemanager.StackWithMode(modes.MakeMode), + challengemanager.StackWithPostingInterval(time.Second), + challengemanager.StackWithPollingInterval(time.Millisecond * 500), + challengemanager.StackWithAverageBlockCreationTime(time.Second), + } + + manager, err := challengemanager.NewChallengeStack( + assertionChain, + provider, + stackOpts..., + ) + Require(t, err) + manager.Start(ctx) + + filterer, err := rollupgen.NewRollupUserLogicFilterer(assertionChain.RollupAddress(), assertionChain.Backend()) + Require(t, err) + + // The goal of this test is to observe: + // + // 1. The genisis assertion (non-overflow) + // 2. The assertion of the first 32 blocks of the two batches manually set up + // above (non-overflow) + // 3. The overflow assertion that should be posted in fewer than + // minAssertionBlocks. (overflow) + // 4. One more normal assertion in >= minAssertionBlocks. (non-overflow) + + overflow := true + nonOverflow := false + expectedAssertions := []bool{nonOverflow, nonOverflow, overflow, nonOverflow} + mab64, err := safecast.ToUint64(minAssertionBlocks) + Require(t, err) + + lastInboxMax := uint64(0) + lastAssertionBlock := uint64(0) + fromBlock := uint64(0) + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + for len(expectedAssertions) > 0 { + select { + case <-ticker.C: + latestBlock, err := l1client.HeaderByNumber(ctx, nil) + Require(t, err) + toBlock := latestBlock.Number.Uint64() + if fromBlock >= toBlock { + continue + } + filterOpts := &bind.FilterOpts{ + Start: fromBlock, + End: &toBlock, + Context: ctx, + } + it, err := filterer.FilterAssertionCreated(filterOpts, nil, nil) + Require(t, err) + for it.Next() { + if it.Error() != nil { + t.Fatalf("Error in filter iterator: %v", it.Error()) + } + t.Log("Received event of assertion created!") + assertionHash := protocol.AssertionHash{Hash: it.Event.AssertionHash} + creationInfo, err := assertionChain.ReadAssertionCreationInfo(ctx, assertionHash) + Require(t, err) + t.Logf("Created assertion in block: %d", creationInfo.CreationBlock) + newState := protocol.GoGlobalStateFromSolidity(creationInfo.AfterState.GlobalState) + t.Logf("NewState PosInBatch: %d", newState.PosInBatch) + inboxMax := creationInfo.InboxMaxCount.Uint64() + t.Logf("InboxMax: %d", inboxMax) + blocks := creationInfo.CreationBlock - lastAssertionBlock + // PosInBatch == 0 && inboxMax > lastInboxMax means it is NOT an overflow assertion. + if newState.PosInBatch == 0 && inboxMax > lastInboxMax { + if expectedAssertions[0] == overflow { + t.Errorf("Expected overflow assertion, got non-overflow assertion") + } + if blocks < mab64 { + t.Errorf("non-overflow assertions should have >= =%d blocks between them. Got: %d", mab64, blocks) + } + } else { + if expectedAssertions[0] == nonOverflow { + t.Errorf("Expected non-overflow assertion, got overflow assertion") + } + if blocks >= mab64 { + t.Errorf("overflow assertions should not have %d blocks between them. Got: %d", mab64, blocks) + } + } + lastAssertionBlock = creationInfo.CreationBlock + lastInboxMax = inboxMax + expectedAssertions = expectedAssertions[1:] + } + fromBlock = toBlock + 1 + case <-ctx.Done(): + return + } + } + // PASS: All expected assertions were seen. +} diff --git a/system_tests/precompile_doesnt_revert_test.go b/system_tests/precompile_doesnt_revert_test.go index e6751d347d..fc4b0e745e 100644 --- a/system_tests/precompile_doesnt_revert_test.go +++ b/system_tests/precompile_doesnt_revert_test.go @@ -13,8 +13,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/l1pricing" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" ) @@ -156,7 +157,7 @@ func TestArbOwnerDoesntRevert(t *testing.T) { arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, builder.L2.Client) Require(t, err) - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() chainConfig.ArbitrumChainParams.MaxCodeSize = 100 serializedChainConfig, err := json.Marshal(chainConfig) Require(t, err) diff --git a/system_tests/precompile_fuzz_test.go b/system_tests/precompile_fuzz_test.go index 8ab133cf58..82dd393ea2 100644 --- a/system_tests/precompile_fuzz_test.go +++ b/system_tests/precompile_fuzz_test.go @@ -12,10 +12,11 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/burn" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/gethhook" "github.com/offchainlabs/nitro/precompiles" ) @@ -32,7 +33,7 @@ func FuzzPrecompiles(f *testing.F) { panic(err) } burner := burn.NewSystemBurner(nil, false) - chainConfig := params.ArbitrumDevTestChainConfig() + chainConfig := chaininfo.ArbitrumDevTestChainConfig() _, err = arbosState.InitializeArbosState(sdb, burner, chainConfig, arbostypes.TestInitMessage) if err != nil { panic(err) diff --git a/system_tests/precompile_test.go b/system_tests/precompile_test.go index 9d5737c249..78f34df6c7 100644 --- a/system_tests/precompile_test.go +++ b/system_tests/precompile_test.go @@ -14,9 +14,10 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/l1pricing" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/util/arbmath" @@ -37,7 +38,7 @@ func TestPurePrecompileMethodCalls(t *testing.T) { Require(t, err, "could not deploy ArbSys contract") chainId, err := arbSys.ArbChainID(&bind.CallOpts{}) Require(t, err, "failed to get the ChainID") - if chainId.Uint64() != params.ArbitrumDevTestChainConfig().ChainID.Uint64() { + if chainId.Uint64() != chaininfo.ArbitrumDevTestChainConfig().ChainID.Uint64() { Fatal(t, "Wrong ChainID", chainId.Uint64()) } @@ -433,12 +434,15 @@ func TestGasAccountingParams(t *testing.T) { Require(t, err) arbGasInfoSpeedLimit, arbGasInfoPoolSize, arbGasInfoTxGasLimit, err := arbGasInfo.GetGasAccountingParams(&bind.CallOpts{Context: ctx}) Require(t, err) + // #nosec G115 if arbGasInfoSpeedLimit.Cmp(big.NewInt(int64(speedLimit))) != 0 { Fatal(t, "expected speed limit to be", speedLimit, "got", arbGasInfoSpeedLimit) } + // #nosec G115 if arbGasInfoPoolSize.Cmp(big.NewInt(int64(txGasLimit))) != 0 { Fatal(t, "expected pool size to be", txGasLimit, "got", arbGasInfoPoolSize) } + // #nosec G115 if arbGasInfoTxGasLimit.Cmp(big.NewInt(int64(txGasLimit))) != 0 { Fatal(t, "expected tx gas limit to be", txGasLimit, "got", arbGasInfoTxGasLimit) } diff --git a/system_tests/program_gas_test.go b/system_tests/program_gas_test.go index 10a371532d..3450214a14 100644 --- a/system_tests/program_gas_test.go +++ b/system_tests/program_gas_test.go @@ -2,6 +2,7 @@ package arbtest import ( "context" + "encoding/binary" "fmt" "math" "math/big" @@ -13,9 +14,11 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/execution/gethexec" "github.com/offchainlabs/nitro/solgen/go/mocksgen" @@ -23,6 +26,162 @@ import ( "github.com/offchainlabs/nitro/util/testhelpers" ) +const HOSTIO_INK = 8400 + +func checkInkUsage( + t *testing.T, + builder *NodeBuilder, + stylusProgram common.Address, + hostio string, + signature string, + params []uint32, + expectedInk uint64, +) { + toU256ByteSlice := func(i uint32) []byte { + arr := make([]byte, 32) + binary.BigEndian.PutUint32(arr[28:32], i) + return arr + } + + testName := fmt.Sprintf("%v_%v", signature, params) + + data := crypto.Keccak256([]byte(signature))[:4] + for _, p := range params { + data = append(data, toU256ByteSlice(p)...) + } + + const txGas uint64 = 32_000_000 + tx := builder.L2Info.PrepareTxTo("Owner", &stylusProgram, txGas, nil, data) + + err := builder.L2.Client.SendTransaction(builder.ctx, tx) + Require(t, err, "testName", testName) + _, err = builder.L2.EnsureTxSucceeded(tx) + Require(t, err, "testName", testName) + + stylusGasUsage, err := stylusHostiosGasUsage(builder.ctx, builder.L2.Client.Client(), tx) + Require(t, err, "testName", testName) + + _, ok := stylusGasUsage[hostio] + if !ok { + Fatal(t, "hostio not found in gas usage", "hostio", hostio, "stylusGasUsage", stylusGasUsage, "testName", testName) + } + + if len(stylusGasUsage[hostio]) != 1 { + Fatal(t, "unexpected number of gas usage", "hostio", hostio, "stylusGasUsage", stylusGasUsage, "testName", testName) + } + + expectedGas := float64(expectedInk) / 10000 + returnedGas := stylusGasUsage[hostio][0] + if math.Abs(expectedGas-returnedGas) > 1e-9 { + Fatal(t, "unexpected gas usage", "hostio", hostio, "expected", expectedGas, "returned", returnedGas, "testName", testName) + } +} + +func TestWriteResultGasUsage(t *testing.T) { + t.Parallel() + + builder := setupGasCostTest(t) + auth := builder.L2Info.GetDefaultTransactOpts("Owner", builder.ctx) + stylusProgram := deployWasm(t, builder.ctx, auth, builder.L2.Client, rustFile("hostio-test")) + + hostio := "write_result" + + // writeResultEmpty doesn't return any value + signature := "writeResultEmpty()" + expectedInk := HOSTIO_INK + 16381*2 + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, nil, uint64(expectedInk)) + + // writeResult(uint256) returns an array of uint256 + signature = "writeResult(uint256)" + numberOfElementsInReturnedArray := 10000 + arrayOverhead := 32 + 32 // 32 bytes for the array length and 32 bytes for the array offset + expectedInk = HOSTIO_INK + (16381+55*(32*numberOfElementsInReturnedArray+arrayOverhead-32))*2 + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, []uint32{uint32(numberOfElementsInReturnedArray)}, uint64(expectedInk)) + + signature = "writeResult(uint256)" + numberOfElementsInReturnedArray = 0 + expectedInk = HOSTIO_INK + (16381+55*(arrayOverhead-32))*2 + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, []uint32{uint32(numberOfElementsInReturnedArray)}, uint64(expectedInk)) +} + +func TestReadArgsGasUsage(t *testing.T) { + t.Parallel() + + builder := setupGasCostTest(t) + auth := builder.L2Info.GetDefaultTransactOpts("Owner", builder.ctx) + stylusProgram := deployWasm(t, builder.ctx, auth, builder.L2.Client, rustFile("hostio-test")) + + hostio := "read_args" + + signature := "readArgsNoArgs()" + expectedInk := HOSTIO_INK + 5040 + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, nil, uint64(expectedInk)) + + signature = "readArgsOneArg(uint256)" + signatureOverhead := 4 + expectedInk = HOSTIO_INK + 5040 + 30*(32+signatureOverhead-32) + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, []uint32{1}, uint64(expectedInk)) + + signature = "readArgsThreeArgs(uint256,uint256,uint256)" + expectedInk = HOSTIO_INK + 5040 + 30*(3*32+signatureOverhead-32) + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, []uint32{1, 1, 1}, uint64(expectedInk)) +} + +func TestMsgReentrantGasUsage(t *testing.T) { + t.Parallel() + + builder := setupGasCostTest(t) + auth := builder.L2Info.GetDefaultTransactOpts("Owner", builder.ctx) + stylusProgram := deployWasm(t, builder.ctx, auth, builder.L2.Client, rustFile("hostio-test")) + + hostio := "msg_reentrant" + + signature := "writeResultEmpty()" + expectedInk := HOSTIO_INK + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, nil, uint64(expectedInk)) +} + +func TestStorageCacheBytes32GasUsage(t *testing.T) { + t.Parallel() + + builder := setupGasCostTest(t) + auth := builder.L2Info.GetDefaultTransactOpts("Owner", builder.ctx) + stylusProgram := deployWasm(t, builder.ctx, auth, builder.L2.Client, rustFile("hostio-test")) + + hostio := "storage_cache_bytes32" + + signature := "storageCacheBytes32()" + expectedInk := HOSTIO_INK + (13440-HOSTIO_INK)*2 + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, nil, uint64(expectedInk)) +} + +func TestPayForMemoryGrowGasUsage(t *testing.T) { + t.Parallel() + + builder := setupGasCostTest(t) + auth := builder.L2Info.GetDefaultTransactOpts("Owner", builder.ctx) + stylusProgram := deployWasm(t, builder.ctx, auth, builder.L2.Client, rustFile("hostio-test")) + + hostio := "pay_for_memory_grow" + signature := "payForMemoryGrow(uint256)" + + expectedInk := 9320660000 + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, []uint32{100}, uint64(expectedInk)) + + expectedInk = HOSTIO_INK + // #nosec G115 + checkInkUsage(t, builder, stylusProgram, hostio, signature, []uint32{0}, uint64(expectedInk)) +} + func TestProgramSimpleCost(t *testing.T) { builder := setupGasCostTest(t) auth := builder.L2Info.GetDefaultTransactOpts("Owner", builder.ctx) diff --git a/system_tests/program_norace_test.go b/system_tests/program_norace_test.go index 56b2046716..b1e5af8395 100644 --- a/system_tests/program_norace_test.go +++ b/system_tests/program_norace_test.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/tracers" + "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/solgen/go/mocksgen" diff --git a/system_tests/program_recursive_test.go b/system_tests/program_recursive_test.go index e928f9f3aa..ca726c684d 100644 --- a/system_tests/program_recursive_test.go +++ b/system_tests/program_recursive_test.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/solgen/go/mocksgen" diff --git a/system_tests/program_test.go b/system_tests/program_test.go index ea4ccddd03..5fbb1189c7 100644 --- a/system_tests/program_test.go +++ b/system_tests/program_test.go @@ -30,6 +30,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbcompress" "github.com/offchainlabs/nitro/arbos/programs" "github.com/offchainlabs/nitro/arbos/util" @@ -1000,6 +1001,31 @@ func testCreate(t *testing.T, jit bool) { validateBlockRange(t, blocks, jit, builder) } +func TestProgramInfiniteLoopShouldCauseErrOutOfGas(t *testing.T) { + t.Parallel() + testInfiniteLoopCausesErrOutOfGas(t, true) + testInfiniteLoopCausesErrOutOfGas(t, false) +} + +func testInfiniteLoopCausesErrOutOfGas(t *testing.T, jit bool) { + builder, auth, cleanup := setupProgramTest(t, jit) + ctx := builder.ctx + l2info := builder.L2Info + l2client := builder.L2.Client + defer cleanup() + + userWasm := deployWasm(t, ctx, auth, l2client, "../arbitrator/prover/test-cases/user.wat") + // Passing input of size 4 invokes $infinite_loop function that calls the infinite loop + tx := l2info.PrepareTxTo("Owner", &userWasm, 1000000, nil, make([]byte, 4)) + Require(t, l2client.SendTransaction(ctx, tx)) + receipt, err := EnsureTxSucceeded(ctx, l2client, tx) + if !strings.Contains(err.Error(), vm.ErrOutOfGas.Error()) { + t.Fatalf("transaction should have failed with out of gas error but instead failed with: %v", err) + } + + validateBlocks(t, receipt.BlockNumber.Uint64(), jit, builder) +} + func TestProgramMemory(t *testing.T) { t.Parallel() testMemory(t, true) diff --git a/system_tests/pruning_test.go b/system_tests/pruning_test.go index 90ac3c6909..f49ed8ddcf 100644 --- a/system_tests/pruning_test.go +++ b/system_tests/pruning_test.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/trie" + "github.com/offchainlabs/nitro/cmd/conf" "github.com/offchainlabs/nitro/cmd/pruning" "github.com/offchainlabs/nitro/execution/gethexec" diff --git a/system_tests/recreatestate_rpc_test.go b/system_tests/recreatestate_rpc_test.go index 22329a1be5..dc1356347c 100644 --- a/system_tests/recreatestate_rpc_test.go +++ b/system_tests/recreatestate_rpc_test.go @@ -21,6 +21,7 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/trie" + "github.com/offchainlabs/nitro/execution/gethexec" "github.com/offchainlabs/nitro/util" ) diff --git a/system_tests/retryable_test.go b/system_tests/retryable_test.go index 89446e3c4b..55d26c8372 100644 --- a/system_tests/retryable_test.go +++ b/system_tests/retryable_test.go @@ -16,13 +16,14 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/gasestimator" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/l2pricing" "github.com/offchainlabs/nitro/arbos/retryables" "github.com/offchainlabs/nitro/arbos/util" - + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/node_interfacegen" @@ -75,7 +76,7 @@ func retryableSetup(t *testing.T, modifyNodeConfig ...func(*NodeBuilder)) ( if !msgTypes[message.Message.Header.Kind] { continue } - txs, err := arbos.ParseL2Transactions(message.Message, params.ArbitrumDevTestChainConfig().ChainID) + txs, err := arbos.ParseL2Transactions(message.Message, chaininfo.ArbitrumDevTestChainConfig().ChainID) Require(t, err) for _, tx := range txs { if txTypes[tx.Type()] { diff --git a/system_tests/seq_coordinator_test.go b/system_tests/seq_coordinator_test.go index e7d8bf6b39..76cff95f04 100644 --- a/system_tests/seq_coordinator_test.go +++ b/system_tests/seq_coordinator_test.go @@ -8,7 +8,6 @@ import ( "errors" "fmt" "math/big" - "net" "testing" "time" @@ -153,7 +152,15 @@ func TestRedisSeqCoordinatorPriorities(t *testing.T) { nodeForwardTarget := func(nodeNum int) int { execNode := testNodes[nodeNum].ExecNode - fwTarget := execNode.TxPublisher.(*gethexec.TxPreChecker).TransactionPublisher.(*gethexec.Sequencer).ForwardTarget() + preChecker, ok := execNode.TxPublisher.(*gethexec.TxPreChecker) + if !ok { + return -1 + } + sequencer, ok := preChecker.TransactionPublisher.(*gethexec.Sequencer) + if !ok { + return -1 + } + fwTarget := sequencer.ForwardTarget() if fwTarget == "" { return -1 } @@ -323,7 +330,7 @@ func testCoordinatorMessageSync(t *testing.T, successCase bool) { // nodeB doesn't sequence transactions, but adds messages related to them to its output feed. // nodeBOutputFeedReader reads those messages from this feed and processes them. // nodeBOutputFeedReader doesn't read messages from L1 since none of the nodes posts to L1. - nodeBPort := testClientB.ConsensusNode.BroadcastServer.ListenerAddr().(*net.TCPAddr).Port + nodeBPort := testhelpers.AddrTCPPort(testClientB.ConsensusNode.BroadcastServer.ListenerAddr(), t) nodeConfigNodeBOutputFeedReader := arbnode.ConfigDefaultL1NonSequencerTest() nodeConfigNodeBOutputFeedReader.Feed.Input = *newBroadcastClientConfigTest(nodeBPort) testClientNodeBOutputFeedReader, cleanupNodeBOutputFeedReader := builder.Build2ndNode(t, &SecondNodeParams{nodeConfig: nodeConfigNodeBOutputFeedReader}) diff --git a/system_tests/seq_nonce_test.go b/system_tests/seq_nonce_test.go index c099563e29..7486b8a4ae 100644 --- a/system_tests/seq_nonce_test.go +++ b/system_tests/seq_nonce_test.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/offchainlabs/nitro/util/arbmath" ) diff --git a/system_tests/seq_pause_test.go b/system_tests/seq_pause_test.go index 6ce464d8da..c867a98271 100644 --- a/system_tests/seq_pause_test.go +++ b/system_tests/seq_pause_test.go @@ -8,6 +8,7 @@ import ( "time" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/execution/gethexec" ) diff --git a/system_tests/seq_reject_test.go b/system_tests/seq_reject_test.go index 2dbdba6804..be230e26f5 100644 --- a/system_tests/seq_reject_test.go +++ b/system_tests/seq_reject_test.go @@ -7,7 +7,6 @@ import ( "context" "fmt" "math/big" - "net" "strings" "sync" "sync/atomic" @@ -17,9 +16,11 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/colors" + "github.com/offchainlabs/nitro/util/testhelpers" ) func TestSequencerRejection(t *testing.T) { @@ -35,7 +36,7 @@ func TestSequencerRejection(t *testing.T) { builder := NewNodeBuilder(ctx).DefaultConfig(t, false) builder.takeOwnership = false - port := builderSeq.L2.ConsensusNode.BroadcastServer.ListenerAddr().(*net.TCPAddr).Port + port := testhelpers.AddrTCPPort(builderSeq.L2.ConsensusNode.BroadcastServer.ListenerAddr(), t) builder.nodeConfig.Feed.Input = *newBroadcastClientConfigTest(port) cleanup := builder.Build(t) defer cleanup() diff --git a/system_tests/seqcompensation_test.go b/system_tests/seqcompensation_test.go index 156ced6bfc..41133b8a42 100644 --- a/system_tests/seqcompensation_test.go +++ b/system_tests/seqcompensation_test.go @@ -10,6 +10,7 @@ import ( "time" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbos/l1pricing" ) diff --git a/system_tests/seqfeed_test.go b/system_tests/seqfeed_test.go index 21f0755225..b757291561 100644 --- a/system_tests/seqfeed_test.go +++ b/system_tests/seqfeed_test.go @@ -7,7 +7,6 @@ import ( "context" "fmt" "math/big" - "net" "reflect" "testing" "time" @@ -15,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/l1pricing" @@ -61,7 +61,7 @@ func TestSequencerFeed(t *testing.T) { defer cleanupSeq() seqInfo, seqNode, seqClient := builderSeq.L2Info, builderSeq.L2.ConsensusNode, builderSeq.L2.Client - port := seqNode.BroadcastServer.ListenerAddr().(*net.TCPAddr).Port + port := testhelpers.AddrTCPPort(seqNode.BroadcastServer.ListenerAddr(), t) builder := NewNodeBuilder(ctx).DefaultConfig(t, false) builder.nodeConfig.Feed.Input = *newBroadcastClientConfigTest(port) builder.takeOwnership = false @@ -107,7 +107,7 @@ func TestRelayedSequencerFeed(t *testing.T) { Require(t, err) config := relay.ConfigDefault - port := seqNode.BroadcastServer.ListenerAddr().(*net.TCPAddr).Port + port := testhelpers.AddrTCPPort(seqNode.BroadcastServer.ListenerAddr(), t) config.Node.Feed.Input = *newBroadcastClientConfigTest(port) config.Node.Feed.Output = *newBroadcasterConfigTest() config.Chain.ID = bigChainId.Uint64() @@ -119,7 +119,7 @@ func TestRelayedSequencerFeed(t *testing.T) { Require(t, err) defer currentRelay.StopAndWait() - port = currentRelay.GetListenerAddr().(*net.TCPAddr).Port + port = testhelpers.AddrTCPPort(currentRelay.GetListenerAddr(), t) builder := NewNodeBuilder(ctx).DefaultConfig(t, false) builder.nodeConfig.Feed.Input = *newBroadcastClientConfigTest(port) builder.takeOwnership = false @@ -219,7 +219,7 @@ func testLyingSequencer(t *testing.T, dasModeStr string) { defer cleanupC() l2clientC, nodeC := testClientC.Client, testClientC.ConsensusNode - port := nodeC.BroadcastServer.ListenerAddr().(*net.TCPAddr).Port + port := testhelpers.AddrTCPPort(nodeC.BroadcastServer.ListenerAddr(), t) // The client node, connects to lying sequencer's feed nodeConfigB := arbnode.ConfigDefaultL1NonSequencerTest() @@ -361,7 +361,7 @@ func testBlockHashComparison(t *testing.T, blockHash *common.Hash, mustMismatch } defer wsBroadcastServer.StopAndWait() - port := wsBroadcastServer.ListenerAddr().(*net.TCPAddr).Port + port := testhelpers.AddrTCPPort(wsBroadcastServer.ListenerAddr(), t) builder := NewNodeBuilder(ctx).DefaultConfig(t, true) builder.nodeConfig.Feed.Input = *newBroadcastClientConfigTest(port) @@ -468,7 +468,7 @@ func TestPopulateFeedBacklog(t *testing.T) { // Creates a sink node that will read from the output feed of the previous node. nodeConfigSink := builder.nodeConfig - port := builder.L2.ConsensusNode.BroadcastServer.ListenerAddr().(*net.TCPAddr).Port + port := testhelpers.AddrTCPPort(builder.L2.ConsensusNode.BroadcastServer.ListenerAddr(), t) nodeConfigSink.Feed.Input = *newBroadcastClientConfigTest(port) testClientSink, cleanupSink := builder.Build2ndNode(t, &SecondNodeParams{nodeConfig: nodeConfigSink}) defer cleanupSink() diff --git a/system_tests/staker_test.go b/system_tests/staker_test.go index 67ce260529..69645d8878 100644 --- a/system_tests/staker_test.go +++ b/system_tests/staker_test.go @@ -33,6 +33,7 @@ import ( "github.com/offchainlabs/nitro/solgen/go/rollupgen" "github.com/offchainlabs/nitro/solgen/go/upgrade_executorgen" "github.com/offchainlabs/nitro/staker" + legacystaker "github.com/offchainlabs/nitro/staker/legacy" "github.com/offchainlabs/nitro/staker/validatorwallet" "github.com/offchainlabs/nitro/util" "github.com/offchainlabs/nitro/util/arbmath" @@ -152,7 +153,7 @@ func stakerTestImpl(t *testing.T, faultyStaker bool, honestStakerInactive bool) validatorUtils, err := rollupgen.NewValidatorUtils(l2nodeA.DeployInfo.ValidatorUtils, builder.L1.Client) Require(t, err) - valConfigA := staker.TestL1ValidatorConfig + valConfigA := legacystaker.TestL1ValidatorConfig parentChainID, err := builder.L1.Client.ChainID(ctx) if err != nil { t.Fatalf("Failed to get parent chain id: %v", err) @@ -208,11 +209,11 @@ func stakerTestImpl(t *testing.T, faultyStaker bool, honestStakerInactive bool) Require(t, err) err = statelessA.Start(ctx) Require(t, err) - stakerA, err := staker.NewStaker( + stakerA, err := legacystaker.NewStaker( l2nodeA.L1Reader, valWalletA, bind.CallOpts{}, - func() *staker.L1ValidatorConfig { return &valConfigA }, + func() *legacystaker.L1ValidatorConfig { return &valConfigA }, nil, statelessA, nil, @@ -222,7 +223,7 @@ func stakerTestImpl(t *testing.T, faultyStaker bool, honestStakerInactive bool) ) Require(t, err) err = stakerA.Initialize(ctx) - if stakerA.Strategy() != staker.WatchtowerStrategy { + if stakerA.Strategy() != legacystaker.WatchtowerStrategy { err = valWalletA.Initialize(ctx) Require(t, err) } @@ -246,7 +247,7 @@ func stakerTestImpl(t *testing.T, faultyStaker bool, honestStakerInactive bool) } valWalletB, err := validatorwallet.NewEOA(dpB, l2nodeB.DeployInfo.Rollup, l2nodeB.L1Reader.Client(), func() uint64 { return 0 }) Require(t, err) - valConfigB := staker.TestL1ValidatorConfig + valConfigB := legacystaker.TestL1ValidatorConfig valConfigB.Strategy = "MakeNodes" statelessB, err := staker.NewStatelessBlockValidator( l2nodeB.InboxReader, @@ -261,11 +262,11 @@ func stakerTestImpl(t *testing.T, faultyStaker bool, honestStakerInactive bool) Require(t, err) err = statelessB.Start(ctx) Require(t, err) - stakerB, err := staker.NewStaker( + stakerB, err := legacystaker.NewStaker( l2nodeB.L1Reader, valWalletB, bind.CallOpts{}, - func() *staker.L1ValidatorConfig { return &valConfigB }, + func() *legacystaker.L1ValidatorConfig { return &valConfigB }, nil, statelessB, nil, @@ -276,18 +277,18 @@ func stakerTestImpl(t *testing.T, faultyStaker bool, honestStakerInactive bool) Require(t, err) err = stakerB.Initialize(ctx) Require(t, err) - if stakerB.Strategy() != staker.WatchtowerStrategy { + if stakerB.Strategy() != legacystaker.WatchtowerStrategy { err = valWalletB.Initialize(ctx) Require(t, err) } valWalletC := validatorwallet.NewNoOp(builder.L1.Client, l2nodeA.DeployInfo.Rollup) - valConfigC := staker.TestL1ValidatorConfig + valConfigC := legacystaker.TestL1ValidatorConfig valConfigC.Strategy = "Watchtower" - stakerC, err := staker.NewStaker( + stakerC, err := legacystaker.NewStaker( l2nodeA.L1Reader, valWalletC, bind.CallOpts{}, - func() *staker.L1ValidatorConfig { return &valConfigC }, + func() *legacystaker.L1ValidatorConfig { return &valConfigC }, nil, statelessA, nil, @@ -296,7 +297,7 @@ func stakerTestImpl(t *testing.T, faultyStaker bool, honestStakerInactive bool) nil, ) Require(t, err) - if stakerC.Strategy() != staker.WatchtowerStrategy { + if stakerC.Strategy() != legacystaker.WatchtowerStrategy { err = valWalletC.Initialize(ctx) Require(t, err) } @@ -409,7 +410,7 @@ func stakerTestImpl(t *testing.T, faultyStaker bool, honestStakerInactive bool) if faultyStaker { conflictInfo, err := validatorUtils.FindStakerConflict(&bind.CallOpts{}, l2nodeA.DeployInfo.Rollup, l1authA.From, srv.Address, big.NewInt(1024)) Require(t, err) - if staker.ConflictType(conflictInfo.Ty) == staker.CONFLICT_TYPE_FOUND { + if legacystaker.ConflictType(conflictInfo.Ty) == legacystaker.CONFLICT_TYPE_FOUND { cancelBackgroundTxs() } } diff --git a/system_tests/state_fuzz_test.go b/system_tests/state_fuzz_test.go index c8312350e6..8388e8417c 100644 --- a/system_tests/state_fuzz_test.go +++ b/system_tests/state_fuzz_test.go @@ -20,6 +20,7 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" + "github.com/offchainlabs/nitro/arbcompress" "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbosState" @@ -27,6 +28,7 @@ import ( "github.com/offchainlabs/nitro/arbos/l2pricing" "github.com/offchainlabs/nitro/arbstate" "github.com/offchainlabs/nitro/arbstate/daprovider" + "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/statetransfer" "github.com/offchainlabs/nitro/util/testhelpers/env" ) @@ -135,7 +137,7 @@ func FuzzStateTransition(f *testing.F) { return } chainDb := rawdb.NewMemoryDatabase() - chainConfig := params.ArbitrumRollupGoerliTestnetChainConfig() + chainConfig := chaininfo.ArbitrumRollupGoerliTestnetChainConfig() serializedChainConfig, err := json.Marshal(chainConfig) if err != nil { panic(err) @@ -206,7 +208,7 @@ func FuzzStateTransition(f *testing.F) { } numberOfMessageRunModes := uint8(core.MessageReplayMode) + 1 // TODO update number of run modes when new mode is added runMode := core.MessageRunMode(runModeSeed % numberOfMessageRunModes) - _, err = BuildBlock(statedb, genesis, noopChainContext{}, params.ArbitrumOneChainConfig(), inbox, seqBatch, runMode) + _, err = BuildBlock(statedb, genesis, noopChainContext{}, chaininfo.ArbitrumOneChainConfig(), inbox, seqBatch, runMode) if err != nil { // With the fixed header it shouldn't be possible to read a delayed message, // and no other type of error should be possible. diff --git a/system_tests/staterecovery_test.go b/system_tests/staterecovery_test.go index 42faee7e0d..d5ed3fcd33 100644 --- a/system_tests/staterecovery_test.go +++ b/system_tests/staterecovery_test.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/trie" + "github.com/offchainlabs/nitro/cmd/conf" "github.com/offchainlabs/nitro/cmd/staterecovery" "github.com/offchainlabs/nitro/execution/gethexec" diff --git a/system_tests/stylus_trace_test.go b/system_tests/stylus_trace_test.go index 52039df460..fe5de21dad 100644 --- a/system_tests/stylus_trace_test.go +++ b/system_tests/stylus_trace_test.go @@ -10,12 +10,14 @@ import ( "math/big" "testing" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/tracers/logger" - "github.com/holiman/uint256" + "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" diff --git a/system_tests/stylus_tracer_test.go b/system_tests/stylus_tracer_test.go index 7fda39f04e..b833d7df17 100644 --- a/system_tests/stylus_tracer_test.go +++ b/system_tests/stylus_tracer_test.go @@ -7,9 +7,11 @@ import ( "encoding/binary" "testing" + "github.com/google/go-cmp/cmp" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" - "github.com/google/go-cmp/cmp" + "github.com/offchainlabs/nitro/execution/gethexec" "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/util/containers" diff --git a/system_tests/test_info.go b/system_tests/test_info.go index 6313e392ca..105d491006 100644 --- a/system_tests/test_info.go +++ b/system_tests/test_info.go @@ -11,16 +11,16 @@ import ( "sync/atomic" "testing" - "github.com/offchainlabs/nitro/arbos/l2pricing" - "github.com/offchainlabs/nitro/util" - "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" + + "github.com/offchainlabs/nitro/arbos/l2pricing" "github.com/offchainlabs/nitro/statetransfer" + "github.com/offchainlabs/nitro/util" ) var simulatedChainID = big.NewInt(1337) diff --git a/system_tests/triedb_race_test.go b/system_tests/triedb_race_test.go index 7828cf386d..78a7258aea 100644 --- a/system_tests/triedb_race_test.go +++ b/system_tests/triedb_race_test.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/util/testhelpers" ) diff --git a/system_tests/twonodeslong_test.go b/system_tests/twonodeslong_test.go index 60707b83fb..5791661b16 100644 --- a/system_tests/twonodeslong_test.go +++ b/system_tests/twonodeslong_test.go @@ -14,10 +14,10 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbos/l2pricing" "github.com/offchainlabs/nitro/arbutil" - - "github.com/ethereum/go-ethereum/core/types" ) func testTwoNodesLong(t *testing.T, dasModeStr string) { diff --git a/system_tests/unsupported_txtypes_test.go b/system_tests/unsupported_txtypes_test.go index a228cb2454..6e92243c85 100644 --- a/system_tests/unsupported_txtypes_test.go +++ b/system_tests/unsupported_txtypes_test.go @@ -13,10 +13,11 @@ import ( "math/big" "testing" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" - "github.com/holiman/uint256" ) func TestBlobAndInternalTxsReject(t *testing.T) { diff --git a/system_tests/validation_mock_test.go b/system_tests/validation_mock_test.go index 912b48ea6a..98dab7ad39 100644 --- a/system_tests/validation_mock_test.go +++ b/system_tests/validation_mock_test.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbutil" @@ -21,11 +22,10 @@ import ( "github.com/offchainlabs/nitro/util/containers" "github.com/offchainlabs/nitro/util/rpcclient" "github.com/offchainlabs/nitro/validator" + validatorclient "github.com/offchainlabs/nitro/validator/client" "github.com/offchainlabs/nitro/validator/server_api" "github.com/offchainlabs/nitro/validator/server_arb" "github.com/offchainlabs/nitro/validator/valnode" - - validatorclient "github.com/offchainlabs/nitro/validator/client" ) type mockSpawner struct { @@ -84,7 +84,7 @@ func (s *mockSpawner) Stop() {} func (s *mockSpawner) Name() string { return "mock" } func (s *mockSpawner) Room() int { return 4 } -func (s *mockSpawner) CreateExecutionRun(wasmModuleRoot common.Hash, input *validator.ValidationInput) containers.PromiseInterface[validator.ExecutionRun] { +func (s *mockSpawner) CreateExecutionRun(wasmModuleRoot common.Hash, input *validator.ValidationInput, _ bool) containers.PromiseInterface[validator.ExecutionRun] { s.ExecSpawned = append(s.ExecSpawned, input.Id) return containers.NewReadyPromise[validator.ExecutionRun](&mockExecRun{ startState: input.StartState, @@ -155,6 +155,10 @@ func (r *mockExecRun) PrepareRange(uint64, uint64) containers.PromiseInterface[s return containers.NewReadyPromise[struct{}](struct{}{}, nil) } +func (r *mockExecRun) CheckAlive(ctx context.Context) error { + return nil +} + func (r *mockExecRun) Close() {} func createMockValidationNode(t *testing.T, ctx context.Context, config *server_arb.ArbitratorSpawnerConfig) (*mockSpawner, *node.Node) { @@ -256,7 +260,7 @@ func TestValidationServerAPI(t *testing.T) { if res != endState { t.Error("unexpected mock validation run") } - execRun, err := client.CreateExecutionRun(wasmRoot, &valInput).Await(ctx) + execRun, err := client.CreateExecutionRun(wasmRoot, &valInput, false).Await(ctx) Require(t, err) step0 := execRun.GetStepAt(0) step0Res, err := step0.Await(ctx) @@ -381,9 +385,9 @@ func TestExecutionKeepAlive(t *testing.T) { Require(t, err) valInput := validator.ValidationInput{} - runDefault, err := clientDefault.CreateExecutionRun(wasmRoot, &valInput).Await(ctx) + runDefault, err := clientDefault.CreateExecutionRun(wasmRoot, &valInput, false).Await(ctx) Require(t, err) - runShortTO, err := clientShortTO.CreateExecutionRun(wasmRoot, &valInput).Await(ctx) + runShortTO, err := clientShortTO.CreateExecutionRun(wasmRoot, &valInput, false).Await(ctx) Require(t, err) <-time.After(time.Second * 10) stepDefault := runDefault.GetStepAt(0) diff --git a/system_tests/wrap_transaction_test.go b/system_tests/wrap_transaction_test.go index 36052fb2db..dd68c25d6a 100644 --- a/system_tests/wrap_transaction_test.go +++ b/system_tests/wrap_transaction_test.go @@ -18,6 +18,7 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" "github.com/offchainlabs/nitro/util/headerreader" diff --git a/util/arbmath/bits.go b/util/arbmath/bits.go index 1b91e2755a..501ef9787e 100644 --- a/util/arbmath/bits.go +++ b/util/arbmath/bits.go @@ -6,8 +6,9 @@ package arbmath import ( "encoding/binary" - "github.com/ethereum/go-ethereum/common" "github.com/holiman/uint256" + + "github.com/ethereum/go-ethereum/common" ) type bytes32 = common.Hash diff --git a/util/arbmath/math_test.go b/util/arbmath/math_test.go index 3660f3657e..befa7813e1 100644 --- a/util/arbmath/math_test.go +++ b/util/arbmath/math_test.go @@ -11,6 +11,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/util/testhelpers" ) diff --git a/util/containers/syncmap.go b/util/containers/syncmap.go index e24d56fda6..9190d81974 100644 --- a/util/containers/syncmap.go +++ b/util/containers/syncmap.go @@ -1,6 +1,9 @@ package containers -import "sync" +import ( + "fmt" + "sync" +) type SyncMap[K any, V any] struct { internal sync.Map @@ -12,7 +15,11 @@ func (m *SyncMap[K, V]) Load(key K) (V, bool) { var empty V return empty, false } - return val.(V), true + vVal, ok := val.(V) + if !ok { + panic(fmt.Sprintf("type assertion failed on %s", val)) + } + return vVal, true } func (m *SyncMap[K, V]) Store(key K, val V) { @@ -27,7 +34,11 @@ func (m *SyncMap[K, V]) Delete(key K) { func (m *SyncMap[K, V]) Keys() []K { s := make([]K, 0) m.internal.Range(func(k, v interface{}) bool { - s = append(s, k.(K)) + kKey, ok := k.(K) + if !ok { + panic(fmt.Sprintf("type assertion failed on %s", k)) + } + s = append(s, kKey) return true }) return s diff --git a/util/contracts/address_verifier.go b/util/contracts/address_verifier.go index eb2f862210..66686e9dc8 100644 --- a/util/contracts/address_verifier.go +++ b/util/contracts/address_verifier.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/solgen/go/bridgegen" ) diff --git a/util/dbutil/dbutil.go b/util/dbutil/dbutil.go index 6573c5742c..28a57025e9 100644 --- a/util/dbutil/dbutil.go +++ b/util/dbutil/dbutil.go @@ -10,9 +10,10 @@ import ( "regexp" "github.com/cockroachdb/pebble" + "github.com/syndtr/goleveldb/leveldb" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb/memorydb" - "github.com/syndtr/goleveldb/leveldb" ) func IsErrNotFound(err error) bool { diff --git a/util/headerreader/blob_client.go b/util/headerreader/blob_client.go index fbdb4335a0..0c92ff2e85 100644 --- a/util/headerreader/blob_client.go +++ b/util/headerreader/blob_client.go @@ -15,16 +15,17 @@ import ( "path" "time" + "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/crypto/kzg4844" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/blobs" "github.com/offchainlabs/nitro/util/jsonapi" "github.com/offchainlabs/nitro/util/pretty" - - "github.com/spf13/pflag" ) type BlobClient struct { diff --git a/util/headerreader/blob_client_test.go b/util/headerreader/blob_client_test.go index 9735899daa..52c22e434a 100644 --- a/util/headerreader/blob_client_test.go +++ b/util/headerreader/blob_client_test.go @@ -11,8 +11,9 @@ import ( "reflect" "testing" - "github.com/offchainlabs/nitro/util/testhelpers" "github.com/r3labs/diff/v3" + + "github.com/offchainlabs/nitro/util/testhelpers" ) func TestSaveBlobsToDisk(t *testing.T) { diff --git a/util/headerreader/header_reader.go b/util/headerreader/header_reader.go index 98f778dee8..f8e3bc6cd6 100644 --- a/util/headerreader/header_reader.go +++ b/util/headerreader/header_reader.go @@ -12,6 +12,8 @@ import ( "sync" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -19,9 +21,9 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/stopwaiter" - flag "github.com/spf13/pflag" ) // A regexp matching "execution reverted" errors returned from the parent chain RPC. diff --git a/util/jsonapi/preimages_test.go b/util/jsonapi/preimages_test.go index 3074a1e698..5b699df5fe 100644 --- a/util/jsonapi/preimages_test.go +++ b/util/jsonapi/preimages_test.go @@ -10,6 +10,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/util/testhelpers" ) diff --git a/util/merkletree/merkleAccumulator_test.go b/util/merkletree/merkleAccumulator_test.go index d26f0244d3..95e1862b7a 100644 --- a/util/merkletree/merkleAccumulator_test.go +++ b/util/merkletree/merkleAccumulator_test.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/merkleAccumulator" ) diff --git a/util/merkletree/merkleEventProof.go b/util/merkletree/merkleEventProof.go index 130249cc3f..cab85dbefe 100644 --- a/util/merkletree/merkleEventProof.go +++ b/util/merkletree/merkleEventProof.go @@ -5,6 +5,7 @@ package merkletree import ( "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbos/merkleAccumulator" ) diff --git a/util/merkletree/merkleEventProof_test.go b/util/merkletree/merkleEventProof_test.go index 6af8479190..c0c8e777cb 100644 --- a/util/merkletree/merkleEventProof_test.go +++ b/util/merkletree/merkleEventProof_test.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/merkleAccumulator" "github.com/offchainlabs/nitro/arbos/storage" diff --git a/util/merkletree/merkleTree.go b/util/merkletree/merkleTree.go index fffa9bcabc..9cf7b485d9 100644 --- a/util/merkletree/merkleTree.go +++ b/util/merkletree/merkleTree.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/arbos/util" ) diff --git a/util/redisutil/redisutil.go b/util/redisutil/redisutil.go index 01ba836d5b..fafb816b8a 100644 --- a/util/redisutil/redisutil.go +++ b/util/redisutil/redisutil.go @@ -1,14 +1,231 @@ package redisutil -import "github.com/redis/go-redis/v9" +import ( + "fmt" + "net" + "net/url" + "sort" + "strconv" + "strings" + "time" -func RedisClientFromURL(url string) (redis.UniversalClient, error) { - if url == "" { + "github.com/redis/go-redis/v9" +) + +// RedisClientFromURL creates a new Redis client based on the provided URL. +// The URL scheme can be either `redis` or `redis+sentinel`. +func RedisClientFromURL(redisUrl string) (redis.UniversalClient, error) { + if redisUrl == "" { return nil, nil } - redisOptions, err := redis.ParseURL(url) + u, err := url.Parse(redisUrl) + if err != nil { + return nil, err + } + if u.Scheme == "redis+sentinel" { + redisOptions, err := parseFailoverRedisUrl(redisUrl) + if err != nil { + return nil, err + } + return redis.NewFailoverClient(redisOptions), nil + } + redisOptions, err := redis.ParseURL(redisUrl) if err != nil { return nil, err } return redis.NewClient(redisOptions), nil } + +// Designed using https://github.com/redis/go-redis/blob/a8590e987945b7ba050569cc3b94b8ece49e99e3/options.go#L283 as reference +// Example Usage : +// +// redis+sentinel://:@:,:,:/?dial_timeout=3&db=1&read_timeout=6s&max_retries=2 +func parseFailoverRedisUrl(redisUrl string) (*redis.FailoverOptions, error) { + u, err := url.Parse(redisUrl) + if err != nil { + return nil, err + } + o := &redis.FailoverOptions{} + o.SentinelUsername, o.SentinelPassword = getUserPassword(u) + o.SentinelAddrs = getAddressesWithDefaults(u) + f := strings.FieldsFunc(u.Path, func(r rune) bool { + return r == '/' + }) + switch len(f) { + case 0: + return nil, fmt.Errorf("redis: master name is required") + case 1: + o.DB = 0 + o.MasterName = f[0] + case 2: + o.MasterName = f[0] + var err error + if o.DB, err = strconv.Atoi(f[1]); err != nil { + return nil, fmt.Errorf("redis: invalid database number: %q", f[0]) + } + default: + return nil, fmt.Errorf("redis: invalid URL path: %s", u.Path) + } + + return setupConnParams(u, o) +} + +func getUserPassword(u *url.URL) (string, string) { + var user, password string + if u.User != nil { + user = u.User.Username() + if p, ok := u.User.Password(); ok { + password = p + } + } + return user, password +} + +func getAddressesWithDefaults(u *url.URL) []string { + urlHosts := strings.Split(u.Host, ",") + var addresses []string + for _, urlHost := range urlHosts { + host, port, err := net.SplitHostPort(urlHost) + if err != nil { + host = u.Host + } + if host == "" { + host = "localhost" + } + if port == "" { + port = "6379" + } + addresses = append(addresses, net.JoinHostPort(host, port)) + } + return addresses +} + +type queryOptions struct { + q url.Values + err error +} + +func (o *queryOptions) has(name string) bool { + return len(o.q[name]) > 0 +} + +func (o *queryOptions) string(name string) string { + vs := o.q[name] + if len(vs) == 0 { + return "" + } + delete(o.q, name) // enable detection of unknown parameters + return vs[len(vs)-1] +} + +func (o *queryOptions) int(name string) int { + s := o.string(name) + if s == "" { + return 0 + } + i, err := strconv.Atoi(s) + if err == nil { + return i + } + if o.err == nil { + o.err = fmt.Errorf("redis: invalid %s number: %w", name, err) + } + return 0 +} + +func (o *queryOptions) duration(name string) time.Duration { + s := o.string(name) + if s == "" { + return 0 + } + // try plain number first + if i, err := strconv.Atoi(s); err == nil { + if i <= 0 { + // disable timeouts + return -1 + } + return time.Duration(i) * time.Second + } + dur, err := time.ParseDuration(s) + if err == nil { + return dur + } + if o.err == nil { + o.err = fmt.Errorf("redis: invalid %s duration: %w", name, err) + } + return 0 +} + +func (o *queryOptions) bool(name string) bool { + switch s := o.string(name); s { + case "true", "1": + return true + case "false", "0", "": + return false + default: + if o.err == nil { + o.err = fmt.Errorf("redis: invalid %s boolean: expected true/false/1/0 or an empty string, got %q", name, s) + } + return false + } +} + +func (o *queryOptions) remaining() []string { + if len(o.q) == 0 { + return nil + } + keys := make([]string, 0, len(o.q)) + for k := range o.q { + keys = append(keys, k) + } + sort.Strings(keys) + return keys +} + +func setupConnParams(u *url.URL, o *redis.FailoverOptions) (*redis.FailoverOptions, error) { + q := queryOptions{q: u.Query()} + + // compat: a future major release may use q.int("db") + if tmp := q.string("db"); tmp != "" { + db, err := strconv.Atoi(tmp) + if err != nil { + return nil, fmt.Errorf("redis: invalid database number: %w", err) + } + o.DB = db + } + + o.Protocol = q.int("protocol") + o.ClientName = q.string("client_name") + o.MaxRetries = q.int("max_retries") + o.MinRetryBackoff = q.duration("min_retry_backoff") + o.MaxRetryBackoff = q.duration("max_retry_backoff") + o.DialTimeout = q.duration("dial_timeout") + o.ReadTimeout = q.duration("read_timeout") + o.WriteTimeout = q.duration("write_timeout") + o.PoolFIFO = q.bool("pool_fifo") + o.PoolSize = q.int("pool_size") + o.PoolTimeout = q.duration("pool_timeout") + o.MinIdleConns = q.int("min_idle_conns") + o.MaxIdleConns = q.int("max_idle_conns") + o.MaxActiveConns = q.int("max_active_conns") + if q.has("conn_max_idle_time") { + o.ConnMaxIdleTime = q.duration("conn_max_idle_time") + } else { + o.ConnMaxIdleTime = q.duration("idle_timeout") + } + if q.has("conn_max_lifetime") { + o.ConnMaxLifetime = q.duration("conn_max_lifetime") + } else { + o.ConnMaxLifetime = q.duration("max_conn_age") + } + if q.err != nil { + return nil, q.err + } + + // any parameters left? + if r := q.remaining(); len(r) > 0 { + return nil, fmt.Errorf("redis: unexpected option: %s", strings.Join(r, ", ")) + } + + return o, nil +} diff --git a/util/redisutil/test_redis.go b/util/redisutil/test_redis.go index 6d493b1546..9cabfc23d6 100644 --- a/util/redisutil/test_redis.go +++ b/util/redisutil/test_redis.go @@ -10,6 +10,7 @@ import ( "testing" "github.com/alicebob/miniredis/v2" + "github.com/offchainlabs/nitro/util/testhelpers" ) diff --git a/util/rpcclient/rpcclient_test.go b/util/rpcclient/rpcclient_test.go index 1a7da54774..f711747b70 100644 --- a/util/rpcclient/rpcclient_test.go +++ b/util/rpcclient/rpcclient_test.go @@ -9,10 +9,12 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/rpc" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" + + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/util/testhelpers" ) diff --git a/util/sharedmetrics/sharedmetrics.go b/util/sharedmetrics/sharedmetrics.go index 9b4b3609bc..1df34d4d54 100644 --- a/util/sharedmetrics/sharedmetrics.go +++ b/util/sharedmetrics/sharedmetrics.go @@ -2,6 +2,7 @@ package sharedmetrics import ( "github.com/ethereum/go-ethereum/metrics" + "github.com/offchainlabs/nitro/arbutil" ) diff --git a/util/signature/sign_verify.go b/util/signature/sign_verify.go index 5ed852bfbc..f222860d8b 100644 --- a/util/signature/sign_verify.go +++ b/util/signature/sign_verify.go @@ -4,9 +4,11 @@ import ( "context" "errors" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/util/contracts" - flag "github.com/spf13/pflag" ) type SignVerify struct { diff --git a/util/stopwaiter/stopwaiter.go b/util/stopwaiter/stopwaiter.go index 1e70e328eb..c242ac26ab 100644 --- a/util/stopwaiter/stopwaiter.go +++ b/util/stopwaiter/stopwaiter.go @@ -13,6 +13,7 @@ import ( "time" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/containers" ) @@ -95,20 +96,12 @@ func (s *StopWaiterSafe) Start(ctx context.Context, parent any) error { } func (s *StopWaiterSafe) StopOnly() { - _ = s.stopOnly() -} - -// returns true if stop function was called -func (s *StopWaiterSafe) stopOnly() bool { - stopWasCalled := false s.mutex.Lock() defer s.mutex.Unlock() if s.started && !s.stopped { s.stopFunc() - stopWasCalled = true } s.stopped = true - return stopWasCalled } // StopAndWait may be called multiple times, even before start. @@ -125,9 +118,15 @@ func getAllStackTraces() string { } func (s *StopWaiterSafe) stopAndWaitImpl(warningTimeout time.Duration) error { - if !s.stopOnly() { + s.StopOnly() + if !s.Started() { + // No need to wait, because nothing can be started if it's already stopped. return nil } + // Even if StopOnly has been previously called, make sure we wait for everything to shut down. + // Otherwise, a StopOnly call followed by StopAndWait might return early without waiting. + // At this point started must be true (because it was true above and cannot go back to false), + // so GetWaitChannel won't return an error. waitChan, err := s.GetWaitChannel() if err != nil { return err diff --git a/util/stopwaiter/stopwaiter_test.go b/util/stopwaiter/stopwaiter_test.go index 5319927887..68e49ac2be 100644 --- a/util/stopwaiter/stopwaiter_test.go +++ b/util/stopwaiter/stopwaiter_test.go @@ -5,10 +5,12 @@ package stopwaiter import ( "context" + "sync/atomic" "testing" "time" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/testhelpers" ) @@ -72,3 +74,19 @@ func TestStopWaiterStopAndWaitMultipleTimes(t *testing.T) { sw.StopAndWait() sw.StopAndWait() } + +func TestStopWaiterStopOnlyThenStopAndWait(t *testing.T) { + t.Parallel() + sw := StopWaiter{} + sw.Start(context.Background(), &TestStruct{}) + var threadStopping atomic.Bool + sw.LaunchThread(func(context.Context) { + time.Sleep(time.Second) + threadStopping.Store(true) + }) + sw.StopOnly() + sw.StopAndWait() + if !threadStopping.Load() { + t.Error("StopAndWait returned before background thread stopped") + } +} diff --git a/util/testhelpers/env/env.go b/util/testhelpers/env/env.go index 27d74465de..2a8090c212 100644 --- a/util/testhelpers/env/env.go +++ b/util/testhelpers/env/env.go @@ -14,7 +14,7 @@ import ( // An environment variable controls that behavior. func GetTestStateScheme() string { envTestStateScheme := os.Getenv("TEST_STATE_SCHEME") - stateScheme := rawdb.PathScheme + stateScheme := rawdb.HashScheme if envTestStateScheme == rawdb.PathScheme || envTestStateScheme == rawdb.HashScheme { stateScheme = envTestStateScheme } diff --git a/util/testhelpers/port.go b/util/testhelpers/port.go index d31fa41cdc..c17e9d9ec2 100644 --- a/util/testhelpers/port.go +++ b/util/testhelpers/port.go @@ -2,6 +2,7 @@ package testhelpers import ( "net" + "testing" ) // FreeTCPPortListener returns a listener listening on an unused local port. @@ -15,3 +16,13 @@ func FreeTCPPortListener() (net.Listener, error) { } return l, nil } + +// Func AddrTCPPort returns the port of a net.Addr. +func AddrTCPPort(n net.Addr, t *testing.T) int { + t.Helper() + tcpAddr, ok := n.(*net.TCPAddr) + if !ok { + t.Fatal("Could not get TCP address net.Addr") + } + return tcpAddr.Port +} diff --git a/util/testhelpers/port_test.go b/util/testhelpers/port_test.go index ef9bb18537..bb8f87b2f7 100644 --- a/util/testhelpers/port_test.go +++ b/util/testhelpers/port_test.go @@ -14,10 +14,18 @@ func TestFreeTCPPortListener(t *testing.T) { if err != nil { t.Fatal(err) } - if aListener.Addr().(*net.TCPAddr).Port == bListener.Addr().(*net.TCPAddr).Port { + aTCPAddr, ok := aListener.Addr().(*net.TCPAddr) + if !ok { + t.Fatalf("aListener.Addr() is not a *net.TCPAddr: %v", aListener.Addr()) + } + bTCPAddr, ok := bListener.Addr().(*net.TCPAddr) + if !ok { + t.Fatalf("bListener.Addr() is not a *net.TCPAddr: %v", aListener.Addr()) + } + if aTCPAddr.Port == bTCPAddr.Port { t.Errorf("FreeTCPPortListener() got same port: %v, %v", aListener, bListener) } - if aListener.Addr().(*net.TCPAddr).Port == 0 || bListener.Addr().(*net.TCPAddr).Port == 0 { + if aTCPAddr.Port == 0 || bTCPAddr.Port == 0 { t.Errorf("FreeTCPPortListener() got port 0") } } diff --git a/util/testhelpers/testhelpers.go b/util/testhelpers/testhelpers.go index 557d45808a..7f3e63a811 100644 --- a/util/testhelpers/testhelpers.go +++ b/util/testhelpers/testhelpers.go @@ -18,6 +18,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/colors" ) diff --git a/validator/client/redis/producer.go b/validator/client/redis/producer.go index c5726ffe8b..4bfb721f59 100644 --- a/validator/client/redis/producer.go +++ b/validator/client/redis/producer.go @@ -5,10 +5,14 @@ import ( "fmt" "sync/atomic" + "github.com/redis/go-redis/v9" + "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/pubsub" "github.com/offchainlabs/nitro/util/containers" "github.com/offchainlabs/nitro/util/redisutil" @@ -16,8 +20,6 @@ import ( "github.com/offchainlabs/nitro/validator" "github.com/offchainlabs/nitro/validator/server_api" "github.com/offchainlabs/nitro/validator/server_common" - "github.com/redis/go-redis/v9" - "github.com/spf13/pflag" ) type ValidationClientConfig struct { diff --git a/validator/client/validation_client.go b/validator/client/validation_client.go index 934362f00a..c04817d654 100644 --- a/validator/client/validation_client.go +++ b/validator/client/validation_client.go @@ -11,21 +11,19 @@ import ( "sync/atomic" "time" - "github.com/offchainlabs/nitro/validator" - - "github.com/offchainlabs/nitro/util/containers" - "github.com/offchainlabs/nitro/util/rpcclient" - "github.com/offchainlabs/nitro/util/stopwaiter" - - "github.com/offchainlabs/nitro/validator/server_api" - "github.com/offchainlabs/nitro/validator/server_common" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" + + "github.com/offchainlabs/nitro/util/containers" + "github.com/offchainlabs/nitro/util/rpcclient" + "github.com/offchainlabs/nitro/util/stopwaiter" + "github.com/offchainlabs/nitro/validator" + "github.com/offchainlabs/nitro/validator/server_api" + "github.com/offchainlabs/nitro/validator/server_common" ) type ValidationClient struct { @@ -155,10 +153,14 @@ func NewExecutionClient(config rpcclient.ClientConfigFetcher, stack *node.Node) } } -func (c *ExecutionClient) CreateExecutionRun(wasmModuleRoot common.Hash, input *validator.ValidationInput) containers.PromiseInterface[validator.ExecutionRun] { - return stopwaiter.LaunchPromiseThread[validator.ExecutionRun](c, func(ctx context.Context) (validator.ExecutionRun, error) { +func (c *ExecutionClient) CreateExecutionRun( + wasmModuleRoot common.Hash, + input *validator.ValidationInput, + useBoldMachine bool, +) containers.PromiseInterface[validator.ExecutionRun] { + return stopwaiter.LaunchPromiseThread(c, func(ctx context.Context) (validator.ExecutionRun, error) { var res uint64 - err := c.client.CallContext(ctx, &res, server_api.Namespace+"_createExecutionRun", wasmModuleRoot, server_api.ValidationInputToJson(input)) + err := c.client.CallContext(ctx, &res, server_api.Namespace+"_createExecutionRun", wasmModuleRoot, server_api.ValidationInputToJson(input), useBoldMachine) if err != nil { return nil, err } @@ -196,6 +198,10 @@ func (r *ExecutionClientRun) SendKeepAlive(ctx context.Context) time.Duration { return time.Minute // TODO: configurable } +func (r *ExecutionClientRun) CheckAlive(ctx context.Context) error { + return r.client.client.CallContext(ctx, nil, server_api.Namespace+"_checkAlive", r.id) +} + func (r *ExecutionClientRun) Start(ctx_in context.Context) { r.StopWaiter.Start(ctx_in, r) r.CallIteratively(r.SendKeepAlive) diff --git a/validator/execution_state.go b/validator/execution_state.go index 092fbe2908..81e32a6992 100644 --- a/validator/execution_state.go +++ b/validator/execution_state.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/offchainlabs/nitro/solgen/go/challengegen" "github.com/offchainlabs/nitro/solgen/go/rollupgen" ) @@ -18,6 +19,13 @@ type GoGlobalState struct { PosInBatch uint64 } +func (g GoGlobalState) String() string { + return fmt.Sprintf( + "BlockHash: %s, SendRoot: %s, Batch: %d, PosInBatch: %d", + g.BlockHash.Hex(), g.SendRoot.Hex(), g.Batch, g.PosInBatch, + ) +} + type MachineStatus uint8 const ( diff --git a/validator/interface.go b/validator/interface.go index 9fb831ca0d..249cf1b1c3 100644 --- a/validator/interface.go +++ b/validator/interface.go @@ -5,6 +5,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" + "github.com/offchainlabs/nitro/util/containers" ) @@ -25,7 +26,7 @@ type ValidationRun interface { type ExecutionSpawner interface { ValidationSpawner - CreateExecutionRun(wasmModuleRoot common.Hash, input *ValidationInput) containers.PromiseInterface[ExecutionRun] + CreateExecutionRun(wasmModuleRoot common.Hash, input *ValidationInput, useBoldMachine bool) containers.PromiseInterface[ExecutionRun] LatestWasmModuleRoot() containers.PromiseInterface[common.Hash] } @@ -36,4 +37,5 @@ type ExecutionRun interface { GetProofAt(uint64) containers.PromiseInterface[[]byte] PrepareRange(uint64, uint64) containers.PromiseInterface[struct{}] Close() + CheckAlive(ctx context.Context) error } diff --git a/validator/server_api/json.go b/validator/server_api/json.go index 8dfbc8446a..f56493cd92 100644 --- a/validator/server_api/json.go +++ b/validator/server_api/json.go @@ -11,9 +11,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" + "github.com/offchainlabs/nitro/arbcompress" "github.com/offchainlabs/nitro/arbutil" - "github.com/offchainlabs/nitro/util/jsonapi" "github.com/offchainlabs/nitro/validator" ) diff --git a/validator/server_arb/bold_machine.go b/validator/server_arb/bold_machine.go new file mode 100644 index 0000000000..6ca48ba228 --- /dev/null +++ b/validator/server_arb/bold_machine.go @@ -0,0 +1,145 @@ +package server_arb + +import ( + "context" + + "github.com/ethereum/go-ethereum/common" + + "github.com/offchainlabs/nitro/validator" +) + +// boldMachine wraps a server_arb.MachineInterface. +type BoldMachine struct { + inner MachineInterface + zeroMachine *ArbitratorMachine + hasStepped bool +} + +// Ensure boldMachine implements server_arb.MachineInterface. +var _ MachineInterface = (*BoldMachine)(nil) + +func newBoldMachine(inner MachineInterface) *BoldMachine { + z := NewFinishedMachine(inner.GetGlobalState()) + return &BoldMachine{ + inner: inner, + zeroMachine: z, + hasStepped: false, + } +} + +// Wraps a server_arb.MachineInterface and adds one step to the +// front of the machine's execution. +// +// This zeroth step should be at the same global state as the inner arbitrator +// machine has at step 0, but the machine is in the Finished state rather than +// the Running state. +func BoldMachineWrapper(inner MachineInterface) MachineInterface { + return newBoldMachine(inner) +} + +// CloneMachineInterface returns a new boldMachine with the same inner machine. +func (m *BoldMachine) CloneMachineInterface() MachineInterface { + bMach := newBoldMachine(m.inner.CloneMachineInterface()) + bMach.hasStepped = m.hasStepped + return bMach +} + +// GetStepCount returns zero if the machine has not stepped, otherwise it +// returns the inner machine's step count plus one. +func (m *BoldMachine) GetStepCount() uint64 { + if !m.hasStepped { + return 0 + } + return m.inner.GetStepCount() + 1 +} + +// Hash returns the hash of the inner machine if the machine has not stepped, +// otherwise it returns the hash of the zeroth step machine. +func (m *BoldMachine) Hash() common.Hash { + if !m.hasStepped { + return m.zeroMachine.Hash() + } + return m.inner.Hash() +} + +// Destroy destroys the inner machine and the zeroth step machine. +func (m *BoldMachine) Destroy() { + m.inner.Destroy() + m.zeroMachine.Destroy() +} + +// Freeze freezes the inner machine and the zeroth step machine. +func (m *BoldMachine) Freeze() { + m.inner.Freeze() + m.zeroMachine.Freeze() +} + +// Status returns the status of the inner machine if the machine has not +// stepped, otherwise it returns the status of the zeroth step machine. +func (m *BoldMachine) Status() uint8 { + if !m.hasStepped { + return m.zeroMachine.Status() + } + return m.inner.Status() +} + +// IsRunning returns true if the machine has not stepped, otherwise it +// returns the running state of the inner machine. +func (m *BoldMachine) IsRunning() bool { + if !m.hasStepped { + return true + } + return m.inner.IsRunning() +} + +// IsErrored returns the errored state of the inner machine, or false if the +// machine has not stepped. +func (m *BoldMachine) IsErrored() bool { + if !m.hasStepped { + return false + } + return m.inner.IsErrored() +} + +// Step steps the inner machine if the machine has not stepped, otherwise it +// steps the zeroth step machine. +func (m *BoldMachine) Step(ctx context.Context, steps uint64) error { + if !m.hasStepped { + if steps == 0 { + // Zero is okay, but doesn't advance the machine. + return nil + } + m.hasStepped = true + // Only the first step or set of steps needs to be adjusted. + steps = steps - 1 + } + return m.inner.Step(ctx, steps) +} + +// ValidForStep returns true for step 0 if and only if the machine has not stepped yet, +// and the inner machine's ValidForStep for the step minus one otherwise. +func (m *BoldMachine) ValidForStep(step uint64) bool { + if step == 0 { + return !m.hasStepped + } + return m.inner.ValidForStep(step - 1) +} + +// GetGlobalState returns the global state of the inner machine if the machine +// has stepped, otherwise it returns the global state of the zeroth step. +func (m *BoldMachine) GetGlobalState() validator.GoGlobalState { + if !m.hasStepped { + return m.zeroMachine.GetGlobalState() + } + return m.inner.GetGlobalState() +} + +// ProveNextStep returns the proof of the next step of the inner machine if the +// machine has stepped, otherwise it returns the proof that the zeroth step +// results in the inner machine's initial global state. +func (m *BoldMachine) ProveNextStep() []byte { + if !m.hasStepped { + return m.zeroMachine.ProveNextStep() + } + return m.inner.ProveNextStep() +} diff --git a/validator/server_arb/execution_run.go b/validator/server_arb/execution_run.go index d29a88d34d..66d8e158d0 100644 --- a/validator/server_arb/execution_run.go +++ b/validator/server_arb/execution_run.go @@ -10,9 +10,8 @@ import ( "time" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/containers" "github.com/offchainlabs/nitro/util/stopwaiter" "github.com/offchainlabs/nitro/validator" @@ -25,7 +24,8 @@ type executionRun struct { } // NewExecutionRun creates a backend with the given arguments. -// Note: machineCache may be nil, but if present, it must not have a restricted range. +// Note: machineCache may be nil, but if present, it must not have a restricted +// range. func NewExecutionRun( ctxIn context.Context, initialMachineGetter func(context.Context) (MachineInterface, error), @@ -105,21 +105,9 @@ func (e *executionRun) machineHashesWithStepSize( if err != nil { return nil, err } - log.Debug(fmt.Sprintf("Advanced machine to index %d, beginning hash computation", machineStartIndex)) - - // In BOLD, the hash of a machine at index 0 is a special hash that is computed as the - // `machineFinishedHash(gs)` where `gs` is the global state of the machine at index 0. - // This is so that the hash aligns with the start state of the claimed challenge edge - // at the level above, as required by the BOLD protocol. - var machineHashes []common.Hash - if machineStartIndex == 0 { - gs := machine.GetGlobalState() - log.Debug(fmt.Sprintf("Start global state for machine index 0: %+v", gs)) - machineHashes = append(machineHashes, machineFinishedHash(gs)) - } else { - // Otherwise, we simply append the machine hash at the specified start index. - machineHashes = append(machineHashes, machine.Hash()) - } + log.Info("Advanced WASM machine index, beginning challenge hash computation", "machineStartIndex", machineStartIndex) + + machineHashes := []common.Hash{machine.Hash()} startHash := machineHashes[0] // If we only want 1 hash, we can return early. @@ -195,6 +183,6 @@ func (e *executionRun) GetLastStep() containers.PromiseInterface[*validator.Mach return e.GetStepAt(^uint64(0)) } -func machineFinishedHash(gs validator.GoGlobalState) common.Hash { - return crypto.Keccak256Hash([]byte("Machine finished:"), gs.Hash().Bytes()) +func (e *executionRun) CheckAlive(ctx context.Context) error { + return nil } diff --git a/validator/server_arb/execution_run_test.go b/validator/server_arb/execution_run_test.go index 479db58515..381cfa63a8 100644 --- a/validator/server_arb/execution_run_test.go +++ b/validator/server_arb/execution_run_test.go @@ -6,6 +6,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/validator" ) @@ -15,9 +16,6 @@ type mockMachine struct { } func (m *mockMachine) Hash() common.Hash { - if m.gs.PosInBatch == m.totalSteps-1 { - return machineFinishedHash(m.gs) - } return m.gs.Hash() } @@ -47,6 +45,9 @@ func (m *mockMachine) GetStepCount() uint64 { func (m *mockMachine) IsRunning() bool { return m.gs.PosInBatch < m.totalSteps-1 } +func (m *mockMachine) IsErrored() bool { + return false +} func (m *mockMachine) ValidForStep(uint64) bool { return true } @@ -102,7 +103,7 @@ func Test_machineHashesWithStep(t *testing.T) { if err != nil { t.Fatal(err) } - expected := machineFinishedHash(mm.gs) + expected := mm.gs.Hash() if len(hashes) != 1 { t.Error("Wanted one hash") } @@ -136,7 +137,7 @@ func Test_machineHashesWithStep(t *testing.T) { expectedHashes := make([]common.Hash, 0) for i := uint64(0); i < 4; i++ { if i == 0 { - expectedHashes = append(expectedHashes, machineFinishedHash(initialGs)) + expectedHashes = append(expectedHashes, initialGs.Hash()) continue } gs := validator.GoGlobalState{ @@ -181,7 +182,7 @@ func Test_machineHashesWithStep(t *testing.T) { expectedHashes := make([]common.Hash, 0) for i := uint64(0); i < 4; i++ { if i == 0 { - expectedHashes = append(expectedHashes, machineFinishedHash(initialGs)) + expectedHashes = append(expectedHashes, initialGs.Hash()) continue } gs := validator.GoGlobalState{ @@ -190,10 +191,10 @@ func Test_machineHashesWithStep(t *testing.T) { } expectedHashes = append(expectedHashes, gs.Hash()) } - expectedHashes = append(expectedHashes, machineFinishedHash(validator.GoGlobalState{ + expectedHashes = append(expectedHashes, validator.GoGlobalState{ Batch: 1, PosInBatch: mm.totalSteps - 1, - })) + }.Hash()) if uint64(len(hashes)) >= maxIterations { t.Fatal("Wanted fewer hashes than the max iterations") } diff --git a/validator/server_arb/machine.go b/validator/server_arb/machine.go index f882fe65a6..09a00635fb 100644 --- a/validator/server_arb/machine.go +++ b/validator/server_arb/machine.go @@ -10,6 +10,7 @@ package server_arb ResolvedPreimage preimageResolverC(size_t context, uint8_t preimageType, const uint8_t* hash); */ import "C" + import ( "context" "errors" @@ -21,6 +22,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/containers" @@ -37,6 +39,7 @@ type MachineInterface interface { CloneMachineInterface() MachineInterface GetStepCount() uint64 IsRunning() bool + IsErrored() bool ValidForStep(uint64) bool Status() uint8 Step(context.Context, uint64) error @@ -115,6 +118,14 @@ func LoadSimpleMachine(wasm string, libraries []string, debugChain bool) (*Arbit return machineFromPointer(mach), nil } +func NewFinishedMachine(gs validator.GoGlobalState) *ArbitratorMachine { + mach := C.arbitrator_new_finished(GlobalStateToC(gs)) + if mach == nil { + return nil + } + return machineFromPointer(mach) +} + func (m *ArbitratorMachine) Freeze() { m.frozen = true } diff --git a/validator/server_arb/machine_loader.go b/validator/server_arb/machine_loader.go index 13cf0f2403..8c9d37e174 100644 --- a/validator/server_arb/machine_loader.go +++ b/validator/server_arb/machine_loader.go @@ -4,6 +4,7 @@ import ( "context" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/validator/server_common" ) diff --git a/validator/server_arb/machine_test.go b/validator/server_arb/machine_test.go index e3ffb28b42..008d757889 100644 --- a/validator/server_arb/machine_test.go +++ b/validator/server_arb/machine_test.go @@ -11,6 +11,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/testhelpers" ) diff --git a/validator/server_arb/nitro_machine.go b/validator/server_arb/nitro_machine.go index 926b1e8930..a2f7de3153 100644 --- a/validator/server_arb/nitro_machine.go +++ b/validator/server_arb/nitro_machine.go @@ -9,6 +9,7 @@ package server_arb #include */ import "C" + import ( "context" "errors" @@ -19,6 +20,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/validator/server_common" ) diff --git a/validator/server_arb/prover_interface.go b/validator/server_arb/prover_interface.go index 3010d2138d..8479a8aa8f 100644 --- a/validator/server_arb/prover_interface.go +++ b/validator/server_arb/prover_interface.go @@ -22,10 +22,12 @@ void AddToStringList(char** list, int index, char* val) { } */ import "C" + import ( "unsafe" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/validator" ) diff --git a/validator/server_arb/validator_spawner.go b/validator/server_arb/validator_spawner.go index 07971e2ba5..76c19dc8f2 100644 --- a/validator/server_arb/validator_spawner.go +++ b/validator/server_arb/validator_spawner.go @@ -10,18 +10,18 @@ import ( "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/containers" "github.com/offchainlabs/nitro/util/stopwaiter" "github.com/offchainlabs/nitro/validator" "github.com/offchainlabs/nitro/validator/server_common" "github.com/offchainlabs/nitro/validator/valnode/redis" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" ) var arbitratorValidationSteps = metrics.NewRegisteredHistogram("arbitrator/validation/steps", nil, metrics.NewBoundedHistogramSample()) @@ -56,20 +56,42 @@ func DefaultArbitratorSpawnerConfigFetcher() *ArbitratorSpawnerConfig { return &DefaultArbitratorSpawnerConfig } +// MachineWrapper is a function that wraps a MachineInterface +// +// This is a mechanism to allow clients of the AribtratorSpawner to inject +// functionality around the arbitrator machine. Possible use cases include +// mocking out the machine for testing purposes, or having the machine behave +// differently when certain features (like BoLD) are enabled. +type MachineWrapper func(MachineInterface) MachineInterface + +type SpawnerOption func(*ArbitratorSpawner) + type ArbitratorSpawner struct { stopwaiter.StopWaiter count atomic.Int32 locator *server_common.MachineLocator machineLoader *ArbMachineLoader - config ArbitratorSpawnerConfigFecher + // Oreder of wrappers is important. The first wrapper is the innermost. + machineWrappers []MachineWrapper + config ArbitratorSpawnerConfigFecher +} + +func WithWrapper(wrapper MachineWrapper) SpawnerOption { + return func(s *ArbitratorSpawner) { + s.machineWrappers = append(s.machineWrappers, wrapper) + } } -func NewArbitratorSpawner(locator *server_common.MachineLocator, config ArbitratorSpawnerConfigFecher) (*ArbitratorSpawner, error) { +func NewArbitratorSpawner(locator *server_common.MachineLocator, config ArbitratorSpawnerConfigFecher, opts ...SpawnerOption) (*ArbitratorSpawner, error) { // TODO: preload machines spawner := &ArbitratorSpawner{ - locator: locator, - machineLoader: NewArbMachineLoader(&DefaultArbitratorMachineConfig, locator), - config: config, + locator: locator, + machineLoader: NewArbMachineLoader(&DefaultArbitratorMachineConfig, locator), + machineWrappers: make([]MachineWrapper, 0), + config: config, + } + for _, opt := range opts { + opt(spawner) } return spawner, nil } @@ -159,12 +181,16 @@ func (v *ArbitratorSpawner) execute( return validator.GoGlobalState{}, fmt.Errorf("unabled to get WASM machine: %w", err) } - mach := basemachine.Clone() - defer mach.Destroy() - err = v.loadEntryToMachine(ctx, entry, mach) + arbMach := basemachine.Clone() + defer arbMach.Destroy() + err = v.loadEntryToMachine(ctx, entry, arbMach) if err != nil { return validator.GoGlobalState{}, err } + var mach MachineInterface = arbMach + for _, wrapper := range v.machineWrappers { + mach = wrapper(mach) + } var steps uint64 for mach.IsRunning() { var count uint64 = 500000000 @@ -206,7 +232,7 @@ func (v *ArbitratorSpawner) Room() int { return avail } -func (v *ArbitratorSpawner) CreateExecutionRun(wasmModuleRoot common.Hash, input *validator.ValidationInput) containers.PromiseInterface[validator.ExecutionRun] { +func (v *ArbitratorSpawner) CreateExecutionRun(wasmModuleRoot common.Hash, input *validator.ValidationInput, useBoldMachine bool) containers.PromiseInterface[validator.ExecutionRun] { getMachine := func(ctx context.Context) (MachineInterface, error) { initialFrozenMachine, err := v.machineLoader.GetZeroStepMachine(ctx, wasmModuleRoot) if err != nil { @@ -218,7 +244,16 @@ func (v *ArbitratorSpawner) CreateExecutionRun(wasmModuleRoot common.Hash, input machine.Destroy() return nil, err } - return machine, nil + var wrapped MachineInterface + if useBoldMachine { + wrapped = BoldMachineWrapper(machine) + } else { + wrapped = MachineInterface(machine) + } + for _, wrapper := range v.machineWrappers { + wrapped = wrapper(wrapped) + } + return wrapped, nil } currentExecConfig := v.config().Execution return stopwaiter.LaunchPromiseThread[validator.ExecutionRun](v, func(ctx context.Context) (validator.ExecutionRun, error) { diff --git a/validator/server_common/machine_loader.go b/validator/server_common/machine_loader.go index f4633ebedf..e86589b657 100644 --- a/validator/server_common/machine_loader.go +++ b/validator/server_common/machine_loader.go @@ -5,6 +5,7 @@ import ( "sync" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/util/containers" ) diff --git a/validator/server_common/valrun.go b/validator/server_common/valrun.go index 8486664008..9a2a6cb414 100644 --- a/validator/server_common/valrun.go +++ b/validator/server_common/valrun.go @@ -2,6 +2,7 @@ package server_common import ( "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/util/containers" "github.com/offchainlabs/nitro/validator" ) diff --git a/validator/server_jit/jit_machine.go b/validator/server_jit/jit_machine.go index 0748101277..dc7657441e 100644 --- a/validator/server_jit/jit_machine.go +++ b/validator/server_jit/jit_machine.go @@ -19,6 +19,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/validator" ) diff --git a/validator/server_jit/machine_loader.go b/validator/server_jit/machine_loader.go index 3d8b01367f..a4ccede324 100644 --- a/validator/server_jit/machine_loader.go +++ b/validator/server_jit/machine_loader.go @@ -10,6 +10,7 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/validator/server_common" ) diff --git a/validator/server_jit/spawner.go b/validator/server_jit/spawner.go index f30b6e181a..91b1e818f0 100644 --- a/validator/server_jit/spawner.go +++ b/validator/server_jit/spawner.go @@ -3,11 +3,12 @@ package server_jit import ( "context" "fmt" - flag "github.com/spf13/pflag" "runtime" "sync/atomic" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" diff --git a/validator/validation_entry.go b/validator/validation_entry.go index 4ec6919d3b..555a4c76c7 100644 --- a/validator/validation_entry.go +++ b/validator/validation_entry.go @@ -3,6 +3,7 @@ package validator import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" + "github.com/offchainlabs/nitro/arbutil" ) diff --git a/validator/valnode/redis/consumer.go b/validator/valnode/redis/consumer.go index 4392a3c91e..93b3eddd3f 100644 --- a/validator/valnode/redis/consumer.go +++ b/validator/valnode/redis/consumer.go @@ -6,14 +6,16 @@ import ( "runtime" "time" + "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/pubsub" "github.com/offchainlabs/nitro/util/redisutil" "github.com/offchainlabs/nitro/util/stopwaiter" "github.com/offchainlabs/nitro/validator" "github.com/offchainlabs/nitro/validator/server_api" - "github.com/spf13/pflag" ) // ValidationServer implements consumer for the requests originated from diff --git a/validator/valnode/redis/consumer_test.go b/validator/valnode/redis/consumer_test.go index 0ebd697f16..595aecc9ca 100644 --- a/validator/valnode/redis/consumer_test.go +++ b/validator/valnode/redis/consumer_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/util/redisutil" "github.com/offchainlabs/nitro/util/testhelpers" ) diff --git a/validator/valnode/validation_api.go b/validator/valnode/validation_api.go index ef3e1b2c49..dab74f6e29 100644 --- a/validator/valnode/validation_api.go +++ b/validator/valnode/validation_api.go @@ -80,12 +80,16 @@ func NewExecutionServerAPI(valSpawner validator.ValidationSpawner, execution val } } -func (a *ExecServerAPI) CreateExecutionRun(ctx context.Context, wasmModuleRoot common.Hash, jsonInput *server_api.InputJSON) (uint64, error) { +func (a *ExecServerAPI) CreateExecutionRun(ctx context.Context, wasmModuleRoot common.Hash, jsonInput *server_api.InputJSON, useBoldMachineOptional *bool) (uint64, error) { input, err := server_api.ValidationInputFromJson(jsonInput) if err != nil { return 0, err } - execRun, err := a.execSpawner.CreateExecutionRun(wasmModuleRoot, input).Await(ctx) + useBoldMachine := false + if useBoldMachineOptional != nil { + useBoldMachine = *useBoldMachineOptional + } + execRun, err := a.execSpawner.CreateExecutionRun(wasmModuleRoot, input, useBoldMachine).Await(ctx) if err != nil { return 0, err } @@ -187,6 +191,14 @@ func (a *ExecServerAPI) ExecKeepAlive(ctx context.Context, execid uint64) error return nil } +func (a *ExecServerAPI) CheckAlive(ctx context.Context, execid uint64) error { + run, err := a.getRun(execid) + if err != nil { + return err + } + return run.CheckAlive(ctx) +} + func (a *ExecServerAPI) CloseExec(execid uint64) { a.runIdLock.Lock() defer a.runIdLock.Unlock() diff --git a/validator/valnode/valnode.go b/validator/valnode/valnode.go index 972e11189d..e3bf662aaa 100644 --- a/validator/valnode/valnode.go +++ b/validator/valnode/valnode.go @@ -3,17 +3,18 @@ package valnode import ( "context" - "github.com/offchainlabs/nitro/validator" + "github.com/spf13/pflag" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" + + "github.com/offchainlabs/nitro/validator" "github.com/offchainlabs/nitro/validator/server_api" "github.com/offchainlabs/nitro/validator/server_arb" "github.com/offchainlabs/nitro/validator/server_common" "github.com/offchainlabs/nitro/validator/server_jit" "github.com/offchainlabs/nitro/validator/valnode/redis" - "github.com/spf13/pflag" ) type WasmConfig struct { @@ -93,7 +94,7 @@ func EnsureValidationExposedViaAuthRPC(stackConf *node.Config) { } } -func CreateValidationNode(configFetcher ValidationConfigFetcher, stack *node.Node, fatalErrChan chan error) (*ValidationNode, error) { +func CreateValidationNode(configFetcher ValidationConfigFetcher, stack *node.Node, fatalErrChan chan error, spawnerOpts ...server_arb.SpawnerOption) (*ValidationNode, error) { config := configFetcher() locator, err := server_common.NewMachineLocator(config.Wasm.RootPath) if err != nil { @@ -102,7 +103,7 @@ func CreateValidationNode(configFetcher ValidationConfigFetcher, stack *node.Nod arbConfigFetcher := func() *server_arb.ArbitratorSpawnerConfig { return &configFetcher().Arbitrator } - arbSpawner, err := server_arb.NewArbitratorSpawner(locator, arbConfigFetcher) + arbSpawner, err := server_arb.NewArbitratorSpawner(locator, arbConfigFetcher, spawnerOpts...) if err != nil { return nil, err } diff --git a/wavmio/stub.go b/wavmio/stub.go index 0c82506ff3..01031860e9 100644 --- a/wavmio/stub.go +++ b/wavmio/stub.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbutil" ) diff --git a/wsbroadcastserver/clientconnection.go b/wsbroadcastserver/clientconnection.go index 00ae0f0dcf..2585452db7 100644 --- a/wsbroadcastserver/clientconnection.go +++ b/wsbroadcastserver/clientconnection.go @@ -13,14 +13,15 @@ import ( "sync/atomic" "time" + "github.com/gobwas/ws" + "github.com/gobwas/ws/wsflate" + "github.com/mailru/easygo/netpoll" + "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/broadcaster/backlog" m "github.com/offchainlabs/nitro/broadcaster/message" - - "github.com/gobwas/ws" - "github.com/gobwas/ws/wsflate" - "github.com/mailru/easygo/netpoll" "github.com/offchainlabs/nitro/util/stopwaiter" ) diff --git a/wsbroadcastserver/connectionlimiter.go b/wsbroadcastserver/connectionlimiter.go index e483eb545e..d086fc074e 100644 --- a/wsbroadcastserver/connectionlimiter.go +++ b/wsbroadcastserver/connectionlimiter.go @@ -8,9 +8,10 @@ import ( "sync" "time" + flag "github.com/spf13/pflag" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" - flag "github.com/spf13/pflag" ) var ( diff --git a/wsbroadcastserver/utils.go b/wsbroadcastserver/utils.go index 9df1d7d9ca..40ceb3e5bf 100644 --- a/wsbroadcastserver/utils.go +++ b/wsbroadcastserver/utils.go @@ -12,10 +12,11 @@ import ( "strings" "time" - "github.com/ethereum/go-ethereum/log" "github.com/gobwas/ws" "github.com/gobwas/ws/wsflate" "github.com/gobwas/ws/wsutil" + + "github.com/ethereum/go-ethereum/log" ) func init() { @@ -136,7 +137,7 @@ func ReadData(ctx context.Context, conn net.Conn, earlyFrameData io.Reader, time var data []byte if msg.IsCompressed() { if !compression { - return nil, 0, errors.New("Received compressed frame even though compression is disabled") + return nil, 0, errors.New("Received compressed frame even though compression extension wasn't negotiated") } flateReader.Reset(&reader) data, err = io.ReadAll(flateReader) diff --git a/wsbroadcastserver/wsbroadcastserver.go b/wsbroadcastserver/wsbroadcastserver.go index ee21cbaae3..da9420a527 100644 --- a/wsbroadcastserver/wsbroadcastserver.go +++ b/wsbroadcastserver/wsbroadcastserver.go @@ -24,6 +24,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/broadcaster/backlog" m "github.com/offchainlabs/nitro/broadcaster/message" From 231da30980575693c2c9f6d7be127ac77772cc9d Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Tue, 10 Dec 2024 10:52:02 -0600 Subject: [PATCH 042/187] update bold pin --- bold | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bold b/bold index 1b1c34c319..81f1b421b2 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit 1b1c34c31967242a492d29925640ede98d921fca +Subproject commit 81f1b421b2dbbf96c7a2b427a9458667b07b0b27 From b2618c992ae8a76500c7789c00efcea106c743be Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Tue, 10 Dec 2024 16:09:02 -0600 Subject: [PATCH 043/187] update geth pin --- arbos/block_processor.go | 24 +++++++++++++++--------- go-ethereum | 2 +- system_tests/seq_filter_test.go | 4 ++-- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/arbos/block_processor.go b/arbos/block_processor.go index 006e9f5fdd..5025cd16f9 100644 --- a/arbos/block_processor.go +++ b/arbos/block_processor.go @@ -263,15 +263,6 @@ func ProduceBlockAdvanced( return nil, nil, err } - if err = hooks.PreTxFilter(chainConfig, header, statedb, state, tx, options, sender, l1Info); err != nil { - return nil, nil, err - } - - // Additional pre-transaction validity check - if err = extraPreTxFilter(chainConfig, header, statedb, state, tx, options, sender, l1Info); err != nil { - return nil, nil, err - } - if basefee.Sign() > 0 { dataGas = math.MaxUint64 brotliCompressionLevel, err := state.BrotliCompressionLevel() @@ -306,7 +297,22 @@ func ProduceBlockAdvanced( return nil, nil, core.ErrGasLimitReached } + if statedb.IsTxFiltered() { + return nil, nil, errors.New("cannot process a new transaction when the previous one was filtered and the statedb wasn't reverted to a snapshot") + } snap := statedb.Snapshot() + + if err = hooks.PreTxFilter(chainConfig, header, statedb, state, tx, options, sender, l1Info); err != nil { + statedb.RevertToSnapshot(snap) + return nil, nil, err + } + + // Additional pre-transaction validity check + if err = extraPreTxFilter(chainConfig, header, statedb, state, tx, options, sender, l1Info); err != nil { + statedb.RevertToSnapshot(snap) + return nil, nil, err + } + statedb.SetTxContext(tx.Hash(), len(receipts)) // the number of successful state transitions gasPool := gethGas diff --git a/go-ethereum b/go-ethereum index 30abfa28d1..c7f6a03869 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 30abfa28d13911257bc4a94631268ae46934db43 +Subproject commit c7f6a0386939b3f2dc9366613d8bae7f6c9812f7 diff --git a/system_tests/seq_filter_test.go b/system_tests/seq_filter_test.go index 35e35a68a6..d728d091c7 100644 --- a/system_tests/seq_filter_test.go +++ b/system_tests/seq_filter_test.go @@ -95,8 +95,8 @@ func setupSequencerFilterTest(t *testing.T, withBlock bool) (*NodeBuilder, *arbo } return nil } - postTxFilter := func(_ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, _ *types.Transaction, _ common.Address, _ uint64, _ *core.ExecutionResult) error { - if statedb.IsTxInvalid() { + postTxFilter := func(_ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ common.Address, _ uint64, _ *core.ExecutionResult) error { + if statedb.IsTxFiltered() { return errors.New("internal error") } return nil From c75ad7bd1de688e00878a6d46f330a22804c31a4 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Wed, 11 Dec 2024 10:31:58 -0600 Subject: [PATCH 044/187] address PR comments --- arbos/block_processor.go | 13 ++++-- go-ethereum | 2 +- system_tests/seq_filter_test.go | 78 +++++++++++++++++++++++---------- 3 files changed, 67 insertions(+), 26 deletions(-) diff --git a/arbos/block_processor.go b/arbos/block_processor.go index 5025cd16f9..5daf163c85 100644 --- a/arbos/block_processor.go +++ b/arbos/block_processor.go @@ -119,6 +119,7 @@ type SequencingHooks struct { DiscardInvalidTxsEarly bool PreTxFilter func(*params.ChainConfig, *types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, *arbitrum_types.ConditionalOptions, common.Address, *L1Info) error PostTxFilter func(*types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, common.Address, uint64, *core.ExecutionResult) error + BlockFilter func(*types.Header, *state.StateDB, types.Transactions, types.Receipts) error ConditionalOptionsForTx []*arbitrum_types.ConditionalOptions } @@ -132,6 +133,9 @@ func NoopSequencingHooks() *SequencingHooks { func(*types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, common.Address, uint64, *core.ExecutionResult) error { return nil }, + func(*types.Header, *state.StateDB, types.Transactions, types.Receipts) error { + return nil + }, nil, } } @@ -297,9 +301,6 @@ func ProduceBlockAdvanced( return nil, nil, core.ErrGasLimitReached } - if statedb.IsTxFiltered() { - return nil, nil, errors.New("cannot process a new transaction when the previous one was filtered and the statedb wasn't reverted to a snapshot") - } snap := statedb.Snapshot() if err = hooks.PreTxFilter(chainConfig, header, statedb, state, tx, options, sender, l1Info); err != nil { @@ -461,6 +462,12 @@ func ProduceBlockAdvanced( } } + if sequencingHooks.BlockFilter != nil { + if err = sequencingHooks.BlockFilter(header, statedb, complete, receipts); err != nil { + return nil, nil, err + } + } + binary.BigEndian.PutUint64(header.Nonce[:], delayedMessagesRead) FinalizeBlock(header, complete, statedb, chainConfig) diff --git a/go-ethereum b/go-ethereum index c7f6a03869..e9a5f8af11 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit c7f6a0386939b3f2dc9366613d8bae7f6c9812f7 +Subproject commit e9a5f8af11e82a85510ff1c00932dc1a13e5cc7c diff --git a/system_tests/seq_filter_test.go b/system_tests/seq_filter_test.go index d728d091c7..fdd0c96d13 100644 --- a/system_tests/seq_filter_test.go +++ b/system_tests/seq_filter_test.go @@ -2,7 +2,6 @@ package arbtest import ( "context" - "errors" "math/big" "testing" "time" @@ -28,21 +27,28 @@ func TestSequencerTxFilter(t *testing.T) { defer cleanup() block, err := builder.L2.ExecNode.ExecEngine.SequenceTransactions(header, txes, hooks) - if block != nil { - t.Fatal("block shouldn't be generated when all txes have failed") - } Require(t, err) // There shouldn't be any error in block generation + if block == nil { + t.Fatal("block should be generated as second tx should pass") + } + if len(block.Transactions()) != 2 { + t.Fatalf("expecting two txs found: %d", len(block.Transactions())) + } + if block.Transactions()[1].Hash() != txes[1].Hash() { + t.Fatal("tx hash mismatch, expecting second tx to be present in the block") + } if len(hooks.TxErrors) != 2 { - t.Fatalf("expected 2 tx errors, found: %d", len(hooks.TxErrors)) + t.Fatalf("expected 2 txErrors in hooks, found: %d", len(hooks.TxErrors)) } - for _, err := range hooks.TxErrors { - if err.Error() != state.ErrArbTxFilter.Error() { - t.Fatalf("expected ErrArbTxFilter, found: %s", err.Error()) - } + if hooks.TxErrors[0].Error() != state.ErrArbTxFilter.Error() { + t.Fatalf("expected ErrArbTxFilter, found: %s", err.Error()) + } + if hooks.TxErrors[1] != nil { + t.Fatalf("found a non-nil error for second transaction: %v", hooks.TxErrors[1]) } } -func TestSequencerBlockFilter(t *testing.T) { +func TestSequencerBlockFilterReject(t *testing.T) { t.Parallel() builder, header, txes, hooks, cleanup := setupSequencerFilterTest(t, true) @@ -60,7 +66,26 @@ func TestSequencerBlockFilter(t *testing.T) { } } -func setupSequencerFilterTest(t *testing.T, withBlock bool) (*NodeBuilder, *arbostypes.L1IncomingMessageHeader, types.Transactions, *arbos.SequencingHooks, func()) { +func TestSequencerBlockFilterAccept(t *testing.T) { + t.Parallel() + + builder, header, txes, hooks, cleanup := setupSequencerFilterTest(t, true) + defer cleanup() + + block, err := builder.L2.ExecNode.ExecEngine.SequenceTransactions(header, txes[1:], hooks) + Require(t, err) + if block == nil { + t.Fatal("block should be generated as the tx should pass") + } + if len(block.Transactions()) != 2 { + t.Fatalf("expecting two txs found: %d", len(block.Transactions())) + } + if block.Transactions()[1].Hash() != txes[1].Hash() { + t.Fatal("tx hash mismatch, expecting second tx to be present in the block") + } +} + +func setupSequencerFilterTest(t *testing.T, isBlockFilter bool) (*NodeBuilder, *arbostypes.L1IncomingMessageHeader, types.Transactions, *arbos.SequencingHooks, func()) { ctx, cancel := context.WithCancel(context.Background()) builder := NewNodeBuilder(ctx).DefaultConfig(t, false) @@ -86,22 +111,31 @@ func setupSequencerFilterTest(t *testing.T, withBlock bool) (*NodeBuilder, *arbo } var txes types.Transactions - txes = append(txes, builder.L2Info.PrepareTx("Owner", "User", builder.L2Info.TransferGas, big.NewInt(1e12), nil)) + txes = append(txes, builder.L2Info.PrepareTx("Owner", "User", builder.L2Info.TransferGas, big.NewInt(1e12), []byte{1, 2, 3})) txes = append(txes, builder.L2Info.PrepareTx("User", "Owner", builder.L2Info.TransferGas, big.NewInt(1e12), nil)) - preTxFilter := func(_ *params.ChainConfig, _ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ *arbitrum_types.ConditionalOptions, _ common.Address, _ *arbos.L1Info) error { - if _, ok := tx.GetInner().(*types.DynamicFeeTx); ok { - statedb.FilterTx(withBlock) + hooks := arbos.NoopSequencingHooks() + if isBlockFilter { + hooks.BlockFilter = func(_ *types.Header, _ *state.StateDB, txes types.Transactions, _ types.Receipts) error { + if len(txes[1].Data()) > 0 { + return state.ErrArbTxFilter + } + return nil } - return nil - } - postTxFilter := func(_ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ common.Address, _ uint64, _ *core.ExecutionResult) error { - if statedb.IsTxFiltered() { - return errors.New("internal error") + } else { + hooks.PreTxFilter = func(_ *params.ChainConfig, _ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ *arbitrum_types.ConditionalOptions, _ common.Address, _ *arbos.L1Info) error { + if len(tx.Data()) > 0 { + statedb.FilterTx() + } + return nil + } + hooks.PostTxFilter = func(_ *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, _ common.Address, _ uint64, _ *core.ExecutionResult) error { + if statedb.IsTxFiltered() { + return state.ErrArbTxFilter + } + return nil } - return nil } - hooks := &arbos.SequencingHooks{TxErrors: []error{}, DiscardInvalidTxsEarly: false, PreTxFilter: preTxFilter, PostTxFilter: postTxFilter, ConditionalOptionsForTx: nil} cleanup := func() { builderCleanup() From 95cc018b528321891cc1c5907f64d471b437295c Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Wed, 11 Dec 2024 15:41:22 -0600 Subject: [PATCH 045/187] address PR comments --- arbos/block_processor.go | 44 +++++++++++++++++---------------- execution/gethexec/sequencer.go | 5 +++- go-ethereum | 2 +- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/arbos/block_processor.go b/arbos/block_processor.go index 5daf163c85..caa8abd4a7 100644 --- a/arbos/block_processor.go +++ b/arbos/block_processor.go @@ -115,12 +115,12 @@ func createNewHeader(prevHeader *types.Header, l1info *L1Info, state *arbosState type ConditionalOptionsForTx []*arbitrum_types.ConditionalOptions type SequencingHooks struct { - TxErrors []error - DiscardInvalidTxsEarly bool - PreTxFilter func(*params.ChainConfig, *types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, *arbitrum_types.ConditionalOptions, common.Address, *L1Info) error - PostTxFilter func(*types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, common.Address, uint64, *core.ExecutionResult) error - BlockFilter func(*types.Header, *state.StateDB, types.Transactions, types.Receipts) error - ConditionalOptionsForTx []*arbitrum_types.ConditionalOptions + TxErrors []error // This can be unset + DiscardInvalidTxsEarly bool // This can be unset + PreTxFilter func(*params.ChainConfig, *types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, *arbitrum_types.ConditionalOptions, common.Address, *L1Info) error // This has to be set + PostTxFilter func(*types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, common.Address, uint64, *core.ExecutionResult) error // This has to be set + BlockFilter func(*types.Header, *state.StateDB, types.Transactions, types.Receipts) error // This can be unset + ConditionalOptionsForTx []*arbitrum_types.ConditionalOptions // This can be unset } func NoopSequencingHooks() *SequencingHooks { @@ -133,9 +133,7 @@ func NoopSequencingHooks() *SequencingHooks { func(*types.Header, *state.StateDB, *arbosState.ArbosState, *types.Transaction, common.Address, uint64, *core.ExecutionResult) error { return nil }, - func(*types.Header, *state.StateDB, types.Transactions, types.Receipts) error { - return nil - }, + nil, nil, } } @@ -176,7 +174,7 @@ func ProduceBlockAdvanced( runMode core.MessageRunMode, ) (*types.Block, types.Receipts, error) { - state, err := arbosState.OpenSystemArbosState(statedb, nil, true) + arbState, err := arbosState.OpenSystemArbosState(statedb, nil, true) if err != nil { return nil, nil, err } @@ -193,11 +191,11 @@ func ProduceBlockAdvanced( l1Timestamp: l1Header.Timestamp, } - header := createNewHeader(lastBlockHeader, l1Info, state, chainConfig) + header := createNewHeader(lastBlockHeader, l1Info, arbState, chainConfig) signer := types.MakeSigner(chainConfig, header.Number, header.Time) // Note: blockGasLeft will diverge from the actual gas left during execution in the event of invalid txs, // but it's only used as block-local representation limiting the amount of work done in a block. - blockGasLeft, _ := state.L2PricingState().PerBlockGasLimit() + blockGasLeft, _ := arbState.L2PricingState().PerBlockGasLimit() l1BlockNum := l1Info.l1BlockNumber // Prepend a tx before all others to touch up the state (update the L1 block num, pricing pools, etc) @@ -230,7 +228,7 @@ func ProduceBlockAdvanced( if !ok { return nil, nil, errors.New("retryable tx is somehow not a retryable") } - retryable, _ := state.RetryableState().OpenRetryable(retry.TicketId, time) + retryable, _ := arbState.RetryableState().OpenRetryable(retry.TicketId, time) if retryable == nil { // retryable was already deleted continue @@ -269,11 +267,11 @@ func ProduceBlockAdvanced( if basefee.Sign() > 0 { dataGas = math.MaxUint64 - brotliCompressionLevel, err := state.BrotliCompressionLevel() + brotliCompressionLevel, err := arbState.BrotliCompressionLevel() if err != nil { return nil, nil, fmt.Errorf("failed to get brotli compression level: %w", err) } - posterCost, _ := state.L1PricingState().GetPosterInfo(tx, poster, brotliCompressionLevel) + posterCost, _ := arbState.L1PricingState().GetPosterInfo(tx, poster, brotliCompressionLevel) posterCostInL2Gas := arbmath.BigDiv(posterCost, basefee) if posterCostInL2Gas.IsUint64() { @@ -303,13 +301,13 @@ func ProduceBlockAdvanced( snap := statedb.Snapshot() - if err = hooks.PreTxFilter(chainConfig, header, statedb, state, tx, options, sender, l1Info); err != nil { + if err = hooks.PreTxFilter(chainConfig, header, statedb, arbState, tx, options, sender, l1Info); err != nil { statedb.RevertToSnapshot(snap) return nil, nil, err } // Additional pre-transaction validity check - if err = extraPreTxFilter(chainConfig, header, statedb, state, tx, options, sender, l1Info); err != nil { + if err = extraPreTxFilter(chainConfig, header, statedb, arbState, tx, options, sender, l1Info); err != nil { statedb.RevertToSnapshot(snap) return nil, nil, err } @@ -329,7 +327,7 @@ func ProduceBlockAdvanced( vm.Config{}, runMode, func(result *core.ExecutionResult) error { - return hooks.PostTxFilter(header, statedb, state, tx, sender, dataGas, result) + return hooks.PostTxFilter(header, statedb, arbState, tx, sender, dataGas, result) }, ) if err != nil { @@ -339,7 +337,7 @@ func ProduceBlockAdvanced( } // Additional post-transaction validity check - if err = extraPostTxFilter(chainConfig, header, statedb, state, tx, options, sender, l1Info, result); err != nil { + if err = extraPostTxFilter(chainConfig, header, statedb, arbState, tx, options, sender, l1Info, result); err != nil { statedb.RevertToSnapshot(snap) return nil, nil, err } @@ -370,13 +368,13 @@ func ProduceBlockAdvanced( if tx.Type() == types.ArbitrumInternalTxType { // ArbOS might have upgraded to a new version, so we need to refresh our state - state, err = arbosState.OpenSystemArbosState(statedb, nil, true) + arbState, err = arbosState.OpenSystemArbosState(statedb, nil, true) if err != nil { return nil, nil, err } // Update the ArbOS version in the header (if it changed) extraInfo := types.DeserializeHeaderExtraInformation(header) - extraInfo.ArbOSFormatVersion = state.ArbOSVersion() + extraInfo.ArbOSFormatVersion = arbState.ArbOSVersion() extraInfo.UpdateHeaderWithInfo(header) } @@ -462,6 +460,10 @@ func ProduceBlockAdvanced( } } + if statedb.IsTxFiltered() { + return nil, nil, state.ErrArbTxFilter + } + if sequencingHooks.BlockFilter != nil { if err = sequencingHooks.BlockFilter(header, statedb, complete, receipts); err != nil { return nil, nil, err diff --git a/execution/gethexec/sequencer.go b/execution/gethexec/sequencer.go index 9db5c206fe..faded7375c 100644 --- a/execution/gethexec/sequencer.go +++ b/execution/gethexec/sequencer.go @@ -490,7 +490,10 @@ func (s *Sequencer) preTxFilter(_ *params.ChainConfig, header *types.Header, sta return nil } -func (s *Sequencer) postTxFilter(header *types.Header, _ *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, sender common.Address, dataGas uint64, result *core.ExecutionResult) error { +func (s *Sequencer) postTxFilter(header *types.Header, statedb *state.StateDB, _ *arbosState.ArbosState, tx *types.Transaction, sender common.Address, dataGas uint64, result *core.ExecutionResult) error { + if statedb.IsTxFiltered() { + return state.ErrArbTxFilter + } if result.Err != nil && result.UsedGas > dataGas && result.UsedGas-dataGas <= s.config().MaxRevertGasReject { return arbitrum.NewRevertReason(result) } diff --git a/go-ethereum b/go-ethereum index e9a5f8af11..6205f5effb 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit e9a5f8af11e82a85510ff1c00932dc1a13e5cc7c +Subproject commit 6205f5effbcc8286f14cea045a9fcabb7c894413 From fdb42c80212acb0b6d38db7579d6b63facfac61e Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 18 Nov 2024 13:18:44 -0300 Subject: [PATCH 046/187] wip --- .dockerignore | 1 + arbitrator/Cargo.toml | 1 + arbitrator/tools/stylus_benchmark/Cargo.lock | 2350 ++ arbitrator/tools/stylus_benchmark/Cargo.toml | 12 + .../programs_to_benchmark/add_one.wat | 6 + .../programs_to_benchmark/bin-op.wat | 22 + .../programs_to_benchmark/i32-add.wat | 30017 ++++++++++++++++ .../programs_to_benchmark/user.wat | 53 + arbitrator/tools/stylus_benchmark/src/main.rs | 139 + .../stylus_benchmark/stylus_caller/Cargo.toml | 7 + .../stylus_caller/src/main.rs | 10 + .../wasm-libraries/user-host/Cargo.toml | 2 +- .../wasm-libraries/user-host/src/lib.rs | 2 +- 13 files changed, 32620 insertions(+), 2 deletions(-) create mode 100644 arbitrator/tools/stylus_benchmark/Cargo.lock create mode 100644 arbitrator/tools/stylus_benchmark/Cargo.toml create mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat create mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/bin-op.wat create mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/i32-add.wat create mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/user.wat create mode 100644 arbitrator/tools/stylus_benchmark/src/main.rs create mode 100644 arbitrator/tools/stylus_benchmark/stylus_caller/Cargo.toml create mode 100644 arbitrator/tools/stylus_benchmark/stylus_caller/src/main.rs diff --git a/.dockerignore b/.dockerignore index 51424900e8..3ed2b64574 100644 --- a/.dockerignore +++ b/.dockerignore @@ -25,6 +25,7 @@ nitro-testnode/**/* # Arbitrator ignores arbitrator/tools/module_roots arbitrator/tools/pricer +arbitrator/tools/stylus_benchmark # Rust outputs arbitrator/target/**/* diff --git a/arbitrator/Cargo.toml b/arbitrator/Cargo.toml index eaafb6e439..3c5228daf2 100644 --- a/arbitrator/Cargo.toml +++ b/arbitrator/Cargo.toml @@ -12,6 +12,7 @@ members = [ exclude = [ "stylus/tests/", "tools/wasmer/", + "tools/stylus_benchmark", ] resolver = "2" diff --git a/arbitrator/tools/stylus_benchmark/Cargo.lock b/arbitrator/tools/stylus_benchmark/Cargo.lock new file mode 100644 index 0000000000..85d0add69d --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/Cargo.lock @@ -0,0 +1,2350 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli 0.31.1", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "allocator-api2" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "arbutil" +version = "0.1.0" +dependencies = [ + "digest 0.10.7", + "eyre", + "fnv", + "hex", + "num-traits", + "num_enum", + "ruint2", + "serde", + "sha2 0.10.8", + "sha3 0.10.8", + "siphasher", + "tiny-keccak", + "wasmparser", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "serde", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "brotli" +version = "0.1.0" +dependencies = [ + "lazy_static", + "num_enum", + "wee_alloc", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" + +[[package]] +name = "caller-env" +version = "0.1.0" +dependencies = [ + "brotli", + "num_enum", + "rand", + "rand_pcg", +] + +[[package]] +name = "cc" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "cmake" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" +dependencies = [ + "cc", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "corosensei" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80128832c58ea9cbd041d2a759ec449224487b2c1e400453d99d244eead87a8e" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "libc", + "scopeguard", + "windows-sys 0.33.0", +] + +[[package]] +name = "cpufeatures" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-bforest" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2ab4512dfd3a6f4be184403a195f76e81a8a9f9e6c898e19d2dc3ce20e0115" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b022ed2a5913a38839dfbafe6cf135342661293b08049843362df4301261dc" +dependencies = [ + "arrayvec", + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-egraph", + "cranelift-entity", + "cranelift-isle", + "gimli 0.26.2", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "639307b45434ad112a98f8300c0f0ab085cbefcd767efcdef9ef19d4c0756e74" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "278e52e29c53fcf32431ef08406c295699a70306d05a0715c5b1bf50e33a9ab7" + +[[package]] +name = "cranelift-egraph" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624b54323b06e675293939311943ba82d323bb340468ce1889be5da7932c8d73" +dependencies = [ + "cranelift-entity", + "fxhash", + "hashbrown 0.12.3", + "indexmap 1.9.3", + "log", + "smallvec", +] + +[[package]] +name = "cranelift-entity" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a59bcbca89c3f1b70b93ab3cbba5e5e0cbf3e63dadb23c7525cb142e21a9d4c" + +[[package]] +name = "cranelift-frontend" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d70abacb8cfef3dc8ff7e8836e9c1d70f7967dfdac824a4cd5e30223415aca6" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "393bc73c451830ff8dbb3a07f61843d6cb41a084f9996319917c0b291ed785bb" + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.87", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if 1.0.0", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.87", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "enum-iterator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" +dependencies = [ + "enum-iterator-derive 0.7.0", +] + +[[package]] +name = "enum-iterator" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c280b9e6b3ae19e152d8e31cf47f18389781e119d4013a2a2bb0180e5facc635" +dependencies = [ + "enum-iterator-derive 1.4.0", +] + +[[package]] +name = "enum-iterator-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "enumset" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +dependencies = [ + "fallible-iterator", + "indexmap 1.9.3", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.1", + "serde", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "libc" +version = "0.2.162" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.1", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memory_units" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "more-asserts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nom-leb128" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52a73b6c3a9ecfff12ad50dedba051ef838d2f478d938bb3e6b3842431028e62" +dependencies = [ + "arrayvec", + "nom", + "num-traits", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prover" +version = "0.1.0" +dependencies = [ + "arbutil", + "bincode", + "bitvec", + "brotli", + "derivative", + "digest 0.9.0", + "enum-iterator 2.1.0", + "eyre", + "fnv", + "hex", + "itertools", + "lazy_static", + "libc", + "lru", + "nom", + "nom-leb128", + "num", + "num-derive", + "num-traits", + "once_cell", + "parking_lot", + "rustc-demangle", + "serde", + "serde_json", + "serde_with", + "sha2 0.9.9", + "sha3 0.9.1", + "smallvec", + "static_assertions", + "structopt", + "wasmer-types", + "wasmparser", + "wat", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "rand_pcg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "regalloc2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "region" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6b6ebd13bc009aef9cd476c1310d49ac354d36e240cf1bd753290f3dc7199a7" +dependencies = [ + "bitflags 1.3.2", + "libc", + "mach2", + "windows-sys 0.52.0", +] + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "indexmap 1.9.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ruint2" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b066b8e4fcea7fae86b6932d2449670b6b5545b7e8407841b2d3a916ff2a9f86" +dependencies = [ + "derive_more", + "ruint2-macro", + "rustc_version", + "thiserror", +] + +[[package]] +name = "ruint2-macro" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89dc553bc0cf4512a8b96caa2e21ed5f6e4b66bf28a1bd08fd9eb07c0b39b28c" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "self_cell" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "serde_json" +version = "1.0.132" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.6.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "shared-buffer" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6c99835bad52957e7aa241d3975ed17c1e5f8c92026377d117a606f36b84b16" +dependencies = [ + "bytes", + "memmap2 0.6.2", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "structopt" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +dependencies = [ + "clap", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "stylus_benchmark" +version = "0.1.0" +dependencies = [ + "eyre", + "wabt", + "wasmer", +] + +[[package]] +name = "stylus_caller" +version = "0.1.0" +dependencies = [ + "user-host", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap 2.6.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "user-host" +version = "0.1.0" +dependencies = [ + "arbutil", + "caller-env", + "eyre", + "fnv", + "hex", + "prover", + "user-host-trait", + "wasmer-types", +] + +[[package]] +name = "user-host-trait" +version = "0.1.0" +dependencies = [ + "arbutil", + "caller-env", + "eyre", + "prover", + "ruint2", +] + +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wabt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00bef93d5e6c81a293bccf107cf43aa47239382f455ba14869d36695d8963b9c" +dependencies = [ + "serde", + "serde_derive", + "serde_json", + "wabt-sys", +] + +[[package]] +name = "wabt-sys" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a4e043159f63e16986e713e9b5e1c06043df4848565bf672e27c523864c7791" +dependencies = [ + "cc", + "cmake", + "glob", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.87", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + +[[package]] +name = "wasm-encoder" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasmer" +version = "4.2.8" +dependencies = [ + "bytes", + "cfg-if 1.0.0", + "derivative", + "indexmap 1.9.3", + "js-sys", + "more-asserts", + "rustc-demangle", + "serde", + "serde-wasm-bindgen", + "shared-buffer", + "target-lexicon", + "thiserror", + "tracing", + "wasm-bindgen", + "wasmer-compiler", + "wasmer-compiler-cranelift", + "wasmer-derive", + "wasmer-types", + "wasmer-vm", + "wat", + "winapi", +] + +[[package]] +name = "wasmer-compiler" +version = "4.2.8" +dependencies = [ + "backtrace", + "bytes", + "cfg-if 1.0.0", + "enum-iterator 0.7.0", + "enumset", + "lazy_static", + "leb128", + "memmap2 0.5.10", + "more-asserts", + "region", + "rkyv", + "self_cell", + "shared-buffer", + "smallvec", + "thiserror", + "wasmer-types", + "wasmer-vm", + "wasmparser", + "winapi", +] + +[[package]] +name = "wasmer-compiler-cranelift" +version = "4.2.8" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "gimli 0.26.2", + "more-asserts", + "rayon", + "smallvec", + "target-lexicon", + "tracing", + "wasmer-compiler", + "wasmer-types", +] + +[[package]] +name = "wasmer-derive" +version = "4.2.8" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "wasmer-types" +version = "4.2.8" +dependencies = [ + "bytecheck", + "enum-iterator 0.7.0", + "enumset", + "indexmap 1.9.3", + "more-asserts", + "rkyv", + "target-lexicon", + "thiserror", +] + +[[package]] +name = "wasmer-vm" +version = "4.2.8" +dependencies = [ + "backtrace", + "cc", + "cfg-if 1.0.0", + "corosensei", + "crossbeam-queue", + "dashmap", + "derivative", + "enum-iterator 0.7.0", + "fnv", + "indexmap 1.9.3", + "lazy_static", + "libc", + "mach", + "memoffset", + "more-asserts", + "region", + "scopeguard", + "thiserror", + "wasmer-types", + "winapi", +] + +[[package]] +name = "wasmparser" +version = "0.121.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" +dependencies = [ + "bitflags 2.6.0", + "indexmap 2.6.0", + "semver", +] + +[[package]] +name = "wast" +version = "64.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a259b226fd6910225aa7baeba82f9d9933b6d00f2ce1b49b80fa4214328237cc" +dependencies = [ + "leb128", + "memchr", + "unicode-width", + "wasm-encoder", +] + +[[package]] +name = "wat" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53253d920ab413fca1c7dc2161d601c79b4fdf631d0ba51dd4343bf9b556c3f6" +dependencies = [ + "wast", +] + +[[package]] +name = "wee_alloc" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "memory_units", + "winapi", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43dbb096663629518eb1dfa72d80243ca5a6aca764cae62a2df70af760a9be75" +dependencies = [ + "windows_aarch64_msvc 0.33.0", + "windows_i686_gnu 0.33.0", + "windows_i686_msvc 0.33.0", + "windows_x86_64_gnu 0.33.0", + "windows_x86_64_msvc 0.33.0", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] diff --git a/arbitrator/tools/stylus_benchmark/Cargo.toml b/arbitrator/tools/stylus_benchmark/Cargo.toml new file mode 100644 index 0000000000..f12f8bed34 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "stylus_benchmark" +version = "0.1.0" +edition = "2021" + +[dependencies] +eyre = "0.6.12" +wabt = "0.10.0" +wasmer = { path = "../wasmer/lib/api" } + +[workspace] +members = ["stylus_caller"] diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat new file mode 100644 index 0000000000..4882837894 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat @@ -0,0 +1,6 @@ +(module + (type $t0 (func (param i32) (result i32))) + (func $add_one (export "add_one") (type $t0) (param $p0 i32) (result i32) + local.get $p0 + i32.const 1 + i32.add)) diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/bin-op.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/bin-op.wat new file mode 100644 index 0000000000..a9f3530b8a --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/bin-op.wat @@ -0,0 +1,22 @@ +(module + (memory (export "memory") 128 128) + (func $start + (local $counter i32) + (local $scratch i32) + + (loop $loop + local.get $scratch + local.get $scratch + i32.add + drop + + local.get $counter + i32.const 1 + i32.sub + local.tee + i32.const 0 + i32.ne + br_if $loop) + ) + (start $start) +) diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/i32-add.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/i32-add.wat new file mode 100644 index 0000000000..c53556ed07 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/i32-add.wat @@ -0,0 +1,30017 @@ +(import "pricer" "toggle_timer" (func $timer)) +(start $test) +(memory (export "memory") 0 0) +(func (export "user_entrypoint") (param i32) (result i32) unreachable) +(func $test (local $check i32) + call $timer + i32.const -1483064468 + (i32.add (i32.const -1249511577)) + (i32.add (i32.const -1160200137)) + (i32.add (i32.const 2001118559)) + (i32.add (i32.const -2115852570)) + (i32.add (i32.const -1292169934)) + (i32.add (i32.const -1885632388)) + (i32.add (i32.const 258433188)) + (i32.add (i32.const 839009913)) + (i32.add (i32.const -519215513)) + (i32.add (i32.const -1803636547)) + (i32.add (i32.const -1934748469)) + (i32.add (i32.const 1781436988)) + (i32.add (i32.const -734506083)) + (i32.add (i32.const -757897030)) + (i32.add (i32.const -277341059)) + (i32.add (i32.const 2122901088)) + (i32.add (i32.const -842751430)) + (i32.add (i32.const -424468984)) + (i32.add (i32.const 662675976)) + (i32.add (i32.const 2132528196)) + (i32.add (i32.const -512339037)) + (i32.add (i32.const -350343319)) + (i32.add (i32.const -985464078)) + (i32.add (i32.const 2102083747)) + (i32.add (i32.const -2044168158)) + (i32.add (i32.const -1685149472)) + (i32.add (i32.const 1506613898)) + (i32.add (i32.const 219602722)) + (i32.add (i32.const -1011279442)) + (i32.add (i32.const -1813066681)) + (i32.add (i32.const -1534802746)) + (i32.add (i32.const 215995376)) + (i32.add (i32.const 814464292)) + (i32.add (i32.const -42270370)) + (i32.add (i32.const 1850360001)) + (i32.add (i32.const -1480688974)) + (i32.add (i32.const -1708200521)) + (i32.add (i32.const -1851181543)) + (i32.add (i32.const -480196895)) + (i32.add (i32.const -1785874037)) + (i32.add (i32.const -708349552)) + (i32.add (i32.const -597512941)) + (i32.add (i32.const -1017205241)) + (i32.add (i32.const 456684094)) + (i32.add (i32.const -2070141353)) + (i32.add (i32.const -920459206)) + (i32.add (i32.const -1068028788)) + (i32.add (i32.const 198730701)) + (i32.add (i32.const -369466549)) + (i32.add (i32.const -1962291882)) + (i32.add (i32.const -177246903)) + (i32.add (i32.const -32496306)) + (i32.add (i32.const -136899608)) + (i32.add (i32.const -1256623909)) + (i32.add (i32.const -2104028373)) + (i32.add (i32.const -1871498645)) + (i32.add (i32.const -1385691679)) + (i32.add (i32.const -1454756524)) + (i32.add (i32.const -1403921930)) + (i32.add (i32.const 1760396644)) + (i32.add (i32.const 1344985052)) + (i32.add (i32.const 1756136782)) + (i32.add (i32.const 1470190860)) + (i32.add (i32.const -744703854)) + (i32.add (i32.const 1723585294)) + (i32.add (i32.const 1715474494)) + (i32.add (i32.const 228764655)) + (i32.add (i32.const -881445711)) + (i32.add (i32.const -262068400)) + (i32.add (i32.const 310084206)) + (i32.add (i32.const 683207739)) + (i32.add (i32.const 282258170)) + (i32.add (i32.const -1834527001)) + (i32.add (i32.const 1875945330)) + (i32.add (i32.const 1894203884)) + (i32.add (i32.const -1323283713)) + (i32.add (i32.const 27090658)) + (i32.add (i32.const -508194262)) + (i32.add (i32.const 1869557463)) + (i32.add (i32.const 1691706225)) + (i32.add (i32.const 2096371408)) + (i32.add (i32.const -394021451)) + (i32.add (i32.const 1642025339)) + (i32.add (i32.const -1749826287)) + (i32.add (i32.const -2049160805)) + (i32.add (i32.const 89563772)) + (i32.add (i32.const 1268095817)) + (i32.add (i32.const -1866302283)) + (i32.add (i32.const -390185378)) + (i32.add (i32.const -593804617)) + (i32.add (i32.const -171918306)) + (i32.add (i32.const 1252041087)) + (i32.add (i32.const 1085353151)) + (i32.add (i32.const 1902239600)) + (i32.add (i32.const -1506342593)) + (i32.add (i32.const 1427238043)) + (i32.add (i32.const 1019476114)) + (i32.add (i32.const -2046374019)) + (i32.add (i32.const 776445377)) + (i32.add (i32.const 359473486)) + (i32.add (i32.const 1867111944)) + (i32.add (i32.const -9145030)) + (i32.add (i32.const 557639614)) + (i32.add (i32.const -1202578504)) + (i32.add (i32.const 1527001396)) + (i32.add (i32.const -1507648486)) + (i32.add (i32.const -1562491528)) + (i32.add (i32.const -1149264382)) + (i32.add (i32.const 1896065785)) + (i32.add (i32.const -363950321)) + (i32.add (i32.const 1395063821)) + (i32.add (i32.const -1781465449)) + (i32.add (i32.const -1446070448)) + (i32.add (i32.const -484794836)) + (i32.add (i32.const 670624904)) + (i32.add (i32.const 450386030)) + (i32.add (i32.const -51687461)) + (i32.add (i32.const 1097536905)) + (i32.add (i32.const -87621868)) + (i32.add (i32.const -1749080110)) + (i32.add (i32.const 1899080261)) + (i32.add (i32.const 682889984)) + (i32.add (i32.const -1823407263)) + (i32.add (i32.const 1561708320)) + (i32.add (i32.const -1387046107)) + (i32.add (i32.const -546948475)) + (i32.add (i32.const 1177023942)) + (i32.add (i32.const 491701229)) + (i32.add (i32.const 1683814293)) + (i32.add (i32.const 789743365)) + (i32.add (i32.const 605843693)) + (i32.add (i32.const 288482920)) + (i32.add (i32.const -1397170057)) + (i32.add (i32.const -2088292055)) + (i32.add (i32.const 926411227)) + (i32.add (i32.const -817209878)) + (i32.add (i32.const -404070860)) + (i32.add (i32.const 1520346842)) + (i32.add (i32.const -1864440672)) + (i32.add (i32.const 1030916746)) + (i32.add (i32.const -776868360)) + (i32.add (i32.const -1314189794)) + (i32.add (i32.const 191186971)) + (i32.add (i32.const -1581169945)) + (i32.add (i32.const -1716708693)) + (i32.add (i32.const 396445407)) + (i32.add (i32.const 1133149330)) + (i32.add (i32.const 2079873241)) + (i32.add (i32.const -1240603715)) + (i32.add (i32.const -1190394841)) + (i32.add (i32.const -912479381)) + (i32.add (i32.const 282382994)) + (i32.add (i32.const 1772481939)) + (i32.add (i32.const 2102386702)) + (i32.add (i32.const 1585132188)) + (i32.add (i32.const 1607791758)) + (i32.add (i32.const 1606462472)) + (i32.add (i32.const 1817366877)) + (i32.add (i32.const 853246610)) + (i32.add (i32.const 1661951149)) + (i32.add (i32.const 182348188)) + (i32.add (i32.const -1928939683)) + (i32.add (i32.const 2093307963)) + (i32.add (i32.const 1732670754)) + (i32.add (i32.const -2048942381)) + (i32.add (i32.const 1412930561)) + (i32.add (i32.const 1711595344)) + (i32.add (i32.const -975444655)) + (i32.add (i32.const -343607799)) + (i32.add (i32.const -1636898702)) + (i32.add (i32.const -631207883)) + (i32.add (i32.const 268038084)) + (i32.add (i32.const -1885864383)) + (i32.add (i32.const 1077068774)) + (i32.add (i32.const -1455470499)) + (i32.add (i32.const -165822894)) + (i32.add (i32.const 1728375022)) + (i32.add (i32.const -320140602)) + (i32.add (i32.const -823924308)) + (i32.add (i32.const 868319015)) + (i32.add (i32.const 1359810150)) + (i32.add (i32.const 1640134713)) + (i32.add (i32.const -164479159)) + (i32.add (i32.const 183917518)) + (i32.add (i32.const 189828319)) + (i32.add (i32.const -683889337)) + (i32.add (i32.const -230592374)) + (i32.add (i32.const -239553703)) + (i32.add (i32.const 1625775144)) + (i32.add (i32.const -1669173208)) + (i32.add (i32.const -1507754612)) + (i32.add (i32.const 889577151)) + (i32.add (i32.const 1901710641)) + (i32.add (i32.const 864429008)) + (i32.add (i32.const -2086973808)) + (i32.add (i32.const -1882109637)) + (i32.add (i32.const 222248542)) + (i32.add (i32.const 1852129126)) + (i32.add (i32.const -1887599682)) + (i32.add (i32.const 1645625162)) + (i32.add (i32.const 2014257732)) + (i32.add (i32.const -546345350)) + (i32.add (i32.const -342796218)) + (i32.add (i32.const -128645740)) + (i32.add (i32.const -778169843)) + (i32.add (i32.const 2144260609)) + (i32.add (i32.const 24044858)) + (i32.add (i32.const 1150532038)) + (i32.add (i32.const -882911921)) + (i32.add (i32.const 649430552)) + (i32.add (i32.const -1397210759)) + (i32.add (i32.const -2078711746)) + (i32.add (i32.const -1675486964)) + (i32.add (i32.const 19100221)) + (i32.add (i32.const 1567177756)) + (i32.add (i32.const -1616533921)) + (i32.add (i32.const -588314728)) + (i32.add (i32.const 400952695)) + (i32.add (i32.const 1029935716)) + (i32.add (i32.const -29569409)) + (i32.add (i32.const -495714921)) + (i32.add (i32.const 1857126726)) + (i32.add (i32.const 1099891312)) + (i32.add (i32.const 1093206320)) + (i32.add (i32.const -1943667292)) + (i32.add (i32.const -612127286)) + (i32.add (i32.const 750447949)) + (i32.add (i32.const 758105202)) + (i32.add (i32.const 1599661744)) + (i32.add (i32.const -2040438937)) + (i32.add (i32.const 675696812)) + (i32.add (i32.const 1265962548)) + (i32.add (i32.const 1666921343)) + (i32.add (i32.const 1955387406)) + (i32.add (i32.const -1617296529)) + (i32.add (i32.const 1738161435)) + (i32.add (i32.const -1187109363)) + (i32.add (i32.const 713400918)) + (i32.add (i32.const -1331172631)) + (i32.add (i32.const 1562149833)) + (i32.add (i32.const -797561667)) + (i32.add (i32.const 1198996398)) + (i32.add (i32.const 885452728)) + (i32.add (i32.const 986958792)) + (i32.add (i32.const 1086261942)) + (i32.add (i32.const 856469968)) + (i32.add (i32.const -1229623043)) + (i32.add (i32.const -2012549803)) + (i32.add (i32.const 1512552704)) + (i32.add (i32.const 1752720440)) + (i32.add (i32.const -1314541210)) + (i32.add (i32.const 1895079631)) + (i32.add (i32.const -2027757395)) + (i32.add (i32.const -152738641)) + (i32.add (i32.const 2022630323)) + (i32.add (i32.const 704186603)) + (i32.add (i32.const 346498662)) + (i32.add (i32.const 933960521)) + (i32.add (i32.const -1732810960)) + (i32.add (i32.const 658947250)) + (i32.add (i32.const -1147949448)) + (i32.add (i32.const -1937886379)) + (i32.add (i32.const 687684356)) + (i32.add (i32.const -1010177139)) + (i32.add (i32.const 816080901)) + (i32.add (i32.const -1791271698)) + (i32.add (i32.const 863879180)) + (i32.add (i32.const -1651400350)) + (i32.add (i32.const -705912251)) + (i32.add (i32.const -600515264)) + (i32.add (i32.const 2002936706)) + (i32.add (i32.const -1596715994)) + (i32.add (i32.const -1042008897)) + (i32.add (i32.const 1448223037)) + (i32.add (i32.const 43595034)) + (i32.add (i32.const 1610183269)) + (i32.add (i32.const -1294706971)) + (i32.add (i32.const -482624503)) + (i32.add (i32.const 1050595837)) + (i32.add (i32.const -842831868)) + (i32.add (i32.const 695380267)) + (i32.add (i32.const -1677327946)) + (i32.add (i32.const 539061719)) + (i32.add (i32.const -700151914)) + (i32.add (i32.const -1375737649)) + (i32.add (i32.const 1752534368)) + (i32.add (i32.const 474856220)) + (i32.add (i32.const -1731969309)) + (i32.add (i32.const 362900106)) + (i32.add (i32.const -1201424235)) + (i32.add (i32.const 948572811)) + (i32.add (i32.const -571549998)) + (i32.add (i32.const 587261398)) + (i32.add (i32.const 2001009547)) + (i32.add (i32.const 795060870)) + (i32.add (i32.const 1620193106)) + (i32.add (i32.const -238850839)) + (i32.add (i32.const 1062306287)) + (i32.add (i32.const 655888677)) + (i32.add (i32.const 1449176065)) + (i32.add (i32.const -444333420)) + (i32.add (i32.const 1351453681)) + (i32.add (i32.const 1302051902)) + (i32.add (i32.const 1398846242)) + (i32.add (i32.const -365577174)) + (i32.add (i32.const 60644483)) + (i32.add (i32.const 417471308)) + (i32.add (i32.const 1139864763)) + (i32.add (i32.const 507224006)) + (i32.add (i32.const -1890685856)) + (i32.add (i32.const 634798946)) + (i32.add (i32.const 528069111)) + (i32.add (i32.const 1514085298)) + (i32.add (i32.const 1165660017)) + (i32.add (i32.const -612433351)) + (i32.add (i32.const -969480106)) + (i32.add (i32.const -1268644263)) + (i32.add (i32.const -1925199083)) + (i32.add (i32.const 1237469924)) + (i32.add (i32.const -390165613)) + (i32.add (i32.const -678197716)) + (i32.add (i32.const 501915890)) + (i32.add (i32.const -1428352761)) + (i32.add (i32.const 1542210423)) + (i32.add (i32.const -1002738161)) + (i32.add (i32.const 1903632740)) + (i32.add (i32.const -493869886)) + (i32.add (i32.const -1811329316)) + (i32.add (i32.const 1582350965)) + (i32.add (i32.const -1254631000)) + (i32.add (i32.const 272121632)) + (i32.add (i32.const -1433581162)) + (i32.add (i32.const 954789533)) + (i32.add (i32.const 960676337)) + (i32.add (i32.const -581887944)) + (i32.add (i32.const -1530602096)) + (i32.add (i32.const 2001733016)) + (i32.add (i32.const 1687315045)) + (i32.add (i32.const -2035574347)) + (i32.add (i32.const -260960287)) + (i32.add (i32.const -1323282592)) + (i32.add (i32.const 1602665300)) + (i32.add (i32.const -278811515)) + (i32.add (i32.const 787036495)) + (i32.add (i32.const 465361167)) + (i32.add (i32.const -1558212587)) + (i32.add (i32.const 215079613)) + (i32.add (i32.const -46084827)) + (i32.add (i32.const 295939675)) + (i32.add (i32.const -1663332084)) + (i32.add (i32.const -145375249)) + (i32.add (i32.const -901327064)) + (i32.add (i32.const -1548209584)) + (i32.add (i32.const -471885148)) + (i32.add (i32.const 1365444340)) + (i32.add (i32.const -1482404316)) + (i32.add (i32.const -575361974)) + (i32.add (i32.const -1688686075)) + (i32.add (i32.const 1690004972)) + (i32.add (i32.const 622376335)) + (i32.add (i32.const -104032829)) + (i32.add (i32.const 1746823532)) + (i32.add (i32.const 148078453)) + (i32.add (i32.const 591200957)) + (i32.add (i32.const -289105054)) + (i32.add (i32.const -563514389)) + (i32.add (i32.const -247229637)) + (i32.add (i32.const 983933861)) + (i32.add (i32.const -456794749)) + (i32.add (i32.const -650080027)) + (i32.add (i32.const -408062121)) + (i32.add (i32.const 448932695)) + (i32.add (i32.const -1832767092)) + (i32.add (i32.const 1896841062)) + (i32.add (i32.const 1939613177)) + (i32.add (i32.const 1201981850)) + (i32.add (i32.const 1446431434)) + (i32.add (i32.const 1897763341)) + (i32.add (i32.const -577793893)) + (i32.add (i32.const -616145091)) + (i32.add (i32.const -968876063)) + (i32.add (i32.const 2089127817)) + (i32.add (i32.const -1965458636)) + (i32.add (i32.const -1096303745)) + (i32.add (i32.const 206124651)) + (i32.add (i32.const -118597924)) + (i32.add (i32.const 126145490)) + (i32.add (i32.const -191868672)) + (i32.add (i32.const 1393538686)) + (i32.add (i32.const -592137869)) + (i32.add (i32.const 1090818601)) + (i32.add (i32.const -2017854495)) + (i32.add (i32.const 328548916)) + (i32.add (i32.const 1045548733)) + (i32.add (i32.const -1666138785)) + (i32.add (i32.const -965525577)) + (i32.add (i32.const 48494101)) + (i32.add (i32.const 883941690)) + (i32.add (i32.const -1738715317)) + (i32.add (i32.const 1965606610)) + (i32.add (i32.const 2002493419)) + (i32.add (i32.const 1754363092)) + (i32.add (i32.const 809657766)) + (i32.add (i32.const -257333776)) + (i32.add (i32.const 1496736963)) + (i32.add (i32.const -13426386)) + (i32.add (i32.const 1326067295)) + (i32.add (i32.const -568159405)) + (i32.add (i32.const -580837616)) + (i32.add (i32.const -1207783573)) + (i32.add (i32.const -669491301)) + (i32.add (i32.const -1725251909)) + (i32.add (i32.const -276360291)) + (i32.add (i32.const -17435542)) + (i32.add (i32.const 1000805174)) + (i32.add (i32.const -739162218)) + (i32.add (i32.const 2100970845)) + (i32.add (i32.const -1775937178)) + (i32.add (i32.const 1712141025)) + (i32.add (i32.const 1917298051)) + (i32.add (i32.const 695895615)) + (i32.add (i32.const 942838510)) + (i32.add (i32.const -1864325321)) + (i32.add (i32.const -1448357726)) + (i32.add (i32.const 1419739342)) + (i32.add (i32.const 1051488247)) + (i32.add (i32.const 259240594)) + (i32.add (i32.const 305773491)) + (i32.add (i32.const 381624180)) + (i32.add (i32.const 1836795505)) + (i32.add (i32.const 1830771289)) + (i32.add (i32.const -1460723916)) + (i32.add (i32.const 50300783)) + (i32.add (i32.const 1792855123)) + (i32.add (i32.const -976522589)) + (i32.add (i32.const -1311931476)) + (i32.add (i32.const -2072972387)) + (i32.add (i32.const -112492696)) + (i32.add (i32.const 632009713)) + (i32.add (i32.const -681717511)) + (i32.add (i32.const 602639561)) + (i32.add (i32.const -1663623750)) + (i32.add (i32.const -695748010)) + (i32.add (i32.const -669151255)) + (i32.add (i32.const -628253039)) + (i32.add (i32.const 330316581)) + (i32.add (i32.const -473179010)) + (i32.add (i32.const 1754131531)) + (i32.add (i32.const -1180120652)) + (i32.add (i32.const -781674960)) + (i32.add (i32.const -1059943844)) + (i32.add (i32.const -1362180400)) + (i32.add (i32.const 1171762331)) + (i32.add (i32.const 1596020286)) + (i32.add (i32.const -289968582)) + (i32.add (i32.const 1377545111)) + (i32.add (i32.const 1023854781)) + (i32.add (i32.const 424517512)) + (i32.add (i32.const -1667459039)) + (i32.add (i32.const 340771137)) + (i32.add (i32.const 1701841746)) + (i32.add (i32.const -895100642)) + (i32.add (i32.const -1860221675)) + (i32.add (i32.const 924881766)) + (i32.add (i32.const 2061927584)) + (i32.add (i32.const -601997462)) + (i32.add (i32.const 1001603307)) + (i32.add (i32.const 480068586)) + (i32.add (i32.const -1267819124)) + (i32.add (i32.const 830629456)) + (i32.add (i32.const -1915804934)) + (i32.add (i32.const -803207550)) + (i32.add (i32.const 2008919770)) + (i32.add (i32.const 1117983256)) + (i32.add (i32.const -241287157)) + (i32.add (i32.const -1479133096)) + (i32.add (i32.const -1016552631)) + (i32.add (i32.const -2056536091)) + (i32.add (i32.const -1628320415)) + (i32.add (i32.const -1100155512)) + (i32.add (i32.const -392374187)) + (i32.add (i32.const -393479553)) + (i32.add (i32.const 1557362652)) + (i32.add (i32.const 731898841)) + (i32.add (i32.const -1481573511)) + (i32.add (i32.const 974574924)) + (i32.add (i32.const 1988378687)) + (i32.add (i32.const -1349440574)) + (i32.add (i32.const 1604579439)) + (i32.add (i32.const -1447705869)) + (i32.add (i32.const -1913292095)) + (i32.add (i32.const 1271805842)) + (i32.add (i32.const 766516986)) + (i32.add (i32.const -10483065)) + (i32.add (i32.const 1417965028)) + (i32.add (i32.const 318442685)) + (i32.add (i32.const -1167637191)) + (i32.add (i32.const -1729097537)) + (i32.add (i32.const 1411205475)) + (i32.add (i32.const 1576005507)) + (i32.add (i32.const -385259643)) + (i32.add (i32.const -692954077)) + (i32.add (i32.const -538404572)) + (i32.add (i32.const -102464620)) + (i32.add (i32.const -320493794)) + (i32.add (i32.const 890861030)) + (i32.add (i32.const 1610190806)) + (i32.add (i32.const -1669408209)) + (i32.add (i32.const -2081909735)) + (i32.add (i32.const -1592568627)) + (i32.add (i32.const 1495401483)) + (i32.add (i32.const 928430640)) + (i32.add (i32.const -109218545)) + (i32.add (i32.const 149957530)) + (i32.add (i32.const 1350620355)) + (i32.add (i32.const -22700340)) + (i32.add (i32.const -1478618789)) + (i32.add (i32.const -236600255)) + (i32.add (i32.const 1787970220)) + (i32.add (i32.const -258167492)) + (i32.add (i32.const -142250248)) + (i32.add (i32.const 555145372)) + (i32.add (i32.const 577109139)) + (i32.add (i32.const 261772092)) + (i32.add (i32.const 400541925)) + (i32.add (i32.const -1712077829)) + (i32.add (i32.const -1878940094)) + (i32.add (i32.const 28893145)) + (i32.add (i32.const -1879028716)) + (i32.add (i32.const 778112277)) + (i32.add (i32.const -1187858480)) + (i32.add (i32.const 1471166846)) + (i32.add (i32.const -1598955646)) + (i32.add (i32.const 100454377)) + (i32.add (i32.const -1896751833)) + (i32.add (i32.const -721382865)) + (i32.add (i32.const 88188153)) + (i32.add (i32.const 388027794)) + (i32.add (i32.const -1637805982)) + (i32.add (i32.const 1188301171)) + (i32.add (i32.const -1284079999)) + (i32.add (i32.const 553550975)) + (i32.add (i32.const 10016120)) + (i32.add (i32.const -1914308459)) + (i32.add (i32.const 835817933)) + (i32.add (i32.const -467035059)) + (i32.add (i32.const 1091563439)) + (i32.add (i32.const -1592805650)) + (i32.add (i32.const -1107758525)) + (i32.add (i32.const -168799188)) + (i32.add (i32.const -1634937509)) + (i32.add (i32.const -944390316)) + (i32.add (i32.const -569234452)) + (i32.add (i32.const -603962116)) + (i32.add (i32.const 1291853781)) + (i32.add (i32.const -652549895)) + (i32.add (i32.const -899270912)) + (i32.add (i32.const 1411144015)) + (i32.add (i32.const 790837718)) + (i32.add (i32.const 891842097)) + (i32.add (i32.const 1830451481)) + (i32.add (i32.const 331174435)) + (i32.add (i32.const -543536838)) + (i32.add (i32.const -762687829)) + (i32.add (i32.const -339602145)) + (i32.add (i32.const -1528983362)) + (i32.add (i32.const 63712168)) + (i32.add (i32.const -1149067333)) + (i32.add (i32.const -750661576)) + (i32.add (i32.const -1821284961)) + (i32.add (i32.const 947697106)) + (i32.add (i32.const -567087129)) + (i32.add (i32.const -1146990241)) + (i32.add (i32.const 2017234111)) + (i32.add (i32.const 1917386359)) + (i32.add (i32.const -1614870587)) + (i32.add (i32.const 1298261354)) + (i32.add (i32.const -1278282886)) + (i32.add (i32.const 640587324)) + (i32.add (i32.const -1492473396)) + (i32.add (i32.const 1508416265)) + (i32.add (i32.const -1125582927)) + (i32.add (i32.const 90004306)) + (i32.add (i32.const -1211666867)) + (i32.add (i32.const -2102231373)) + (i32.add (i32.const 1773691718)) + (i32.add (i32.const -754936629)) + (i32.add (i32.const -1670985545)) + (i32.add (i32.const -816008318)) + (i32.add (i32.const -1869895629)) + (i32.add (i32.const -18002505)) + (i32.add (i32.const -1230232333)) + (i32.add (i32.const 1097875283)) + (i32.add (i32.const 1540175024)) + (i32.add (i32.const 1592699201)) + (i32.add (i32.const -1042156616)) + (i32.add (i32.const 1288827313)) + (i32.add (i32.const -1100643258)) + (i32.add (i32.const 1243624837)) + (i32.add (i32.const -264735986)) + (i32.add (i32.const 343462753)) + (i32.add (i32.const 1078223716)) + (i32.add (i32.const 1862458376)) + (i32.add (i32.const 38762193)) + (i32.add (i32.const 694820911)) + (i32.add (i32.const -957311361)) + (i32.add (i32.const 721250201)) + (i32.add (i32.const 1969562252)) + (i32.add (i32.const 2060441967)) + (i32.add (i32.const 1918101114)) + (i32.add (i32.const 1738062348)) + (i32.add (i32.const 1536169630)) + (i32.add (i32.const 885454203)) + (i32.add (i32.const 691902361)) + (i32.add (i32.const 1463214523)) + (i32.add (i32.const 542887750)) + (i32.add (i32.const 537230634)) + (i32.add (i32.const 239200173)) + (i32.add (i32.const 1038769110)) + (i32.add (i32.const -1809104330)) + (i32.add (i32.const 384109961)) + (i32.add (i32.const -478700848)) + (i32.add (i32.const 700445676)) + (i32.add (i32.const -1583828993)) + (i32.add (i32.const 1197265696)) + (i32.add (i32.const -608198770)) + (i32.add (i32.const 413409541)) + (i32.add (i32.const -1314610051)) + (i32.add (i32.const 37647380)) + (i32.add (i32.const 657316064)) + (i32.add (i32.const 353661192)) + (i32.add (i32.const -1132798229)) + (i32.add (i32.const -459022350)) + (i32.add (i32.const -1984878371)) + (i32.add (i32.const 27840933)) + (i32.add (i32.const -334002626)) + (i32.add (i32.const 297060174)) + (i32.add (i32.const 1328480084)) + (i32.add (i32.const -444085234)) + (i32.add (i32.const 933321951)) + (i32.add (i32.const 536294000)) + (i32.add (i32.const 2109864496)) + (i32.add (i32.const 1498294724)) + (i32.add (i32.const -2138165113)) + (i32.add (i32.const -151839310)) + (i32.add (i32.const 859675055)) + (i32.add (i32.const -1070938651)) + (i32.add (i32.const 1204648610)) + (i32.add (i32.const -419298838)) + (i32.add (i32.const -638128060)) + (i32.add (i32.const 1871773499)) + (i32.add (i32.const -2007206665)) + (i32.add (i32.const 1114929778)) + (i32.add (i32.const 212619671)) + (i32.add (i32.const -772470811)) + (i32.add (i32.const 232661811)) + (i32.add (i32.const 478597734)) + (i32.add (i32.const 387578512)) + (i32.add (i32.const 966184564)) + (i32.add (i32.const 649191104)) + (i32.add (i32.const -1904231933)) + (i32.add (i32.const -1120712122)) + (i32.add (i32.const -1173492623)) + (i32.add (i32.const -1262110252)) + (i32.add (i32.const -1633895048)) + (i32.add (i32.const 1909865215)) + (i32.add (i32.const -622304166)) + (i32.add (i32.const -1872766004)) + (i32.add (i32.const -557971372)) + (i32.add (i32.const -241996522)) + (i32.add (i32.const -1533924910)) + (i32.add (i32.const 1450579996)) + (i32.add (i32.const 2078652928)) + (i32.add (i32.const 1712195807)) + (i32.add (i32.const -1547084113)) + (i32.add (i32.const -149962259)) + (i32.add (i32.const 36748456)) + (i32.add (i32.const 18287493)) + (i32.add (i32.const 1094042303)) + (i32.add (i32.const 1509555519)) + (i32.add (i32.const 376422604)) + (i32.add (i32.const -1035275115)) + (i32.add (i32.const 929215898)) + (i32.add (i32.const 1906561437)) + (i32.add (i32.const -393049523)) + (i32.add (i32.const -824677833)) + (i32.add (i32.const 709102417)) + (i32.add (i32.const -26674001)) + (i32.add (i32.const -2133918421)) + (i32.add (i32.const -1581756431)) + (i32.add (i32.const -1147635257)) + (i32.add (i32.const -224207025)) + (i32.add (i32.const 1853656858)) + (i32.add (i32.const 839553191)) + (i32.add (i32.const 374059742)) + (i32.add (i32.const 1092457761)) + (i32.add (i32.const -205443098)) + (i32.add (i32.const 777083653)) + (i32.add (i32.const 1085925667)) + (i32.add (i32.const 328889168)) + (i32.add (i32.const 1428118288)) + (i32.add (i32.const -372358471)) + (i32.add (i32.const 620964519)) + (i32.add (i32.const -167545010)) + (i32.add (i32.const -1427295225)) + (i32.add (i32.const -1983422759)) + (i32.add (i32.const -1879206212)) + (i32.add (i32.const -902587832)) + (i32.add (i32.const 1895600619)) + (i32.add (i32.const -552947093)) + (i32.add (i32.const 2138660394)) + (i32.add (i32.const -1715819093)) + (i32.add (i32.const 1162074591)) + (i32.add (i32.const -238903220)) + (i32.add (i32.const -244132034)) + (i32.add (i32.const -1667639497)) + (i32.add (i32.const -539900673)) + (i32.add (i32.const 1014191199)) + (i32.add (i32.const -1131545757)) + (i32.add (i32.const -774415537)) + (i32.add (i32.const 1060834131)) + (i32.add (i32.const 1621620669)) + (i32.add (i32.const -1962972608)) + (i32.add (i32.const -1636548926)) + (i32.add (i32.const -1484203135)) + (i32.add (i32.const -562076223)) + (i32.add (i32.const 1964590651)) + (i32.add (i32.const 945916380)) + (i32.add (i32.const -1855825923)) + (i32.add (i32.const 42450714)) + (i32.add (i32.const 505623466)) + (i32.add (i32.const 629238288)) + (i32.add (i32.const 2116128631)) + (i32.add (i32.const 861019439)) + (i32.add (i32.const 979869502)) + (i32.add (i32.const 1852499154)) + (i32.add (i32.const -2104370671)) + (i32.add (i32.const 498552570)) + (i32.add (i32.const -1500422457)) + (i32.add (i32.const 1513085193)) + (i32.add (i32.const -1115733044)) + (i32.add (i32.const 2132051711)) + (i32.add (i32.const 962610740)) + (i32.add (i32.const 1774295145)) + (i32.add (i32.const -1676715884)) + (i32.add (i32.const -1088041075)) + (i32.add (i32.const -1749057536)) + (i32.add (i32.const 1574004025)) + (i32.add (i32.const -1223840303)) + (i32.add (i32.const 1824485573)) + (i32.add (i32.const -743922668)) + (i32.add (i32.const 767349067)) + (i32.add (i32.const 1896733163)) + (i32.add (i32.const 252949897)) + (i32.add (i32.const 61351628)) + (i32.add (i32.const 1877307582)) + (i32.add (i32.const 2025924113)) + (i32.add (i32.const -776251387)) + (i32.add (i32.const 1561579580)) + (i32.add (i32.const 1416863682)) + (i32.add (i32.const 1344967762)) + (i32.add (i32.const -1240997388)) + (i32.add (i32.const -1550193354)) + (i32.add (i32.const -1048056612)) + (i32.add (i32.const -652380298)) + (i32.add (i32.const 759517906)) + (i32.add (i32.const 864610848)) + (i32.add (i32.const -2114121863)) + (i32.add (i32.const -1949771552)) + (i32.add (i32.const 314145628)) + (i32.add (i32.const -1770508079)) + (i32.add (i32.const -1963753991)) + (i32.add (i32.const 1802089260)) + (i32.add (i32.const -159777167)) + (i32.add (i32.const -684655624)) + (i32.add (i32.const -2040582568)) + (i32.add (i32.const -2061354181)) + (i32.add (i32.const -1411052110)) + (i32.add (i32.const -99777246)) + (i32.add (i32.const 1404316627)) + (i32.add (i32.const -1495345208)) + (i32.add (i32.const 575252281)) + (i32.add (i32.const -1614947420)) + (i32.add (i32.const 1405701437)) + (i32.add (i32.const 246168689)) + (i32.add (i32.const -337725239)) + (i32.add (i32.const 1766683862)) + (i32.add (i32.const -648868390)) + (i32.add (i32.const 1804527289)) + (i32.add (i32.const 1705507693)) + (i32.add (i32.const 889312916)) + (i32.add (i32.const 695592719)) + (i32.add (i32.const 43035620)) + (i32.add (i32.const 1187755872)) + (i32.add (i32.const 53577796)) + (i32.add (i32.const -2115790362)) + (i32.add (i32.const -224648564)) + (i32.add (i32.const -95250419)) + (i32.add (i32.const -237772973)) + (i32.add (i32.const -49016204)) + (i32.add (i32.const -1036638996)) + (i32.add (i32.const -713419363)) + (i32.add (i32.const -1288932988)) + (i32.add (i32.const -951353909)) + (i32.add (i32.const 1378304342)) + (i32.add (i32.const 1620753045)) + (i32.add (i32.const -186153290)) + (i32.add (i32.const 1734014177)) + (i32.add (i32.const 739062378)) + (i32.add (i32.const 427063590)) + (i32.add (i32.const -1342872967)) + (i32.add (i32.const -1357237268)) + (i32.add (i32.const 749265955)) + (i32.add (i32.const -477800719)) + (i32.add (i32.const -2137918941)) + (i32.add (i32.const 760673081)) + (i32.add (i32.const -364575278)) + (i32.add (i32.const -426433065)) + (i32.add (i32.const -599204970)) + (i32.add (i32.const 455405880)) + (i32.add (i32.const 1221052736)) + (i32.add (i32.const 1489106882)) + (i32.add (i32.const -1519926429)) + (i32.add (i32.const 321290717)) + (i32.add (i32.const -745535456)) + (i32.add (i32.const 1638847449)) + (i32.add (i32.const -1820016377)) + (i32.add (i32.const 1668518955)) + (i32.add (i32.const -633306922)) + (i32.add (i32.const -82373890)) + (i32.add (i32.const 422143819)) + (i32.add (i32.const 1968733112)) + (i32.add (i32.const -588976528)) + (i32.add (i32.const 1058084242)) + (i32.add (i32.const 1631450144)) + (i32.add (i32.const -47291097)) + (i32.add (i32.const -480248856)) + (i32.add (i32.const 32884655)) + (i32.add (i32.const 432602721)) + (i32.add (i32.const -1989580472)) + (i32.add (i32.const 1323331098)) + (i32.add (i32.const 1588395651)) + (i32.add (i32.const -351144653)) + (i32.add (i32.const 367580224)) + (i32.add (i32.const -1443317324)) + (i32.add (i32.const 791810362)) + (i32.add (i32.const -723361669)) + (i32.add (i32.const -1515210110)) + (i32.add (i32.const 137249576)) + (i32.add (i32.const 1595713699)) + (i32.add (i32.const 1461390276)) + (i32.add (i32.const -2109714584)) + (i32.add (i32.const -441257301)) + (i32.add (i32.const -1754009647)) + (i32.add (i32.const -111162787)) + (i32.add (i32.const -1892917587)) + (i32.add (i32.const -1588503145)) + (i32.add (i32.const 246165419)) + (i32.add (i32.const 631869295)) + (i32.add (i32.const -896631386)) + (i32.add (i32.const 230095454)) + (i32.add (i32.const 1965821407)) + (i32.add (i32.const 1039729053)) + (i32.add (i32.const -651569172)) + (i32.add (i32.const 149558120)) + (i32.add (i32.const 1665975643)) + (i32.add (i32.const -1600285557)) + (i32.add (i32.const -1927166155)) + (i32.add (i32.const 181791078)) + (i32.add (i32.const 1910757515)) + (i32.add (i32.const 845991668)) + (i32.add (i32.const -1607348883)) + (i32.add (i32.const -921762979)) + (i32.add (i32.const 27208215)) + (i32.add (i32.const 391126632)) + (i32.add (i32.const -356275332)) + (i32.add (i32.const -510729663)) + (i32.add (i32.const 446658491)) + (i32.add (i32.const -824623305)) + (i32.add (i32.const 1998022898)) + (i32.add (i32.const 1967285423)) + (i32.add (i32.const -1600481251)) + (i32.add (i32.const 1743455934)) + (i32.add (i32.const 1732874199)) + (i32.add (i32.const -209978622)) + (i32.add (i32.const 1419181007)) + (i32.add (i32.const -2065921207)) + (i32.add (i32.const 100704810)) + (i32.add (i32.const -39112656)) + (i32.add (i32.const -985291421)) + (i32.add (i32.const 1676170982)) + (i32.add (i32.const -980464013)) + (i32.add (i32.const -1787358559)) + (i32.add (i32.const 739033369)) + (i32.add (i32.const 246377437)) + (i32.add (i32.const 1898643157)) + (i32.add (i32.const 741305992)) + (i32.add (i32.const -1374219157)) + (i32.add (i32.const 389330569)) + (i32.add (i32.const 794954547)) + (i32.add (i32.const 1130051582)) + (i32.add (i32.const -227395020)) + (i32.add (i32.const -611321825)) + (i32.add (i32.const 1957069301)) + (i32.add (i32.const -227644426)) + (i32.add (i32.const 1550794184)) + (i32.add (i32.const -1276155426)) + (i32.add (i32.const -2075962459)) + (i32.add (i32.const 241036019)) + (i32.add (i32.const 569767192)) + (i32.add (i32.const 1400733968)) + (i32.add (i32.const -806702184)) + (i32.add (i32.const -1956363363)) + (i32.add (i32.const 335696295)) + (i32.add (i32.const 97324834)) + (i32.add (i32.const -755979019)) + (i32.add (i32.const 1644312291)) + (i32.add (i32.const 475882515)) + (i32.add (i32.const 789696277)) + (i32.add (i32.const -1128661069)) + (i32.add (i32.const -2005587074)) + (i32.add (i32.const -1657453934)) + (i32.add (i32.const 625338344)) + (i32.add (i32.const -140714826)) + (i32.add (i32.const -545908827)) + (i32.add (i32.const -237819432)) + (i32.add (i32.const 823865293)) + (i32.add (i32.const 52016019)) + (i32.add (i32.const 396235811)) + (i32.add (i32.const 580335292)) + (i32.add (i32.const 1759056500)) + (i32.add (i32.const 914074040)) + (i32.add (i32.const 1037520288)) + (i32.add (i32.const 1206936719)) + (i32.add (i32.const 1838770833)) + (i32.add (i32.const -1438760325)) + (i32.add (i32.const 1589609031)) + (i32.add (i32.const 1496522134)) + (i32.add (i32.const 730456184)) + (i32.add (i32.const 1680477852)) + (i32.add (i32.const -1774618012)) + (i32.add (i32.const -1438522647)) + (i32.add (i32.const -1873654415)) + (i32.add (i32.const 662416068)) + (i32.add (i32.const 629844153)) + (i32.add (i32.const 220502117)) + (i32.add (i32.const 150387918)) + (i32.add (i32.const -1218769460)) + (i32.add (i32.const -381247602)) + (i32.add (i32.const 1093552798)) + (i32.add (i32.const -565091116)) + (i32.add (i32.const 1326310472)) + (i32.add (i32.const 2103222007)) + (i32.add (i32.const 1773079007)) + (i32.add (i32.const -112167096)) + (i32.add (i32.const -2120586244)) + (i32.add (i32.const 304075622)) + (i32.add (i32.const 610151931)) + (i32.add (i32.const 1097761179)) + (i32.add (i32.const 900315982)) + (i32.add (i32.const 1637272801)) + (i32.add (i32.const -2026828646)) + (i32.add (i32.const 1034115662)) + (i32.add (i32.const -742092446)) + (i32.add (i32.const -1477225936)) + (i32.add (i32.const -2073126441)) + (i32.add (i32.const 1190490548)) + (i32.add (i32.const -165213949)) + (i32.add (i32.const -1881947773)) + (i32.add (i32.const -1107457304)) + (i32.add (i32.const -1337923382)) + (i32.add (i32.const -1786286643)) + (i32.add (i32.const -1385746608)) + (i32.add (i32.const 1014758927)) + (i32.add (i32.const 1998350108)) + (i32.add (i32.const 826259315)) + (i32.add (i32.const 1175105801)) + (i32.add (i32.const -519599406)) + (i32.add (i32.const 560798328)) + (i32.add (i32.const 168159719)) + (i32.add (i32.const 1761673515)) + (i32.add (i32.const -1907989910)) + (i32.add (i32.const 2144428286)) + (i32.add (i32.const 605300222)) + (i32.add (i32.const 255307470)) + (i32.add (i32.const 826442022)) + (i32.add (i32.const -510849320)) + (i32.add (i32.const 194285672)) + (i32.add (i32.const -86440169)) + (i32.add (i32.const -1542184983)) + (i32.add (i32.const 1755538074)) + (i32.add (i32.const -2100608795)) + (i32.add (i32.const -286712272)) + (i32.add (i32.const -1614542658)) + (i32.add (i32.const -154301049)) + (i32.add (i32.const -1948364357)) + (i32.add (i32.const -657782589)) + (i32.add (i32.const 393503594)) + (i32.add (i32.const -1354499162)) + (i32.add (i32.const -447192604)) + (i32.add (i32.const -1172926804)) + (i32.add (i32.const 806306884)) + (i32.add (i32.const -195124991)) + (i32.add (i32.const 1565148635)) + (i32.add (i32.const -553656833)) + (i32.add (i32.const 728240398)) + (i32.add (i32.const -1505589545)) + (i32.add (i32.const -798585309)) + (i32.add (i32.const -1765298508)) + (i32.add (i32.const -2046545294)) + (i32.add (i32.const -1404475280)) + (i32.add (i32.const 600968410)) + (i32.add (i32.const 1776825617)) + (i32.add (i32.const -190121315)) + (i32.add (i32.const 184005007)) + (i32.add (i32.const 1248786490)) + (i32.add (i32.const -600856068)) + (i32.add (i32.const 669627421)) + (i32.add (i32.const -1778053247)) + (i32.add (i32.const 114284091)) + (i32.add (i32.const 805053801)) + (i32.add (i32.const -1998719564)) + (i32.add (i32.const -351068580)) + (i32.add (i32.const -115811994)) + (i32.add (i32.const -1088993199)) + (i32.add (i32.const -462589143)) + (i32.add (i32.const -1814324201)) + (i32.add (i32.const -799243780)) + (i32.add (i32.const 883555195)) + (i32.add (i32.const 1111441746)) + (i32.add (i32.const 212275744)) + (i32.add (i32.const -1295815738)) + (i32.add (i32.const -1655900256)) + (i32.add (i32.const -790094419)) + (i32.add (i32.const 1948629223)) + (i32.add (i32.const 1852601384)) + (i32.add (i32.const -1332078703)) + (i32.add (i32.const -1044988178)) + (i32.add (i32.const 583190445)) + (i32.add (i32.const -160813268)) + (i32.add (i32.const 206708361)) + (i32.add (i32.const -700654013)) + (i32.add (i32.const 1811380481)) + (i32.add (i32.const 1164096814)) + (i32.add (i32.const -963527802)) + (i32.add (i32.const -1297501780)) + (i32.add (i32.const -287820117)) + (i32.add (i32.const -1277064410)) + (i32.add (i32.const 952981502)) + (i32.add (i32.const 2135840373)) + (i32.add (i32.const -450229512)) + (i32.add (i32.const -1795075114)) + (i32.add (i32.const 111389137)) + (i32.add (i32.const 977284393)) + (i32.add (i32.const -1465825310)) + (i32.add (i32.const -1274074974)) + (i32.add (i32.const -1204633141)) + (i32.add (i32.const -1034229172)) + (i32.add (i32.const 1498074427)) + (i32.add (i32.const 7256931)) + (i32.add (i32.const -525812063)) + (i32.add (i32.const -96464712)) + (i32.add (i32.const 2054407988)) + (i32.add (i32.const 1574630807)) + (i32.add (i32.const 369988044)) + (i32.add (i32.const 1290408346)) + (i32.add (i32.const 469241)) + (i32.add (i32.const 573489072)) + (i32.add (i32.const 814842450)) + (i32.add (i32.const -33213750)) + (i32.add (i32.const -1641852311)) + (i32.add (i32.const -1285428293)) + (i32.add (i32.const -1478893511)) + (i32.add (i32.const -1630495385)) + (i32.add (i32.const 1127182561)) + (i32.add (i32.const 193022700)) + (i32.add (i32.const 1193943364)) + (i32.add (i32.const 565067460)) + (i32.add (i32.const 117688653)) + (i32.add (i32.const 1460828571)) + (i32.add (i32.const -1926169345)) + (i32.add (i32.const -1036151263)) + (i32.add (i32.const -1870209817)) + (i32.add (i32.const -522379658)) + (i32.add (i32.const -1436146500)) + (i32.add (i32.const 89175847)) + (i32.add (i32.const -875449169)) + (i32.add (i32.const -245319832)) + (i32.add (i32.const -2093798377)) + (i32.add (i32.const 1176834150)) + (i32.add (i32.const 737658364)) + (i32.add (i32.const -650170596)) + (i32.add (i32.const 425231883)) + (i32.add (i32.const -1056247980)) + (i32.add (i32.const -1656115158)) + (i32.add (i32.const 120047537)) + (i32.add (i32.const -577409897)) + (i32.add (i32.const 1727297390)) + (i32.add (i32.const -938888560)) + (i32.add (i32.const -767089884)) + (i32.add (i32.const 1693922060)) + (i32.add (i32.const -599284477)) + (i32.add (i32.const 2120581762)) + (i32.add (i32.const -907945251)) + (i32.add (i32.const -1773478461)) + (i32.add (i32.const 633909514)) + (i32.add (i32.const -1835792369)) + (i32.add (i32.const 164952007)) + (i32.add (i32.const -1823522914)) + (i32.add (i32.const 369275781)) + (i32.add (i32.const -1084654426)) + (i32.add (i32.const -1801387454)) + (i32.add (i32.const -2087835597)) + (i32.add (i32.const -761992081)) + (i32.add (i32.const 1144066821)) + (i32.add (i32.const 1024744186)) + (i32.add (i32.const -1512807891)) + (i32.add (i32.const 748771407)) + (i32.add (i32.const -1089951169)) + (i32.add (i32.const -817759338)) + (i32.add (i32.const 185193880)) + (i32.add (i32.const -1364674988)) + (i32.add (i32.const -1474618640)) + (i32.add (i32.const 826285710)) + (i32.add (i32.const 1387091259)) + (i32.add (i32.const 197075702)) + (i32.add (i32.const -1788380956)) + (i32.add (i32.const -457052625)) + (i32.add (i32.const 890958396)) + (i32.add (i32.const 476590257)) + (i32.add (i32.const -153242935)) + (i32.add (i32.const 268107900)) + (i32.add (i32.const 1511723185)) + (i32.add (i32.const 477762722)) + (i32.add (i32.const 1800877969)) + (i32.add (i32.const -1273385459)) + (i32.add (i32.const 687288610)) + (i32.add (i32.const 754820770)) + (i32.add (i32.const 1687605944)) + (i32.add (i32.const -594701268)) + (i32.add (i32.const -1015535454)) + (i32.add (i32.const -1205276898)) + (i32.add (i32.const -1626518272)) + (i32.add (i32.const 640216577)) + (i32.add (i32.const -1758918051)) + (i32.add (i32.const -2047403481)) + (i32.add (i32.const 1933490492)) + (i32.add (i32.const 2055594866)) + (i32.add (i32.const -1534754244)) + (i32.add (i32.const -1415433895)) + (i32.add (i32.const -2069805834)) + (i32.add (i32.const -322665651)) + (i32.add (i32.const -522021091)) + (i32.add (i32.const 1057241808)) + (i32.add (i32.const -344461975)) + (i32.add (i32.const 1696527357)) + (i32.add (i32.const -20244115)) + (i32.add (i32.const -1483071354)) + (i32.add (i32.const -1758165149)) + (i32.add (i32.const -1439528332)) + (i32.add (i32.const -804054317)) + (i32.add (i32.const 1476809803)) + (i32.add (i32.const -782560095)) + (i32.add (i32.const -1262907578)) + (i32.add (i32.const -133566535)) + (i32.add (i32.const 966522355)) + (i32.add (i32.const -1825108077)) + (i32.add (i32.const -2051796318)) + (i32.add (i32.const 2007683003)) + (i32.add (i32.const 2067032042)) + (i32.add (i32.const -803168719)) + (i32.add (i32.const -157275183)) + (i32.add (i32.const -470525137)) + (i32.add (i32.const 1546401197)) + (i32.add (i32.const 518498841)) + (i32.add (i32.const 1269420504)) + (i32.add (i32.const 975834854)) + (i32.add (i32.const 1608302747)) + (i32.add (i32.const -938908077)) + (i32.add (i32.const 1068638044)) + (i32.add (i32.const 98872440)) + (i32.add (i32.const -1378130067)) + (i32.add (i32.const 285770460)) + (i32.add (i32.const 2101907803)) + (i32.add (i32.const -1489721621)) + (i32.add (i32.const 847027466)) + (i32.add (i32.const -1783993459)) + (i32.add (i32.const -756913923)) + (i32.add (i32.const 639041617)) + (i32.add (i32.const 1536988308)) + (i32.add (i32.const 1627749114)) + (i32.add (i32.const 881528143)) + (i32.add (i32.const -1886775461)) + (i32.add (i32.const 1409886112)) + (i32.add (i32.const -2019307946)) + (i32.add (i32.const 106251973)) + (i32.add (i32.const 1259230401)) + (i32.add (i32.const -1694354341)) + (i32.add (i32.const -1310242727)) + (i32.add (i32.const 1578170653)) + (i32.add (i32.const -1627281697)) + (i32.add (i32.const -1834692671)) + (i32.add (i32.const -298601511)) + (i32.add (i32.const 912487975)) + (i32.add (i32.const -373118195)) + (i32.add (i32.const -1635015232)) + (i32.add (i32.const -542673544)) + (i32.add (i32.const -1298464289)) + (i32.add (i32.const 2019573595)) + (i32.add (i32.const -828200628)) + (i32.add (i32.const 524441639)) + (i32.add (i32.const -235241876)) + (i32.add (i32.const 1739343357)) + (i32.add (i32.const 283546115)) + (i32.add (i32.const -592305083)) + (i32.add (i32.const -982887389)) + (i32.add (i32.const -2125053815)) + (i32.add (i32.const -88587250)) + (i32.add (i32.const -2114331949)) + (i32.add (i32.const -1258665949)) + (i32.add (i32.const 171075585)) + (i32.add (i32.const -1069787391)) + (i32.add (i32.const 1552738090)) + (i32.add (i32.const -309485404)) + (i32.add (i32.const -2023902493)) + (i32.add (i32.const -1332621549)) + (i32.add (i32.const -1632036413)) + (i32.add (i32.const -509251212)) + (i32.add (i32.const -714736838)) + (i32.add (i32.const -420977561)) + (i32.add (i32.const -1919182599)) + (i32.add (i32.const -121185954)) + (i32.add (i32.const -913553552)) + (i32.add (i32.const 843170473)) + (i32.add (i32.const -1832468149)) + (i32.add (i32.const -2147017484)) + (i32.add (i32.const -1488698775)) + (i32.add (i32.const 902227965)) + (i32.add (i32.const -2064881096)) + (i32.add (i32.const 1979518115)) + (i32.add (i32.const 663525919)) + (i32.add (i32.const 724615812)) + (i32.add (i32.const -1468034192)) + (i32.add (i32.const 472798435)) + (i32.add (i32.const 1285135442)) + (i32.add (i32.const -89793343)) + (i32.add (i32.const 44896148)) + (i32.add (i32.const -962016402)) + (i32.add (i32.const -802771091)) + (i32.add (i32.const -1781696323)) + (i32.add (i32.const 2112023099)) + (i32.add (i32.const -1000533546)) + (i32.add (i32.const -509908230)) + (i32.add (i32.const -466787285)) + (i32.add (i32.const 1857656915)) + (i32.add (i32.const 1329896512)) + (i32.add (i32.const 633655761)) + (i32.add (i32.const 1967666138)) + (i32.add (i32.const 1053545986)) + (i32.add (i32.const -1852426243)) + (i32.add (i32.const 1295552527)) + (i32.add (i32.const -2121728671)) + (i32.add (i32.const 1807753538)) + (i32.add (i32.const -130723166)) + (i32.add (i32.const 2056494413)) + (i32.add (i32.const -261663068)) + (i32.add (i32.const -434522490)) + (i32.add (i32.const 1608408763)) + (i32.add (i32.const -1680324997)) + (i32.add (i32.const -149614143)) + (i32.add (i32.const -54902290)) + (i32.add (i32.const -42812916)) + (i32.add (i32.const 1554660050)) + (i32.add (i32.const 1366814185)) + (i32.add (i32.const -166646280)) + (i32.add (i32.const 1666629974)) + (i32.add (i32.const 242269068)) + (i32.add (i32.const -1173168697)) + (i32.add (i32.const -667928556)) + (i32.add (i32.const -433891242)) + (i32.add (i32.const -947690696)) + (i32.add (i32.const 2002085545)) + (i32.add (i32.const 2017520068)) + (i32.add (i32.const 1586757346)) + (i32.add (i32.const 150234083)) + (i32.add (i32.const -932975302)) + (i32.add (i32.const -1310682298)) + (i32.add (i32.const -164773562)) + (i32.add (i32.const -1640196281)) + (i32.add (i32.const 1843225911)) + (i32.add (i32.const -1720760448)) + (i32.add (i32.const -1293094007)) + (i32.add (i32.const 1753268617)) + (i32.add (i32.const -394395886)) + (i32.add (i32.const 524341154)) + (i32.add (i32.const -811476990)) + (i32.add (i32.const 1760265215)) + (i32.add (i32.const -1275679280)) + (i32.add (i32.const 1432388236)) + (i32.add (i32.const -1978244949)) + (i32.add (i32.const -939658695)) + (i32.add (i32.const -1262192210)) + (i32.add (i32.const 1025903954)) + (i32.add (i32.const -525868717)) + (i32.add (i32.const -853711455)) + (i32.add (i32.const 1760062722)) + (i32.add (i32.const -385791741)) + (i32.add (i32.const 379644803)) + (i32.add (i32.const -230892591)) + (i32.add (i32.const -269043682)) + (i32.add (i32.const 435336670)) + (i32.add (i32.const -1496182560)) + (i32.add (i32.const -1669870853)) + (i32.add (i32.const -161378694)) + (i32.add (i32.const 1070401412)) + (i32.add (i32.const -1901214554)) + (i32.add (i32.const 543330130)) + (i32.add (i32.const -1298371111)) + (i32.add (i32.const 635361484)) + (i32.add (i32.const -864096609)) + (i32.add (i32.const -1180247804)) + (i32.add (i32.const -1815819523)) + (i32.add (i32.const 949225938)) + (i32.add (i32.const 93195399)) + (i32.add (i32.const -1355174717)) + (i32.add (i32.const 1310027901)) + (i32.add (i32.const -1973598273)) + (i32.add (i32.const -1563174360)) + (i32.add (i32.const 1844087805)) + (i32.add (i32.const -341232019)) + (i32.add (i32.const -955146253)) + (i32.add (i32.const -1814357459)) + (i32.add (i32.const 1141011725)) + (i32.add (i32.const -5596055)) + (i32.add (i32.const -1546735838)) + (i32.add (i32.const 1455995568)) + (i32.add (i32.const 968841317)) + (i32.add (i32.const -655124646)) + (i32.add (i32.const -574598519)) + (i32.add (i32.const -845947466)) + (i32.add (i32.const 1485748729)) + (i32.add (i32.const 507068774)) + (i32.add (i32.const 132131646)) + (i32.add (i32.const -1932722004)) + (i32.add (i32.const 1558232675)) + (i32.add (i32.const -592231938)) + (i32.add (i32.const 1590379239)) + (i32.add (i32.const 1138165641)) + (i32.add (i32.const 201840017)) + (i32.add (i32.const -781834923)) + (i32.add (i32.const 321215281)) + (i32.add (i32.const -580828465)) + (i32.add (i32.const 1199900453)) + (i32.add (i32.const -692635017)) + (i32.add (i32.const -1246395915)) + (i32.add (i32.const -2116734557)) + (i32.add (i32.const 905912928)) + (i32.add (i32.const -569221507)) + (i32.add (i32.const -1812816302)) + (i32.add (i32.const 1127748489)) + (i32.add (i32.const -134764537)) + (i32.add (i32.const -1079464556)) + (i32.add (i32.const 473793717)) + (i32.add (i32.const 1575991549)) + (i32.add (i32.const -166077252)) + (i32.add (i32.const 1822760084)) + (i32.add (i32.const -713270434)) + (i32.add (i32.const -458349325)) + (i32.add (i32.const 1042294337)) + (i32.add (i32.const -978654537)) + (i32.add (i32.const 956372251)) + (i32.add (i32.const -1935372761)) + (i32.add (i32.const -1865993582)) + (i32.add (i32.const -454613673)) + (i32.add (i32.const -1227264913)) + (i32.add (i32.const -817276846)) + (i32.add (i32.const 1278732924)) + (i32.add (i32.const -788163910)) + (i32.add (i32.const -1391683256)) + (i32.add (i32.const -364432919)) + (i32.add (i32.const -806066013)) + (i32.add (i32.const 1989786792)) + (i32.add (i32.const -2011531985)) + (i32.add (i32.const -779678971)) + (i32.add (i32.const 373951193)) + (i32.add (i32.const 675023408)) + (i32.add (i32.const 554262289)) + (i32.add (i32.const -1124666645)) + (i32.add (i32.const -252733399)) + (i32.add (i32.const -1652871587)) + (i32.add (i32.const -1958264503)) + (i32.add (i32.const 1084099789)) + (i32.add (i32.const 353443337)) + (i32.add (i32.const -144390063)) + (i32.add (i32.const -601343611)) + (i32.add (i32.const 1984651757)) + (i32.add (i32.const 421973730)) + (i32.add (i32.const 859713524)) + (i32.add (i32.const 1395194845)) + (i32.add (i32.const 1883628544)) + (i32.add (i32.const 918426443)) + (i32.add (i32.const -816857172)) + (i32.add (i32.const -311852056)) + (i32.add (i32.const -619058437)) + (i32.add (i32.const 1174666072)) + (i32.add (i32.const -1866486482)) + (i32.add (i32.const -1085835508)) + (i32.add (i32.const 1158567329)) + (i32.add (i32.const 1152122715)) + (i32.add (i32.const 1980980469)) + (i32.add (i32.const 1224704124)) + (i32.add (i32.const 30598099)) + (i32.add (i32.const 1680946577)) + (i32.add (i32.const 1662262692)) + (i32.add (i32.const 1062692708)) + (i32.add (i32.const 1247579331)) + (i32.add (i32.const 2021050577)) + (i32.add (i32.const -1660604249)) + (i32.add (i32.const -1593228948)) + (i32.add (i32.const 1786584033)) + (i32.add (i32.const -809238149)) + (i32.add (i32.const 1723389329)) + (i32.add (i32.const 1051104420)) + (i32.add (i32.const 1361185979)) + (i32.add (i32.const 247278046)) + (i32.add (i32.const -1434637836)) + (i32.add (i32.const -947565675)) + (i32.add (i32.const 2131611579)) + (i32.add (i32.const -1136444452)) + (i32.add (i32.const -1932235860)) + (i32.add (i32.const -824246771)) + (i32.add (i32.const -1937101994)) + (i32.add (i32.const 731696928)) + (i32.add (i32.const 1737867845)) + (i32.add (i32.const 197462588)) + (i32.add (i32.const -1649019954)) + (i32.add (i32.const 1142137040)) + (i32.add (i32.const -885531484)) + (i32.add (i32.const -1622835511)) + (i32.add (i32.const -513504997)) + (i32.add (i32.const 458422031)) + (i32.add (i32.const -236047723)) + (i32.add (i32.const -796527761)) + (i32.add (i32.const 129211921)) + (i32.add (i32.const -2116035388)) + (i32.add (i32.const -515060276)) + (i32.add (i32.const 251919271)) + (i32.add (i32.const 1364743950)) + (i32.add (i32.const 1334062595)) + (i32.add (i32.const -1664054181)) + (i32.add (i32.const 1072760557)) + (i32.add (i32.const 2141488085)) + (i32.add (i32.const 154407226)) + (i32.add (i32.const -736725653)) + (i32.add (i32.const 536833207)) + (i32.add (i32.const -1267316890)) + (i32.add (i32.const 1093506602)) + (i32.add (i32.const -926531567)) + (i32.add (i32.const 654759407)) + (i32.add (i32.const 1584255486)) + (i32.add (i32.const 278448889)) + (i32.add (i32.const 439935206)) + (i32.add (i32.const -1473185014)) + (i32.add (i32.const 1295313947)) + (i32.add (i32.const 795498698)) + (i32.add (i32.const -680652097)) + (i32.add (i32.const 101026688)) + (i32.add (i32.const 1939703321)) + (i32.add (i32.const -1297650029)) + (i32.add (i32.const 1806683901)) + (i32.add (i32.const -874766885)) + (i32.add (i32.const -1281524703)) + (i32.add (i32.const 135100725)) + (i32.add (i32.const 1578182797)) + (i32.add (i32.const 1796926312)) + (i32.add (i32.const -281091124)) + (i32.add (i32.const 1850217784)) + (i32.add (i32.const -74672528)) + (i32.add (i32.const 542115964)) + (i32.add (i32.const -162872131)) + (i32.add (i32.const 376286252)) + (i32.add (i32.const 1003629889)) + (i32.add (i32.const 1848614451)) + (i32.add (i32.const 63837038)) + (i32.add (i32.const -324984614)) + (i32.add (i32.const -877988630)) + (i32.add (i32.const 441637120)) + (i32.add (i32.const 220454867)) + (i32.add (i32.const -213543180)) + (i32.add (i32.const -889432178)) + (i32.add (i32.const -128886948)) + (i32.add (i32.const -1478281254)) + (i32.add (i32.const 1649809867)) + (i32.add (i32.const 1093131426)) + (i32.add (i32.const -2024292510)) + (i32.add (i32.const -778083948)) + (i32.add (i32.const 1166950680)) + (i32.add (i32.const 672065073)) + (i32.add (i32.const -37439100)) + (i32.add (i32.const 509646021)) + (i32.add (i32.const 1538158907)) + (i32.add (i32.const -772174966)) + (i32.add (i32.const 183218875)) + (i32.add (i32.const 1737614649)) + (i32.add (i32.const -1761407547)) + (i32.add (i32.const -1995054968)) + (i32.add (i32.const -31947118)) + (i32.add (i32.const 750942345)) + (i32.add (i32.const 195854533)) + (i32.add (i32.const 897520012)) + (i32.add (i32.const -1008748084)) + (i32.add (i32.const -1774305666)) + (i32.add (i32.const 752817822)) + (i32.add (i32.const 1153357841)) + (i32.add (i32.const 901423044)) + (i32.add (i32.const 736870531)) + (i32.add (i32.const -1907608830)) + (i32.add (i32.const 311081054)) + (i32.add (i32.const -890436792)) + (i32.add (i32.const -1483555769)) + (i32.add (i32.const 151493789)) + (i32.add (i32.const 532624342)) + (i32.add (i32.const -1248891960)) + (i32.add (i32.const -1413290381)) + (i32.add (i32.const -349937508)) + (i32.add (i32.const 559252209)) + (i32.add (i32.const 749812105)) + (i32.add (i32.const 1838229630)) + (i32.add (i32.const 450992840)) + (i32.add (i32.const -388920494)) + (i32.add (i32.const 1172986337)) + (i32.add (i32.const 1292797230)) + (i32.add (i32.const 315125650)) + (i32.add (i32.const -326651143)) + (i32.add (i32.const 53087841)) + (i32.add (i32.const -1505788039)) + (i32.add (i32.const -979953439)) + (i32.add (i32.const -1954264027)) + (i32.add (i32.const 806594027)) + (i32.add (i32.const 98123154)) + (i32.add (i32.const 1798188935)) + (i32.add (i32.const 679936746)) + (i32.add (i32.const 1969459008)) + (i32.add (i32.const -1704827272)) + (i32.add (i32.const -625841754)) + (i32.add (i32.const -1687149926)) + (i32.add (i32.const 21757336)) + (i32.add (i32.const 47636441)) + (i32.add (i32.const -741142900)) + (i32.add (i32.const 2048016719)) + (i32.add (i32.const 1196225550)) + (i32.add (i32.const 1530904952)) + (i32.add (i32.const -1591836460)) + (i32.add (i32.const -1962003268)) + (i32.add (i32.const 225914529)) + (i32.add (i32.const 746015404)) + (i32.add (i32.const -116451631)) + (i32.add (i32.const 1006550500)) + (i32.add (i32.const -790298323)) + (i32.add (i32.const 456302059)) + (i32.add (i32.const -1049206728)) + (i32.add (i32.const -545151236)) + (i32.add (i32.const 338311520)) + (i32.add (i32.const -1964564921)) + (i32.add (i32.const 318889598)) + (i32.add (i32.const -1487142535)) + (i32.add (i32.const -1615117820)) + (i32.add (i32.const -613378058)) + (i32.add (i32.const 1710468722)) + (i32.add (i32.const 1236754045)) + (i32.add (i32.const 670294833)) + (i32.add (i32.const -1526273542)) + (i32.add (i32.const -125813131)) + (i32.add (i32.const -1170395575)) + (i32.add (i32.const 2081678897)) + (i32.add (i32.const -701115931)) + (i32.add (i32.const 1470556244)) + (i32.add (i32.const 545489283)) + (i32.add (i32.const -1187136458)) + (i32.add (i32.const -16168794)) + (i32.add (i32.const 1697719308)) + (i32.add (i32.const 1876364020)) + (i32.add (i32.const -1372525341)) + (i32.add (i32.const 1096787540)) + (i32.add (i32.const -1944994129)) + (i32.add (i32.const 1295361985)) + (i32.add (i32.const -247735471)) + (i32.add (i32.const 1779993320)) + (i32.add (i32.const -938661916)) + (i32.add (i32.const 1200786349)) + (i32.add (i32.const -1288200971)) + (i32.add (i32.const 286047947)) + (i32.add (i32.const 168924360)) + (i32.add (i32.const -1152665300)) + (i32.add (i32.const -1384862055)) + (i32.add (i32.const -2121512438)) + (i32.add (i32.const -1045023884)) + (i32.add (i32.const -290843873)) + (i32.add (i32.const 1763601347)) + (i32.add (i32.const 985606096)) + (i32.add (i32.const -1239026317)) + (i32.add (i32.const 92266314)) + (i32.add (i32.const -1267621593)) + (i32.add (i32.const 184455683)) + (i32.add (i32.const 423217291)) + (i32.add (i32.const -1898628814)) + (i32.add (i32.const 1805716331)) + (i32.add (i32.const -1515088439)) + (i32.add (i32.const -1718356262)) + (i32.add (i32.const -1402543469)) + (i32.add (i32.const 99777255)) + (i32.add (i32.const 787197847)) + (i32.add (i32.const -1152812934)) + (i32.add (i32.const 2066076122)) + (i32.add (i32.const -1952640331)) + (i32.add (i32.const -518233136)) + (i32.add (i32.const 655945749)) + (i32.add (i32.const -680892515)) + (i32.add (i32.const 17517326)) + (i32.add (i32.const 1352760274)) + (i32.add (i32.const -2120046853)) + (i32.add (i32.const -721491565)) + (i32.add (i32.const -1727368507)) + (i32.add (i32.const 334812597)) + (i32.add (i32.const 1033370358)) + (i32.add (i32.const 1034697614)) + (i32.add (i32.const 1149118097)) + (i32.add (i32.const -653670037)) + (i32.add (i32.const 44274947)) + (i32.add (i32.const -149058469)) + (i32.add (i32.const -385602895)) + (i32.add (i32.const 250165411)) + (i32.add (i32.const -1232101564)) + (i32.add (i32.const -1952476669)) + (i32.add (i32.const -231520424)) + (i32.add (i32.const 1974235835)) + (i32.add (i32.const 1865637159)) + (i32.add (i32.const -1104745712)) + (i32.add (i32.const 1641936634)) + (i32.add (i32.const 1787230853)) + (i32.add (i32.const 1454172454)) + (i32.add (i32.const 982659962)) + (i32.add (i32.const -1486164328)) + (i32.add (i32.const 863663201)) + (i32.add (i32.const 673631231)) + (i32.add (i32.const -558201095)) + (i32.add (i32.const 208150445)) + (i32.add (i32.const -1761560013)) + (i32.add (i32.const -53180334)) + (i32.add (i32.const -1387989197)) + (i32.add (i32.const -1779644016)) + (i32.add (i32.const -963443090)) + (i32.add (i32.const 1602976433)) + (i32.add (i32.const 2033896023)) + (i32.add (i32.const 980578165)) + (i32.add (i32.const 197092020)) + (i32.add (i32.const 1945136067)) + (i32.add (i32.const 1470413858)) + (i32.add (i32.const 514311381)) + (i32.add (i32.const -719055064)) + (i32.add (i32.const -2129023653)) + (i32.add (i32.const -1282882115)) + (i32.add (i32.const -1188908713)) + (i32.add (i32.const -1688060994)) + (i32.add (i32.const 1729977299)) + (i32.add (i32.const 74269062)) + (i32.add (i32.const -2041043364)) + (i32.add (i32.const -1078489484)) + (i32.add (i32.const 1633521762)) + (i32.add (i32.const 432582013)) + (i32.add (i32.const -846031215)) + (i32.add (i32.const -546415278)) + (i32.add (i32.const 1613014046)) + (i32.add (i32.const 1673850550)) + (i32.add (i32.const 2038345249)) + (i32.add (i32.const 1200281442)) + (i32.add (i32.const -1228543055)) + (i32.add (i32.const 1929402160)) + (i32.add (i32.const 2109234413)) + (i32.add (i32.const -1289003268)) + (i32.add (i32.const 1542077546)) + (i32.add (i32.const -1520477706)) + (i32.add (i32.const -1029067131)) + (i32.add (i32.const 1367724208)) + (i32.add (i32.const 1948315576)) + (i32.add (i32.const -1974562544)) + (i32.add (i32.const -193708563)) + (i32.add (i32.const 965461576)) + (i32.add (i32.const 1009222998)) + (i32.add (i32.const -757387496)) + (i32.add (i32.const 1913767894)) + (i32.add (i32.const -149989561)) + (i32.add (i32.const 1439014852)) + (i32.add (i32.const 382017118)) + (i32.add (i32.const 1640521711)) + (i32.add (i32.const 984948191)) + (i32.add (i32.const -1358923064)) + (i32.add (i32.const 1686438323)) + (i32.add (i32.const 1664846172)) + (i32.add (i32.const -653153183)) + (i32.add (i32.const 207851411)) + (i32.add (i32.const 67461786)) + (i32.add (i32.const -1038363444)) + (i32.add (i32.const 296549892)) + (i32.add (i32.const 1464913076)) + (i32.add (i32.const 1573479221)) + (i32.add (i32.const -118132117)) + (i32.add (i32.const 1287803509)) + (i32.add (i32.const 1351171390)) + (i32.add (i32.const -58639099)) + (i32.add (i32.const 1054642839)) + (i32.add (i32.const -105864305)) + (i32.add (i32.const -1816551992)) + (i32.add (i32.const 2098650548)) + (i32.add (i32.const -270289869)) + (i32.add (i32.const -2105457983)) + (i32.add (i32.const 1910139802)) + (i32.add (i32.const -1477230645)) + (i32.add (i32.const 343471896)) + (i32.add (i32.const 871729632)) + (i32.add (i32.const -631368894)) + (i32.add (i32.const 1481648922)) + (i32.add (i32.const -1758697349)) + (i32.add (i32.const -781014878)) + (i32.add (i32.const -47950811)) + (i32.add (i32.const -1715844934)) + (i32.add (i32.const 1494699719)) + (i32.add (i32.const 571322541)) + (i32.add (i32.const -915900333)) + (i32.add (i32.const -440169389)) + (i32.add (i32.const 1377613361)) + (i32.add (i32.const -283774450)) + (i32.add (i32.const 990285070)) + (i32.add (i32.const 460223960)) + (i32.add (i32.const -1381101406)) + (i32.add (i32.const -1912677579)) + (i32.add (i32.const -651820632)) + (i32.add (i32.const -961474662)) + (i32.add (i32.const 197501104)) + (i32.add (i32.const -111613451)) + (i32.add (i32.const -1747119602)) + (i32.add (i32.const -430533175)) + (i32.add (i32.const -425136674)) + (i32.add (i32.const 1139962514)) + (i32.add (i32.const -2022191102)) + (i32.add (i32.const 1795673283)) + (i32.add (i32.const -2106273265)) + (i32.add (i32.const -63382454)) + (i32.add (i32.const 2011335508)) + (i32.add (i32.const -238063381)) + (i32.add (i32.const 1651476021)) + (i32.add (i32.const 75473345)) + (i32.add (i32.const -1221845615)) + (i32.add (i32.const 908387734)) + (i32.add (i32.const -351979877)) + (i32.add (i32.const -275609296)) + (i32.add (i32.const -532107271)) + (i32.add (i32.const -1529349080)) + (i32.add (i32.const -1205117172)) + (i32.add (i32.const -1503107875)) + (i32.add (i32.const -708274652)) + (i32.add (i32.const 868820752)) + (i32.add (i32.const 587056187)) + (i32.add (i32.const -616734018)) + (i32.add (i32.const 1721113028)) + (i32.add (i32.const 2065155422)) + (i32.add (i32.const -107726406)) + (i32.add (i32.const 968350706)) + (i32.add (i32.const 1971397102)) + (i32.add (i32.const -1829782688)) + (i32.add (i32.const -322524360)) + (i32.add (i32.const 1775373744)) + (i32.add (i32.const -478941882)) + (i32.add (i32.const -1004208287)) + (i32.add (i32.const -415686810)) + (i32.add (i32.const -298620031)) + (i32.add (i32.const -894917592)) + (i32.add (i32.const 353493195)) + (i32.add (i32.const 165394360)) + (i32.add (i32.const -487537664)) + (i32.add (i32.const 1744667641)) + (i32.add (i32.const 1642192823)) + (i32.add (i32.const 1601091912)) + (i32.add (i32.const -1170412320)) + (i32.add (i32.const -1506138294)) + (i32.add (i32.const -2051618405)) + (i32.add (i32.const -306601782)) + (i32.add (i32.const -180506564)) + (i32.add (i32.const 2000636701)) + (i32.add (i32.const 1231702862)) + (i32.add (i32.const 170843889)) + (i32.add (i32.const -1421988349)) + (i32.add (i32.const -98916806)) + (i32.add (i32.const -180435548)) + (i32.add (i32.const 1828212903)) + (i32.add (i32.const 1411999540)) + (i32.add (i32.const -1383187106)) + (i32.add (i32.const -1941633288)) + (i32.add (i32.const -1188512774)) + (i32.add (i32.const -1527189523)) + (i32.add (i32.const 329556938)) + (i32.add (i32.const 1762864189)) + (i32.add (i32.const 1070790085)) + (i32.add (i32.const 1129122048)) + (i32.add (i32.const -1198208378)) + (i32.add (i32.const 1781421786)) + (i32.add (i32.const 216694501)) + (i32.add (i32.const 955682427)) + (i32.add (i32.const -1718121974)) + (i32.add (i32.const 1057668827)) + (i32.add (i32.const -1727485197)) + (i32.add (i32.const -874209654)) + (i32.add (i32.const 1662121719)) + (i32.add (i32.const -606452250)) + (i32.add (i32.const 87934284)) + (i32.add (i32.const 692983707)) + (i32.add (i32.const -664688526)) + (i32.add (i32.const -186192400)) + (i32.add (i32.const -581984446)) + (i32.add (i32.const 784552441)) + (i32.add (i32.const 1360776258)) + (i32.add (i32.const -685200478)) + (i32.add (i32.const 1523835808)) + (i32.add (i32.const 1404472865)) + (i32.add (i32.const -707982316)) + (i32.add (i32.const -2107930000)) + (i32.add (i32.const 144803117)) + (i32.add (i32.const -2010931887)) + (i32.add (i32.const -1211313643)) + (i32.add (i32.const -2023787044)) + (i32.add (i32.const 371719223)) + (i32.add (i32.const -1151498860)) + (i32.add (i32.const -1512407092)) + (i32.add (i32.const -552386085)) + (i32.add (i32.const 1611745503)) + (i32.add (i32.const -112329078)) + (i32.add (i32.const 2033104818)) + (i32.add (i32.const -641992956)) + (i32.add (i32.const 166951019)) + (i32.add (i32.const 974119115)) + (i32.add (i32.const -268157011)) + (i32.add (i32.const -598378520)) + (i32.add (i32.const 99209877)) + (i32.add (i32.const 41092497)) + (i32.add (i32.const 1573103350)) + (i32.add (i32.const -1386436216)) + (i32.add (i32.const 1146796709)) + (i32.add (i32.const -2133319116)) + (i32.add (i32.const 1531416881)) + (i32.add (i32.const -2147047381)) + (i32.add (i32.const 930147996)) + (i32.add (i32.const 235440551)) + (i32.add (i32.const 2125343092)) + (i32.add (i32.const 257748301)) + (i32.add (i32.const -492178086)) + (i32.add (i32.const -1194293491)) + (i32.add (i32.const -1784575822)) + (i32.add (i32.const -1008980734)) + (i32.add (i32.const -868363160)) + (i32.add (i32.const 1670505912)) + (i32.add (i32.const 941957786)) + (i32.add (i32.const 1613960657)) + (i32.add (i32.const 1099564954)) + (i32.add (i32.const -923324299)) + (i32.add (i32.const 1180529258)) + (i32.add (i32.const 1048623829)) + (i32.add (i32.const 222846473)) + (i32.add (i32.const 1849305674)) + (i32.add (i32.const 1153943889)) + (i32.add (i32.const -1163696140)) + (i32.add (i32.const 287912460)) + (i32.add (i32.const -2069486556)) + (i32.add (i32.const 207416649)) + (i32.add (i32.const -1308291456)) + (i32.add (i32.const 298360009)) + (i32.add (i32.const 722924079)) + (i32.add (i32.const 291639089)) + (i32.add (i32.const -865162284)) + (i32.add (i32.const -1399204574)) + (i32.add (i32.const -381722864)) + (i32.add (i32.const -1636988558)) + (i32.add (i32.const -859628483)) + (i32.add (i32.const -65628854)) + (i32.add (i32.const 1749869103)) + (i32.add (i32.const -1560520122)) + (i32.add (i32.const -1109178826)) + (i32.add (i32.const -906834314)) + (i32.add (i32.const -550367807)) + (i32.add (i32.const -795761168)) + (i32.add (i32.const 994707139)) + (i32.add (i32.const 1046882461)) + (i32.add (i32.const -1944302182)) + (i32.add (i32.const 785426589)) + (i32.add (i32.const 251182164)) + (i32.add (i32.const 1088244845)) + (i32.add (i32.const 200207150)) + (i32.add (i32.const -206328145)) + (i32.add (i32.const -712503764)) + (i32.add (i32.const -42203131)) + (i32.add (i32.const -1799795135)) + (i32.add (i32.const 66813297)) + (i32.add (i32.const 111697670)) + (i32.add (i32.const 706196691)) + (i32.add (i32.const -1684251106)) + (i32.add (i32.const -1706290973)) + (i32.add (i32.const 127339136)) + (i32.add (i32.const 79341104)) + (i32.add (i32.const -396114347)) + (i32.add (i32.const 737811396)) + (i32.add (i32.const 1392059226)) + (i32.add (i32.const -473087134)) + (i32.add (i32.const 1964994730)) + (i32.add (i32.const 639758149)) + (i32.add (i32.const 1455688490)) + (i32.add (i32.const -75778566)) + (i32.add (i32.const -620343242)) + (i32.add (i32.const 493703081)) + (i32.add (i32.const 1336520732)) + (i32.add (i32.const -318161548)) + (i32.add (i32.const 255219297)) + (i32.add (i32.const -986222933)) + (i32.add (i32.const 810260778)) + (i32.add (i32.const 386203657)) + (i32.add (i32.const 127354431)) + (i32.add (i32.const -1845922841)) + (i32.add (i32.const -1694033017)) + (i32.add (i32.const 58703300)) + (i32.add (i32.const 1966592496)) + (i32.add (i32.const -1621106351)) + (i32.add (i32.const 511568900)) + (i32.add (i32.const -585827746)) + (i32.add (i32.const -919605084)) + (i32.add (i32.const -2090237776)) + (i32.add (i32.const -1530800302)) + (i32.add (i32.const 356999955)) + (i32.add (i32.const -1770903949)) + (i32.add (i32.const 815288097)) + (i32.add (i32.const 133855211)) + (i32.add (i32.const -257649935)) + (i32.add (i32.const -1582765662)) + (i32.add (i32.const 1741512353)) + (i32.add (i32.const 586175010)) + (i32.add (i32.const 31957929)) + (i32.add (i32.const 803791718)) + (i32.add (i32.const -232545695)) + (i32.add (i32.const 1412468657)) + (i32.add (i32.const 1259937598)) + (i32.add (i32.const -1783593944)) + (i32.add (i32.const -1893125497)) + (i32.add (i32.const -552335563)) + (i32.add (i32.const 1211253628)) + (i32.add (i32.const -337193462)) + (i32.add (i32.const -1208533276)) + (i32.add (i32.const 199417123)) + (i32.add (i32.const -174287531)) + (i32.add (i32.const -1171629767)) + (i32.add (i32.const 389158128)) + (i32.add (i32.const -166601968)) + (i32.add (i32.const -1278857545)) + (i32.add (i32.const -943607181)) + (i32.add (i32.const 1553012928)) + (i32.add (i32.const 1082191609)) + (i32.add (i32.const 1204960218)) + (i32.add (i32.const -15830722)) + (i32.add (i32.const -768327585)) + (i32.add (i32.const 552463516)) + (i32.add (i32.const -71478160)) + (i32.add (i32.const -460138135)) + (i32.add (i32.const 720162915)) + (i32.add (i32.const -2086706680)) + (i32.add (i32.const -1367612451)) + (i32.add (i32.const 1987603131)) + (i32.add (i32.const -1569386579)) + (i32.add (i32.const -1841412677)) + (i32.add (i32.const 1796322707)) + (i32.add (i32.const -1132929975)) + (i32.add (i32.const -541462496)) + (i32.add (i32.const -523329886)) + (i32.add (i32.const 1762631263)) + (i32.add (i32.const -1313442435)) + (i32.add (i32.const 1317734808)) + (i32.add (i32.const -1727096414)) + (i32.add (i32.const 388842497)) + (i32.add (i32.const -281012110)) + (i32.add (i32.const -543544335)) + (i32.add (i32.const 568210441)) + (i32.add (i32.const 1645183320)) + (i32.add (i32.const -1686920977)) + (i32.add (i32.const -106207781)) + (i32.add (i32.const -203318207)) + (i32.add (i32.const -409497798)) + (i32.add (i32.const 799613829)) + (i32.add (i32.const 1217918175)) + (i32.add (i32.const -1518068527)) + (i32.add (i32.const 1560106065)) + (i32.add (i32.const -112255532)) + (i32.add (i32.const 732740722)) + (i32.add (i32.const -1936601547)) + (i32.add (i32.const -450980981)) + (i32.add (i32.const -160690127)) + (i32.add (i32.const 1687601340)) + (i32.add (i32.const 1790663933)) + (i32.add (i32.const -747029000)) + (i32.add (i32.const -2040707683)) + (i32.add (i32.const 1428312893)) + (i32.add (i32.const 1261433969)) + (i32.add (i32.const 91823246)) + (i32.add (i32.const -2003934968)) + (i32.add (i32.const 1566635357)) + (i32.add (i32.const 499335448)) + (i32.add (i32.const 1265582545)) + (i32.add (i32.const -1120469113)) + (i32.add (i32.const 1838289943)) + (i32.add (i32.const -1561971815)) + (i32.add (i32.const -1141782207)) + (i32.add (i32.const -2027400201)) + (i32.add (i32.const 1816000997)) + (i32.add (i32.const -1143755819)) + (i32.add (i32.const 2059882336)) + (i32.add (i32.const -209349539)) + (i32.add (i32.const 584084676)) + (i32.add (i32.const 1856012234)) + (i32.add (i32.const -455810677)) + (i32.add (i32.const 847557582)) + (i32.add (i32.const 845551482)) + (i32.add (i32.const -732480777)) + (i32.add (i32.const -642382829)) + (i32.add (i32.const -588101782)) + (i32.add (i32.const -2030498326)) + (i32.add (i32.const 2021399558)) + (i32.add (i32.const -2001533464)) + (i32.add (i32.const -90142999)) + (i32.add (i32.const 1921324833)) + (i32.add (i32.const 1807021435)) + (i32.add (i32.const 67395792)) + (i32.add (i32.const 471984154)) + (i32.add (i32.const 1234606039)) + (i32.add (i32.const 1659250903)) + (i32.add (i32.const -1283874727)) + (i32.add (i32.const -1928298022)) + (i32.add (i32.const -1394150489)) + (i32.add (i32.const 1653137635)) + (i32.add (i32.const 1740634848)) + (i32.add (i32.const -2008277516)) + (i32.add (i32.const 682698168)) + (i32.add (i32.const 1709429229)) + (i32.add (i32.const -120085798)) + (i32.add (i32.const 425363392)) + (i32.add (i32.const 2111255494)) + (i32.add (i32.const 74180704)) + (i32.add (i32.const -752316056)) + (i32.add (i32.const 282361485)) + (i32.add (i32.const 981466664)) + (i32.add (i32.const -1873798587)) + (i32.add (i32.const 1969364605)) + (i32.add (i32.const -158075671)) + (i32.add (i32.const 557816433)) + (i32.add (i32.const -1090969280)) + (i32.add (i32.const 209180401)) + (i32.add (i32.const -979307763)) + (i32.add (i32.const 1252756545)) + (i32.add (i32.const -546113416)) + (i32.add (i32.const -143775056)) + (i32.add (i32.const 1399033466)) + (i32.add (i32.const 1247966895)) + (i32.add (i32.const 1496793955)) + (i32.add (i32.const 2035401456)) + (i32.add (i32.const 61709985)) + (i32.add (i32.const -890848517)) + (i32.add (i32.const 345121477)) + (i32.add (i32.const 1368128253)) + (i32.add (i32.const 1307700116)) + (i32.add (i32.const 1858485498)) + (i32.add (i32.const 167060817)) + (i32.add (i32.const -1701187351)) + (i32.add (i32.const -1898801583)) + (i32.add (i32.const -891585926)) + (i32.add (i32.const 1651653147)) + (i32.add (i32.const -894054590)) + (i32.add (i32.const -574250095)) + (i32.add (i32.const 23220262)) + (i32.add (i32.const -491027630)) + (i32.add (i32.const 2003048850)) + (i32.add (i32.const 486718678)) + (i32.add (i32.const 545502441)) + (i32.add (i32.const 609761893)) + (i32.add (i32.const -495907744)) + (i32.add (i32.const 434993089)) + (i32.add (i32.const 2073488332)) + (i32.add (i32.const 1766582720)) + (i32.add (i32.const 930753280)) + (i32.add (i32.const 191298806)) + (i32.add (i32.const 1707746518)) + (i32.add (i32.const 1364720245)) + (i32.add (i32.const 959444176)) + (i32.add (i32.const -42266183)) + (i32.add (i32.const 2051417217)) + (i32.add (i32.const -304893986)) + (i32.add (i32.const -93852933)) + (i32.add (i32.const 973692718)) + (i32.add (i32.const -1646657885)) + (i32.add (i32.const -1413275388)) + (i32.add (i32.const 91152320)) + (i32.add (i32.const 92334000)) + (i32.add (i32.const 534132123)) + (i32.add (i32.const -1969451882)) + (i32.add (i32.const 350897391)) + (i32.add (i32.const 1144361927)) + (i32.add (i32.const 1524389845)) + (i32.add (i32.const 199876430)) + (i32.add (i32.const 405750424)) + (i32.add (i32.const 1222886412)) + (i32.add (i32.const 1960478071)) + (i32.add (i32.const -800984771)) + (i32.add (i32.const 945958781)) + (i32.add (i32.const -1496813108)) + (i32.add (i32.const -944090802)) + (i32.add (i32.const 810644812)) + (i32.add (i32.const 964244665)) + (i32.add (i32.const 492357244)) + (i32.add (i32.const 515988263)) + (i32.add (i32.const -1470555736)) + (i32.add (i32.const -359820717)) + (i32.add (i32.const -235821095)) + (i32.add (i32.const 1429029929)) + (i32.add (i32.const 319853392)) + (i32.add (i32.const -841571234)) + (i32.add (i32.const -1002486341)) + (i32.add (i32.const 891283482)) + (i32.add (i32.const 561654848)) + (i32.add (i32.const -1798326822)) + (i32.add (i32.const -566130004)) + (i32.add (i32.const -1746272363)) + (i32.add (i32.const -689931914)) + (i32.add (i32.const -514552800)) + (i32.add (i32.const 1793636681)) + (i32.add (i32.const 1190750113)) + (i32.add (i32.const -1932516582)) + (i32.add (i32.const 1924025829)) + (i32.add (i32.const -865375233)) + (i32.add (i32.const -154254883)) + (i32.add (i32.const -100204074)) + (i32.add (i32.const 516789854)) + (i32.add (i32.const 1037600294)) + (i32.add (i32.const -1920003312)) + (i32.add (i32.const -850804243)) + (i32.add (i32.const 160055199)) + (i32.add (i32.const 204266604)) + (i32.add (i32.const -543984481)) + (i32.add (i32.const -99913638)) + (i32.add (i32.const 1633819488)) + (i32.add (i32.const 1261941723)) + (i32.add (i32.const 2022521774)) + (i32.add (i32.const -844170748)) + (i32.add (i32.const -1318727583)) + (i32.add (i32.const -403295614)) + (i32.add (i32.const 1663959960)) + (i32.add (i32.const 1292095352)) + (i32.add (i32.const -231038899)) + (i32.add (i32.const 1198287555)) + (i32.add (i32.const 36724956)) + (i32.add (i32.const 687362048)) + (i32.add (i32.const -158934398)) + (i32.add (i32.const 1553526292)) + (i32.add (i32.const -1711381645)) + (i32.add (i32.const 1260416035)) + (i32.add (i32.const -1983670157)) + (i32.add (i32.const -1465341899)) + (i32.add (i32.const 2021889671)) + (i32.add (i32.const -204367037)) + (i32.add (i32.const 2094778703)) + (i32.add (i32.const -194228855)) + (i32.add (i32.const -2068157972)) + (i32.add (i32.const -1936871143)) + (i32.add (i32.const 2003043274)) + (i32.add (i32.const 1053449042)) + (i32.add (i32.const -257269698)) + (i32.add (i32.const -522256326)) + (i32.add (i32.const 2004616197)) + (i32.add (i32.const -1599081196)) + (i32.add (i32.const 1215756203)) + (i32.add (i32.const -254689469)) + (i32.add (i32.const -195906532)) + (i32.add (i32.const -1167552017)) + (i32.add (i32.const 1454854148)) + (i32.add (i32.const 461709217)) + (i32.add (i32.const -228728856)) + (i32.add (i32.const -2069050142)) + (i32.add (i32.const -1895750112)) + (i32.add (i32.const -411936587)) + (i32.add (i32.const -28496735)) + (i32.add (i32.const 1698220152)) + (i32.add (i32.const 1667683520)) + (i32.add (i32.const 1915817285)) + (i32.add (i32.const 2020285451)) + (i32.add (i32.const 460714087)) + (i32.add (i32.const 1601153200)) + (i32.add (i32.const -614659480)) + (i32.add (i32.const 60275967)) + (i32.add (i32.const -1299129770)) + (i32.add (i32.const -1457325475)) + (i32.add (i32.const 655102511)) + (i32.add (i32.const -1666279977)) + (i32.add (i32.const -2007276003)) + (i32.add (i32.const 660803051)) + (i32.add (i32.const -1159587288)) + (i32.add (i32.const -1270254422)) + (i32.add (i32.const 1102556376)) + (i32.add (i32.const -1477648143)) + (i32.add (i32.const 1528953346)) + (i32.add (i32.const -240515470)) + (i32.add (i32.const 832369600)) + (i32.add (i32.const 411681705)) + (i32.add (i32.const 751399571)) + (i32.add (i32.const 752792004)) + (i32.add (i32.const 695156975)) + (i32.add (i32.const 1175769456)) + (i32.add (i32.const -526815908)) + (i32.add (i32.const 757951834)) + (i32.add (i32.const 1011101146)) + (i32.add (i32.const -1107448755)) + (i32.add (i32.const -1866161139)) + (i32.add (i32.const -1819899839)) + (i32.add (i32.const 662751543)) + (i32.add (i32.const -828285620)) + (i32.add (i32.const 1546891754)) + (i32.add (i32.const 827219116)) + (i32.add (i32.const 266349302)) + (i32.add (i32.const -283840140)) + (i32.add (i32.const -1977148673)) + (i32.add (i32.const 1537039249)) + (i32.add (i32.const -2081795273)) + (i32.add (i32.const -294462546)) + (i32.add (i32.const 1113573133)) + (i32.add (i32.const -206796608)) + (i32.add (i32.const -1525546083)) + (i32.add (i32.const 1591586643)) + (i32.add (i32.const 717973152)) + (i32.add (i32.const 1479766010)) + (i32.add (i32.const -452638454)) + (i32.add (i32.const -836548819)) + (i32.add (i32.const 1115842271)) + (i32.add (i32.const 1150015)) + (i32.add (i32.const 1584812997)) + (i32.add (i32.const -917729159)) + (i32.add (i32.const -1477315737)) + (i32.add (i32.const 1895679869)) + (i32.add (i32.const 1962358096)) + (i32.add (i32.const -1503231352)) + (i32.add (i32.const 582194835)) + (i32.add (i32.const -688094502)) + (i32.add (i32.const -1933948405)) + (i32.add (i32.const -1720127255)) + (i32.add (i32.const -1302661210)) + (i32.add (i32.const -578259838)) + (i32.add (i32.const -424775398)) + (i32.add (i32.const 1689328867)) + (i32.add (i32.const 812193121)) + (i32.add (i32.const 971132626)) + (i32.add (i32.const -617585569)) + (i32.add (i32.const 225986816)) + (i32.add (i32.const 925499965)) + (i32.add (i32.const -337022904)) + (i32.add (i32.const 1282802424)) + (i32.add (i32.const 1216182100)) + (i32.add (i32.const 342351409)) + (i32.add (i32.const 1375196359)) + (i32.add (i32.const 1670832281)) + (i32.add (i32.const 164880219)) + (i32.add (i32.const -1710558828)) + (i32.add (i32.const -1099736094)) + (i32.add (i32.const 570436656)) + (i32.add (i32.const -1329727376)) + (i32.add (i32.const 444112086)) + (i32.add (i32.const -1143390396)) + (i32.add (i32.const 375156266)) + (i32.add (i32.const -198807698)) + (i32.add (i32.const -1474178056)) + (i32.add (i32.const -22618072)) + (i32.add (i32.const -757498096)) + (i32.add (i32.const 542990094)) + (i32.add (i32.const -187478657)) + (i32.add (i32.const 937730160)) + (i32.add (i32.const -125307689)) + (i32.add (i32.const 1416996148)) + (i32.add (i32.const 1320138247)) + (i32.add (i32.const -993296070)) + (i32.add (i32.const -1386279817)) + (i32.add (i32.const -407747999)) + (i32.add (i32.const -134597180)) + (i32.add (i32.const -823584227)) + (i32.add (i32.const -1627215478)) + (i32.add (i32.const -1680321479)) + (i32.add (i32.const 991338276)) + (i32.add (i32.const -397938281)) + (i32.add (i32.const 1230573460)) + (i32.add (i32.const -838411719)) + (i32.add (i32.const 2062101742)) + (i32.add (i32.const -1712750572)) + (i32.add (i32.const 930375877)) + (i32.add (i32.const -1560627)) + (i32.add (i32.const -131935678)) + (i32.add (i32.const 187520753)) + (i32.add (i32.const 1333005490)) + (i32.add (i32.const 2061571076)) + (i32.add (i32.const -1855916289)) + (i32.add (i32.const 276273963)) + (i32.add (i32.const 2044342529)) + (i32.add (i32.const 787610940)) + (i32.add (i32.const -2093453950)) + (i32.add (i32.const 533905822)) + (i32.add (i32.const -28447374)) + (i32.add (i32.const -352061115)) + (i32.add (i32.const 1341107371)) + (i32.add (i32.const -677035073)) + (i32.add (i32.const 505149122)) + (i32.add (i32.const 637765689)) + (i32.add (i32.const -1164338272)) + (i32.add (i32.const -1188535579)) + (i32.add (i32.const -961995321)) + (i32.add (i32.const 32878974)) + (i32.add (i32.const -1039787264)) + (i32.add (i32.const 1826009806)) + (i32.add (i32.const 438978916)) + (i32.add (i32.const 798562438)) + (i32.add (i32.const 171465443)) + (i32.add (i32.const -146784999)) + (i32.add (i32.const 2009173514)) + (i32.add (i32.const 764014331)) + (i32.add (i32.const -750151274)) + (i32.add (i32.const 510556689)) + (i32.add (i32.const -1032864950)) + (i32.add (i32.const 1003020212)) + (i32.add (i32.const 116552520)) + (i32.add (i32.const 1201198478)) + (i32.add (i32.const -1188562758)) + (i32.add (i32.const 59374267)) + (i32.add (i32.const 1208348341)) + (i32.add (i32.const 907115509)) + (i32.add (i32.const -692108959)) + (i32.add (i32.const -1928705647)) + (i32.add (i32.const 1982979321)) + (i32.add (i32.const 295312406)) + (i32.add (i32.const 1430187010)) + (i32.add (i32.const 1388088986)) + (i32.add (i32.const -1933943488)) + (i32.add (i32.const -2025461253)) + (i32.add (i32.const 11628016)) + (i32.add (i32.const 1452077882)) + (i32.add (i32.const -1643858315)) + (i32.add (i32.const 1578009942)) + (i32.add (i32.const 1687970578)) + (i32.add (i32.const 546043587)) + (i32.add (i32.const 1601435758)) + (i32.add (i32.const 260854773)) + (i32.add (i32.const 293147160)) + (i32.add (i32.const 1891438128)) + (i32.add (i32.const 878281142)) + (i32.add (i32.const 1050883239)) + (i32.add (i32.const -1870704743)) + (i32.add (i32.const 36201293)) + (i32.add (i32.const 1404850980)) + (i32.add (i32.const -1167637927)) + (i32.add (i32.const -717910679)) + (i32.add (i32.const 224659015)) + (i32.add (i32.const 723222461)) + (i32.add (i32.const -698858534)) + (i32.add (i32.const -67461705)) + (i32.add (i32.const 2256612)) + (i32.add (i32.const -1494320518)) + (i32.add (i32.const -1007624561)) + (i32.add (i32.const -552985522)) + (i32.add (i32.const -1822355804)) + (i32.add (i32.const -849485349)) + (i32.add (i32.const 76862223)) + (i32.add (i32.const -527038951)) + (i32.add (i32.const 304876180)) + (i32.add (i32.const -746105035)) + (i32.add (i32.const 231646702)) + (i32.add (i32.const 136887534)) + (i32.add (i32.const -1614947086)) + (i32.add (i32.const -641698155)) + (i32.add (i32.const -1621395528)) + (i32.add (i32.const 513859884)) + (i32.add (i32.const -1273837980)) + (i32.add (i32.const 537138823)) + (i32.add (i32.const -1516861041)) + (i32.add (i32.const -2055872752)) + (i32.add (i32.const -1705281046)) + (i32.add (i32.const 606042885)) + (i32.add (i32.const 1632093139)) + (i32.add (i32.const 1213148563)) + (i32.add (i32.const -390179690)) + (i32.add (i32.const -1750625062)) + (i32.add (i32.const -1330117589)) + (i32.add (i32.const 205030482)) + (i32.add (i32.const -103671124)) + (i32.add (i32.const -249959794)) + (i32.add (i32.const 936850715)) + (i32.add (i32.const 1322420393)) + (i32.add (i32.const 1860514038)) + (i32.add (i32.const 1257913678)) + (i32.add (i32.const 1521736543)) + (i32.add (i32.const -1143012373)) + (i32.add (i32.const 439704037)) + (i32.add (i32.const -486269374)) + (i32.add (i32.const -429631701)) + (i32.add (i32.const -472909024)) + (i32.add (i32.const 611970658)) + (i32.add (i32.const 270809985)) + (i32.add (i32.const 1706425725)) + (i32.add (i32.const 1365262126)) + (i32.add (i32.const 739929776)) + (i32.add (i32.const 18559150)) + (i32.add (i32.const -1738244235)) + (i32.add (i32.const -440166780)) + (i32.add (i32.const 1948487855)) + (i32.add (i32.const 1489014117)) + (i32.add (i32.const -1066697437)) + (i32.add (i32.const 1891734532)) + (i32.add (i32.const -1232117174)) + (i32.add (i32.const 978151074)) + (i32.add (i32.const -1811891582)) + (i32.add (i32.const 1322960186)) + (i32.add (i32.const -1694462575)) + (i32.add (i32.const 127299451)) + (i32.add (i32.const -16443667)) + (i32.add (i32.const 467445958)) + (i32.add (i32.const -1634257211)) + (i32.add (i32.const 650847342)) + (i32.add (i32.const -837704605)) + (i32.add (i32.const -1859805505)) + (i32.add (i32.const 262502936)) + (i32.add (i32.const -11641102)) + (i32.add (i32.const 1780518438)) + (i32.add (i32.const 1701385850)) + (i32.add (i32.const 1217763252)) + (i32.add (i32.const 1106917317)) + (i32.add (i32.const -165121216)) + (i32.add (i32.const -1876385079)) + (i32.add (i32.const -446577939)) + (i32.add (i32.const 1929841739)) + (i32.add (i32.const 1627537098)) + (i32.add (i32.const 2057147759)) + (i32.add (i32.const -1310692564)) + (i32.add (i32.const -1402332024)) + (i32.add (i32.const -899787792)) + (i32.add (i32.const 2006731572)) + (i32.add (i32.const -2102920104)) + (i32.add (i32.const -1586290818)) + (i32.add (i32.const -1852729271)) + (i32.add (i32.const -505189698)) + (i32.add (i32.const 1668095906)) + (i32.add (i32.const -240791192)) + (i32.add (i32.const 1796943756)) + (i32.add (i32.const -1881497615)) + (i32.add (i32.const -1268850413)) + (i32.add (i32.const -1879492494)) + (i32.add (i32.const 900338798)) + (i32.add (i32.const 1811849240)) + (i32.add (i32.const 1467281866)) + (i32.add (i32.const -119048098)) + (i32.add (i32.const 438461355)) + (i32.add (i32.const -1522034548)) + (i32.add (i32.const -843025578)) + (i32.add (i32.const -1309946824)) + (i32.add (i32.const -1774901362)) + (i32.add (i32.const -1935040418)) + (i32.add (i32.const 883966451)) + (i32.add (i32.const -1554389255)) + (i32.add (i32.const 699737845)) + (i32.add (i32.const 577580738)) + (i32.add (i32.const -1961658350)) + (i32.add (i32.const -1796965557)) + (i32.add (i32.const -966439704)) + (i32.add (i32.const 1929061756)) + (i32.add (i32.const -116157997)) + (i32.add (i32.const 2026815811)) + (i32.add (i32.const -1925482348)) + (i32.add (i32.const 687868425)) + (i32.add (i32.const -1644896205)) + (i32.add (i32.const -1640057206)) + (i32.add (i32.const -1735197735)) + (i32.add (i32.const -1792850819)) + (i32.add (i32.const -1983725643)) + (i32.add (i32.const 151940952)) + (i32.add (i32.const -797424077)) + (i32.add (i32.const -1767545423)) + (i32.add (i32.const 1355335522)) + (i32.add (i32.const 1333441815)) + (i32.add (i32.const -24695184)) + (i32.add (i32.const 565088952)) + (i32.add (i32.const -1040585979)) + (i32.add (i32.const 1818487845)) + (i32.add (i32.const 1961296655)) + (i32.add (i32.const 641905585)) + (i32.add (i32.const 1202830224)) + (i32.add (i32.const -953940488)) + (i32.add (i32.const 464211802)) + (i32.add (i32.const -146820102)) + (i32.add (i32.const -880983745)) + (i32.add (i32.const -1693601704)) + (i32.add (i32.const -2115185776)) + (i32.add (i32.const 159655810)) + (i32.add (i32.const -1162836989)) + (i32.add (i32.const 120343070)) + (i32.add (i32.const 962822195)) + (i32.add (i32.const -201541386)) + (i32.add (i32.const 2024775345)) + (i32.add (i32.const -1319300401)) + (i32.add (i32.const 1609038585)) + (i32.add (i32.const -176582499)) + (i32.add (i32.const -1826997460)) + (i32.add (i32.const 81609615)) + (i32.add (i32.const 2022829531)) + (i32.add (i32.const -2062911140)) + (i32.add (i32.const -808572680)) + (i32.add (i32.const 764994353)) + (i32.add (i32.const 1920875142)) + (i32.add (i32.const 770038250)) + (i32.add (i32.const 1403792020)) + (i32.add (i32.const -1915236392)) + (i32.add (i32.const -186395806)) + (i32.add (i32.const -385778971)) + (i32.add (i32.const 401579315)) + (i32.add (i32.const 1544092108)) + (i32.add (i32.const -2085533698)) + (i32.add (i32.const -1887011921)) + (i32.add (i32.const 2053428921)) + (i32.add (i32.const -554372364)) + (i32.add (i32.const -1612938776)) + (i32.add (i32.const 229917615)) + (i32.add (i32.const -1286976462)) + (i32.add (i32.const 555892933)) + (i32.add (i32.const -1132399011)) + (i32.add (i32.const -597476666)) + (i32.add (i32.const 653872115)) + (i32.add (i32.const -537010496)) + (i32.add (i32.const -1508123257)) + (i32.add (i32.const 2045989796)) + (i32.add (i32.const 1291371975)) + (i32.add (i32.const 367612822)) + (i32.add (i32.const 1812629403)) + (i32.add (i32.const -572433949)) + (i32.add (i32.const -1432937532)) + (i32.add (i32.const 1123226825)) + (i32.add (i32.const 1146926856)) + (i32.add (i32.const 1940550480)) + (i32.add (i32.const 1217012223)) + (i32.add (i32.const 1032787296)) + (i32.add (i32.const -482271947)) + (i32.add (i32.const -2021983202)) + (i32.add (i32.const -161882657)) + (i32.add (i32.const 998164595)) + (i32.add (i32.const 1130878047)) + (i32.add (i32.const 2019545732)) + (i32.add (i32.const 2070595786)) + (i32.add (i32.const -655707984)) + (i32.add (i32.const -1117710383)) + (i32.add (i32.const 424711673)) + (i32.add (i32.const -431765642)) + (i32.add (i32.const -2003972592)) + (i32.add (i32.const 1666245830)) + (i32.add (i32.const 1173269893)) + (i32.add (i32.const -627589495)) + (i32.add (i32.const -363717357)) + (i32.add (i32.const 1214057634)) + (i32.add (i32.const 1872995969)) + (i32.add (i32.const -1702208318)) + (i32.add (i32.const -1221916596)) + (i32.add (i32.const 1443182800)) + (i32.add (i32.const -481558636)) + (i32.add (i32.const -1567412002)) + (i32.add (i32.const -1605190780)) + (i32.add (i32.const 2102945144)) + (i32.add (i32.const -818698750)) + (i32.add (i32.const -1676011615)) + (i32.add (i32.const 926347427)) + (i32.add (i32.const 696717579)) + (i32.add (i32.const -308929505)) + (i32.add (i32.const 164815021)) + (i32.add (i32.const -1519814858)) + (i32.add (i32.const -2062928999)) + (i32.add (i32.const -776388596)) + (i32.add (i32.const -1206160164)) + (i32.add (i32.const -3748538)) + (i32.add (i32.const 862474755)) + (i32.add (i32.const -338858207)) + (i32.add (i32.const 1699952673)) + (i32.add (i32.const 377679712)) + (i32.add (i32.const -1476971356)) + (i32.add (i32.const 793303138)) + (i32.add (i32.const 2046433019)) + (i32.add (i32.const 1573849472)) + (i32.add (i32.const 978779426)) + (i32.add (i32.const 1271639571)) + (i32.add (i32.const -80192232)) + (i32.add (i32.const 1376074441)) + (i32.add (i32.const -1466984668)) + (i32.add (i32.const 1150984171)) + (i32.add (i32.const -976693114)) + (i32.add (i32.const -612919078)) + (i32.add (i32.const 255383178)) + (i32.add (i32.const -435657186)) + (i32.add (i32.const 613097586)) + (i32.add (i32.const -402567635)) + (i32.add (i32.const 34259696)) + (i32.add (i32.const -850666830)) + (i32.add (i32.const 792838529)) + (i32.add (i32.const 179087227)) + (i32.add (i32.const -204649638)) + (i32.add (i32.const -1118786783)) + (i32.add (i32.const -1890607764)) + (i32.add (i32.const 1773016017)) + (i32.add (i32.const 95191283)) + (i32.add (i32.const 195143292)) + (i32.add (i32.const 1638751678)) + (i32.add (i32.const 119839586)) + (i32.add (i32.const -708029992)) + (i32.add (i32.const -1167759142)) + (i32.add (i32.const 858021405)) + (i32.add (i32.const -847800919)) + (i32.add (i32.const -387797289)) + (i32.add (i32.const 942444309)) + (i32.add (i32.const -1271096610)) + (i32.add (i32.const 1241045918)) + (i32.add (i32.const -86245040)) + (i32.add (i32.const -2103424967)) + (i32.add (i32.const -899963352)) + (i32.add (i32.const 529475458)) + (i32.add (i32.const 1379045443)) + (i32.add (i32.const 1739892210)) + (i32.add (i32.const 195541377)) + (i32.add (i32.const -574968922)) + (i32.add (i32.const 365927232)) + (i32.add (i32.const 1300632097)) + (i32.add (i32.const 2010977698)) + (i32.add (i32.const 1853809647)) + (i32.add (i32.const 1392719101)) + (i32.add (i32.const -1605592389)) + (i32.add (i32.const -1689137)) + (i32.add (i32.const -1649291379)) + (i32.add (i32.const 1227413880)) + (i32.add (i32.const 998306986)) + (i32.add (i32.const 481737367)) + (i32.add (i32.const 1312146753)) + (i32.add (i32.const -1688512699)) + (i32.add (i32.const -1232188446)) + (i32.add (i32.const -1668543803)) + (i32.add (i32.const -591769153)) + (i32.add (i32.const 1638650663)) + (i32.add (i32.const 1322802759)) + (i32.add (i32.const 1103674830)) + (i32.add (i32.const 1034332166)) + (i32.add (i32.const 1936859435)) + (i32.add (i32.const 214400033)) + (i32.add (i32.const 300236349)) + (i32.add (i32.const -985174830)) + (i32.add (i32.const 1477268023)) + (i32.add (i32.const 1231802030)) + (i32.add (i32.const 951442933)) + (i32.add (i32.const 772602377)) + (i32.add (i32.const -60356836)) + (i32.add (i32.const -181021649)) + (i32.add (i32.const 1797722985)) + (i32.add (i32.const 1315305589)) + (i32.add (i32.const -1120466198)) + (i32.add (i32.const -22847049)) + (i32.add (i32.const -179106078)) + (i32.add (i32.const -1636388878)) + (i32.add (i32.const 1727130910)) + (i32.add (i32.const -948898552)) + (i32.add (i32.const 165495292)) + (i32.add (i32.const 824150554)) + (i32.add (i32.const 2004484059)) + (i32.add (i32.const -845605569)) + (i32.add (i32.const 1181532773)) + (i32.add (i32.const -712608886)) + (i32.add (i32.const 893225794)) + (i32.add (i32.const -1586698826)) + (i32.add (i32.const -602538079)) + (i32.add (i32.const -1174244933)) + (i32.add (i32.const -313786443)) + (i32.add (i32.const -1485554868)) + (i32.add (i32.const -1218964621)) + (i32.add (i32.const -1716145767)) + (i32.add (i32.const -84568962)) + (i32.add (i32.const 486229732)) + (i32.add (i32.const -734687765)) + (i32.add (i32.const 1218733085)) + (i32.add (i32.const -1481120509)) + (i32.add (i32.const 1994430104)) + (i32.add (i32.const -278807921)) + (i32.add (i32.const -1273390873)) + (i32.add (i32.const -1811148187)) + (i32.add (i32.const 1024779266)) + (i32.add (i32.const 763499607)) + (i32.add (i32.const -2098493199)) + (i32.add (i32.const -1679607877)) + (i32.add (i32.const 211623558)) + (i32.add (i32.const -1854021616)) + (i32.add (i32.const 44510775)) + (i32.add (i32.const 2094840155)) + (i32.add (i32.const 1863016799)) + (i32.add (i32.const -384681034)) + (i32.add (i32.const 108194069)) + (i32.add (i32.const 993588098)) + (i32.add (i32.const 1051732443)) + (i32.add (i32.const -1324930522)) + (i32.add (i32.const 1780226289)) + (i32.add (i32.const -583193381)) + (i32.add (i32.const 1621683657)) + (i32.add (i32.const 1556666332)) + (i32.add (i32.const -2130919682)) + (i32.add (i32.const -300991625)) + (i32.add (i32.const 219926173)) + (i32.add (i32.const 334179123)) + (i32.add (i32.const -242867819)) + (i32.add (i32.const 2142987352)) + (i32.add (i32.const 1333992621)) + (i32.add (i32.const 1469437666)) + (i32.add (i32.const 1506456897)) + (i32.add (i32.const -2084297302)) + (i32.add (i32.const 1349873045)) + (i32.add (i32.const 1260804134)) + (i32.add (i32.const 516496621)) + (i32.add (i32.const -275393957)) + (i32.add (i32.const 1258623142)) + (i32.add (i32.const 2052269774)) + (i32.add (i32.const -335722458)) + (i32.add (i32.const 707012226)) + (i32.add (i32.const 128672599)) + (i32.add (i32.const -125926610)) + (i32.add (i32.const 547370698)) + (i32.add (i32.const 1848722143)) + (i32.add (i32.const 959717718)) + (i32.add (i32.const 1216354496)) + (i32.add (i32.const 2016399814)) + (i32.add (i32.const -718942479)) + (i32.add (i32.const 1229251315)) + (i32.add (i32.const -1116623472)) + (i32.add (i32.const -726967496)) + (i32.add (i32.const 628549217)) + (i32.add (i32.const 1979437681)) + (i32.add (i32.const 1024093641)) + (i32.add (i32.const 1527895733)) + (i32.add (i32.const -1213276483)) + (i32.add (i32.const 1848706835)) + (i32.add (i32.const 1485476212)) + (i32.add (i32.const 1313057990)) + (i32.add (i32.const 767696976)) + (i32.add (i32.const 1625385874)) + (i32.add (i32.const -154809522)) + (i32.add (i32.const 156362649)) + (i32.add (i32.const -1909048033)) + (i32.add (i32.const 1973026933)) + (i32.add (i32.const 1413448820)) + (i32.add (i32.const -272900805)) + (i32.add (i32.const 1637948746)) + (i32.add (i32.const 332510811)) + (i32.add (i32.const -699612869)) + (i32.add (i32.const -508517858)) + (i32.add (i32.const -177326452)) + (i32.add (i32.const 1718380563)) + (i32.add (i32.const -1873343933)) + (i32.add (i32.const -28155674)) + (i32.add (i32.const -1356869739)) + (i32.add (i32.const 1118663519)) + (i32.add (i32.const -942553707)) + (i32.add (i32.const 786623603)) + (i32.add (i32.const -486059834)) + (i32.add (i32.const 304864360)) + (i32.add (i32.const -2009259747)) + (i32.add (i32.const -741312847)) + (i32.add (i32.const -1174685207)) + (i32.add (i32.const 317687460)) + (i32.add (i32.const -349103645)) + (i32.add (i32.const 245749453)) + (i32.add (i32.const 1735219753)) + (i32.add (i32.const 635706888)) + (i32.add (i32.const 1900626336)) + (i32.add (i32.const 1412503779)) + (i32.add (i32.const -1726785665)) + (i32.add (i32.const 1110587645)) + (i32.add (i32.const 538168642)) + (i32.add (i32.const 156131263)) + (i32.add (i32.const 1650741129)) + (i32.add (i32.const -1278395421)) + (i32.add (i32.const -368376949)) + (i32.add (i32.const 27247898)) + (i32.add (i32.const 1095868004)) + (i32.add (i32.const 858540857)) + (i32.add (i32.const -1871916771)) + (i32.add (i32.const -1401407592)) + (i32.add (i32.const -1582204005)) + (i32.add (i32.const -1461515416)) + (i32.add (i32.const 55778269)) + (i32.add (i32.const 552302808)) + (i32.add (i32.const -39538689)) + (i32.add (i32.const 182102100)) + (i32.add (i32.const 794580643)) + (i32.add (i32.const 153213941)) + (i32.add (i32.const 1002809635)) + (i32.add (i32.const -812513457)) + (i32.add (i32.const 1319741163)) + (i32.add (i32.const -1465228894)) + (i32.add (i32.const -1491688704)) + (i32.add (i32.const -1622580856)) + (i32.add (i32.const 201468620)) + (i32.add (i32.const 1004193476)) + (i32.add (i32.const -787650590)) + (i32.add (i32.const -958390279)) + (i32.add (i32.const 2110526045)) + (i32.add (i32.const 1729152185)) + (i32.add (i32.const -295638224)) + (i32.add (i32.const -36208202)) + (i32.add (i32.const -1415880390)) + (i32.add (i32.const 473660082)) + (i32.add (i32.const -1725974739)) + (i32.add (i32.const -933712464)) + (i32.add (i32.const -72737880)) + (i32.add (i32.const -1718653669)) + (i32.add (i32.const 1388777955)) + (i32.add (i32.const -1293046296)) + (i32.add (i32.const -1189191038)) + (i32.add (i32.const -2001664783)) + (i32.add (i32.const -1876272432)) + (i32.add (i32.const 1402089452)) + (i32.add (i32.const -1804654298)) + (i32.add (i32.const 163723278)) + (i32.add (i32.const 1947575714)) + (i32.add (i32.const 1693599193)) + (i32.add (i32.const -1188727853)) + (i32.add (i32.const -876517169)) + (i32.add (i32.const 1075002678)) + (i32.add (i32.const 1818938058)) + (i32.add (i32.const 826270782)) + (i32.add (i32.const -1699505986)) + (i32.add (i32.const 582976418)) + (i32.add (i32.const -2030034407)) + (i32.add (i32.const 764660320)) + (i32.add (i32.const -333792067)) + (i32.add (i32.const -349192623)) + (i32.add (i32.const -140294653)) + (i32.add (i32.const -954759472)) + (i32.add (i32.const -1988134167)) + (i32.add (i32.const -1394662885)) + (i32.add (i32.const 2119005246)) + (i32.add (i32.const 757683988)) + (i32.add (i32.const -496293519)) + (i32.add (i32.const 1340467281)) + (i32.add (i32.const -675167971)) + (i32.add (i32.const -1291918679)) + (i32.add (i32.const -1669249459)) + (i32.add (i32.const 2081331118)) + (i32.add (i32.const -672665520)) + (i32.add (i32.const -89753430)) + (i32.add (i32.const -1020738840)) + (i32.add (i32.const -804840632)) + (i32.add (i32.const 1206182197)) + (i32.add (i32.const 1184975369)) + (i32.add (i32.const -1724774218)) + (i32.add (i32.const 1391170898)) + (i32.add (i32.const 33453473)) + (i32.add (i32.const -2080796536)) + (i32.add (i32.const -1747930303)) + (i32.add (i32.const 1898316004)) + (i32.add (i32.const -1588126555)) + (i32.add (i32.const 253802055)) + (i32.add (i32.const -1747472575)) + (i32.add (i32.const 1973129739)) + (i32.add (i32.const 873421024)) + (i32.add (i32.const -264127592)) + (i32.add (i32.const -542578416)) + (i32.add (i32.const 172656593)) + (i32.add (i32.const 1318119340)) + (i32.add (i32.const -2050502177)) + (i32.add (i32.const 721639655)) + (i32.add (i32.const 541935464)) + (i32.add (i32.const -1631497237)) + (i32.add (i32.const 303977192)) + (i32.add (i32.const 979610017)) + (i32.add (i32.const 1199196315)) + (i32.add (i32.const -1418028751)) + (i32.add (i32.const 2079105691)) + (i32.add (i32.const 503051886)) + (i32.add (i32.const -1332379163)) + (i32.add (i32.const -788164088)) + (i32.add (i32.const -1529933187)) + (i32.add (i32.const -687267722)) + (i32.add (i32.const 1443504815)) + (i32.add (i32.const -825372923)) + (i32.add (i32.const 465736108)) + (i32.add (i32.const -1161918379)) + (i32.add (i32.const 142940276)) + (i32.add (i32.const -629777928)) + (i32.add (i32.const -144299548)) + (i32.add (i32.const -408459294)) + (i32.add (i32.const -780561638)) + (i32.add (i32.const 1310628185)) + (i32.add (i32.const 1888243045)) + (i32.add (i32.const 1128177816)) + (i32.add (i32.const 1562969708)) + (i32.add (i32.const 1292518152)) + (i32.add (i32.const -1232544637)) + (i32.add (i32.const 1597556197)) + (i32.add (i32.const -2008773459)) + (i32.add (i32.const 992415188)) + (i32.add (i32.const -301058566)) + (i32.add (i32.const 19561647)) + (i32.add (i32.const 185894079)) + (i32.add (i32.const 600570951)) + (i32.add (i32.const -1607170869)) + (i32.add (i32.const -1501486473)) + (i32.add (i32.const -550399349)) + (i32.add (i32.const -1356454099)) + (i32.add (i32.const 1302253441)) + (i32.add (i32.const 1365186546)) + (i32.add (i32.const -789524672)) + (i32.add (i32.const 411913205)) + (i32.add (i32.const 825720452)) + (i32.add (i32.const -1796455556)) + (i32.add (i32.const 834974928)) + (i32.add (i32.const 952035733)) + (i32.add (i32.const 862099091)) + (i32.add (i32.const 307733959)) + (i32.add (i32.const 1540824717)) + (i32.add (i32.const 905727485)) + (i32.add (i32.const -1061581386)) + (i32.add (i32.const -1287220498)) + (i32.add (i32.const -378956695)) + (i32.add (i32.const 1695371406)) + (i32.add (i32.const -1499720925)) + (i32.add (i32.const -93957140)) + (i32.add (i32.const 2104841848)) + (i32.add (i32.const -1608388344)) + (i32.add (i32.const -371101288)) + (i32.add (i32.const 383700061)) + (i32.add (i32.const -561413233)) + (i32.add (i32.const -1716932564)) + (i32.add (i32.const -491479900)) + (i32.add (i32.const -847580623)) + (i32.add (i32.const 1648067823)) + (i32.add (i32.const -912381798)) + (i32.add (i32.const 1319970590)) + (i32.add (i32.const -1450441961)) + (i32.add (i32.const -214742297)) + (i32.add (i32.const -1100943641)) + (i32.add (i32.const -754065891)) + (i32.add (i32.const 984303548)) + (i32.add (i32.const 261458690)) + (i32.add (i32.const 623279130)) + (i32.add (i32.const 614658106)) + (i32.add (i32.const -1895288174)) + (i32.add (i32.const 1144429978)) + (i32.add (i32.const 706414747)) + (i32.add (i32.const -1210905429)) + (i32.add (i32.const -235895516)) + (i32.add (i32.const -645374634)) + (i32.add (i32.const -2014093532)) + (i32.add (i32.const -1170005622)) + (i32.add (i32.const -1317012598)) + (i32.add (i32.const 1092515951)) + (i32.add (i32.const 585936044)) + (i32.add (i32.const 1373299010)) + (i32.add (i32.const -539292201)) + (i32.add (i32.const 1753323027)) + (i32.add (i32.const 669625856)) + (i32.add (i32.const -2074825238)) + (i32.add (i32.const -49590664)) + (i32.add (i32.const -1699699698)) + (i32.add (i32.const 1446341234)) + (i32.add (i32.const 446843982)) + (i32.add (i32.const -1282099170)) + (i32.add (i32.const -530782719)) + (i32.add (i32.const -356189137)) + (i32.add (i32.const 617066671)) + (i32.add (i32.const -556979048)) + (i32.add (i32.const 33661399)) + (i32.add (i32.const 358866536)) + (i32.add (i32.const -1396760300)) + (i32.add (i32.const 1794749875)) + (i32.add (i32.const 1394658328)) + (i32.add (i32.const -2142729594)) + (i32.add (i32.const -960976853)) + (i32.add (i32.const 1976162730)) + (i32.add (i32.const 1003417187)) + (i32.add (i32.const -1896158683)) + (i32.add (i32.const 1768993403)) + (i32.add (i32.const -325243792)) + (i32.add (i32.const 388649110)) + (i32.add (i32.const 1714610227)) + (i32.add (i32.const -1936108512)) + (i32.add (i32.const 1171545819)) + (i32.add (i32.const -475671524)) + (i32.add (i32.const 1855798401)) + (i32.add (i32.const 1767297937)) + (i32.add (i32.const 518853181)) + (i32.add (i32.const 1771390550)) + (i32.add (i32.const -1215943106)) + (i32.add (i32.const 1430719761)) + (i32.add (i32.const -1312161171)) + (i32.add (i32.const 263867330)) + (i32.add (i32.const 2035221645)) + (i32.add (i32.const 1117072281)) + (i32.add (i32.const -1226088627)) + (i32.add (i32.const 80463092)) + (i32.add (i32.const 449527870)) + (i32.add (i32.const 1372846353)) + (i32.add (i32.const -2125998370)) + (i32.add (i32.const -1883886150)) + (i32.add (i32.const -3736848)) + (i32.add (i32.const 1458415937)) + (i32.add (i32.const 1961724564)) + (i32.add (i32.const -582640514)) + (i32.add (i32.const 1536721986)) + (i32.add (i32.const 984000669)) + (i32.add (i32.const -336323951)) + (i32.add (i32.const 613309585)) + (i32.add (i32.const 1497253084)) + (i32.add (i32.const 1279346707)) + (i32.add (i32.const -1746446371)) + (i32.add (i32.const -646370994)) + (i32.add (i32.const 1396992472)) + (i32.add (i32.const -513116639)) + (i32.add (i32.const -1052804190)) + (i32.add (i32.const 1401858089)) + (i32.add (i32.const 348648304)) + (i32.add (i32.const 916737125)) + (i32.add (i32.const -23309739)) + (i32.add (i32.const 1023920916)) + (i32.add (i32.const 1860433160)) + (i32.add (i32.const 268835361)) + (i32.add (i32.const -1199957269)) + (i32.add (i32.const 513578618)) + (i32.add (i32.const 120278446)) + (i32.add (i32.const 916160350)) + (i32.add (i32.const 1488917950)) + (i32.add (i32.const -211601170)) + (i32.add (i32.const 1711655000)) + (i32.add (i32.const -2032801326)) + (i32.add (i32.const 688830856)) + (i32.add (i32.const 2127446741)) + (i32.add (i32.const 1016982668)) + (i32.add (i32.const -1359361372)) + (i32.add (i32.const -1583465518)) + (i32.add (i32.const -372721929)) + (i32.add (i32.const -1925773341)) + (i32.add (i32.const 2059185850)) + (i32.add (i32.const -2087528565)) + (i32.add (i32.const -299427198)) + (i32.add (i32.const 1535044947)) + (i32.add (i32.const 1445351792)) + (i32.add (i32.const 249029674)) + (i32.add (i32.const -114750819)) + (i32.add (i32.const 1509158926)) + (i32.add (i32.const 568965733)) + (i32.add (i32.const 810938223)) + (i32.add (i32.const -79433280)) + (i32.add (i32.const -878988940)) + (i32.add (i32.const 1305637237)) + (i32.add (i32.const 1298348983)) + (i32.add (i32.const 138005750)) + (i32.add (i32.const -230193819)) + (i32.add (i32.const 319593263)) + (i32.add (i32.const -1998486647)) + (i32.add (i32.const 1415779044)) + (i32.add (i32.const -1076108210)) + (i32.add (i32.const 561604380)) + (i32.add (i32.const -1866679080)) + (i32.add (i32.const -1641004069)) + (i32.add (i32.const 1609871470)) + (i32.add (i32.const -926327584)) + (i32.add (i32.const -859205407)) + (i32.add (i32.const 1550849620)) + (i32.add (i32.const -487533839)) + (i32.add (i32.const 629366840)) + (i32.add (i32.const 645427603)) + (i32.add (i32.const -738999166)) + (i32.add (i32.const 284681046)) + (i32.add (i32.const 1063298142)) + (i32.add (i32.const -1748502870)) + (i32.add (i32.const 1336271218)) + (i32.add (i32.const -1261574273)) + (i32.add (i32.const 67203086)) + (i32.add (i32.const -694051126)) + (i32.add (i32.const -34031704)) + (i32.add (i32.const 1899582563)) + (i32.add (i32.const 482472338)) + (i32.add (i32.const 467843361)) + (i32.add (i32.const 403282088)) + (i32.add (i32.const 1021894559)) + (i32.add (i32.const 245430230)) + (i32.add (i32.const -1614286233)) + (i32.add (i32.const 125771916)) + (i32.add (i32.const -359075354)) + (i32.add (i32.const -2107375650)) + (i32.add (i32.const -1772529260)) + (i32.add (i32.const -1028965952)) + (i32.add (i32.const 1655949527)) + (i32.add (i32.const 2017998761)) + (i32.add (i32.const -579102627)) + (i32.add (i32.const -691665256)) + (i32.add (i32.const -312854804)) + (i32.add (i32.const 1017683913)) + (i32.add (i32.const 1594524808)) + (i32.add (i32.const -717928086)) + (i32.add (i32.const 1446718427)) + (i32.add (i32.const -171591215)) + (i32.add (i32.const 365532688)) + (i32.add (i32.const 1469938931)) + (i32.add (i32.const -1910700289)) + (i32.add (i32.const -1800913184)) + (i32.add (i32.const 1052645084)) + (i32.add (i32.const -466248255)) + (i32.add (i32.const 1198267163)) + (i32.add (i32.const 100368235)) + (i32.add (i32.const 348909085)) + (i32.add (i32.const -6922013)) + (i32.add (i32.const -1659737721)) + (i32.add (i32.const 1589246693)) + (i32.add (i32.const 1519198897)) + (i32.add (i32.const -899728648)) + (i32.add (i32.const -811474950)) + (i32.add (i32.const -741060878)) + (i32.add (i32.const -2072130912)) + (i32.add (i32.const 464060933)) + (i32.add (i32.const -1427848280)) + (i32.add (i32.const -1352393087)) + (i32.add (i32.const -1660020431)) + (i32.add (i32.const -82437007)) + (i32.add (i32.const -1645245566)) + (i32.add (i32.const 1907349706)) + (i32.add (i32.const 836253527)) + (i32.add (i32.const 60940666)) + (i32.add (i32.const -581398446)) + (i32.add (i32.const -1005389224)) + (i32.add (i32.const -912250429)) + (i32.add (i32.const 868975933)) + (i32.add (i32.const -531971475)) + (i32.add (i32.const -1281082077)) + (i32.add (i32.const -289771861)) + (i32.add (i32.const 1320387379)) + (i32.add (i32.const 1725470161)) + (i32.add (i32.const 954805292)) + (i32.add (i32.const -407528627)) + (i32.add (i32.const -1787190010)) + (i32.add (i32.const 564223641)) + (i32.add (i32.const -696842936)) + (i32.add (i32.const -710929795)) + (i32.add (i32.const 1203746292)) + (i32.add (i32.const 1835031310)) + (i32.add (i32.const -1596468519)) + (i32.add (i32.const -2033275477)) + (i32.add (i32.const -185572238)) + (i32.add (i32.const -144239927)) + (i32.add (i32.const -753232257)) + (i32.add (i32.const -1964111857)) + (i32.add (i32.const -1565797995)) + (i32.add (i32.const 360897898)) + (i32.add (i32.const -1865441010)) + (i32.add (i32.const -1573878507)) + (i32.add (i32.const 1381759532)) + (i32.add (i32.const -803845363)) + (i32.add (i32.const -105178320)) + (i32.add (i32.const -1807364406)) + (i32.add (i32.const 665837630)) + (i32.add (i32.const 117439692)) + (i32.add (i32.const -1914818990)) + (i32.add (i32.const 1987295933)) + (i32.add (i32.const -387520047)) + (i32.add (i32.const -281926061)) + (i32.add (i32.const 569811567)) + (i32.add (i32.const 259984127)) + (i32.add (i32.const 55682426)) + (i32.add (i32.const 801192726)) + (i32.add (i32.const 1804522704)) + (i32.add (i32.const 220814284)) + (i32.add (i32.const -2124610548)) + (i32.add (i32.const 569242427)) + (i32.add (i32.const 2028868240)) + (i32.add (i32.const 1686990891)) + (i32.add (i32.const 743038841)) + (i32.add (i32.const -620325595)) + (i32.add (i32.const 1545209570)) + (i32.add (i32.const -739434200)) + (i32.add (i32.const 1020871145)) + (i32.add (i32.const 522599146)) + (i32.add (i32.const 680712393)) + (i32.add (i32.const 1307458042)) + (i32.add (i32.const -113698946)) + (i32.add (i32.const 1476140499)) + (i32.add (i32.const -644098727)) + (i32.add (i32.const -1573058475)) + (i32.add (i32.const 1281724897)) + (i32.add (i32.const -322073021)) + (i32.add (i32.const 1700805904)) + (i32.add (i32.const -597148624)) + (i32.add (i32.const -432587710)) + (i32.add (i32.const 278050902)) + (i32.add (i32.const -2107921244)) + (i32.add (i32.const 768267787)) + (i32.add (i32.const 1807301545)) + (i32.add (i32.const -1020768455)) + (i32.add (i32.const 1690012533)) + (i32.add (i32.const 149365556)) + (i32.add (i32.const 358936533)) + (i32.add (i32.const -2069936591)) + (i32.add (i32.const 1153969412)) + (i32.add (i32.const -994358445)) + (i32.add (i32.const -1870524353)) + (i32.add (i32.const 1345054814)) + (i32.add (i32.const -1958365677)) + (i32.add (i32.const 74018804)) + (i32.add (i32.const 79343093)) + (i32.add (i32.const 1506602574)) + (i32.add (i32.const 1015459871)) + (i32.add (i32.const 1857521577)) + (i32.add (i32.const -1234068308)) + (i32.add (i32.const 235127692)) + (i32.add (i32.const -1043194685)) + (i32.add (i32.const 693968958)) + (i32.add (i32.const 1366470816)) + (i32.add (i32.const 1917123194)) + (i32.add (i32.const -1921921181)) + (i32.add (i32.const -309920051)) + (i32.add (i32.const 388587678)) + (i32.add (i32.const 963474845)) + (i32.add (i32.const -612600521)) + (i32.add (i32.const 725441336)) + (i32.add (i32.const 1836317577)) + (i32.add (i32.const 1073590276)) + (i32.add (i32.const -559877682)) + (i32.add (i32.const -2108051062)) + (i32.add (i32.const 1106588595)) + (i32.add (i32.const 206680595)) + (i32.add (i32.const 1020557298)) + (i32.add (i32.const -1461274566)) + (i32.add (i32.const -542582659)) + (i32.add (i32.const -1851513041)) + (i32.add (i32.const -147919258)) + (i32.add (i32.const 1614744302)) + (i32.add (i32.const 1609781749)) + (i32.add (i32.const 1483032889)) + (i32.add (i32.const 1346676814)) + (i32.add (i32.const -1115445620)) + (i32.add (i32.const 1740789073)) + (i32.add (i32.const -2117531798)) + (i32.add (i32.const -494483312)) + (i32.add (i32.const -99075369)) + (i32.add (i32.const 1221035518)) + (i32.add (i32.const -625736026)) + (i32.add (i32.const 1957132892)) + (i32.add (i32.const 1260932165)) + (i32.add (i32.const -1922171397)) + (i32.add (i32.const -932674589)) + (i32.add (i32.const 802936779)) + (i32.add (i32.const -1190314234)) + (i32.add (i32.const -33399874)) + (i32.add (i32.const 129170838)) + (i32.add (i32.const -10677274)) + (i32.add (i32.const 827444516)) + (i32.add (i32.const -2103857653)) + (i32.add (i32.const -557769655)) + (i32.add (i32.const -1955353326)) + (i32.add (i32.const 513167989)) + (i32.add (i32.const -608632129)) + (i32.add (i32.const 1719815958)) + (i32.add (i32.const 2085200326)) + (i32.add (i32.const 504661448)) + (i32.add (i32.const 1967214387)) + (i32.add (i32.const 1135867667)) + (i32.add (i32.const 2084294074)) + (i32.add (i32.const -1104738558)) + (i32.add (i32.const -1377290956)) + (i32.add (i32.const -163362708)) + (i32.add (i32.const -730197618)) + (i32.add (i32.const -2030522595)) + (i32.add (i32.const -461172372)) + (i32.add (i32.const 291803991)) + (i32.add (i32.const 1344727612)) + (i32.add (i32.const 1921825232)) + (i32.add (i32.const 1933437681)) + (i32.add (i32.const -121670728)) + (i32.add (i32.const 1743620613)) + (i32.add (i32.const -1037232213)) + (i32.add (i32.const -1323824322)) + (i32.add (i32.const -1146959483)) + (i32.add (i32.const 1957167154)) + (i32.add (i32.const 467245904)) + (i32.add (i32.const 156042646)) + (i32.add (i32.const 149299705)) + (i32.add (i32.const 40214773)) + (i32.add (i32.const 1146722426)) + (i32.add (i32.const 96529547)) + (i32.add (i32.const -1667353137)) + (i32.add (i32.const 114470724)) + (i32.add (i32.const -947464075)) + (i32.add (i32.const 178446468)) + (i32.add (i32.const -424257)) + (i32.add (i32.const -1176273934)) + (i32.add (i32.const 25061687)) + (i32.add (i32.const -692203193)) + (i32.add (i32.const -110530852)) + (i32.add (i32.const -878249573)) + (i32.add (i32.const 1035179881)) + (i32.add (i32.const -519730417)) + (i32.add (i32.const -1391527909)) + (i32.add (i32.const -2071608676)) + (i32.add (i32.const 1140155293)) + (i32.add (i32.const -1801058903)) + (i32.add (i32.const 399896343)) + (i32.add (i32.const -1792064445)) + (i32.add (i32.const 246682668)) + (i32.add (i32.const 1038779502)) + (i32.add (i32.const 1453101772)) + (i32.add (i32.const -987427462)) + (i32.add (i32.const 2143219902)) + (i32.add (i32.const 1165477516)) + (i32.add (i32.const 1780289776)) + (i32.add (i32.const -134383226)) + (i32.add (i32.const 1830803715)) + (i32.add (i32.const 1033062482)) + (i32.add (i32.const -707259545)) + (i32.add (i32.const 383104128)) + (i32.add (i32.const 1664267763)) + (i32.add (i32.const -1563363268)) + (i32.add (i32.const -1405438034)) + (i32.add (i32.const 1992600625)) + (i32.add (i32.const 1723658503)) + (i32.add (i32.const 852962577)) + (i32.add (i32.const 1402266939)) + (i32.add (i32.const 76669171)) + (i32.add (i32.const -1024547623)) + (i32.add (i32.const -408751561)) + (i32.add (i32.const -170213827)) + (i32.add (i32.const 483408624)) + (i32.add (i32.const 844170230)) + (i32.add (i32.const 2128402312)) + (i32.add (i32.const -493112133)) + (i32.add (i32.const -1828436501)) + (i32.add (i32.const -725667598)) + (i32.add (i32.const -1024507288)) + (i32.add (i32.const 1558790855)) + (i32.add (i32.const 1099666942)) + (i32.add (i32.const 1164129585)) + (i32.add (i32.const -1775017392)) + (i32.add (i32.const 797508994)) + (i32.add (i32.const -1875934322)) + (i32.add (i32.const 1280638554)) + (i32.add (i32.const -1303799881)) + (i32.add (i32.const 1290662536)) + (i32.add (i32.const -630403010)) + (i32.add (i32.const 2112598312)) + (i32.add (i32.const -2086057335)) + (i32.add (i32.const -1107288715)) + (i32.add (i32.const -651127061)) + (i32.add (i32.const 1575677380)) + (i32.add (i32.const 339569171)) + (i32.add (i32.const -955757223)) + (i32.add (i32.const -489299060)) + (i32.add (i32.const 1269934343)) + (i32.add (i32.const -728372471)) + (i32.add (i32.const -682380142)) + (i32.add (i32.const -1295136738)) + (i32.add (i32.const 1810726620)) + (i32.add (i32.const 1313888491)) + (i32.add (i32.const -1942239014)) + (i32.add (i32.const -1692735741)) + (i32.add (i32.const 422639114)) + (i32.add (i32.const -681724955)) + (i32.add (i32.const -13564749)) + (i32.add (i32.const -58157330)) + (i32.add (i32.const -546433307)) + (i32.add (i32.const 737520110)) + (i32.add (i32.const 1783200246)) + (i32.add (i32.const -1417394621)) + (i32.add (i32.const -1737535376)) + (i32.add (i32.const -1938915458)) + (i32.add (i32.const -2118871013)) + (i32.add (i32.const 594068887)) + (i32.add (i32.const -1951089694)) + (i32.add (i32.const 1351369140)) + (i32.add (i32.const 178316520)) + (i32.add (i32.const -1487980923)) + (i32.add (i32.const -215510240)) + (i32.add (i32.const 86379580)) + (i32.add (i32.const 1913285034)) + (i32.add (i32.const -335875567)) + (i32.add (i32.const 820687521)) + (i32.add (i32.const -440753266)) + (i32.add (i32.const 1374914434)) + (i32.add (i32.const -920621159)) + (i32.add (i32.const -21258542)) + (i32.add (i32.const -842977140)) + (i32.add (i32.const -1253001809)) + (i32.add (i32.const -1526581539)) + (i32.add (i32.const 1263856316)) + (i32.add (i32.const -1861660315)) + (i32.add (i32.const -1241565316)) + (i32.add (i32.const -523522262)) + (i32.add (i32.const -2137610436)) + (i32.add (i32.const -247095680)) + (i32.add (i32.const 1674747979)) + (i32.add (i32.const -505855996)) + (i32.add (i32.const 1981973646)) + (i32.add (i32.const 566069881)) + (i32.add (i32.const -1599553334)) + (i32.add (i32.const -1416590730)) + (i32.add (i32.const 689478736)) + (i32.add (i32.const 1328268183)) + (i32.add (i32.const 507775266)) + (i32.add (i32.const -1571874401)) + (i32.add (i32.const -1726503082)) + (i32.add (i32.const -853228836)) + (i32.add (i32.const -2144915164)) + (i32.add (i32.const -1968020673)) + (i32.add (i32.const 841086375)) + (i32.add (i32.const -1046638926)) + (i32.add (i32.const -1229631002)) + (i32.add (i32.const 539330538)) + (i32.add (i32.const 1502801846)) + (i32.add (i32.const -2055354613)) + (i32.add (i32.const -994194722)) + (i32.add (i32.const 2031798047)) + (i32.add (i32.const 1922685066)) + (i32.add (i32.const -991174852)) + (i32.add (i32.const 1113177477)) + (i32.add (i32.const -621320233)) + (i32.add (i32.const 980086518)) + (i32.add (i32.const 1403266399)) + (i32.add (i32.const 385588744)) + (i32.add (i32.const 1268705792)) + (i32.add (i32.const -2036577142)) + (i32.add (i32.const 1927442860)) + (i32.add (i32.const -607415659)) + (i32.add (i32.const 1804689810)) + (i32.add (i32.const 1851831820)) + (i32.add (i32.const -1383720545)) + (i32.add (i32.const -1583897538)) + (i32.add (i32.const -3145480)) + (i32.add (i32.const 130935114)) + (i32.add (i32.const 934373311)) + (i32.add (i32.const 1064626651)) + (i32.add (i32.const 282386998)) + (i32.add (i32.const 1252127098)) + (i32.add (i32.const 2078124961)) + (i32.add (i32.const 1999363455)) + (i32.add (i32.const 194061981)) + (i32.add (i32.const -1932801333)) + (i32.add (i32.const -1876018785)) + (i32.add (i32.const -1521229379)) + (i32.add (i32.const 1867716653)) + (i32.add (i32.const -1775366044)) + (i32.add (i32.const 1110143662)) + (i32.add (i32.const 941741255)) + (i32.add (i32.const -1865877755)) + (i32.add (i32.const -609045850)) + (i32.add (i32.const -823865302)) + (i32.add (i32.const -1127693520)) + (i32.add (i32.const 1504363147)) + (i32.add (i32.const 929104181)) + (i32.add (i32.const 422943890)) + (i32.add (i32.const 1587204275)) + (i32.add (i32.const 1040287723)) + (i32.add (i32.const 887611725)) + (i32.add (i32.const 1425616729)) + (i32.add (i32.const 991170431)) + (i32.add (i32.const -1859348169)) + (i32.add (i32.const -1146017586)) + (i32.add (i32.const 1564640299)) + (i32.add (i32.const -927544123)) + (i32.add (i32.const 1011008312)) + (i32.add (i32.const -1888609596)) + (i32.add (i32.const 2108494031)) + (i32.add (i32.const 740963240)) + (i32.add (i32.const -1064454933)) + (i32.add (i32.const 1251433841)) + (i32.add (i32.const -359360524)) + (i32.add (i32.const -641591301)) + (i32.add (i32.const 1999163397)) + (i32.add (i32.const -475419535)) + (i32.add (i32.const -529397068)) + (i32.add (i32.const 347419540)) + (i32.add (i32.const -1974409564)) + (i32.add (i32.const -1305789755)) + (i32.add (i32.const -647675565)) + (i32.add (i32.const -177576863)) + (i32.add (i32.const 2105410237)) + (i32.add (i32.const 801009297)) + (i32.add (i32.const 603503390)) + (i32.add (i32.const -94810223)) + (i32.add (i32.const -2121157624)) + (i32.add (i32.const 2063384005)) + (i32.add (i32.const -1468220322)) + (i32.add (i32.const -734887309)) + (i32.add (i32.const 1516196936)) + (i32.add (i32.const 410880547)) + (i32.add (i32.const -1532763900)) + (i32.add (i32.const -1996374147)) + (i32.add (i32.const 1597577186)) + (i32.add (i32.const -1316810633)) + (i32.add (i32.const 1553229224)) + (i32.add (i32.const 1729748742)) + (i32.add (i32.const -366606573)) + (i32.add (i32.const 1014057648)) + (i32.add (i32.const 1672812994)) + (i32.add (i32.const 1234477921)) + (i32.add (i32.const 1804000585)) + (i32.add (i32.const -282127022)) + (i32.add (i32.const 645108818)) + (i32.add (i32.const 764883776)) + (i32.add (i32.const 1585541935)) + (i32.add (i32.const -1416991916)) + (i32.add (i32.const -1720255280)) + (i32.add (i32.const -1003695709)) + (i32.add (i32.const -525670188)) + (i32.add (i32.const -1108468657)) + (i32.add (i32.const -1476524460)) + (i32.add (i32.const -1649997275)) + (i32.add (i32.const 757038967)) + (i32.add (i32.const 1198746001)) + (i32.add (i32.const 107087392)) + (i32.add (i32.const -1600265106)) + (i32.add (i32.const -959790678)) + (i32.add (i32.const 1319803671)) + (i32.add (i32.const 1165834468)) + (i32.add (i32.const 543034290)) + (i32.add (i32.const -2137534330)) + (i32.add (i32.const -1447606098)) + (i32.add (i32.const 37870119)) + (i32.add (i32.const -1744327378)) + (i32.add (i32.const 260685729)) + (i32.add (i32.const -1634869100)) + (i32.add (i32.const 1772985846)) + (i32.add (i32.const -775694366)) + (i32.add (i32.const 250209860)) + (i32.add (i32.const 9799627)) + (i32.add (i32.const -2138078754)) + (i32.add (i32.const 1229532786)) + (i32.add (i32.const -1765101784)) + (i32.add (i32.const 2130645154)) + (i32.add (i32.const 1445556998)) + (i32.add (i32.const 728584747)) + (i32.add (i32.const -1350553746)) + (i32.add (i32.const -673624499)) + (i32.add (i32.const 1039078717)) + (i32.add (i32.const -2035643376)) + (i32.add (i32.const -82150096)) + (i32.add (i32.const -1686176125)) + (i32.add (i32.const -926344101)) + (i32.add (i32.const -1350403869)) + (i32.add (i32.const -141162556)) + (i32.add (i32.const 906553420)) + (i32.add (i32.const 1722288504)) + (i32.add (i32.const -922834148)) + (i32.add (i32.const -99455315)) + (i32.add (i32.const -1199303837)) + (i32.add (i32.const 979686940)) + (i32.add (i32.const 130138873)) + (i32.add (i32.const 1681919907)) + (i32.add (i32.const -1336546521)) + (i32.add (i32.const -1345343301)) + (i32.add (i32.const 357388626)) + (i32.add (i32.const -722289103)) + (i32.add (i32.const -1321840769)) + (i32.add (i32.const -481097425)) + (i32.add (i32.const 318983241)) + (i32.add (i32.const -173728861)) + (i32.add (i32.const -1846893643)) + (i32.add (i32.const 557980499)) + (i32.add (i32.const 1839296692)) + (i32.add (i32.const 1770268113)) + (i32.add (i32.const -704615601)) + (i32.add (i32.const -283413836)) + (i32.add (i32.const -774792713)) + (i32.add (i32.const 1855276928)) + (i32.add (i32.const 1471773425)) + (i32.add (i32.const -1547911304)) + (i32.add (i32.const -1226071165)) + (i32.add (i32.const 947205042)) + (i32.add (i32.const -653397535)) + (i32.add (i32.const -1269278992)) + (i32.add (i32.const -1708158312)) + (i32.add (i32.const 1286992286)) + (i32.add (i32.const 1601605463)) + (i32.add (i32.const -593352216)) + (i32.add (i32.const -2061050251)) + (i32.add (i32.const 1265624964)) + (i32.add (i32.const -1775917203)) + (i32.add (i32.const -914591175)) + (i32.add (i32.const -2027838845)) + (i32.add (i32.const 2056485060)) + (i32.add (i32.const -1969844316)) + (i32.add (i32.const 1391725522)) + (i32.add (i32.const -1312433364)) + (i32.add (i32.const 475300332)) + (i32.add (i32.const 791207241)) + (i32.add (i32.const 816418843)) + (i32.add (i32.const 277646171)) + (i32.add (i32.const 1324673122)) + (i32.add (i32.const -224770167)) + (i32.add (i32.const 1104099525)) + (i32.add (i32.const 726982981)) + (i32.add (i32.const -458706907)) + (i32.add (i32.const 48421239)) + (i32.add (i32.const 1006147001)) + (i32.add (i32.const 1058512731)) + (i32.add (i32.const -1808232275)) + (i32.add (i32.const 1589546799)) + (i32.add (i32.const 2050366524)) + (i32.add (i32.const -574108041)) + (i32.add (i32.const -916543733)) + (i32.add (i32.const -432837333)) + (i32.add (i32.const 312805295)) + (i32.add (i32.const 390251652)) + (i32.add (i32.const -721848933)) + (i32.add (i32.const 1542197209)) + (i32.add (i32.const 1104561494)) + (i32.add (i32.const -1039843194)) + (i32.add (i32.const -360392960)) + (i32.add (i32.const -140680151)) + (i32.add (i32.const 540502923)) + (i32.add (i32.const -673996874)) + (i32.add (i32.const 740053611)) + (i32.add (i32.const -1283933740)) + (i32.add (i32.const 399931640)) + (i32.add (i32.const -984133505)) + (i32.add (i32.const -380980166)) + (i32.add (i32.const 157003206)) + (i32.add (i32.const -2086187941)) + (i32.add (i32.const -1013242627)) + (i32.add (i32.const 1951264346)) + (i32.add (i32.const -1498766940)) + (i32.add (i32.const -757965001)) + (i32.add (i32.const -1451828558)) + (i32.add (i32.const 2020200220)) + (i32.add (i32.const 1756368585)) + (i32.add (i32.const 998035611)) + (i32.add (i32.const 1923905911)) + (i32.add (i32.const 60814906)) + (i32.add (i32.const -333885444)) + (i32.add (i32.const -1562920117)) + (i32.add (i32.const 1444576127)) + (i32.add (i32.const 22633617)) + (i32.add (i32.const 1310614742)) + (i32.add (i32.const -797229061)) + (i32.add (i32.const -1114552162)) + (i32.add (i32.const 1010991002)) + (i32.add (i32.const -1232370985)) + (i32.add (i32.const -753481658)) + (i32.add (i32.const 1991634163)) + (i32.add (i32.const 1299065315)) + (i32.add (i32.const -1171047843)) + (i32.add (i32.const -170251330)) + (i32.add (i32.const 196094713)) + (i32.add (i32.const -565735348)) + (i32.add (i32.const 1069519115)) + (i32.add (i32.const 1560544691)) + (i32.add (i32.const -318514304)) + (i32.add (i32.const -515430523)) + (i32.add (i32.const -354704245)) + (i32.add (i32.const 1855856603)) + (i32.add (i32.const -1835917748)) + (i32.add (i32.const -319050990)) + (i32.add (i32.const 402985389)) + (i32.add (i32.const -1981653160)) + (i32.add (i32.const 674549530)) + (i32.add (i32.const -681060566)) + (i32.add (i32.const -953547525)) + (i32.add (i32.const -1060486883)) + (i32.add (i32.const 96415952)) + (i32.add (i32.const 601093814)) + (i32.add (i32.const -1903609739)) + (i32.add (i32.const 1421939617)) + (i32.add (i32.const -1898525736)) + (i32.add (i32.const -1610760334)) + (i32.add (i32.const 479447340)) + (i32.add (i32.const 1327022557)) + (i32.add (i32.const -185520118)) + (i32.add (i32.const 1354953202)) + (i32.add (i32.const 1160329475)) + (i32.add (i32.const -2097623402)) + (i32.add (i32.const 203675278)) + (i32.add (i32.const 930942272)) + (i32.add (i32.const -1235601544)) + (i32.add (i32.const 903050968)) + (i32.add (i32.const -1446700783)) + (i32.add (i32.const -895612623)) + (i32.add (i32.const 1353796058)) + (i32.add (i32.const -2099637479)) + (i32.add (i32.const 1964582083)) + (i32.add (i32.const -2116309410)) + (i32.add (i32.const -666340420)) + (i32.add (i32.const 1913671907)) + (i32.add (i32.const -836266908)) + (i32.add (i32.const 941045777)) + (i32.add (i32.const 629347766)) + (i32.add (i32.const -884470920)) + (i32.add (i32.const 957112554)) + (i32.add (i32.const 602754990)) + (i32.add (i32.const -303895936)) + (i32.add (i32.const 773740183)) + (i32.add (i32.const 606081326)) + (i32.add (i32.const 78520711)) + (i32.add (i32.const -1911988971)) + (i32.add (i32.const -437218912)) + (i32.add (i32.const 304808377)) + (i32.add (i32.const -1705096074)) + (i32.add (i32.const -213980426)) + (i32.add (i32.const 1677357275)) + (i32.add (i32.const -644371930)) + (i32.add (i32.const 2075680941)) + (i32.add (i32.const -1872125626)) + (i32.add (i32.const -1213541413)) + (i32.add (i32.const -2031034578)) + (i32.add (i32.const 1775954888)) + (i32.add (i32.const 1244179370)) + (i32.add (i32.const 262021171)) + (i32.add (i32.const 1865719961)) + (i32.add (i32.const -1288174033)) + (i32.add (i32.const 178480248)) + (i32.add (i32.const 970419676)) + (i32.add (i32.const 419388549)) + (i32.add (i32.const -794287412)) + (i32.add (i32.const -994855166)) + (i32.add (i32.const -300507698)) + (i32.add (i32.const 1175408621)) + (i32.add (i32.const -1518470486)) + (i32.add (i32.const 350035809)) + (i32.add (i32.const -1622619270)) + (i32.add (i32.const -207566928)) + (i32.add (i32.const 932258215)) + (i32.add (i32.const -276123960)) + (i32.add (i32.const -2080584624)) + (i32.add (i32.const 1784990244)) + (i32.add (i32.const 1942219689)) + (i32.add (i32.const -1985488937)) + (i32.add (i32.const -434670380)) + (i32.add (i32.const 801979221)) + (i32.add (i32.const 620054727)) + (i32.add (i32.const 62337587)) + (i32.add (i32.const -1671295569)) + (i32.add (i32.const -1231104871)) + (i32.add (i32.const 617691563)) + (i32.add (i32.const -2069338226)) + (i32.add (i32.const -58697494)) + (i32.add (i32.const -1196924507)) + (i32.add (i32.const 3707949)) + (i32.add (i32.const -821867325)) + (i32.add (i32.const -2092363939)) + (i32.add (i32.const 134896899)) + (i32.add (i32.const 2084871762)) + (i32.add (i32.const 210121211)) + (i32.add (i32.const 1640815132)) + (i32.add (i32.const -209246891)) + (i32.add (i32.const -1204903697)) + (i32.add (i32.const -2066092125)) + (i32.add (i32.const 1419626700)) + (i32.add (i32.const -815485338)) + (i32.add (i32.const 297801139)) + (i32.add (i32.const -813140778)) + (i32.add (i32.const 1202046266)) + (i32.add (i32.const 887154643)) + (i32.add (i32.const -497759913)) + (i32.add (i32.const 1103793907)) + (i32.add (i32.const 1256700751)) + (i32.add (i32.const 1492960353)) + (i32.add (i32.const -1270421336)) + (i32.add (i32.const 241565181)) + (i32.add (i32.const -2018184591)) + (i32.add (i32.const -875730777)) + (i32.add (i32.const -66704489)) + (i32.add (i32.const 353186164)) + (i32.add (i32.const 2008088531)) + (i32.add (i32.const -70567652)) + (i32.add (i32.const -1769191607)) + (i32.add (i32.const -1430676087)) + (i32.add (i32.const 1501378222)) + (i32.add (i32.const -307214256)) + (i32.add (i32.const 984650026)) + (i32.add (i32.const 2098158407)) + (i32.add (i32.const -205489881)) + (i32.add (i32.const -1485536932)) + (i32.add (i32.const -658862867)) + (i32.add (i32.const 1445908773)) + (i32.add (i32.const 652860568)) + (i32.add (i32.const -359310430)) + (i32.add (i32.const 482128704)) + (i32.add (i32.const -392551750)) + (i32.add (i32.const -156383438)) + (i32.add (i32.const -898508763)) + (i32.add (i32.const -1215805126)) + (i32.add (i32.const -138604304)) + (i32.add (i32.const -538869152)) + (i32.add (i32.const 1552645821)) + (i32.add (i32.const -570531060)) + (i32.add (i32.const -1284722811)) + (i32.add (i32.const 1985281274)) + (i32.add (i32.const 777231024)) + (i32.add (i32.const -820055029)) + (i32.add (i32.const -1467283961)) + (i32.add (i32.const -1291388044)) + (i32.add (i32.const 1140724488)) + (i32.add (i32.const 1901919269)) + (i32.add (i32.const -1002100487)) + (i32.add (i32.const -710907673)) + (i32.add (i32.const -1469095860)) + (i32.add (i32.const 344835381)) + (i32.add (i32.const -453104918)) + (i32.add (i32.const -1939519017)) + (i32.add (i32.const -1284873922)) + (i32.add (i32.const -730271486)) + (i32.add (i32.const -862503046)) + (i32.add (i32.const -828211060)) + (i32.add (i32.const -930283277)) + (i32.add (i32.const 1867527064)) + (i32.add (i32.const -1025768881)) + (i32.add (i32.const -1555199053)) + (i32.add (i32.const -542392739)) + (i32.add (i32.const -19550973)) + (i32.add (i32.const -1671614812)) + (i32.add (i32.const 1062145848)) + (i32.add (i32.const 1413563954)) + (i32.add (i32.const -1357322865)) + (i32.add (i32.const 164943488)) + (i32.add (i32.const 951748462)) + (i32.add (i32.const -969203675)) + (i32.add (i32.const -498908778)) + (i32.add (i32.const -122630003)) + (i32.add (i32.const -310772056)) + (i32.add (i32.const 802836634)) + (i32.add (i32.const 1944351418)) + (i32.add (i32.const -293817557)) + (i32.add (i32.const 1811274205)) + (i32.add (i32.const 1595687076)) + (i32.add (i32.const 924646566)) + (i32.add (i32.const -112750791)) + (i32.add (i32.const 1604406006)) + (i32.add (i32.const -1447431887)) + (i32.add (i32.const 290966416)) + (i32.add (i32.const 650221514)) + (i32.add (i32.const -475524805)) + (i32.add (i32.const 2015724702)) + (i32.add (i32.const 1952090085)) + (i32.add (i32.const 119920695)) + (i32.add (i32.const 1496873233)) + (i32.add (i32.const -1228205520)) + (i32.add (i32.const -619293941)) + (i32.add (i32.const -1886292864)) + (i32.add (i32.const 1401367477)) + (i32.add (i32.const 107614122)) + (i32.add (i32.const 1995017479)) + (i32.add (i32.const -1850836723)) + (i32.add (i32.const 1781493101)) + (i32.add (i32.const -1105669769)) + (i32.add (i32.const -1955212580)) + (i32.add (i32.const -1094428609)) + (i32.add (i32.const 499205234)) + (i32.add (i32.const -141638056)) + (i32.add (i32.const -1573233173)) + (i32.add (i32.const 1461593879)) + (i32.add (i32.const -1973597310)) + (i32.add (i32.const -1120679879)) + (i32.add (i32.const 2053836207)) + (i32.add (i32.const -1680363881)) + (i32.add (i32.const -406516358)) + (i32.add (i32.const -1636093345)) + (i32.add (i32.const -361792597)) + (i32.add (i32.const -1133581038)) + (i32.add (i32.const 1776163606)) + (i32.add (i32.const 229514637)) + (i32.add (i32.const -572326461)) + (i32.add (i32.const -1152082373)) + (i32.add (i32.const 1038944437)) + (i32.add (i32.const -1685749360)) + (i32.add (i32.const 1502671542)) + (i32.add (i32.const 586893318)) + (i32.add (i32.const 982290440)) + (i32.add (i32.const 1358046782)) + (i32.add (i32.const -1972682382)) + (i32.add (i32.const 1444190549)) + (i32.add (i32.const 618215436)) + (i32.add (i32.const 283023848)) + (i32.add (i32.const -1697256007)) + (i32.add (i32.const -1695074724)) + (i32.add (i32.const 405814181)) + (i32.add (i32.const -211771813)) + (i32.add (i32.const -239547658)) + (i32.add (i32.const -927943362)) + (i32.add (i32.const -988206936)) + (i32.add (i32.const -831623468)) + (i32.add (i32.const -1131618064)) + (i32.add (i32.const -1296186548)) + (i32.add (i32.const 78820228)) + (i32.add (i32.const -48980283)) + (i32.add (i32.const 357675787)) + (i32.add (i32.const 1987275868)) + (i32.add (i32.const -1022545200)) + (i32.add (i32.const -1430304819)) + (i32.add (i32.const 1414255163)) + (i32.add (i32.const 1849969031)) + (i32.add (i32.const 2094014836)) + (i32.add (i32.const 427918699)) + (i32.add (i32.const 1153789839)) + (i32.add (i32.const -1536223396)) + (i32.add (i32.const -504006089)) + (i32.add (i32.const 1931433286)) + (i32.add (i32.const -1002689559)) + (i32.add (i32.const -12391492)) + (i32.add (i32.const 1411764359)) + (i32.add (i32.const -66631392)) + (i32.add (i32.const 2104308654)) + (i32.add (i32.const -1945043959)) + (i32.add (i32.const -1381951350)) + (i32.add (i32.const 1083471813)) + (i32.add (i32.const 1671241122)) + (i32.add (i32.const 713512464)) + (i32.add (i32.const 129995293)) + (i32.add (i32.const 2140608433)) + (i32.add (i32.const 339204910)) + (i32.add (i32.const 2061879167)) + (i32.add (i32.const -407440979)) + (i32.add (i32.const 1161654281)) + (i32.add (i32.const 1693068480)) + (i32.add (i32.const 411966836)) + (i32.add (i32.const 1741130223)) + (i32.add (i32.const 293631026)) + (i32.add (i32.const 295456178)) + (i32.add (i32.const 208803954)) + (i32.add (i32.const -853333155)) + (i32.add (i32.const -625055699)) + (i32.add (i32.const -1050419755)) + (i32.add (i32.const -82446714)) + (i32.add (i32.const 1338051512)) + (i32.add (i32.const 346055339)) + (i32.add (i32.const 2041419617)) + (i32.add (i32.const 1223369182)) + (i32.add (i32.const 1064785218)) + (i32.add (i32.const -938276593)) + (i32.add (i32.const 861830385)) + (i32.add (i32.const 346762308)) + (i32.add (i32.const 653188260)) + (i32.add (i32.const -2117208815)) + (i32.add (i32.const -197518694)) + (i32.add (i32.const 979051870)) + (i32.add (i32.const 540625155)) + (i32.add (i32.const 822291102)) + (i32.add (i32.const -1696649206)) + (i32.add (i32.const 1894408979)) + (i32.add (i32.const -489112625)) + (i32.add (i32.const 1107014520)) + (i32.add (i32.const 832828697)) + (i32.add (i32.const 1494007878)) + (i32.add (i32.const 1695216475)) + (i32.add (i32.const 732381207)) + (i32.add (i32.const -1214806004)) + (i32.add (i32.const -906129241)) + (i32.add (i32.const 1698588907)) + (i32.add (i32.const -606329172)) + (i32.add (i32.const -770566508)) + (i32.add (i32.const -41512341)) + (i32.add (i32.const -1885660871)) + (i32.add (i32.const -1108132638)) + (i32.add (i32.const 257369675)) + (i32.add (i32.const 250983353)) + (i32.add (i32.const -18415317)) + (i32.add (i32.const -2067177044)) + (i32.add (i32.const -55789029)) + (i32.add (i32.const -669606008)) + (i32.add (i32.const -1915952401)) + (i32.add (i32.const 1696218467)) + (i32.add (i32.const -1737519140)) + (i32.add (i32.const -136142522)) + (i32.add (i32.const 184786719)) + (i32.add (i32.const -940673706)) + (i32.add (i32.const -1818703085)) + (i32.add (i32.const 1363280394)) + (i32.add (i32.const -1426856793)) + (i32.add (i32.const 860102554)) + (i32.add (i32.const 145439221)) + (i32.add (i32.const -1974640699)) + (i32.add (i32.const 1903254377)) + (i32.add (i32.const -427199184)) + (i32.add (i32.const -298753262)) + (i32.add (i32.const 1759798291)) + (i32.add (i32.const -430138330)) + (i32.add (i32.const 2001778422)) + (i32.add (i32.const -1508493198)) + (i32.add (i32.const -1899530501)) + (i32.add (i32.const 1165443016)) + (i32.add (i32.const 1476979510)) + (i32.add (i32.const -1849591606)) + (i32.add (i32.const 183366325)) + (i32.add (i32.const 797997223)) + (i32.add (i32.const -726063459)) + (i32.add (i32.const 2036130771)) + (i32.add (i32.const -1167844976)) + (i32.add (i32.const -1117324264)) + (i32.add (i32.const -1389223544)) + (i32.add (i32.const -1737401134)) + (i32.add (i32.const 265734031)) + (i32.add (i32.const 1458066329)) + (i32.add (i32.const -1330081647)) + (i32.add (i32.const -1062336277)) + (i32.add (i32.const 2053048001)) + (i32.add (i32.const 1310848270)) + (i32.add (i32.const -671229241)) + (i32.add (i32.const 714488975)) + (i32.add (i32.const -486319617)) + (i32.add (i32.const 1552286690)) + (i32.add (i32.const 786990702)) + (i32.add (i32.const -1533149631)) + (i32.add (i32.const 1131228266)) + (i32.add (i32.const 1073564037)) + (i32.add (i32.const 1480425655)) + (i32.add (i32.const -1600062364)) + (i32.add (i32.const 2051182409)) + (i32.add (i32.const 1999849283)) + (i32.add (i32.const 1865034935)) + (i32.add (i32.const 461506546)) + (i32.add (i32.const 333935097)) + (i32.add (i32.const -43855917)) + (i32.add (i32.const 430612966)) + (i32.add (i32.const 1550972783)) + (i32.add (i32.const -1419578090)) + (i32.add (i32.const 2084140966)) + (i32.add (i32.const 215728226)) + (i32.add (i32.const 888554590)) + (i32.add (i32.const 1769078297)) + (i32.add (i32.const 1876078416)) + (i32.add (i32.const -1229127612)) + (i32.add (i32.const -913010888)) + (i32.add (i32.const -1509471140)) + (i32.add (i32.const -1251930688)) + (i32.add (i32.const -1133977054)) + (i32.add (i32.const -1512071535)) + (i32.add (i32.const -468540448)) + (i32.add (i32.const 679433709)) + (i32.add (i32.const -1372437047)) + (i32.add (i32.const 1967926251)) + (i32.add (i32.const -1007534924)) + (i32.add (i32.const -1141214428)) + (i32.add (i32.const 466773004)) + (i32.add (i32.const -1029512186)) + (i32.add (i32.const -698897682)) + (i32.add (i32.const -2130227180)) + (i32.add (i32.const -269932942)) + (i32.add (i32.const 202959453)) + (i32.add (i32.const -1398249952)) + (i32.add (i32.const -1161463692)) + (i32.add (i32.const 672844960)) + (i32.add (i32.const 1549314718)) + (i32.add (i32.const 744985301)) + (i32.add (i32.const -417278883)) + (i32.add (i32.const -522977956)) + (i32.add (i32.const -1128792456)) + (i32.add (i32.const -520088965)) + (i32.add (i32.const 2069902137)) + (i32.add (i32.const -829235699)) + (i32.add (i32.const 1244893526)) + (i32.add (i32.const 458082254)) + (i32.add (i32.const 91047040)) + (i32.add (i32.const -301370109)) + (i32.add (i32.const -724765784)) + (i32.add (i32.const -665217590)) + (i32.add (i32.const 721917253)) + (i32.add (i32.const -410569558)) + (i32.add (i32.const -1738092592)) + (i32.add (i32.const 887738914)) + (i32.add (i32.const 1958047978)) + (i32.add (i32.const 1744227942)) + (i32.add (i32.const -319281150)) + (i32.add (i32.const -1517627801)) + (i32.add (i32.const -403250568)) + (i32.add (i32.const 1445015996)) + (i32.add (i32.const 718258185)) + (i32.add (i32.const 1213074015)) + (i32.add (i32.const 1476169047)) + (i32.add (i32.const -237512222)) + (i32.add (i32.const 1825945934)) + (i32.add (i32.const -556447681)) + (i32.add (i32.const 515812264)) + (i32.add (i32.const 1731180528)) + (i32.add (i32.const -1877397550)) + (i32.add (i32.const -1298184555)) + (i32.add (i32.const 1923626351)) + (i32.add (i32.const 1017882186)) + (i32.add (i32.const -646801578)) + (i32.add (i32.const -626898858)) + (i32.add (i32.const -216943921)) + (i32.add (i32.const 40982269)) + (i32.add (i32.const -1414409582)) + (i32.add (i32.const -285551713)) + (i32.add (i32.const 2035275693)) + (i32.add (i32.const 1359093033)) + (i32.add (i32.const 133803686)) + (i32.add (i32.const -1315325189)) + (i32.add (i32.const 1568895497)) + (i32.add (i32.const -1621080025)) + (i32.add (i32.const -1635155254)) + (i32.add (i32.const 504866199)) + (i32.add (i32.const -263268244)) + (i32.add (i32.const -1596166855)) + (i32.add (i32.const 746090725)) + (i32.add (i32.const -1202192691)) + (i32.add (i32.const 374061587)) + (i32.add (i32.const 819044828)) + (i32.add (i32.const -1768493790)) + (i32.add (i32.const -689993386)) + (i32.add (i32.const -1518845730)) + (i32.add (i32.const 941662787)) + (i32.add (i32.const -990140328)) + (i32.add (i32.const 1015415517)) + (i32.add (i32.const -1119558511)) + (i32.add (i32.const 1146975323)) + (i32.add (i32.const 1615637299)) + (i32.add (i32.const 1127749187)) + (i32.add (i32.const -917838449)) + (i32.add (i32.const -1302220)) + (i32.add (i32.const -398960025)) + (i32.add (i32.const 1992332355)) + (i32.add (i32.const -1510668272)) + (i32.add (i32.const 614404086)) + (i32.add (i32.const 943632319)) + (i32.add (i32.const -522935185)) + (i32.add (i32.const 1472070092)) + (i32.add (i32.const 1987321698)) + (i32.add (i32.const -639384389)) + (i32.add (i32.const -1416328944)) + (i32.add (i32.const -1089717182)) + (i32.add (i32.const 2003476785)) + (i32.add (i32.const 514509127)) + (i32.add (i32.const 830996861)) + (i32.add (i32.const -74835753)) + (i32.add (i32.const 1629321662)) + (i32.add (i32.const 489442173)) + (i32.add (i32.const -173139351)) + (i32.add (i32.const -284025581)) + (i32.add (i32.const 416854195)) + (i32.add (i32.const -837012044)) + (i32.add (i32.const 774995280)) + (i32.add (i32.const -1287226421)) + (i32.add (i32.const -955958223)) + (i32.add (i32.const 305994522)) + (i32.add (i32.const 401609004)) + (i32.add (i32.const -1081289564)) + (i32.add (i32.const 2026011384)) + (i32.add (i32.const -1497330840)) + (i32.add (i32.const -1006559754)) + (i32.add (i32.const 1096305842)) + (i32.add (i32.const 1401176830)) + (i32.add (i32.const -963266056)) + (i32.add (i32.const -1524770383)) + (i32.add (i32.const 1865455796)) + (i32.add (i32.const -1812654038)) + (i32.add (i32.const -413746376)) + (i32.add (i32.const -1267594817)) + (i32.add (i32.const -1200567669)) + (i32.add (i32.const 2124005641)) + (i32.add (i32.const 273466891)) + (i32.add (i32.const -779168052)) + (i32.add (i32.const -1281198684)) + (i32.add (i32.const -1168973860)) + (i32.add (i32.const 1090469377)) + (i32.add (i32.const -1386275987)) + (i32.add (i32.const -569323295)) + (i32.add (i32.const -1406812680)) + (i32.add (i32.const 308661234)) + (i32.add (i32.const 547673938)) + (i32.add (i32.const 23113954)) + (i32.add (i32.const -1449084412)) + (i32.add (i32.const 819983374)) + (i32.add (i32.const 665303339)) + (i32.add (i32.const 1785266982)) + (i32.add (i32.const 1636153535)) + (i32.add (i32.const 1773422591)) + (i32.add (i32.const -1715552120)) + (i32.add (i32.const -254316660)) + (i32.add (i32.const 121653959)) + (i32.add (i32.const 674601009)) + (i32.add (i32.const -339680013)) + (i32.add (i32.const 1862345469)) + (i32.add (i32.const 786028586)) + (i32.add (i32.const 2114402610)) + (i32.add (i32.const -227589811)) + (i32.add (i32.const -1224716796)) + (i32.add (i32.const -1365431723)) + (i32.add (i32.const 2094552602)) + (i32.add (i32.const -1219612158)) + (i32.add (i32.const 254807388)) + (i32.add (i32.const 1741756275)) + (i32.add (i32.const 1531319530)) + (i32.add (i32.const 1399692964)) + (i32.add (i32.const 2027480443)) + (i32.add (i32.const 760945487)) + (i32.add (i32.const 954446754)) + (i32.add (i32.const 1682677896)) + (i32.add (i32.const 1011758867)) + (i32.add (i32.const 410237901)) + (i32.add (i32.const 1391445564)) + (i32.add (i32.const 1685109070)) + (i32.add (i32.const -420552040)) + (i32.add (i32.const -63029573)) + (i32.add (i32.const 1632747263)) + (i32.add (i32.const -300394826)) + (i32.add (i32.const -924375230)) + (i32.add (i32.const 798134600)) + (i32.add (i32.const -1286796066)) + (i32.add (i32.const -471086168)) + (i32.add (i32.const -607573727)) + (i32.add (i32.const 250161812)) + (i32.add (i32.const 1581218226)) + (i32.add (i32.const -210679577)) + (i32.add (i32.const 1477195491)) + (i32.add (i32.const -1725915128)) + (i32.add (i32.const 187074575)) + (i32.add (i32.const -917134068)) + (i32.add (i32.const 523889817)) + (i32.add (i32.const -1922624151)) + (i32.add (i32.const 174027733)) + (i32.add (i32.const 225835258)) + (i32.add (i32.const 1906079796)) + (i32.add (i32.const -132244985)) + (i32.add (i32.const -1967983262)) + (i32.add (i32.const 734325951)) + (i32.add (i32.const 957607165)) + (i32.add (i32.const -1757927158)) + (i32.add (i32.const -2106184919)) + (i32.add (i32.const -497990665)) + (i32.add (i32.const -131880671)) + (i32.add (i32.const 1285588551)) + (i32.add (i32.const 1828364159)) + (i32.add (i32.const -507461811)) + (i32.add (i32.const 2110368712)) + (i32.add (i32.const -1101691830)) + (i32.add (i32.const -512186293)) + (i32.add (i32.const -511778774)) + (i32.add (i32.const -1970551828)) + (i32.add (i32.const 1588581213)) + (i32.add (i32.const 973439962)) + (i32.add (i32.const -234791985)) + (i32.add (i32.const -1026471609)) + (i32.add (i32.const 456386576)) + (i32.add (i32.const -1463922965)) + (i32.add (i32.const -433587503)) + (i32.add (i32.const -1426546825)) + (i32.add (i32.const -923254832)) + (i32.add (i32.const -1980766939)) + (i32.add (i32.const 1384315059)) + (i32.add (i32.const -648113885)) + (i32.add (i32.const -1035226768)) + (i32.add (i32.const 690352100)) + (i32.add (i32.const 355535108)) + (i32.add (i32.const 297689526)) + (i32.add (i32.const -533405016)) + (i32.add (i32.const -1857845368)) + (i32.add (i32.const -1426970342)) + (i32.add (i32.const 88623462)) + (i32.add (i32.const -1736217779)) + (i32.add (i32.const 300552285)) + (i32.add (i32.const 834901333)) + (i32.add (i32.const 2084549951)) + (i32.add (i32.const -1454519862)) + (i32.add (i32.const 1586629368)) + (i32.add (i32.const -687476841)) + (i32.add (i32.const 1935727759)) + (i32.add (i32.const -273269274)) + (i32.add (i32.const 1835516876)) + (i32.add (i32.const -221002158)) + (i32.add (i32.const -786440231)) + (i32.add (i32.const -1124301966)) + (i32.add (i32.const -1514530555)) + (i32.add (i32.const -1880199028)) + (i32.add (i32.const 261256214)) + (i32.add (i32.const 1174156215)) + (i32.add (i32.const 901027468)) + (i32.add (i32.const 98305689)) + (i32.add (i32.const -217443806)) + (i32.add (i32.const 1132014149)) + (i32.add (i32.const 844595851)) + (i32.add (i32.const -488607408)) + (i32.add (i32.const 601108588)) + (i32.add (i32.const 895839436)) + (i32.add (i32.const 1209637071)) + (i32.add (i32.const 587047103)) + (i32.add (i32.const 1875791753)) + (i32.add (i32.const 493652080)) + (i32.add (i32.const -348081571)) + (i32.add (i32.const 2039165814)) + (i32.add (i32.const -58530106)) + (i32.add (i32.const 520648575)) + (i32.add (i32.const 1539299251)) + (i32.add (i32.const -228210802)) + (i32.add (i32.const -449349712)) + (i32.add (i32.const 1641290202)) + (i32.add (i32.const 413523400)) + (i32.add (i32.const 671352082)) + (i32.add (i32.const -168887453)) + (i32.add (i32.const 1629665136)) + (i32.add (i32.const -528942844)) + (i32.add (i32.const -1232831153)) + (i32.add (i32.const 1765846905)) + (i32.add (i32.const -350358825)) + (i32.add (i32.const -151119636)) + (i32.add (i32.const 76345992)) + (i32.add (i32.const 1311137351)) + (i32.add (i32.const -2131828142)) + (i32.add (i32.const 894241941)) + (i32.add (i32.const 189630451)) + (i32.add (i32.const -1088804176)) + (i32.add (i32.const -1473304562)) + (i32.add (i32.const -13298114)) + (i32.add (i32.const 371300688)) + (i32.add (i32.const 1450194208)) + (i32.add (i32.const 502212480)) + (i32.add (i32.const -59302891)) + (i32.add (i32.const -1439788125)) + (i32.add (i32.const 1612804750)) + (i32.add (i32.const 1733487579)) + (i32.add (i32.const -1894817763)) + (i32.add (i32.const -1925278881)) + (i32.add (i32.const 1420980214)) + (i32.add (i32.const -26776947)) + (i32.add (i32.const 1855326364)) + (i32.add (i32.const 1732285574)) + (i32.add (i32.const 613422870)) + (i32.add (i32.const -1398781612)) + (i32.add (i32.const -1165722858)) + (i32.add (i32.const 561264313)) + (i32.add (i32.const 1630689287)) + (i32.add (i32.const -988620549)) + (i32.add (i32.const 1988786059)) + (i32.add (i32.const -373182007)) + (i32.add (i32.const 1700693469)) + (i32.add (i32.const 938176532)) + (i32.add (i32.const 1318651866)) + (i32.add (i32.const -236563455)) + (i32.add (i32.const -1415650556)) + (i32.add (i32.const -1380287194)) + (i32.add (i32.const -794147190)) + (i32.add (i32.const -47422548)) + (i32.add (i32.const -328903721)) + (i32.add (i32.const 1823064556)) + (i32.add (i32.const 1953111807)) + (i32.add (i32.const -400795597)) + (i32.add (i32.const -1832271886)) + (i32.add (i32.const 521904293)) + (i32.add (i32.const -1816665049)) + (i32.add (i32.const -867126668)) + (i32.add (i32.const 1458239368)) + (i32.add (i32.const 377214921)) + (i32.add (i32.const 1872358965)) + (i32.add (i32.const -1080902880)) + (i32.add (i32.const -1296712925)) + (i32.add (i32.const 157159015)) + (i32.add (i32.const -257808050)) + (i32.add (i32.const -1219099967)) + (i32.add (i32.const -1614654518)) + (i32.add (i32.const 371274857)) + (i32.add (i32.const -584526967)) + (i32.add (i32.const 219276905)) + (i32.add (i32.const 350371041)) + (i32.add (i32.const 2090168394)) + (i32.add (i32.const -1750585414)) + (i32.add (i32.const -676611861)) + (i32.add (i32.const 903630953)) + (i32.add (i32.const -1990978709)) + (i32.add (i32.const -1407196663)) + (i32.add (i32.const 820532728)) + (i32.add (i32.const 1143757233)) + (i32.add (i32.const 963504168)) + (i32.add (i32.const -172536916)) + (i32.add (i32.const 1832745141)) + (i32.add (i32.const -1287673437)) + (i32.add (i32.const 419587528)) + (i32.add (i32.const 1249338754)) + (i32.add (i32.const -1808560399)) + (i32.add (i32.const 620137892)) + (i32.add (i32.const -602897110)) + (i32.add (i32.const 918026918)) + (i32.add (i32.const 324469999)) + (i32.add (i32.const -1602336163)) + (i32.add (i32.const 402160770)) + (i32.add (i32.const 470020470)) + (i32.add (i32.const -147702877)) + (i32.add (i32.const -1941074630)) + (i32.add (i32.const -1788638418)) + (i32.add (i32.const 631173433)) + (i32.add (i32.const -1777673137)) + (i32.add (i32.const -904635658)) + (i32.add (i32.const -1140810048)) + (i32.add (i32.const -1405823162)) + (i32.add (i32.const 1423129387)) + (i32.add (i32.const 1098399657)) + (i32.add (i32.const -172994209)) + (i32.add (i32.const -373680813)) + (i32.add (i32.const -159595860)) + (i32.add (i32.const -935705153)) + (i32.add (i32.const 1940242816)) + (i32.add (i32.const 346256570)) + (i32.add (i32.const -726155664)) + (i32.add (i32.const 906739047)) + (i32.add (i32.const 320483180)) + (i32.add (i32.const -1750729981)) + (i32.add (i32.const 1465328832)) + (i32.add (i32.const -430632026)) + (i32.add (i32.const 1862040146)) + (i32.add (i32.const 1422223897)) + (i32.add (i32.const 202077194)) + (i32.add (i32.const -136556836)) + (i32.add (i32.const 2055914855)) + (i32.add (i32.const -731086147)) + (i32.add (i32.const -788396671)) + (i32.add (i32.const -644879283)) + (i32.add (i32.const -952549902)) + (i32.add (i32.const -353127625)) + (i32.add (i32.const 4675814)) + (i32.add (i32.const -1531304138)) + (i32.add (i32.const -1832684432)) + (i32.add (i32.const 648636504)) + (i32.add (i32.const 1178902300)) + (i32.add (i32.const -1615657377)) + (i32.add (i32.const 933777385)) + (i32.add (i32.const 438395134)) + (i32.add (i32.const -1742088034)) + (i32.add (i32.const 531357132)) + (i32.add (i32.const 1324320026)) + (i32.add (i32.const 1990737563)) + (i32.add (i32.const -467347936)) + (i32.add (i32.const 1671159568)) + (i32.add (i32.const -1423592698)) + (i32.add (i32.const -1721187709)) + (i32.add (i32.const -1417294809)) + (i32.add (i32.const 1486896323)) + (i32.add (i32.const -1117859613)) + (i32.add (i32.const -600087077)) + (i32.add (i32.const 1529670411)) + (i32.add (i32.const -414700018)) + (i32.add (i32.const 1449497025)) + (i32.add (i32.const 302807394)) + (i32.add (i32.const 963579173)) + (i32.add (i32.const -1045198967)) + (i32.add (i32.const -1904999167)) + (i32.add (i32.const 199368101)) + (i32.add (i32.const -793939462)) + (i32.add (i32.const 393839810)) + (i32.add (i32.const -535164490)) + (i32.add (i32.const -1563949029)) + (i32.add (i32.const 1852314019)) + (i32.add (i32.const -1238407982)) + (i32.add (i32.const -1904817739)) + (i32.add (i32.const -32731272)) + (i32.add (i32.const -1612899294)) + (i32.add (i32.const 609691853)) + (i32.add (i32.const 305271794)) + (i32.add (i32.const -1006038795)) + (i32.add (i32.const -392687557)) + (i32.add (i32.const -1034017805)) + (i32.add (i32.const 777803478)) + (i32.add (i32.const -1455538941)) + (i32.add (i32.const 1376486797)) + (i32.add (i32.const -2112611811)) + (i32.add (i32.const 699927155)) + (i32.add (i32.const 609568371)) + (i32.add (i32.const 2020653228)) + (i32.add (i32.const -1074479492)) + (i32.add (i32.const 1596233159)) + (i32.add (i32.const 56907922)) + (i32.add (i32.const 2002628947)) + (i32.add (i32.const -502279605)) + (i32.add (i32.const -271860838)) + (i32.add (i32.const -1584448777)) + (i32.add (i32.const -427206101)) + (i32.add (i32.const 1260901457)) + (i32.add (i32.const 1121518581)) + (i32.add (i32.const 865405722)) + (i32.add (i32.const -1374492371)) + (i32.add (i32.const 865512051)) + (i32.add (i32.const -1771546005)) + (i32.add (i32.const 435150005)) + (i32.add (i32.const -1645387160)) + (i32.add (i32.const 829339459)) + (i32.add (i32.const 311413430)) + (i32.add (i32.const -735688887)) + (i32.add (i32.const -1230297194)) + (i32.add (i32.const 1671607842)) + (i32.add (i32.const -1203928446)) + (i32.add (i32.const -533372522)) + (i32.add (i32.const -2109810673)) + (i32.add (i32.const 168307620)) + (i32.add (i32.const -315085194)) + (i32.add (i32.const 1897538249)) + (i32.add (i32.const 588671886)) + (i32.add (i32.const 2033983037)) + (i32.add (i32.const -182811542)) + (i32.add (i32.const 1675610636)) + (i32.add (i32.const 834795177)) + (i32.add (i32.const 1543883909)) + (i32.add (i32.const 1719405653)) + (i32.add (i32.const 1535922870)) + (i32.add (i32.const -371226716)) + (i32.add (i32.const 1794869467)) + (i32.add (i32.const -913318512)) + (i32.add (i32.const -1771324343)) + (i32.add (i32.const 571549696)) + (i32.add (i32.const -974107547)) + (i32.add (i32.const 58178214)) + (i32.add (i32.const 1362036963)) + (i32.add (i32.const 828352157)) + (i32.add (i32.const 1399442681)) + (i32.add (i32.const 2097066228)) + (i32.add (i32.const -1430603091)) + (i32.add (i32.const -147317327)) + (i32.add (i32.const -231117288)) + (i32.add (i32.const -95964552)) + (i32.add (i32.const 179931832)) + (i32.add (i32.const -1379601311)) + (i32.add (i32.const 730893172)) + (i32.add (i32.const 43842348)) + (i32.add (i32.const 272902774)) + (i32.add (i32.const -1251229324)) + (i32.add (i32.const -1651644931)) + (i32.add (i32.const 1747561527)) + (i32.add (i32.const -1676930837)) + (i32.add (i32.const 1070254252)) + (i32.add (i32.const -1185574233)) + (i32.add (i32.const -1626941020)) + (i32.add (i32.const 1765419192)) + (i32.add (i32.const -1476694190)) + (i32.add (i32.const -1144283728)) + (i32.add (i32.const -608689506)) + (i32.add (i32.const 658170793)) + (i32.add (i32.const 1357800336)) + (i32.add (i32.const 280256910)) + (i32.add (i32.const -245209919)) + (i32.add (i32.const -1285568399)) + (i32.add (i32.const -403822123)) + (i32.add (i32.const -523700606)) + (i32.add (i32.const -748614525)) + (i32.add (i32.const -295173895)) + (i32.add (i32.const -1279882751)) + (i32.add (i32.const -660019803)) + (i32.add (i32.const 758271441)) + (i32.add (i32.const -992871288)) + (i32.add (i32.const 1851067764)) + (i32.add (i32.const -4952740)) + (i32.add (i32.const -1703787089)) + (i32.add (i32.const 77609561)) + (i32.add (i32.const -1205493792)) + (i32.add (i32.const -735957074)) + (i32.add (i32.const 607245011)) + (i32.add (i32.const -1467952084)) + (i32.add (i32.const -1848652167)) + (i32.add (i32.const -1591770928)) + (i32.add (i32.const -409981511)) + (i32.add (i32.const -1430923871)) + (i32.add (i32.const 296845154)) + (i32.add (i32.const 545586901)) + (i32.add (i32.const 1703657610)) + (i32.add (i32.const -1562314133)) + (i32.add (i32.const -1502367491)) + (i32.add (i32.const 401516589)) + (i32.add (i32.const 501478606)) + (i32.add (i32.const -1573921843)) + (i32.add (i32.const 682350863)) + (i32.add (i32.const -2076881136)) + (i32.add (i32.const -898705346)) + (i32.add (i32.const 2022408885)) + (i32.add (i32.const -1518789469)) + (i32.add (i32.const -1222319294)) + (i32.add (i32.const -870578918)) + (i32.add (i32.const 280358177)) + (i32.add (i32.const -571536310)) + (i32.add (i32.const -791275144)) + (i32.add (i32.const 319414940)) + (i32.add (i32.const -961870652)) + (i32.add (i32.const -912692499)) + (i32.add (i32.const -1727177704)) + (i32.add (i32.const -1116833061)) + (i32.add (i32.const -1511481759)) + (i32.add (i32.const -1364101751)) + (i32.add (i32.const -44786537)) + (i32.add (i32.const -564847292)) + (i32.add (i32.const -2143249151)) + (i32.add (i32.const 354286435)) + (i32.add (i32.const -2095422801)) + (i32.add (i32.const -549313702)) + (i32.add (i32.const -934295558)) + (i32.add (i32.const -1590316590)) + (i32.add (i32.const 1996014991)) + (i32.add (i32.const 273626741)) + (i32.add (i32.const 287609530)) + (i32.add (i32.const -763655052)) + (i32.add (i32.const 1863615082)) + (i32.add (i32.const -1592176570)) + (i32.add (i32.const -759600423)) + (i32.add (i32.const 1690950745)) + (i32.add (i32.const 1497463471)) + (i32.add (i32.const -777822228)) + (i32.add (i32.const 185683028)) + (i32.add (i32.const -2030161869)) + (i32.add (i32.const -1342099421)) + (i32.add (i32.const 1033479247)) + (i32.add (i32.const -627020558)) + (i32.add (i32.const 692474955)) + (i32.add (i32.const 1357588203)) + (i32.add (i32.const 1927159442)) + (i32.add (i32.const -1156307445)) + (i32.add (i32.const -189954570)) + (i32.add (i32.const -962013445)) + (i32.add (i32.const -557980482)) + (i32.add (i32.const 179023079)) + (i32.add (i32.const 788302641)) + (i32.add (i32.const 666389079)) + (i32.add (i32.const -2111405620)) + (i32.add (i32.const -1091328465)) + (i32.add (i32.const 16632526)) + (i32.add (i32.const 1726352953)) + (i32.add (i32.const 2041316411)) + (i32.add (i32.const 742589844)) + (i32.add (i32.const 388673469)) + (i32.add (i32.const -1815188823)) + (i32.add (i32.const -473023206)) + (i32.add (i32.const 1613690814)) + (i32.add (i32.const -1584637677)) + (i32.add (i32.const -2083589222)) + (i32.add (i32.const 1834725535)) + (i32.add (i32.const -842528194)) + (i32.add (i32.const -1954259785)) + (i32.add (i32.const -492950555)) + (i32.add (i32.const -508800158)) + (i32.add (i32.const 2143538406)) + (i32.add (i32.const 1636921613)) + (i32.add (i32.const 343612265)) + (i32.add (i32.const 1786157903)) + (i32.add (i32.const -414585448)) + (i32.add (i32.const 1533432665)) + (i32.add (i32.const 1033596850)) + (i32.add (i32.const 1112905313)) + (i32.add (i32.const -1885655354)) + (i32.add (i32.const -308726473)) + (i32.add (i32.const 1786136284)) + (i32.add (i32.const 158014480)) + (i32.add (i32.const 703718103)) + (i32.add (i32.const -952469167)) + (i32.add (i32.const -1843535451)) + (i32.add (i32.const 901627995)) + (i32.add (i32.const -1381965641)) + (i32.add (i32.const -433124652)) + (i32.add (i32.const -265524407)) + (i32.add (i32.const -806271992)) + (i32.add (i32.const 609137023)) + (i32.add (i32.const 915753147)) + (i32.add (i32.const -1753840466)) + (i32.add (i32.const 984116673)) + (i32.add (i32.const -1317426716)) + (i32.add (i32.const -508993750)) + (i32.add (i32.const 1665688537)) + (i32.add (i32.const 1214254038)) + (i32.add (i32.const 840011601)) + (i32.add (i32.const -1921511669)) + (i32.add (i32.const -1542288658)) + (i32.add (i32.const 1586656317)) + (i32.add (i32.const -47781915)) + (i32.add (i32.const -306255724)) + (i32.add (i32.const -523540659)) + (i32.add (i32.const 2121150773)) + (i32.add (i32.const -1724443695)) + (i32.add (i32.const 1606340826)) + (i32.add (i32.const -1527710173)) + (i32.add (i32.const 1676260862)) + (i32.add (i32.const 1509925154)) + (i32.add (i32.const 680452641)) + (i32.add (i32.const -1850955243)) + (i32.add (i32.const 1807959971)) + (i32.add (i32.const -23261037)) + (i32.add (i32.const 1652015454)) + (i32.add (i32.const -522806319)) + (i32.add (i32.const -1830439729)) + (i32.add (i32.const -583713579)) + (i32.add (i32.const 58944660)) + (i32.add (i32.const -994634778)) + (i32.add (i32.const -1849345624)) + (i32.add (i32.const -1053694834)) + (i32.add (i32.const -1011394959)) + (i32.add (i32.const -751758106)) + (i32.add (i32.const 722003950)) + (i32.add (i32.const 422646077)) + (i32.add (i32.const 1850944256)) + (i32.add (i32.const -668370573)) + (i32.add (i32.const 620664503)) + (i32.add (i32.const 1987023167)) + (i32.add (i32.const 927136662)) + (i32.add (i32.const -1807405227)) + (i32.add (i32.const 2138506182)) + (i32.add (i32.const -839659699)) + (i32.add (i32.const -894557399)) + (i32.add (i32.const -1063733986)) + (i32.add (i32.const 1563405466)) + (i32.add (i32.const -2061267970)) + (i32.add (i32.const -2140464672)) + (i32.add (i32.const -1472624976)) + (i32.add (i32.const -977671912)) + (i32.add (i32.const -828590889)) + (i32.add (i32.const -821217729)) + (i32.add (i32.const 1587700858)) + (i32.add (i32.const 339211842)) + (i32.add (i32.const -680521841)) + (i32.add (i32.const 1992464151)) + (i32.add (i32.const -1872876630)) + (i32.add (i32.const -651370259)) + (i32.add (i32.const -1696671765)) + (i32.add (i32.const 326139603)) + (i32.add (i32.const 1145922707)) + (i32.add (i32.const -465591961)) + (i32.add (i32.const -963515200)) + (i32.add (i32.const -370575491)) + (i32.add (i32.const -855029821)) + (i32.add (i32.const 1129929063)) + (i32.add (i32.const -2039863549)) + (i32.add (i32.const -33234618)) + (i32.add (i32.const -102906593)) + (i32.add (i32.const -1249756601)) + (i32.add (i32.const -701755083)) + (i32.add (i32.const 1501884430)) + (i32.add (i32.const -1826676273)) + (i32.add (i32.const -877531305)) + (i32.add (i32.const -1948126505)) + (i32.add (i32.const -340581500)) + (i32.add (i32.const 573889067)) + (i32.add (i32.const -2011058314)) + (i32.add (i32.const 1230750273)) + (i32.add (i32.const -269628712)) + (i32.add (i32.const 439686572)) + (i32.add (i32.const -43799336)) + (i32.add (i32.const 1284884316)) + (i32.add (i32.const -2083898244)) + (i32.add (i32.const -1383259005)) + (i32.add (i32.const -1185342970)) + (i32.add (i32.const -965385291)) + (i32.add (i32.const -202889481)) + (i32.add (i32.const -247183148)) + (i32.add (i32.const -877534130)) + (i32.add (i32.const -1944426008)) + (i32.add (i32.const -311739380)) + (i32.add (i32.const -1704575619)) + (i32.add (i32.const 1726487456)) + (i32.add (i32.const -893304816)) + (i32.add (i32.const 1912048264)) + (i32.add (i32.const 278968414)) + (i32.add (i32.const 1484489962)) + (i32.add (i32.const 1262661188)) + (i32.add (i32.const -478958271)) + (i32.add (i32.const 1116659981)) + (i32.add (i32.const -102204278)) + (i32.add (i32.const -894869658)) + (i32.add (i32.const -1054787859)) + (i32.add (i32.const 184519752)) + (i32.add (i32.const -503413592)) + (i32.add (i32.const -525176133)) + (i32.add (i32.const 191141152)) + (i32.add (i32.const 1630747888)) + (i32.add (i32.const -238594269)) + (i32.add (i32.const -1019697185)) + (i32.add (i32.const 311169349)) + (i32.add (i32.const 932458333)) + (i32.add (i32.const -1054290801)) + (i32.add (i32.const 339040405)) + (i32.add (i32.const 1540470282)) + (i32.add (i32.const 52464903)) + (i32.add (i32.const -1864408445)) + (i32.add (i32.const -1300853002)) + (i32.add (i32.const 939067292)) + (i32.add (i32.const -691921398)) + (i32.add (i32.const -589469984)) + (i32.add (i32.const 678906149)) + (i32.add (i32.const -448993378)) + (i32.add (i32.const 1686399575)) + (i32.add (i32.const -1409396757)) + (i32.add (i32.const -1759841608)) + (i32.add (i32.const -1219624088)) + (i32.add (i32.const -927639633)) + (i32.add (i32.const 1076566600)) + (i32.add (i32.const -2039889213)) + (i32.add (i32.const -1698535674)) + (i32.add (i32.const -1699496232)) + (i32.add (i32.const 1562695157)) + (i32.add (i32.const -2014179030)) + (i32.add (i32.const -1553875800)) + (i32.add (i32.const 1902834508)) + (i32.add (i32.const -724822797)) + (i32.add (i32.const -2084462179)) + (i32.add (i32.const -1572460949)) + (i32.add (i32.const -2135432983)) + (i32.add (i32.const 159888112)) + (i32.add (i32.const 1351831418)) + (i32.add (i32.const -519619583)) + (i32.add (i32.const -1617370591)) + (i32.add (i32.const 1042981154)) + (i32.add (i32.const -1617014198)) + (i32.add (i32.const -1875537500)) + (i32.add (i32.const 2137521959)) + (i32.add (i32.const 621658988)) + (i32.add (i32.const -1536329876)) + (i32.add (i32.const -1491330028)) + (i32.add (i32.const 311672508)) + (i32.add (i32.const -1689788583)) + (i32.add (i32.const 419076555)) + (i32.add (i32.const 845320842)) + (i32.add (i32.const -744707188)) + (i32.add (i32.const 1752309220)) + (i32.add (i32.const 1964562971)) + (i32.add (i32.const -1926775417)) + (i32.add (i32.const 1178969637)) + (i32.add (i32.const -1006949918)) + (i32.add (i32.const -47901705)) + (i32.add (i32.const 1203287239)) + (i32.add (i32.const -1866074718)) + (i32.add (i32.const -1230382380)) + (i32.add (i32.const -1763074898)) + (i32.add (i32.const -901320691)) + (i32.add (i32.const 100269818)) + (i32.add (i32.const 453376891)) + (i32.add (i32.const -111638077)) + (i32.add (i32.const -695301571)) + (i32.add (i32.const -1204248089)) + (i32.add (i32.const -1949590859)) + (i32.add (i32.const 821300288)) + (i32.add (i32.const 749341607)) + (i32.add (i32.const -585881661)) + (i32.add (i32.const 1080834401)) + (i32.add (i32.const -1530409198)) + (i32.add (i32.const -678907165)) + (i32.add (i32.const -622012188)) + (i32.add (i32.const -1356698751)) + (i32.add (i32.const 457692759)) + (i32.add (i32.const -1050495642)) + (i32.add (i32.const 1992904199)) + (i32.add (i32.const 677915241)) + (i32.add (i32.const -1914588029)) + (i32.add (i32.const -1658054345)) + (i32.add (i32.const -697213477)) + (i32.add (i32.const 797983060)) + (i32.add (i32.const -2080522483)) + (i32.add (i32.const 407115021)) + (i32.add (i32.const 1564452691)) + (i32.add (i32.const -1649271584)) + (i32.add (i32.const 580604726)) + (i32.add (i32.const 545629455)) + (i32.add (i32.const -1324584616)) + (i32.add (i32.const 2054889386)) + (i32.add (i32.const 797942181)) + (i32.add (i32.const 1411290298)) + (i32.add (i32.const -1029419898)) + (i32.add (i32.const -1479410372)) + (i32.add (i32.const -818296136)) + (i32.add (i32.const -155567916)) + (i32.add (i32.const 1817160629)) + (i32.add (i32.const 1810661329)) + (i32.add (i32.const 539714973)) + (i32.add (i32.const -2108918360)) + (i32.add (i32.const 393640883)) + (i32.add (i32.const 1935959557)) + (i32.add (i32.const -614260205)) + (i32.add (i32.const -51886856)) + (i32.add (i32.const -2133309786)) + (i32.add (i32.const -2096506216)) + (i32.add (i32.const 816624446)) + (i32.add (i32.const -1150336294)) + (i32.add (i32.const -611701020)) + (i32.add (i32.const 1006285160)) + (i32.add (i32.const 76169130)) + (i32.add (i32.const 955514290)) + (i32.add (i32.const -380410)) + (i32.add (i32.const -19817035)) + (i32.add (i32.const 1660440607)) + (i32.add (i32.const 118073187)) + (i32.add (i32.const -1439160718)) + (i32.add (i32.const 726732315)) + (i32.add (i32.const -93700207)) + (i32.add (i32.const 1077884600)) + (i32.add (i32.const 336482804)) + (i32.add (i32.const -1614197322)) + (i32.add (i32.const 1588997454)) + (i32.add (i32.const 814849219)) + (i32.add (i32.const 1506966494)) + (i32.add (i32.const 1140456650)) + (i32.add (i32.const 2002109876)) + (i32.add (i32.const 598183436)) + (i32.add (i32.const -935935157)) + (i32.add (i32.const 232807304)) + (i32.add (i32.const 532484710)) + (i32.add (i32.const -825574478)) + (i32.add (i32.const -272208505)) + (i32.add (i32.const 328358336)) + (i32.add (i32.const 1975788872)) + (i32.add (i32.const 936900544)) + (i32.add (i32.const 1151510741)) + (i32.add (i32.const 477486919)) + (i32.add (i32.const 477744839)) + (i32.add (i32.const 2085760479)) + (i32.add (i32.const 1406103739)) + (i32.add (i32.const 1416731143)) + (i32.add (i32.const 1664610986)) + (i32.add (i32.const 1128765279)) + (i32.add (i32.const 1507645661)) + (i32.add (i32.const -1060868483)) + (i32.add (i32.const 955751401)) + (i32.add (i32.const -448688239)) + (i32.add (i32.const -1589262793)) + (i32.add (i32.const -1586234973)) + (i32.add (i32.const 1026222670)) + (i32.add (i32.const 1567694864)) + (i32.add (i32.const -127436414)) + (i32.add (i32.const -2094985984)) + (i32.add (i32.const -1898986184)) + (i32.add (i32.const 98842112)) + (i32.add (i32.const -570671380)) + (i32.add (i32.const 1419956303)) + (i32.add (i32.const -1995801776)) + (i32.add (i32.const 448341333)) + (i32.add (i32.const -1929352833)) + (i32.add (i32.const -219080332)) + (i32.add (i32.const -67018854)) + (i32.add (i32.const -510017843)) + (i32.add (i32.const -235378946)) + (i32.add (i32.const 1559651481)) + (i32.add (i32.const -2019170139)) + (i32.add (i32.const -907176196)) + (i32.add (i32.const -996961855)) + (i32.add (i32.const -1157237060)) + (i32.add (i32.const 1639428161)) + (i32.add (i32.const -319404180)) + (i32.add (i32.const -1124669145)) + (i32.add (i32.const 1748419365)) + (i32.add (i32.const -2100857675)) + (i32.add (i32.const -1467528795)) + (i32.add (i32.const -1864195986)) + (i32.add (i32.const -95940216)) + (i32.add (i32.const -1264740966)) + (i32.add (i32.const 114665874)) + (i32.add (i32.const 728197575)) + (i32.add (i32.const -2086063815)) + (i32.add (i32.const 863407884)) + (i32.add (i32.const 368291499)) + (i32.add (i32.const -437116502)) + (i32.add (i32.const -115801120)) + (i32.add (i32.const 1369378105)) + (i32.add (i32.const 558770181)) + (i32.add (i32.const -1457515238)) + (i32.add (i32.const 1440065385)) + (i32.add (i32.const -1451146310)) + (i32.add (i32.const -302757184)) + (i32.add (i32.const -1197733129)) + (i32.add (i32.const 173083445)) + (i32.add (i32.const 451548841)) + (i32.add (i32.const 1474934769)) + (i32.add (i32.const -270338490)) + (i32.add (i32.const -1063627216)) + (i32.add (i32.const -421614349)) + (i32.add (i32.const -1903966176)) + (i32.add (i32.const 824514647)) + (i32.add (i32.const -1938046912)) + (i32.add (i32.const -626520056)) + (i32.add (i32.const 1316053138)) + (i32.add (i32.const -199254313)) + (i32.add (i32.const 1036661774)) + (i32.add (i32.const 1857019550)) + (i32.add (i32.const 305192381)) + (i32.add (i32.const 527964314)) + (i32.add (i32.const -1557532820)) + (i32.add (i32.const -1543995947)) + (i32.add (i32.const 494376091)) + (i32.add (i32.const -1418366995)) + (i32.add (i32.const -1287727836)) + (i32.add (i32.const -1226381813)) + (i32.add (i32.const -1642757387)) + (i32.add (i32.const 685592614)) + (i32.add (i32.const -1554322858)) + (i32.add (i32.const 269677497)) + (i32.add (i32.const 1261829560)) + (i32.add (i32.const 83626672)) + (i32.add (i32.const 217120552)) + (i32.add (i32.const 104538474)) + (i32.add (i32.const -284714645)) + (i32.add (i32.const 1018982126)) + (i32.add (i32.const 531001857)) + (i32.add (i32.const 1226586438)) + (i32.add (i32.const -613449172)) + (i32.add (i32.const 198191127)) + (i32.add (i32.const 704871465)) + (i32.add (i32.const -592209378)) + (i32.add (i32.const -2089683733)) + (i32.add (i32.const -1057234154)) + (i32.add (i32.const 998275297)) + (i32.add (i32.const 94884032)) + (i32.add (i32.const -1794278915)) + (i32.add (i32.const -1394657616)) + (i32.add (i32.const 1392392075)) + (i32.add (i32.const 1030443413)) + (i32.add (i32.const -742056327)) + (i32.add (i32.const 767627322)) + (i32.add (i32.const -1586705267)) + (i32.add (i32.const 2051259127)) + (i32.add (i32.const -1299524881)) + (i32.add (i32.const -677794667)) + (i32.add (i32.const 357388758)) + (i32.add (i32.const 311183861)) + (i32.add (i32.const -1974198372)) + (i32.add (i32.const 1897808670)) + (i32.add (i32.const 608732624)) + (i32.add (i32.const -2098626182)) + (i32.add (i32.const -175099413)) + (i32.add (i32.const -1816485681)) + (i32.add (i32.const 1135379889)) + (i32.add (i32.const -1331367002)) + (i32.add (i32.const 1170371440)) + (i32.add (i32.const 1520215196)) + (i32.add (i32.const 1148430413)) + (i32.add (i32.const -1723294772)) + (i32.add (i32.const -1207654135)) + (i32.add (i32.const -244864206)) + (i32.add (i32.const 893869933)) + (i32.add (i32.const -1097044569)) + (i32.add (i32.const 1037690938)) + (i32.add (i32.const -1994501426)) + (i32.add (i32.const 2101049928)) + (i32.add (i32.const -859371552)) + (i32.add (i32.const -1114021039)) + (i32.add (i32.const -793117658)) + (i32.add (i32.const -1497410305)) + (i32.add (i32.const 1884856085)) + (i32.add (i32.const 1455377886)) + (i32.add (i32.const -913835979)) + (i32.add (i32.const -798179599)) + (i32.add (i32.const 1811228776)) + (i32.add (i32.const -1481363673)) + (i32.add (i32.const 1853413327)) + (i32.add (i32.const -951873583)) + (i32.add (i32.const 122194314)) + (i32.add (i32.const -778902217)) + (i32.add (i32.const 991392672)) + (i32.add (i32.const 839166226)) + (i32.add (i32.const 1702837603)) + (i32.add (i32.const 619691143)) + (i32.add (i32.const -802967684)) + (i32.add (i32.const 1215999652)) + (i32.add (i32.const -1327948737)) + (i32.add (i32.const 223750810)) + (i32.add (i32.const 2041435208)) + (i32.add (i32.const -509334704)) + (i32.add (i32.const 405043120)) + (i32.add (i32.const 1021347395)) + (i32.add (i32.const 991573134)) + (i32.add (i32.const 1857068405)) + (i32.add (i32.const -451041540)) + (i32.add (i32.const -194718988)) + (i32.add (i32.const 2069810958)) + (i32.add (i32.const -62412330)) + (i32.add (i32.const -160417670)) + (i32.add (i32.const 1216889517)) + (i32.add (i32.const -1484316929)) + (i32.add (i32.const 2067960622)) + (i32.add (i32.const 460921550)) + (i32.add (i32.const 1845175357)) + (i32.add (i32.const 784573870)) + (i32.add (i32.const -1924920590)) + (i32.add (i32.const 1153617646)) + (i32.add (i32.const -270067052)) + (i32.add (i32.const 1190225339)) + (i32.add (i32.const -1601871628)) + (i32.add (i32.const -1647619873)) + (i32.add (i32.const -10088007)) + (i32.add (i32.const 1605764768)) + (i32.add (i32.const 2122857671)) + (i32.add (i32.const 1338936638)) + (i32.add (i32.const -1651220448)) + (i32.add (i32.const -1737111895)) + (i32.add (i32.const -178209031)) + (i32.add (i32.const 496460430)) + (i32.add (i32.const 1777503110)) + (i32.add (i32.const 1703074712)) + (i32.add (i32.const 2098302786)) + (i32.add (i32.const 99305105)) + (i32.add (i32.const -602980752)) + (i32.add (i32.const -68463390)) + (i32.add (i32.const -1008234019)) + (i32.add (i32.const 1703817610)) + (i32.add (i32.const 909993279)) + (i32.add (i32.const -2110816117)) + (i32.add (i32.const 614585613)) + (i32.add (i32.const 1134104753)) + (i32.add (i32.const -1984312485)) + (i32.add (i32.const -2046111252)) + (i32.add (i32.const 284839587)) + (i32.add (i32.const -210694670)) + (i32.add (i32.const 726877142)) + (i32.add (i32.const -1719043291)) + (i32.add (i32.const 1985834699)) + (i32.add (i32.const -350838254)) + (i32.add (i32.const 1939740981)) + (i32.add (i32.const 531859821)) + (i32.add (i32.const -385417279)) + (i32.add (i32.const 1529509637)) + (i32.add (i32.const 246997589)) + (i32.add (i32.const -1025003574)) + (i32.add (i32.const 1011110653)) + (i32.add (i32.const -1591976554)) + (i32.add (i32.const -1678631797)) + (i32.add (i32.const 1656467987)) + (i32.add (i32.const -500843843)) + (i32.add (i32.const -1227618123)) + (i32.add (i32.const 1043552097)) + (i32.add (i32.const -1626129896)) + (i32.add (i32.const -13906154)) + (i32.add (i32.const -744947124)) + (i32.add (i32.const 279312343)) + (i32.add (i32.const 1979580923)) + (i32.add (i32.const -2043174064)) + (i32.add (i32.const -1458630163)) + (i32.add (i32.const 1016692305)) + (i32.add (i32.const -1691588493)) + (i32.add (i32.const -1489936915)) + (i32.add (i32.const 97462277)) + (i32.add (i32.const -1182821537)) + (i32.add (i32.const -833168938)) + (i32.add (i32.const 253003201)) + (i32.add (i32.const -382976115)) + (i32.add (i32.const 1949530044)) + (i32.add (i32.const -1338808461)) + (i32.add (i32.const -1495779615)) + (i32.add (i32.const 813072157)) + (i32.add (i32.const -15886459)) + (i32.add (i32.const -1715412469)) + (i32.add (i32.const 549454771)) + (i32.add (i32.const 1968093684)) + (i32.add (i32.const 1549988469)) + (i32.add (i32.const -668743209)) + (i32.add (i32.const -451153732)) + (i32.add (i32.const 136560352)) + (i32.add (i32.const 875627238)) + (i32.add (i32.const 2085903335)) + (i32.add (i32.const 1723238298)) + (i32.add (i32.const 302938228)) + (i32.add (i32.const 1257952008)) + (i32.add (i32.const -1848511281)) + (i32.add (i32.const -1957599269)) + (i32.add (i32.const 596553512)) + (i32.add (i32.const 1357007388)) + (i32.add (i32.const -802667954)) + (i32.add (i32.const 405607750)) + (i32.add (i32.const 1520960699)) + (i32.add (i32.const -924209104)) + (i32.add (i32.const -1688771288)) + (i32.add (i32.const 1954202912)) + (i32.add (i32.const -646949133)) + (i32.add (i32.const -516501813)) + (i32.add (i32.const 2010530220)) + (i32.add (i32.const -291565253)) + (i32.add (i32.const 2009373766)) + (i32.add (i32.const 211989000)) + (i32.add (i32.const 1642383302)) + (i32.add (i32.const 656334171)) + (i32.add (i32.const -1627585416)) + (i32.add (i32.const 1173259500)) + (i32.add (i32.const -1948811425)) + (i32.add (i32.const -1360190602)) + (i32.add (i32.const 884878324)) + (i32.add (i32.const -1600525175)) + (i32.add (i32.const 977358645)) + (i32.add (i32.const -1606324205)) + (i32.add (i32.const 1671203709)) + (i32.add (i32.const -429021190)) + (i32.add (i32.const 1694940504)) + (i32.add (i32.const 1367321593)) + (i32.add (i32.const 2089473018)) + (i32.add (i32.const -1940282906)) + (i32.add (i32.const -545414539)) + (i32.add (i32.const -1934920243)) + (i32.add (i32.const -1212452936)) + (i32.add (i32.const -929798780)) + (i32.add (i32.const -985340587)) + (i32.add (i32.const 22977811)) + (i32.add (i32.const 1402865202)) + (i32.add (i32.const 250971278)) + (i32.add (i32.const -1268267120)) + (i32.add (i32.const 103925701)) + (i32.add (i32.const 94054243)) + (i32.add (i32.const -1921406766)) + (i32.add (i32.const -1377252306)) + (i32.add (i32.const 879861442)) + (i32.add (i32.const 535692008)) + (i32.add (i32.const -426565115)) + (i32.add (i32.const -44277668)) + (i32.add (i32.const -1501922902)) + (i32.add (i32.const 221978630)) + (i32.add (i32.const 719691042)) + (i32.add (i32.const 428592922)) + (i32.add (i32.const -834320319)) + (i32.add (i32.const 1318135136)) + (i32.add (i32.const 1483620867)) + (i32.add (i32.const -1009020263)) + (i32.add (i32.const 1029077424)) + (i32.add (i32.const 2021754736)) + (i32.add (i32.const 1785215490)) + (i32.add (i32.const -1786887106)) + (i32.add (i32.const 653399923)) + (i32.add (i32.const 1566040469)) + (i32.add (i32.const 626427099)) + (i32.add (i32.const 2048547031)) + (i32.add (i32.const 2021094036)) + (i32.add (i32.const 1923411169)) + (i32.add (i32.const 1660188227)) + (i32.add (i32.const 372893705)) + (i32.add (i32.const -989744851)) + (i32.add (i32.const -122142977)) + (i32.add (i32.const -1836699615)) + (i32.add (i32.const 2060358006)) + (i32.add (i32.const -1108603040)) + (i32.add (i32.const -646424840)) + (i32.add (i32.const -550783920)) + (i32.add (i32.const -16031794)) + (i32.add (i32.const 1030510498)) + (i32.add (i32.const -1801547201)) + (i32.add (i32.const 702080697)) + (i32.add (i32.const -1945755822)) + (i32.add (i32.const 2118065381)) + (i32.add (i32.const -1401927782)) + (i32.add (i32.const -1354011859)) + (i32.add (i32.const -1438047989)) + (i32.add (i32.const 201231711)) + (i32.add (i32.const 1890059036)) + (i32.add (i32.const -1118100479)) + (i32.add (i32.const 1360262074)) + (i32.add (i32.const -1217557731)) + (i32.add (i32.const 109264151)) + (i32.add (i32.const -424280893)) + (i32.add (i32.const -1920680941)) + (i32.add (i32.const 1295094555)) + (i32.add (i32.const -1726489707)) + (i32.add (i32.const -1891271287)) + (i32.add (i32.const 1954026765)) + (i32.add (i32.const 1442557405)) + (i32.add (i32.const -1303834475)) + (i32.add (i32.const 69964416)) + (i32.add (i32.const 2110643886)) + (i32.add (i32.const -121037826)) + (i32.add (i32.const -390896478)) + (i32.add (i32.const -1657456390)) + (i32.add (i32.const 1824455150)) + (i32.add (i32.const 1799030378)) + (i32.add (i32.const -513473045)) + (i32.add (i32.const 1717137229)) + (i32.add (i32.const -71452853)) + (i32.add (i32.const 1641925618)) + (i32.add (i32.const 1797617225)) + (i32.add (i32.const -257893669)) + (i32.add (i32.const 799425874)) + (i32.add (i32.const -572673758)) + (i32.add (i32.const -1391865832)) + (i32.add (i32.const -2031357632)) + (i32.add (i32.const -1890870339)) + (i32.add (i32.const 899313316)) + (i32.add (i32.const 2145405972)) + (i32.add (i32.const 992919908)) + (i32.add (i32.const 287571034)) + (i32.add (i32.const -1148526068)) + (i32.add (i32.const -309705069)) + (i32.add (i32.const -1701706784)) + (i32.add (i32.const -124244763)) + (i32.add (i32.const 575744891)) + (i32.add (i32.const -1988128386)) + (i32.add (i32.const 678481080)) + (i32.add (i32.const -1141636829)) + (i32.add (i32.const 925747758)) + (i32.add (i32.const -957823390)) + (i32.add (i32.const -1927883573)) + (i32.add (i32.const -493982908)) + (i32.add (i32.const -1021228955)) + (i32.add (i32.const 1493969225)) + (i32.add (i32.const -1939080547)) + (i32.add (i32.const -2029503498)) + (i32.add (i32.const 530199723)) + (i32.add (i32.const -862686369)) + (i32.add (i32.const 277633810)) + (i32.add (i32.const 1870636443)) + (i32.add (i32.const -1675286040)) + (i32.add (i32.const 956852979)) + (i32.add (i32.const -2133434601)) + (i32.add (i32.const -732214572)) + (i32.add (i32.const -1800904323)) + (i32.add (i32.const -572418115)) + (i32.add (i32.const -2050665387)) + (i32.add (i32.const -1157228954)) + (i32.add (i32.const -1720002960)) + (i32.add (i32.const -1088052081)) + (i32.add (i32.const 1999312442)) + (i32.add (i32.const 866239351)) + (i32.add (i32.const 989308398)) + (i32.add (i32.const 842724967)) + (i32.add (i32.const 2010350630)) + (i32.add (i32.const 1713128998)) + (i32.add (i32.const 2022460792)) + (i32.add (i32.const 1704725086)) + (i32.add (i32.const -58157768)) + (i32.add (i32.const 1479959929)) + (i32.add (i32.const 1655988235)) + (i32.add (i32.const -961740114)) + (i32.add (i32.const 690565147)) + (i32.add (i32.const 1634864494)) + (i32.add (i32.const -116243336)) + (i32.add (i32.const -424334790)) + (i32.add (i32.const -1714813213)) + (i32.add (i32.const -1134527586)) + (i32.add (i32.const -1417089942)) + (i32.add (i32.const 1664747290)) + (i32.add (i32.const -1170637439)) + (i32.add (i32.const -1538396868)) + (i32.add (i32.const 99706065)) + (i32.add (i32.const 488964843)) + (i32.add (i32.const 727863049)) + (i32.add (i32.const 659257359)) + (i32.add (i32.const 1600004846)) + (i32.add (i32.const -1736620475)) + (i32.add (i32.const -142736199)) + (i32.add (i32.const -703461227)) + (i32.add (i32.const -432142675)) + (i32.add (i32.const 1544682512)) + (i32.add (i32.const -2042668487)) + (i32.add (i32.const 1506182170)) + (i32.add (i32.const -1504513185)) + (i32.add (i32.const -1624176557)) + (i32.add (i32.const 1483965399)) + (i32.add (i32.const -764507453)) + (i32.add (i32.const 276830329)) + (i32.add (i32.const -725866084)) + (i32.add (i32.const 180445491)) + (i32.add (i32.const 1278087342)) + (i32.add (i32.const -1706074766)) + (i32.add (i32.const 1297517881)) + (i32.add (i32.const 191530506)) + (i32.add (i32.const 160994003)) + (i32.add (i32.const 1728025438)) + (i32.add (i32.const 1285937143)) + (i32.add (i32.const -1988919294)) + (i32.add (i32.const 1871190872)) + (i32.add (i32.const 1183671687)) + (i32.add (i32.const 700750503)) + (i32.add (i32.const 2105866626)) + (i32.add (i32.const -804942632)) + (i32.add (i32.const -2044369860)) + (i32.add (i32.const 1865136765)) + (i32.add (i32.const 951372518)) + (i32.add (i32.const -755585975)) + (i32.add (i32.const 980077655)) + (i32.add (i32.const -1133666786)) + (i32.add (i32.const -1442211178)) + (i32.add (i32.const -1441866864)) + (i32.add (i32.const 1458642835)) + (i32.add (i32.const -46622947)) + (i32.add (i32.const 804457959)) + (i32.add (i32.const -2101125895)) + (i32.add (i32.const -4257781)) + (i32.add (i32.const 201206249)) + (i32.add (i32.const -1564902053)) + (i32.add (i32.const -101649915)) + (i32.add (i32.const -16281894)) + (i32.add (i32.const -779684665)) + (i32.add (i32.const 1134551308)) + (i32.add (i32.const -338826182)) + (i32.add (i32.const -449142288)) + (i32.add (i32.const 819796387)) + (i32.add (i32.const 229188817)) + (i32.add (i32.const -123885209)) + (i32.add (i32.const 2076159796)) + (i32.add (i32.const -1949933715)) + (i32.add (i32.const -1435726961)) + (i32.add (i32.const 1202623318)) + (i32.add (i32.const 365495234)) + (i32.add (i32.const 858857397)) + (i32.add (i32.const 1811442927)) + (i32.add (i32.const -94198360)) + (i32.add (i32.const -104989028)) + (i32.add (i32.const -1782002644)) + (i32.add (i32.const -1890664884)) + (i32.add (i32.const -1855450486)) + (i32.add (i32.const 1204627437)) + (i32.add (i32.const -587960359)) + (i32.add (i32.const -1842918425)) + (i32.add (i32.const 1578015249)) + (i32.add (i32.const 2013555328)) + (i32.add (i32.const 906990212)) + (i32.add (i32.const 197533971)) + (i32.add (i32.const 1616266994)) + (i32.add (i32.const -780133960)) + (i32.add (i32.const 1118065080)) + (i32.add (i32.const -1947479599)) + (i32.add (i32.const -1479475793)) + (i32.add (i32.const 693682597)) + (i32.add (i32.const 1532225205)) + (i32.add (i32.const 377589195)) + (i32.add (i32.const 862695319)) + (i32.add (i32.const 2088614515)) + (i32.add (i32.const 2023349849)) + (i32.add (i32.const -1604759492)) + (i32.add (i32.const -1694949091)) + (i32.add (i32.const -628939903)) + (i32.add (i32.const 306114244)) + (i32.add (i32.const -691614827)) + (i32.add (i32.const -147819582)) + (i32.add (i32.const 737309328)) + (i32.add (i32.const -278168548)) + (i32.add (i32.const 248056055)) + (i32.add (i32.const -248058356)) + (i32.add (i32.const 385966807)) + (i32.add (i32.const 1808366594)) + (i32.add (i32.const 1616969619)) + (i32.add (i32.const -1658919673)) + (i32.add (i32.const 1575489326)) + (i32.add (i32.const -349551752)) + (i32.add (i32.const 1022577837)) + (i32.add (i32.const -149400698)) + (i32.add (i32.const 337962444)) + (i32.add (i32.const -1617150247)) + (i32.add (i32.const -1232093766)) + (i32.add (i32.const 1665578807)) + (i32.add (i32.const -176927737)) + (i32.add (i32.const 1905523406)) + (i32.add (i32.const -584367396)) + (i32.add (i32.const -1224564874)) + (i32.add (i32.const -1246962065)) + (i32.add (i32.const -376510504)) + (i32.add (i32.const -2089320318)) + (i32.add (i32.const -1198276704)) + (i32.add (i32.const 206891533)) + (i32.add (i32.const -1165579421)) + (i32.add (i32.const 1999957422)) + (i32.add (i32.const -1559742351)) + (i32.add (i32.const 1402420362)) + (i32.add (i32.const -1817515895)) + (i32.add (i32.const 1877526835)) + (i32.add (i32.const 468123054)) + (i32.add (i32.const -209169009)) + (i32.add (i32.const 1136537495)) + (i32.add (i32.const 167132836)) + (i32.add (i32.const -998902011)) + (i32.add (i32.const 205967316)) + (i32.add (i32.const 432172886)) + (i32.add (i32.const 1621056550)) + (i32.add (i32.const 301870869)) + (i32.add (i32.const 854115033)) + (i32.add (i32.const 441301414)) + (i32.add (i32.const -851890410)) + (i32.add (i32.const 1187948802)) + (i32.add (i32.const -340618034)) + (i32.add (i32.const -583903116)) + (i32.add (i32.const -1206153053)) + (i32.add (i32.const 1261468016)) + (i32.add (i32.const 371284642)) + (i32.add (i32.const -2099722603)) + (i32.add (i32.const -504165026)) + (i32.add (i32.const -523247865)) + (i32.add (i32.const -370969963)) + (i32.add (i32.const -686464562)) + (i32.add (i32.const -8347761)) + (i32.add (i32.const 295481380)) + (i32.add (i32.const 831756134)) + (i32.add (i32.const 75696244)) + (i32.add (i32.const -1598875888)) + (i32.add (i32.const 1585409443)) + (i32.add (i32.const -537421124)) + (i32.add (i32.const -1301466062)) + (i32.add (i32.const -634184548)) + (i32.add (i32.const -7843240)) + (i32.add (i32.const -414971831)) + (i32.add (i32.const -959379381)) + (i32.add (i32.const -1544871783)) + (i32.add (i32.const 92815128)) + (i32.add (i32.const -97587170)) + (i32.add (i32.const -23948941)) + (i32.add (i32.const 604674550)) + (i32.add (i32.const 1609108815)) + (i32.add (i32.const 1163624155)) + (i32.add (i32.const -2061915740)) + (i32.add (i32.const 1210801821)) + (i32.add (i32.const 372699988)) + (i32.add (i32.const 1666179023)) + (i32.add (i32.const -1749369082)) + (i32.add (i32.const -1788164940)) + (i32.add (i32.const 1783241499)) + (i32.add (i32.const 924716384)) + (i32.add (i32.const 228211668)) + (i32.add (i32.const -177326068)) + (i32.add (i32.const 736941482)) + (i32.add (i32.const -1810905225)) + (i32.add (i32.const -1723440489)) + (i32.add (i32.const 2016885208)) + (i32.add (i32.const 755246440)) + (i32.add (i32.const -2020573994)) + (i32.add (i32.const 435874123)) + (i32.add (i32.const -840543214)) + (i32.add (i32.const 535139333)) + (i32.add (i32.const 1956982843)) + (i32.add (i32.const 1127084368)) + (i32.add (i32.const 1930826244)) + (i32.add (i32.const -262417172)) + (i32.add (i32.const -1440838051)) + (i32.add (i32.const -1498629580)) + (i32.add (i32.const -408289700)) + (i32.add (i32.const 1630856845)) + (i32.add (i32.const -1837547582)) + (i32.add (i32.const 1182931269)) + (i32.add (i32.const 489765493)) + (i32.add (i32.const 670330614)) + (i32.add (i32.const 528979000)) + (i32.add (i32.const 1988588299)) + (i32.add (i32.const 1490551744)) + (i32.add (i32.const -1864449485)) + (i32.add (i32.const 1771755242)) + (i32.add (i32.const -1309244892)) + (i32.add (i32.const 1856163874)) + (i32.add (i32.const 1710868290)) + (i32.add (i32.const 803681417)) + (i32.add (i32.const 282925431)) + (i32.add (i32.const -1259286439)) + (i32.add (i32.const -890857672)) + (i32.add (i32.const 1320689563)) + (i32.add (i32.const -1596995938)) + (i32.add (i32.const -39237472)) + (i32.add (i32.const -1462120519)) + (i32.add (i32.const -1009639588)) + (i32.add (i32.const 442843569)) + (i32.add (i32.const -1032847414)) + (i32.add (i32.const 915252426)) + (i32.add (i32.const 683431990)) + (i32.add (i32.const 1677181238)) + (i32.add (i32.const 1448079923)) + (i32.add (i32.const 903867719)) + (i32.add (i32.const 951956749)) + (i32.add (i32.const 1079898159)) + (i32.add (i32.const 910038692)) + (i32.add (i32.const 1597306331)) + (i32.add (i32.const 1377955769)) + (i32.add (i32.const -30288852)) + (i32.add (i32.const 1490343809)) + (i32.add (i32.const -1950483043)) + (i32.add (i32.const 810704728)) + (i32.add (i32.const -1188110735)) + (i32.add (i32.const -634165644)) + (i32.add (i32.const 2016439279)) + (i32.add (i32.const -502868035)) + (i32.add (i32.const -1234173995)) + (i32.add (i32.const -437792845)) + (i32.add (i32.const -470979761)) + (i32.add (i32.const 6635339)) + (i32.add (i32.const 1695258051)) + (i32.add (i32.const -1234882628)) + (i32.add (i32.const 2121291530)) + (i32.add (i32.const -757493038)) + (i32.add (i32.const 1600240125)) + (i32.add (i32.const -1208768469)) + (i32.add (i32.const 1891511128)) + (i32.add (i32.const -325878398)) + (i32.add (i32.const -1475924874)) + (i32.add (i32.const 301175817)) + (i32.add (i32.const -1312324450)) + (i32.add (i32.const 162937424)) + (i32.add (i32.const 273541731)) + (i32.add (i32.const -1082097491)) + (i32.add (i32.const 2007710448)) + (i32.add (i32.const -522040290)) + (i32.add (i32.const 384708037)) + (i32.add (i32.const -1983978644)) + (i32.add (i32.const -1063897857)) + (i32.add (i32.const -739709137)) + (i32.add (i32.const 1080758661)) + (i32.add (i32.const -1775357000)) + (i32.add (i32.const 1148359235)) + (i32.add (i32.const -1200384411)) + (i32.add (i32.const 500007965)) + (i32.add (i32.const -1208685393)) + (i32.add (i32.const 1491859377)) + (i32.add (i32.const -1038749487)) + (i32.add (i32.const -801124203)) + (i32.add (i32.const 1040400564)) + (i32.add (i32.const 1611678478)) + (i32.add (i32.const 1792331642)) + (i32.add (i32.const 760127248)) + (i32.add (i32.const -1164024255)) + (i32.add (i32.const 1932420040)) + (i32.add (i32.const -1650214172)) + (i32.add (i32.const 1743428893)) + (i32.add (i32.const -2041315156)) + (i32.add (i32.const 1549008605)) + (i32.add (i32.const 2086325934)) + (i32.add (i32.const -412619497)) + (i32.add (i32.const -171206950)) + (i32.add (i32.const 11500489)) + (i32.add (i32.const 1839501452)) + (i32.add (i32.const -1577783555)) + (i32.add (i32.const 440398017)) + (i32.add (i32.const 1184812438)) + (i32.add (i32.const 362317296)) + (i32.add (i32.const -151439366)) + (i32.add (i32.const -1288859425)) + (i32.add (i32.const -1888466827)) + (i32.add (i32.const 1522397097)) + (i32.add (i32.const 2026872165)) + (i32.add (i32.const -454441382)) + (i32.add (i32.const -1111192199)) + (i32.add (i32.const -387715362)) + (i32.add (i32.const -1452579080)) + (i32.add (i32.const 1332570231)) + (i32.add (i32.const -1289447580)) + (i32.add (i32.const 1272401590)) + (i32.add (i32.const -2013459265)) + (i32.add (i32.const -657312252)) + (i32.add (i32.const -2134530059)) + (i32.add (i32.const -1796550979)) + (i32.add (i32.const 1050339178)) + (i32.add (i32.const 883188262)) + (i32.add (i32.const -103543070)) + (i32.add (i32.const 2041607631)) + (i32.add (i32.const -1175422771)) + (i32.add (i32.const -1782223263)) + (i32.add (i32.const -960049550)) + (i32.add (i32.const -443889127)) + (i32.add (i32.const -1448322776)) + (i32.add (i32.const -896468927)) + (i32.add (i32.const -190472919)) + (i32.add (i32.const -321078513)) + (i32.add (i32.const -798759391)) + (i32.add (i32.const -1241170854)) + (i32.add (i32.const -2071857993)) + (i32.add (i32.const -954882584)) + (i32.add (i32.const 9734496)) + (i32.add (i32.const -745211664)) + (i32.add (i32.const 704252750)) + (i32.add (i32.const -963447735)) + (i32.add (i32.const 531589158)) + (i32.add (i32.const 2002538463)) + (i32.add (i32.const -1255375419)) + (i32.add (i32.const -1771894165)) + (i32.add (i32.const -867056524)) + (i32.add (i32.const 409372424)) + (i32.add (i32.const -1646654850)) + (i32.add (i32.const -235366498)) + (i32.add (i32.const -930717459)) + (i32.add (i32.const 1405856498)) + (i32.add (i32.const -973988534)) + (i32.add (i32.const 1407852860)) + (i32.add (i32.const 1660958607)) + (i32.add (i32.const -585957659)) + (i32.add (i32.const 1045587984)) + (i32.add (i32.const 13375962)) + (i32.add (i32.const -332342220)) + (i32.add (i32.const -226455408)) + (i32.add (i32.const 831547921)) + (i32.add (i32.const -1301464615)) + (i32.add (i32.const 969502619)) + (i32.add (i32.const 1176411072)) + (i32.add (i32.const -1916563175)) + (i32.add (i32.const -1283961334)) + (i32.add (i32.const 39599129)) + (i32.add (i32.const -564483460)) + (i32.add (i32.const -924378111)) + (i32.add (i32.const 779681933)) + (i32.add (i32.const -616683011)) + (i32.add (i32.const -59322090)) + (i32.add (i32.const -691427204)) + (i32.add (i32.const -617416499)) + (i32.add (i32.const 522974826)) + (i32.add (i32.const -2102017597)) + (i32.add (i32.const -573782852)) + (i32.add (i32.const -715580840)) + (i32.add (i32.const 1856797148)) + (i32.add (i32.const 994708112)) + (i32.add (i32.const -1298470075)) + (i32.add (i32.const 893223741)) + (i32.add (i32.const 690771786)) + (i32.add (i32.const 56556561)) + (i32.add (i32.const 660420109)) + (i32.add (i32.const 1438011349)) + (i32.add (i32.const -674623)) + (i32.add (i32.const 201294912)) + (i32.add (i32.const -2118509060)) + (i32.add (i32.const -101064414)) + (i32.add (i32.const 1836361024)) + (i32.add (i32.const -1784131261)) + (i32.add (i32.const -939409319)) + (i32.add (i32.const 533123433)) + (i32.add (i32.const -708904736)) + (i32.add (i32.const -1456099834)) + (i32.add (i32.const 30382780)) + (i32.add (i32.const -1710016744)) + (i32.add (i32.const -719049935)) + (i32.add (i32.const 308729305)) + (i32.add (i32.const -219997393)) + (i32.add (i32.const -266647898)) + (i32.add (i32.const -309486542)) + (i32.add (i32.const 2004132528)) + (i32.add (i32.const -2126302051)) + (i32.add (i32.const -609613013)) + (i32.add (i32.const 311374936)) + (i32.add (i32.const -1479467000)) + (i32.add (i32.const 1610406655)) + (i32.add (i32.const -939226556)) + (i32.add (i32.const -282429063)) + (i32.add (i32.const 1199408067)) + (i32.add (i32.const 1822717077)) + (i32.add (i32.const 959991011)) + (i32.add (i32.const 2012091349)) + (i32.add (i32.const 330571742)) + (i32.add (i32.const -832704954)) + (i32.add (i32.const -2037167717)) + (i32.add (i32.const 268611828)) + (i32.add (i32.const -347622238)) + (i32.add (i32.const 1083405434)) + (i32.add (i32.const -1672517546)) + (i32.add (i32.const -399642544)) + (i32.add (i32.const 1410315511)) + (i32.add (i32.const 636054530)) + (i32.add (i32.const -1740859616)) + (i32.add (i32.const 573985225)) + (i32.add (i32.const -696833445)) + (i32.add (i32.const -187928381)) + (i32.add (i32.const -201826810)) + (i32.add (i32.const -268232484)) + (i32.add (i32.const -482181518)) + (i32.add (i32.const -1182850350)) + (i32.add (i32.const 2145044545)) + (i32.add (i32.const 1501707863)) + (i32.add (i32.const -938894063)) + (i32.add (i32.const 100646949)) + (i32.add (i32.const -1124031761)) + (i32.add (i32.const -1395608176)) + (i32.add (i32.const -1341104061)) + (i32.add (i32.const 1723535840)) + (i32.add (i32.const -1794859093)) + (i32.add (i32.const 356336335)) + (i32.add (i32.const -1804017473)) + (i32.add (i32.const -2049970680)) + (i32.add (i32.const -710698328)) + (i32.add (i32.const -2042680722)) + (i32.add (i32.const -815560516)) + (i32.add (i32.const -1222691918)) + (i32.add (i32.const -105744993)) + (i32.add (i32.const 165807765)) + (i32.add (i32.const -1983536222)) + (i32.add (i32.const 22363958)) + (i32.add (i32.const -1144077493)) + (i32.add (i32.const -35905299)) + (i32.add (i32.const 1905423161)) + (i32.add (i32.const -102834957)) + (i32.add (i32.const -1437334678)) + (i32.add (i32.const -404634959)) + (i32.add (i32.const 1744118003)) + (i32.add (i32.const 1333525935)) + (i32.add (i32.const 375213396)) + (i32.add (i32.const 878470460)) + (i32.add (i32.const -126029669)) + (i32.add (i32.const 1814051033)) + (i32.add (i32.const -139460902)) + (i32.add (i32.const 408154937)) + (i32.add (i32.const 1227147989)) + (i32.add (i32.const 227250503)) + (i32.add (i32.const 1742837536)) + (i32.add (i32.const 1291233395)) + (i32.add (i32.const 848184797)) + (i32.add (i32.const 1217227592)) + (i32.add (i32.const 1232910381)) + (i32.add (i32.const -1134868846)) + (i32.add (i32.const 1538952850)) + (i32.add (i32.const 173641366)) + (i32.add (i32.const 1597228587)) + (i32.add (i32.const 394294081)) + (i32.add (i32.const -1736293365)) + (i32.add (i32.const 1503764341)) + (i32.add (i32.const 303956498)) + (i32.add (i32.const -1965891408)) + (i32.add (i32.const -850877732)) + (i32.add (i32.const 32038705)) + (i32.add (i32.const -1313944379)) + (i32.add (i32.const 876818088)) + (i32.add (i32.const -487201696)) + (i32.add (i32.const -1224955085)) + (i32.add (i32.const -796957211)) + (i32.add (i32.const 1016085688)) + (i32.add (i32.const -896188705)) + (i32.add (i32.const -504164619)) + (i32.add (i32.const 145619839)) + (i32.add (i32.const 804440604)) + (i32.add (i32.const 1828457688)) + (i32.add (i32.const 191528570)) + (i32.add (i32.const 1142069535)) + (i32.add (i32.const 2076969586)) + (i32.add (i32.const -1279479905)) + (i32.add (i32.const -972317275)) + (i32.add (i32.const 1272866579)) + (i32.add (i32.const 1221398442)) + (i32.add (i32.const 1719205935)) + (i32.add (i32.const 1171521065)) + (i32.add (i32.const -1632953503)) + (i32.add (i32.const -777684306)) + (i32.add (i32.const -44026620)) + (i32.add (i32.const 1157458339)) + (i32.add (i32.const 1456038584)) + (i32.add (i32.const 1081699797)) + (i32.add (i32.const -483766548)) + (i32.add (i32.const 1828344909)) + (i32.add (i32.const -981014050)) + (i32.add (i32.const 2055447848)) + (i32.add (i32.const -1109028597)) + (i32.add (i32.const -795398126)) + (i32.add (i32.const -1618034832)) + (i32.add (i32.const 347339511)) + (i32.add (i32.const -213256482)) + (i32.add (i32.const -2107295975)) + (i32.add (i32.const 661825464)) + (i32.add (i32.const -908514444)) + (i32.add (i32.const 1934318113)) + (i32.add (i32.const 1871820668)) + (i32.add (i32.const 85776890)) + (i32.add (i32.const 364802254)) + (i32.add (i32.const 422312713)) + (i32.add (i32.const 2000394747)) + (i32.add (i32.const 1668022310)) + (i32.add (i32.const -1621950630)) + (i32.add (i32.const 1382590254)) + (i32.add (i32.const -1736601976)) + (i32.add (i32.const -563840881)) + (i32.add (i32.const 856037806)) + (i32.add (i32.const -355259377)) + (i32.add (i32.const 614680778)) + (i32.add (i32.const -1660695054)) + (i32.add (i32.const -266809432)) + (i32.add (i32.const -210954270)) + (i32.add (i32.const -48285764)) + (i32.add (i32.const 1317185373)) + (i32.add (i32.const -956785074)) + (i32.add (i32.const -390068941)) + (i32.add (i32.const -190846746)) + (i32.add (i32.const -2035299751)) + (i32.add (i32.const 1107615815)) + (i32.add (i32.const -1106095835)) + (i32.add (i32.const -1759105898)) + (i32.add (i32.const -1426355487)) + (i32.add (i32.const 1290271258)) + (i32.add (i32.const -1516517771)) + (i32.add (i32.const 1825008849)) + (i32.add (i32.const 384052989)) + (i32.add (i32.const -1114380034)) + (i32.add (i32.const -77214942)) + (i32.add (i32.const 1521044137)) + (i32.add (i32.const 568317373)) + (i32.add (i32.const -720823966)) + (i32.add (i32.const -641061532)) + (i32.add (i32.const 1123425757)) + (i32.add (i32.const -2050469077)) + (i32.add (i32.const -1297383438)) + (i32.add (i32.const -1745112284)) + (i32.add (i32.const -96583801)) + (i32.add (i32.const 296613882)) + (i32.add (i32.const 538201832)) + (i32.add (i32.const 1398960219)) + (i32.add (i32.const -1975762508)) + (i32.add (i32.const 33347923)) + (i32.add (i32.const -344389966)) + (i32.add (i32.const -119190876)) + (i32.add (i32.const 993051139)) + (i32.add (i32.const 514454605)) + (i32.add (i32.const -2099370441)) + (i32.add (i32.const 1544987191)) + (i32.add (i32.const 723112161)) + (i32.add (i32.const 694620680)) + (i32.add (i32.const 1321661812)) + (i32.add (i32.const -800621227)) + (i32.add (i32.const 413356482)) + (i32.add (i32.const 1262127982)) + (i32.add (i32.const 6089876)) + (i32.add (i32.const 1570542173)) + (i32.add (i32.const -1743859148)) + (i32.add (i32.const -217501807)) + (i32.add (i32.const 275956856)) + (i32.add (i32.const 1588175318)) + (i32.add (i32.const 1017815671)) + (i32.add (i32.const 1176281527)) + (i32.add (i32.const 1837615103)) + (i32.add (i32.const -526584074)) + (i32.add (i32.const -1779595132)) + (i32.add (i32.const -2058904841)) + (i32.add (i32.const -1996299935)) + (i32.add (i32.const 1787033044)) + (i32.add (i32.const 570754658)) + (i32.add (i32.const 491279464)) + (i32.add (i32.const 1352872786)) + (i32.add (i32.const -1317855116)) + (i32.add (i32.const 1256493218)) + (i32.add (i32.const -1979614361)) + (i32.add (i32.const 111783425)) + (i32.add (i32.const -2060694177)) + (i32.add (i32.const 1692725784)) + (i32.add (i32.const -1717081728)) + (i32.add (i32.const -543643916)) + (i32.add (i32.const 711706312)) + (i32.add (i32.const -1980576875)) + (i32.add (i32.const -114705930)) + (i32.add (i32.const -1372220570)) + (i32.add (i32.const 897451678)) + (i32.add (i32.const 2110037631)) + (i32.add (i32.const -1543510537)) + (i32.add (i32.const 818654772)) + (i32.add (i32.const -492500185)) + (i32.add (i32.const 1918445482)) + (i32.add (i32.const 1763427575)) + (i32.add (i32.const 1570273085)) + (i32.add (i32.const -35285578)) + (i32.add (i32.const 852126425)) + (i32.add (i32.const -1066419166)) + (i32.add (i32.const 1640593245)) + (i32.add (i32.const -1942365682)) + (i32.add (i32.const -347217992)) + (i32.add (i32.const -940314276)) + (i32.add (i32.const -1171182089)) + (i32.add (i32.const 1703354622)) + (i32.add (i32.const -276802503)) + (i32.add (i32.const -1143502496)) + (i32.add (i32.const -621795783)) + (i32.add (i32.const -374364050)) + (i32.add (i32.const -1145938353)) + (i32.add (i32.const 502109012)) + (i32.add (i32.const 1419584375)) + (i32.add (i32.const -1418552408)) + (i32.add (i32.const -1607835340)) + (i32.add (i32.const -1856820653)) + (i32.add (i32.const 1816698103)) + (i32.add (i32.const 1159038935)) + (i32.add (i32.const -57677600)) + (i32.add (i32.const 1138120912)) + (i32.add (i32.const -590086005)) + (i32.add (i32.const -2132458617)) + (i32.add (i32.const -1859638179)) + (i32.add (i32.const 666377517)) + (i32.add (i32.const 1185787254)) + (i32.add (i32.const 1286106854)) + (i32.add (i32.const -896554672)) + (i32.add (i32.const 519724786)) + (i32.add (i32.const -576854045)) + (i32.add (i32.const -1278666673)) + (i32.add (i32.const 621277313)) + (i32.add (i32.const 292605637)) + (i32.add (i32.const -841081605)) + (i32.add (i32.const 295843720)) + (i32.add (i32.const 2131526969)) + (i32.add (i32.const 1228164596)) + (i32.add (i32.const -1164943921)) + (i32.add (i32.const 142586711)) + (i32.add (i32.const -52701069)) + (i32.add (i32.const 523008516)) + (i32.add (i32.const -1010148457)) + (i32.add (i32.const 1344120857)) + (i32.add (i32.const 1260688225)) + (i32.add (i32.const 1158085133)) + (i32.add (i32.const 444301499)) + (i32.add (i32.const 214518335)) + (i32.add (i32.const 110902396)) + (i32.add (i32.const -1669343443)) + (i32.add (i32.const 1480101823)) + (i32.add (i32.const -1988592625)) + (i32.add (i32.const 1897293970)) + (i32.add (i32.const -1672958900)) + (i32.add (i32.const -298714073)) + (i32.add (i32.const -1473299168)) + (i32.add (i32.const -804095584)) + (i32.add (i32.const -349618743)) + (i32.add (i32.const 460900509)) + (i32.add (i32.const -1509450119)) + (i32.add (i32.const 1589684513)) + (i32.add (i32.const -1457178792)) + (i32.add (i32.const 773887815)) + (i32.add (i32.const 1809067697)) + (i32.add (i32.const -1936507462)) + (i32.add (i32.const 981873226)) + (i32.add (i32.const 320238530)) + (i32.add (i32.const -360470150)) + (i32.add (i32.const 757388646)) + (i32.add (i32.const -555262086)) + (i32.add (i32.const 870952336)) + (i32.add (i32.const 1193843721)) + (i32.add (i32.const 1910155856)) + (i32.add (i32.const 14639556)) + (i32.add (i32.const -1278854635)) + (i32.add (i32.const -782859634)) + (i32.add (i32.const 110828723)) + (i32.add (i32.const 135989938)) + (i32.add (i32.const 1966640897)) + (i32.add (i32.const 2106384781)) + (i32.add (i32.const 1243886612)) + (i32.add (i32.const 2143568289)) + (i32.add (i32.const -41378239)) + (i32.add (i32.const -881169401)) + (i32.add (i32.const -1504616109)) + (i32.add (i32.const 668991129)) + (i32.add (i32.const -5608139)) + (i32.add (i32.const 1696840381)) + (i32.add (i32.const 532530946)) + (i32.add (i32.const -1715526654)) + (i32.add (i32.const 1085142561)) + (i32.add (i32.const 867012764)) + (i32.add (i32.const -324224449)) + (i32.add (i32.const 1289016758)) + (i32.add (i32.const 870119649)) + (i32.add (i32.const 1369096772)) + (i32.add (i32.const -383284409)) + (i32.add (i32.const -965820369)) + (i32.add (i32.const -802156737)) + (i32.add (i32.const -255990026)) + (i32.add (i32.const -55022663)) + (i32.add (i32.const -2062876537)) + (i32.add (i32.const -1949935019)) + (i32.add (i32.const -1019245384)) + (i32.add (i32.const 1219095795)) + (i32.add (i32.const -1204031022)) + (i32.add (i32.const -1278816356)) + (i32.add (i32.const -1732911622)) + (i32.add (i32.const 1604632056)) + (i32.add (i32.const 1781804198)) + (i32.add (i32.const 897915134)) + (i32.add (i32.const -847537463)) + (i32.add (i32.const 1298685776)) + (i32.add (i32.const 1915226874)) + (i32.add (i32.const -295298648)) + (i32.add (i32.const 376739847)) + (i32.add (i32.const -2006823202)) + (i32.add (i32.const -800603669)) + (i32.add (i32.const 385517522)) + (i32.add (i32.const 531910488)) + (i32.add (i32.const 1718742989)) + (i32.add (i32.const -776310562)) + (i32.add (i32.const -1486484221)) + (i32.add (i32.const -1853777332)) + (i32.add (i32.const 2144433952)) + (i32.add (i32.const 1208488928)) + (i32.add (i32.const 767834625)) + (i32.add (i32.const 414456567)) + (i32.add (i32.const -151097029)) + (i32.add (i32.const -66126655)) + (i32.add (i32.const 679144497)) + (i32.add (i32.const 283132002)) + (i32.add (i32.const -2114313118)) + (i32.add (i32.const -389751239)) + (i32.add (i32.const -308611738)) + (i32.add (i32.const -700445227)) + (i32.add (i32.const -1687421123)) + (i32.add (i32.const 770919902)) + (i32.add (i32.const -1801258353)) + (i32.add (i32.const 103774443)) + (i32.add (i32.const 1494793156)) + (i32.add (i32.const 381849213)) + (i32.add (i32.const 904953558)) + (i32.add (i32.const 1721315023)) + (i32.add (i32.const -131463752)) + (i32.add (i32.const -1735062999)) + (i32.add (i32.const 741349992)) + (i32.add (i32.const -645887307)) + (i32.add (i32.const 1883141350)) + (i32.add (i32.const -568452813)) + (i32.add (i32.const -648309310)) + (i32.add (i32.const 1314086457)) + (i32.add (i32.const 1571151175)) + (i32.add (i32.const -268046008)) + (i32.add (i32.const -2003341846)) + (i32.add (i32.const 1107529177)) + (i32.add (i32.const 1947569765)) + (i32.add (i32.const -1477015502)) + (i32.add (i32.const -1270129289)) + (i32.add (i32.const -170866476)) + (i32.add (i32.const -808503347)) + (i32.add (i32.const 2033642373)) + (i32.add (i32.const -1911989177)) + (i32.add (i32.const -543620945)) + (i32.add (i32.const 1484433421)) + (i32.add (i32.const -1143751446)) + (i32.add (i32.const 1733313312)) + (i32.add (i32.const 2011590958)) + (i32.add (i32.const 1651065755)) + (i32.add (i32.const 2049651345)) + (i32.add (i32.const -1304472043)) + (i32.add (i32.const 2105544462)) + (i32.add (i32.const -93079292)) + (i32.add (i32.const 1238352786)) + (i32.add (i32.const 1455659756)) + (i32.add (i32.const -906805955)) + (i32.add (i32.const 1757306744)) + (i32.add (i32.const -1483917218)) + (i32.add (i32.const -412546053)) + (i32.add (i32.const 607862252)) + (i32.add (i32.const -1660771420)) + (i32.add (i32.const -1874971503)) + (i32.add (i32.const -1442896874)) + (i32.add (i32.const -1609769358)) + (i32.add (i32.const -1262178180)) + (i32.add (i32.const -827124593)) + (i32.add (i32.const -545790868)) + (i32.add (i32.const 355300528)) + (i32.add (i32.const 111553876)) + (i32.add (i32.const -635010182)) + (i32.add (i32.const 142123193)) + (i32.add (i32.const 1041615003)) + (i32.add (i32.const -1372183939)) + (i32.add (i32.const -1365219803)) + (i32.add (i32.const 744767560)) + (i32.add (i32.const -386349576)) + (i32.add (i32.const -1703994878)) + (i32.add (i32.const -1491837998)) + (i32.add (i32.const -1988543637)) + (i32.add (i32.const 1462334062)) + (i32.add (i32.const 1406304498)) + (i32.add (i32.const -715074929)) + (i32.add (i32.const 1368696557)) + (i32.add (i32.const -1762345873)) + (i32.add (i32.const -1918505445)) + (i32.add (i32.const 185006403)) + (i32.add (i32.const 460956393)) + (i32.add (i32.const -2113904980)) + (i32.add (i32.const -442531156)) + (i32.add (i32.const -65300350)) + (i32.add (i32.const -1468015077)) + (i32.add (i32.const 913027027)) + (i32.add (i32.const -1221266632)) + (i32.add (i32.const -1829228080)) + (i32.add (i32.const -1375309573)) + (i32.add (i32.const -1346644650)) + (i32.add (i32.const 240206995)) + (i32.add (i32.const 2114280765)) + (i32.add (i32.const -476760197)) + (i32.add (i32.const -1634349289)) + (i32.add (i32.const -588941352)) + (i32.add (i32.const -11153255)) + (i32.add (i32.const 1945838395)) + (i32.add (i32.const 909804839)) + (i32.add (i32.const -1517410000)) + (i32.add (i32.const 1041086289)) + (i32.add (i32.const -1114129092)) + (i32.add (i32.const 1018150863)) + (i32.add (i32.const 873065195)) + (i32.add (i32.const 572752294)) + (i32.add (i32.const -1745968238)) + (i32.add (i32.const 306925303)) + (i32.add (i32.const -1837316328)) + (i32.add (i32.const 1150926834)) + (i32.add (i32.const -50234923)) + (i32.add (i32.const -2077498322)) + (i32.add (i32.const -1746448553)) + (i32.add (i32.const -1296620175)) + (i32.add (i32.const -1223624003)) + (i32.add (i32.const -1128162514)) + (i32.add (i32.const 58563544)) + (i32.add (i32.const -232187843)) + (i32.add (i32.const 1583901298)) + (i32.add (i32.const -250131121)) + (i32.add (i32.const -1493338318)) + (i32.add (i32.const 1164482371)) + (i32.add (i32.const -2029781437)) + (i32.add (i32.const -819479618)) + (i32.add (i32.const -1211244306)) + (i32.add (i32.const 522391284)) + (i32.add (i32.const 506104079)) + (i32.add (i32.const 726602141)) + (i32.add (i32.const 1866007715)) + (i32.add (i32.const 866742894)) + (i32.add (i32.const -1905011783)) + (i32.add (i32.const 243330922)) + (i32.add (i32.const 1391291365)) + (i32.add (i32.const 1224112979)) + (i32.add (i32.const -1201841519)) + (i32.add (i32.const -1357560090)) + (i32.add (i32.const -1156923769)) + (i32.add (i32.const -1987296975)) + (i32.add (i32.const -370523519)) + (i32.add (i32.const -704383282)) + (i32.add (i32.const 725389411)) + (i32.add (i32.const -1023954881)) + (i32.add (i32.const 1112727606)) + (i32.add (i32.const -727821180)) + (i32.add (i32.const 2036821713)) + (i32.add (i32.const -1230170153)) + (i32.add (i32.const -1494872742)) + (i32.add (i32.const -1303442692)) + (i32.add (i32.const 320787721)) + (i32.add (i32.const -102499988)) + (i32.add (i32.const 1179851373)) + (i32.add (i32.const 1484488799)) + (i32.add (i32.const 1177917859)) + (i32.add (i32.const 1991312742)) + (i32.add (i32.const -1762240586)) + (i32.add (i32.const 261713854)) + (i32.add (i32.const -1492503307)) + (i32.add (i32.const 1053943136)) + (i32.add (i32.const -2014026556)) + (i32.add (i32.const 1576565432)) + (i32.add (i32.const 2123240233)) + (i32.add (i32.const 258746083)) + (i32.add (i32.const -1926044319)) + (i32.add (i32.const -2094500744)) + (i32.add (i32.const 722192219)) + (i32.add (i32.const -90389681)) + (i32.add (i32.const -1023831728)) + (i32.add (i32.const 702345105)) + (i32.add (i32.const 2122529667)) + (i32.add (i32.const -1112601817)) + (i32.add (i32.const 430898344)) + (i32.add (i32.const -1506860866)) + (i32.add (i32.const -461544612)) + (i32.add (i32.const -661811492)) + (i32.add (i32.const -706590958)) + (i32.add (i32.const -1763693865)) + (i32.add (i32.const 933830206)) + (i32.add (i32.const -1460757756)) + (i32.add (i32.const 674788211)) + (i32.add (i32.const -740493720)) + (i32.add (i32.const 1493873166)) + (i32.add (i32.const -2098390911)) + (i32.add (i32.const -785882820)) + (i32.add (i32.const 636463635)) + (i32.add (i32.const 1199555647)) + (i32.add (i32.const -53501347)) + (i32.add (i32.const -1903468824)) + (i32.add (i32.const -1850405701)) + (i32.add (i32.const -84723002)) + (i32.add (i32.const -345023894)) + (i32.add (i32.const -1292350584)) + (i32.add (i32.const 125709105)) + (i32.add (i32.const -2194373)) + (i32.add (i32.const -2049774046)) + (i32.add (i32.const -577775969)) + (i32.add (i32.const -358268316)) + (i32.add (i32.const 1037841496)) + (i32.add (i32.const -2014749431)) + (i32.add (i32.const 1040972964)) + (i32.add (i32.const 1585238187)) + (i32.add (i32.const -476315628)) + (i32.add (i32.const -1385588391)) + (i32.add (i32.const 312585986)) + (i32.add (i32.const -1249099375)) + (i32.add (i32.const -181583895)) + (i32.add (i32.const -756074575)) + (i32.add (i32.const -704243340)) + (i32.add (i32.const 2025369317)) + (i32.add (i32.const 1008382815)) + (i32.add (i32.const 11268695)) + (i32.add (i32.const 734414839)) + (i32.add (i32.const -1048073075)) + (i32.add (i32.const -1613967838)) + (i32.add (i32.const 773146665)) + (i32.add (i32.const -1220959343)) + (i32.add (i32.const -2107578848)) + (i32.add (i32.const -1305671076)) + (i32.add (i32.const -595623247)) + (i32.add (i32.const 921044290)) + (i32.add (i32.const -1004491837)) + (i32.add (i32.const -1196027843)) + (i32.add (i32.const 840730900)) + (i32.add (i32.const -705206108)) + (i32.add (i32.const 69918847)) + (i32.add (i32.const -200003339)) + (i32.add (i32.const 1166367788)) + (i32.add (i32.const -1150290386)) + (i32.add (i32.const 457063358)) + (i32.add (i32.const -423399795)) + (i32.add (i32.const -706804355)) + (i32.add (i32.const 1142212446)) + (i32.add (i32.const -1321183487)) + (i32.add (i32.const -306143667)) + (i32.add (i32.const -1580979495)) + (i32.add (i32.const 1315852972)) + (i32.add (i32.const -629818056)) + (i32.add (i32.const -1111230586)) + (i32.add (i32.const 1576676229)) + (i32.add (i32.const 1450129830)) + (i32.add (i32.const -1269179879)) + (i32.add (i32.const -74609040)) + (i32.add (i32.const -1853395324)) + (i32.add (i32.const 516838298)) + (i32.add (i32.const 1448735031)) + (i32.add (i32.const -1084351266)) + (i32.add (i32.const -1790987719)) + (i32.add (i32.const 1137941334)) + (i32.add (i32.const 713350880)) + (i32.add (i32.const -624221986)) + (i32.add (i32.const -1877270803)) + (i32.add (i32.const 1714648250)) + (i32.add (i32.const -873751324)) + (i32.add (i32.const -1105261742)) + (i32.add (i32.const -701793678)) + (i32.add (i32.const 171846417)) + (i32.add (i32.const 610766622)) + (i32.add (i32.const 1892575124)) + (i32.add (i32.const -463072297)) + (i32.add (i32.const -1506180771)) + (i32.add (i32.const 192703089)) + (i32.add (i32.const -1650300340)) + (i32.add (i32.const -1026770780)) + (i32.add (i32.const 1476631972)) + (i32.add (i32.const -1264949693)) + (i32.add (i32.const -1280504423)) + (i32.add (i32.const -1881656649)) + (i32.add (i32.const 1695129865)) + (i32.add (i32.const -944680552)) + (i32.add (i32.const -1462088807)) + (i32.add (i32.const 1737243599)) + (i32.add (i32.const 1010214124)) + (i32.add (i32.const -2122933291)) + (i32.add (i32.const -956251492)) + (i32.add (i32.const -247130457)) + (i32.add (i32.const -552465361)) + (i32.add (i32.const 81873887)) + (i32.add (i32.const 883977012)) + (i32.add (i32.const 543206926)) + (i32.add (i32.const 1993672437)) + (i32.add (i32.const 890700032)) + (i32.add (i32.const 280194885)) + (i32.add (i32.const -414819528)) + (i32.add (i32.const -1549406132)) + (i32.add (i32.const 1684324681)) + (i32.add (i32.const 1992977507)) + (i32.add (i32.const 1083970228)) + (i32.add (i32.const 485623535)) + (i32.add (i32.const -1300905632)) + (i32.add (i32.const -1593404628)) + (i32.add (i32.const 751293244)) + (i32.add (i32.const -723635329)) + (i32.add (i32.const 402620999)) + (i32.add (i32.const -171792925)) + (i32.add (i32.const -1352689676)) + (i32.add (i32.const -281524781)) + (i32.add (i32.const 994974869)) + (i32.add (i32.const -286003605)) + (i32.add (i32.const 794634462)) + (i32.add (i32.const -776810651)) + (i32.add (i32.const -596116433)) + (i32.add (i32.const -633740052)) + (i32.add (i32.const -763018125)) + (i32.add (i32.const 2103001194)) + (i32.add (i32.const -684856496)) + (i32.add (i32.const -1540501943)) + (i32.add (i32.const 401966215)) + (i32.add (i32.const 1115921480)) + (i32.add (i32.const -907911978)) + (i32.add (i32.const 150320406)) + (i32.add (i32.const 1731350969)) + (i32.add (i32.const 1782377810)) + (i32.add (i32.const 1272959083)) + (i32.add (i32.const -1423279644)) + (i32.add (i32.const 1339981408)) + (i32.add (i32.const -808479258)) + (i32.add (i32.const 1921329225)) + (i32.add (i32.const 119149773)) + (i32.add (i32.const 1038984139)) + (i32.add (i32.const 1883402407)) + (i32.add (i32.const -1987929151)) + (i32.add (i32.const -1342899284)) + (i32.add (i32.const -1185732526)) + (i32.add (i32.const -1125528730)) + (i32.add (i32.const 566615106)) + (i32.add (i32.const 1001817998)) + (i32.add (i32.const -84714063)) + (i32.add (i32.const -77965426)) + (i32.add (i32.const 1102755442)) + (i32.add (i32.const 1146036909)) + (i32.add (i32.const 1722768040)) + (i32.add (i32.const 222098901)) + (i32.add (i32.const -68120997)) + (i32.add (i32.const -248277635)) + (i32.add (i32.const -413389816)) + (i32.add (i32.const 1526160476)) + (i32.add (i32.const 239507543)) + (i32.add (i32.const 1297898605)) + (i32.add (i32.const -659144651)) + (i32.add (i32.const -2118192563)) + (i32.add (i32.const 1297766097)) + (i32.add (i32.const -874644038)) + (i32.add (i32.const -357228946)) + (i32.add (i32.const -1298039498)) + (i32.add (i32.const 1641631234)) + (i32.add (i32.const -2117680814)) + (i32.add (i32.const 1801197506)) + (i32.add (i32.const 640978729)) + (i32.add (i32.const 9869328)) + (i32.add (i32.const 1578095249)) + (i32.add (i32.const -728819744)) + (i32.add (i32.const -1283817467)) + (i32.add (i32.const 1713753928)) + (i32.add (i32.const -101271233)) + (i32.add (i32.const 1869420097)) + (i32.add (i32.const -1121390534)) + (i32.add (i32.const 1975265589)) + (i32.add (i32.const -1246039912)) + (i32.add (i32.const -504585793)) + (i32.add (i32.const 492584231)) + (i32.add (i32.const 518932363)) + (i32.add (i32.const -1111731898)) + (i32.add (i32.const 1557462434)) + (i32.add (i32.const 1049486585)) + (i32.add (i32.const 1720537044)) + (i32.add (i32.const 419345670)) + (i32.add (i32.const -936314542)) + (i32.add (i32.const -1441708243)) + (i32.add (i32.const 59124159)) + (i32.add (i32.const 639944940)) + (i32.add (i32.const -335702704)) + (i32.add (i32.const -533062492)) + (i32.add (i32.const 491014201)) + (i32.add (i32.const -1431001445)) + (i32.add (i32.const 1731613638)) + (i32.add (i32.const 568386822)) + (i32.add (i32.const -294115530)) + (i32.add (i32.const 731402281)) + (i32.add (i32.const 471308731)) + (i32.add (i32.const 490678044)) + (i32.add (i32.const -1829208928)) + (i32.add (i32.const -831960369)) + (i32.add (i32.const 1509025427)) + (i32.add (i32.const 1230837481)) + (i32.add (i32.const -2136927099)) + (i32.add (i32.const 1656091198)) + (i32.add (i32.const -1095318730)) + (i32.add (i32.const 1781860934)) + (i32.add (i32.const -1867799388)) + (i32.add (i32.const 824804571)) + (i32.add (i32.const -465437308)) + (i32.add (i32.const 996058476)) + (i32.add (i32.const -153257187)) + (i32.add (i32.const -1602683066)) + (i32.add (i32.const 1953661472)) + (i32.add (i32.const -1410565817)) + (i32.add (i32.const -1935435046)) + (i32.add (i32.const 1851574405)) + (i32.add (i32.const 2032974099)) + (i32.add (i32.const -344486373)) + (i32.add (i32.const 100579662)) + (i32.add (i32.const -1293880521)) + (i32.add (i32.const -330746075)) + (i32.add (i32.const 930128313)) + (i32.add (i32.const -252987099)) + (i32.add (i32.const 937560848)) + (i32.add (i32.const -403256012)) + (i32.add (i32.const -1027650702)) + (i32.add (i32.const -2081951495)) + (i32.add (i32.const 793317316)) + (i32.add (i32.const 1391212562)) + (i32.add (i32.const -795213752)) + (i32.add (i32.const -1931069015)) + (i32.add (i32.const 939619888)) + (i32.add (i32.const 1260623375)) + (i32.add (i32.const -399744962)) + (i32.add (i32.const 2060931771)) + (i32.add (i32.const 139296537)) + (i32.add (i32.const 2004543448)) + (i32.add (i32.const -1606508847)) + (i32.add (i32.const -1686801176)) + (i32.add (i32.const -1351321916)) + (i32.add (i32.const 89077211)) + (i32.add (i32.const -1279785195)) + (i32.add (i32.const -2141509163)) + (i32.add (i32.const 2031489691)) + (i32.add (i32.const 1027975229)) + (i32.add (i32.const 849121718)) + (i32.add (i32.const 836787137)) + (i32.add (i32.const -1476467911)) + (i32.add (i32.const -1342409239)) + (i32.add (i32.const 360184922)) + (i32.add (i32.const 942182911)) + (i32.add (i32.const -118778278)) + (i32.add (i32.const 1544240663)) + (i32.add (i32.const 461429799)) + (i32.add (i32.const 1194993406)) + (i32.add (i32.const 1730337458)) + (i32.add (i32.const -1237458776)) + (i32.add (i32.const 502543032)) + (i32.add (i32.const -751789400)) + (i32.add (i32.const 2021383366)) + (i32.add (i32.const 958482279)) + (i32.add (i32.const -1975862675)) + (i32.add (i32.const 1661418100)) + (i32.add (i32.const -522889312)) + (i32.add (i32.const 830771819)) + (i32.add (i32.const 1149153254)) + (i32.add (i32.const -657425713)) + (i32.add (i32.const 279418187)) + (i32.add (i32.const 970839453)) + (i32.add (i32.const -1854980212)) + (i32.add (i32.const 2118038711)) + (i32.add (i32.const 464580350)) + (i32.add (i32.const 1128096023)) + (i32.add (i32.const 38362775)) + (i32.add (i32.const 548170300)) + (i32.add (i32.const 68192363)) + (i32.add (i32.const 90302796)) + (i32.add (i32.const -2135724679)) + (i32.add (i32.const -655805291)) + (i32.add (i32.const 209454711)) + (i32.add (i32.const -915246743)) + (i32.add (i32.const 731068112)) + (i32.add (i32.const -1640117871)) + (i32.add (i32.const 1960294461)) + (i32.add (i32.const -1802556785)) + (i32.add (i32.const -1228556881)) + (i32.add (i32.const -1606126099)) + (i32.add (i32.const 1818364131)) + (i32.add (i32.const 857426341)) + (i32.add (i32.const 1756103489)) + (i32.add (i32.const -79669063)) + (i32.add (i32.const 464993660)) + (i32.add (i32.const 664896757)) + (i32.add (i32.const 135677958)) + (i32.add (i32.const 1330130477)) + (i32.add (i32.const 400437469)) + (i32.add (i32.const -1518773776)) + (i32.add (i32.const -1830887066)) + (i32.add (i32.const 423979479)) + (i32.add (i32.const -1266384630)) + (i32.add (i32.const -167368971)) + (i32.add (i32.const 73229364)) + (i32.add (i32.const -584516989)) + (i32.add (i32.const 1838885297)) + (i32.add (i32.const -1044115326)) + (i32.add (i32.const -1364715450)) + (i32.add (i32.const -1791147326)) + (i32.add (i32.const 1560475228)) + (i32.add (i32.const -1929046878)) + (i32.add (i32.const 1724280467)) + (i32.add (i32.const -1554934622)) + (i32.add (i32.const 1035195853)) + (i32.add (i32.const -1542666400)) + (i32.add (i32.const 600765030)) + (i32.add (i32.const -113435639)) + (i32.add (i32.const -882492665)) + (i32.add (i32.const -443059656)) + (i32.add (i32.const 637876982)) + (i32.add (i32.const 1561299732)) + (i32.add (i32.const 762903310)) + (i32.add (i32.const 1263068806)) + (i32.add (i32.const -1270611588)) + (i32.add (i32.const -1237912398)) + (i32.add (i32.const -1958152668)) + (i32.add (i32.const -467560879)) + (i32.add (i32.const 726893904)) + (i32.add (i32.const 914920372)) + (i32.add (i32.const 1294210362)) + (i32.add (i32.const -302345583)) + (i32.add (i32.const 950359292)) + (i32.add (i32.const -608732742)) + (i32.add (i32.const 1399419391)) + (i32.add (i32.const 1327495377)) + (i32.add (i32.const 1844618188)) + (i32.add (i32.const -1270512471)) + (i32.add (i32.const -297240498)) + (i32.add (i32.const -166490751)) + (i32.add (i32.const 1714589126)) + (i32.add (i32.const -843880360)) + (i32.add (i32.const -1860999845)) + (i32.add (i32.const -1607268524)) + (i32.add (i32.const -445451093)) + (i32.add (i32.const 2051347741)) + (i32.add (i32.const -1803653707)) + (i32.add (i32.const -635902812)) + (i32.add (i32.const -1314227650)) + (i32.add (i32.const 1013800483)) + (i32.add (i32.const 860059937)) + (i32.add (i32.const 1095204012)) + (i32.add (i32.const 83870297)) + (i32.add (i32.const -433712244)) + (i32.add (i32.const -938467111)) + (i32.add (i32.const 1199955172)) + (i32.add (i32.const -177751962)) + (i32.add (i32.const 418878275)) + (i32.add (i32.const -593751014)) + (i32.add (i32.const -1783392796)) + (i32.add (i32.const 1890856347)) + (i32.add (i32.const -1019737087)) + (i32.add (i32.const -1706743230)) + (i32.add (i32.const -1775296737)) + (i32.add (i32.const -1795874782)) + (i32.add (i32.const 731036305)) + (i32.add (i32.const -1235124333)) + (i32.add (i32.const 863867416)) + (i32.add (i32.const -2018608033)) + (i32.add (i32.const -1464537490)) + (i32.add (i32.const 217608447)) + (i32.add (i32.const 1747359857)) + (i32.add (i32.const 723539479)) + (i32.add (i32.const 913747253)) + (i32.add (i32.const 23909273)) + (i32.add (i32.const -1161894891)) + (i32.add (i32.const -1800443486)) + (i32.add (i32.const -393956009)) + (i32.add (i32.const 1722753199)) + (i32.add (i32.const -150741270)) + (i32.add (i32.const 487390592)) + (i32.add (i32.const 2131306475)) + (i32.add (i32.const -870627565)) + (i32.add (i32.const -610161943)) + (i32.add (i32.const -400319263)) + (i32.add (i32.const -1126890450)) + (i32.add (i32.const -2057208419)) + (i32.add (i32.const -1752748247)) + (i32.add (i32.const -1106999205)) + (i32.add (i32.const 2093568286)) + (i32.add (i32.const 1161931688)) + (i32.add (i32.const 1008886476)) + (i32.add (i32.const -1304068922)) + (i32.add (i32.const -60894493)) + (i32.add (i32.const -1876659757)) + (i32.add (i32.const 1908324003)) + (i32.add (i32.const 1300998792)) + (i32.add (i32.const 2131459563)) + (i32.add (i32.const -904286341)) + (i32.add (i32.const -912867138)) + (i32.add (i32.const -1776801317)) + (i32.add (i32.const -203264017)) + (i32.add (i32.const -1890626874)) + (i32.add (i32.const 697629690)) + (i32.add (i32.const 1649231166)) + (i32.add (i32.const -1744790838)) + (i32.add (i32.const 571581458)) + (i32.add (i32.const -113928699)) + (i32.add (i32.const -393534175)) + (i32.add (i32.const 1504386845)) + (i32.add (i32.const -1074347429)) + (i32.add (i32.const -1966165576)) + (i32.add (i32.const -419020006)) + (i32.add (i32.const 2136615889)) + (i32.add (i32.const -496694726)) + (i32.add (i32.const -703426394)) + (i32.add (i32.const -1633759164)) + (i32.add (i32.const -581034930)) + (i32.add (i32.const -1668487662)) + (i32.add (i32.const 2094698391)) + (i32.add (i32.const 18392059)) + (i32.add (i32.const 522445453)) + (i32.add (i32.const -1443185236)) + (i32.add (i32.const -142557477)) + (i32.add (i32.const 20165393)) + (i32.add (i32.const 1072393546)) + (i32.add (i32.const -1715620988)) + (i32.add (i32.const 1145079213)) + (i32.add (i32.const -2062486527)) + (i32.add (i32.const -464653146)) + (i32.add (i32.const 41112017)) + (i32.add (i32.const -2140645893)) + (i32.add (i32.const -1410253981)) + (i32.add (i32.const -1334614968)) + (i32.add (i32.const 698401124)) + (i32.add (i32.const -1406167328)) + (i32.add (i32.const 396670004)) + (i32.add (i32.const 425525010)) + (i32.add (i32.const -1166249464)) + (i32.add (i32.const -221989522)) + (i32.add (i32.const -1388015697)) + (i32.add (i32.const 1876999277)) + (i32.add (i32.const 774034358)) + (i32.add (i32.const -28131685)) + (i32.add (i32.const 300853633)) + (i32.add (i32.const 2064400787)) + (i32.add (i32.const 1471660451)) + (i32.add (i32.const 558730382)) + (i32.add (i32.const -1034013520)) + (i32.add (i32.const -268686294)) + (i32.add (i32.const 362947191)) + (i32.add (i32.const 183376619)) + (i32.add (i32.const 1735035827)) + (i32.add (i32.const 1972014937)) + (i32.add (i32.const 1218415613)) + (i32.add (i32.const 1299195155)) + (i32.add (i32.const -322189501)) + (i32.add (i32.const -1030493950)) + (i32.add (i32.const 728517957)) + (i32.add (i32.const -1859528930)) + (i32.add (i32.const 729719730)) + (i32.add (i32.const -1093544889)) + (i32.add (i32.const 26311282)) + (i32.add (i32.const 1273886484)) + (i32.add (i32.const 1907852703)) + (i32.add (i32.const -521802424)) + (i32.add (i32.const 587805861)) + (i32.add (i32.const -1489727643)) + (i32.add (i32.const 2021885663)) + (i32.add (i32.const 1457504866)) + (i32.add (i32.const -678624385)) + (i32.add (i32.const 2109654033)) + (i32.add (i32.const 1320311029)) + (i32.add (i32.const 759813716)) + (i32.add (i32.const -84970050)) + (i32.add (i32.const 718731494)) + (i32.add (i32.const -2141071862)) + (i32.add (i32.const 1566362010)) + (i32.add (i32.const 416776029)) + (i32.add (i32.const 1493712604)) + (i32.add (i32.const 326527863)) + (i32.add (i32.const -524054312)) + (i32.add (i32.const 1087408626)) + (i32.add (i32.const -672741452)) + (i32.add (i32.const -688860814)) + (i32.add (i32.const -222250959)) + (i32.add (i32.const 1508360265)) + (i32.add (i32.const 519153743)) + (i32.add (i32.const 2078146941)) + (i32.add (i32.const -1306029013)) + (i32.add (i32.const -1326490203)) + (i32.add (i32.const 1810856530)) + (i32.add (i32.const -396172167)) + (i32.add (i32.const 1955490559)) + (i32.add (i32.const 230964646)) + (i32.add (i32.const 1678481153)) + (i32.add (i32.const -375945963)) + (i32.add (i32.const -676665274)) + (i32.add (i32.const -1632896932)) + (i32.add (i32.const -289957007)) + (i32.add (i32.const 835029665)) + (i32.add (i32.const -2128576657)) + (i32.add (i32.const 2037725205)) + (i32.add (i32.const -2072037888)) + (i32.add (i32.const -720060615)) + (i32.add (i32.const -1236330913)) + (i32.add (i32.const -785064647)) + (i32.add (i32.const 506863673)) + (i32.add (i32.const -688146549)) + (i32.add (i32.const -1294059253)) + (i32.add (i32.const 2029652666)) + (i32.add (i32.const 560261911)) + (i32.add (i32.const -1319430599)) + (i32.add (i32.const 1879206776)) + (i32.add (i32.const -2099928514)) + (i32.add (i32.const -78984412)) + (i32.add (i32.const -1613597650)) + (i32.add (i32.const -1713488033)) + (i32.add (i32.const 1964221621)) + (i32.add (i32.const -216376968)) + (i32.add (i32.const -1216774188)) + (i32.add (i32.const 307838593)) + (i32.add (i32.const 1227455844)) + (i32.add (i32.const 163478092)) + (i32.add (i32.const 644191295)) + (i32.add (i32.const -1228947471)) + (i32.add (i32.const 145766034)) + (i32.add (i32.const -1646442694)) + (i32.add (i32.const 2065122502)) + (i32.add (i32.const 1942778268)) + (i32.add (i32.const 1334709447)) + (i32.add (i32.const 1037536668)) + (i32.add (i32.const -1211723616)) + (i32.add (i32.const -2072791588)) + (i32.add (i32.const 36940418)) + (i32.add (i32.const -1416548363)) + (i32.add (i32.const 137844392)) + (i32.add (i32.const -268818858)) + (i32.add (i32.const 848479332)) + (i32.add (i32.const -1201666690)) + (i32.add (i32.const -130491619)) + (i32.add (i32.const -953384789)) + (i32.add (i32.const -280020691)) + (i32.add (i32.const 688759064)) + (i32.add (i32.const 1414885046)) + (i32.add (i32.const -868581713)) + (i32.add (i32.const 1680528162)) + (i32.add (i32.const -1956330325)) + (i32.add (i32.const -534441552)) + (i32.add (i32.const -792366683)) + (i32.add (i32.const -1777212762)) + (i32.add (i32.const -2118953280)) + (i32.add (i32.const -1609275093)) + (i32.add (i32.const 1304645729)) + (i32.add (i32.const 1002769739)) + (i32.add (i32.const -1590636058)) + (i32.add (i32.const 1015951331)) + (i32.add (i32.const 1142366368)) + (i32.add (i32.const -1112271065)) + (i32.add (i32.const -1395723959)) + (i32.add (i32.const 1057024677)) + (i32.add (i32.const 22772915)) + (i32.add (i32.const 815180360)) + (i32.add (i32.const -878166947)) + (i32.add (i32.const -947290206)) + (i32.add (i32.const -673150311)) + (i32.add (i32.const 1752363358)) + (i32.add (i32.const 1767994693)) + (i32.add (i32.const -1664375570)) + (i32.add (i32.const 754045620)) + (i32.add (i32.const 2127832897)) + (i32.add (i32.const 1614852802)) + (i32.add (i32.const -2038261213)) + (i32.add (i32.const -357141171)) + (i32.add (i32.const 711646773)) + (i32.add (i32.const -1853706190)) + (i32.add (i32.const 1998474864)) + (i32.add (i32.const -1436448786)) + (i32.add (i32.const -166505584)) + (i32.add (i32.const 732556064)) + (i32.add (i32.const -1024075555)) + (i32.add (i32.const -1305862012)) + (i32.add (i32.const -76161419)) + (i32.add (i32.const 266289079)) + (i32.add (i32.const -1046370950)) + (i32.add (i32.const 1762084042)) + (i32.add (i32.const 747530119)) + (i32.add (i32.const 1454236604)) + (i32.add (i32.const -1308364578)) + (i32.add (i32.const -698405538)) + (i32.add (i32.const -1099419526)) + (i32.add (i32.const 139224961)) + (i32.add (i32.const -206398144)) + (i32.add (i32.const -1297562327)) + (i32.add (i32.const 1173099027)) + (i32.add (i32.const 196218438)) + (i32.add (i32.const 1938962948)) + (i32.add (i32.const -1408722837)) + (i32.add (i32.const -937317934)) + (i32.add (i32.const -1492953028)) + (i32.add (i32.const -295638389)) + (i32.add (i32.const -1163203444)) + (i32.add (i32.const -1886808991)) + (i32.add (i32.const -1684196708)) + (i32.add (i32.const 1136492712)) + (i32.add (i32.const -970758593)) + (i32.add (i32.const 2048940174)) + (i32.add (i32.const -1004172296)) + (i32.add (i32.const 156908094)) + (i32.add (i32.const -1092030014)) + (i32.add (i32.const 881472798)) + (i32.add (i32.const -1208500447)) + (i32.add (i32.const -242255243)) + (i32.add (i32.const 792775131)) + (i32.add (i32.const -1655280745)) + (i32.add (i32.const -2138266117)) + (i32.add (i32.const 2045501621)) + (i32.add (i32.const 769692386)) + (i32.add (i32.const 189997647)) + (i32.add (i32.const 2056182626)) + (i32.add (i32.const -1834545529)) + (i32.add (i32.const 226456603)) + (i32.add (i32.const 316253999)) + (i32.add (i32.const 1464722373)) + (i32.add (i32.const 1396540096)) + (i32.add (i32.const -896944610)) + (i32.add (i32.const 648214732)) + (i32.add (i32.const -1351548663)) + (i32.add (i32.const 287227837)) + (i32.add (i32.const 1707495209)) + (i32.add (i32.const 371321678)) + (i32.add (i32.const -1141623554)) + (i32.add (i32.const 1896780998)) + (i32.add (i32.const -241907870)) + (i32.add (i32.const 823701154)) + (i32.add (i32.const -362412272)) + (i32.add (i32.const 1937247282)) + (i32.add (i32.const -390508788)) + (i32.add (i32.const -1538363370)) + (i32.add (i32.const 1882961055)) + (i32.add (i32.const -1786962123)) + (i32.add (i32.const 123410763)) + (i32.add (i32.const -931615853)) + (i32.add (i32.const 1685676185)) + (i32.add (i32.const -824641810)) + (i32.add (i32.const -1278095319)) + (i32.add (i32.const -569646453)) + (i32.add (i32.const -247733069)) + (i32.add (i32.const -855838178)) + (i32.add (i32.const 620082195)) + (i32.add (i32.const 1625551158)) + (i32.add (i32.const -51200701)) + (i32.add (i32.const -715470113)) + (i32.add (i32.const 1619873115)) + (i32.add (i32.const -981265286)) + (i32.add (i32.const -1292562405)) + (i32.add (i32.const -1653634919)) + (i32.add (i32.const -1357790027)) + (i32.add (i32.const -109503667)) + (i32.add (i32.const 1030592652)) + (i32.add (i32.const 1347515477)) + (i32.add (i32.const 435295584)) + (i32.add (i32.const 1034514037)) + (i32.add (i32.const -1225059497)) + (i32.add (i32.const -1044739589)) + (i32.add (i32.const 1642465620)) + (i32.add (i32.const 662977697)) + (i32.add (i32.const 1588922031)) + (i32.add (i32.const 84328881)) + (i32.add (i32.const -1943446044)) + (i32.add (i32.const 1469292829)) + (i32.add (i32.const -1642206874)) + (i32.add (i32.const 1801863550)) + (i32.add (i32.const 103688359)) + (i32.add (i32.const -658115861)) + (i32.add (i32.const -970438655)) + (i32.add (i32.const 895087072)) + (i32.add (i32.const 1907124746)) + (i32.add (i32.const 1154142427)) + (i32.add (i32.const -759024276)) + (i32.add (i32.const -1020283871)) + (i32.add (i32.const -401953922)) + (i32.add (i32.const 2045140652)) + (i32.add (i32.const 1380939675)) + (i32.add (i32.const -919365274)) + (i32.add (i32.const -461763518)) + (i32.add (i32.const -2096310770)) + (i32.add (i32.const -1099692079)) + (i32.add (i32.const -1539969768)) + (i32.add (i32.const -1826130167)) + (i32.add (i32.const 461924280)) + (i32.add (i32.const 91294261)) + (i32.add (i32.const -334016000)) + (i32.add (i32.const 811281422)) + (i32.add (i32.const 1435446272)) + (i32.add (i32.const 1211108137)) + (i32.add (i32.const -980150647)) + (i32.add (i32.const -104625453)) + (i32.add (i32.const 1229744584)) + (i32.add (i32.const -920250648)) + (i32.add (i32.const 1723391008)) + (i32.add (i32.const -542490193)) + (i32.add (i32.const 789974790)) + (i32.add (i32.const -2060491065)) + (i32.add (i32.const -2051967185)) + (i32.add (i32.const 1638982192)) + (i32.add (i32.const -826403809)) + (i32.add (i32.const 1142389052)) + (i32.add (i32.const -1332225038)) + (i32.add (i32.const 1401920028)) + (i32.add (i32.const -1614759620)) + (i32.add (i32.const 182770034)) + (i32.add (i32.const 209528583)) + (i32.add (i32.const 1071017003)) + (i32.add (i32.const 593642603)) + (i32.add (i32.const 1329425924)) + (i32.add (i32.const -287591885)) + (i32.add (i32.const 39992987)) + (i32.add (i32.const -130837213)) + (i32.add (i32.const 1156522852)) + (i32.add (i32.const 1054036682)) + (i32.add (i32.const -443269944)) + (i32.add (i32.const -1622857384)) + (i32.add (i32.const -1892574041)) + (i32.add (i32.const 206378034)) + (i32.add (i32.const -1139200321)) + (i32.add (i32.const -2010138137)) + (i32.add (i32.const -515031790)) + (i32.add (i32.const 287256946)) + (i32.add (i32.const 357663226)) + (i32.add (i32.const -1150665942)) + (i32.add (i32.const -928245268)) + (i32.add (i32.const 1871928978)) + (i32.add (i32.const -87485163)) + (i32.add (i32.const -822371607)) + (i32.add (i32.const 71371027)) + (i32.add (i32.const 1196582260)) + (i32.add (i32.const 662429285)) + (i32.add (i32.const -699704305)) + (i32.add (i32.const 1823922694)) + (i32.add (i32.const -2004970205)) + (i32.add (i32.const -1250954562)) + (i32.add (i32.const -1990668673)) + (i32.add (i32.const -128741529)) + (i32.add (i32.const 296146741)) + (i32.add (i32.const -1091037295)) + (i32.add (i32.const -1243153462)) + (i32.add (i32.const -1491693968)) + (i32.add (i32.const 275556482)) + (i32.add (i32.const -851730483)) + (i32.add (i32.const 688432434)) + (i32.add (i32.const 1194661016)) + (i32.add (i32.const 1314497771)) + (i32.add (i32.const 463600951)) + (i32.add (i32.const 1474849256)) + (i32.add (i32.const 1551522980)) + (i32.add (i32.const -374082700)) + (i32.add (i32.const -2102383093)) + (i32.add (i32.const 551062563)) + (i32.add (i32.const 498964746)) + (i32.add (i32.const 2060626128)) + (i32.add (i32.const -810627826)) + (i32.add (i32.const 844598910)) + (i32.add (i32.const -2063271883)) + (i32.add (i32.const -1827064818)) + (i32.add (i32.const 651018880)) + (i32.add (i32.const 1397578964)) + (i32.add (i32.const -98283814)) + (i32.add (i32.const 1009305976)) + (i32.add (i32.const 895786543)) + (i32.add (i32.const 477530916)) + (i32.add (i32.const -2118335060)) + (i32.add (i32.const -1944918440)) + (i32.add (i32.const 854996931)) + (i32.add (i32.const -46255560)) + (i32.add (i32.const -2077853301)) + (i32.add (i32.const 899645925)) + (i32.add (i32.const 1905292387)) + (i32.add (i32.const -1655445957)) + (i32.add (i32.const 272025929)) + (i32.add (i32.const 370841907)) + (i32.add (i32.const 2051814394)) + (i32.add (i32.const 200531223)) + (i32.add (i32.const 1261896444)) + (i32.add (i32.const -488251942)) + (i32.add (i32.const -1443448755)) + (i32.add (i32.const -231822783)) + (i32.add (i32.const 1537582203)) + (i32.add (i32.const -1200858718)) + (i32.add (i32.const 78004780)) + (i32.add (i32.const -468922531)) + (i32.add (i32.const 262273890)) + (i32.add (i32.const 1728340632)) + (i32.add (i32.const 1456531252)) + (i32.add (i32.const -629894328)) + (i32.add (i32.const 565051379)) + (i32.add (i32.const 1354259718)) + (i32.add (i32.const 2015259269)) + (i32.add (i32.const 1183067399)) + (i32.add (i32.const 270517288)) + (i32.add (i32.const 1463236008)) + (i32.add (i32.const -135939337)) + (i32.add (i32.const 1509481956)) + (i32.add (i32.const -1604241895)) + (i32.add (i32.const 434770187)) + (i32.add (i32.const 1194702718)) + (i32.add (i32.const 1947590985)) + (i32.add (i32.const 2145771171)) + (i32.add (i32.const -963502829)) + (i32.add (i32.const -1414505245)) + (i32.add (i32.const 920033866)) + (i32.add (i32.const 1213739557)) + (i32.add (i32.const -471233634)) + (i32.add (i32.const -1170122188)) + (i32.add (i32.const -331057055)) + (i32.add (i32.const -1396281203)) + (i32.add (i32.const -1932355065)) + (i32.add (i32.const 248013856)) + (i32.add (i32.const -990232993)) + (i32.add (i32.const 973172284)) + (i32.add (i32.const -1305580688)) + (i32.add (i32.const 1801309872)) + (i32.add (i32.const -283601304)) + (i32.add (i32.const -1607974474)) + (i32.add (i32.const -1908042420)) + (i32.add (i32.const -825012743)) + (i32.add (i32.const -1926261037)) + (i32.add (i32.const -1923133412)) + (i32.add (i32.const 1327102864)) + (i32.add (i32.const 680182840)) + (i32.add (i32.const 1555684396)) + (i32.add (i32.const -1872478627)) + (i32.add (i32.const -1466469788)) + (i32.add (i32.const -817664791)) + (i32.add (i32.const -1996371375)) + (i32.add (i32.const 174888984)) + (i32.add (i32.const -894600601)) + (i32.add (i32.const -1501046337)) + (i32.add (i32.const 1416654924)) + (i32.add (i32.const -1318167684)) + (i32.add (i32.const -836412856)) + (i32.add (i32.const -1554030052)) + (i32.add (i32.const -341027630)) + (i32.add (i32.const 771840300)) + (i32.add (i32.const 976016490)) + (i32.add (i32.const -763954777)) + (i32.add (i32.const 659968298)) + (i32.add (i32.const 787701014)) + (i32.add (i32.const 1333534421)) + (i32.add (i32.const 645771713)) + (i32.add (i32.const -683459418)) + (i32.add (i32.const 1736350739)) + (i32.add (i32.const 1471923536)) + (i32.add (i32.const -152505420)) + (i32.add (i32.const -2051556489)) + (i32.add (i32.const -1007190794)) + (i32.add (i32.const 1106928231)) + (i32.add (i32.const -1288900833)) + (i32.add (i32.const -1577941005)) + (i32.add (i32.const 882476120)) + (i32.add (i32.const -731908047)) + (i32.add (i32.const -1004851801)) + (i32.add (i32.const -1309403246)) + (i32.add (i32.const -163863045)) + (i32.add (i32.const -1943578190)) + (i32.add (i32.const 1093506873)) + (i32.add (i32.const 916063159)) + (i32.add (i32.const 418881167)) + (i32.add (i32.const 1136555289)) + (i32.add (i32.const -2133190872)) + (i32.add (i32.const -1261550614)) + (i32.add (i32.const 1498249401)) + (i32.add (i32.const 1963940951)) + (i32.add (i32.const 114894282)) + (i32.add (i32.const 1430414811)) + (i32.add (i32.const -1024334200)) + (i32.add (i32.const 1891153078)) + (i32.add (i32.const 1275265179)) + (i32.add (i32.const 1719139848)) + (i32.add (i32.const -1474383954)) + (i32.add (i32.const -1158999953)) + (i32.add (i32.const -1542605994)) + (i32.add (i32.const 893851305)) + (i32.add (i32.const 596499550)) + (i32.add (i32.const -1832003864)) + (i32.add (i32.const 1722296803)) + (i32.add (i32.const -1069634253)) + (i32.add (i32.const -1054837957)) + (i32.add (i32.const 677622418)) + (i32.add (i32.const 1115555091)) + (i32.add (i32.const -293371837)) + (i32.add (i32.const -918517760)) + (i32.add (i32.const -1623848215)) + (i32.add (i32.const -1726049160)) + (i32.add (i32.const 1518987491)) + (i32.add (i32.const 1896791698)) + (i32.add (i32.const 1913156066)) + (i32.add (i32.const 211654653)) + (i32.add (i32.const 938254506)) + (i32.add (i32.const -105792589)) + (i32.add (i32.const -555908599)) + (i32.add (i32.const -1099124070)) + (i32.add (i32.const -2133026988)) + (i32.add (i32.const -921659724)) + (i32.add (i32.const 747668787)) + (i32.add (i32.const 1706257467)) + (i32.add (i32.const 1086799158)) + (i32.add (i32.const 330094363)) + (i32.add (i32.const -1697311821)) + (i32.add (i32.const -1359289414)) + (i32.add (i32.const -1827799745)) + (i32.add (i32.const 96376449)) + (i32.add (i32.const -164219375)) + (i32.add (i32.const 1440145116)) + (i32.add (i32.const -801514853)) + (i32.add (i32.const 370499830)) + (i32.add (i32.const 2105787481)) + (i32.add (i32.const -391816011)) + (i32.add (i32.const -704903641)) + (i32.add (i32.const 1863061289)) + (i32.add (i32.const 667187604)) + (i32.add (i32.const -1748350570)) + (i32.add (i32.const -1997685907)) + (i32.add (i32.const 622570725)) + (i32.add (i32.const -1442898008)) + (i32.add (i32.const 1969705446)) + (i32.add (i32.const -1110222103)) + (i32.add (i32.const 1421901500)) + (i32.add (i32.const 1059988849)) + (i32.add (i32.const 281426937)) + (i32.add (i32.const 1353077054)) + (i32.add (i32.const -1894684770)) + (i32.add (i32.const -1385056506)) + (i32.add (i32.const -10769548)) + (i32.add (i32.const 37778681)) + (i32.add (i32.const -1653124476)) + (i32.add (i32.const -1690068036)) + (i32.add (i32.const 1386400246)) + (i32.add (i32.const 1725713823)) + (i32.add (i32.const -126502379)) + (i32.add (i32.const -291957206)) + (i32.add (i32.const -1336625502)) + (i32.add (i32.const -1611420107)) + (i32.add (i32.const 1496241847)) + (i32.add (i32.const 1928000831)) + (i32.add (i32.const 1880152999)) + (i32.add (i32.const -888243511)) + (i32.add (i32.const 442894015)) + (i32.add (i32.const 624433172)) + (i32.add (i32.const -518677982)) + (i32.add (i32.const -19171011)) + (i32.add (i32.const 1656777887)) + (i32.add (i32.const 1272430323)) + (i32.add (i32.const 28137365)) + (i32.add (i32.const -1737302743)) + (i32.add (i32.const 1482089696)) + (i32.add (i32.const -2095019904)) + (i32.add (i32.const -756551456)) + (i32.add (i32.const -1758210745)) + (i32.add (i32.const 1547740270)) + (i32.add (i32.const -1692679319)) + (i32.add (i32.const -2069712162)) + (i32.add (i32.const 1147442438)) + (i32.add (i32.const -217535571)) + (i32.add (i32.const -1025240416)) + (i32.add (i32.const -1349733808)) + (i32.add (i32.const 1999167989)) + (i32.add (i32.const 717562706)) + (i32.add (i32.const 1771360221)) + (i32.add (i32.const 1442175874)) + (i32.add (i32.const 1746070886)) + (i32.add (i32.const 1836511017)) + (i32.add (i32.const -1821028883)) + (i32.add (i32.const 766804225)) + (i32.add (i32.const -1436904208)) + (i32.add (i32.const -55772192)) + (i32.add (i32.const -1990501685)) + (i32.add (i32.const 1909622078)) + (i32.add (i32.const -238858046)) + (i32.add (i32.const -212056212)) + (i32.add (i32.const -204869392)) + (i32.add (i32.const 1743975507)) + (i32.add (i32.const -181997173)) + (i32.add (i32.const 1559366572)) + (i32.add (i32.const -1923637730)) + (i32.add (i32.const 1369560813)) + (i32.add (i32.const 2034568756)) + (i32.add (i32.const 1862669263)) + (i32.add (i32.const 778850471)) + (i32.add (i32.const 615986446)) + (i32.add (i32.const 1320920805)) + (i32.add (i32.const 1985263572)) + (i32.add (i32.const 1396508025)) + (i32.add (i32.const -1474762868)) + (i32.add (i32.const 317873935)) + (i32.add (i32.const 1608417828)) + (i32.add (i32.const -2094804973)) + (i32.add (i32.const -398758329)) + (i32.add (i32.const 130327593)) + (i32.add (i32.const -2063481784)) + (i32.add (i32.const 858478890)) + (i32.add (i32.const -513442428)) + (i32.add (i32.const 1336226789)) + (i32.add (i32.const 1893200004)) + (i32.add (i32.const 954921130)) + (i32.add (i32.const -1619192087)) + (i32.add (i32.const 309952332)) + (i32.add (i32.const 1532627086)) + (i32.add (i32.const -252483519)) + (i32.add (i32.const 168384295)) + (i32.add (i32.const -1988660201)) + (i32.add (i32.const 1219052688)) + (i32.add (i32.const 2108563032)) + (i32.add (i32.const 345367434)) + (i32.add (i32.const -62189958)) + (i32.add (i32.const 1476108229)) + (i32.add (i32.const -1482983246)) + (i32.add (i32.const -230554105)) + (i32.add (i32.const -1884187526)) + (i32.add (i32.const -1298227809)) + (i32.add (i32.const -1833955109)) + (i32.add (i32.const -2100319358)) + (i32.add (i32.const 379855812)) + (i32.add (i32.const 1777058852)) + (i32.add (i32.const -1792680830)) + (i32.add (i32.const -425855009)) + (i32.add (i32.const 21071800)) + (i32.add (i32.const 751909097)) + (i32.add (i32.const -1479767492)) + (i32.add (i32.const -106439643)) + (i32.add (i32.const -226100777)) + (i32.add (i32.const -1815515380)) + (i32.add (i32.const 1606949729)) + (i32.add (i32.const -164930924)) + (i32.add (i32.const -417983089)) + (i32.add (i32.const 15437207)) + (i32.add (i32.const 1324570587)) + (i32.add (i32.const -932528886)) + (i32.add (i32.const 1488040450)) + (i32.add (i32.const -1394750763)) + (i32.add (i32.const 261973578)) + (i32.add (i32.const -1241612962)) + (i32.add (i32.const 1275815580)) + (i32.add (i32.const -1068390327)) + (i32.add (i32.const -1033169222)) + (i32.add (i32.const -688861379)) + (i32.add (i32.const 2055147920)) + (i32.add (i32.const 29951956)) + (i32.add (i32.const -1813232677)) + (i32.add (i32.const -360626067)) + (i32.add (i32.const -1161327367)) + (i32.add (i32.const 121530239)) + (i32.add (i32.const -1984123269)) + (i32.add (i32.const -1293461901)) + (i32.add (i32.const -1666375623)) + (i32.add (i32.const -1803813223)) + (i32.add (i32.const 1826484048)) + (i32.add (i32.const 1352495458)) + (i32.add (i32.const 1293302783)) + (i32.add (i32.const 1738141800)) + (i32.add (i32.const 1290746733)) + (i32.add (i32.const 1254691862)) + (i32.add (i32.const -327101060)) + (i32.add (i32.const 990336740)) + (i32.add (i32.const 2084692687)) + (i32.add (i32.const -960327464)) + (i32.add (i32.const -1101373475)) + (i32.add (i32.const -766168893)) + (i32.add (i32.const -1324407873)) + (i32.add (i32.const -1706393768)) + (i32.add (i32.const 1791646542)) + (i32.add (i32.const -1165864732)) + (i32.add (i32.const 1816954909)) + (i32.add (i32.const -1772888623)) + (i32.add (i32.const -1144433762)) + (i32.add (i32.const -1133171875)) + (i32.add (i32.const 108996190)) + (i32.add (i32.const -485699051)) + (i32.add (i32.const 1554400033)) + (i32.add (i32.const 1505085643)) + (i32.add (i32.const 1183615500)) + (i32.add (i32.const 226292121)) + (i32.add (i32.const 1443951589)) + (i32.add (i32.const -1957513882)) + (i32.add (i32.const -418567144)) + (i32.add (i32.const -263096184)) + (i32.add (i32.const -1330044181)) + (i32.add (i32.const 1112564438)) + (i32.add (i32.const 1115249741)) + (i32.add (i32.const -1165607986)) + (i32.add (i32.const -1555526669)) + (i32.add (i32.const 1411498691)) + (i32.add (i32.const 351446150)) + (i32.add (i32.const 158168263)) + (i32.add (i32.const -1897355302)) + (i32.add (i32.const -390755732)) + (i32.add (i32.const -353148271)) + (i32.add (i32.const -651343834)) + (i32.add (i32.const 1409047278)) + (i32.add (i32.const -627158756)) + (i32.add (i32.const 1428860743)) + (i32.add (i32.const 915281329)) + (i32.add (i32.const 354935292)) + (i32.add (i32.const -1454566607)) + (i32.add (i32.const 152362935)) + (i32.add (i32.const 814229172)) + (i32.add (i32.const 783651975)) + (i32.add (i32.const 359092163)) + (i32.add (i32.const -2134128210)) + (i32.add (i32.const 988216220)) + (i32.add (i32.const -1716158774)) + (i32.add (i32.const 1220098965)) + (i32.add (i32.const 246221937)) + (i32.add (i32.const -959140607)) + (i32.add (i32.const -975804964)) + (i32.add (i32.const -1659379317)) + (i32.add (i32.const -821330342)) + (i32.add (i32.const 1170347573)) + (i32.add (i32.const -130880317)) + (i32.add (i32.const 1520145943)) + (i32.add (i32.const -649682182)) + (i32.add (i32.const -2024049278)) + (i32.add (i32.const -942838584)) + (i32.add (i32.const 1483287477)) + (i32.add (i32.const 1450255942)) + (i32.add (i32.const -298373922)) + (i32.add (i32.const 1239053109)) + (i32.add (i32.const -608694862)) + (i32.add (i32.const -240735654)) + (i32.add (i32.const -539996126)) + (i32.add (i32.const -1701193449)) + (i32.add (i32.const -143804226)) + (i32.add (i32.const 873528092)) + (i32.add (i32.const -675151345)) + (i32.add (i32.const 926194244)) + (i32.add (i32.const -973309184)) + (i32.add (i32.const -1823464382)) + (i32.add (i32.const 1473874262)) + (i32.add (i32.const -1712406388)) + (i32.add (i32.const 1721955165)) + (i32.add (i32.const 1861216718)) + (i32.add (i32.const -1645136321)) + (i32.add (i32.const -351029023)) + (i32.add (i32.const -855252477)) + (i32.add (i32.const 1611299107)) + (i32.add (i32.const -1201170263)) + (i32.add (i32.const 1046500834)) + (i32.add (i32.const -384949807)) + (i32.add (i32.const -1241990943)) + (i32.add (i32.const 1768911446)) + (i32.add (i32.const 1326336673)) + (i32.add (i32.const -1000298618)) + (i32.add (i32.const -183002397)) + (i32.add (i32.const 1926040039)) + (i32.add (i32.const -554502978)) + (i32.add (i32.const 388740428)) + (i32.add (i32.const 1029330343)) + (i32.add (i32.const 420448567)) + (i32.add (i32.const -1588961530)) + (i32.add (i32.const 1620673226)) + (i32.add (i32.const -1847180482)) + (i32.add (i32.const 708242432)) + (i32.add (i32.const -1679629483)) + (i32.add (i32.const 125030054)) + (i32.add (i32.const 1213010401)) + (i32.add (i32.const -1797671638)) + (i32.add (i32.const 748770726)) + (i32.add (i32.const 1638423946)) + (i32.add (i32.const 1620286938)) + (i32.add (i32.const -1224124328)) + (i32.add (i32.const -1247891751)) + (i32.add (i32.const 545982676)) + (i32.add (i32.const -400508340)) + (i32.add (i32.const 2095232473)) + (i32.add (i32.const 1361645689)) + (i32.add (i32.const -394673731)) + (i32.add (i32.const 1587008012)) + (i32.add (i32.const 2047599587)) + (i32.add (i32.const 1622558809)) + (i32.add (i32.const 1109310810)) + (i32.add (i32.const 1739855144)) + (i32.add (i32.const -1136097803)) + (i32.add (i32.const 1397749689)) + (i32.add (i32.const 519219058)) + (i32.add (i32.const 241048013)) + (i32.add (i32.const -1196889098)) + (i32.add (i32.const -1010395242)) + (i32.add (i32.const -1459750919)) + (i32.add (i32.const 1766298983)) + (i32.add (i32.const -1029097101)) + (i32.add (i32.const -13961521)) + (i32.add (i32.const 739546380)) + (i32.add (i32.const 1117244904)) + (i32.add (i32.const 1741746889)) + (i32.add (i32.const -826352976)) + (i32.add (i32.const 48814898)) + (i32.add (i32.const 1743604637)) + (i32.add (i32.const 478651853)) + (i32.add (i32.const 151278871)) + (i32.add (i32.const -1231293083)) + (i32.add (i32.const -484442822)) + (i32.add (i32.const -638912237)) + (i32.add (i32.const -1973978075)) + (i32.add (i32.const -374440766)) + (i32.add (i32.const -1869167516)) + (i32.add (i32.const 793824507)) + (i32.add (i32.const -719205653)) + (i32.add (i32.const -2036212348)) + (i32.add (i32.const -199927608)) + (i32.add (i32.const -843825396)) + (i32.add (i32.const 1904401443)) + (i32.add (i32.const -658571399)) + (i32.add (i32.const -1471221077)) + (i32.add (i32.const -2091628381)) + (i32.add (i32.const 761091453)) + (i32.add (i32.const 707848934)) + (i32.add (i32.const -80119729)) + (i32.add (i32.const -862673248)) + (i32.add (i32.const -1162672)) + (i32.add (i32.const 570354902)) + (i32.add (i32.const 45932322)) + (i32.add (i32.const -637221599)) + (i32.add (i32.const 1193592997)) + (i32.add (i32.const -1885315850)) + (i32.add (i32.const 1439906251)) + (i32.add (i32.const 113771263)) + (i32.add (i32.const 1187298377)) + (i32.add (i32.const -1508612315)) + (i32.add (i32.const 1142349180)) + (i32.add (i32.const 1856922149)) + (i32.add (i32.const 1583593311)) + (i32.add (i32.const 1868992712)) + (i32.add (i32.const 652002250)) + (i32.add (i32.const 174382801)) + (i32.add (i32.const 665945263)) + (i32.add (i32.const 728263653)) + (i32.add (i32.const -230174390)) + (i32.add (i32.const 1703389759)) + (i32.add (i32.const -1856768080)) + (i32.add (i32.const -1482093146)) + (i32.add (i32.const 894251524)) + (i32.add (i32.const -1848380355)) + (i32.add (i32.const -1413820531)) + (i32.add (i32.const -70787669)) + (i32.add (i32.const -585302719)) + (i32.add (i32.const -978993561)) + (i32.add (i32.const 136483554)) + (i32.add (i32.const 425931803)) + (i32.add (i32.const -1073057548)) + (i32.add (i32.const 457852499)) + (i32.add (i32.const 1940189519)) + (i32.add (i32.const -667689440)) + (i32.add (i32.const 1671290101)) + (i32.add (i32.const 411326292)) + (i32.add (i32.const 1097600164)) + (i32.add (i32.const -1259389349)) + (i32.add (i32.const -976088328)) + (i32.add (i32.const 2840169)) + (i32.add (i32.const 2136411398)) + (i32.add (i32.const -1576854382)) + (i32.add (i32.const 1592577856)) + (i32.add (i32.const 444616355)) + (i32.add (i32.const -1009265999)) + (i32.add (i32.const 184824135)) + (i32.add (i32.const 608510129)) + (i32.add (i32.const -2060146024)) + (i32.add (i32.const 1665078055)) + (i32.add (i32.const 783651411)) + (i32.add (i32.const -612896660)) + (i32.add (i32.const -2096190486)) + (i32.add (i32.const 1849292815)) + (i32.add (i32.const 716559908)) + (i32.add (i32.const -563487101)) + (i32.add (i32.const 1050680163)) + (i32.add (i32.const -1660912715)) + (i32.add (i32.const -224485872)) + (i32.add (i32.const 1582978878)) + (i32.add (i32.const -1982324533)) + (i32.add (i32.const 249669457)) + (i32.add (i32.const -2003046217)) + (i32.add (i32.const 1251639784)) + (i32.add (i32.const 583143535)) + (i32.add (i32.const 760516083)) + (i32.add (i32.const 1631724762)) + (i32.add (i32.const 187384023)) + (i32.add (i32.const -1178629212)) + (i32.add (i32.const -92783757)) + (i32.add (i32.const 572348696)) + (i32.add (i32.const 425036232)) + (i32.add (i32.const 1900403732)) + (i32.add (i32.const 1100204334)) + (i32.add (i32.const 10837926)) + (i32.add (i32.const 1648831734)) + (i32.add (i32.const 415070293)) + (i32.add (i32.const -1728247196)) + (i32.add (i32.const 894948934)) + (i32.add (i32.const 1185950328)) + (i32.add (i32.const -1197141805)) + (i32.add (i32.const -107441928)) + (i32.add (i32.const 567252661)) + (i32.add (i32.const -429039289)) + (i32.add (i32.const -953057592)) + (i32.add (i32.const -109551987)) + (i32.add (i32.const -2131587879)) + (i32.add (i32.const 1604749315)) + (i32.add (i32.const -1633922073)) + (i32.add (i32.const -930186703)) + (i32.add (i32.const -818517725)) + (i32.add (i32.const -1510039683)) + (i32.add (i32.const -532790517)) + (i32.add (i32.const 1797577159)) + (i32.add (i32.const -63717143)) + (i32.add (i32.const 715981820)) + (i32.add (i32.const 1637539126)) + (i32.add (i32.const -2023266006)) + (i32.add (i32.const -2114677804)) + (i32.add (i32.const -1713928639)) + (i32.add (i32.const -693328205)) + (i32.add (i32.const -1573182612)) + (i32.add (i32.const -722171997)) + (i32.add (i32.const -519995360)) + (i32.add (i32.const -2076479670)) + (i32.add (i32.const -1278296448)) + (i32.add (i32.const 1737048532)) + (i32.add (i32.const 1176371411)) + (i32.add (i32.const 1639041060)) + (i32.add (i32.const 597507076)) + (i32.add (i32.const 375227531)) + (i32.add (i32.const 847889332)) + (i32.add (i32.const 692020007)) + (i32.add (i32.const 611825858)) + (i32.add (i32.const 1882568323)) + (i32.add (i32.const -1534856737)) + (i32.add (i32.const -962240930)) + (i32.add (i32.const -890513327)) + (i32.add (i32.const 392187737)) + (i32.add (i32.const 1982123171)) + (i32.add (i32.const -2072591907)) + (i32.add (i32.const -1552216663)) + (i32.add (i32.const 175835220)) + (i32.add (i32.const 766198991)) + (i32.add (i32.const 794399496)) + (i32.add (i32.const -1137367003)) + (i32.add (i32.const 386621082)) + (i32.add (i32.const -685042565)) + (i32.add (i32.const -241076991)) + (i32.add (i32.const 12681276)) + (i32.add (i32.const -304529950)) + (i32.add (i32.const -799007465)) + (i32.add (i32.const 1660845913)) + (i32.add (i32.const 1392635833)) + (i32.add (i32.const 1901924530)) + (i32.add (i32.const 1062341424)) + (i32.add (i32.const 202682305)) + (i32.add (i32.const -685838330)) + (i32.add (i32.const -757058567)) + (i32.add (i32.const -1868977264)) + (i32.add (i32.const -773278236)) + (i32.add (i32.const 1888136509)) + (i32.add (i32.const -280096690)) + (i32.add (i32.const 107475283)) + (i32.add (i32.const 1829389765)) + (i32.add (i32.const -1531395582)) + (i32.add (i32.const 28216525)) + (i32.add (i32.const -1286454338)) + (i32.add (i32.const 2023676559)) + (i32.add (i32.const -1826822759)) + (i32.add (i32.const 1421734355)) + (i32.add (i32.const 1428240558)) + (i32.add (i32.const 1066962991)) + (i32.add (i32.const 524305119)) + (i32.add (i32.const 2089317348)) + (i32.add (i32.const -1550144360)) + (i32.add (i32.const -1966609941)) + (i32.add (i32.const -527746576)) + (i32.add (i32.const -1426771707)) + (i32.add (i32.const 349975914)) + (i32.add (i32.const -1668353620)) + (i32.add (i32.const 1061289121)) + (i32.add (i32.const 639023624)) + (i32.add (i32.const 1317004305)) + (i32.add (i32.const -1973088410)) + (i32.add (i32.const -1104317832)) + (i32.add (i32.const -306216217)) + (i32.add (i32.const 935622330)) + (i32.add (i32.const 125669678)) + (i32.add (i32.const 604680641)) + (i32.add (i32.const 1370961606)) + (i32.add (i32.const 1930396884)) + (i32.add (i32.const -1343974608)) + (i32.add (i32.const 257848145)) + (i32.add (i32.const 1181663997)) + (i32.add (i32.const 2129323167)) + (i32.add (i32.const -1925822310)) + (i32.add (i32.const -1887358206)) + (i32.add (i32.const 664415805)) + (i32.add (i32.const 2138802739)) + (i32.add (i32.const 990336710)) + (i32.add (i32.const -1357524334)) + (i32.add (i32.const 197509803)) + (i32.add (i32.const -1387025565)) + (i32.add (i32.const 55186890)) + (i32.add (i32.const 893608204)) + (i32.add (i32.const 343963711)) + (i32.add (i32.const -2142309764)) + (i32.add (i32.const -1171632053)) + (i32.add (i32.const 2006422994)) + (i32.add (i32.const 675961235)) + (i32.add (i32.const 722615435)) + (i32.add (i32.const 728508537)) + (i32.add (i32.const -1434203477)) + (i32.add (i32.const -613900358)) + (i32.add (i32.const -1712314543)) + (i32.add (i32.const 717311807)) + (i32.add (i32.const -1017283035)) + (i32.add (i32.const 156440692)) + (i32.add (i32.const -132648806)) + (i32.add (i32.const -2098811493)) + (i32.add (i32.const 385264750)) + (i32.add (i32.const 177868819)) + (i32.add (i32.const -1728742963)) + (i32.add (i32.const 1505983955)) + (i32.add (i32.const 1197926080)) + (i32.add (i32.const -1202118341)) + (i32.add (i32.const 1964081623)) + (i32.add (i32.const -499060886)) + (i32.add (i32.const -1865907707)) + (i32.add (i32.const -185354447)) + (i32.add (i32.const -866043259)) + (i32.add (i32.const -263863196)) + (i32.add (i32.const 574451809)) + (i32.add (i32.const 1245191032)) + (i32.add (i32.const -2026324719)) + (i32.add (i32.const -587018960)) + (i32.add (i32.const 2134165914)) + (i32.add (i32.const -601847310)) + (i32.add (i32.const -1752515931)) + (i32.add (i32.const -1064588808)) + (i32.add (i32.const 1498096937)) + (i32.add (i32.const -714937319)) + (i32.add (i32.const -1638772348)) + (i32.add (i32.const -1967082038)) + (i32.add (i32.const 417777097)) + (i32.add (i32.const -1645927546)) + (i32.add (i32.const 1017945112)) + (i32.add (i32.const 1737833791)) + (i32.add (i32.const 1978741808)) + (i32.add (i32.const -2138383853)) + (i32.add (i32.const -740414642)) + (i32.add (i32.const 1525949290)) + (i32.add (i32.const 1933693728)) + (i32.add (i32.const -604979333)) + (i32.add (i32.const 1641546840)) + (i32.add (i32.const 473701019)) + (i32.add (i32.const 1312642523)) + (i32.add (i32.const 812223828)) + (i32.add (i32.const 131173133)) + (i32.add (i32.const -647509547)) + (i32.add (i32.const 1599900502)) + (i32.add (i32.const 567864223)) + (i32.add (i32.const -474777595)) + (i32.add (i32.const 999067293)) + (i32.add (i32.const 1757396303)) + (i32.add (i32.const 390447019)) + (i32.add (i32.const 1791345304)) + (i32.add (i32.const 1214650596)) + (i32.add (i32.const 1943341809)) + (i32.add (i32.const -1037079476)) + (i32.add (i32.const 1878415060)) + (i32.add (i32.const -1626488617)) + (i32.add (i32.const -1369529880)) + (i32.add (i32.const -392768141)) + (i32.add (i32.const 76565141)) + (i32.add (i32.const -574982108)) + (i32.add (i32.const 1088788825)) + (i32.add (i32.const 1264950084)) + (i32.add (i32.const 579291635)) + (i32.add (i32.const -2144766118)) + (i32.add (i32.const -1473964737)) + (i32.add (i32.const -1617127707)) + (i32.add (i32.const -576390135)) + (i32.add (i32.const 1346147252)) + (i32.add (i32.const -999105376)) + (i32.add (i32.const 300354643)) + (i32.add (i32.const 2070067188)) + (i32.add (i32.const -2096662924)) + (i32.add (i32.const 884657414)) + (i32.add (i32.const -238257408)) + (i32.add (i32.const -1969193059)) + (i32.add (i32.const 555909352)) + (i32.add (i32.const 957853544)) + (i32.add (i32.const 2013949670)) + (i32.add (i32.const 510638493)) + (i32.add (i32.const -526984780)) + (i32.add (i32.const 412017683)) + (i32.add (i32.const 1460266387)) + (i32.add (i32.const -1934955046)) + (i32.add (i32.const 50363568)) + (i32.add (i32.const -510514185)) + (i32.add (i32.const 1505322219)) + (i32.add (i32.const 1786897134)) + (i32.add (i32.const -1267207231)) + (i32.add (i32.const -1191737671)) + (i32.add (i32.const -721442797)) + (i32.add (i32.const -515909213)) + (i32.add (i32.const 1768324367)) + (i32.add (i32.const 554798435)) + (i32.add (i32.const -1623145695)) + (i32.add (i32.const 891799301)) + (i32.add (i32.const -1654594819)) + (i32.add (i32.const 1824806832)) + (i32.add (i32.const 1655004070)) + (i32.add (i32.const 823649694)) + (i32.add (i32.const 1938951104)) + (i32.add (i32.const -971137514)) + (i32.add (i32.const 1786807537)) + (i32.add (i32.const -1010674988)) + (i32.add (i32.const -1815816270)) + (i32.add (i32.const -1846352031)) + (i32.add (i32.const 228861092)) + (i32.add (i32.const -1165997006)) + (i32.add (i32.const -356287716)) + (i32.add (i32.const -664979031)) + (i32.add (i32.const -2083099623)) + (i32.add (i32.const 693990250)) + (i32.add (i32.const -622453789)) + (i32.add (i32.const 319306200)) + (i32.add (i32.const 1863201953)) + (i32.add (i32.const 555177269)) + (i32.add (i32.const 2012649955)) + (i32.add (i32.const -523970236)) + (i32.add (i32.const -1276126446)) + (i32.add (i32.const 2007513034)) + (i32.add (i32.const -1456787654)) + (i32.add (i32.const -1430369367)) + (i32.add (i32.const -980794528)) + (i32.add (i32.const 312508904)) + (i32.add (i32.const -1428071161)) + (i32.add (i32.const -2122193187)) + (i32.add (i32.const 76876084)) + (i32.add (i32.const 16308966)) + (i32.add (i32.const -1129988148)) + (i32.add (i32.const -1796267786)) + (i32.add (i32.const 1099602120)) + (i32.add (i32.const 1560275987)) + (i32.add (i32.const 970458250)) + (i32.add (i32.const -791889448)) + (i32.add (i32.const 634205092)) + (i32.add (i32.const -444659627)) + (i32.add (i32.const -867716181)) + (i32.add (i32.const -663226559)) + (i32.add (i32.const 151419947)) + (i32.add (i32.const -2105678631)) + (i32.add (i32.const -547100134)) + (i32.add (i32.const 917167094)) + (i32.add (i32.const -1067870491)) + (i32.add (i32.const 558863649)) + (i32.add (i32.const 131229859)) + (i32.add (i32.const -916917607)) + (i32.add (i32.const 871176453)) + (i32.add (i32.const 1044688767)) + (i32.add (i32.const -630324579)) + (i32.add (i32.const 1038826450)) + (i32.add (i32.const 1089790780)) + (i32.add (i32.const -685783758)) + (i32.add (i32.const 1607060577)) + (i32.add (i32.const 963679640)) + (i32.add (i32.const -535460314)) + (i32.add (i32.const 248246756)) + (i32.add (i32.const 892990789)) + (i32.add (i32.const -580268238)) + (i32.add (i32.const -768750962)) + (i32.add (i32.const 1253672982)) + (i32.add (i32.const 1258906646)) + (i32.add (i32.const 764240402)) + (i32.add (i32.const 1854010062)) + (i32.add (i32.const 1177870554)) + (i32.add (i32.const -1799368193)) + (i32.add (i32.const -1733183890)) + (i32.add (i32.const 267002599)) + (i32.add (i32.const -250829671)) + (i32.add (i32.const -1958758618)) + (i32.add (i32.const -582219746)) + (i32.add (i32.const -463893277)) + (i32.add (i32.const 1000363744)) + (i32.add (i32.const 1497428533)) + (i32.add (i32.const 21818240)) + (i32.add (i32.const -1473986363)) + (i32.add (i32.const -1728414297)) + (i32.add (i32.const 1082871671)) + (i32.add (i32.const 1795907626)) + (i32.add (i32.const 1214666686)) + (i32.add (i32.const -964584947)) + (i32.add (i32.const 142819651)) + (i32.add (i32.const -1136893009)) + (i32.add (i32.const -806375951)) + (i32.add (i32.const -986421724)) + (i32.add (i32.const 1188152467)) + (i32.add (i32.const -2138466128)) + (i32.add (i32.const -1006130623)) + (i32.add (i32.const -1389929825)) + (i32.add (i32.const -1905613880)) + (i32.add (i32.const -1764606000)) + (i32.add (i32.const 2112342354)) + (i32.add (i32.const 148800006)) + (i32.add (i32.const -715901143)) + (i32.add (i32.const 687525882)) + (i32.add (i32.const -342128267)) + (i32.add (i32.const -1816858457)) + (i32.add (i32.const 216236238)) + (i32.add (i32.const -1394820263)) + (i32.add (i32.const -1951302182)) + (i32.add (i32.const -1014523538)) + (i32.add (i32.const 1390221798)) + (i32.add (i32.const -1644972306)) + (i32.add (i32.const -1758672516)) + (i32.add (i32.const -1656156970)) + (i32.add (i32.const -1485508981)) + (i32.add (i32.const 1209191016)) + (i32.add (i32.const 1018439900)) + (i32.add (i32.const 1684578324)) + (i32.add (i32.const 157506207)) + (i32.add (i32.const 1271965188)) + (i32.add (i32.const 2032532669)) + (i32.add (i32.const -279999017)) + (i32.add (i32.const -1330905737)) + (i32.add (i32.const -401575311)) + (i32.add (i32.const 781577465)) + (i32.add (i32.const -829721889)) + (i32.add (i32.const -1009457122)) + (i32.add (i32.const 497374301)) + (i32.add (i32.const -1621041379)) + (i32.add (i32.const 1649148212)) + (i32.add (i32.const 244051017)) + (i32.add (i32.const -495233245)) + (i32.add (i32.const -75001227)) + (i32.add (i32.const -1556503395)) + (i32.add (i32.const 1115515389)) + (i32.add (i32.const -547737474)) + (i32.add (i32.const -1219788770)) + (i32.add (i32.const -50470602)) + (i32.add (i32.const 704068441)) + (i32.add (i32.const -731818420)) + (i32.add (i32.const -1128449296)) + (i32.add (i32.const -1280054419)) + (i32.add (i32.const -1700549817)) + (i32.add (i32.const -1055223838)) + (i32.add (i32.const -1654625755)) + (i32.add (i32.const -1494408281)) + (i32.add (i32.const -1424698181)) + (i32.add (i32.const -127803321)) + (i32.add (i32.const -1551897329)) + (i32.add (i32.const -1861041186)) + (i32.add (i32.const -1242785264)) + (i32.add (i32.const -1655806612)) + (i32.add (i32.const 1600571750)) + (i32.add (i32.const -854468138)) + (i32.add (i32.const -1966982130)) + (i32.add (i32.const 1457443796)) + (i32.add (i32.const 1473590416)) + (i32.add (i32.const 510072276)) + (i32.add (i32.const 1828908444)) + (i32.add (i32.const -1498608808)) + (i32.add (i32.const -2059532463)) + (i32.add (i32.const -628831959)) + (i32.add (i32.const -2101333507)) + (i32.add (i32.const 1139714721)) + (i32.add (i32.const 1560690518)) + (i32.add (i32.const -51291444)) + (i32.add (i32.const -514190952)) + (i32.add (i32.const -202143448)) + (i32.add (i32.const 1944652901)) + (i32.add (i32.const -2022057848)) + (i32.add (i32.const -882063735)) + (i32.add (i32.const -742143816)) + (i32.add (i32.const 105465022)) + (i32.add (i32.const -1547195746)) + (i32.add (i32.const -1053345801)) + (i32.add (i32.const 438507561)) + (i32.add (i32.const 1548171080)) + (i32.add (i32.const 1298052603)) + (i32.add (i32.const 756016423)) + (i32.add (i32.const 1228881097)) + (i32.add (i32.const -716625311)) + (i32.add (i32.const -1641681309)) + (i32.add (i32.const 669609646)) + (i32.add (i32.const 1272722139)) + (i32.add (i32.const -1857275894)) + (i32.add (i32.const -1642678282)) + (i32.add (i32.const -2122337566)) + (i32.add (i32.const 1280482903)) + (i32.add (i32.const 598879422)) + (i32.add (i32.const 2055308287)) + (i32.add (i32.const -642295001)) + (i32.add (i32.const 2098931732)) + (i32.add (i32.const -1775117739)) + (i32.add (i32.const 906943683)) + (i32.add (i32.const 1531695620)) + (i32.add (i32.const 398614169)) + (i32.add (i32.const -2074050023)) + (i32.add (i32.const 267758386)) + (i32.add (i32.const -175738283)) + (i32.add (i32.const -708051802)) + (i32.add (i32.const -177733606)) + (i32.add (i32.const -1153386412)) + (i32.add (i32.const 478622507)) + (i32.add (i32.const 2123959059)) + (i32.add (i32.const 1945387171)) + (i32.add (i32.const 87863875)) + (i32.add (i32.const -945163189)) + (i32.add (i32.const 1107142341)) + (i32.add (i32.const 1263590065)) + (i32.add (i32.const -273180797)) + (i32.add (i32.const -1086269258)) + (i32.add (i32.const 221327220)) + (i32.add (i32.const -747292539)) + (i32.add (i32.const 790728411)) + (i32.add (i32.const 1912904210)) + (i32.add (i32.const -1032699008)) + (i32.add (i32.const 859070554)) + (i32.add (i32.const 55651317)) + (i32.add (i32.const 371925664)) + (i32.add (i32.const 999078735)) + (i32.add (i32.const -1151490665)) + (i32.add (i32.const 848090292)) + (i32.add (i32.const 1093641418)) + (i32.add (i32.const -549832980)) + (i32.add (i32.const -1951924678)) + (i32.add (i32.const -551848546)) + (i32.add (i32.const -1504326694)) + (i32.add (i32.const -1012793527)) + (i32.add (i32.const -834005169)) + (i32.add (i32.const -734858286)) + (i32.add (i32.const 2098353666)) + (i32.add (i32.const 504390853)) + (i32.add (i32.const -2087387429)) + (i32.add (i32.const 181948089)) + (i32.add (i32.const -1042878466)) + (i32.add (i32.const 249533456)) + (i32.add (i32.const 47931703)) + (i32.add (i32.const -190682485)) + (i32.add (i32.const -1144430387)) + (i32.add (i32.const 1502539699)) + (i32.add (i32.const 345795015)) + (i32.add (i32.const 476634603)) + (i32.add (i32.const 1662938469)) + (i32.add (i32.const 1519233384)) + (i32.add (i32.const -587943010)) + (i32.add (i32.const 240254047)) + (i32.add (i32.const 2126814322)) + (i32.add (i32.const -1440282536)) + (i32.add (i32.const -392441638)) + (i32.add (i32.const -120676443)) + (i32.add (i32.const 1266794872)) + (i32.add (i32.const -814694160)) + (i32.add (i32.const -1351409946)) + (i32.add (i32.const 1192377858)) + (i32.add (i32.const -356656121)) + (i32.add (i32.const 217305535)) + (i32.add (i32.const 1694413553)) + (i32.add (i32.const 1261824406)) + (i32.add (i32.const 371455722)) + (i32.add (i32.const -666411229)) + (i32.add (i32.const 737965160)) + (i32.add (i32.const 370784467)) + (i32.add (i32.const 1620178807)) + (i32.add (i32.const 1594062834)) + (i32.add (i32.const -286018581)) + (i32.add (i32.const 879369487)) + (i32.add (i32.const 176635472)) + (i32.add (i32.const -443192476)) + (i32.add (i32.const 2069260182)) + (i32.add (i32.const 1019587375)) + (i32.add (i32.const 813893193)) + (i32.add (i32.const 1157255830)) + (i32.add (i32.const 1336319321)) + (i32.add (i32.const -630511652)) + (i32.add (i32.const 1339313802)) + (i32.add (i32.const 16227842)) + (i32.add (i32.const -1732652677)) + (i32.add (i32.const -1681988512)) + (i32.add (i32.const -1807150084)) + (i32.add (i32.const -1203205840)) + (i32.add (i32.const -1022279173)) + (i32.add (i32.const -2053412437)) + (i32.add (i32.const 2029083921)) + (i32.add (i32.const 1490847167)) + (i32.add (i32.const 1488885157)) + (i32.add (i32.const 1570962127)) + (i32.add (i32.const 976074456)) + (i32.add (i32.const 1130753078)) + (i32.add (i32.const 986530982)) + (i32.add (i32.const 159756932)) + (i32.add (i32.const 544168817)) + (i32.add (i32.const -1939499190)) + (i32.add (i32.const -1094320236)) + (i32.add (i32.const 249845858)) + (i32.add (i32.const -742386684)) + (i32.add (i32.const 1566372352)) + (i32.add (i32.const 969961633)) + (i32.add (i32.const 1387193938)) + (i32.add (i32.const -866894346)) + (i32.add (i32.const 1494790677)) + (i32.add (i32.const -370800977)) + (i32.add (i32.const 221100354)) + (i32.add (i32.const 990155863)) + (i32.add (i32.const 1619428594)) + (i32.add (i32.const -1061513495)) + (i32.add (i32.const 1471176779)) + (i32.add (i32.const -1528879671)) + (i32.add (i32.const -189554319)) + (i32.add (i32.const -970542647)) + (i32.add (i32.const 123191681)) + (i32.add (i32.const 409788226)) + (i32.add (i32.const -1890993957)) + (i32.add (i32.const -446759674)) + (i32.add (i32.const 1447761641)) + (i32.add (i32.const 1881867271)) + (i32.add (i32.const 2113456733)) + (i32.add (i32.const 1022038433)) + (i32.add (i32.const 2132841650)) + (i32.add (i32.const 692696231)) + (i32.add (i32.const -1958343939)) + (i32.add (i32.const -1553348696)) + (i32.add (i32.const 1018354267)) + (i32.add (i32.const 1184491424)) + (i32.add (i32.const 394154599)) + (i32.add (i32.const 729832983)) + (i32.add (i32.const -758858302)) + (i32.add (i32.const 924013408)) + (i32.add (i32.const -2075676815)) + (i32.add (i32.const 252643112)) + (i32.add (i32.const -491469506)) + (i32.add (i32.const -436894014)) + (i32.add (i32.const -245845873)) + (i32.add (i32.const -1116213076)) + (i32.add (i32.const 1112109751)) + (i32.add (i32.const 267697822)) + (i32.add (i32.const 1376150589)) + (i32.add (i32.const -1188954833)) + (i32.add (i32.const -1542600183)) + (i32.add (i32.const -1437440817)) + (i32.add (i32.const 2101484173)) + (i32.add (i32.const -1441505207)) + (i32.add (i32.const 1657389515)) + (i32.add (i32.const 1919008590)) + (i32.add (i32.const 1354232026)) + (i32.add (i32.const 271419575)) + (i32.add (i32.const 12885618)) + (i32.add (i32.const 967407976)) + (i32.add (i32.const -1803761404)) + (i32.add (i32.const 470546477)) + (i32.add (i32.const 1911702311)) + (i32.add (i32.const -1923409107)) + (i32.add (i32.const 1310912856)) + (i32.add (i32.const 1182298773)) + (i32.add (i32.const -1456182919)) + (i32.add (i32.const -742155008)) + (i32.add (i32.const 1245920890)) + (i32.add (i32.const 868591571)) + (i32.add (i32.const 836568397)) + (i32.add (i32.const 1543948224)) + (i32.add (i32.const -974879272)) + (i32.add (i32.const 430553081)) + (i32.add (i32.const -163924336)) + (i32.add (i32.const -1168300605)) + (i32.add (i32.const 857747688)) + (i32.add (i32.const -1655975508)) + (i32.add (i32.const 307384725)) + (i32.add (i32.const -1668141072)) + (i32.add (i32.const 1230779623)) + (i32.add (i32.const 1217482990)) + (i32.add (i32.const 802457155)) + (i32.add (i32.const 779949208)) + (i32.add (i32.const -1273373878)) + (i32.add (i32.const -127189408)) + (i32.add (i32.const 121712493)) + (i32.add (i32.const -704579672)) + (i32.add (i32.const -293142822)) + (i32.add (i32.const 1421848463)) + (i32.add (i32.const -484998059)) + (i32.add (i32.const 1037128805)) + (i32.add (i32.const 2093534931)) + (i32.add (i32.const -866286560)) + (i32.add (i32.const -2019096902)) + (i32.add (i32.const -1095984885)) + (i32.add (i32.const 1868610680)) + (i32.add (i32.const 2116844175)) + (i32.add (i32.const -320312403)) + (i32.add (i32.const 928374490)) + (i32.add (i32.const 1209836879)) + (i32.add (i32.const 1079807913)) + (i32.add (i32.const 375140994)) + (i32.add (i32.const -253081277)) + (i32.add (i32.const 1628094432)) + (i32.add (i32.const -1177657007)) + (i32.add (i32.const 1324847795)) + (i32.add (i32.const -621966317)) + (i32.add (i32.const -1117343565)) + (i32.add (i32.const -195442287)) + (i32.add (i32.const 136694319)) + (i32.add (i32.const 1949028534)) + (i32.add (i32.const -39493450)) + (i32.add (i32.const -443534708)) + (i32.add (i32.const -118143955)) + (i32.add (i32.const -2059230563)) + (i32.add (i32.const 1086778008)) + (i32.add (i32.const -31029721)) + (i32.add (i32.const -1372911995)) + (i32.add (i32.const -1255755312)) + (i32.add (i32.const -84538076)) + (i32.add (i32.const 1906229968)) + (i32.add (i32.const 1334671157)) + (i32.add (i32.const -383259388)) + (i32.add (i32.const -249872012)) + (i32.add (i32.const -1429512193)) + (i32.add (i32.const -667648472)) + (i32.add (i32.const -518666232)) + (i32.add (i32.const -663867552)) + (i32.add (i32.const 1007308671)) + (i32.add (i32.const -173940137)) + (i32.add (i32.const -658197379)) + (i32.add (i32.const 477863072)) + (i32.add (i32.const -1392093367)) + (i32.add (i32.const -1079466863)) + (i32.add (i32.const -904394245)) + (i32.add (i32.const -685328278)) + (i32.add (i32.const -895027666)) + (i32.add (i32.const -1385849717)) + (i32.add (i32.const -1636982109)) + (i32.add (i32.const -1189690568)) + (i32.add (i32.const 545844741)) + (i32.add (i32.const -938176211)) + (i32.add (i32.const -1777236651)) + (i32.add (i32.const 526371463)) + (i32.add (i32.const -1965070219)) + (i32.add (i32.const 1893788935)) + (i32.add (i32.const -322861528)) + (i32.add (i32.const 1522266068)) + (i32.add (i32.const 634952306)) + (i32.add (i32.const -1742595825)) + (i32.add (i32.const 862985848)) + (i32.add (i32.const -1848383573)) + (i32.add (i32.const 1765007322)) + (i32.add (i32.const 771230650)) + (i32.add (i32.const -1948310248)) + (i32.add (i32.const -1831905950)) + (i32.add (i32.const -1425114643)) + (i32.add (i32.const 404541819)) + (i32.add (i32.const 288062222)) + (i32.add (i32.const -403239554)) + (i32.add (i32.const 2046708764)) + (i32.add (i32.const -133603238)) + (i32.add (i32.const 781445787)) + (i32.add (i32.const -1194142955)) + (i32.add (i32.const 1204332860)) + (i32.add (i32.const 1868633847)) + (i32.add (i32.const -252406440)) + (i32.add (i32.const 704475004)) + (i32.add (i32.const -1480618790)) + (i32.add (i32.const -390081824)) + (i32.add (i32.const -1116341906)) + (i32.add (i32.const -532792425)) + (i32.add (i32.const -1187688250)) + (i32.add (i32.const -1242278665)) + (i32.add (i32.const -681274552)) + (i32.add (i32.const 335029194)) + (i32.add (i32.const -1462712035)) + (i32.add (i32.const -2128209933)) + (i32.add (i32.const 591850844)) + (i32.add (i32.const 494594829)) + (i32.add (i32.const 1658800644)) + (i32.add (i32.const 57861845)) + (i32.add (i32.const -1255969632)) + (i32.add (i32.const 691564169)) + (i32.add (i32.const 1864164866)) + (i32.add (i32.const -1081035384)) + (i32.add (i32.const 1436122501)) + (i32.add (i32.const 1095403600)) + (i32.add (i32.const 91506380)) + (i32.add (i32.const -2067436452)) + (i32.add (i32.const -276699371)) + (i32.add (i32.const 767387932)) + (i32.add (i32.const 73220981)) + (i32.add (i32.const -529179745)) + (i32.add (i32.const -657847188)) + (i32.add (i32.const -473278230)) + (i32.add (i32.const 2043944043)) + (i32.add (i32.const 1125093256)) + (i32.add (i32.const -1408761522)) + (i32.add (i32.const -1908948977)) + (i32.add (i32.const 1611045266)) + (i32.add (i32.const 2102191886)) + (i32.add (i32.const -914134744)) + (i32.add (i32.const -1081165698)) + (i32.add (i32.const 1924634411)) + (i32.add (i32.const -862029694)) + (i32.add (i32.const 1620282027)) + (i32.add (i32.const -1081236500)) + (i32.add (i32.const -929480051)) + (i32.add (i32.const -1499228968)) + (i32.add (i32.const -1692876554)) + (i32.add (i32.const -1954715820)) + (i32.add (i32.const 2102363484)) + (i32.add (i32.const 1400884529)) + (i32.add (i32.const 75240632)) + (i32.add (i32.const 1316188568)) + (i32.add (i32.const 1815760283)) + (i32.add (i32.const -1185667492)) + (i32.add (i32.const -144123619)) + (i32.add (i32.const 837871912)) + (i32.add (i32.const 1226723333)) + (i32.add (i32.const 1254675838)) + (i32.add (i32.const 964571301)) + (i32.add (i32.const 779208226)) + (i32.add (i32.const -1759513232)) + (i32.add (i32.const -165605814)) + (i32.add (i32.const -1797321804)) + (i32.add (i32.const 202857953)) + (i32.add (i32.const -1421907932)) + (i32.add (i32.const 1749781546)) + (i32.add (i32.const 844545725)) + (i32.add (i32.const -288472051)) + (i32.add (i32.const 1734289376)) + (i32.add (i32.const 2132397176)) + (i32.add (i32.const -346233057)) + (i32.add (i32.const -1934179054)) + (i32.add (i32.const -1258468356)) + (i32.add (i32.const 970868029)) + (i32.add (i32.const -1544014982)) + (i32.add (i32.const -1266704659)) + (i32.add (i32.const -640543547)) + (i32.add (i32.const -762898070)) + (i32.add (i32.const 1122654294)) + (i32.add (i32.const -1354667864)) + (i32.add (i32.const -1767329406)) + (i32.add (i32.const 1161458897)) + (i32.add (i32.const -544249373)) + (i32.add (i32.const -1627426477)) + (i32.add (i32.const -1815465001)) + (i32.add (i32.const -1412004700)) + (i32.add (i32.const -1231523870)) + (i32.add (i32.const -958483775)) + (i32.add (i32.const -1439933878)) + (i32.add (i32.const 988983645)) + (i32.add (i32.const 483595001)) + (i32.add (i32.const 718125502)) + (i32.add (i32.const -1474320314)) + (i32.add (i32.const 900260509)) + (i32.add (i32.const 1342571107)) + (i32.add (i32.const 291343874)) + (i32.add (i32.const 1885787288)) + (i32.add (i32.const -162749745)) + (i32.add (i32.const -1939762621)) + (i32.add (i32.const -1854004628)) + (i32.add (i32.const -1542615486)) + (i32.add (i32.const 1013916743)) + (i32.add (i32.const -1330519048)) + (i32.add (i32.const -1623833036)) + (i32.add (i32.const 1924432416)) + (i32.add (i32.const -1219155550)) + (i32.add (i32.const -1806876338)) + (i32.add (i32.const -1580499321)) + (i32.add (i32.const -1430454219)) + (i32.add (i32.const 1181294503)) + (i32.add (i32.const -942670376)) + (i32.add (i32.const -211797027)) + (i32.add (i32.const 1319960135)) + (i32.add (i32.const 1036991699)) + (i32.add (i32.const -311561215)) + (i32.add (i32.const -1912048630)) + (i32.add (i32.const 1013408781)) + (i32.add (i32.const -289528410)) + (i32.add (i32.const 274514503)) + (i32.add (i32.const -1928766002)) + (i32.add (i32.const 1595041240)) + (i32.add (i32.const -1577156854)) + (i32.add (i32.const -400728014)) + (i32.add (i32.const 501127354)) + (i32.add (i32.const 563654817)) + (i32.add (i32.const 1726427541)) + (i32.add (i32.const 1213109234)) + (i32.add (i32.const -753594990)) + (i32.add (i32.const 1787584241)) + (i32.add (i32.const -1656783261)) + (i32.add (i32.const -2018980919)) + (i32.add (i32.const 933441794)) + (i32.add (i32.const 364103937)) + (i32.add (i32.const -697370193)) + (i32.add (i32.const -1482613541)) + (i32.add (i32.const -839741673)) + (i32.add (i32.const 72371078)) + (i32.add (i32.const 1722342876)) + (i32.add (i32.const -1353008235)) + (i32.add (i32.const -772826274)) + (i32.add (i32.const 1307418026)) + (i32.add (i32.const 1758397943)) + (i32.add (i32.const 1693784207)) + (i32.add (i32.const 796368255)) + (i32.add (i32.const -324015244)) + (i32.add (i32.const -668853010)) + (i32.add (i32.const -940898101)) + (i32.add (i32.const -1116662391)) + (i32.add (i32.const -195733743)) + (i32.add (i32.const 434068432)) + (i32.add (i32.const -513791071)) + (i32.add (i32.const -1330155678)) + (i32.add (i32.const -1504203849)) + (i32.add (i32.const -31606399)) + (i32.add (i32.const -2062098630)) + (i32.add (i32.const -1534480343)) + (i32.add (i32.const -2061376118)) + (i32.add (i32.const -1708690207)) + (i32.add (i32.const -925068816)) + (i32.add (i32.const -2063884950)) + (i32.add (i32.const 1175203612)) + (i32.add (i32.const 1463137143)) + (i32.add (i32.const 1328445748)) + (i32.add (i32.const -926373346)) + (i32.add (i32.const 955674755)) + (i32.add (i32.const -1740089054)) + (i32.add (i32.const -1669802481)) + (i32.add (i32.const -821560534)) + (i32.add (i32.const -772609867)) + (i32.add (i32.const -2116643815)) + (i32.add (i32.const 1311803641)) + (i32.add (i32.const -1168522045)) + (i32.add (i32.const 766123259)) + (i32.add (i32.const 1720613523)) + (i32.add (i32.const 528153638)) + (i32.add (i32.const 85403996)) + (i32.add (i32.const -2077198104)) + (i32.add (i32.const 314267804)) + (i32.add (i32.const 588509703)) + (i32.add (i32.const -590754238)) + (i32.add (i32.const 1089355715)) + (i32.add (i32.const 661997544)) + (i32.add (i32.const 421758089)) + (i32.add (i32.const 1361474211)) + (i32.add (i32.const -686143737)) + (i32.add (i32.const 1210018877)) + (i32.add (i32.const -1703684921)) + (i32.add (i32.const 1075568753)) + (i32.add (i32.const -779465813)) + (i32.add (i32.const 1592326499)) + (i32.add (i32.const 1971739823)) + (i32.add (i32.const 1870173742)) + (i32.add (i32.const -1303024991)) + (i32.add (i32.const -1052548811)) + (i32.add (i32.const 1909866057)) + (i32.add (i32.const -1479658972)) + (i32.add (i32.const 1773872788)) + (i32.add (i32.const -632157658)) + (i32.add (i32.const -1375939684)) + (i32.add (i32.const -1797877804)) + (i32.add (i32.const 1099632450)) + (i32.add (i32.const 977725173)) + (i32.add (i32.const -309126689)) + (i32.add (i32.const -130270964)) + (i32.add (i32.const 1895186191)) + (i32.add (i32.const 2084424952)) + (i32.add (i32.const -1041341795)) + (i32.add (i32.const -1738864977)) + (i32.add (i32.const -183790823)) + (i32.add (i32.const -1363994490)) + (i32.add (i32.const -933417895)) + (i32.add (i32.const 466659913)) + (i32.add (i32.const -1631394364)) + (i32.add (i32.const 1490719252)) + (i32.add (i32.const 1713333106)) + (i32.add (i32.const -961714507)) + (i32.add (i32.const 1712286053)) + (i32.add (i32.const -2051933146)) + (i32.add (i32.const -1892750850)) + (i32.add (i32.const -1556370560)) + (i32.add (i32.const 134195871)) + (i32.add (i32.const 529241285)) + (i32.add (i32.const 1538448027)) + (i32.add (i32.const -1202538668)) + (i32.add (i32.const 1034210602)) + (i32.add (i32.const -544463362)) + (i32.add (i32.const 1302598901)) + (i32.add (i32.const -161833362)) + (i32.add (i32.const -1079776242)) + (i32.add (i32.const -998320352)) + (i32.add (i32.const 25891743)) + (i32.add (i32.const 638351053)) + (i32.add (i32.const -240498535)) + (i32.add (i32.const 1572664408)) + (i32.add (i32.const 585501132)) + (i32.add (i32.const -2011413103)) + (i32.add (i32.const -578852954)) + (i32.add (i32.const 423331369)) + (i32.add (i32.const -1868505966)) + (i32.add (i32.const -35760675)) + (i32.add (i32.const -172814240)) + (i32.add (i32.const -194910462)) + (i32.add (i32.const 678949880)) + (i32.add (i32.const -1844662369)) + (i32.add (i32.const -2067152676)) + (i32.add (i32.const -1709455991)) + (i32.add (i32.const 298910379)) + (i32.add (i32.const -679738095)) + (i32.add (i32.const 1609021556)) + (i32.add (i32.const 641760780)) + (i32.add (i32.const 853824483)) + (i32.add (i32.const 1633661709)) + (i32.add (i32.const -1811383563)) + (i32.add (i32.const 858395754)) + (i32.add (i32.const 1231058769)) + (i32.add (i32.const 1519333795)) + (i32.add (i32.const 274512890)) + (i32.add (i32.const -504817823)) + (i32.add (i32.const -1542210793)) + (i32.add (i32.const 852584628)) + (i32.add (i32.const 1928267810)) + (i32.add (i32.const -355237913)) + (i32.add (i32.const 1167578374)) + (i32.add (i32.const -1598632736)) + (i32.add (i32.const -688416214)) + (i32.add (i32.const 1744569170)) + (i32.add (i32.const -651582993)) + (i32.add (i32.const -882350221)) + (i32.add (i32.const -235166777)) + (i32.add (i32.const -1761434400)) + (i32.add (i32.const 1417541470)) + (i32.add (i32.const -1746640190)) + (i32.add (i32.const -1493623051)) + (i32.add (i32.const 1688045781)) + (i32.add (i32.const 1621415000)) + (i32.add (i32.const -1139976228)) + (i32.add (i32.const 1350417436)) + (i32.add (i32.const 724740310)) + (i32.add (i32.const -376897569)) + (i32.add (i32.const -1778806504)) + (i32.add (i32.const -1331424058)) + (i32.add (i32.const 1880116853)) + (i32.add (i32.const -38630100)) + (i32.add (i32.const 1491411348)) + (i32.add (i32.const -1867715327)) + (i32.add (i32.const -1975388870)) + (i32.add (i32.const 1260444490)) + (i32.add (i32.const -54229029)) + (i32.add (i32.const -333341104)) + (i32.add (i32.const 348189184)) + (i32.add (i32.const 1697666956)) + (i32.add (i32.const 1636845751)) + (i32.add (i32.const 240900715)) + (i32.add (i32.const 866875993)) + (i32.add (i32.const 1469159827)) + (i32.add (i32.const 723848541)) + (i32.add (i32.const -855767494)) + (i32.add (i32.const 1342166062)) + (i32.add (i32.const 258991600)) + (i32.add (i32.const -2006867807)) + (i32.add (i32.const 524303896)) + (i32.add (i32.const -414986657)) + (i32.add (i32.const -2119209259)) + (i32.add (i32.const 784359207)) + (i32.add (i32.const 879467684)) + (i32.add (i32.const 565731895)) + (i32.add (i32.const 269384308)) + (i32.add (i32.const -322557018)) + (i32.add (i32.const -733245227)) + (i32.add (i32.const -1267605034)) + (i32.add (i32.const 395960239)) + (i32.add (i32.const 685859876)) + (i32.add (i32.const -1625113460)) + (i32.add (i32.const -884869856)) + (i32.add (i32.const 1344310491)) + (i32.add (i32.const 7812902)) + (i32.add (i32.const -1442144105)) + (i32.add (i32.const 1199777056)) + (i32.add (i32.const -1585697269)) + (i32.add (i32.const 1820447839)) + (i32.add (i32.const 1590813659)) + (i32.add (i32.const -1420266400)) + (i32.add (i32.const -690093118)) + (i32.add (i32.const 1635663981)) + (i32.add (i32.const 1058146950)) + (i32.add (i32.const -1389892767)) + (i32.add (i32.const -209413219)) + (i32.add (i32.const -791687878)) + (i32.add (i32.const -697368422)) + (i32.add (i32.const 1848695684)) + (i32.add (i32.const -1825271411)) + (i32.add (i32.const 670364125)) + (i32.add (i32.const -246064578)) + (i32.add (i32.const 1417197107)) + (i32.add (i32.const -1539885359)) + (i32.add (i32.const -817285391)) + (i32.add (i32.const -1089417444)) + (i32.add (i32.const 461669025)) + (i32.add (i32.const 1174053935)) + (i32.add (i32.const -1784194396)) + (i32.add (i32.const -1695209190)) + (i32.add (i32.const -1145346505)) + (i32.add (i32.const -63938568)) + (i32.add (i32.const -1394120091)) + (i32.add (i32.const -958376971)) + (i32.add (i32.const -1255848883)) + (i32.add (i32.const 339490151)) + (i32.add (i32.const 1202027218)) + (i32.add (i32.const 1799967907)) + (i32.add (i32.const -1656489103)) + (i32.add (i32.const 1640615311)) + (i32.add (i32.const 756087467)) + (i32.add (i32.const -1129797515)) + (i32.add (i32.const -376800298)) + (i32.add (i32.const 62009441)) + (i32.add (i32.const -290284868)) + (i32.add (i32.const -600278204)) + (i32.add (i32.const 193645522)) + (i32.add (i32.const 501974687)) + (i32.add (i32.const -1415097000)) + (i32.add (i32.const 327699514)) + (i32.add (i32.const 205597589)) + (i32.add (i32.const -358057003)) + (i32.add (i32.const 589883098)) + (i32.add (i32.const -1428465912)) + (i32.add (i32.const -47326076)) + (i32.add (i32.const -419581510)) + (i32.add (i32.const 1349162354)) + (i32.add (i32.const 1830230448)) + (i32.add (i32.const -1865063084)) + (i32.add (i32.const -1105860943)) + (i32.add (i32.const 597640461)) + (i32.add (i32.const -831370816)) + (i32.add (i32.const 88057485)) + (i32.add (i32.const -1984027798)) + (i32.add (i32.const -401206555)) + (i32.add (i32.const -93105259)) + (i32.add (i32.const 1932464389)) + (i32.add (i32.const 714940613)) + (i32.add (i32.const -1810211376)) + (i32.add (i32.const -1925034286)) + (i32.add (i32.const 1028812831)) + (i32.add (i32.const 680354350)) + (i32.add (i32.const 1588608164)) + (i32.add (i32.const -1521643997)) + (i32.add (i32.const 144112451)) + (i32.add (i32.const -144539890)) + (i32.add (i32.const 1447357208)) + (i32.add (i32.const -592425747)) + (i32.add (i32.const 1660058901)) + (i32.add (i32.const 1804494649)) + (i32.add (i32.const -129339651)) + (i32.add (i32.const -514057993)) + (i32.add (i32.const 892834382)) + (i32.add (i32.const 1968346506)) + (i32.add (i32.const 742656887)) + (i32.add (i32.const 1159668409)) + (i32.add (i32.const -260678959)) + (i32.add (i32.const -2105173157)) + (i32.add (i32.const -1812240619)) + (i32.add (i32.const 1751560530)) + (i32.add (i32.const 1366235458)) + (i32.add (i32.const -225892584)) + (i32.add (i32.const -1741400217)) + (i32.add (i32.const -1411581087)) + (i32.add (i32.const -1094427759)) + (i32.add (i32.const -496477965)) + (i32.add (i32.const -1589970947)) + (i32.add (i32.const -1636012962)) + (i32.add (i32.const -602016892)) + (i32.add (i32.const -503388384)) + (i32.add (i32.const 975903688)) + (i32.add (i32.const 1800608528)) + (i32.add (i32.const -643789829)) + (i32.add (i32.const 1798995387)) + (i32.add (i32.const -1378510831)) + (i32.add (i32.const 1807790313)) + (i32.add (i32.const 14867219)) + (i32.add (i32.const -55034767)) + (i32.add (i32.const 64946019)) + (i32.add (i32.const 431997449)) + (i32.add (i32.const 1482226700)) + (i32.add (i32.const 111941056)) + (i32.add (i32.const -42118636)) + (i32.add (i32.const 117448077)) + (i32.add (i32.const -367481418)) + (i32.add (i32.const 1377878485)) + (i32.add (i32.const 85514578)) + (i32.add (i32.const 39925796)) + (i32.add (i32.const -711981910)) + (i32.add (i32.const -1967790428)) + (i32.add (i32.const -911054872)) + (i32.add (i32.const -921494579)) + (i32.add (i32.const 1880563952)) + (i32.add (i32.const -1946090124)) + (i32.add (i32.const -649247186)) + (i32.add (i32.const 1421375825)) + (i32.add (i32.const -439839094)) + (i32.add (i32.const 234129025)) + (i32.add (i32.const -723683743)) + (i32.add (i32.const -824793063)) + (i32.add (i32.const 1217302894)) + (i32.add (i32.const -745582714)) + (i32.add (i32.const -363773710)) + (i32.add (i32.const 416941782)) + (i32.add (i32.const -1179889037)) + (i32.add (i32.const 1697755658)) + (i32.add (i32.const 1110479190)) + (i32.add (i32.const -2055754808)) + (i32.add (i32.const -264661625)) + (i32.add (i32.const 2099652062)) + (i32.add (i32.const -1085763955)) + (i32.add (i32.const -1565650626)) + (i32.add (i32.const -1878616505)) + (i32.add (i32.const 1683718486)) + (i32.add (i32.const 1465426547)) + (i32.add (i32.const 748654156)) + (i32.add (i32.const 472040605)) + (i32.add (i32.const -1231156242)) + (i32.add (i32.const -2024308482)) + (i32.add (i32.const -285944578)) + (i32.add (i32.const -823788032)) + (i32.add (i32.const -617686325)) + (i32.add (i32.const -1008755086)) + (i32.add (i32.const 220078209)) + (i32.add (i32.const 2119109824)) + (i32.add (i32.const -15692792)) + (i32.add (i32.const -439067933)) + (i32.add (i32.const -920127853)) + (i32.add (i32.const 271077530)) + (i32.add (i32.const -516815375)) + (i32.add (i32.const -774771522)) + (i32.add (i32.const 726219426)) + (i32.add (i32.const -1572914837)) + (i32.add (i32.const -1412229880)) + (i32.add (i32.const 205540491)) + (i32.add (i32.const -2130794402)) + (i32.add (i32.const -372786929)) + (i32.add (i32.const 615898611)) + (i32.add (i32.const -800603095)) + (i32.add (i32.const -1738018624)) + (i32.add (i32.const 99283910)) + (i32.add (i32.const 975891219)) + (i32.add (i32.const 1969617006)) + (i32.add (i32.const 1389975071)) + (i32.add (i32.const 829040500)) + (i32.add (i32.const -586785412)) + (i32.add (i32.const -1669258140)) + (i32.add (i32.const -1819976745)) + (i32.add (i32.const -491536406)) + (i32.add (i32.const -2095762145)) + (i32.add (i32.const 828183092)) + (i32.add (i32.const 1899576520)) + (i32.add (i32.const 308988772)) + (i32.add (i32.const 1239497731)) + (i32.add (i32.const 1303506281)) + (i32.add (i32.const -846414421)) + (i32.add (i32.const -1012134647)) + (i32.add (i32.const 1711354107)) + (i32.add (i32.const 762796296)) + (i32.add (i32.const 748113837)) + (i32.add (i32.const 1804413201)) + (i32.add (i32.const -1332617300)) + (i32.add (i32.const -1454980288)) + (i32.add (i32.const 244436587)) + (i32.add (i32.const -1418495170)) + (i32.add (i32.const 621412259)) + (i32.add (i32.const -660663880)) + (i32.add (i32.const -315071411)) + (i32.add (i32.const -992468255)) + (i32.add (i32.const 1222436558)) + (i32.add (i32.const 694097506)) + (i32.add (i32.const 1046692356)) + (i32.add (i32.const -2078188189)) + (i32.add (i32.const 1088640431)) + (i32.add (i32.const -597870073)) + (i32.add (i32.const 360415647)) + (i32.add (i32.const 375671945)) + (i32.add (i32.const 878651576)) + (i32.add (i32.const 951732119)) + (i32.add (i32.const 448083278)) + (i32.add (i32.const -1789107017)) + (i32.add (i32.const 2102111802)) + (i32.add (i32.const -337619883)) + (i32.add (i32.const -1989404298)) + (i32.add (i32.const -945099544)) + (i32.add (i32.const -1275604246)) + (i32.add (i32.const 1893363298)) + (i32.add (i32.const 1078040077)) + (i32.add (i32.const 228923873)) + (i32.add (i32.const 1771927937)) + (i32.add (i32.const 774888891)) + (i32.add (i32.const -1071923937)) + (i32.add (i32.const 49078464)) + (i32.add (i32.const 1614408163)) + (i32.add (i32.const 1029189099)) + (i32.add (i32.const -2052343404)) + (i32.add (i32.const 626520885)) + (i32.add (i32.const 1911684594)) + (i32.add (i32.const -1304743019)) + (i32.add (i32.const 2029573937)) + (i32.add (i32.const -1583750326)) + (i32.add (i32.const -1388951859)) + (i32.add (i32.const -2116733089)) + (i32.add (i32.const 1046892225)) + (i32.add (i32.const -1122289922)) + (i32.add (i32.const -1797134885)) + (i32.add (i32.const 1574010794)) + (i32.add (i32.const 1544905621)) + (i32.add (i32.const 1347065235)) + (i32.add (i32.const -1218167830)) + (i32.add (i32.const 1662243374)) + (i32.add (i32.const -1877158628)) + (i32.add (i32.const -1546868310)) + (i32.add (i32.const 910418207)) + (i32.add (i32.const 1303668709)) + (i32.add (i32.const 70583126)) + (i32.add (i32.const -2132355724)) + (i32.add (i32.const 1939275894)) + (i32.add (i32.const -1018619487)) + (i32.add (i32.const 1092318582)) + (i32.add (i32.const -1461983812)) + (i32.add (i32.const 761682207)) + (i32.add (i32.const 1774295939)) + (i32.add (i32.const 1740315567)) + (i32.add (i32.const -1516659698)) + (i32.add (i32.const 631754605)) + (i32.add (i32.const 1496053138)) + (i32.add (i32.const 1128679885)) + (i32.add (i32.const -70720167)) + (i32.add (i32.const -1079612427)) + (i32.add (i32.const 2108717209)) + (i32.add (i32.const -66561597)) + (i32.add (i32.const 1148320085)) + (i32.add (i32.const 2085072112)) + (i32.add (i32.const -99531242)) + (i32.add (i32.const -172830966)) + (i32.add (i32.const -1144880823)) + (i32.add (i32.const -1541854805)) + (i32.add (i32.const -1901926987)) + (i32.add (i32.const -172025298)) + (i32.add (i32.const -1125737813)) + (i32.add (i32.const -1245053550)) + (i32.add (i32.const -2014652305)) + (i32.add (i32.const -1477704263)) + (i32.add (i32.const -95665224)) + (i32.add (i32.const 1583216717)) + (i32.add (i32.const 877562219)) + (i32.add (i32.const 1730150527)) + (i32.add (i32.const 1171320857)) + (i32.add (i32.const 2087416772)) + (i32.add (i32.const 1566332500)) + (i32.add (i32.const -1119208721)) + (i32.add (i32.const 1463881423)) + (i32.add (i32.const -409582349)) + (i32.add (i32.const 1422732031)) + (i32.add (i32.const -725091948)) + (i32.add (i32.const -164945252)) + (i32.add (i32.const -815734604)) + (i32.add (i32.const -528787353)) + (i32.add (i32.const 497190674)) + (i32.add (i32.const 915284411)) + (i32.add (i32.const -1925240161)) + (i32.add (i32.const -1669384817)) + (i32.add (i32.const -1659107716)) + (i32.add (i32.const -557418173)) + (i32.add (i32.const 1647093281)) + (i32.add (i32.const -1052176969)) + (i32.add (i32.const -1783608548)) + (i32.add (i32.const -1569949841)) + (i32.add (i32.const 714260406)) + (i32.add (i32.const -1501842640)) + (i32.add (i32.const -981414462)) + (i32.add (i32.const -85430108)) + (i32.add (i32.const -1172617854)) + (i32.add (i32.const -1509282421)) + (i32.add (i32.const 1423283428)) + (i32.add (i32.const -1905215827)) + (i32.add (i32.const 664740483)) + (i32.add (i32.const -972562212)) + (i32.add (i32.const -2106873259)) + (i32.add (i32.const -1175788567)) + (i32.add (i32.const -1612232964)) + (i32.add (i32.const 586916828)) + (i32.add (i32.const -1411299471)) + (i32.add (i32.const -643023237)) + (i32.add (i32.const 1769531712)) + (i32.add (i32.const -432079621)) + (i32.add (i32.const 861636888)) + (i32.add (i32.const 965627612)) + (i32.add (i32.const 451303734)) + (i32.add (i32.const 1061813970)) + (i32.add (i32.const 715832836)) + (i32.add (i32.const -579821193)) + (i32.add (i32.const 750750558)) + (i32.add (i32.const -1518965037)) + (i32.add (i32.const 442233301)) + (i32.add (i32.const -633116837)) + (i32.add (i32.const 2110640816)) + (i32.add (i32.const -143226139)) + (i32.add (i32.const -67877236)) + (i32.add (i32.const -203181999)) + (i32.add (i32.const 193056498)) + (i32.add (i32.const 1673286781)) + (i32.add (i32.const 269171952)) + (i32.add (i32.const 2012973)) + (i32.add (i32.const 2096226498)) + (i32.add (i32.const 1263940788)) + (i32.add (i32.const -1708412724)) + (i32.add (i32.const 1724605897)) + (i32.add (i32.const -1364877488)) + (i32.add (i32.const 1244742198)) + (i32.add (i32.const -2133880347)) + (i32.add (i32.const -1049275084)) + (i32.add (i32.const -884183499)) + (i32.add (i32.const -765407428)) + (i32.add (i32.const -429720744)) + (i32.add (i32.const -629890326)) + (i32.add (i32.const -1384753975)) + (i32.add (i32.const -1132715684)) + (i32.add (i32.const -322347939)) + (i32.add (i32.const 1475255558)) + (i32.add (i32.const 370951814)) + (i32.add (i32.const 231992146)) + (i32.add (i32.const -44221169)) + (i32.add (i32.const 148308373)) + (i32.add (i32.const -912406753)) + (i32.add (i32.const -163616293)) + (i32.add (i32.const 571578549)) + (i32.add (i32.const -1794560405)) + (i32.add (i32.const -1328713098)) + (i32.add (i32.const 313497647)) + (i32.add (i32.const 73275395)) + (i32.add (i32.const 243301267)) + (i32.add (i32.const -1490428770)) + (i32.add (i32.const -1792553088)) + (i32.add (i32.const 1566292512)) + (i32.add (i32.const 1732467524)) + (i32.add (i32.const 818306365)) + (i32.add (i32.const 1820903897)) + (i32.add (i32.const 396681363)) + (i32.add (i32.const -1598988942)) + (i32.add (i32.const -1590699606)) + (i32.add (i32.const 733143851)) + (i32.add (i32.const -1163133241)) + (i32.add (i32.const -1087377038)) + (i32.add (i32.const 1245259500)) + (i32.add (i32.const -1180929104)) + (i32.add (i32.const 833439365)) + (i32.add (i32.const 1584803071)) + (i32.add (i32.const 730650430)) + (i32.add (i32.const -922607901)) + (i32.add (i32.const -877558605)) + (i32.add (i32.const 1772598859)) + (i32.add (i32.const -710881073)) + (i32.add (i32.const 208005842)) + (i32.add (i32.const -1402431924)) + (i32.add (i32.const -191772131)) + (i32.add (i32.const -538810235)) + (i32.add (i32.const 1100565571)) + (i32.add (i32.const 1899609272)) + (i32.add (i32.const 1073010041)) + (i32.add (i32.const 1378662022)) + (i32.add (i32.const 427713358)) + (i32.add (i32.const 1904982818)) + (i32.add (i32.const 948351827)) + (i32.add (i32.const 607648357)) + (i32.add (i32.const -1611776670)) + (i32.add (i32.const -887865590)) + (i32.add (i32.const -430983624)) + (i32.add (i32.const -1588876309)) + (i32.add (i32.const 765740897)) + (i32.add (i32.const 1143848419)) + (i32.add (i32.const 1890796155)) + (i32.add (i32.const 744112025)) + (i32.add (i32.const 667073033)) + (i32.add (i32.const 1104206686)) + (i32.add (i32.const 485084684)) + (i32.add (i32.const -866733571)) + (i32.add (i32.const 1842144626)) + (i32.add (i32.const -1536393014)) + (i32.add (i32.const -1843210766)) + (i32.add (i32.const 1273768829)) + (i32.add (i32.const -996845198)) + (i32.add (i32.const 1066276752)) + (i32.add (i32.const 997660682)) + (i32.add (i32.const 365892467)) + (i32.add (i32.const 894592544)) + (i32.add (i32.const -1189089931)) + (i32.add (i32.const 1349040116)) + (i32.add (i32.const -1210587488)) + (i32.add (i32.const -1938777075)) + (i32.add (i32.const 2044474175)) + (i32.add (i32.const -1667005353)) + (i32.add (i32.const -377044036)) + (i32.add (i32.const 1940576374)) + (i32.add (i32.const 1445432092)) + (i32.add (i32.const -1523955784)) + (i32.add (i32.const -1380034732)) + (i32.add (i32.const 1998426026)) + (i32.add (i32.const -973418676)) + (i32.add (i32.const 1508178270)) + (i32.add (i32.const 1224326720)) + (i32.add (i32.const -1705819667)) + (i32.add (i32.const -1744501790)) + (i32.add (i32.const -1113793705)) + (i32.add (i32.const 997074277)) + (i32.add (i32.const 276951643)) + (i32.add (i32.const -255380013)) + (i32.add (i32.const -619951202)) + (i32.add (i32.const -1465772271)) + (i32.add (i32.const 1484878201)) + (i32.add (i32.const 575178209)) + (i32.add (i32.const 1045033312)) + (i32.add (i32.const 348266090)) + (i32.add (i32.const 685357428)) + (i32.add (i32.const -1687698397)) + (i32.add (i32.const -1736355837)) + (i32.add (i32.const -908305060)) + (i32.add (i32.const -729790243)) + (i32.add (i32.const -882640109)) + (i32.add (i32.const 1249695067)) + (i32.add (i32.const 1980027241)) + (i32.add (i32.const -1588167945)) + (i32.add (i32.const -1494835763)) + (i32.add (i32.const 927867003)) + (i32.add (i32.const -1193207007)) + (i32.add (i32.const 583741367)) + (i32.add (i32.const 1836112084)) + (i32.add (i32.const 1648065863)) + (i32.add (i32.const 1670043231)) + (i32.add (i32.const -2005058184)) + (i32.add (i32.const 509580175)) + (i32.add (i32.const -934869640)) + (i32.add (i32.const 838894487)) + (i32.add (i32.const 289694867)) + (i32.add (i32.const -124571843)) + (i32.add (i32.const 1937557818)) + (i32.add (i32.const 2118833180)) + (i32.add (i32.const 466750029)) + (i32.add (i32.const 189942514)) + (i32.add (i32.const -1666615729)) + (i32.add (i32.const 2116249392)) + (i32.add (i32.const 319718010)) + (i32.add (i32.const 576346792)) + (i32.add (i32.const 2071069028)) + (i32.add (i32.const 1585940493)) + (i32.add (i32.const 947367032)) + (i32.add (i32.const 389041263)) + (i32.add (i32.const -977328474)) + (i32.add (i32.const -766551502)) + (i32.add (i32.const -1054990463)) + (i32.add (i32.const 931033686)) + (i32.add (i32.const -1083838939)) + (i32.add (i32.const 736376895)) + (i32.add (i32.const 338878687)) + (i32.add (i32.const -1930022830)) + (i32.add (i32.const 1904777031)) + (i32.add (i32.const 224196061)) + (i32.add (i32.const 1802731401)) + (i32.add (i32.const -1021030730)) + (i32.add (i32.const 257501205)) + (i32.add (i32.const 1658897726)) + (i32.add (i32.const 1797217045)) + (i32.add (i32.const -880846159)) + (i32.add (i32.const -492389147)) + (i32.add (i32.const 1688426827)) + (i32.add (i32.const 1116682067)) + (i32.add (i32.const 1744488188)) + (i32.add (i32.const 852158437)) + (i32.add (i32.const -6677835)) + (i32.add (i32.const 1052012853)) + (i32.add (i32.const -272336702)) + (i32.add (i32.const -563154003)) + (i32.add (i32.const -1656931580)) + (i32.add (i32.const 97759175)) + (i32.add (i32.const 218797327)) + (i32.add (i32.const -2145202780)) + (i32.add (i32.const -1142585783)) + (i32.add (i32.const 1836361261)) + (i32.add (i32.const 811933217)) + (i32.add (i32.const 1726663148)) + (i32.add (i32.const -1814817974)) + (i32.add (i32.const -360699632)) + (i32.add (i32.const 1751453821)) + (i32.add (i32.const -580573355)) + (i32.add (i32.const 364105995)) + (i32.add (i32.const -1953439191)) + (i32.add (i32.const -718674446)) + (i32.add (i32.const -1845512186)) + (i32.add (i32.const 145106020)) + (i32.add (i32.const 153004718)) + (i32.add (i32.const 651869125)) + (i32.add (i32.const 1106432012)) + (i32.add (i32.const 660657107)) + (i32.add (i32.const -690362971)) + (i32.add (i32.const 395586992)) + (i32.add (i32.const -776293015)) + (i32.add (i32.const 1285535880)) + (i32.add (i32.const 1851170384)) + (i32.add (i32.const 103943516)) + (i32.add (i32.const 890504330)) + (i32.add (i32.const -702180519)) + (i32.add (i32.const 1319278947)) + (i32.add (i32.const -1997770370)) + (i32.add (i32.const 2077767223)) + (i32.add (i32.const -1694792995)) + (i32.add (i32.const -606515273)) + (i32.add (i32.const 2106458154)) + (i32.add (i32.const 1782940945)) + (i32.add (i32.const 1816340808)) + (i32.add (i32.const -56763958)) + (i32.add (i32.const 1510997322)) + (i32.add (i32.const 1895748289)) + (i32.add (i32.const 1856149335)) + (i32.add (i32.const 544687500)) + (i32.add (i32.const 2139337326)) + (i32.add (i32.const 754864537)) + (i32.add (i32.const 173336939)) + (i32.add (i32.const -1204744542)) + (i32.add (i32.const 245882434)) + (i32.add (i32.const -1919701315)) + (i32.add (i32.const 124176836)) + (i32.add (i32.const 242296736)) + (i32.add (i32.const -1735230583)) + (i32.add (i32.const -1593256122)) + (i32.add (i32.const 336359328)) + (i32.add (i32.const 348375703)) + (i32.add (i32.const 48674066)) + (i32.add (i32.const -97965803)) + (i32.add (i32.const -754112943)) + (i32.add (i32.const -2109274530)) + (i32.add (i32.const 1414875480)) + (i32.add (i32.const 880771984)) + (i32.add (i32.const 1535766655)) + (i32.add (i32.const -420480145)) + (i32.add (i32.const 1183048674)) + (i32.add (i32.const -401735511)) + (i32.add (i32.const 1791495486)) + (i32.add (i32.const 812592158)) + (i32.add (i32.const 162070541)) + (i32.add (i32.const 1184032229)) + (i32.add (i32.const -1098232459)) + (i32.add (i32.const 382854919)) + (i32.add (i32.const 472035656)) + (i32.add (i32.const -625533829)) + (i32.add (i32.const -718573990)) + (i32.add (i32.const -806527472)) + (i32.add (i32.const 1180829365)) + (i32.add (i32.const 1374308863)) + (i32.add (i32.const -49797831)) + (i32.add (i32.const 697732990)) + (i32.add (i32.const -1372525799)) + (i32.add (i32.const -1110234913)) + (i32.add (i32.const 501689513)) + (i32.add (i32.const -2120522868)) + (i32.add (i32.const -193061397)) + (i32.add (i32.const 2030437076)) + (i32.add (i32.const -602614008)) + (i32.add (i32.const 1383600488)) + (i32.add (i32.const -1166172777)) + (i32.add (i32.const -788847576)) + (i32.add (i32.const 480064632)) + (i32.add (i32.const 101289984)) + (i32.add (i32.const -1481789762)) + (i32.add (i32.const 539128989)) + (i32.add (i32.const 522990603)) + (i32.add (i32.const -726333442)) + (i32.add (i32.const -734704314)) + (i32.add (i32.const -397477096)) + (i32.add (i32.const -391773299)) + (i32.add (i32.const -1779191270)) + (i32.add (i32.const -1960950868)) + (i32.add (i32.const 478980676)) + (i32.add (i32.const 162448528)) + (i32.add (i32.const -1616669898)) + (i32.add (i32.const -831523581)) + (i32.add (i32.const 1772277216)) + (i32.add (i32.const -1930332267)) + (i32.add (i32.const 434832735)) + (i32.add (i32.const -558750555)) + (i32.add (i32.const -373617034)) + (i32.add (i32.const -2050452095)) + (i32.add (i32.const -55810262)) + (i32.add (i32.const 1092520591)) + (i32.add (i32.const 58906901)) + (i32.add (i32.const -1332496900)) + (i32.add (i32.const -1606091582)) + (i32.add (i32.const -1766647845)) + (i32.add (i32.const -1179278718)) + (i32.add (i32.const 2060266854)) + (i32.add (i32.const -1736126896)) + (i32.add (i32.const -1184443793)) + (i32.add (i32.const 74850728)) + (i32.add (i32.const -1720950153)) + (i32.add (i32.const 1666926292)) + (i32.add (i32.const 290127802)) + (i32.add (i32.const 1735351196)) + (i32.add (i32.const -920898831)) + (i32.add (i32.const -399591378)) + (i32.add (i32.const -25134927)) + (i32.add (i32.const -1077577364)) + (i32.add (i32.const -690792157)) + (i32.add (i32.const 2046220887)) + (i32.add (i32.const -1328129630)) + (i32.add (i32.const -728658596)) + (i32.add (i32.const 1137963961)) + (i32.add (i32.const -1408312596)) + (i32.add (i32.const -1216105871)) + (i32.add (i32.const 1204876223)) + (i32.add (i32.const -1433649608)) + (i32.add (i32.const -1960788728)) + (i32.add (i32.const 1219667746)) + (i32.add (i32.const -3232609)) + (i32.add (i32.const 118900943)) + (i32.add (i32.const 83768430)) + (i32.add (i32.const 335204686)) + (i32.add (i32.const 624530148)) + (i32.add (i32.const 1972530253)) + (i32.add (i32.const -1246618544)) + (i32.add (i32.const 902575835)) + (i32.add (i32.const 1959438332)) + (i32.add (i32.const 1049770884)) + (i32.add (i32.const 2141964340)) + (i32.add (i32.const 11329989)) + (i32.add (i32.const -428997343)) + (i32.add (i32.const 204123247)) + (i32.add (i32.const -1572039553)) + (i32.add (i32.const 1971363741)) + (i32.add (i32.const -1871274537)) + (i32.add (i32.const -1148905670)) + (i32.add (i32.const -1512083634)) + (i32.add (i32.const -693004147)) + (i32.add (i32.const -1150365136)) + (i32.add (i32.const 405583658)) + (i32.add (i32.const -1644547793)) + (i32.add (i32.const -105679374)) + (i32.add (i32.const 662091263)) + (i32.add (i32.const -1900375503)) + (i32.add (i32.const -527024857)) + (i32.add (i32.const 1839058265)) + (i32.add (i32.const 1474974108)) + (i32.add (i32.const 415803969)) + (i32.add (i32.const 1165958575)) + (i32.add (i32.const -383549538)) + (i32.add (i32.const 312878303)) + (i32.add (i32.const 1278593841)) + (i32.add (i32.const 1926554229)) + (i32.add (i32.const -1216535882)) + (i32.add (i32.const 1813596252)) + (i32.add (i32.const 1125328482)) + (i32.add (i32.const -41757154)) + (i32.add (i32.const -452144278)) + (i32.add (i32.const 282250137)) + (i32.add (i32.const 2135543546)) + (i32.add (i32.const -314039886)) + (i32.add (i32.const 1143254887)) + (i32.add (i32.const 1201982093)) + (i32.add (i32.const 1926260200)) + (i32.add (i32.const -1644054406)) + (i32.add (i32.const -1479866954)) + (i32.add (i32.const -2104827360)) + (i32.add (i32.const -488265176)) + (i32.add (i32.const -428376185)) + (i32.add (i32.const 697565994)) + (i32.add (i32.const -733779747)) + (i32.add (i32.const 1177878844)) + (i32.add (i32.const -1944640604)) + (i32.add (i32.const -466986724)) + (i32.add (i32.const -973608700)) + (i32.add (i32.const -892789655)) + (i32.add (i32.const -1589529843)) + (i32.add (i32.const 1774325612)) + (i32.add (i32.const -365889000)) + (i32.add (i32.const 110795671)) + (i32.add (i32.const -1067118767)) + (i32.add (i32.const -1993554112)) + (i32.add (i32.const -581485227)) + (i32.add (i32.const -1222170040)) + (i32.add (i32.const 1698208001)) + (i32.add (i32.const -581579049)) + (i32.add (i32.const 552457525)) + (i32.add (i32.const 1999135029)) + (i32.add (i32.const -396044704)) + (i32.add (i32.const -1967611765)) + (i32.add (i32.const 1403411948)) + (i32.add (i32.const -896994919)) + (i32.add (i32.const -482321058)) + (i32.add (i32.const 917331512)) + (i32.add (i32.const 166811307)) + (i32.add (i32.const -1913752607)) + (i32.add (i32.const 1921652890)) + (i32.add (i32.const -1859985898)) + (i32.add (i32.const 166225737)) + (i32.add (i32.const 2123571505)) + (i32.add (i32.const 1541736730)) + (i32.add (i32.const 2039770993)) + (i32.add (i32.const 1923953715)) + (i32.add (i32.const -375082112)) + (i32.add (i32.const 2052596090)) + (i32.add (i32.const 1168198828)) + (i32.add (i32.const 14875716)) + (i32.add (i32.const -2079447658)) + (i32.add (i32.const 2031243262)) + (i32.add (i32.const 427926143)) + (i32.add (i32.const 1789677913)) + (i32.add (i32.const 1448637075)) + (i32.add (i32.const 1095028019)) + (i32.add (i32.const -1478342054)) + (i32.add (i32.const 1116058486)) + (i32.add (i32.const -2085501765)) + (i32.add (i32.const 390940530)) + (i32.add (i32.const 934262039)) + (i32.add (i32.const 1473434889)) + (i32.add (i32.const 1430392634)) + (i32.add (i32.const -1403107113)) + (i32.add (i32.const 1222289029)) + (i32.add (i32.const -1084742547)) + (i32.add (i32.const -50821836)) + (i32.add (i32.const -637734383)) + (i32.add (i32.const -1936247352)) + (i32.add (i32.const -925240596)) + (i32.add (i32.const 1917973658)) + (i32.add (i32.const 1911172713)) + (i32.add (i32.const 2021060929)) + (i32.add (i32.const 181671990)) + (i32.add (i32.const -728108080)) + (i32.add (i32.const -1609646929)) + (i32.add (i32.const -1969502515)) + (i32.add (i32.const 8804102)) + (i32.add (i32.const -1827875657)) + (i32.add (i32.const -1742448967)) + (i32.add (i32.const 782495212)) + (i32.add (i32.const -1540200505)) + (i32.add (i32.const -154169814)) + (i32.add (i32.const -395094951)) + (i32.add (i32.const 765034558)) + (i32.add (i32.const 1636094913)) + (i32.add (i32.const -980279067)) + (i32.add (i32.const -1153344760)) + (i32.add (i32.const -1164904311)) + (i32.add (i32.const -876111242)) + (i32.add (i32.const -2071351532)) + (i32.add (i32.const -1432822578)) + (i32.add (i32.const -324330918)) + (i32.add (i32.const -1274384044)) + (i32.add (i32.const -1466103459)) + (i32.add (i32.const -537117818)) + (i32.add (i32.const 1077578324)) + (i32.add (i32.const -173540089)) + (i32.add (i32.const 500594243)) + (i32.add (i32.const -1802434893)) + (i32.add (i32.const 1356222759)) + (i32.add (i32.const -2018345227)) + (i32.add (i32.const 1028955372)) + (i32.add (i32.const -1786045988)) + (i32.add (i32.const 289788316)) + (i32.add (i32.const -785010036)) + (i32.add (i32.const 1371370416)) + (i32.add (i32.const 1153530974)) + (i32.add (i32.const 2063570465)) + (i32.add (i32.const 1155525046)) + (i32.add (i32.const -1856652750)) + (i32.add (i32.const -1551625625)) + (i32.add (i32.const -793885834)) + (i32.add (i32.const 76843028)) + (i32.add (i32.const -1966435378)) + (i32.add (i32.const 1079516240)) + (i32.add (i32.const 1564529547)) + (i32.add (i32.const -1338365004)) + (i32.add (i32.const -715989365)) + (i32.add (i32.const -517175154)) + (i32.add (i32.const -201654920)) + (i32.add (i32.const 995011698)) + (i32.add (i32.const -1321695886)) + (i32.add (i32.const 2072664305)) + (i32.add (i32.const -1742768594)) + (i32.add (i32.const -174011860)) + (i32.add (i32.const 1851737900)) + (i32.add (i32.const -680759427)) + (i32.add (i32.const -1727955308)) + (i32.add (i32.const -1962640538)) + (i32.add (i32.const -873957601)) + (i32.add (i32.const 1524936535)) + (i32.add (i32.const 1968332144)) + (i32.add (i32.const -1064390128)) + (i32.add (i32.const 1599421520)) + (i32.add (i32.const -115464182)) + (i32.add (i32.const -1513755537)) + (i32.add (i32.const 1374139689)) + (i32.add (i32.const 1088637755)) + (i32.add (i32.const 12344418)) + (i32.add (i32.const 125889885)) + (i32.add (i32.const 1849239823)) + (i32.add (i32.const 1052227848)) + (i32.add (i32.const 1543034464)) + (i32.add (i32.const -2135395687)) + (i32.add (i32.const -1374608695)) + (i32.add (i32.const -399637246)) + (i32.add (i32.const -115033354)) + (i32.add (i32.const -967929697)) + (i32.add (i32.const 1285230908)) + (i32.add (i32.const 109681743)) + (i32.add (i32.const 640074177)) + (i32.add (i32.const 1791473078)) + (i32.add (i32.const -1048227564)) + (i32.add (i32.const 1436288883)) + (i32.add (i32.const 112857429)) + (i32.add (i32.const 473292050)) + (i32.add (i32.const -986276259)) + (i32.add (i32.const 1801724845)) + (i32.add (i32.const 1997224455)) + (i32.add (i32.const 1018147162)) + (i32.add (i32.const -1618727729)) + (i32.add (i32.const 400010140)) + (i32.add (i32.const 8466051)) + (i32.add (i32.const -1221016216)) + (i32.add (i32.const -1965834732)) + (i32.add (i32.const 1673458879)) + (i32.add (i32.const -202593336)) + (i32.add (i32.const 196430193)) + (i32.add (i32.const 39449277)) + (i32.add (i32.const -280762830)) + (i32.add (i32.const 1396861797)) + (i32.add (i32.const 1670644910)) + (i32.add (i32.const -223115371)) + (i32.add (i32.const 1022748046)) + (i32.add (i32.const 1698929013)) + (i32.add (i32.const 26364265)) + (i32.add (i32.const 1264900524)) + (i32.add (i32.const -907632063)) + (i32.add (i32.const -1263460399)) + (i32.add (i32.const 1127886664)) + (i32.add (i32.const -1320553870)) + (i32.add (i32.const -1706133423)) + (i32.add (i32.const -1584080478)) + (i32.add (i32.const 1141506233)) + (i32.add (i32.const 386763555)) + (i32.add (i32.const 304240408)) + (i32.add (i32.const 2065057026)) + (i32.add (i32.const -737807016)) + (i32.add (i32.const 1499441546)) + (i32.add (i32.const -1988323871)) + (i32.add (i32.const -530099972)) + (i32.add (i32.const 980134113)) + (i32.add (i32.const -489283355)) + (i32.add (i32.const 88938628)) + (i32.add (i32.const -760534082)) + (i32.add (i32.const 1669044507)) + (i32.add (i32.const 674079874)) + (i32.add (i32.const -467997951)) + (i32.add (i32.const -899560032)) + (i32.add (i32.const 120404452)) + (i32.add (i32.const 315697410)) + (i32.add (i32.const -1194498895)) + (i32.add (i32.const -1515813940)) + (i32.add (i32.const 412812932)) + (i32.add (i32.const 190511407)) + (i32.add (i32.const -1386742042)) + (i32.add (i32.const -489566955)) + (i32.add (i32.const 1338281768)) + (i32.add (i32.const 365265744)) + (i32.add (i32.const -2007783253)) + (i32.add (i32.const 2020031750)) + (i32.add (i32.const -1149133178)) + (i32.add (i32.const 1296646568)) + (i32.add (i32.const -310719212)) + (i32.add (i32.const -60423004)) + (i32.add (i32.const -1428550769)) + (i32.add (i32.const -1509088228)) + (i32.add (i32.const -975885330)) + (i32.add (i32.const 417408856)) + (i32.add (i32.const -31118448)) + (i32.add (i32.const -441406268)) + (i32.add (i32.const 1058313932)) + (i32.add (i32.const -1717558174)) + (i32.add (i32.const -674721281)) + (i32.add (i32.const 604723086)) + (i32.add (i32.const 635695526)) + (i32.add (i32.const -1493839297)) + (i32.add (i32.const -337539163)) + (i32.add (i32.const -381225256)) + (i32.add (i32.const 491846331)) + (i32.add (i32.const -1741206039)) + (i32.add (i32.const 261264784)) + (i32.add (i32.const -1340970247)) + (i32.add (i32.const -1672025368)) + (i32.add (i32.const 271833173)) + (i32.add (i32.const 982519672)) + (i32.add (i32.const 2049732674)) + (i32.add (i32.const 223517501)) + (i32.add (i32.const -1438603381)) + (i32.add (i32.const 1981271341)) + (i32.add (i32.const -1582098822)) + (i32.add (i32.const 1955765592)) + (i32.add (i32.const 409913698)) + (i32.add (i32.const -1997242837)) + (i32.add (i32.const 2143906166)) + (i32.add (i32.const -472406071)) + (i32.add (i32.const 331043847)) + (i32.add (i32.const -2092565637)) + (i32.add (i32.const -1614020125)) + (i32.add (i32.const 457718310)) + (i32.add (i32.const -408818255)) + (i32.add (i32.const 209118261)) + (i32.add (i32.const -1451453396)) + (i32.add (i32.const 1531145963)) + (i32.add (i32.const -1842616346)) + (i32.add (i32.const -2061214507)) + (i32.add (i32.const -1052812166)) + (i32.add (i32.const -716387176)) + (i32.add (i32.const -1654877195)) + (i32.add (i32.const -763508075)) + (i32.add (i32.const -1516675157)) + (i32.add (i32.const -2102314847)) + (i32.add (i32.const -797624322)) + (i32.add (i32.const -1574241567)) + (i32.add (i32.const 1879062074)) + (i32.add (i32.const -520139589)) + (i32.add (i32.const 1264460482)) + (i32.add (i32.const -1630741615)) + (i32.add (i32.const 2010885182)) + (i32.add (i32.const -506759077)) + (i32.add (i32.const 1965834420)) + (i32.add (i32.const -742535617)) + (i32.add (i32.const -710637870)) + (i32.add (i32.const 989126515)) + (i32.add (i32.const -1763751829)) + (i32.add (i32.const -1989563941)) + (i32.add (i32.const 634123957)) + (i32.add (i32.const 1686443173)) + (i32.add (i32.const 430741727)) + (i32.add (i32.const -402183131)) + (i32.add (i32.const 170060210)) + (i32.add (i32.const 1644904162)) + (i32.add (i32.const -1104341202)) + (i32.add (i32.const 1248911152)) + (i32.add (i32.const -1755373147)) + (i32.add (i32.const -1068661130)) + (i32.add (i32.const 937023107)) + (i32.add (i32.const 1823274301)) + (i32.add (i32.const -724893900)) + (i32.add (i32.const -1634453628)) + (i32.add (i32.const -57816049)) + (i32.add (i32.const 1151483157)) + (i32.add (i32.const -441357559)) + (i32.add (i32.const -1917566329)) + (i32.add (i32.const -2030593633)) + (i32.add (i32.const -382586223)) + (i32.add (i32.const -332093042)) + (i32.add (i32.const -199979820)) + (i32.add (i32.const 1144981911)) + (i32.add (i32.const 160974427)) + (i32.add (i32.const 1708628093)) + (i32.add (i32.const 242635455)) + (i32.add (i32.const 1013542230)) + (i32.add (i32.const 1159135121)) + (i32.add (i32.const -1527414158)) + (i32.add (i32.const 1504129870)) + (i32.add (i32.const -409385342)) + (i32.add (i32.const 147946587)) + (i32.add (i32.const -407880564)) + (i32.add (i32.const -1446105315)) + (i32.add (i32.const -735369484)) + (i32.add (i32.const -1586364316)) + (i32.add (i32.const -1398776362)) + (i32.add (i32.const -651968793)) + (i32.add (i32.const 972678020)) + (i32.add (i32.const -1711038208)) + (i32.add (i32.const -1444543320)) + (i32.add (i32.const 239681554)) + (i32.add (i32.const -87956487)) + (i32.add (i32.const -857648686)) + (i32.add (i32.const -583442137)) + (i32.add (i32.const 840227499)) + (i32.add (i32.const 1503668582)) + (i32.add (i32.const 269912046)) + (i32.add (i32.const -1728845105)) + (i32.add (i32.const -1317683956)) + (i32.add (i32.const 1100694636)) + (i32.add (i32.const 1960187160)) + (i32.add (i32.const -1766744928)) + (i32.add (i32.const -2005994615)) + (i32.add (i32.const -483307546)) + (i32.add (i32.const 1356617785)) + (i32.add (i32.const -1703781467)) + (i32.add (i32.const 116432876)) + (i32.add (i32.const -1445101287)) + (i32.add (i32.const 1841163070)) + (i32.add (i32.const 907244667)) + (i32.add (i32.const 732807757)) + (i32.add (i32.const -767147011)) + (i32.add (i32.const -976894355)) + (i32.add (i32.const 682093695)) + (i32.add (i32.const 1793171212)) + (i32.add (i32.const -1982366921)) + (i32.add (i32.const 1723603311)) + (i32.add (i32.const -1086492408)) + (i32.add (i32.const 2085218656)) + (i32.add (i32.const 1411123386)) + (i32.add (i32.const -96525290)) + (i32.add (i32.const -2078822156)) + (i32.add (i32.const -1871121985)) + (i32.add (i32.const 604299729)) + (i32.add (i32.const -273312088)) + (i32.add (i32.const 171602892)) + (i32.add (i32.const 1183522176)) + (i32.add (i32.const 1715717241)) + (i32.add (i32.const -1536022102)) + (i32.add (i32.const -783064024)) + (i32.add (i32.const 656076541)) + (i32.add (i32.const 1196043288)) + (i32.add (i32.const -1095238255)) + (i32.add (i32.const 552471032)) + (i32.add (i32.const -332826272)) + (i32.add (i32.const 390939866)) + (i32.add (i32.const 975208670)) + (i32.add (i32.const 1905400308)) + (i32.add (i32.const 1771190258)) + (i32.add (i32.const -1967310570)) + (i32.add (i32.const 154546143)) + (i32.add (i32.const -134480784)) + (i32.add (i32.const -506702648)) + (i32.add (i32.const -880541159)) + (i32.add (i32.const -966044189)) + (i32.add (i32.const 86958132)) + (i32.add (i32.const 2074608012)) + (i32.add (i32.const -722242716)) + (i32.add (i32.const 1462613220)) + (i32.add (i32.const -1519632190)) + (i32.add (i32.const 1907002745)) + (i32.add (i32.const 1756755404)) + (i32.add (i32.const 46133035)) + (i32.add (i32.const 1491519452)) + (i32.add (i32.const -723703164)) + (i32.add (i32.const 1076942529)) + (i32.add (i32.const -1624560301)) + (i32.add (i32.const -1652681001)) + (i32.add (i32.const -636728464)) + (i32.add (i32.const 255809742)) + (i32.add (i32.const -1070776670)) + (i32.add (i32.const 1783709164)) + (i32.add (i32.const -864222266)) + (i32.add (i32.const 2055321471)) + (i32.add (i32.const 1000884360)) + (i32.add (i32.const 459256648)) + (i32.add (i32.const -273754300)) + (i32.add (i32.const -504487233)) + (i32.add (i32.const -351198037)) + (i32.add (i32.const -1976624914)) + (i32.add (i32.const 253812740)) + (i32.add (i32.const 444438078)) + (i32.add (i32.const 459535004)) + (i32.add (i32.const -1798278903)) + (i32.add (i32.const -1256874843)) + (i32.add (i32.const 614994666)) + (i32.add (i32.const -410597383)) + (i32.add (i32.const -422494892)) + (i32.add (i32.const 734461249)) + (i32.add (i32.const -1472904484)) + (i32.add (i32.const 804763270)) + (i32.add (i32.const -1086357532)) + (i32.add (i32.const -1942447401)) + (i32.add (i32.const 1002505034)) + (i32.add (i32.const -1928887361)) + (i32.add (i32.const 1238578461)) + (i32.add (i32.const -12491066)) + (i32.add (i32.const 1066805428)) + (i32.add (i32.const 889168773)) + (i32.add (i32.const -2117021323)) + (i32.add (i32.const -133335767)) + (i32.add (i32.const 203438334)) + (i32.add (i32.const -1181354222)) + (i32.add (i32.const 1067068226)) + (i32.add (i32.const -1339236348)) + (i32.add (i32.const 1303893367)) + (i32.add (i32.const 346107668)) + (i32.add (i32.const 1563729258)) + (i32.add (i32.const 237839334)) + (i32.add (i32.const 1058045581)) + (i32.add (i32.const -1159207838)) + (i32.add (i32.const -2079986938)) + (i32.add (i32.const -532289192)) + (i32.add (i32.const -700909485)) + (i32.add (i32.const 1497674569)) + (i32.add (i32.const -1764451858)) + (i32.add (i32.const -968301505)) + (i32.add (i32.const 1948751104)) + (i32.add (i32.const 157617028)) + (i32.add (i32.const -56234373)) + (i32.add (i32.const -1599076089)) + (i32.add (i32.const 571553023)) + (i32.add (i32.const 378944987)) + (i32.add (i32.const 1428739263)) + (i32.add (i32.const 897797463)) + (i32.add (i32.const -871120939)) + (i32.add (i32.const -457217316)) + (i32.add (i32.const -509257784)) + (i32.add (i32.const 2024774710)) + (i32.add (i32.const -1990751650)) + (i32.add (i32.const 1833626693)) + (i32.add (i32.const -1287047)) + (i32.add (i32.const -1145013014)) + (i32.add (i32.const 1622604051)) + (i32.add (i32.const -216182879)) + (i32.add (i32.const -670853501)) + (i32.add (i32.const 62562792)) + (i32.add (i32.const -1214974696)) + (i32.add (i32.const 1397210585)) + (i32.add (i32.const 1348654682)) + (i32.add (i32.const 1681081745)) + (i32.add (i32.const -1330937129)) + (i32.add (i32.const -1453409309)) + (i32.add (i32.const -491602537)) + (i32.add (i32.const 679356740)) + (i32.add (i32.const 763615863)) + (i32.add (i32.const -2022436174)) + (i32.add (i32.const 1712221440)) + (i32.add (i32.const 991487527)) + (i32.add (i32.const -1977011997)) + (i32.add (i32.const 469636056)) + (i32.add (i32.const -130261367)) + (i32.add (i32.const -957642800)) + (i32.add (i32.const 1518098185)) + (i32.add (i32.const -150083905)) + (i32.add (i32.const -24301299)) + (i32.add (i32.const 1704005703)) + (i32.add (i32.const 636667669)) + (i32.add (i32.const -1529646048)) + (i32.add (i32.const 1937725879)) + (i32.add (i32.const 158156898)) + (i32.add (i32.const 985469968)) + (i32.add (i32.const -1470276415)) + (i32.add (i32.const -1972513044)) + (i32.add (i32.const 1708115893)) + (i32.add (i32.const -193088697)) + (i32.add (i32.const -1860306128)) + (i32.add (i32.const -19137738)) + (i32.add (i32.const -742905232)) + (i32.add (i32.const -860921704)) + (i32.add (i32.const 441539384)) + (i32.add (i32.const -48504909)) + (i32.add (i32.const -775977230)) + (i32.add (i32.const -406849251)) + (i32.add (i32.const 1308782070)) + (i32.add (i32.const 1828611030)) + (i32.add (i32.const 420038234)) + (i32.add (i32.const -266749269)) + (i32.add (i32.const 893076781)) + (i32.add (i32.const -1407998359)) + (i32.add (i32.const 2102493208)) + (i32.add (i32.const -1547661700)) + (i32.add (i32.const -1487444336)) + (i32.add (i32.const -53897098)) + (i32.add (i32.const 765905866)) + (i32.add (i32.const -27020405)) + (i32.add (i32.const 614548236)) + (i32.add (i32.const -82925577)) + (i32.add (i32.const 365218491)) + (i32.add (i32.const 646943547)) + (i32.add (i32.const 1418628249)) + (i32.add (i32.const 735710520)) + (i32.add (i32.const 312531581)) + (i32.add (i32.const 479064118)) + (i32.add (i32.const 1348031301)) + (i32.add (i32.const 565669556)) + (i32.add (i32.const 1060456619)) + (i32.add (i32.const 2020402639)) + (i32.add (i32.const -289644799)) + (i32.add (i32.const 1316852851)) + (i32.add (i32.const -859057535)) + (i32.add (i32.const -1636818435)) + (i32.add (i32.const 350461494)) + (i32.add (i32.const -1443062719)) + (i32.add (i32.const -1804369304)) + (i32.add (i32.const 953627080)) + (i32.add (i32.const -2062561059)) + (i32.add (i32.const -36361190)) + (i32.add (i32.const 1918362826)) + (i32.add (i32.const -1126990760)) + (i32.add (i32.const -1525886843)) + (i32.add (i32.const 118330199)) + (i32.add (i32.const 514301132)) + (i32.add (i32.const -31776406)) + (i32.add (i32.const -2090708763)) + (i32.add (i32.const -161895789)) + (i32.add (i32.const -2101560265)) + (i32.add (i32.const 23640211)) + (i32.add (i32.const 152252938)) + (i32.add (i32.const 1651121012)) + (i32.add (i32.const 1261519089)) + (i32.add (i32.const -207421608)) + (i32.add (i32.const 1608584841)) + (i32.add (i32.const -1184158841)) + (i32.add (i32.const 496985806)) + (i32.add (i32.const 2132978210)) + (i32.add (i32.const -1267306815)) + (i32.add (i32.const -688660602)) + (i32.add (i32.const 1452950411)) + (i32.add (i32.const -1727323864)) + (i32.add (i32.const -1840512536)) + (i32.add (i32.const -1095603700)) + (i32.add (i32.const -1542735196)) + (i32.add (i32.const 2010909095)) + (i32.add (i32.const 1038025239)) + (i32.add (i32.const -1837265665)) + (i32.add (i32.const -215849222)) + (i32.add (i32.const 150937095)) + (i32.add (i32.const -478291835)) + (i32.add (i32.const 571344254)) + (i32.add (i32.const 115764516)) + (i32.add (i32.const 164499897)) + (i32.add (i32.const -1560299894)) + (i32.add (i32.const -69606045)) + (i32.add (i32.const -1674240404)) + (i32.add (i32.const -1739606117)) + (i32.add (i32.const -1749512409)) + (i32.add (i32.const 1649837136)) + (i32.add (i32.const 1164190935)) + (i32.add (i32.const 2066966937)) + (i32.add (i32.const -304379872)) + (i32.add (i32.const -816830775)) + (i32.add (i32.const 1116184642)) + (i32.add (i32.const -459800754)) + (i32.add (i32.const 1810805660)) + (i32.add (i32.const 398504965)) + (i32.add (i32.const -467839174)) + (i32.add (i32.const -1086154838)) + (i32.add (i32.const 2123035)) + (i32.add (i32.const 1983267688)) + (i32.add (i32.const 472458995)) + (i32.add (i32.const -1009552394)) + (i32.add (i32.const -1573006414)) + (i32.add (i32.const 1908168222)) + (i32.add (i32.const -1818090619)) + (i32.add (i32.const 775629710)) + (i32.add (i32.const 1613428971)) + (i32.add (i32.const -769027813)) + (i32.add (i32.const -259372027)) + (i32.add (i32.const -1611658463)) + (i32.add (i32.const 1970546240)) + (i32.add (i32.const -714499628)) + (i32.add (i32.const 1690715097)) + (i32.add (i32.const -28124357)) + (i32.add (i32.const -883217850)) + (i32.add (i32.const 1620455226)) + (i32.add (i32.const 1876837153)) + (i32.add (i32.const 2120808389)) + (i32.add (i32.const -436698135)) + (i32.add (i32.const -1227178293)) + (i32.add (i32.const 1339208402)) + (i32.add (i32.const -948662813)) + (i32.add (i32.const 120934293)) + (i32.add (i32.const -621553351)) + (i32.add (i32.const 339305868)) + (i32.add (i32.const -572367002)) + (i32.add (i32.const 1438938304)) + (i32.add (i32.const -1032618783)) + (i32.add (i32.const -249864045)) + (i32.add (i32.const -1728669317)) + (i32.add (i32.const -892032568)) + (i32.add (i32.const 1495328064)) + (i32.add (i32.const -2083450687)) + (i32.add (i32.const -145726761)) + (i32.add (i32.const 882459538)) + (i32.add (i32.const -852705769)) + (i32.add (i32.const -370085956)) + (i32.add (i32.const -1689618750)) + (i32.add (i32.const 63388207)) + (i32.add (i32.const 791958680)) + (i32.add (i32.const 556263732)) + (i32.add (i32.const 205594364)) + (i32.add (i32.const 2097523650)) + (i32.add (i32.const -506104893)) + (i32.add (i32.const -803716198)) + (i32.add (i32.const -866070842)) + (i32.add (i32.const -1682788266)) + (i32.add (i32.const -1366247714)) + (i32.add (i32.const -758232770)) + (i32.add (i32.const -766384589)) + (i32.add (i32.const 1678050071)) + (i32.add (i32.const 561211817)) + (i32.add (i32.const 2142739179)) + (i32.add (i32.const -581257171)) + (i32.add (i32.const -1970298519)) + (i32.add (i32.const 923007304)) + (i32.add (i32.const -653331748)) + (i32.add (i32.const 1525750236)) + (i32.add (i32.const 796955539)) + (i32.add (i32.const 1755547620)) + (i32.add (i32.const 1452376230)) + (i32.add (i32.const 888552016)) + (i32.add (i32.const -1813334895)) + (i32.add (i32.const 1911767009)) + (i32.add (i32.const -2104226276)) + (i32.add (i32.const -1056927014)) + (i32.add (i32.const -1185744088)) + (i32.add (i32.const -1898547750)) + (i32.add (i32.const -699760408)) + (i32.add (i32.const -1012673944)) + (i32.add (i32.const -1579888913)) + (i32.add (i32.const 970719038)) + (i32.add (i32.const -975890846)) + (i32.add (i32.const -864261790)) + (i32.add (i32.const -1656706075)) + (i32.add (i32.const 1274294820)) + (i32.add (i32.const -907566528)) + (i32.add (i32.const 1497670530)) + (i32.add (i32.const -1775758044)) + (i32.add (i32.const 483906231)) + (i32.add (i32.const 1196567205)) + (i32.add (i32.const 208587183)) + (i32.add (i32.const -1482159909)) + (i32.add (i32.const 1494770022)) + (i32.add (i32.const -485062630)) + (i32.add (i32.const -1280163569)) + (i32.add (i32.const -618857889)) + (i32.add (i32.const 1595341106)) + (i32.add (i32.const -258164289)) + (i32.add (i32.const 505899428)) + (i32.add (i32.const -1489806665)) + (i32.add (i32.const 1395890824)) + (i32.add (i32.const -863419859)) + (i32.add (i32.const -973792435)) + (i32.add (i32.const 1114989242)) + (i32.add (i32.const 1261236431)) + (i32.add (i32.const 138410849)) + (i32.add (i32.const -1036861035)) + (i32.add (i32.const 69440000)) + (i32.add (i32.const 224267067)) + (i32.add (i32.const -419000434)) + (i32.add (i32.const 138677450)) + (i32.add (i32.const -1299850799)) + (i32.add (i32.const 47273542)) + (i32.add (i32.const 1658191506)) + (i32.add (i32.const 1331217751)) + (i32.add (i32.const 2033189185)) + (i32.add (i32.const 2056900764)) + (i32.add (i32.const -1739275612)) + (i32.add (i32.const 200368596)) + (i32.add (i32.const -9386255)) + (i32.add (i32.const 1580964680)) + (i32.add (i32.const 311179073)) + (i32.add (i32.const -795837220)) + (i32.add (i32.const -2111055571)) + (i32.add (i32.const -1406097326)) + (i32.add (i32.const 1316873610)) + (i32.add (i32.const 2066897892)) + (i32.add (i32.const 710042171)) + (i32.add (i32.const -1464545790)) + (i32.add (i32.const 1029401433)) + (i32.add (i32.const -1552408079)) + (i32.add (i32.const -1795234518)) + (i32.add (i32.const 980503056)) + (i32.add (i32.const -306277427)) + (i32.add (i32.const 1105302661)) + (i32.add (i32.const -24374670)) + (i32.add (i32.const -226766388)) + (i32.add (i32.const -422439779)) + (i32.add (i32.const 706462952)) + (i32.add (i32.const 75359872)) + (i32.add (i32.const -683908108)) + (i32.add (i32.const 1202342585)) + (i32.add (i32.const 1646220011)) + (i32.add (i32.const -533539871)) + (i32.add (i32.const -1189013880)) + (i32.add (i32.const 1962287557)) + (i32.add (i32.const 1682082463)) + (i32.add (i32.const 31026700)) + (i32.add (i32.const -1729025916)) + (i32.add (i32.const 900673450)) + (i32.add (i32.const -839867838)) + (i32.add (i32.const 1003821827)) + (i32.add (i32.const -1185503127)) + (i32.add (i32.const -551594322)) + (i32.add (i32.const 1468247779)) + (i32.add (i32.const -2016719606)) + (i32.add (i32.const -477167260)) + (i32.add (i32.const -900835036)) + (i32.add (i32.const 490815415)) + (i32.add (i32.const 236056118)) + (i32.add (i32.const -729343681)) + (i32.add (i32.const 1993969871)) + (i32.add (i32.const -556493569)) + (i32.add (i32.const 20079511)) + (i32.add (i32.const 1893747897)) + (i32.add (i32.const 1678586034)) + (i32.add (i32.const 178816380)) + (i32.add (i32.const 126459463)) + (i32.add (i32.const 476501363)) + (i32.add (i32.const 523968930)) + (i32.add (i32.const -1890218054)) + (i32.add (i32.const 1341590769)) + (i32.add (i32.const -1496294674)) + (i32.add (i32.const -442797589)) + (i32.add (i32.const 716842)) + (i32.add (i32.const 233699726)) + (i32.add (i32.const 606851801)) + (i32.add (i32.const 101168814)) + (i32.add (i32.const 863540008)) + (i32.add (i32.const -1313369227)) + (i32.add (i32.const -1832466587)) + (i32.add (i32.const 1756636625)) + (i32.add (i32.const -1462827575)) + (i32.add (i32.const -1267174647)) + (i32.add (i32.const -1017233279)) + (i32.add (i32.const -1489524411)) + (i32.add (i32.const -709113493)) + (i32.add (i32.const 674518702)) + (i32.add (i32.const 824726957)) + (i32.add (i32.const -1787953778)) + (i32.add (i32.const 2058926009)) + (i32.add (i32.const -861315244)) + (i32.add (i32.const -1694500436)) + (i32.add (i32.const -1025235312)) + (i32.add (i32.const 1113465388)) + (i32.add (i32.const -1709947680)) + (i32.add (i32.const -325116023)) + (i32.add (i32.const -1252732047)) + (i32.add (i32.const 689214115)) + (i32.add (i32.const 607609548)) + (i32.add (i32.const 1871352496)) + (i32.add (i32.const 75520798)) + (i32.add (i32.const 437830109)) + (i32.add (i32.const -1620202848)) + (i32.add (i32.const -2100951396)) + (i32.add (i32.const -491538617)) + (i32.add (i32.const -1377381613)) + (i32.add (i32.const -824311390)) + (i32.add (i32.const -430483447)) + (i32.add (i32.const -146295740)) + (i32.add (i32.const 1111390306)) + (i32.add (i32.const -98740794)) + (i32.add (i32.const 1559545683)) + (i32.add (i32.const -1615925332)) + (i32.add (i32.const -56972511)) + (i32.add (i32.const 25260206)) + (i32.add (i32.const -1697039047)) + (i32.add (i32.const 227199727)) + (i32.add (i32.const 1213021708)) + (i32.add (i32.const 2089166213)) + (i32.add (i32.const -558863915)) + (i32.add (i32.const -1883558054)) + (i32.add (i32.const 588433727)) + (i32.add (i32.const -1386203344)) + (i32.add (i32.const -1662436940)) + (i32.add (i32.const -1626428999)) + (i32.add (i32.const 554670099)) + (i32.add (i32.const -1806364619)) + (i32.add (i32.const -744116734)) + (i32.add (i32.const 664646617)) + (i32.add (i32.const -965655345)) + (i32.add (i32.const -653090050)) + (i32.add (i32.const -707130837)) + (i32.add (i32.const 2097603549)) + (i32.add (i32.const -1079261395)) + (i32.add (i32.const -170747913)) + (i32.add (i32.const -814948230)) + (i32.add (i32.const -977310041)) + (i32.add (i32.const 66794862)) + (i32.add (i32.const 1647558793)) + (i32.add (i32.const -485136782)) + (i32.add (i32.const 2051193717)) + (i32.add (i32.const -1958610116)) + (i32.add (i32.const 1554729958)) + (i32.add (i32.const -1905718668)) + (i32.add (i32.const -199978911)) + (i32.add (i32.const 475445466)) + (i32.add (i32.const 455614883)) + (i32.add (i32.const -914328337)) + (i32.add (i32.const -90571459)) + (i32.add (i32.const 253785028)) + (i32.add (i32.const 1893432588)) + (i32.add (i32.const -2047214744)) + (i32.add (i32.const 166224903)) + (i32.add (i32.const 670063160)) + (i32.add (i32.const -524109149)) + (i32.add (i32.const -303398422)) + (i32.add (i32.const 1919806028)) + (i32.add (i32.const 950065151)) + (i32.add (i32.const 370964348)) + (i32.add (i32.const 794081814)) + (i32.add (i32.const 910504737)) + (i32.add (i32.const -1528628307)) + (i32.add (i32.const -1122397306)) + (i32.add (i32.const -873277204)) + (i32.add (i32.const 1072337723)) + (i32.add (i32.const -425108082)) + (i32.add (i32.const 1808094170)) + (i32.add (i32.const -100676515)) + (i32.add (i32.const 1702872922)) + (i32.add (i32.const 312667027)) + (i32.add (i32.const 1857659925)) + (i32.add (i32.const -419403852)) + (i32.add (i32.const -1672455506)) + (i32.add (i32.const -1539057761)) + (i32.add (i32.const -677222902)) + (i32.add (i32.const -466894553)) + (i32.add (i32.const 1878887358)) + (i32.add (i32.const 1496674214)) + (i32.add (i32.const 2118108303)) + (i32.add (i32.const 1783024207)) + (i32.add (i32.const 1145902731)) + (i32.add (i32.const -597254308)) + (i32.add (i32.const -1123224215)) + (i32.add (i32.const -1605967537)) + (i32.add (i32.const 381431449)) + (i32.add (i32.const 2074792741)) + (i32.add (i32.const 1599382134)) + (i32.add (i32.const 1780054758)) + (i32.add (i32.const 838526325)) + (i32.add (i32.const 1676612118)) + (i32.add (i32.const 951811636)) + (i32.add (i32.const -506300007)) + (i32.add (i32.const -474641329)) + (i32.add (i32.const 167439438)) + (i32.add (i32.const -297483005)) + (i32.add (i32.const -1764765159)) + (i32.add (i32.const -418505275)) + (i32.add (i32.const 161633035)) + (i32.add (i32.const -1060590407)) + (i32.add (i32.const 491854834)) + (i32.add (i32.const -253545447)) + (i32.add (i32.const 1511826795)) + (i32.add (i32.const -1072474179)) + (i32.add (i32.const -1571474747)) + (i32.add (i32.const 184455249)) + (i32.add (i32.const 2045754395)) + (i32.add (i32.const 1120754844)) + (i32.add (i32.const -393619498)) + (i32.add (i32.const 904789701)) + (i32.add (i32.const 1196343073)) + (i32.add (i32.const -1927073293)) + (i32.add (i32.const -1292263533)) + (i32.add (i32.const -1516135586)) + (i32.add (i32.const -325532848)) + (i32.add (i32.const 1313502772)) + (i32.add (i32.const -818756692)) + (i32.add (i32.const 265997675)) + (i32.add (i32.const 2036311312)) + (i32.add (i32.const -127541114)) + (i32.add (i32.const -1177377947)) + (i32.add (i32.const -1440922182)) + (i32.add (i32.const -1442196203)) + (i32.add (i32.const -1124416180)) + (i32.add (i32.const -525763953)) + (i32.add (i32.const -876377516)) + (i32.add (i32.const 2087387362)) + (i32.add (i32.const 1440333889)) + (i32.add (i32.const -645249406)) + (i32.add (i32.const -188445105)) + (i32.add (i32.const -1782940024)) + (i32.add (i32.const -2007055878)) + (i32.add (i32.const 455401408)) + (i32.add (i32.const -1310993743)) + (i32.add (i32.const 1885553470)) + (i32.add (i32.const -2022326935)) + (i32.add (i32.const 1038358194)) + (i32.add (i32.const -1331893305)) + (i32.add (i32.const 261440412)) + (i32.add (i32.const 602250813)) + (i32.add (i32.const 17777563)) + (i32.add (i32.const -128077233)) + (i32.add (i32.const -1750371837)) + (i32.add (i32.const 1695709474)) + (i32.add (i32.const -836842452)) + (i32.add (i32.const 995620503)) + (i32.add (i32.const 492943596)) + (i32.add (i32.const -729440216)) + (i32.add (i32.const -2060395423)) + (i32.add (i32.const 1430186420)) + (i32.add (i32.const 539748809)) + (i32.add (i32.const -1582319285)) + (i32.add (i32.const 1685424990)) + (i32.add (i32.const 268536177)) + (i32.add (i32.const -1662319469)) + (i32.add (i32.const -266088111)) + (i32.add (i32.const 330063519)) + (i32.add (i32.const 1065799129)) + (i32.add (i32.const -972346943)) + (i32.add (i32.const 1609172140)) + (i32.add (i32.const 2014069642)) + (i32.add (i32.const -1821307414)) + (i32.add (i32.const -1260525519)) + (i32.add (i32.const -610149888)) + (i32.add (i32.const -1548189130)) + (i32.add (i32.const 764214247)) + (i32.add (i32.const 1351158007)) + (i32.add (i32.const 845133644)) + (i32.add (i32.const 301410755)) + (i32.add (i32.const -1047353559)) + (i32.add (i32.const 781736781)) + (i32.add (i32.const -1172543372)) + (i32.add (i32.const -406188769)) + (i32.add (i32.const 1562697705)) + (i32.add (i32.const -927699296)) + (i32.add (i32.const 1115684415)) + (i32.add (i32.const -103393733)) + (i32.add (i32.const -729090944)) + (i32.add (i32.const -1677876572)) + (i32.add (i32.const 1481308737)) + (i32.add (i32.const -932555658)) + (i32.add (i32.const -1373151506)) + (i32.add (i32.const 36864980)) + (i32.add (i32.const 1469028068)) + (i32.add (i32.const -888768229)) + (i32.add (i32.const -535015148)) + (i32.add (i32.const 826440723)) + (i32.add (i32.const -1635071746)) + (i32.add (i32.const -1402420784)) + (i32.add (i32.const 1885383268)) + (i32.add (i32.const -774245418)) + (i32.add (i32.const 1332981381)) + (i32.add (i32.const -1568689139)) + (i32.add (i32.const 2125760969)) + (i32.add (i32.const 1340673653)) + (i32.add (i32.const 588217093)) + (i32.add (i32.const 117801715)) + (i32.add (i32.const -820218398)) + (i32.add (i32.const -381432578)) + (i32.add (i32.const -1946008451)) + (i32.add (i32.const -582086489)) + (i32.add (i32.const -1349732768)) + (i32.add (i32.const -1490696645)) + (i32.add (i32.const 162283483)) + (i32.add (i32.const -840622213)) + (i32.add (i32.const -478866812)) + (i32.add (i32.const 1161102569)) + (i32.add (i32.const 1278327093)) + (i32.add (i32.const -905678720)) + (i32.add (i32.const 1750614623)) + (i32.add (i32.const 1902440277)) + (i32.add (i32.const 1553486349)) + (i32.add (i32.const -1106147463)) + (i32.add (i32.const -1808554925)) + (i32.add (i32.const 1601847806)) + (i32.add (i32.const -513360479)) + (i32.add (i32.const -2080490003)) + (i32.add (i32.const 447889151)) + (i32.add (i32.const 1985634044)) + (i32.add (i32.const 1027369940)) + (i32.add (i32.const -64942544)) + (i32.add (i32.const -1127865587)) + (i32.add (i32.const -437459184)) + (i32.add (i32.const -907918883)) + (i32.add (i32.const -21460725)) + (i32.add (i32.const -1130402586)) + (i32.add (i32.const -1468791365)) + (i32.add (i32.const -107137589)) + (i32.add (i32.const -131755140)) + (i32.add (i32.const -43711217)) + (i32.add (i32.const -945421145)) + (i32.add (i32.const -1008162953)) + (i32.add (i32.const -1672218959)) + (i32.add (i32.const -609231425)) + (i32.add (i32.const 2045178369)) + (i32.add (i32.const 1084940902)) + (i32.add (i32.const -254953975)) + (i32.add (i32.const 792149965)) + (i32.add (i32.const -629656040)) + (i32.add (i32.const 1510339208)) + (i32.add (i32.const 1687749917)) + (i32.add (i32.const 122734954)) + (i32.add (i32.const -1443983783)) + (i32.add (i32.const -661033813)) + (i32.add (i32.const -503084589)) + (i32.add (i32.const 1568085581)) + (i32.add (i32.const 1785052290)) + (i32.add (i32.const -432304469)) + (i32.add (i32.const -172275960)) + (i32.add (i32.const -190638676)) + (i32.add (i32.const -600688750)) + (i32.add (i32.const -1426341189)) + (i32.add (i32.const 17499632)) + (i32.add (i32.const -1129840480)) + (i32.add (i32.const 256039429)) + (i32.add (i32.const -868428211)) + (i32.add (i32.const 1705758294)) + (i32.add (i32.const -1197359934)) + (i32.add (i32.const -528333647)) + (i32.add (i32.const 1651979962)) + (i32.add (i32.const 676308761)) + (i32.add (i32.const -592137263)) + (i32.add (i32.const -1331571332)) + (i32.add (i32.const 1852491068)) + (i32.add (i32.const 534337866)) + (i32.add (i32.const -2134044373)) + (i32.add (i32.const -950901744)) + (i32.add (i32.const 1262467476)) + (i32.add (i32.const 455441683)) + (i32.add (i32.const -2051269958)) + (i32.add (i32.const 1372490017)) + (i32.add (i32.const 1846747414)) + (i32.add (i32.const 1429001355)) + (i32.add (i32.const 1327576065)) + (i32.add (i32.const 645207108)) + (i32.add (i32.const 1051212023)) + (i32.add (i32.const -1620432970)) + (i32.add (i32.const 284531021)) + (i32.add (i32.const -1846024034)) + (i32.add (i32.const -855337249)) + (i32.add (i32.const -309059345)) + (i32.add (i32.const 2140275247)) + (i32.add (i32.const 1129118192)) + (i32.add (i32.const 1660404308)) + (i32.add (i32.const 1627122361)) + (i32.add (i32.const 1064714045)) + (i32.add (i32.const 891274348)) + (i32.add (i32.const -23954275)) + (i32.add (i32.const -484429652)) + (i32.add (i32.const -2103998013)) + (i32.add (i32.const 1013060196)) + (i32.add (i32.const -1064106053)) + (i32.add (i32.const 2091544006)) + (i32.add (i32.const 744168637)) + (i32.add (i32.const 2096565898)) + (i32.add (i32.const 7109113)) + (i32.add (i32.const 664285882)) + (i32.add (i32.const 1718419149)) + (i32.add (i32.const -1867977691)) + (i32.add (i32.const -1985722199)) + (i32.add (i32.const -1980149995)) + (i32.add (i32.const 1132652472)) + (i32.add (i32.const 1628138510)) + (i32.add (i32.const 1076389768)) + (i32.add (i32.const 488579593)) + (i32.add (i32.const 481599559)) + (i32.add (i32.const -687717053)) + (i32.add (i32.const -471516972)) + (i32.add (i32.const -1817092735)) + (i32.add (i32.const 1188681205)) + (i32.add (i32.const 1833413845)) + (i32.add (i32.const 1502198086)) + (i32.add (i32.const 764167424)) + (i32.add (i32.const 302628189)) + (i32.add (i32.const 1374194474)) + (i32.add (i32.const -1239991239)) + (i32.add (i32.const 1732270485)) + (i32.add (i32.const -574213901)) + (i32.add (i32.const 1646379777)) + (i32.add (i32.const -1296135737)) + (i32.add (i32.const 2048204005)) + (i32.add (i32.const -1592235488)) + (i32.add (i32.const 2047438679)) + (i32.add (i32.const 891601724)) + (i32.add (i32.const -1555936544)) + (i32.add (i32.const -1115954962)) + (i32.add (i32.const -2053663143)) + (i32.add (i32.const -1394818742)) + (i32.add (i32.const 1660952996)) + (i32.add (i32.const -1071951751)) + (i32.add (i32.const 1092351885)) + (i32.add (i32.const 549154408)) + (i32.add (i32.const 1383152628)) + (i32.add (i32.const -875341154)) + (i32.add (i32.const 2054128070)) + (i32.add (i32.const 392491169)) + (i32.add (i32.const 157367007)) + (i32.add (i32.const 1706669352)) + (i32.add (i32.const -894275511)) + (i32.add (i32.const -1127795288)) + (i32.add (i32.const 598276035)) + (i32.add (i32.const 1527429062)) + (i32.add (i32.const 1673347673)) + (i32.add (i32.const -1420977840)) + (i32.add (i32.const 891478488)) + (i32.add (i32.const -568784133)) + (i32.add (i32.const -1102183156)) + (i32.add (i32.const -1021531921)) + (i32.add (i32.const 752878007)) + (i32.add (i32.const 1476770663)) + (i32.add (i32.const 1147702232)) + (i32.add (i32.const 110171381)) + (i32.add (i32.const 519532321)) + (i32.add (i32.const 1424738250)) + (i32.add (i32.const 80146405)) + (i32.add (i32.const -1851761720)) + (i32.add (i32.const -1405196606)) + (i32.add (i32.const 817844702)) + (i32.add (i32.const 1285715467)) + (i32.add (i32.const 968918798)) + (i32.add (i32.const -1530690147)) + (i32.add (i32.const -2062793272)) + (i32.add (i32.const 1934809265)) + (i32.add (i32.const 1590072838)) + (i32.add (i32.const -1954137913)) + (i32.add (i32.const 1538011443)) + (i32.add (i32.const 1498179707)) + (i32.add (i32.const 718624898)) + (i32.add (i32.const 1030569130)) + (i32.add (i32.const -1721459636)) + (i32.add (i32.const -2130073259)) + (i32.add (i32.const -200778007)) + (i32.add (i32.const 1259772317)) + (i32.add (i32.const -213254016)) + (i32.add (i32.const -1738943802)) + (i32.add (i32.const 1442609215)) + (i32.add (i32.const 958661534)) + (i32.add (i32.const -2112831309)) + (i32.add (i32.const 1636466628)) + (i32.add (i32.const 13568168)) + (i32.add (i32.const -866812754)) + (i32.add (i32.const -1638780269)) + (i32.add (i32.const -1048187903)) + (i32.add (i32.const -2024688725)) + (i32.add (i32.const 1529978856)) + (i32.add (i32.const 1062134114)) + (i32.add (i32.const 1374255708)) + (i32.add (i32.const -1443427358)) + (i32.add (i32.const -1356370844)) + (i32.add (i32.const 1443877504)) + (i32.add (i32.const -1329812836)) + (i32.add (i32.const -291375259)) + (i32.add (i32.const 1798221874)) + (i32.add (i32.const 786502660)) + (i32.add (i32.const -196591051)) + (i32.add (i32.const 657829402)) + (i32.add (i32.const 1089674059)) + (i32.add (i32.const -570830897)) + (i32.add (i32.const -1509793384)) + (i32.add (i32.const 1197322575)) + (i32.add (i32.const 509337064)) + (i32.add (i32.const 1909012062)) + (i32.add (i32.const -1545724277)) + (i32.add (i32.const 1925973029)) + (i32.add (i32.const 1299262008)) + (i32.add (i32.const -930938255)) + (i32.add (i32.const -2067439492)) + (i32.add (i32.const -658436765)) + (i32.add (i32.const 2006349185)) + (i32.add (i32.const 896380597)) + (i32.add (i32.const 2015351955)) + (i32.add (i32.const -286463547)) + (i32.add (i32.const -526727870)) + (i32.add (i32.const 1156311090)) + (i32.add (i32.const -1594856376)) + (i32.add (i32.const -6357356)) + (i32.add (i32.const -229192725)) + (i32.add (i32.const 2115557395)) + (i32.add (i32.const -1838598646)) + (i32.add (i32.const -922866823)) + (i32.add (i32.const -2107878782)) + (i32.add (i32.const 2075867151)) + (i32.add (i32.const -344327182)) + (i32.add (i32.const -2146215541)) + (i32.add (i32.const -583222202)) + (i32.add (i32.const 1096172413)) + (i32.add (i32.const -1806591814)) + (i32.add (i32.const 1536165679)) + (i32.add (i32.const -912216868)) + (i32.add (i32.const -406776431)) + (i32.add (i32.const -670050979)) + (i32.add (i32.const 318534917)) + (i32.add (i32.const 613032123)) + (i32.add (i32.const 1811789385)) + (i32.add (i32.const -713407029)) + (i32.add (i32.const -42075708)) + (i32.add (i32.const -666806413)) + (i32.add (i32.const -1898824327)) + (i32.add (i32.const -755748510)) + (i32.add (i32.const 566865651)) + (i32.add (i32.const 901003814)) + (i32.add (i32.const -1296980174)) + (i32.add (i32.const -1060893981)) + (i32.add (i32.const 1701735594)) + (i32.add (i32.const 1234494608)) + (i32.add (i32.const -1904219027)) + (i32.add (i32.const -2074208179)) + (i32.add (i32.const -103727736)) + (i32.add (i32.const 52627124)) + (i32.add (i32.const -2097221176)) + (i32.add (i32.const 809956909)) + (i32.add (i32.const -512273995)) + (i32.add (i32.const -907876897)) + (i32.add (i32.const -217897401)) + (i32.add (i32.const 115424770)) + (i32.add (i32.const 1463546062)) + (i32.add (i32.const 761771788)) + (i32.add (i32.const -1415347071)) + (i32.add (i32.const 504659090)) + (i32.add (i32.const -1328288275)) + (i32.add (i32.const 917399547)) + (i32.add (i32.const -1413524610)) + (i32.add (i32.const -1961605134)) + (i32.add (i32.const -471067801)) + (i32.add (i32.const 1784290695)) + (i32.add (i32.const 1100726633)) + (i32.add (i32.const 1418575125)) + (i32.add (i32.const 206334073)) + (i32.add (i32.const 822023231)) + (i32.add (i32.const 1326945805)) + (i32.add (i32.const -671168121)) + (i32.add (i32.const -352715340)) + (i32.add (i32.const 1133060222)) + (i32.add (i32.const 247391636)) + (i32.add (i32.const 2141216026)) + (i32.add (i32.const -1216426213)) + (i32.add (i32.const -1742155558)) + (i32.add (i32.const 891584556)) + (i32.add (i32.const 1874320253)) + (i32.add (i32.const 14765934)) + (i32.add (i32.const 1355931139)) + (i32.add (i32.const 416484665)) + (i32.add (i32.const -1590992214)) + (i32.add (i32.const 1615755943)) + (i32.add (i32.const 1429191879)) + (i32.add (i32.const 1902925890)) + (i32.add (i32.const 673083321)) + (i32.add (i32.const -706640179)) + (i32.add (i32.const -338877405)) + (i32.add (i32.const -655777894)) + (i32.add (i32.const 989351015)) + (i32.add (i32.const -2029917819)) + (i32.add (i32.const 937565901)) + (i32.add (i32.const -258846565)) + (i32.add (i32.const -1841325504)) + (i32.add (i32.const 1308090874)) + (i32.add (i32.const 1236368272)) + (i32.add (i32.const -1605330712)) + (i32.add (i32.const -98503656)) + (i32.add (i32.const 4542997)) + (i32.add (i32.const 1584032013)) + (i32.add (i32.const -751885613)) + (i32.add (i32.const -1898412804)) + (i32.add (i32.const -1875413565)) + (i32.add (i32.const -788059595)) + (i32.add (i32.const -957618818)) + (i32.add (i32.const 1213024681)) + (i32.add (i32.const 838988591)) + (i32.add (i32.const 1544574024)) + (i32.add (i32.const 321878716)) + (i32.add (i32.const 1562483625)) + (i32.add (i32.const -742356454)) + (i32.add (i32.const 2014572928)) + (i32.add (i32.const -1979147234)) + (i32.add (i32.const -542525352)) + (i32.add (i32.const -1404179632)) + (i32.add (i32.const -1774689235)) + (i32.add (i32.const 688636721)) + (i32.add (i32.const 530719741)) + (i32.add (i32.const 551237628)) + (i32.add (i32.const 499795904)) + (i32.add (i32.const 762768124)) + (i32.add (i32.const 11173027)) + (i32.add (i32.const -597392552)) + (i32.add (i32.const -233204281)) + (i32.add (i32.const 1679848621)) + (i32.add (i32.const 314582531)) + (i32.add (i32.const 198442577)) + (i32.add (i32.const -1846647142)) + (i32.add (i32.const -286388764)) + (i32.add (i32.const -642284897)) + (i32.add (i32.const -681071111)) + (i32.add (i32.const -1347903555)) + (i32.add (i32.const -1267234449)) + (i32.add (i32.const 1114820245)) + (i32.add (i32.const 1461008798)) + (i32.add (i32.const 791842627)) + (i32.add (i32.const -704697242)) + (i32.add (i32.const 1025384695)) + (i32.add (i32.const 1495783694)) + (i32.add (i32.const -1099641124)) + (i32.add (i32.const 51883939)) + (i32.add (i32.const -1497418612)) + (i32.add (i32.const -289500896)) + (i32.add (i32.const 1150890505)) + (i32.add (i32.const -1904561989)) + (i32.add (i32.const -305059685)) + (i32.add (i32.const -353545701)) + (i32.add (i32.const -1654046774)) + (i32.add (i32.const -498294672)) + (i32.add (i32.const 427918392)) + (i32.add (i32.const -1570038595)) + (i32.add (i32.const 1761528087)) + (i32.add (i32.const 1937519249)) + (i32.add (i32.const 319531675)) + (i32.add (i32.const 698755870)) + (i32.add (i32.const -1782374147)) + (i32.add (i32.const -1579318011)) + (i32.add (i32.const -2013082339)) + (i32.add (i32.const -772214569)) + (i32.add (i32.const 432572970)) + (i32.add (i32.const 456523832)) + (i32.add (i32.const 433466090)) + (i32.add (i32.const 1883591620)) + (i32.add (i32.const -1396784901)) + (i32.add (i32.const -760424031)) + (i32.add (i32.const 26414890)) + (i32.add (i32.const 1272345405)) + (i32.add (i32.const 117782259)) + (i32.add (i32.const -498115990)) + (i32.add (i32.const 2094048489)) + (i32.add (i32.const 2081916110)) + (i32.add (i32.const -723885610)) + (i32.add (i32.const 115555421)) + (i32.add (i32.const 1833223226)) + (i32.add (i32.const -1380455133)) + (i32.add (i32.const 1615904912)) + (i32.add (i32.const 1259501336)) + (i32.add (i32.const 320012264)) + (i32.add (i32.const 662004667)) + (i32.add (i32.const 76686155)) + (i32.add (i32.const -1459923636)) + (i32.add (i32.const 122782350)) + (i32.add (i32.const -1754486929)) + (i32.add (i32.const -843790342)) + (i32.add (i32.const 2132351479)) + (i32.add (i32.const -910393143)) + (i32.add (i32.const -1477571983)) + (i32.add (i32.const -2145011939)) + (i32.add (i32.const -110442410)) + (i32.add (i32.const -916981067)) + (i32.add (i32.const -1465834627)) + (i32.add (i32.const 1863434715)) + (i32.add (i32.const 1883552046)) + (i32.add (i32.const 1508451699)) + (i32.add (i32.const -758776523)) + (i32.add (i32.const -1635063334)) + (i32.add (i32.const 201903549)) + (i32.add (i32.const 1344592925)) + (i32.add (i32.const 697810023)) + (i32.add (i32.const -727661006)) + (i32.add (i32.const 1864638969)) + (i32.add (i32.const 784672004)) + (i32.add (i32.const -1487812580)) + (i32.add (i32.const -374835112)) + (i32.add (i32.const -1733280434)) + (i32.add (i32.const 1608088765)) + (i32.add (i32.const -541570688)) + (i32.add (i32.const -2072357204)) + (i32.add (i32.const -2034982275)) + (i32.add (i32.const 924066425)) + (i32.add (i32.const -1893264735)) + (i32.add (i32.const 81180113)) + (i32.add (i32.const 848207961)) + (i32.add (i32.const -129461196)) + (i32.add (i32.const -544672353)) + (i32.add (i32.const 366550092)) + (i32.add (i32.const 1007724694)) + (i32.add (i32.const -1574433097)) + (i32.add (i32.const 1542731386)) + (i32.add (i32.const 385391919)) + (i32.add (i32.const 301413571)) + (i32.add (i32.const -363960537)) + (i32.add (i32.const -842475052)) + (i32.add (i32.const -1855954689)) + (i32.add (i32.const 1706829265)) + (i32.add (i32.const -546315867)) + (i32.add (i32.const 1887147054)) + (i32.add (i32.const -1040821747)) + (i32.add (i32.const 1247933037)) + (i32.add (i32.const 995271097)) + (i32.add (i32.const 1591736146)) + (i32.add (i32.const 248668443)) + (i32.add (i32.const 1519748445)) + (i32.add (i32.const 1157982987)) + (i32.add (i32.const -452499237)) + (i32.add (i32.const -34038197)) + (i32.add (i32.const -2067632111)) + (i32.add (i32.const -952650961)) + (i32.add (i32.const 1962659414)) + (i32.add (i32.const -1124158009)) + (i32.add (i32.const -1336409789)) + (i32.add (i32.const -1139255725)) + (i32.add (i32.const 284356888)) + (i32.add (i32.const 429996113)) + (i32.add (i32.const -882462510)) + (i32.add (i32.const -1691321874)) + (i32.add (i32.const 983235553)) + (i32.add (i32.const -1100902898)) + (i32.add (i32.const 607570755)) + (i32.add (i32.const 82767972)) + (i32.add (i32.const 1007829366)) + (i32.add (i32.const 1892420772)) + (i32.add (i32.const -1020185698)) + (i32.add (i32.const 2108161951)) + (i32.add (i32.const -1281178239)) + (i32.add (i32.const 260216117)) + (i32.add (i32.const 470030397)) + (i32.add (i32.const -1155777847)) + (i32.add (i32.const 1405783265)) + (i32.add (i32.const -1260368889)) + (i32.add (i32.const -1914219552)) + (i32.add (i32.const -1353050151)) + (i32.add (i32.const 1831236115)) + (i32.add (i32.const -87461917)) + (i32.add (i32.const 1269877356)) + (i32.add (i32.const 1641889643)) + (i32.add (i32.const 690398861)) + (i32.add (i32.const -1999293567)) + (i32.add (i32.const -1709724671)) + (i32.add (i32.const 1846158473)) + (i32.add (i32.const 736128169)) + (i32.add (i32.const 518609180)) + (i32.add (i32.const 1111661837)) + (i32.add (i32.const -684700650)) + (i32.add (i32.const 398826418)) + (i32.add (i32.const -111349885)) + (i32.add (i32.const -950120744)) + (i32.add (i32.const 171349496)) + (i32.add (i32.const 349029856)) + (i32.add (i32.const -1029283220)) + (i32.add (i32.const 220463495)) + (i32.add (i32.const 1511679363)) + (i32.add (i32.const 356536100)) + (i32.add (i32.const 355610128)) + (i32.add (i32.const -1553442001)) + (i32.add (i32.const 659784102)) + (i32.add (i32.const -61305865)) + (i32.add (i32.const 599206676)) + (i32.add (i32.const -206855195)) + (i32.add (i32.const -1128208132)) + (i32.add (i32.const -1596465613)) + (i32.add (i32.const 16716181)) + (i32.add (i32.const -129398040)) + (i32.add (i32.const -281340628)) + (i32.add (i32.const 1526270916)) + (i32.add (i32.const 1577368282)) + (i32.add (i32.const 419058655)) + (i32.add (i32.const 952686898)) + (i32.add (i32.const -1634994238)) + (i32.add (i32.const -1460640974)) + (i32.add (i32.const -184500754)) + (i32.add (i32.const -503529931)) + (i32.add (i32.const 1246622569)) + (i32.add (i32.const 656933582)) + (i32.add (i32.const -1993343497)) + (i32.add (i32.const 119351240)) + (i32.add (i32.const 1335977373)) + (i32.add (i32.const 1788325116)) + (i32.add (i32.const -1345804303)) + (i32.add (i32.const -1131893881)) + (i32.add (i32.const -374613945)) + (i32.add (i32.const -294400184)) + (i32.add (i32.const 789368195)) + (i32.add (i32.const -1585107513)) + (i32.add (i32.const -25747768)) + (i32.add (i32.const -5642696)) + (i32.add (i32.const 1445421491)) + (i32.add (i32.const -489595085)) + (i32.add (i32.const -1686075932)) + (i32.add (i32.const -1164278237)) + (i32.add (i32.const -1762845883)) + (i32.add (i32.const -437753725)) + (i32.add (i32.const 926074461)) + (i32.add (i32.const 808041911)) + (i32.add (i32.const -1353533719)) + (i32.add (i32.const 596186388)) + (i32.add (i32.const -2588162)) + (i32.add (i32.const 1370374787)) + (i32.add (i32.const -1505373640)) + (i32.add (i32.const 1942925545)) + (i32.add (i32.const 1034207661)) + (i32.add (i32.const -165372265)) + (i32.add (i32.const -1213531699)) + (i32.add (i32.const -1240511598)) + (i32.add (i32.const -848197744)) + (i32.add (i32.const -1714020209)) + (i32.add (i32.const 1947120699)) + (i32.add (i32.const 1758602021)) + (i32.add (i32.const -1918260767)) + (i32.add (i32.const 998938396)) + (i32.add (i32.const 1254589974)) + (i32.add (i32.const -178952500)) + (i32.add (i32.const 316397779)) + (i32.add (i32.const -1692453264)) + (i32.add (i32.const 977715746)) + (i32.add (i32.const -452323403)) + (i32.add (i32.const -839583440)) + (i32.add (i32.const 1321863530)) + (i32.add (i32.const 1225360060)) + (i32.add (i32.const -1903812193)) + (i32.add (i32.const -419143627)) + (i32.add (i32.const -67094479)) + (i32.add (i32.const 825705523)) + (i32.add (i32.const 1964044922)) + (i32.add (i32.const -628750322)) + (i32.add (i32.const 182918661)) + (i32.add (i32.const 688470569)) + (i32.add (i32.const -1937443881)) + (i32.add (i32.const -1023298390)) + (i32.add (i32.const 268387768)) + (i32.add (i32.const -968104398)) + (i32.add (i32.const 1260751238)) + (i32.add (i32.const 1364388880)) + (i32.add (i32.const 2068855580)) + (i32.add (i32.const -86496943)) + (i32.add (i32.const 690734787)) + (i32.add (i32.const -1292477431)) + (i32.add (i32.const -47123037)) + (i32.add (i32.const 1051242195)) + (i32.add (i32.const 2116079431)) + (i32.add (i32.const 362106953)) + (i32.add (i32.const -655288251)) + (i32.add (i32.const -19859192)) + (i32.add (i32.const 1672788396)) + (i32.add (i32.const -658678033)) + (i32.add (i32.const -1760121620)) + (i32.add (i32.const 2003760423)) + (i32.add (i32.const 561435710)) + (i32.add (i32.const -1656040294)) + (i32.add (i32.const 745130404)) + (i32.add (i32.const 1356704034)) + (i32.add (i32.const -1332519612)) + (i32.add (i32.const -178418001)) + (i32.add (i32.const -1219127954)) + (i32.add (i32.const -1820512308)) + (i32.add (i32.const -611388758)) + (i32.add (i32.const 1081934621)) + (i32.add (i32.const 185373836)) + (i32.add (i32.const 1807905736)) + (i32.add (i32.const 1630292363)) + (i32.add (i32.const 1639615244)) + (i32.add (i32.const -1992213874)) + (i32.add (i32.const -451344425)) + (i32.add (i32.const 1214668584)) + (i32.add (i32.const 647319908)) + (i32.add (i32.const -127115834)) + (i32.add (i32.const 925856220)) + (i32.add (i32.const -1484266910)) + (i32.add (i32.const -150381923)) + (i32.add (i32.const 1336022571)) + (i32.add (i32.const -1438181547)) + (i32.add (i32.const -1598817135)) + (i32.add (i32.const -1634358335)) + (i32.add (i32.const 257781661)) + (i32.add (i32.const 1311953282)) + (i32.add (i32.const 872460883)) + (i32.add (i32.const 658999241)) + (i32.add (i32.const 806933974)) + (i32.add (i32.const 798023055)) + (i32.add (i32.const 966032325)) + (i32.add (i32.const -37982609)) + (i32.add (i32.const -1766173383)) + (i32.add (i32.const -215468286)) + (i32.add (i32.const 335543428)) + (i32.add (i32.const -1279624437)) + (i32.add (i32.const 24202546)) + (i32.add (i32.const 172831433)) + (i32.add (i32.const 15921299)) + (i32.add (i32.const -896284097)) + (i32.add (i32.const -1692094522)) + (i32.add (i32.const 1092561399)) + (i32.add (i32.const -825556796)) + (i32.add (i32.const 1095790497)) + (i32.add (i32.const 349955026)) + (i32.add (i32.const 228780543)) + (i32.add (i32.const 877446305)) + (i32.add (i32.const -871271251)) + (i32.add (i32.const -2067781751)) + (i32.add (i32.const 1147596063)) + (i32.add (i32.const -2044096815)) + (i32.add (i32.const 10709674)) + (i32.add (i32.const -454023666)) + (i32.add (i32.const -1582726851)) + (i32.add (i32.const -387243279)) + (i32.add (i32.const -1019886953)) + (i32.add (i32.const 417507569)) + (i32.add (i32.const 1452112578)) + (i32.add (i32.const 732174867)) + (i32.add (i32.const -1444326685)) + (i32.add (i32.const -92393387)) + (i32.add (i32.const 2082146897)) + (i32.add (i32.const -15649456)) + (i32.add (i32.const 962808477)) + (i32.add (i32.const -380703316)) + (i32.add (i32.const 1327891786)) + (i32.add (i32.const -765670363)) + (i32.add (i32.const -851454620)) + (i32.add (i32.const 1741990045)) + (i32.add (i32.const 1723135481)) + (i32.add (i32.const -278196467)) + (i32.add (i32.const -409079590)) + (i32.add (i32.const -1817833536)) + (i32.add (i32.const -2121993015)) + (i32.add (i32.const 2036219079)) + (i32.add (i32.const 651047322)) + (i32.add (i32.const 279590688)) + (i32.add (i32.const 1451205050)) + (i32.add (i32.const -1728943017)) + (i32.add (i32.const 1727265525)) + (i32.add (i32.const 17819991)) + (i32.add (i32.const -341845990)) + (i32.add (i32.const -1786728038)) + (i32.add (i32.const -1785449044)) + (i32.add (i32.const -1164572310)) + (i32.add (i32.const -1145684288)) + (i32.add (i32.const -902265314)) + (i32.add (i32.const -1538026195)) + (i32.add (i32.const 1077173950)) + (i32.add (i32.const 1595249584)) + (i32.add (i32.const 507740432)) + (i32.add (i32.const -683623477)) + (i32.add (i32.const -632394702)) + (i32.add (i32.const -1889441628)) + (i32.add (i32.const -1416183897)) + (i32.add (i32.const 1874549888)) + (i32.add (i32.const 1202929408)) + (i32.add (i32.const -1905477819)) + (i32.add (i32.const -1002423584)) + (i32.add (i32.const 1786809853)) + (i32.add (i32.const -1053833188)) + (i32.add (i32.const -1655797922)) + (i32.add (i32.const 899360231)) + (i32.add (i32.const -1881568073)) + (i32.add (i32.const -1656437212)) + (i32.add (i32.const -1767978879)) + (i32.add (i32.const 2002199271)) + (i32.add (i32.const -908792936)) + (i32.add (i32.const -1791175367)) + (i32.add (i32.const 1700588196)) + (i32.add (i32.const -1807165200)) + (i32.add (i32.const 1308707473)) + (i32.add (i32.const 570072538)) + (i32.add (i32.const -220988691)) + (i32.add (i32.const 1666643115)) + (i32.add (i32.const -438318658)) + (i32.add (i32.const 1450048650)) + (i32.add (i32.const -1414142237)) + (i32.add (i32.const -1775407164)) + (i32.add (i32.const -1862900775)) + (i32.add (i32.const 1648502972)) + (i32.add (i32.const 39693334)) + (i32.add (i32.const 207145779)) + (i32.add (i32.const -2077158155)) + (i32.add (i32.const 1298589111)) + (i32.add (i32.const 560277224)) + (i32.add (i32.const 49467565)) + (i32.add (i32.const 1365441390)) + (i32.add (i32.const 1207497531)) + (i32.add (i32.const -1368257758)) + (i32.add (i32.const -1784615344)) + (i32.add (i32.const -1431159916)) + (i32.add (i32.const -327128926)) + (i32.add (i32.const -1248246229)) + (i32.add (i32.const -1956687848)) + (i32.add (i32.const -1477373391)) + (i32.add (i32.const 413197749)) + (i32.add (i32.const 1695771121)) + (i32.add (i32.const 1429569283)) + (i32.add (i32.const 1760063735)) + (i32.add (i32.const 77026107)) + (i32.add (i32.const 2021727632)) + (i32.add (i32.const -622628722)) + (i32.add (i32.const 14415033)) + (i32.add (i32.const 1931151479)) + (i32.add (i32.const 531627426)) + (i32.add (i32.const -1998421703)) + (i32.add (i32.const -1264373354)) + (i32.add (i32.const 119159534)) + (i32.add (i32.const -1937733521)) + (i32.add (i32.const -718399379)) + (i32.add (i32.const 342407213)) + (i32.add (i32.const 822753769)) + (i32.add (i32.const -1485248108)) + (i32.add (i32.const 1671672761)) + (i32.add (i32.const 372130365)) + (i32.add (i32.const -1744288753)) + (i32.add (i32.const 1785831939)) + (i32.add (i32.const 1745688159)) + (i32.add (i32.const -1938252766)) + (i32.add (i32.const 1846217906)) + (i32.add (i32.const 574975117)) + (i32.add (i32.const 1859273020)) + (i32.add (i32.const 82621895)) + (i32.add (i32.const 25517618)) + (i32.add (i32.const -1772067109)) + (i32.add (i32.const 1721035080)) + (i32.add (i32.const 616700356)) + (i32.add (i32.const -287353625)) + (i32.add (i32.const -327748053)) + (i32.add (i32.const -1426438834)) + (i32.add (i32.const -1027010842)) + (i32.add (i32.const -1389503736)) + (i32.add (i32.const -870056466)) + (i32.add (i32.const 82431507)) + (i32.add (i32.const 472164027)) + (i32.add (i32.const -1498520625)) + (i32.add (i32.const 1439127561)) + (i32.add (i32.const -1135846378)) + (i32.add (i32.const -873188852)) + (i32.add (i32.const 223578458)) + (i32.add (i32.const 32125290)) + (i32.add (i32.const -887175985)) + (i32.add (i32.const 1738084786)) + (i32.add (i32.const -1948516403)) + (i32.add (i32.const 305531536)) + (i32.add (i32.const -471861659)) + (i32.add (i32.const 1157133642)) + (i32.add (i32.const 1640004327)) + (i32.add (i32.const -319721567)) + (i32.add (i32.const 753669383)) + (i32.add (i32.const 945633095)) + (i32.add (i32.const 1842136037)) + (i32.add (i32.const -2141693102)) + (i32.add (i32.const -2109007389)) + (i32.add (i32.const -1359155899)) + (i32.add (i32.const 1394057730)) + (i32.add (i32.const -327169853)) + (i32.add (i32.const 1978061091)) + (i32.add (i32.const -1658041182)) + (i32.add (i32.const 1617622630)) + (i32.add (i32.const 915416649)) + (i32.add (i32.const 1780683115)) + (i32.add (i32.const 1172158322)) + (i32.add (i32.const -220234436)) + (i32.add (i32.const -2096524918)) + (i32.add (i32.const -459398093)) + (i32.add (i32.const 260147416)) + (i32.add (i32.const -304580379)) + (i32.add (i32.const -335211052)) + (i32.add (i32.const -507030601)) + (i32.add (i32.const 1841385146)) + (i32.add (i32.const 546134701)) + (i32.add (i32.const -1547951174)) + (i32.add (i32.const 1623249873)) + (i32.add (i32.const 1526307067)) + (i32.add (i32.const 100886524)) + (i32.add (i32.const -1904269911)) + (i32.add (i32.const -434383857)) + (i32.add (i32.const 108679089)) + (i32.add (i32.const 243646473)) + (i32.add (i32.const 185223042)) + (i32.add (i32.const -1362763877)) + (i32.add (i32.const 701705407)) + (i32.add (i32.const -152838334)) + (i32.add (i32.const 26238271)) + (i32.add (i32.const 1702661505)) + (i32.add (i32.const 1023600422)) + (i32.add (i32.const -1805991737)) + (i32.add (i32.const -591835595)) + (i32.add (i32.const 357394723)) + (i32.add (i32.const -59646481)) + (i32.add (i32.const 1585526406)) + (i32.add (i32.const -354246788)) + (i32.add (i32.const -1828647388)) + (i32.add (i32.const -1941122304)) + (i32.add (i32.const -1641199759)) + (i32.add (i32.const -1705027950)) + (i32.add (i32.const 1982069573)) + (i32.add (i32.const -760676431)) + (i32.add (i32.const -272702592)) + (i32.add (i32.const -548514477)) + (i32.add (i32.const -4518930)) + (i32.add (i32.const 1109914716)) + (i32.add (i32.const -974922908)) + (i32.add (i32.const 1505786882)) + (i32.add (i32.const 1108560631)) + (i32.add (i32.const -1498023092)) + (i32.add (i32.const 1216257370)) + (i32.add (i32.const -2035348868)) + (i32.add (i32.const -743093797)) + (i32.add (i32.const -2107661597)) + (i32.add (i32.const -886109868)) + (i32.add (i32.const -1790484613)) + (i32.add (i32.const 834041307)) + (i32.add (i32.const 875698229)) + (i32.add (i32.const -1659670014)) + (i32.add (i32.const 851037913)) + (i32.add (i32.const 260215662)) + (i32.add (i32.const -1632318271)) + (i32.add (i32.const -2036419041)) + (i32.add (i32.const -1982271611)) + (i32.add (i32.const -507509131)) + (i32.add (i32.const 1209283531)) + (i32.add (i32.const 358700374)) + (i32.add (i32.const -1101137184)) + (i32.add (i32.const -310604401)) + (i32.add (i32.const -128599801)) + (i32.add (i32.const 969683248)) + (i32.add (i32.const -551764626)) + (i32.add (i32.const -313672705)) + (i32.add (i32.const 401834688)) + (i32.add (i32.const -528686071)) + (i32.add (i32.const 625601226)) + (i32.add (i32.const -1063887977)) + (i32.add (i32.const -1009584081)) + (i32.add (i32.const 1364029345)) + (i32.add (i32.const -282120613)) + (i32.add (i32.const -302458038)) + (i32.add (i32.const -1973523868)) + (i32.add (i32.const 180192584)) + (i32.add (i32.const 1833369190)) + (i32.add (i32.const -1961334217)) + (i32.add (i32.const 741774906)) + (i32.add (i32.const -635684206)) + (i32.add (i32.const 333656429)) + (i32.add (i32.const -1252510899)) + (i32.add (i32.const -521088233)) + (i32.add (i32.const 194662626)) + (i32.add (i32.const 787651521)) + (i32.add (i32.const -1261951869)) + (i32.add (i32.const -673302248)) + (i32.add (i32.const 181281248)) + (i32.add (i32.const 149033311)) + (i32.add (i32.const 1304219505)) + (i32.add (i32.const -1592498505)) + (i32.add (i32.const -1240312370)) + (i32.add (i32.const -194219960)) + (i32.add (i32.const 253940153)) + (i32.add (i32.const 774010771)) + (i32.add (i32.const -1492190218)) + (i32.add (i32.const 307408181)) + (i32.add (i32.const -1680295495)) + (i32.add (i32.const -1860467381)) + (i32.add (i32.const 677838309)) + (i32.add (i32.const -2016393334)) + (i32.add (i32.const 374678173)) + (i32.add (i32.const 2096365412)) + (i32.add (i32.const -1474147821)) + (i32.add (i32.const -503012733)) + (i32.add (i32.const 1274047547)) + (i32.add (i32.const 1086276867)) + (i32.add (i32.const -2092943674)) + (i32.add (i32.const 127271547)) + (i32.add (i32.const -739236973)) + (i32.add (i32.const 965458873)) + (i32.add (i32.const 1935175004)) + (i32.add (i32.const -1729397075)) + (i32.add (i32.const 130958717)) + (i32.add (i32.const -624101866)) + (i32.add (i32.const 627669981)) + (i32.add (i32.const -691085463)) + (i32.add (i32.const -1808860016)) + (i32.add (i32.const 2140151832)) + (i32.add (i32.const 1479860564)) + (i32.add (i32.const 1060519004)) + (i32.add (i32.const 1173943471)) + (i32.add (i32.const -839017366)) + (i32.add (i32.const -1761508419)) + (i32.add (i32.const -1496260796)) + (i32.add (i32.const -2118538127)) + (i32.add (i32.const 770383753)) + (i32.add (i32.const 330529552)) + (i32.add (i32.const -1240589899)) + (i32.add (i32.const -127992247)) + (i32.add (i32.const 1432331973)) + (i32.add (i32.const 1982892411)) + (i32.add (i32.const -466454687)) + (i32.add (i32.const -692253343)) + (i32.add (i32.const -1994314362)) + (i32.add (i32.const 259072249)) + (i32.add (i32.const 850677126)) + (i32.add (i32.const 904153334)) + (i32.add (i32.const -323882820)) + (i32.add (i32.const -316678684)) + (i32.add (i32.const -1735258705)) + (i32.add (i32.const -1420705680)) + (i32.add (i32.const -31930325)) + (i32.add (i32.const -863952553)) + (i32.add (i32.const 210588198)) + (i32.add (i32.const 2118864465)) + (i32.add (i32.const 852705014)) + (i32.add (i32.const -741849938)) + (i32.add (i32.const -2042979518)) + (i32.add (i32.const -2042850226)) + (i32.add (i32.const -211783957)) + (i32.add (i32.const 837669846)) + (i32.add (i32.const 851856436)) + (i32.add (i32.const 952901111)) + (i32.add (i32.const 1980727302)) + (i32.add (i32.const -913166139)) + (i32.add (i32.const -75907039)) + (i32.add (i32.const -1223274395)) + (i32.add (i32.const -250728685)) + (i32.add (i32.const 1053839969)) + (i32.add (i32.const 1374345541)) + (i32.add (i32.const -1314789689)) + (i32.add (i32.const -2137328322)) + (i32.add (i32.const 646047554)) + (i32.add (i32.const 1716402660)) + (i32.add (i32.const 860804420)) + (i32.add (i32.const -1025348226)) + (i32.add (i32.const -1696745797)) + (i32.add (i32.const -1301075541)) + (i32.add (i32.const -587764838)) + (i32.add (i32.const -1199210284)) + (i32.add (i32.const 1928966429)) + (i32.add (i32.const -1947179642)) + (i32.add (i32.const -391324291)) + (i32.add (i32.const 1991003491)) + (i32.add (i32.const -1328328191)) + (i32.add (i32.const 1385640575)) + (i32.add (i32.const 1516183769)) + (i32.add (i32.const -63776633)) + (i32.add (i32.const -1521941404)) + (i32.add (i32.const 1024131)) + (i32.add (i32.const -1310957476)) + (i32.add (i32.const -799005311)) + (i32.add (i32.const -2013562273)) + (i32.add (i32.const 48832989)) + (i32.add (i32.const 1338643416)) + (i32.add (i32.const 622153067)) + (i32.add (i32.const -270429667)) + (i32.add (i32.const 1072633596)) + (i32.add (i32.const -464090434)) + (i32.add (i32.const 2003869582)) + (i32.add (i32.const 1189746855)) + (i32.add (i32.const -1284101530)) + (i32.add (i32.const -1652400805)) + (i32.add (i32.const -943307104)) + (i32.add (i32.const 977729477)) + (i32.add (i32.const -1644019622)) + (i32.add (i32.const -68677483)) + (i32.add (i32.const -96658108)) + (i32.add (i32.const -1148074770)) + (i32.add (i32.const -1819440358)) + (i32.add (i32.const 1691894120)) + (i32.add (i32.const -1943036800)) + (i32.add (i32.const 344508826)) + (i32.add (i32.const -1160155328)) + (i32.add (i32.const 521159606)) + (i32.add (i32.const 991361398)) + (i32.add (i32.const -632968006)) + (i32.add (i32.const -272363661)) + (i32.add (i32.const -44532684)) + (i32.add (i32.const 1331525764)) + (i32.add (i32.const 273788055)) + (i32.add (i32.const 839034787)) + (i32.add (i32.const -822685506)) + (i32.add (i32.const 708700850)) + (i32.add (i32.const -713263022)) + (i32.add (i32.const 1472671044)) + (i32.add (i32.const -740988351)) + (i32.add (i32.const -1346796697)) + (i32.add (i32.const -379250856)) + (i32.add (i32.const -1413202647)) + (i32.add (i32.const -517355259)) + (i32.add (i32.const -387415500)) + (i32.add (i32.const 22440603)) + (i32.add (i32.const -334098642)) + (i32.add (i32.const -1784278301)) + (i32.add (i32.const -2038055253)) + (i32.add (i32.const 1167350803)) + (i32.add (i32.const -1462855265)) + (i32.add (i32.const -51647464)) + (i32.add (i32.const 350312150)) + (i32.add (i32.const 846783150)) + (i32.add (i32.const -1319553530)) + (i32.add (i32.const 1435808487)) + (i32.add (i32.const 347101260)) + (i32.add (i32.const 1476226038)) + (i32.add (i32.const -932959529)) + (i32.add (i32.const -1265021909)) + (i32.add (i32.const 1753215820)) + (i32.add (i32.const -1108359127)) + (i32.add (i32.const 957444608)) + (i32.add (i32.const 2082745382)) + (i32.add (i32.const -33152470)) + (i32.add (i32.const -794881610)) + (i32.add (i32.const 2020165698)) + (i32.add (i32.const 446882110)) + (i32.add (i32.const -1337874948)) + (i32.add (i32.const 1031189914)) + (i32.add (i32.const -1312774511)) + (i32.add (i32.const -167402315)) + (i32.add (i32.const 875970755)) + (i32.add (i32.const 236089901)) + (i32.add (i32.const 1184209848)) + (i32.add (i32.const 575775839)) + (i32.add (i32.const 681624634)) + (i32.add (i32.const 107420048)) + (i32.add (i32.const -112317290)) + (i32.add (i32.const 1953333875)) + (i32.add (i32.const 1553705844)) + (i32.add (i32.const -795691864)) + (i32.add (i32.const -2073440233)) + (i32.add (i32.const 2116205406)) + (i32.add (i32.const 2002824195)) + (i32.add (i32.const 1140892791)) + (i32.add (i32.const 950331645)) + (i32.add (i32.const 734981286)) + (i32.add (i32.const -1245313383)) + (i32.add (i32.const 576075434)) + (i32.add (i32.const 1621329580)) + (i32.add (i32.const -1945034449)) + (i32.add (i32.const 1242120049)) + (i32.add (i32.const -1222337830)) + (i32.add (i32.const -1404805516)) + (i32.add (i32.const -150763173)) + (i32.add (i32.const 1516746139)) + (i32.add (i32.const -526728547)) + (i32.add (i32.const 98153135)) + (i32.add (i32.const -484284326)) + (i32.add (i32.const -621962018)) + (i32.add (i32.const -759453136)) + (i32.add (i32.const -423149592)) + (i32.add (i32.const -878298145)) + (i32.add (i32.const -2063572260)) + (i32.add (i32.const 2083629406)) + (i32.add (i32.const 312353947)) + (i32.add (i32.const -179821939)) + (i32.add (i32.const -322580170)) + (i32.add (i32.const 633270576)) + (i32.add (i32.const -450206594)) + (i32.add (i32.const 1647733678)) + (i32.add (i32.const 1803176784)) + (i32.add (i32.const -1397353530)) + (i32.add (i32.const 318779089)) + (i32.add (i32.const 1344697636)) + (i32.add (i32.const -873695685)) + (i32.add (i32.const -1540112117)) + (i32.add (i32.const 918546175)) + (i32.add (i32.const -660482778)) + (i32.add (i32.const 571705634)) + (i32.add (i32.const -1159975723)) + (i32.add (i32.const -1018331392)) + (i32.add (i32.const -396889417)) + (i32.add (i32.const 1573024142)) + (i32.add (i32.const 703436244)) + (i32.add (i32.const 380671607)) + (i32.add (i32.const -197911900)) + (i32.add (i32.const -2107606417)) + (i32.add (i32.const 193689135)) + (i32.add (i32.const 1773322793)) + (i32.add (i32.const 1950870128)) + (i32.add (i32.const 2120232315)) + (i32.add (i32.const 1295735799)) + (i32.add (i32.const -1345491759)) + (i32.add (i32.const 1249810474)) + (i32.add (i32.const -1167086487)) + (i32.add (i32.const 558054839)) + (i32.add (i32.const 3637668)) + (i32.add (i32.const -1184772362)) + (i32.add (i32.const -894072950)) + (i32.add (i32.const -1802174915)) + (i32.add (i32.const 1122422975)) + (i32.add (i32.const 1106203218)) + (i32.add (i32.const 1756004609)) + (i32.add (i32.const 1474819706)) + (i32.add (i32.const -672631642)) + (i32.add (i32.const 658398106)) + (i32.add (i32.const 361879339)) + (i32.add (i32.const 1170690155)) + (i32.add (i32.const -1879981220)) + (i32.add (i32.const -1723103242)) + (i32.add (i32.const 1489454533)) + (i32.add (i32.const -989914784)) + (i32.add (i32.const 370861475)) + (i32.add (i32.const -1400801948)) + (i32.add (i32.const 1930964815)) + (i32.add (i32.const 1905140601)) + (i32.add (i32.const 1826662854)) + (i32.add (i32.const -28186165)) + (i32.add (i32.const -1788398720)) + (i32.add (i32.const 317190441)) + (i32.add (i32.const 425360288)) + (i32.add (i32.const -1758435509)) + (i32.add (i32.const -1367923479)) + (i32.add (i32.const 1900328463)) + (i32.add (i32.const 1744698423)) + (i32.add (i32.const -1705201612)) + (i32.add (i32.const 32366414)) + (i32.add (i32.const 1958155929)) + (i32.add (i32.const -1593957305)) + (i32.add (i32.const 1336236705)) + (i32.add (i32.const -1105392428)) + (i32.add (i32.const 1626009680)) + (i32.add (i32.const 292989183)) + (i32.add (i32.const -1508957922)) + (i32.add (i32.const -1456777772)) + (i32.add (i32.const -1210667870)) + (i32.add (i32.const -1224921306)) + (i32.add (i32.const -846252865)) + (i32.add (i32.const -305605086)) + (i32.add (i32.const 900435286)) + (i32.add (i32.const -1981520411)) + (i32.add (i32.const -1562336247)) + (i32.add (i32.const -1058740826)) + (i32.add (i32.const 1599322459)) + (i32.add (i32.const 761795411)) + (i32.add (i32.const 1762400650)) + (i32.add (i32.const -594273741)) + (i32.add (i32.const 641931361)) + (i32.add (i32.const 11719496)) + (i32.add (i32.const 431488170)) + (i32.add (i32.const 76259338)) + (i32.add (i32.const -2037653489)) + (i32.add (i32.const 1686070150)) + (i32.add (i32.const 2075441649)) + (i32.add (i32.const -1096603677)) + (i32.add (i32.const 705813546)) + (i32.add (i32.const 600868438)) + (i32.add (i32.const -646413007)) + (i32.add (i32.const 1439133870)) + (i32.add (i32.const 503611795)) + (i32.add (i32.const 1998922769)) + (i32.add (i32.const 801565619)) + (i32.add (i32.const -1451270383)) + (i32.add (i32.const -1296151427)) + (i32.add (i32.const 1874545574)) + (i32.add (i32.const -1586924464)) + (i32.add (i32.const -148727981)) + (i32.add (i32.const 1038224525)) + (i32.add (i32.const -926366157)) + (i32.add (i32.const 1473815505)) + (i32.add (i32.const -1371192192)) + (i32.add (i32.const -481998316)) + (i32.add (i32.const -784795580)) + (i32.add (i32.const -1008170358)) + (i32.add (i32.const -892404993)) + (i32.add (i32.const 1075953779)) + (i32.add (i32.const 505372771)) + (i32.add (i32.const -345073793)) + (i32.add (i32.const -1620183644)) + (i32.add (i32.const -1757817973)) + (i32.add (i32.const -1657059672)) + (i32.add (i32.const 62447466)) + (i32.add (i32.const -219970502)) + (i32.add (i32.const 1084317516)) + (i32.add (i32.const -1354399788)) + (i32.add (i32.const -728999437)) + (i32.add (i32.const -1768593586)) + (i32.add (i32.const -1252933472)) + (i32.add (i32.const 350962569)) + (i32.add (i32.const -822350921)) + (i32.add (i32.const 1852980108)) + (i32.add (i32.const -1105614562)) + (i32.add (i32.const 415806346)) + (i32.add (i32.const 65954670)) + (i32.add (i32.const 623592797)) + (i32.add (i32.const -1242078962)) + (i32.add (i32.const -810321391)) + (i32.add (i32.const -1702906210)) + (i32.add (i32.const 543277282)) + (i32.add (i32.const 2140864357)) + (i32.add (i32.const -1258290834)) + (i32.add (i32.const 669931319)) + (i32.add (i32.const -1038026892)) + (i32.add (i32.const 206763418)) + (i32.add (i32.const 606617860)) + (i32.add (i32.const -2145048165)) + (i32.add (i32.const -2058319766)) + (i32.add (i32.const -1335527828)) + (i32.add (i32.const -2091818699)) + (i32.add (i32.const 1824247592)) + (i32.add (i32.const 522306148)) + (i32.add (i32.const 1333614088)) + (i32.add (i32.const -90505018)) + (i32.add (i32.const 1970066342)) + (i32.add (i32.const -307068148)) + (i32.add (i32.const 1025943552)) + (i32.add (i32.const -238867050)) + (i32.add (i32.const -1085137314)) + (i32.add (i32.const -221907113)) + (i32.add (i32.const 2080130313)) + (i32.add (i32.const -260519961)) + (i32.add (i32.const -1148132819)) + (i32.add (i32.const -643711523)) + (i32.add (i32.const -791571286)) + (i32.add (i32.const -2086170140)) + (i32.add (i32.const 1311931148)) + (i32.add (i32.const -1203176953)) + (i32.add (i32.const -1083168661)) + (i32.add (i32.const -1945942299)) + (i32.add (i32.const -1573200114)) + (i32.add (i32.const -1277355404)) + (i32.add (i32.const -1884670113)) + (i32.add (i32.const 1610609177)) + (i32.add (i32.const 1141985713)) + (i32.add (i32.const -1920859272)) + (i32.add (i32.const 1370270414)) + (i32.add (i32.const 1132292096)) + (i32.add (i32.const -1451383636)) + (i32.add (i32.const 525448986)) + (i32.add (i32.const 200903660)) + (i32.add (i32.const -1626388747)) + (i32.add (i32.const -1756244526)) + (i32.add (i32.const -186696337)) + (i32.add (i32.const 919516285)) + (i32.add (i32.const -199848839)) + (i32.add (i32.const -945923045)) + (i32.add (i32.const 85521598)) + (i32.add (i32.const -638987285)) + (i32.add (i32.const 334823679)) + (i32.add (i32.const -147432773)) + (i32.add (i32.const 1221975654)) + (i32.add (i32.const -380441593)) + (i32.add (i32.const 221019372)) + (i32.add (i32.const -1432079395)) + (i32.add (i32.const 1030003638)) + (i32.add (i32.const 1643236066)) + (i32.add (i32.const -266936667)) + (i32.add (i32.const 796861171)) + (i32.add (i32.const 2014149688)) + (i32.add (i32.const 1383908792)) + (i32.add (i32.const -337505508)) + (i32.add (i32.const 477731697)) + (i32.add (i32.const -422505178)) + (i32.add (i32.const 1123111612)) + (i32.add (i32.const -951943624)) + (i32.add (i32.const -1727905505)) + (i32.add (i32.const -256727428)) + (i32.add (i32.const 193808175)) + (i32.add (i32.const 643339491)) + (i32.add (i32.const 400438161)) + (i32.add (i32.const -2068462368)) + (i32.add (i32.const -757152582)) + (i32.add (i32.const 1537220480)) + (i32.add (i32.const -1227795756)) + (i32.add (i32.const 1868495229)) + (i32.add (i32.const -2024814425)) + (i32.add (i32.const -1116869061)) + (i32.add (i32.const 1165152398)) + (i32.add (i32.const 170403421)) + (i32.add (i32.const -1629795317)) + (i32.add (i32.const 1851460825)) + (i32.add (i32.const 1750675141)) + (i32.add (i32.const -1849405708)) + (i32.add (i32.const 1702968535)) + (i32.add (i32.const 1658350716)) + (i32.add (i32.const 1832900520)) + (i32.add (i32.const 1281981005)) + (i32.add (i32.const 1654085783)) + (i32.add (i32.const 433792331)) + (i32.add (i32.const -183420223)) + (i32.add (i32.const -1351877655)) + (i32.add (i32.const 322517123)) + (i32.add (i32.const -1090659590)) + (i32.add (i32.const -1834308390)) + (i32.add (i32.const -672816755)) + (i32.add (i32.const -109727822)) + (i32.add (i32.const 752201506)) + (i32.add (i32.const 296077614)) + (i32.add (i32.const 1748975065)) + (i32.add (i32.const 609203131)) + (i32.add (i32.const 1069530594)) + (i32.add (i32.const -1333011319)) + (i32.add (i32.const -2075233930)) + (i32.add (i32.const 950303567)) + (i32.add (i32.const 17849284)) + (i32.add (i32.const -485659021)) + (i32.add (i32.const -215812599)) + (i32.add (i32.const -420749026)) + (i32.add (i32.const 1930468575)) + (i32.add (i32.const -2021313455)) + (i32.add (i32.const 1913830876)) + (i32.add (i32.const 2064265192)) + (i32.add (i32.const -107387796)) + (i32.add (i32.const -1079157772)) + (i32.add (i32.const 1469596876)) + (i32.add (i32.const 2079933989)) + (i32.add (i32.const -624849431)) + (i32.add (i32.const -2106105929)) + (i32.add (i32.const -625844283)) + (i32.add (i32.const -1821691204)) + (i32.add (i32.const 1923179761)) + (i32.add (i32.const 1612941855)) + (i32.add (i32.const 1991199721)) + (i32.add (i32.const 729276909)) + (i32.add (i32.const -2056399722)) + (i32.add (i32.const 500109033)) + (i32.add (i32.const -1911248620)) + (i32.add (i32.const 464145003)) + (i32.add (i32.const -430371157)) + (i32.add (i32.const -1783376014)) + (i32.add (i32.const -1702511216)) + (i32.add (i32.const 2005656569)) + (i32.add (i32.const 494587587)) + (i32.add (i32.const 1478147502)) + (i32.add (i32.const 495574630)) + (i32.add (i32.const -964091613)) + (i32.add (i32.const -1826453948)) + (i32.add (i32.const -1135173934)) + (i32.add (i32.const 1865753955)) + (i32.add (i32.const -1534001601)) + (i32.add (i32.const 14360917)) + (i32.add (i32.const -1554644109)) + (i32.add (i32.const -1949022422)) + (i32.add (i32.const -1734862850)) + (i32.add (i32.const 165322097)) + (i32.add (i32.const 1509713981)) + (i32.add (i32.const 1736035045)) + (i32.add (i32.const 1748416964)) + (i32.add (i32.const 823768863)) + (i32.add (i32.const -599008433)) + (i32.add (i32.const -1839332726)) + (i32.add (i32.const 1962007933)) + (i32.add (i32.const 204495938)) + (i32.add (i32.const 423204432)) + (i32.add (i32.const -1162959581)) + (i32.add (i32.const 1859440358)) + (i32.add (i32.const 2103719024)) + (i32.add (i32.const 1362457541)) + (i32.add (i32.const 2108292394)) + (i32.add (i32.const -1059503171)) + (i32.add (i32.const 523086086)) + (i32.add (i32.const -1766573176)) + (i32.add (i32.const -1473390046)) + (i32.add (i32.const 104835375)) + (i32.add (i32.const 946615972)) + (i32.add (i32.const 2064271237)) + (i32.add (i32.const -452520800)) + (i32.add (i32.const 1849741018)) + (i32.add (i32.const 1728380957)) + (i32.add (i32.const 160272220)) + (i32.add (i32.const 411293591)) + (i32.add (i32.const -236641643)) + (i32.add (i32.const -2087717717)) + (i32.add (i32.const 456744024)) + (i32.add (i32.const -1295957912)) + (i32.add (i32.const -1668240534)) + (i32.add (i32.const -708913315)) + (i32.add (i32.const 1411691394)) + (i32.add (i32.const 1604941166)) + (i32.add (i32.const -1985039137)) + (i32.add (i32.const 1504875102)) + (i32.add (i32.const -1455850301)) + (i32.add (i32.const 350886535)) + (i32.add (i32.const -283017005)) + (i32.add (i32.const -1219117342)) + (i32.add (i32.const -1210199410)) + (i32.add (i32.const -451912842)) + (i32.add (i32.const 574329801)) + (i32.add (i32.const -946519887)) + (i32.add (i32.const -185861327)) + (i32.add (i32.const 1712335271)) + (i32.add (i32.const 971117939)) + (i32.add (i32.const 120847530)) + (i32.add (i32.const -324472474)) + (i32.add (i32.const 471494612)) + (i32.add (i32.const -309528803)) + (i32.add (i32.const 31861514)) + (i32.add (i32.const -1454710580)) + (i32.add (i32.const 74671575)) + (i32.add (i32.const 1670572926)) + (i32.add (i32.const -1791591415)) + (i32.add (i32.const -1512939419)) + (i32.add (i32.const -1409266090)) + (i32.add (i32.const -923353478)) + (i32.add (i32.const -1194569673)) + (i32.add (i32.const -659205973)) + (i32.add (i32.const 1259002725)) + (i32.add (i32.const -1724750858)) + (i32.add (i32.const 1100627592)) + (i32.add (i32.const -889655603)) + (i32.add (i32.const 1530063317)) + (i32.add (i32.const 2045363228)) + (i32.add (i32.const -354535638)) + (i32.add (i32.const 1103362057)) + (i32.add (i32.const 1510947286)) + (i32.add (i32.const -1300502702)) + (i32.add (i32.const -1626801426)) + (i32.add (i32.const -895736901)) + (i32.add (i32.const 606065209)) + (i32.add (i32.const 1372733966)) + (i32.add (i32.const 1024435731)) + (i32.add (i32.const 445956815)) + (i32.add (i32.const 1298274268)) + (i32.add (i32.const 592279790)) + (i32.add (i32.const -21959165)) + (i32.add (i32.const 247300219)) + (i32.add (i32.const 531790084)) + (i32.add (i32.const -51475098)) + (i32.add (i32.const 1579856939)) + (i32.add (i32.const -1972970675)) + (i32.add (i32.const -1589735540)) + (i32.add (i32.const -1326433950)) + (i32.add (i32.const 1901015332)) + (i32.add (i32.const -370553766)) + (i32.add (i32.const -918499690)) + (i32.add (i32.const -1030963484)) + (i32.add (i32.const 1225410391)) + (i32.add (i32.const 1647076844)) + (i32.add (i32.const 538717949)) + (i32.add (i32.const 48350576)) + (i32.add (i32.const -1179201809)) + (i32.add (i32.const 479334187)) + (i32.add (i32.const 1018385749)) + (i32.add (i32.const 985549036)) + (i32.add (i32.const -1224395543)) + (i32.add (i32.const -2134522482)) + (i32.add (i32.const 248344968)) + (i32.add (i32.const 53777821)) + (i32.add (i32.const 2009409005)) + (i32.add (i32.const -1839601322)) + (i32.add (i32.const 1523167040)) + (i32.add (i32.const 1156648985)) + (i32.add (i32.const 1729081433)) + (i32.add (i32.const -1319004936)) + (i32.add (i32.const 502737318)) + (i32.add (i32.const 2027614142)) + (i32.add (i32.const -1248877142)) + (i32.add (i32.const -2044773010)) + (i32.add (i32.const 210173448)) + (i32.add (i32.const -2131554470)) + (i32.add (i32.const -1815107723)) + (i32.add (i32.const 772532612)) + (i32.add (i32.const -1947643047)) + (i32.add (i32.const -605614864)) + (i32.add (i32.const 834720996)) + (i32.add (i32.const 1710775345)) + (i32.add (i32.const -1022246707)) + (i32.add (i32.const 1152317617)) + (i32.add (i32.const -2102732245)) + (i32.add (i32.const 757325737)) + (i32.add (i32.const 1821890184)) + (i32.add (i32.const 1915369409)) + (i32.add (i32.const 1082228659)) + (i32.add (i32.const -520923106)) + (i32.add (i32.const -1112541048)) + (i32.add (i32.const 1115560261)) + (i32.add (i32.const -1891439244)) + (i32.add (i32.const 539684416)) + (i32.add (i32.const -669046976)) + (i32.add (i32.const -153380155)) + (i32.add (i32.const -1293898954)) + (i32.add (i32.const -100319253)) + (i32.add (i32.const -407044147)) + (i32.add (i32.const -474034584)) + (i32.add (i32.const 51266435)) + (i32.add (i32.const 1744845279)) + (i32.add (i32.const -1916139753)) + (i32.add (i32.const -2084680819)) + (i32.add (i32.const 715089019)) + (i32.add (i32.const -1040219198)) + (i32.add (i32.const 1152162106)) + (i32.add (i32.const -684079989)) + (i32.add (i32.const -838034672)) + (i32.add (i32.const -1709336778)) + (i32.add (i32.const -2133636851)) + (i32.add (i32.const -562592676)) + (i32.add (i32.const -1449047076)) + (i32.add (i32.const -1434740517)) + (i32.add (i32.const -1541789217)) + (i32.add (i32.const -1363841488)) + (i32.add (i32.const 382866571)) + (i32.add (i32.const -437030461)) + (i32.add (i32.const 1532323189)) + (i32.add (i32.const -942741499)) + (i32.add (i32.const 297739813)) + (i32.add (i32.const 2075409955)) + (i32.add (i32.const -33348676)) + (i32.add (i32.const -907618023)) + (i32.add (i32.const 855285734)) + (i32.add (i32.const 1251935503)) + (i32.add (i32.const 913354300)) + (i32.add (i32.const 489289462)) + (i32.add (i32.const 964292251)) + (i32.add (i32.const -1445225083)) + (i32.add (i32.const -1708128069)) + (i32.add (i32.const 1549995649)) + (i32.add (i32.const -2035441775)) + (i32.add (i32.const 449177396)) + (i32.add (i32.const 573755880)) + (i32.add (i32.const 1263329735)) + (i32.add (i32.const -1053781384)) + (i32.add (i32.const 170759863)) + (i32.add (i32.const 1591451661)) + (i32.add (i32.const -108572652)) + (i32.add (i32.const 1371872609)) + (i32.add (i32.const -1895472674)) + (i32.add (i32.const 132589214)) + (i32.add (i32.const -1291011087)) + (i32.add (i32.const 446721801)) + (i32.add (i32.const -92386837)) + (i32.add (i32.const 934744765)) + (i32.add (i32.const 2146019298)) + (i32.add (i32.const -1862266643)) + (i32.add (i32.const 1173690918)) + (i32.add (i32.const -1799386516)) + (i32.add (i32.const -1057591708)) + (i32.add (i32.const 1663147151)) + (i32.add (i32.const -1730304356)) + (i32.add (i32.const 1350299770)) + (i32.add (i32.const 656624282)) + (i32.add (i32.const 951061921)) + (i32.add (i32.const -1928672379)) + (i32.add (i32.const -1533447691)) + (i32.add (i32.const 104122649)) + (i32.add (i32.const 264085380)) + (i32.add (i32.const 1278378748)) + (i32.add (i32.const -448470985)) + (i32.add (i32.const 410396717)) + (i32.add (i32.const 1411969437)) + (i32.add (i32.const 708194563)) + (i32.add (i32.const -599642140)) + (i32.add (i32.const -1434940298)) + (i32.add (i32.const -1122511986)) + (i32.add (i32.const -515071022)) + (i32.add (i32.const -602891373)) + (i32.add (i32.const 234580790)) + (i32.add (i32.const -1215010089)) + (i32.add (i32.const 1806425540)) + (i32.add (i32.const 1416505388)) + (i32.add (i32.const -1303865110)) + (i32.add (i32.const -577726039)) + (i32.add (i32.const 1596385752)) + (i32.add (i32.const -1346394939)) + (i32.add (i32.const 1994653780)) + (i32.add (i32.const -936103214)) + (i32.add (i32.const -1329306102)) + (i32.add (i32.const -13098456)) + (i32.add (i32.const -416773420)) + (i32.add (i32.const -940853930)) + (i32.add (i32.const -1010546328)) + (i32.add (i32.const 1981108133)) + (i32.add (i32.const -624984252)) + (i32.add (i32.const -2015182246)) + (i32.add (i32.const 258153241)) + (i32.add (i32.const -1343226871)) + (i32.add (i32.const 1643020377)) + (i32.add (i32.const -563468486)) + (i32.add (i32.const -666930560)) + (i32.add (i32.const -1675830900)) + (i32.add (i32.const -1988305193)) + (i32.add (i32.const 273841519)) + (i32.add (i32.const -1446059451)) + (i32.add (i32.const 6067094)) + (i32.add (i32.const 192078356)) + (i32.add (i32.const 463772951)) + (i32.add (i32.const -1352556194)) + (i32.add (i32.const -2112661763)) + (i32.add (i32.const -666264828)) + (i32.add (i32.const 2098401886)) + (i32.add (i32.const 996724807)) + (i32.add (i32.const -1701675591)) + (i32.add (i32.const -551145886)) + (i32.add (i32.const 375824730)) + (i32.add (i32.const 1733077995)) + (i32.add (i32.const 1579133792)) + (i32.add (i32.const 584218957)) + (i32.add (i32.const -840716164)) + (i32.add (i32.const 347487890)) + (i32.add (i32.const 1196935581)) + (i32.add (i32.const -1408696359)) + (i32.add (i32.const -1646992942)) + (i32.add (i32.const -1810022763)) + (i32.add (i32.const 150139919)) + (i32.add (i32.const -917668304)) + (i32.add (i32.const 1202876082)) + (i32.add (i32.const -691073117)) + (i32.add (i32.const 1855526517)) + (i32.add (i32.const -215455021)) + (i32.add (i32.const -1787274045)) + (i32.add (i32.const -5671520)) + (i32.add (i32.const -519103894)) + (i32.add (i32.const 283351463)) + (i32.add (i32.const -1105054766)) + (i32.add (i32.const 2021952561)) + (i32.add (i32.const 286416647)) + (i32.add (i32.const -1926719129)) + (i32.add (i32.const 2114181280)) + (i32.add (i32.const 2122443213)) + (i32.add (i32.const -204870568)) + (i32.add (i32.const -1788654414)) + (i32.add (i32.const 1918853115)) + (i32.add (i32.const 1837273260)) + (i32.add (i32.const -1534711362)) + (i32.add (i32.const -231518552)) + (i32.add (i32.const -1355080150)) + (i32.add (i32.const -1707368220)) + (i32.add (i32.const 681508606)) + (i32.add (i32.const 569930245)) + (i32.add (i32.const -1016646184)) + (i32.add (i32.const -1127219339)) + (i32.add (i32.const -274434907)) + (i32.add (i32.const 2002933711)) + (i32.add (i32.const 1943286151)) + (i32.add (i32.const 1585899174)) + (i32.add (i32.const 1896972412)) + (i32.add (i32.const -156128757)) + (i32.add (i32.const -1497462660)) + (i32.add (i32.const 615821767)) + (i32.add (i32.const -899231510)) + (i32.add (i32.const -876252006)) + (i32.add (i32.const -750502036)) + (i32.add (i32.const -778983260)) + (i32.add (i32.const -1049068547)) + (i32.add (i32.const -2062863709)) + (i32.add (i32.const 484610483)) + (i32.add (i32.const 238665373)) + (i32.add (i32.const -2957387)) + (i32.add (i32.const 1554787126)) + (i32.add (i32.const 2083704881)) + (i32.add (i32.const -1365369134)) + (i32.add (i32.const -677098661)) + (i32.add (i32.const 1561601830)) + (i32.add (i32.const -1394840835)) + (i32.add (i32.const -360040081)) + (i32.add (i32.const 11375964)) + (i32.add (i32.const -991562976)) + (i32.add (i32.const 901236202)) + (i32.add (i32.const 1920701306)) + (i32.add (i32.const -1577774568)) + (i32.add (i32.const 1071212575)) + (i32.add (i32.const 396421120)) + (i32.add (i32.const 1401128271)) + (i32.add (i32.const -1646693098)) + (i32.add (i32.const -1954197011)) + (i32.add (i32.const 1256238652)) + (i32.add (i32.const 305574163)) + (i32.add (i32.const 1580649630)) + (i32.add (i32.const 796074484)) + (i32.add (i32.const -1991996560)) + (i32.add (i32.const -138207737)) + (i32.add (i32.const 2071667616)) + (i32.add (i32.const -1332047247)) + (i32.add (i32.const 658174558)) + (i32.add (i32.const 1058290461)) + (i32.add (i32.const -261188236)) + (i32.add (i32.const -374504275)) + (i32.add (i32.const -870927161)) + (i32.add (i32.const -859881486)) + (i32.add (i32.const 1252460032)) + (i32.add (i32.const -944654298)) + (i32.add (i32.const 1179577409)) + (i32.add (i32.const -139066222)) + (i32.add (i32.const 65033775)) + (i32.add (i32.const 1616498288)) + (i32.add (i32.const 1038078300)) + (i32.add (i32.const -138473101)) + (i32.add (i32.const 1695181133)) + (i32.add (i32.const 1725952458)) + (i32.add (i32.const -57044662)) + (i32.add (i32.const 482647039)) + (i32.add (i32.const 840124724)) + (i32.add (i32.const 300787615)) + (i32.add (i32.const 1247909371)) + (i32.add (i32.const -1251032420)) + (i32.add (i32.const 873871266)) + (i32.add (i32.const 181771820)) + (i32.add (i32.const -1219130371)) + (i32.add (i32.const -1229619212)) + (i32.add (i32.const 61271713)) + (i32.add (i32.const -1052414267)) + (i32.add (i32.const 934205992)) + (i32.add (i32.const -1201756993)) + (i32.add (i32.const -1101809504)) + (i32.add (i32.const 685739986)) + (i32.add (i32.const -406405394)) + (i32.add (i32.const -583424705)) + (i32.add (i32.const -1968640968)) + (i32.add (i32.const 889635723)) + (i32.add (i32.const -1845596152)) + (i32.add (i32.const 1147837233)) + (i32.add (i32.const 630797266)) + (i32.add (i32.const -65104244)) + (i32.add (i32.const -216055436)) + (i32.add (i32.const 1935182990)) + (i32.add (i32.const -1831706843)) + (i32.add (i32.const 48550989)) + (i32.add (i32.const 223354702)) + (i32.add (i32.const 2134095371)) + (i32.add (i32.const -785927229)) + (i32.add (i32.const 797171880)) + (i32.add (i32.const -1760731894)) + (i32.add (i32.const -155881044)) + (i32.add (i32.const 128042495)) + (i32.add (i32.const -605115625)) + (i32.add (i32.const 1521482062)) + (i32.add (i32.const 899238669)) + (i32.add (i32.const -826719661)) + (i32.add (i32.const 1079760628)) + (i32.add (i32.const -1253644126)) + (i32.add (i32.const 490529184)) + (i32.add (i32.const -2143429464)) + (i32.add (i32.const -1308119715)) + (i32.add (i32.const 1619594466)) + (i32.add (i32.const -1868787148)) + (i32.add (i32.const -1915907681)) + (i32.add (i32.const -2017160619)) + (i32.add (i32.const 1261129774)) + (i32.add (i32.const 649926258)) + (i32.add (i32.const 69576653)) + (i32.add (i32.const 1832738191)) + (i32.add (i32.const -898969505)) + (i32.add (i32.const 1941966958)) + (i32.add (i32.const -1441644228)) + (i32.add (i32.const 1184367395)) + (i32.add (i32.const 1462555953)) + (i32.add (i32.const -920916174)) + (i32.add (i32.const -1141308005)) + (i32.add (i32.const 1500685398)) + (i32.add (i32.const -1683175036)) + (i32.add (i32.const 780292978)) + (i32.add (i32.const -1221607128)) + (i32.add (i32.const 1625832194)) + (i32.add (i32.const -331456339)) + (i32.add (i32.const -430481886)) + (i32.add (i32.const 1333000922)) + (i32.add (i32.const 1749626268)) + (i32.add (i32.const 1656619896)) + (i32.add (i32.const -1568580709)) + (i32.add (i32.const 1184278367)) + (i32.add (i32.const -1512271082)) + (i32.add (i32.const 948666615)) + (i32.add (i32.const -1044833950)) + (i32.add (i32.const -1137248858)) + (i32.add (i32.const 1123730289)) + (i32.add (i32.const 1166432438)) + (i32.add (i32.const -1103615479)) + (i32.add (i32.const -1128762671)) + (i32.add (i32.const 2052123442)) + (i32.add (i32.const -1904637968)) + (i32.add (i32.const -1296068669)) + (i32.add (i32.const 1478949231)) + (i32.add (i32.const -865985161)) + (i32.add (i32.const 998226578)) + (i32.add (i32.const 110142194)) + (i32.add (i32.const -46672406)) + (i32.add (i32.const 199110902)) + (i32.add (i32.const 1756570804)) + (i32.add (i32.const -423116363)) + (i32.add (i32.const 2110652095)) + (i32.add (i32.const 325194548)) + (i32.add (i32.const 1332112162)) + (i32.add (i32.const 133340472)) + (i32.add (i32.const -124454362)) + (i32.add (i32.const 2057510062)) + (i32.add (i32.const -988986109)) + (i32.add (i32.const 1603500113)) + (i32.add (i32.const -1846657280)) + (i32.add (i32.const 876985589)) + (i32.add (i32.const -2059790899)) + (i32.add (i32.const -930595774)) + (i32.add (i32.const -2047248864)) + (i32.add (i32.const 1331545434)) + (i32.add (i32.const 95829084)) + (i32.add (i32.const -739923580)) + (i32.add (i32.const -1701696849)) + (i32.add (i32.const 1038378593)) + (i32.add (i32.const -473885297)) + (i32.add (i32.const 1082849131)) + (i32.add (i32.const -225245806)) + (i32.add (i32.const 400231598)) + (i32.add (i32.const 1806311845)) + (i32.add (i32.const 1558491812)) + (i32.add (i32.const -1640418404)) + (i32.add (i32.const -2105523631)) + (i32.add (i32.const -1321217003)) + (i32.add (i32.const -1219901894)) + (i32.add (i32.const -931777529)) + (i32.add (i32.const 12555081)) + (i32.add (i32.const 1464184732)) + (i32.add (i32.const -1695517505)) + (i32.add (i32.const -855743140)) + (i32.add (i32.const 1886661199)) + (i32.add (i32.const 678259856)) + (i32.add (i32.const 671751447)) + (i32.add (i32.const -1927354675)) + (i32.add (i32.const 474406264)) + (i32.add (i32.const 937839601)) + (i32.add (i32.const -1097417380)) + (i32.add (i32.const 1825190693)) + (i32.add (i32.const 655086929)) + (i32.add (i32.const -312006777)) + (i32.add (i32.const 1624802059)) + (i32.add (i32.const 1860610825)) + (i32.add (i32.const 1207206496)) + (i32.add (i32.const 1320240970)) + (i32.add (i32.const 704660311)) + (i32.add (i32.const 1947187836)) + (i32.add (i32.const -1112541208)) + (i32.add (i32.const -394801754)) + (i32.add (i32.const 376591434)) + (i32.add (i32.const 1579483796)) + (i32.add (i32.const -148965934)) + (i32.add (i32.const 49424718)) + (i32.add (i32.const -656918028)) + (i32.add (i32.const 866841790)) + (i32.add (i32.const 1971826057)) + (i32.add (i32.const 48136287)) + (i32.add (i32.const -1035051067)) + (i32.add (i32.const 1879531515)) + (i32.add (i32.const -1956023282)) + (i32.add (i32.const -710546136)) + (i32.add (i32.const -258359241)) + (i32.add (i32.const 1225429060)) + (i32.add (i32.const 1818133223)) + (i32.add (i32.const 1948519412)) + (i32.add (i32.const 1423950772)) + (i32.add (i32.const 1653979274)) + (i32.add (i32.const -1822358224)) + (i32.add (i32.const -2470034)) + (i32.add (i32.const 788920495)) + (i32.add (i32.const -1538405895)) + (i32.add (i32.const -1185746363)) + (i32.add (i32.const -799903121)) + (i32.add (i32.const -730064375)) + (i32.add (i32.const 853433145)) + (i32.add (i32.const -406089597)) + (i32.add (i32.const -1577168945)) + (i32.add (i32.const 1969385472)) + (i32.add (i32.const 1190463219)) + (i32.add (i32.const -1695066130)) + (i32.add (i32.const -1681416969)) + (i32.add (i32.const 778791849)) + (i32.add (i32.const -695912730)) + (i32.add (i32.const -577778630)) + (i32.add (i32.const -1155505847)) + (i32.add (i32.const -45862561)) + (i32.add (i32.const 1351592274)) + (i32.add (i32.const -1781290640)) + (i32.add (i32.const 932566145)) + (i32.add (i32.const 848127849)) + (i32.add (i32.const 1450669660)) + (i32.add (i32.const 449936123)) + (i32.add (i32.const -118187628)) + (i32.add (i32.const 1120527942)) + (i32.add (i32.const 1048782423)) + (i32.add (i32.const 1645312668)) + (i32.add (i32.const 779726212)) + (i32.add (i32.const -1261583232)) + (i32.add (i32.const -1340941988)) + (i32.add (i32.const 406265504)) + (i32.add (i32.const 262985171)) + (i32.add (i32.const 1204228463)) + (i32.add (i32.const 896098481)) + (i32.add (i32.const -47697429)) + (i32.add (i32.const -195809447)) + (i32.add (i32.const -291004746)) + (i32.add (i32.const -565057315)) + (i32.add (i32.const 1707868338)) + (i32.add (i32.const -441920371)) + (i32.add (i32.const 1294138715)) + (i32.add (i32.const -1781696733)) + (i32.add (i32.const 2024804131)) + (i32.add (i32.const -1316093541)) + (i32.add (i32.const 754436451)) + (i32.add (i32.const 862643301)) + (i32.add (i32.const 1210774178)) + (i32.add (i32.const 89243555)) + (i32.add (i32.const -1793250285)) + (i32.add (i32.const 58754186)) + (i32.add (i32.const -994632225)) + (i32.add (i32.const -1428828001)) + (i32.add (i32.const -1117987167)) + (i32.add (i32.const -726708211)) + (i32.add (i32.const -248034440)) + (i32.add (i32.const -1225718286)) + (i32.add (i32.const 1903940039)) + (i32.add (i32.const 1198390406)) + (i32.add (i32.const 200461955)) + (i32.add (i32.const 53916754)) + (i32.add (i32.const 495900435)) + (i32.add (i32.const 1376967829)) + (i32.add (i32.const 1549474140)) + (i32.add (i32.const -1341779636)) + (i32.add (i32.const -926191720)) + (i32.add (i32.const -995443548)) + (i32.add (i32.const 1691199173)) + (i32.add (i32.const 851813204)) + (i32.add (i32.const -2049514989)) + (i32.add (i32.const -1894357037)) + (i32.add (i32.const 1230185807)) + (i32.add (i32.const 1881918406)) + (i32.add (i32.const 1451226673)) + (i32.add (i32.const 1241157269)) + (i32.add (i32.const -897070653)) + (i32.add (i32.const -1279497276)) + (i32.add (i32.const 1159887556)) + (i32.add (i32.const 1857821018)) + (i32.add (i32.const -1078597039)) + (i32.add (i32.const -104648483)) + (i32.add (i32.const -793294215)) + (i32.add (i32.const 551287528)) + (i32.add (i32.const 1993844248)) + (i32.add (i32.const 493963162)) + (i32.add (i32.const 687590297)) + (i32.add (i32.const -537574160)) + (i32.add (i32.const -18287881)) + (i32.add (i32.const 1581227097)) + (i32.add (i32.const 1180444070)) + (i32.add (i32.const 75064010)) + (i32.add (i32.const 17727605)) + (i32.add (i32.const -469394903)) + (i32.add (i32.const 260532185)) + (i32.add (i32.const 1808686699)) + (i32.add (i32.const 244853134)) + (i32.add (i32.const 113059743)) + (i32.add (i32.const -883253715)) + (i32.add (i32.const -1991681380)) + (i32.add (i32.const 1519432663)) + (i32.add (i32.const 1246925495)) + (i32.add (i32.const 1164332522)) + (i32.add (i32.const -1681998620)) + (i32.add (i32.const -641794959)) + (i32.add (i32.const 1498546199)) + (i32.add (i32.const 1852301713)) + (i32.add (i32.const -659144157)) + (i32.add (i32.const 1265558172)) + (i32.add (i32.const -1971943226)) + (i32.add (i32.const 2062091290)) + (i32.add (i32.const 1434337820)) + (i32.add (i32.const 1591733036)) + (i32.add (i32.const 1030536499)) + (i32.add (i32.const 1623391103)) + (i32.add (i32.const 1584094870)) + (i32.add (i32.const 1679563407)) + (i32.add (i32.const -1218366178)) + (i32.add (i32.const -1210889952)) + (i32.add (i32.const 136773499)) + (i32.add (i32.const 1059461142)) + (i32.add (i32.const 1473176335)) + (i32.add (i32.const 1783998240)) + (i32.add (i32.const 1177649519)) + (i32.add (i32.const -322526204)) + (i32.add (i32.const 764501185)) + (i32.add (i32.const 314206278)) + (i32.add (i32.const -998978225)) + (i32.add (i32.const 1291838586)) + (i32.add (i32.const -962966587)) + (i32.add (i32.const -355760517)) + (i32.add (i32.const -1937601034)) + (i32.add (i32.const -22821074)) + (i32.add (i32.const 1402627072)) + (i32.add (i32.const 2074705287)) + (i32.add (i32.const 989029770)) + (i32.add (i32.const -815647491)) + (i32.add (i32.const 774662731)) + (i32.add (i32.const -788445715)) + (i32.add (i32.const -1492833659)) + (i32.add (i32.const -744666776)) + (i32.add (i32.const 688062084)) + (i32.add (i32.const -1935283551)) + (i32.add (i32.const -526110848)) + (i32.add (i32.const 1650824588)) + (i32.add (i32.const 98165902)) + (i32.add (i32.const 96346569)) + (i32.add (i32.const 702914055)) + (i32.add (i32.const 303847121)) + (i32.add (i32.const 601791187)) + (i32.add (i32.const -345945260)) + (i32.add (i32.const 1409266648)) + (i32.add (i32.const 1478373159)) + (i32.add (i32.const -480011793)) + (i32.add (i32.const -2128157284)) + (i32.add (i32.const -259013234)) + (i32.add (i32.const 482855771)) + (i32.add (i32.const -1760255404)) + (i32.add (i32.const 2107924039)) + (i32.add (i32.const 260994301)) + (i32.add (i32.const -594473276)) + (i32.add (i32.const 1090340576)) + (i32.add (i32.const -1022240192)) + (i32.add (i32.const 1433652199)) + (i32.add (i32.const 1618260766)) + (i32.add (i32.const 53149359)) + (i32.add (i32.const 761856346)) + (i32.add (i32.const -1737421334)) + (i32.add (i32.const 883240996)) + (i32.add (i32.const -1540287869)) + (i32.add (i32.const -522274878)) + (i32.add (i32.const 834821205)) + (i32.add (i32.const -618364748)) + (i32.add (i32.const -1753024143)) + (i32.add (i32.const 2007441135)) + (i32.add (i32.const -1076489584)) + (i32.add (i32.const -1207205307)) + (i32.add (i32.const -1271514411)) + (i32.add (i32.const -297272480)) + (i32.add (i32.const 1185541629)) + (i32.add (i32.const -1721180072)) + (i32.add (i32.const -1462243980)) + (i32.add (i32.const 1661451380)) + (i32.add (i32.const -76287825)) + (i32.add (i32.const 818611078)) + (i32.add (i32.const 1423919200)) + (i32.add (i32.const -800368523)) + (i32.add (i32.const 1518088520)) + (i32.add (i32.const -1388334091)) + (i32.add (i32.const 61396886)) + (i32.add (i32.const -956664962)) + (i32.add (i32.const 738990262)) + (i32.add (i32.const 455954033)) + (i32.add (i32.const 260399126)) + (i32.add (i32.const 1976034598)) + (i32.add (i32.const -1944288575)) + (i32.add (i32.const 1310302981)) + (i32.add (i32.const 435363313)) + (i32.add (i32.const -878353261)) + (i32.add (i32.const 1174140612)) + (i32.add (i32.const -900077894)) + (i32.add (i32.const 1825235465)) + (i32.add (i32.const -1280956657)) + (i32.add (i32.const -2038450508)) + (i32.add (i32.const -841802116)) + (i32.add (i32.const 1583604704)) + (i32.add (i32.const -954972846)) + (i32.add (i32.const -1343794999)) + (i32.add (i32.const 1901421517)) + (i32.add (i32.const 1160117992)) + (i32.add (i32.const -1120908896)) + (i32.add (i32.const -74837596)) + (i32.add (i32.const 57333292)) + (i32.add (i32.const -1651472797)) + (i32.add (i32.const -346198114)) + (i32.add (i32.const 1131150250)) + (i32.add (i32.const -93813559)) + (i32.add (i32.const 1607446085)) + (i32.add (i32.const 1697384989)) + (i32.add (i32.const -107838361)) + (i32.add (i32.const -502443288)) + (i32.add (i32.const 1442604116)) + (i32.add (i32.const 1417690319)) + (i32.add (i32.const 11536338)) + (i32.add (i32.const -1466544063)) + (i32.add (i32.const 182012892)) + (i32.add (i32.const 1088641828)) + (i32.add (i32.const 930079621)) + (i32.add (i32.const 1089473239)) + (i32.add (i32.const 486628599)) + (i32.add (i32.const -1984679812)) + (i32.add (i32.const -989290623)) + (i32.add (i32.const -506423731)) + (i32.add (i32.const -278885392)) + (i32.add (i32.const 1395987003)) + (i32.add (i32.const 1399776761)) + (i32.add (i32.const -506322535)) + (i32.add (i32.const 757049983)) + (i32.add (i32.const 1601358700)) + (i32.add (i32.const -1453653852)) + (i32.add (i32.const 1199570593)) + (i32.add (i32.const 478464562)) + (i32.add (i32.const -974088220)) + (i32.add (i32.const 1646148538)) + (i32.add (i32.const -1434926391)) + (i32.add (i32.const 797714757)) + (i32.add (i32.const 740165679)) + (i32.add (i32.const 1799703863)) + (i32.add (i32.const 133959780)) + (i32.add (i32.const -418089331)) + (i32.add (i32.const 539993646)) + (i32.add (i32.const -84100698)) + (i32.add (i32.const 1054411443)) + (i32.add (i32.const -1015023179)) + (i32.add (i32.const -1911288050)) + (i32.add (i32.const 1026293723)) + (i32.add (i32.const -2084272457)) + (i32.add (i32.const 687404754)) + (i32.add (i32.const -52819156)) + (i32.add (i32.const 55567568)) + (i32.add (i32.const 1666117747)) + (i32.add (i32.const 309595147)) + (i32.add (i32.const 140745517)) + (i32.add (i32.const 310787619)) + (i32.add (i32.const -1474830741)) + (i32.add (i32.const 1223702117)) + (i32.add (i32.const 1670179282)) + (i32.add (i32.const -2133935334)) + (i32.add (i32.const -1452810978)) + (i32.add (i32.const 1213322001)) + (i32.add (i32.const -1912143243)) + (i32.add (i32.const 1603315282)) + (i32.add (i32.const 1814095775)) + (i32.add (i32.const 1929742787)) + (i32.add (i32.const -1037783982)) + (i32.add (i32.const -714031643)) + (i32.add (i32.const 645762552)) + (i32.add (i32.const -202231195)) + (i32.add (i32.const 265707803)) + (i32.add (i32.const -283012993)) + (i32.add (i32.const 2002135300)) + (i32.add (i32.const 1219855309)) + (i32.add (i32.const -308225646)) + (i32.add (i32.const 558099472)) + (i32.add (i32.const 799607608)) + (i32.add (i32.const 306321422)) + (i32.add (i32.const 1217929435)) + (i32.add (i32.const 1084498948)) + (i32.add (i32.const 881375328)) + (i32.add (i32.const 1639060162)) + (i32.add (i32.const -882082875)) + (i32.add (i32.const -394815259)) + (i32.add (i32.const -2135209699)) + (i32.add (i32.const -1834689412)) + (i32.add (i32.const 544012965)) + (i32.add (i32.const 1557681081)) + (i32.add (i32.const 954742828)) + (i32.add (i32.const -1404797742)) + (i32.add (i32.const 947643107)) + (i32.add (i32.const 140128831)) + (i32.add (i32.const 603706495)) + (i32.add (i32.const -602758516)) + (i32.add (i32.const -1309127081)) + (i32.add (i32.const 1231616094)) + (i32.add (i32.const 310918179)) + (i32.add (i32.const -105840379)) + (i32.add (i32.const 1669166799)) + (i32.add (i32.const 471170704)) + (i32.add (i32.const 1942478741)) + (i32.add (i32.const 89771980)) + (i32.add (i32.const 380009191)) + (i32.add (i32.const 964892445)) + (i32.add (i32.const 1919139396)) + (i32.add (i32.const 2074584874)) + (i32.add (i32.const -812220635)) + (i32.add (i32.const 2021086519)) + (i32.add (i32.const 1869074533)) + (i32.add (i32.const 153369650)) + (i32.add (i32.const -1600868403)) + (i32.add (i32.const -1825114199)) + (i32.add (i32.const 1545744963)) + (i32.add (i32.const 1456117663)) + (i32.add (i32.const -1746772382)) + (i32.add (i32.const -1072512897)) + (i32.add (i32.const -1996265967)) + (i32.add (i32.const -1927294041)) + (i32.add (i32.const 567253248)) + (i32.add (i32.const -1354854146)) + (i32.add (i32.const 325269513)) + (i32.add (i32.const -878775092)) + (i32.add (i32.const -678020514)) + (i32.add (i32.const -923117083)) + (i32.add (i32.const 482980500)) + (i32.add (i32.const 1866804702)) + (i32.add (i32.const 1270791841)) + (i32.add (i32.const 918860029)) + (i32.add (i32.const -1706853165)) + (i32.add (i32.const 37366057)) + (i32.add (i32.const 1466951972)) + (i32.add (i32.const 1579449908)) + (i32.add (i32.const 1372049573)) + (i32.add (i32.const 876735596)) + (i32.add (i32.const -141417256)) + (i32.add (i32.const -1038065143)) + (i32.add (i32.const 1849439814)) + (i32.add (i32.const 1091932916)) + (i32.add (i32.const -74641425)) + (i32.add (i32.const 694413752)) + (i32.add (i32.const 395323386)) + (i32.add (i32.const 1000694369)) + (i32.add (i32.const -86856256)) + (i32.add (i32.const 992032974)) + (i32.add (i32.const 690025726)) + (i32.add (i32.const 1771120900)) + (i32.add (i32.const 98259495)) + (i32.add (i32.const -1727892956)) + (i32.add (i32.const -436623125)) + (i32.add (i32.const -331445917)) + (i32.add (i32.const -658868636)) + (i32.add (i32.const -373550987)) + (i32.add (i32.const -1529735965)) + (i32.add (i32.const -850622729)) + (i32.add (i32.const -1497398181)) + (i32.add (i32.const 659069096)) + (i32.add (i32.const 1363803114)) + (i32.add (i32.const -1101807628)) + (i32.add (i32.const -1339039200)) + (i32.add (i32.const 2026632352)) + (i32.add (i32.const -1891169422)) + (i32.add (i32.const 870520513)) + (i32.add (i32.const -1960630286)) + (i32.add (i32.const 411741687)) + (i32.add (i32.const -58375833)) + (i32.add (i32.const 1541456503)) + (i32.add (i32.const -557989205)) + (i32.add (i32.const -980361073)) + (i32.add (i32.const 706513131)) + (i32.add (i32.const -2093460016)) + (i32.add (i32.const 120675976)) + (i32.add (i32.const -866337663)) + (i32.add (i32.const -587944252)) + (i32.add (i32.const -1016396707)) + (i32.add (i32.const 2019226602)) + (i32.add (i32.const 1299732869)) + (i32.add (i32.const 1350449041)) + (i32.add (i32.const 1076370464)) + (i32.add (i32.const 2135209690)) + (i32.add (i32.const -1767855828)) + (i32.add (i32.const 209871856)) + (i32.add (i32.const -464456096)) + (i32.add (i32.const 857200426)) + (i32.add (i32.const -603373807)) + (i32.add (i32.const 1166762669)) + (i32.add (i32.const -28275057)) + (i32.add (i32.const 131536902)) + (i32.add (i32.const 922883859)) + (i32.add (i32.const 1642859210)) + (i32.add (i32.const 403222445)) + (i32.add (i32.const -2098578902)) + (i32.add (i32.const -482145069)) + (i32.add (i32.const -856269911)) + (i32.add (i32.const -727401640)) + (i32.add (i32.const 1944331715)) + (i32.add (i32.const 1412777928)) + (i32.add (i32.const -1474125042)) + (i32.add (i32.const 1046407104)) + (i32.add (i32.const 1972857012)) + (i32.add (i32.const 1781838147)) + (i32.add (i32.const 853964375)) + (i32.add (i32.const 431942441)) + (i32.add (i32.const -710853334)) + (i32.add (i32.const -381093478)) + (i32.add (i32.const 404739729)) + (i32.add (i32.const -1801487556)) + (i32.add (i32.const 1166047764)) + (i32.add (i32.const -1591874079)) + (i32.add (i32.const -26024010)) + (i32.add (i32.const -1562384974)) + (i32.add (i32.const -1027356038)) + (i32.add (i32.const -359205959)) + (i32.add (i32.const -63072761)) + (i32.add (i32.const 2040895504)) + (i32.add (i32.const -311355716)) + (i32.add (i32.const 362307615)) + (i32.add (i32.const -802466788)) + (i32.add (i32.const -1292720991)) + (i32.add (i32.const 2001976920)) + (i32.add (i32.const 451685649)) + (i32.add (i32.const 1155904571)) + (i32.add (i32.const -1609699542)) + (i32.add (i32.const -401922706)) + (i32.add (i32.const -1954565444)) + (i32.add (i32.const -2100470302)) + (i32.add (i32.const 755031545)) + (i32.add (i32.const 1354804049)) + (i32.add (i32.const -1410749182)) + (i32.add (i32.const 1508721230)) + (i32.add (i32.const 970516181)) + (i32.add (i32.const -203527598)) + (i32.add (i32.const 82461854)) + (i32.add (i32.const 444077018)) + (i32.add (i32.const 875681428)) + (i32.add (i32.const -979190334)) + (i32.add (i32.const 641574670)) + (i32.add (i32.const 10933356)) + (i32.add (i32.const -530286663)) + (i32.add (i32.const 1586523554)) + (i32.add (i32.const -683987399)) + (i32.add (i32.const 1317120893)) + (i32.add (i32.const 375810227)) + (i32.add (i32.const -2026233678)) + (i32.add (i32.const -875376125)) + (i32.add (i32.const -790768884)) + (i32.add (i32.const 1577842157)) + (i32.add (i32.const -444273877)) + (i32.add (i32.const -2110713354)) + (i32.add (i32.const -1886239819)) + (i32.add (i32.const -1367207177)) + (i32.add (i32.const -1125947760)) + (i32.add (i32.const 2123308474)) + (i32.add (i32.const -735220149)) + (i32.add (i32.const 1056224580)) + (i32.add (i32.const -1568172492)) + (i32.add (i32.const -1584354137)) + (i32.add (i32.const 4207088)) + (i32.add (i32.const 951892314)) + (i32.add (i32.const -59144154)) + (i32.add (i32.const 974843424)) + (i32.add (i32.const -1952409109)) + (i32.add (i32.const -1193147290)) + (i32.add (i32.const 469073692)) + (i32.add (i32.const 161726620)) + (i32.add (i32.const 846742629)) + (i32.add (i32.const 820984656)) + (i32.add (i32.const -1119522864)) + (i32.add (i32.const -627513672)) + (i32.add (i32.const 411957975)) + (i32.add (i32.const 1407628542)) + (i32.add (i32.const 427696518)) + (i32.add (i32.const 1341692359)) + (i32.add (i32.const -1495717402)) + (i32.add (i32.const 617165290)) + (i32.add (i32.const 2136140358)) + (i32.add (i32.const -171618198)) + (i32.add (i32.const 1330639253)) + (i32.add (i32.const -1641881865)) + (i32.add (i32.const 2011971177)) + (i32.add (i32.const 1692711442)) + (i32.add (i32.const 1573486376)) + (i32.add (i32.const 1988491124)) + (i32.add (i32.const 1412276665)) + (i32.add (i32.const -1293469296)) + (i32.add (i32.const -441067151)) + (i32.add (i32.const -1458963016)) + (i32.add (i32.const -122904545)) + (i32.add (i32.const 2003579105)) + (i32.add (i32.const 382988528)) + (i32.add (i32.const -2103722942)) + (i32.add (i32.const 768734672)) + (i32.add (i32.const 1444963746)) + (i32.add (i32.const 403265980)) + (i32.add (i32.const 1735690602)) + (i32.add (i32.const -569415387)) + (i32.add (i32.const 1137156236)) + (i32.add (i32.const -466761711)) + (i32.add (i32.const 128314894)) + (i32.add (i32.const -924930104)) + (i32.add (i32.const 446123072)) + (i32.add (i32.const -2035728666)) + (i32.add (i32.const 1177307754)) + (i32.add (i32.const -1856663638)) + (i32.add (i32.const 1623678716)) + (i32.add (i32.const 1424312850)) + (i32.add (i32.const -1870598072)) + (i32.add (i32.const 985982003)) + (i32.add (i32.const -38528338)) + (i32.add (i32.const 1873792570)) + (i32.add (i32.const -1660283228)) + (i32.add (i32.const -494936147)) + (i32.add (i32.const 1692067025)) + (i32.add (i32.const 506028467)) + (i32.add (i32.const 1803734093)) + (i32.add (i32.const -1379009901)) + (i32.add (i32.const -73452669)) + (i32.add (i32.const -1315802783)) + (i32.add (i32.const 420773327)) + (i32.add (i32.const 1665805394)) + (i32.add (i32.const 1099796343)) + (i32.add (i32.const 744958529)) + (i32.add (i32.const 344370034)) + (i32.add (i32.const 1687213339)) + (i32.add (i32.const -911870739)) + (i32.add (i32.const 84759382)) + (i32.add (i32.const -1298494081)) + (i32.add (i32.const -970433891)) + (i32.add (i32.const -1691571798)) + (i32.add (i32.const 985459895)) + (i32.add (i32.const 336708601)) + (i32.add (i32.const 1302957075)) + (i32.add (i32.const 1279561360)) + (i32.add (i32.const 1611710936)) + (i32.add (i32.const 206563984)) + (i32.add (i32.const 263520144)) + (i32.add (i32.const 814719660)) + (i32.add (i32.const -1949223025)) + (i32.add (i32.const 453236276)) + (i32.add (i32.const 803428606)) + (i32.add (i32.const -247682649)) + (i32.add (i32.const -1489849073)) + (i32.add (i32.const 98402240)) + (i32.add (i32.const -1810329908)) + (i32.add (i32.const 1655821557)) + (i32.add (i32.const 465385534)) + (i32.add (i32.const -2137005455)) + (i32.add (i32.const -1813884327)) + (i32.add (i32.const -998772212)) + (i32.add (i32.const 254423328)) + (i32.add (i32.const 1745666300)) + (i32.add (i32.const 1422922310)) + (i32.add (i32.const 693980361)) + (i32.add (i32.const -753932131)) + (i32.add (i32.const -2005967002)) + (i32.add (i32.const -1042795173)) + (i32.add (i32.const 2058039959)) + (i32.add (i32.const -1927044804)) + (i32.add (i32.const -1291386419)) + (i32.add (i32.const -1616150525)) + (i32.add (i32.const 652086884)) + (i32.add (i32.const -180578101)) + (i32.add (i32.const -1777951363)) + (i32.add (i32.const -841657056)) + (i32.add (i32.const 522388643)) + (i32.add (i32.const 1696415005)) + (i32.add (i32.const -1124675161)) + (i32.add (i32.const -1455701769)) + (i32.add (i32.const -779315401)) + (i32.add (i32.const 1191580668)) + (i32.add (i32.const -1602701608)) + (i32.add (i32.const 1573348429)) + (i32.add (i32.const 271576070)) + (i32.add (i32.const 1126292180)) + (i32.add (i32.const 466506990)) + (i32.add (i32.const -124662383)) + (i32.add (i32.const -924898803)) + (i32.add (i32.const 1935561524)) + (i32.add (i32.const -2102086763)) + (i32.add (i32.const 1871204888)) + (i32.add (i32.const -1465652924)) + (i32.add (i32.const -481130516)) + (i32.add (i32.const -229443404)) + (i32.add (i32.const 74719843)) + (i32.add (i32.const 1760518578)) + (i32.add (i32.const -266883653)) + (i32.add (i32.const -1253931829)) + (i32.add (i32.const 689712331)) + (i32.add (i32.const 606455276)) + (i32.add (i32.const -83451099)) + (i32.add (i32.const -201600176)) + (i32.add (i32.const -436652554)) + (i32.add (i32.const 267883566)) + (i32.add (i32.const 1278329417)) + (i32.add (i32.const -859465483)) + (i32.add (i32.const -279807153)) + (i32.add (i32.const 1604739875)) + (i32.add (i32.const -855272858)) + (i32.add (i32.const -1612810812)) + (i32.add (i32.const -731242585)) + (i32.add (i32.const 437853487)) + (i32.add (i32.const 1564050776)) + (i32.add (i32.const -306702261)) + (i32.add (i32.const 403633067)) + (i32.add (i32.const 291999627)) + (i32.add (i32.const -19082238)) + (i32.add (i32.const -1567034866)) + (i32.add (i32.const -1473179778)) + (i32.add (i32.const -439333248)) + (i32.add (i32.const 1974725357)) + (i32.add (i32.const 1527676266)) + (i32.add (i32.const -692105389)) + (i32.add (i32.const -1989456493)) + (i32.add (i32.const 581196027)) + (i32.add (i32.const -441413825)) + (i32.add (i32.const -96370324)) + (i32.add (i32.const 482728396)) + (i32.add (i32.const -494439836)) + (i32.add (i32.const 377135398)) + (i32.add (i32.const -408182646)) + (i32.add (i32.const 1712910994)) + (i32.add (i32.const 417202088)) + (i32.add (i32.const 2059086531)) + (i32.add (i32.const -1968916747)) + (i32.add (i32.const -1556118549)) + (i32.add (i32.const 1785089660)) + (i32.add (i32.const 301412190)) + (i32.add (i32.const -28479132)) + (i32.add (i32.const 1635360851)) + (i32.add (i32.const 1801247349)) + (i32.add (i32.const 509526404)) + (i32.add (i32.const 1120173871)) + (i32.add (i32.const -689608097)) + (i32.add (i32.const -299849773)) + (i32.add (i32.const 1106135176)) + (i32.add (i32.const 1797398740)) + (i32.add (i32.const 110862638)) + (i32.add (i32.const -1906643078)) + (i32.add (i32.const -1211596579)) + (i32.add (i32.const -1136546137)) + (i32.add (i32.const -575579382)) + (i32.add (i32.const 196731115)) + (i32.add (i32.const -235825598)) + (i32.add (i32.const 740916370)) + (i32.add (i32.const -1027778890)) + (i32.add (i32.const -558748290)) + (i32.add (i32.const -933588472)) + (i32.add (i32.const -625117483)) + (i32.add (i32.const -925346406)) + (i32.add (i32.const -1724353107)) + (i32.add (i32.const 1137849686)) + (i32.add (i32.const 546485867)) + (i32.add (i32.const -1352615832)) + (i32.add (i32.const -691992314)) + (i32.add (i32.const -1357864534)) + (i32.add (i32.const -1984052981)) + (i32.add (i32.const -1526922648)) + (i32.add (i32.const -776944305)) + (i32.add (i32.const 2121554422)) + (i32.add (i32.const -2064107474)) + (i32.add (i32.const 2015997997)) + (i32.add (i32.const -1999973088)) + (i32.add (i32.const -611192134)) + (i32.add (i32.const 1665288786)) + (i32.add (i32.const 67680844)) + (i32.add (i32.const -600713433)) + (i32.add (i32.const -479855244)) + (i32.add (i32.const 787290501)) + (i32.add (i32.const -2020646886)) + (i32.add (i32.const -2093963377)) + (i32.add (i32.const -2058931087)) + (i32.add (i32.const -1687081715)) + (i32.add (i32.const 329714575)) + (i32.add (i32.const 1875129128)) + (i32.add (i32.const 459281465)) + (i32.add (i32.const -1903090155)) + (i32.add (i32.const -441913864)) + (i32.add (i32.const -2072990849)) + (i32.add (i32.const -2081503127)) + (i32.add (i32.const -1440635328)) + (i32.add (i32.const -1859314189)) + (i32.add (i32.const -935315553)) + (i32.add (i32.const 1518118150)) + (i32.add (i32.const 358642682)) + (i32.add (i32.const 400294947)) + (i32.add (i32.const -936592897)) + (i32.add (i32.const 463040058)) + (i32.add (i32.const 433092491)) + (i32.add (i32.const -2026867216)) + (i32.add (i32.const -883641289)) + (i32.add (i32.const -1220251731)) + (i32.add (i32.const -1012174907)) + (i32.add (i32.const 1964463646)) + (i32.add (i32.const -662557450)) + (i32.add (i32.const -539333345)) + (i32.add (i32.const -198870613)) + (i32.add (i32.const -764373375)) + (i32.add (i32.const -701393363)) + (i32.add (i32.const 1594544626)) + (i32.add (i32.const 1881101955)) + (i32.add (i32.const -1245777437)) + (i32.add (i32.const -905043291)) + (i32.add (i32.const -635651363)) + (i32.add (i32.const 780407501)) + (i32.add (i32.const -1057141033)) + (i32.add (i32.const 561271220)) + (i32.add (i32.const 1932233250)) + (i32.add (i32.const 376975154)) + (i32.add (i32.const -1622832766)) + (i32.add (i32.const -841142477)) + (i32.add (i32.const 964908965)) + (i32.add (i32.const -246450529)) + (i32.add (i32.const -721950107)) + (i32.add (i32.const 1148155718)) + (i32.add (i32.const 1820929595)) + (i32.add (i32.const -130980980)) + (i32.add (i32.const -209602122)) + (i32.add (i32.const 441061808)) + (i32.add (i32.const 822884862)) + (i32.add (i32.const -1101492631)) + (i32.add (i32.const 225764028)) + (i32.add (i32.const 1903524846)) + (i32.add (i32.const 1977175480)) + (i32.add (i32.const 733062643)) + (i32.add (i32.const 938069064)) + (i32.add (i32.const -623910603)) + (i32.add (i32.const -930461953)) + (i32.add (i32.const -1986785580)) + (i32.add (i32.const 1024100240)) + (i32.add (i32.const -2092992747)) + (i32.add (i32.const 159650923)) + (i32.add (i32.const 697763683)) + (i32.add (i32.const 1449133316)) + (i32.add (i32.const 1167222512)) + (i32.add (i32.const -1143725622)) + (i32.add (i32.const 663779920)) + (i32.add (i32.const 392109847)) + (i32.add (i32.const 351204806)) + (i32.add (i32.const 1808559669)) + (i32.add (i32.const 175825648)) + (i32.add (i32.const 1782056269)) + (i32.add (i32.const 1826398006)) + (i32.add (i32.const 1326521425)) + (i32.add (i32.const -2018018458)) + (i32.add (i32.const -1816250130)) + (i32.add (i32.const 2075277984)) + (i32.add (i32.const -739557783)) + (i32.add (i32.const 1438098552)) + (i32.add (i32.const 479040548)) + (i32.add (i32.const -532464679)) + (i32.add (i32.const 421489504)) + (i32.add (i32.const 876861504)) + (i32.add (i32.const 863606152)) + (i32.add (i32.const -262880866)) + (i32.add (i32.const -2145317325)) + (i32.add (i32.const -2097188179)) + (i32.add (i32.const 2111339153)) + (i32.add (i32.const 2095367168)) + (i32.add (i32.const -1149612242)) + (i32.add (i32.const -1876667351)) + (i32.add (i32.const -1473466923)) + (i32.add (i32.const -2115081511)) + (i32.add (i32.const 57512991)) + (i32.add (i32.const 1543846648)) + (i32.add (i32.const -2009264518)) + (i32.add (i32.const -1416237005)) + (i32.add (i32.const 475617634)) + (i32.add (i32.const -1816050563)) + (i32.add (i32.const 1902560476)) + (i32.add (i32.const -1985858838)) + (i32.add (i32.const 373694110)) + (i32.add (i32.const 334356710)) + (i32.add (i32.const 141582919)) + (i32.add (i32.const 1407041436)) + (i32.add (i32.const -537710479)) + (i32.add (i32.const 503197391)) + (i32.add (i32.const 800321487)) + (i32.add (i32.const -1840953690)) + (i32.add (i32.const 1464863705)) + (i32.add (i32.const 25023865)) + (i32.add (i32.const 1608016999)) + (i32.add (i32.const 1671205731)) + (i32.add (i32.const -919936868)) + (i32.add (i32.const 1015448424)) + (i32.add (i32.const 1419797695)) + (i32.add (i32.const 1813400056)) + (i32.add (i32.const -1503442598)) + (i32.add (i32.const 1274752985)) + (i32.add (i32.const -847580427)) + (i32.add (i32.const -540496451)) + (i32.add (i32.const 116849736)) + (i32.add (i32.const 410864100)) + (i32.add (i32.const 1139824893)) + (i32.add (i32.const -1467433124)) + (i32.add (i32.const -1407228299)) + (i32.add (i32.const 1594365570)) + (i32.add (i32.const 470054401)) + (i32.add (i32.const -1801427440)) + (i32.add (i32.const -365284032)) + (i32.add (i32.const 1200435444)) + (i32.add (i32.const 861037674)) + (i32.add (i32.const -1710779858)) + (i32.add (i32.const 1786642107)) + (i32.add (i32.const -776298786)) + (i32.add (i32.const -165646885)) + (i32.add (i32.const 1710504571)) + (i32.add (i32.const 1181927358)) + (i32.add (i32.const -1118970310)) + (i32.add (i32.const -1484923835)) + (i32.add (i32.const -462504094)) + (i32.add (i32.const 292668440)) + (i32.add (i32.const 1678809524)) + (i32.add (i32.const -511639391)) + (i32.add (i32.const -1329357463)) + (i32.add (i32.const 1861077219)) + (i32.add (i32.const -1323654427)) + (i32.add (i32.const -270968534)) + (i32.add (i32.const 1630428310)) + (i32.add (i32.const -745332098)) + (i32.add (i32.const 440187859)) + (i32.add (i32.const 343752875)) + (i32.add (i32.const 353772596)) + (i32.add (i32.const 467878837)) + (i32.add (i32.const -514006184)) + (i32.add (i32.const 2071362043)) + (i32.add (i32.const 1767196396)) + (i32.add (i32.const 384149838)) + (i32.add (i32.const 1399254891)) + (i32.add (i32.const 538882107)) + (i32.add (i32.const -455750113)) + (i32.add (i32.const 1688697153)) + (i32.add (i32.const -141173596)) + (i32.add (i32.const -2073392115)) + (i32.add (i32.const 915824957)) + (i32.add (i32.const 1263074064)) + (i32.add (i32.const -1189604177)) + (i32.add (i32.const 1520698845)) + (i32.add (i32.const 633566536)) + (i32.add (i32.const -967981234)) + (i32.add (i32.const -1357992355)) + (i32.add (i32.const 1991408925)) + (i32.add (i32.const 262404610)) + (i32.add (i32.const 2113489446)) + (i32.add (i32.const 1708702223)) + (i32.add (i32.const -589025101)) + (i32.add (i32.const -102316474)) + (i32.add (i32.const 110020064)) + (i32.add (i32.const -893275968)) + (i32.add (i32.const 1585735666)) + (i32.add (i32.const -867953501)) + (i32.add (i32.const 801445726)) + (i32.add (i32.const -2130349129)) + (i32.add (i32.const -1009702387)) + (i32.add (i32.const 630120150)) + (i32.add (i32.const 252961903)) + (i32.add (i32.const -1619619706)) + (i32.add (i32.const -674009895)) + (i32.add (i32.const 1804866513)) + (i32.add (i32.const -1929544708)) + (i32.add (i32.const -1735574937)) + (i32.add (i32.const 1160322905)) + (i32.add (i32.const 1228261511)) + (i32.add (i32.const 1707052147)) + (i32.add (i32.const -942759364)) + (i32.add (i32.const 36230423)) + (i32.add (i32.const -1733771452)) + (i32.add (i32.const 264326174)) + (i32.add (i32.const -705515537)) + (i32.add (i32.const -886537320)) + (i32.add (i32.const 840229900)) + (i32.add (i32.const 2040939374)) + (i32.add (i32.const 932314459)) + (i32.add (i32.const 1569207374)) + (i32.add (i32.const -1205724685)) + (i32.add (i32.const -265893283)) + (i32.add (i32.const -1286318381)) + (i32.add (i32.const 261181617)) + (i32.add (i32.const -2130472227)) + (i32.add (i32.const 1218269419)) + (i32.add (i32.const -1662652700)) + (i32.add (i32.const -1643998678)) + (i32.add (i32.const -1112856454)) + (i32.add (i32.const -67289879)) + (i32.add (i32.const 1647100564)) + (i32.add (i32.const -420889642)) + (i32.add (i32.const 92468128)) + (i32.add (i32.const -1459340563)) + (i32.add (i32.const -813488772)) + (i32.add (i32.const 1313569749)) + (i32.add (i32.const 440257271)) + (i32.add (i32.const 143894344)) + (i32.add (i32.const -82092372)) + (i32.add (i32.const -1896278944)) + (i32.add (i32.const 1176788979)) + (i32.add (i32.const -387810582)) + (i32.add (i32.const 1189013703)) + (i32.add (i32.const -300685445)) + (i32.add (i32.const -487928809)) + (i32.add (i32.const 122249751)) + (i32.add (i32.const 2095867184)) + (i32.add (i32.const -450872694)) + (i32.add (i32.const 349518840)) + (i32.add (i32.const -617449577)) + (i32.add (i32.const -1815923438)) + (i32.add (i32.const 427355047)) + (i32.add (i32.const 858142384)) + (i32.add (i32.const 1007242954)) + (i32.add (i32.const 708693612)) + (i32.add (i32.const 766137148)) + (i32.add (i32.const -707283196)) + (i32.add (i32.const 912993285)) + (i32.add (i32.const -752964051)) + (i32.add (i32.const -1498131484)) + (i32.add (i32.const 948676305)) + (i32.add (i32.const 479347175)) + (i32.add (i32.const -916996859)) + (i32.add (i32.const -1898601931)) + (i32.add (i32.const 1754208637)) + (i32.add (i32.const -1337277345)) + (i32.add (i32.const -70595515)) + (i32.add (i32.const 1526357388)) + (i32.add (i32.const -2085172269)) + (i32.add (i32.const -1773208624)) + (i32.add (i32.const -1720792504)) + (i32.add (i32.const -1475233456)) + (i32.add (i32.const 1743793358)) + (i32.add (i32.const 494995520)) + (i32.add (i32.const 1245443007)) + (i32.add (i32.const -2089576351)) + (i32.add (i32.const 1415928394)) + (i32.add (i32.const -1453187501)) + (i32.add (i32.const -788729557)) + (i32.add (i32.const 1200886181)) + (i32.add (i32.const 142306124)) + (i32.add (i32.const -1724539698)) + (i32.add (i32.const 445974060)) + (i32.add (i32.const 1577324562)) + (i32.add (i32.const -12737106)) + (i32.add (i32.const 862270905)) + (i32.add (i32.const -736102702)) + (i32.add (i32.const -1259699910)) + (i32.add (i32.const -1527875333)) + (i32.add (i32.const -723328101)) + (i32.add (i32.const -1547723849)) + (i32.add (i32.const 1721508521)) + (i32.add (i32.const 445484225)) + (i32.add (i32.const 372251269)) + (i32.add (i32.const -1075607651)) + (i32.add (i32.const -943772261)) + (i32.add (i32.const -1543231430)) + (i32.add (i32.const 908107640)) + (i32.add (i32.const -1928321531)) + (i32.add (i32.const 320965444)) + (i32.add (i32.const 89482077)) + (i32.add (i32.const -5925759)) + (i32.add (i32.const -674013783)) + (i32.add (i32.const -2122314720)) + (i32.add (i32.const 1685558865)) + (i32.add (i32.const -624605741)) + (i32.add (i32.const 444171942)) + (i32.add (i32.const 396325310)) + (i32.add (i32.const -2024296225)) + (i32.add (i32.const -451576528)) + (i32.add (i32.const 473073978)) + (i32.add (i32.const -283060218)) + (i32.add (i32.const -275601967)) + (i32.add (i32.const -185451840)) + (i32.add (i32.const -1676962167)) + (i32.add (i32.const 231088234)) + (i32.add (i32.const -783131680)) + (i32.add (i32.const -1273190838)) + (i32.add (i32.const -1914721666)) + (i32.add (i32.const 1996910667)) + (i32.add (i32.const -1182513208)) + (i32.add (i32.const -1760307010)) + (i32.add (i32.const -1064692768)) + (i32.add (i32.const 452512074)) + (i32.add (i32.const -781819993)) + (i32.add (i32.const -867326756)) + (i32.add (i32.const 1834036313)) + (i32.add (i32.const -316996508)) + (i32.add (i32.const -1965832254)) + (i32.add (i32.const 1544787222)) + (i32.add (i32.const -29864050)) + (i32.add (i32.const -40365685)) + (i32.add (i32.const -627440590)) + (i32.add (i32.const 1234779215)) + (i32.add (i32.const 880579717)) + (i32.add (i32.const -173449438)) + (i32.add (i32.const -2119553799)) + (i32.add (i32.const 1151957897)) + (i32.add (i32.const 742163714)) + (i32.add (i32.const -1226593374)) + (i32.add (i32.const -1565001140)) + (i32.add (i32.const -2147452765)) + (i32.add (i32.const -1285251993)) + (i32.add (i32.const -1630042518)) + (i32.add (i32.const -151296325)) + (i32.add (i32.const 1449512887)) + (i32.add (i32.const 922269133)) + (i32.add (i32.const -610253746)) + (i32.add (i32.const -1368538873)) + (i32.add (i32.const 801034792)) + (i32.add (i32.const 247985800)) + (i32.add (i32.const -1813605118)) + (i32.add (i32.const 1205811666)) + (i32.add (i32.const -2098027380)) + (i32.add (i32.const 1506846543)) + (i32.add (i32.const -1355966690)) + (i32.add (i32.const 392676538)) + (i32.add (i32.const -966711246)) + (i32.add (i32.const -820637580)) + (i32.add (i32.const -891885352)) + (i32.add (i32.const -1207612485)) + (i32.add (i32.const 1012316661)) + (i32.add (i32.const -2082209324)) + (i32.add (i32.const 349984713)) + (i32.add (i32.const -755932439)) + (i32.add (i32.const -206959810)) + (i32.add (i32.const 35108277)) + (i32.add (i32.const -755314114)) + (i32.add (i32.const -1435355990)) + (i32.add (i32.const -377632342)) + (i32.add (i32.const 2138778525)) + (i32.add (i32.const -1568025658)) + (i32.add (i32.const -1564240220)) + (i32.add (i32.const -1899896580)) + (i32.add (i32.const 614288126)) + (i32.add (i32.const 272282181)) + (i32.add (i32.const -738567445)) + (i32.add (i32.const -942221239)) + (i32.add (i32.const 987966754)) + (i32.add (i32.const 1840845174)) + (i32.add (i32.const -1812589321)) + (i32.add (i32.const -245158089)) + (i32.add (i32.const 1279968061)) + (i32.add (i32.const -1368190637)) + (i32.add (i32.const 1693759770)) + (i32.add (i32.const 1416965932)) + (i32.add (i32.const 1828885342)) + (i32.add (i32.const 1541075398)) + (i32.add (i32.const 1199601555)) + (i32.add (i32.const 1749298322)) + (i32.add (i32.const -712635440)) + (i32.add (i32.const 2019640577)) + (i32.add (i32.const -1446452863)) + (i32.add (i32.const -1319671066)) + (i32.add (i32.const 1778423693)) + (i32.add (i32.const -1361275224)) + (i32.add (i32.const 797486423)) + (i32.add (i32.const 2003242130)) + (i32.add (i32.const -125496625)) + (i32.add (i32.const 1038874411)) + (i32.add (i32.const -768821167)) + (i32.add (i32.const -498779808)) + (i32.add (i32.const 1851396073)) + (i32.add (i32.const -660831356)) + (i32.add (i32.const 80144863)) + (i32.add (i32.const -539636688)) + (i32.add (i32.const 725352483)) + (i32.add (i32.const 1874465567)) + (i32.add (i32.const 278358309)) + (i32.add (i32.const 2077096100)) + (i32.add (i32.const -1763094256)) + (i32.add (i32.const -890055434)) + (i32.add (i32.const 162286278)) + (i32.add (i32.const -1863602088)) + (i32.add (i32.const 465807685)) + (i32.add (i32.const 2000269291)) + (i32.add (i32.const -74283116)) + (i32.add (i32.const -1373353098)) + (i32.add (i32.const 243374021)) + (i32.add (i32.const -837193118)) + (i32.add (i32.const -1039787283)) + (i32.add (i32.const 1258742104)) + (i32.add (i32.const -788916971)) + (i32.add (i32.const -1902140579)) + (i32.add (i32.const 202933440)) + (i32.add (i32.const 840074687)) + (i32.add (i32.const 1497775914)) + (i32.add (i32.const -748769967)) + (i32.add (i32.const 1188863109)) + (i32.add (i32.const -1770683681)) + (i32.add (i32.const -1817772432)) + (i32.add (i32.const 1060620843)) + (i32.add (i32.const -50470620)) + (i32.add (i32.const 2132727154)) + (i32.add (i32.const -1850518509)) + (i32.add (i32.const 1750539560)) + (i32.add (i32.const 1252230486)) + (i32.add (i32.const -1858001640)) + (i32.add (i32.const 1130500706)) + (i32.add (i32.const 1534875593)) + (i32.add (i32.const -1170975512)) + (i32.add (i32.const 2012460811)) + (i32.add (i32.const 2089057595)) + (i32.add (i32.const -1406007721)) + (i32.add (i32.const 1885420849)) + (i32.add (i32.const 492668846)) + (i32.add (i32.const -1204318922)) + (i32.add (i32.const -1280829169)) + (i32.add (i32.const -1368170935)) + (i32.add (i32.const -1152960454)) + (i32.add (i32.const 454677440)) + (i32.add (i32.const 1498348736)) + (i32.add (i32.const -551658967)) + (i32.add (i32.const -1244075811)) + (i32.add (i32.const -483990614)) + (i32.add (i32.const 775929222)) + (i32.add (i32.const -1365501062)) + (i32.add (i32.const 777309565)) + (i32.add (i32.const 526670748)) + (i32.add (i32.const -1807347785)) + (i32.add (i32.const 1453730356)) + (i32.add (i32.const 73117625)) + (i32.add (i32.const -1892442646)) + (i32.add (i32.const 2078284911)) + (i32.add (i32.const 779210614)) + (i32.add (i32.const -1351637095)) + (i32.add (i32.const -514531665)) + (i32.add (i32.const -1632506683)) + (i32.add (i32.const -1295236991)) + (i32.add (i32.const 148173146)) + (i32.add (i32.const -468718480)) + (i32.add (i32.const -25697295)) + (i32.add (i32.const -738321649)) + (i32.add (i32.const 1035693600)) + (i32.add (i32.const -952719999)) + (i32.add (i32.const -176034997)) + (i32.add (i32.const 1555795138)) + (i32.add (i32.const -2083227393)) + (i32.add (i32.const -2042995224)) + (i32.add (i32.const 2081701667)) + (i32.add (i32.const -2051005120)) + (i32.add (i32.const -105963469)) + (i32.add (i32.const -454975933)) + (i32.add (i32.const -2140409234)) + (i32.add (i32.const -1314602516)) + (i32.add (i32.const 1840948607)) + (i32.add (i32.const -1782275329)) + (i32.add (i32.const -636840235)) + (i32.add (i32.const -1661009469)) + (i32.add (i32.const 1632089483)) + (i32.add (i32.const -1852026344)) + (i32.add (i32.const 1618298123)) + (i32.add (i32.const -1471254540)) + (i32.add (i32.const -1443959465)) + (i32.add (i32.const -1832619382)) + (i32.add (i32.const -1332414117)) + (i32.add (i32.const 1854747478)) + (i32.add (i32.const -1097581412)) + (i32.add (i32.const 1586578865)) + (i32.add (i32.const 1250827460)) + (i32.add (i32.const 1417057287)) + (i32.add (i32.const -167564478)) + (i32.add (i32.const 1144183721)) + (i32.add (i32.const -162055327)) + (i32.add (i32.const 500133395)) + (i32.add (i32.const 1056437325)) + (i32.add (i32.const 268648104)) + (i32.add (i32.const 255725297)) + (i32.add (i32.const 1243870227)) + (i32.add (i32.const 1303346319)) + (i32.add (i32.const -1432846190)) + (i32.add (i32.const 666185510)) + (i32.add (i32.const -732178646)) + (i32.add (i32.const -1380479858)) + (i32.add (i32.const 1403470683)) + (i32.add (i32.const 673689712)) + (i32.add (i32.const -1483585308)) + (i32.add (i32.const -1049363757)) + (i32.add (i32.const -89618412)) + (i32.add (i32.const 684394296)) + (i32.add (i32.const -242089799)) + (i32.add (i32.const -1110323216)) + (i32.add (i32.const 1448007630)) + (i32.add (i32.const 783046077)) + (i32.add (i32.const -889443053)) + (i32.add (i32.const 958354404)) + (i32.add (i32.const 1276133294)) + (i32.add (i32.const 67107086)) + (i32.add (i32.const -480312870)) + (i32.add (i32.const -2140176536)) + (i32.add (i32.const -785955354)) + (i32.add (i32.const -276489963)) + (i32.add (i32.const 987327387)) + (i32.add (i32.const 1089734944)) + (i32.add (i32.const 254217225)) + (i32.add (i32.const -641436052)) + (i32.add (i32.const 78093325)) + (i32.add (i32.const -1579384622)) + (i32.add (i32.const -1849158243)) + (i32.add (i32.const 1109330541)) + (i32.add (i32.const 1553606511)) + (i32.add (i32.const 214164744)) + (i32.add (i32.const -1136335144)) + (i32.add (i32.const 1634724735)) + (i32.add (i32.const -800651985)) + (i32.add (i32.const 170757691)) + (i32.add (i32.const 1442182290)) + (i32.add (i32.const 2010960227)) + (i32.add (i32.const -1484049971)) + (i32.add (i32.const 339062345)) + (i32.add (i32.const 624345855)) + (i32.add (i32.const -1925923930)) + (i32.add (i32.const -1451119090)) + (i32.add (i32.const 1012972435)) + (i32.add (i32.const -1685748875)) + (i32.add (i32.const 991037141)) + (i32.add (i32.const -141102761)) + (i32.add (i32.const 490439366)) + (i32.add (i32.const 319457686)) + (i32.add (i32.const -463737027)) + (i32.add (i32.const 514185678)) + (i32.add (i32.const -303322925)) + (i32.add (i32.const -904095306)) + (i32.add (i32.const 122371947)) + (i32.add (i32.const -1899033804)) + (i32.add (i32.const 1028643373)) + (i32.add (i32.const 1629401334)) + (i32.add (i32.const -614335219)) + (i32.add (i32.const 974659929)) + (i32.add (i32.const 1941024491)) + (i32.add (i32.const 1530942168)) + (i32.add (i32.const -2108807869)) + (i32.add (i32.const -129997388)) + (i32.add (i32.const 1229736730)) + (i32.add (i32.const 2061524558)) + (i32.add (i32.const -981688570)) + (i32.add (i32.const -1770910043)) + (i32.add (i32.const 1279499620)) + (i32.add (i32.const 1195432211)) + (i32.add (i32.const 1760560045)) + (i32.add (i32.const -774404824)) + (i32.add (i32.const -1829185152)) + (i32.add (i32.const 975005213)) + (i32.add (i32.const -393951915)) + (i32.add (i32.const 628114912)) + (i32.add (i32.const -186292168)) + (i32.add (i32.const 545868486)) + (i32.add (i32.const 1230060651)) + (i32.add (i32.const 136826203)) + (i32.add (i32.const 1781939884)) + (i32.add (i32.const -1231701065)) + (i32.add (i32.const 347710298)) + (i32.add (i32.const 40291807)) + (i32.add (i32.const -1617629659)) + (i32.add (i32.const -1197851658)) + (i32.add (i32.const -1807986883)) + (i32.add (i32.const -1572963623)) + (i32.add (i32.const -241561118)) + (i32.add (i32.const -1452571753)) + (i32.add (i32.const -167851762)) + (i32.add (i32.const 1933688641)) + (i32.add (i32.const -650963543)) + (i32.add (i32.const 301740135)) + (i32.add (i32.const -999616819)) + (i32.add (i32.const 198219344)) + (i32.add (i32.const 543660194)) + (i32.add (i32.const -714873015)) + (i32.add (i32.const -1072004216)) + (i32.add (i32.const -935876942)) + (i32.add (i32.const -1123006815)) + (i32.add (i32.const -2123271546)) + (i32.add (i32.const -598669326)) + (i32.add (i32.const -112082503)) + (i32.add (i32.const -1997896711)) + (i32.add (i32.const -1784050157)) + (i32.add (i32.const 785721264)) + (i32.add (i32.const -1849633002)) + (i32.add (i32.const 1238914069)) + (i32.add (i32.const -1880700305)) + (i32.add (i32.const -2091362778)) + (i32.add (i32.const 325461969)) + (i32.add (i32.const -525823246)) + (i32.add (i32.const -2083355201)) + (i32.add (i32.const 118718392)) + (i32.add (i32.const 166207089)) + (i32.add (i32.const -866955022)) + (i32.add (i32.const -860106465)) + (i32.add (i32.const -615537820)) + (i32.add (i32.const -1589430030)) + (i32.add (i32.const -1522682457)) + (i32.add (i32.const 1664430228)) + (i32.add (i32.const -1579982148)) + (i32.add (i32.const 1658090273)) + (i32.add (i32.const -1505713703)) + (i32.add (i32.const 628926190)) + (i32.add (i32.const -43518230)) + (i32.add (i32.const -364584572)) + (i32.add (i32.const -1674796282)) + (i32.add (i32.const 143298797)) + (i32.add (i32.const -1126501411)) + (i32.add (i32.const 1337607554)) + (i32.add (i32.const 136885807)) + (i32.add (i32.const -1483980324)) + (i32.add (i32.const 1862175432)) + (i32.add (i32.const -424838064)) + (i32.add (i32.const -1878545051)) + (i32.add (i32.const -1137456413)) + (i32.add (i32.const 1610302524)) + (i32.add (i32.const 1463536253)) + (i32.add (i32.const -1889805677)) + (i32.add (i32.const -1854687400)) + (i32.add (i32.const 1092495914)) + (i32.add (i32.const 1569767272)) + (i32.add (i32.const -1402201644)) + (i32.add (i32.const -1819746522)) + (i32.add (i32.const -2141283419)) + (i32.add (i32.const 2138977032)) + (i32.add (i32.const -1865691268)) + (i32.add (i32.const -1475003569)) + (i32.add (i32.const 1125732062)) + (i32.add (i32.const -2079560337)) + (i32.add (i32.const -407814499)) + (i32.add (i32.const 348224835)) + (i32.add (i32.const -720636159)) + (i32.add (i32.const 1011551340)) + (i32.add (i32.const -183819664)) + (i32.add (i32.const 540855251)) + (i32.add (i32.const 1707070799)) + (i32.add (i32.const -871284359)) + (i32.add (i32.const -961693838)) + (i32.add (i32.const 203619107)) + (i32.add (i32.const -1572167301)) + (i32.add (i32.const 1135890473)) + (i32.add (i32.const 1773996002)) + (i32.add (i32.const 489625228)) + (i32.add (i32.const -48172100)) + (i32.add (i32.const 2024267845)) + (i32.add (i32.const -1085396947)) + (i32.add (i32.const -52873883)) + (i32.add (i32.const -1030427087)) + (i32.add (i32.const 1415242030)) + (i32.add (i32.const 1817357167)) + (i32.add (i32.const 1521486301)) + (i32.add (i32.const 111211400)) + (i32.add (i32.const 1911127448)) + (i32.add (i32.const 777031650)) + (i32.add (i32.const 23478759)) + (i32.add (i32.const 2019758746)) + (i32.add (i32.const -1578991701)) + (i32.add (i32.const 2010278149)) + (i32.add (i32.const -2081792177)) + (i32.add (i32.const 1402776487)) + (i32.add (i32.const 1651180434)) + (i32.add (i32.const -1944557550)) + (i32.add (i32.const -1208964402)) + (i32.add (i32.const -958832985)) + (i32.add (i32.const -717339808)) + (i32.add (i32.const 1451394693)) + (i32.add (i32.const 2088637449)) + (i32.add (i32.const 1261367300)) + (i32.add (i32.const 1266342485)) + (i32.add (i32.const 991642833)) + (i32.add (i32.const 1785426905)) + (i32.add (i32.const -967964076)) + (i32.add (i32.const -2061319045)) + (i32.add (i32.const 942368018)) + (i32.add (i32.const 30719810)) + (i32.add (i32.const -1102035843)) + (i32.add (i32.const 794067791)) + (i32.add (i32.const 943938994)) + (i32.add (i32.const -932962462)) + (i32.add (i32.const -1861093337)) + (i32.add (i32.const -567281279)) + (i32.add (i32.const 151702258)) + (i32.add (i32.const -215425432)) + (i32.add (i32.const 853275764)) + (i32.add (i32.const 2106825138)) + (i32.add (i32.const 409052630)) + (i32.add (i32.const -1129013939)) + (i32.add (i32.const 2050331790)) + (i32.add (i32.const -835316343)) + (i32.add (i32.const 418110822)) + (i32.add (i32.const 561277486)) + (i32.add (i32.const -149267856)) + (i32.add (i32.const 1004026352)) + (i32.add (i32.const -97506590)) + (i32.add (i32.const -1699441725)) + (i32.add (i32.const -1092110195)) + (i32.add (i32.const -165595700)) + (i32.add (i32.const -2061632724)) + (i32.add (i32.const 154802630)) + (i32.add (i32.const 585826873)) + (i32.add (i32.const -1429855914)) + (i32.add (i32.const -548240585)) + (i32.add (i32.const 69556349)) + (i32.add (i32.const 816094010)) + (i32.add (i32.const -671155374)) + (i32.add (i32.const -930265817)) + (i32.add (i32.const 1333685712)) + (i32.add (i32.const 571514001)) + (i32.add (i32.const -1086885478)) + (i32.add (i32.const -1951305310)) + (i32.add (i32.const -1647723558)) + (i32.add (i32.const 37066802)) + (i32.add (i32.const -693690070)) + (i32.add (i32.const -217836513)) + (i32.add (i32.const 642039800)) + (i32.add (i32.const -959600686)) + (i32.add (i32.const 1265078245)) + (i32.add (i32.const 407939464)) + (i32.add (i32.const -957674846)) + (i32.add (i32.const -8218854)) + (i32.add (i32.const -1284471839)) + (i32.add (i32.const 1165924131)) + (i32.add (i32.const 1032806502)) + (i32.add (i32.const -2071659821)) + (i32.add (i32.const -1732104353)) + (i32.add (i32.const 888449491)) + (i32.add (i32.const 1009169372)) + (i32.add (i32.const 758632514)) + (i32.add (i32.const -270034343)) + (i32.add (i32.const 611308548)) + (i32.add (i32.const 2047184324)) + (i32.add (i32.const -1974460886)) + (i32.add (i32.const -1825604696)) + (i32.add (i32.const -1450147791)) + (i32.add (i32.const 1051591088)) + (i32.add (i32.const 1120540086)) + (i32.add (i32.const 577313419)) + (i32.add (i32.const -125560761)) + (i32.add (i32.const 2125100439)) + (i32.add (i32.const 1632483768)) + (i32.add (i32.const -892921323)) + (i32.add (i32.const -527479213)) + (i32.add (i32.const 451639049)) + (i32.add (i32.const 322655670)) + (i32.add (i32.const 514013445)) + (i32.add (i32.const -611774786)) + (i32.add (i32.const 2137291226)) + (i32.add (i32.const -88412821)) + (i32.add (i32.const -470667369)) + (i32.add (i32.const 1232426923)) + (i32.add (i32.const -1424027198)) + (i32.add (i32.const 437355443)) + (i32.add (i32.const 1487684997)) + (i32.add (i32.const 215395376)) + (i32.add (i32.const -1732679866)) + (i32.add (i32.const 250426430)) + (i32.add (i32.const -1400416699)) + (i32.add (i32.const -2000650772)) + (i32.add (i32.const -1566075240)) + (i32.add (i32.const 1155102288)) + (i32.add (i32.const 1388266821)) + (i32.add (i32.const -33655338)) + (i32.add (i32.const 1400563525)) + (i32.add (i32.const -615030758)) + (i32.add (i32.const -2129899516)) + (i32.add (i32.const 1125969878)) + (i32.add (i32.const -617561958)) + (i32.add (i32.const -798832184)) + (i32.add (i32.const 358454910)) + (i32.add (i32.const 1937563539)) + (i32.add (i32.const 2010262194)) + (i32.add (i32.const 84774146)) + (i32.add (i32.const 920229131)) + (i32.add (i32.const 1065273754)) + (i32.add (i32.const -459333178)) + (i32.add (i32.const 233539532)) + (i32.add (i32.const -960171424)) + (i32.add (i32.const -27468573)) + (i32.add (i32.const -802982827)) + (i32.add (i32.const -1321040567)) + (i32.add (i32.const -2044071519)) + (i32.add (i32.const -1600844197)) + (i32.add (i32.const -21629764)) + (i32.add (i32.const -751126211)) + (i32.add (i32.const -434577382)) + (i32.add (i32.const 2103727646)) + (i32.add (i32.const 1279341677)) + (i32.add (i32.const 1220029617)) + (i32.add (i32.const 1301006240)) + (i32.add (i32.const 1754163228)) + (i32.add (i32.const 1267097804)) + (i32.add (i32.const 741168114)) + (i32.add (i32.const 996397075)) + (i32.add (i32.const 1205093089)) + (i32.add (i32.const 1485874875)) + (i32.add (i32.const -679457671)) + (i32.add (i32.const -147841567)) + (i32.add (i32.const -937151368)) + (i32.add (i32.const 440710447)) + (i32.add (i32.const -356990438)) + (i32.add (i32.const -654078147)) + (i32.add (i32.const -528525050)) + (i32.add (i32.const 1158168328)) + (i32.add (i32.const -555523418)) + (i32.add (i32.const -1259194156)) + (i32.add (i32.const 1083335522)) + (i32.add (i32.const 556255230)) + (i32.add (i32.const 476993640)) + (i32.add (i32.const -1510722969)) + (i32.add (i32.const -1964635307)) + (i32.add (i32.const 1733672651)) + (i32.add (i32.const -1607037116)) + (i32.add (i32.const 450600198)) + (i32.add (i32.const 1004113248)) + (i32.add (i32.const 1262257518)) + (i32.add (i32.const -1973729122)) + (i32.add (i32.const -50518216)) + (i32.add (i32.const -712238512)) + (i32.add (i32.const -1644988517)) + (i32.add (i32.const 1864607963)) + (i32.add (i32.const -2021699426)) + (i32.add (i32.const 1630659727)) + (i32.add (i32.const 1054006373)) + (i32.add (i32.const -1921372295)) + (i32.add (i32.const -1662654797)) + (i32.add (i32.const 1187211709)) + (i32.add (i32.const -571058302)) + (i32.add (i32.const -867088908)) + (i32.add (i32.const -102450236)) + (i32.add (i32.const -382398268)) + (i32.add (i32.const 1406267170)) + (i32.add (i32.const -651515232)) + (i32.add (i32.const -1063105837)) + (i32.add (i32.const -47589391)) + (i32.add (i32.const -2120015367)) + (i32.add (i32.const 251872266)) + (i32.add (i32.const -1347732058)) + (i32.add (i32.const 588495499)) + (i32.add (i32.const -439131159)) + (i32.add (i32.const 997034355)) + (i32.add (i32.const 1466284199)) + (i32.add (i32.const -1151587438)) + (i32.add (i32.const 2142810602)) + (i32.add (i32.const -275442475)) + (i32.add (i32.const 536400790)) + (i32.add (i32.const -871707416)) + (i32.add (i32.const -1236255378)) + (i32.add (i32.const -529513567)) + (i32.add (i32.const -192497442)) + (i32.add (i32.const -2109712812)) + (i32.add (i32.const 832126226)) + (i32.add (i32.const 1469210419)) + (i32.add (i32.const 733930774)) + (i32.add (i32.const -195538817)) + (i32.add (i32.const 1260820626)) + (i32.add (i32.const -1367539993)) + (i32.add (i32.const -2103455504)) + (i32.add (i32.const -106487418)) + (i32.add (i32.const 1725365081)) + (i32.add (i32.const 1246331467)) + (i32.add (i32.const -1652157955)) + (i32.add (i32.const 1985865474)) + (i32.add (i32.const 843098467)) + (i32.add (i32.const 600106124)) + (i32.add (i32.const 142174537)) + (i32.add (i32.const 1126403476)) + (i32.add (i32.const -1221908992)) + (i32.add (i32.const -1105316798)) + (i32.add (i32.const 2062380861)) + (i32.add (i32.const -833001821)) + (i32.add (i32.const -383400258)) + (i32.add (i32.const 2093078859)) + (i32.add (i32.const -1305149220)) + (i32.add (i32.const -144319820)) + (i32.add (i32.const 906020175)) + (i32.add (i32.const 693270796)) + (i32.add (i32.const -1783990773)) + (i32.add (i32.const 1635842533)) + (i32.add (i32.const -490698543)) + (i32.add (i32.const -2043505071)) + (i32.add (i32.const 1220789093)) + (i32.add (i32.const 1595552366)) + (i32.add (i32.const -18950205)) + (i32.add (i32.const -1016808135)) + (i32.add (i32.const 1057844393)) + (i32.add (i32.const -128553816)) + (i32.add (i32.const -602700215)) + (i32.add (i32.const -1783524079)) + (i32.add (i32.const 1525186824)) + (i32.add (i32.const 2112864784)) + (i32.add (i32.const 1487904311)) + (i32.add (i32.const 1023642927)) + (i32.add (i32.const 1437066319)) + (i32.add (i32.const -574476070)) + (i32.add (i32.const 1246112102)) + (i32.add (i32.const 1098799967)) + (i32.add (i32.const 983306075)) + (i32.add (i32.const -60492078)) + (i32.add (i32.const 19994846)) + (i32.add (i32.const 1188158820)) + (i32.add (i32.const 273835739)) + (i32.add (i32.const 1054286063)) + (i32.add (i32.const -163655286)) + (i32.add (i32.const 1668504346)) + (i32.add (i32.const 1446954044)) + (i32.add (i32.const 9454387)) + (i32.add (i32.const 1150452227)) + (i32.add (i32.const 2116953388)) + (i32.add (i32.const -942704097)) + (i32.add (i32.const -1381375045)) + (i32.add (i32.const -236206190)) + (i32.add (i32.const -749004125)) + (i32.add (i32.const -679788362)) + (i32.add (i32.const 1610045078)) + (i32.add (i32.const -57327738)) + (i32.add (i32.const 1768576988)) + (i32.add (i32.const 531038302)) + (i32.add (i32.const 550714915)) + (i32.add (i32.const -943148889)) + (i32.add (i32.const 1958738268)) + (i32.add (i32.const 937336015)) + (i32.add (i32.const 1771151729)) + (i32.add (i32.const -193266803)) + (i32.add (i32.const -59140722)) + (i32.add (i32.const 1368181587)) + (i32.add (i32.const 1433849639)) + (i32.add (i32.const 661288934)) + (i32.add (i32.const 1921442929)) + (i32.add (i32.const 2025382893)) + (i32.add (i32.const -1406769860)) + (i32.add (i32.const -1903218805)) + (i32.add (i32.const -204952949)) + (i32.add (i32.const -1638932771)) + (i32.add (i32.const -697562846)) + (i32.add (i32.const 2040682403)) + (i32.add (i32.const 1508648745)) + (i32.add (i32.const -816784141)) + (i32.add (i32.const 1446070803)) + (i32.add (i32.const 1756363931)) + (i32.add (i32.const -401476430)) + (i32.add (i32.const -437652623)) + (i32.add (i32.const -1481171861)) + (i32.add (i32.const 1872955750)) + (i32.add (i32.const -204157746)) + (i32.add (i32.const -2143740966)) + (i32.add (i32.const 1616459030)) + (i32.add (i32.const 279092430)) + (i32.add (i32.const 1463425938)) + (i32.add (i32.const 1298368488)) + (i32.add (i32.const -1420343617)) + (i32.add (i32.const -1425384897)) + (i32.add (i32.const 1262711686)) + (i32.add (i32.const -1593781436)) + (i32.add (i32.const -1138124272)) + (i32.add (i32.const 1196207843)) + (i32.add (i32.const -658833774)) + (i32.add (i32.const -2142959855)) + (i32.add (i32.const -624356132)) + (i32.add (i32.const 1015377345)) + (i32.add (i32.const 2037037956)) + (i32.add (i32.const -217748690)) + (i32.add (i32.const -1449949823)) + (i32.add (i32.const 2109180699)) + (i32.add (i32.const -101313720)) + (i32.add (i32.const 2129389358)) + (i32.add (i32.const 1605487285)) + (i32.add (i32.const 1505827761)) + (i32.add (i32.const -1722479590)) + (i32.add (i32.const -325973559)) + (i32.add (i32.const -223254640)) + (i32.add (i32.const -1757153822)) + (i32.add (i32.const -652336550)) + (i32.add (i32.const -1641787005)) + (i32.add (i32.const -1992910348)) + (i32.add (i32.const 645386629)) + (i32.add (i32.const -1778438402)) + (i32.add (i32.const 546860555)) + (i32.add (i32.const -1475761117)) + (i32.add (i32.const 14606047)) + (i32.add (i32.const -498462008)) + (i32.add (i32.const -1620850424)) + (i32.add (i32.const 1426306586)) + (i32.add (i32.const -1912782952)) + (i32.add (i32.const -723091520)) + (i32.add (i32.const 326602639)) + (i32.add (i32.const 1592406297)) + (i32.add (i32.const -262674701)) + (i32.add (i32.const -923468120)) + (i32.add (i32.const -1191551338)) + (i32.add (i32.const -1589571792)) + (i32.add (i32.const 1133670176)) + (i32.add (i32.const 119346390)) + (i32.add (i32.const 1652567245)) + (i32.add (i32.const -460706444)) + (i32.add (i32.const 860035691)) + (i32.add (i32.const -639158696)) + (i32.add (i32.const -2064542259)) + (i32.add (i32.const 862364470)) + (i32.add (i32.const 1262514361)) + (i32.add (i32.const -1169249426)) + (i32.add (i32.const 903692635)) + (i32.add (i32.const 1547504600)) + (i32.add (i32.const 1730099793)) + (i32.add (i32.const 2014666108)) + (i32.add (i32.const 208023998)) + (i32.add (i32.const 1080369891)) + (i32.add (i32.const 898202989)) + (i32.add (i32.const -944575966)) + (i32.add (i32.const -215980614)) + (i32.add (i32.const 1585534179)) + (i32.add (i32.const 1914341618)) + (i32.add (i32.const -1223466413)) + (i32.add (i32.const -1759555684)) + (i32.add (i32.const -1789359349)) + (i32.add (i32.const 1932507430)) + (i32.add (i32.const 1878507324)) + (i32.add (i32.const -645663224)) + (i32.add (i32.const 2041406152)) + (i32.add (i32.const 1403615065)) + (i32.add (i32.const -15225842)) + (i32.add (i32.const -1800346331)) + (i32.add (i32.const -1647248829)) + (i32.add (i32.const 1512214272)) + (i32.add (i32.const -447423870)) + (i32.add (i32.const 1329356111)) + (i32.add (i32.const 1268008503)) + (i32.add (i32.const -391860154)) + (i32.add (i32.const 1049449081)) + (i32.add (i32.const 1107168675)) + (i32.add (i32.const -1142838868)) + (i32.add (i32.const -1197983538)) + (i32.add (i32.const -547998279)) + (i32.add (i32.const -1501776317)) + (i32.add (i32.const 949271870)) + (i32.add (i32.const -920877708)) + (i32.add (i32.const 633320919)) + (i32.add (i32.const -1428844840)) + (i32.add (i32.const -103471994)) + (i32.add (i32.const -1144087817)) + (i32.add (i32.const -1742573408)) + (i32.add (i32.const -1300800564)) + (i32.add (i32.const 1216003037)) + (i32.add (i32.const 95688595)) + (i32.add (i32.const 1972858687)) + (i32.add (i32.const -1262845391)) + (i32.add (i32.const 1851504288)) + (i32.add (i32.const -1716147384)) + (i32.add (i32.const -572066553)) + (i32.add (i32.const 1533114444)) + (i32.add (i32.const -1716252416)) + (i32.add (i32.const -792370414)) + (i32.add (i32.const 2134822916)) + (i32.add (i32.const -1358994226)) + (i32.add (i32.const -698538409)) + (i32.add (i32.const -1233092466)) + (i32.add (i32.const 1311262818)) + (i32.add (i32.const 626572055)) + (i32.add (i32.const -1642332384)) + (i32.add (i32.const 616238297)) + (i32.add (i32.const -171789976)) + (i32.add (i32.const -451070297)) + (i32.add (i32.const 1285333685)) + (i32.add (i32.const 129628791)) + (i32.add (i32.const -421566701)) + (i32.add (i32.const 1650287396)) + (i32.add (i32.const 501577864)) + (i32.add (i32.const -1078152577)) + (i32.add (i32.const -554261507)) + (i32.add (i32.const -1893365939)) + (i32.add (i32.const -1884366498)) + (i32.add (i32.const -347911858)) + (i32.add (i32.const 568668404)) + (i32.add (i32.const -148029987)) + (i32.add (i32.const 177987340)) + (i32.add (i32.const 1624499554)) + (i32.add (i32.const -57593201)) + (i32.add (i32.const -11077468)) + (i32.add (i32.const -722434191)) + (i32.add (i32.const -1733698183)) + (i32.add (i32.const 118367759)) + (i32.add (i32.const 169046305)) + (i32.add (i32.const -1006017386)) + (i32.add (i32.const 1083112248)) + (i32.add (i32.const -1950892664)) + (i32.add (i32.const -638024480)) + (i32.add (i32.const -1308894707)) + (i32.add (i32.const 1347042130)) + (i32.add (i32.const 1836567580)) + (i32.add (i32.const 1512426416)) + (i32.add (i32.const -1970164818)) + (i32.add (i32.const -1408131879)) + (i32.add (i32.const -1092081034)) + (i32.add (i32.const -113653732)) + (i32.add (i32.const -512590048)) + (i32.add (i32.const 1292654839)) + (i32.add (i32.const -1656819921)) + (i32.add (i32.const -1913436136)) + (i32.add (i32.const -1806447995)) + (i32.add (i32.const -396038603)) + (i32.add (i32.const 1250312741)) + (i32.add (i32.const -707987206)) + (i32.add (i32.const -770470187)) + (i32.add (i32.const -1670471155)) + (i32.add (i32.const 776978535)) + (i32.add (i32.const -1417271964)) + (i32.add (i32.const -1214054285)) + (i32.add (i32.const -520840136)) + (i32.add (i32.const 149456999)) + (i32.add (i32.const 451892376)) + (i32.add (i32.const -1950703071)) + (i32.add (i32.const 107702080)) + (i32.add (i32.const 2124217957)) + (i32.add (i32.const -593803816)) + (i32.add (i32.const -293570745)) + (i32.add (i32.const 1054089280)) + (i32.add (i32.const -1569358540)) + (i32.add (i32.const -244428843)) + (i32.add (i32.const 1353189947)) + (i32.add (i32.const -813660435)) + (i32.add (i32.const 681341573)) + (i32.add (i32.const -613531720)) + (i32.add (i32.const 697509556)) + (i32.add (i32.const 733022488)) + (i32.add (i32.const 778332285)) + (i32.add (i32.const -1751614110)) + (i32.add (i32.const -1367631330)) + (i32.add (i32.const -293533136)) + (i32.add (i32.const 1661537554)) + (i32.add (i32.const 1676174148)) + (i32.add (i32.const 975226650)) + (i32.add (i32.const -1841172602)) + (i32.add (i32.const -1496018510)) + (i32.add (i32.const 2097279039)) + (i32.add (i32.const -1144620964)) + (i32.add (i32.const 769479619)) + (i32.add (i32.const -869347964)) + (i32.add (i32.const -1697472237)) + (i32.add (i32.const 2040705829)) + (i32.add (i32.const -1254268871)) + (i32.add (i32.const 1594905103)) + (i32.add (i32.const 888402392)) + (i32.add (i32.const -796528466)) + (i32.add (i32.const 545150775)) + (i32.add (i32.const -481243780)) + (i32.add (i32.const -1698258126)) + (i32.add (i32.const 1413049585)) + (i32.add (i32.const -1100986060)) + (i32.add (i32.const 1763857171)) + (i32.add (i32.const 1647426029)) + (i32.add (i32.const 1453015082)) + (i32.add (i32.const 1745015825)) + (i32.add (i32.const -1457830955)) + (i32.add (i32.const 167383193)) + (i32.add (i32.const 1752527498)) + (i32.add (i32.const -916924005)) + (i32.add (i32.const 76860709)) + (i32.add (i32.const -1295429284)) + (i32.add (i32.const -1404150752)) + (i32.add (i32.const 7624267)) + (i32.add (i32.const 809205419)) + (i32.add (i32.const 2033037809)) + (i32.add (i32.const 1473408782)) + (i32.add (i32.const 1121726490)) + (i32.add (i32.const -1554456704)) + (i32.add (i32.const -17910108)) + (i32.add (i32.const 470970433)) + (i32.add (i32.const -1259591975)) + (i32.add (i32.const 83127047)) + (i32.add (i32.const 955610870)) + (i32.add (i32.const -1566806749)) + (i32.add (i32.const -1149348663)) + (i32.add (i32.const 984771729)) + (i32.add (i32.const -1804959290)) + (i32.add (i32.const -1626575886)) + (i32.add (i32.const -1243125184)) + (i32.add (i32.const 312842325)) + (i32.add (i32.const -1270056892)) + (i32.add (i32.const 481532528)) + (i32.add (i32.const -364341520)) + (i32.add (i32.const 1539022430)) + (i32.add (i32.const 75499539)) + (i32.add (i32.const -1728032396)) + (i32.add (i32.const 72882137)) + (i32.add (i32.const -331150333)) + (i32.add (i32.const 1595392952)) + (i32.add (i32.const -1276865719)) + (i32.add (i32.const -1161975238)) + (i32.add (i32.const -748906568)) + (i32.add (i32.const 1787876377)) + (i32.add (i32.const 106841548)) + (i32.add (i32.const -1961548643)) + (i32.add (i32.const -2080960906)) + (i32.add (i32.const 2144017966)) + (i32.add (i32.const -534845501)) + (i32.add (i32.const 1648305167)) + (i32.add (i32.const 1056290315)) + (i32.add (i32.const -975731245)) + (i32.add (i32.const 96212892)) + (i32.add (i32.const -433741923)) + (i32.add (i32.const 681302321)) + (i32.add (i32.const 1398412257)) + (i32.add (i32.const -1682757487)) + (i32.add (i32.const 1060782070)) + (i32.add (i32.const 1210286868)) + (i32.add (i32.const -3086704)) + (i32.add (i32.const 1397503928)) + (i32.add (i32.const 222372335)) + (i32.add (i32.const -1157366227)) + (i32.add (i32.const -2114460184)) + (i32.add (i32.const -831874447)) + (i32.add (i32.const 1136380054)) + (i32.add (i32.const 405329998)) + (i32.add (i32.const 1442184697)) + (i32.add (i32.const 254433043)) + (i32.add (i32.const 58717647)) + (i32.add (i32.const -1290415869)) + (i32.add (i32.const -453368389)) + (i32.add (i32.const -424012371)) + (i32.add (i32.const -363355315)) + (i32.add (i32.const 179004265)) + (i32.add (i32.const 2134201970)) + (i32.add (i32.const 1572046475)) + (i32.add (i32.const 1377731009)) + (i32.add (i32.const 250559425)) + (i32.add (i32.const -495395813)) + (i32.add (i32.const -1726714602)) + (i32.add (i32.const 729181859)) + (i32.add (i32.const -1226847541)) + (i32.add (i32.const -573085723)) + (i32.add (i32.const -1265969246)) + (i32.add (i32.const 1411688286)) + (i32.add (i32.const -186191526)) + (i32.add (i32.const 847793864)) + (i32.add (i32.const -2041420753)) + (i32.add (i32.const 713366979)) + (i32.add (i32.const 42056701)) + (i32.add (i32.const 1215891722)) + (i32.add (i32.const -1217910303)) + (i32.add (i32.const -1715010490)) + (i32.add (i32.const 598306429)) + (i32.add (i32.const 691031278)) + (i32.add (i32.const -888675276)) + (i32.add (i32.const 107073549)) + (i32.add (i32.const 1511625231)) + (i32.add (i32.const 180028959)) + (i32.add (i32.const 1234786142)) + (i32.add (i32.const 1458832443)) + (i32.add (i32.const 1038907638)) + (i32.add (i32.const -1293268031)) + (i32.add (i32.const 1950503773)) + (i32.add (i32.const -1528997687)) + (i32.add (i32.const 465787940)) + (i32.add (i32.const -825784890)) + (i32.add (i32.const -1151163963)) + (i32.add (i32.const -1127541467)) + (i32.add (i32.const -1925872601)) + (i32.add (i32.const 2106283631)) + (i32.add (i32.const -1435184619)) + (i32.add (i32.const -377963737)) + (i32.add (i32.const 844613379)) + (i32.add (i32.const -436074093)) + (i32.add (i32.const -719636645)) + (i32.add (i32.const -504224451)) + (i32.add (i32.const 830846825)) + (i32.add (i32.const -1984784243)) + (i32.add (i32.const 1627733568)) + (i32.add (i32.const 721991970)) + (i32.add (i32.const -65480099)) + (i32.add (i32.const 1791434985)) + (i32.add (i32.const -1415736653)) + (i32.add (i32.const 1973204392)) + (i32.add (i32.const -581338540)) + (i32.add (i32.const 480411340)) + (i32.add (i32.const -1474052936)) + (i32.add (i32.const 1525080056)) + (i32.add (i32.const 1023036514)) + (i32.add (i32.const -443525680)) + (i32.add (i32.const 720003563)) + (i32.add (i32.const 1968569359)) + (i32.add (i32.const 314385426)) + (i32.add (i32.const 1427388194)) + (i32.add (i32.const 481630927)) + (i32.add (i32.const 1736299529)) + (i32.add (i32.const -83012060)) + (i32.add (i32.const 101657457)) + (i32.add (i32.const 1849652407)) + (i32.add (i32.const 725144156)) + (i32.add (i32.const 1439671506)) + (i32.add (i32.const -1057149053)) + (i32.add (i32.const 2051361361)) + (i32.add (i32.const 103647920)) + (i32.add (i32.const -1587915846)) + (i32.add (i32.const -1936435492)) + (i32.add (i32.const 1276079734)) + (i32.add (i32.const -1144114869)) + (i32.add (i32.const -2049029492)) + (i32.add (i32.const 850192979)) + (i32.add (i32.const -1253113009)) + (i32.add (i32.const 1247042977)) + (i32.add (i32.const 1074583340)) + (i32.add (i32.const -242025271)) + (i32.add (i32.const 1122866686)) + (i32.add (i32.const -2099012404)) + (i32.add (i32.const 1942014986)) + (i32.add (i32.const 1235166641)) + (i32.add (i32.const 1322414870)) + (i32.add (i32.const -1926611697)) + (i32.add (i32.const -671707529)) + (i32.add (i32.const 529022533)) + (i32.add (i32.const 1774584021)) + (i32.add (i32.const -2045362266)) + (i32.add (i32.const -555467094)) + (i32.add (i32.const -1408420360)) + (i32.add (i32.const -1499800883)) + (i32.add (i32.const 1793844565)) + (i32.add (i32.const 32459243)) + (i32.add (i32.const -89961872)) + (i32.add (i32.const 153145073)) + (i32.add (i32.const 97539940)) + (i32.add (i32.const 1028062079)) + (i32.add (i32.const 364744002)) + (i32.add (i32.const -1674667655)) + (i32.add (i32.const 1260395575)) + (i32.add (i32.const 1213907544)) + (i32.add (i32.const 687910231)) + (i32.add (i32.const 1505706316)) + (i32.add (i32.const 1237198250)) + (i32.add (i32.const 1703568513)) + (i32.add (i32.const 252709164)) + (i32.add (i32.const -1000289986)) + (i32.add (i32.const -973517371)) + (i32.add (i32.const -1710447588)) + (i32.add (i32.const 735585105)) + (i32.add (i32.const 50449455)) + (i32.add (i32.const -807048849)) + (i32.add (i32.const -1048103196)) + (i32.add (i32.const 668111079)) + (i32.add (i32.const -257371042)) + (i32.add (i32.const 1576014864)) + (i32.add (i32.const -835558239)) + (i32.add (i32.const -616555966)) + (i32.add (i32.const -142991344)) + (i32.add (i32.const -1069070516)) + (i32.add (i32.const -569391977)) + (i32.add (i32.const -159642680)) + (i32.add (i32.const -687421744)) + (i32.add (i32.const 1383249142)) + (i32.add (i32.const -285097159)) + (i32.add (i32.const 1781957356)) + (i32.add (i32.const -579502895)) + (i32.add (i32.const 1083590630)) + (i32.add (i32.const 1783413162)) + (i32.add (i32.const -2082371462)) + (i32.add (i32.const -2040701749)) + (i32.add (i32.const -1639757821)) + (i32.add (i32.const 1135465307)) + (i32.add (i32.const -675058904)) + (i32.add (i32.const -1413541976)) + (i32.add (i32.const -843260565)) + (i32.add (i32.const -486071615)) + (i32.add (i32.const 1074345952)) + (i32.add (i32.const -1938123162)) + (i32.add (i32.const 1552356144)) + (i32.add (i32.const -816772020)) + (i32.add (i32.const 1882685317)) + (i32.add (i32.const 1108402017)) + (i32.add (i32.const -953004579)) + (i32.add (i32.const 1620753160)) + (i32.add (i32.const -1985784187)) + (i32.add (i32.const 1312299384)) + (i32.add (i32.const 1119155527)) + (i32.add (i32.const -1359218969)) + (i32.add (i32.const 849063904)) + (i32.add (i32.const -1474886838)) + (i32.add (i32.const 1204303988)) + (i32.add (i32.const -330889338)) + (i32.add (i32.const -1962595241)) + (i32.add (i32.const -1432049526)) + (i32.add (i32.const -845629449)) + (i32.add (i32.const -1476365347)) + (i32.add (i32.const 840555475)) + (i32.add (i32.const -1563548539)) + (i32.add (i32.const -1814496486)) + (i32.add (i32.const 1792380075)) + (i32.add (i32.const -1887554052)) + (i32.add (i32.const 140394221)) + (i32.add (i32.const -1213611349)) + (i32.add (i32.const 1577099192)) + (i32.add (i32.const 805502730)) + (i32.add (i32.const 1063289582)) + (i32.add (i32.const -19921938)) + (i32.add (i32.const 342096960)) + (i32.add (i32.const 641991969)) + (i32.add (i32.const 1003988965)) + (i32.add (i32.const 1516744522)) + (i32.add (i32.const -1155555525)) + (i32.add (i32.const -1533340161)) + (i32.add (i32.const -1207289399)) + (i32.add (i32.const 634276724)) + (i32.add (i32.const -1323232399)) + (i32.add (i32.const 564588544)) + (i32.add (i32.const -2033450404)) + (i32.add (i32.const -559071325)) + (i32.add (i32.const -1485722477)) + (i32.add (i32.const -700331765)) + (i32.add (i32.const 1928427098)) + (i32.add (i32.const -973195970)) + (i32.add (i32.const -2001227812)) + (i32.add (i32.const -198506047)) + (i32.add (i32.const -963662032)) + (i32.add (i32.const -1038433018)) + (i32.add (i32.const 920102320)) + (i32.add (i32.const 688034186)) + (i32.add (i32.const 1390826766)) + (i32.add (i32.const 2066014855)) + (i32.add (i32.const 1915037480)) + (i32.add (i32.const 693780220)) + (i32.add (i32.const 1927368145)) + (i32.add (i32.const 1378433370)) + (i32.add (i32.const 1211481565)) + (i32.add (i32.const 658185239)) + (i32.add (i32.const -1309979799)) + (i32.add (i32.const -113656328)) + (i32.add (i32.const -1697345378)) + (i32.add (i32.const -353263625)) + (i32.add (i32.const -2055294744)) + (i32.add (i32.const 1149424810)) + (i32.add (i32.const 360252798)) + (i32.add (i32.const -1758815389)) + (i32.add (i32.const 1067770607)) + (i32.add (i32.const -807262393)) + (i32.add (i32.const 717447676)) + (i32.add (i32.const -1480603084)) + (i32.add (i32.const 701404676)) + (i32.add (i32.const 1661294972)) + (i32.add (i32.const 489366319)) + (i32.add (i32.const 784006692)) + (i32.add (i32.const 1275804091)) + (i32.add (i32.const -2090458553)) + (i32.add (i32.const 812026847)) + (i32.add (i32.const 1626935205)) + (i32.add (i32.const 1726154795)) + (i32.add (i32.const -1826488197)) + (i32.add (i32.const -319024997)) + (i32.add (i32.const 559752021)) + (i32.add (i32.const -1591574541)) + (i32.add (i32.const -893375365)) + (i32.add (i32.const 22247971)) + (i32.add (i32.const 103545760)) + (i32.add (i32.const 514124850)) + (i32.add (i32.const 1560952254)) + (i32.add (i32.const 1645329525)) + (i32.add (i32.const 609207737)) + (i32.add (i32.const 901241190)) + (i32.add (i32.const -630935917)) + (i32.add (i32.const -1763785848)) + (i32.add (i32.const 1809626248)) + (i32.add (i32.const -1383297458)) + (i32.add (i32.const -327228787)) + (i32.add (i32.const 432646753)) + (i32.add (i32.const 280548119)) + (i32.add (i32.const -16969591)) + (i32.add (i32.const 1784165205)) + (i32.add (i32.const -1858195400)) + (i32.add (i32.const -353417340)) + (i32.add (i32.const 1300038402)) + (i32.add (i32.const 443081712)) + (i32.add (i32.const -771411739)) + (i32.add (i32.const 1999639452)) + (i32.add (i32.const 759486670)) + (i32.add (i32.const 293439296)) + (i32.add (i32.const -422881060)) + (i32.add (i32.const -1896315014)) + (i32.add (i32.const -29692315)) + (i32.add (i32.const -182895964)) + (i32.add (i32.const -771232289)) + (i32.add (i32.const 1267463582)) + (i32.add (i32.const 653474867)) + (i32.add (i32.const -1698421028)) + (i32.add (i32.const 838825498)) + (i32.add (i32.const -1384748966)) + (i32.add (i32.const -2081895895)) + (i32.add (i32.const 163071634)) + (i32.add (i32.const -181231798)) + (i32.add (i32.const -2006674074)) + (i32.add (i32.const 1537985472)) + (i32.add (i32.const -928863095)) + (i32.add (i32.const -40890730)) + (i32.add (i32.const -1363098597)) + (i32.add (i32.const 17751719)) + (i32.add (i32.const -1744704782)) + (i32.add (i32.const -207102604)) + (i32.add (i32.const -1161943958)) + (i32.add (i32.const -342451858)) + (i32.add (i32.const 912375885)) + (i32.add (i32.const -928635042)) + (i32.add (i32.const 352468783)) + (i32.add (i32.const -1526655665)) + (i32.add (i32.const 294828076)) + (i32.add (i32.const 2141922184)) + (i32.add (i32.const -836555102)) + (i32.add (i32.const -673739406)) + (i32.add (i32.const 455545577)) + (i32.add (i32.const 1649841247)) + (i32.add (i32.const -1475144990)) + (i32.add (i32.const 1770112405)) + (i32.add (i32.const -345541824)) + (i32.add (i32.const 1425690356)) + (i32.add (i32.const 1484593085)) + (i32.add (i32.const -1528577284)) + (i32.add (i32.const 1184638818)) + (i32.add (i32.const 918200453)) + (i32.add (i32.const -886231570)) + (i32.add (i32.const 2075455788)) + (i32.add (i32.const -453400633)) + (i32.add (i32.const 1390156778)) + (i32.add (i32.const 89861807)) + (i32.add (i32.const -1798919655)) + (i32.add (i32.const 1469591224)) + (i32.add (i32.const 737463946)) + (i32.add (i32.const 1476308019)) + (i32.add (i32.const -206474738)) + (i32.add (i32.const 302116648)) + (i32.add (i32.const 1831237030)) + (i32.add (i32.const 604549112)) + (i32.add (i32.const 262344545)) + (i32.add (i32.const 1897479332)) + (i32.add (i32.const -392030145)) + (i32.add (i32.const -2040303541)) + (i32.add (i32.const -801579523)) + (i32.add (i32.const -1447846485)) + (i32.add (i32.const 333946625)) + (i32.add (i32.const 403699643)) + (i32.add (i32.const 1090165367)) + (i32.add (i32.const 239360073)) + (i32.add (i32.const -693883451)) + (i32.add (i32.const -1573544760)) + (i32.add (i32.const 415508919)) + (i32.add (i32.const -1309442118)) + (i32.add (i32.const 1358274738)) + (i32.add (i32.const -1553218409)) + (i32.add (i32.const -1510298422)) + (i32.add (i32.const -248206027)) + (i32.add (i32.const -1638893585)) + (i32.add (i32.const -433603536)) + (i32.add (i32.const -1771444530)) + (i32.add (i32.const 833847637)) + (i32.add (i32.const -1099892923)) + (i32.add (i32.const -1914095044)) + (i32.add (i32.const -1428137452)) + (i32.add (i32.const 444570809)) + (i32.add (i32.const -1867013719)) + (i32.add (i32.const -123296996)) + (i32.add (i32.const -1729336713)) + (i32.add (i32.const 359713024)) + (i32.add (i32.const -1483140774)) + (i32.add (i32.const -1547654896)) + (i32.add (i32.const -1801947876)) + (i32.add (i32.const -891401121)) + (i32.add (i32.const -1849410045)) + (i32.add (i32.const -419376594)) + (i32.add (i32.const 104648487)) + (i32.add (i32.const -1033842137)) + (i32.add (i32.const -1613237936)) + (i32.add (i32.const 929954812)) + (i32.add (i32.const -156798517)) + (i32.add (i32.const -964768862)) + (i32.add (i32.const -435664150)) + (i32.add (i32.const -6597752)) + (i32.add (i32.const -121905932)) + (i32.add (i32.const -1056537468)) + (i32.add (i32.const -402793310)) + (i32.add (i32.const 425130340)) + (i32.add (i32.const 654591497)) + (i32.add (i32.const 1428691089)) + (i32.add (i32.const -888264722)) + (i32.add (i32.const 805604676)) + (i32.add (i32.const 234117670)) + (i32.add (i32.const -989211505)) + (i32.add (i32.const -641959880)) + (i32.add (i32.const 2555780)) + (i32.add (i32.const 1176069085)) + (i32.add (i32.const 1466740711)) + (i32.add (i32.const 1950914882)) + (i32.add (i32.const 1946289980)) + (i32.add (i32.const -396878681)) + (i32.add (i32.const 952010276)) + (i32.add (i32.const 402337959)) + (i32.add (i32.const -33257465)) + (i32.add (i32.const 348354678)) + (i32.add (i32.const -1091232842)) + (i32.add (i32.const 505504817)) + (i32.add (i32.const 1805506084)) + (i32.add (i32.const 741103414)) + (i32.add (i32.const 453160048)) + (i32.add (i32.const 1471273746)) + (i32.add (i32.const 1558843684)) + (i32.add (i32.const -375170712)) + (i32.add (i32.const -1892493601)) + (i32.add (i32.const -528689912)) + (i32.add (i32.const 1098130035)) + (i32.add (i32.const -1538951204)) + (i32.add (i32.const -1843063752)) + (i32.add (i32.const -853057519)) + (i32.add (i32.const 250060159)) + (i32.add (i32.const 1363126822)) + (i32.add (i32.const -1086434538)) + (i32.add (i32.const 700897791)) + (i32.add (i32.const 1518007121)) + (i32.add (i32.const 1251413420)) + (i32.add (i32.const 852107114)) + (i32.add (i32.const 2123710895)) + (i32.add (i32.const 700696961)) + (i32.add (i32.const -511406366)) + (i32.add (i32.const -716555498)) + (i32.add (i32.const 1824697091)) + (i32.add (i32.const -798457836)) + (i32.add (i32.const -42080325)) + (i32.add (i32.const -233547050)) + (i32.add (i32.const -401771022)) + (i32.add (i32.const -1262877354)) + (i32.add (i32.const 1408135022)) + (i32.add (i32.const -533434264)) + (i32.add (i32.const -246491962)) + (i32.add (i32.const -401265497)) + (i32.add (i32.const -2086370274)) + (i32.add (i32.const -1186269682)) + (i32.add (i32.const -980121687)) + (i32.add (i32.const -553963732)) + (i32.add (i32.const 506665374)) + (i32.add (i32.const 1925272914)) + (i32.add (i32.const -842126199)) + (i32.add (i32.const 1867410625)) + (i32.add (i32.const 1867628203)) + (i32.add (i32.const 1856903927)) + (i32.add (i32.const -1277050094)) + (i32.add (i32.const -367018628)) + (i32.add (i32.const -376303762)) + (i32.add (i32.const 976023770)) + (i32.add (i32.const -2064069036)) + (i32.add (i32.const -1445774425)) + (i32.add (i32.const 1918504651)) + (i32.add (i32.const 1036630928)) + (i32.add (i32.const -542533790)) + (i32.add (i32.const -692955062)) + (i32.add (i32.const 2044084428)) + (i32.add (i32.const -845782020)) + (i32.add (i32.const 1560928038)) + (i32.add (i32.const 342305192)) + (i32.add (i32.const 78167578)) + (i32.add (i32.const 561239827)) + (i32.add (i32.const 255135363)) + (i32.add (i32.const 1144530757)) + (i32.add (i32.const -1751665412)) + (i32.add (i32.const 423302755)) + (i32.add (i32.const -356635928)) + (i32.add (i32.const -279862160)) + (i32.add (i32.const -1287050430)) + (i32.add (i32.const -1364877653)) + (i32.add (i32.const 1884772368)) + (i32.add (i32.const 444801351)) + (i32.add (i32.const 685519463)) + (i32.add (i32.const 2057074196)) + (i32.add (i32.const -618955899)) + (i32.add (i32.const 1396267669)) + (i32.add (i32.const -918487732)) + (i32.add (i32.const 772635059)) + (i32.add (i32.const -1263005402)) + (i32.add (i32.const -355877152)) + (i32.add (i32.const 1623341722)) + (i32.add (i32.const 237555984)) + (i32.add (i32.const 1304324257)) + (i32.add (i32.const -1712623855)) + (i32.add (i32.const -1423928988)) + (i32.add (i32.const -684356930)) + (i32.add (i32.const -1919240824)) + (i32.add (i32.const -1348081493)) + (i32.add (i32.const 874901738)) + (i32.add (i32.const -1469197418)) + (i32.add (i32.const -618109805)) + (i32.add (i32.const -1498235727)) + (i32.add (i32.const 924100966)) + (i32.add (i32.const 1539079310)) + (i32.add (i32.const 96421230)) + (i32.add (i32.const 969712448)) + (i32.add (i32.const -1934095758)) + (i32.add (i32.const 498494197)) + (i32.add (i32.const 885117793)) + (i32.add (i32.const 1729354376)) + (i32.add (i32.const 186251678)) + (i32.add (i32.const -1833101188)) + (i32.add (i32.const 517153511)) + (i32.add (i32.const 1505800489)) + (i32.add (i32.const -2136080453)) + (i32.add (i32.const 289729974)) + (i32.add (i32.const 1954700104)) + (i32.add (i32.const -488614333)) + (i32.add (i32.const -542465976)) + (i32.add (i32.const -620006902)) + (i32.add (i32.const 185820327)) + (i32.add (i32.const 504754426)) + (i32.add (i32.const 886906953)) + (i32.add (i32.const 1060418018)) + (i32.add (i32.const -1409511616)) + (i32.add (i32.const 1022919210)) + (i32.add (i32.const 1724716423)) + (i32.add (i32.const 571411461)) + (i32.add (i32.const -1141121378)) + (i32.add (i32.const 812428418)) + (i32.add (i32.const 1244664953)) + (i32.add (i32.const -2132590325)) + (i32.add (i32.const 1745334697)) + (i32.add (i32.const -1077093708)) + (i32.add (i32.const 1485615253)) + (i32.add (i32.const -1709112042)) + (i32.add (i32.const -1527531488)) + (i32.add (i32.const 1417496369)) + (i32.add (i32.const 477786351)) + (i32.add (i32.const -1462677913)) + (i32.add (i32.const -1090948288)) + (i32.add (i32.const -70039370)) + (i32.add (i32.const 2060028052)) + (i32.add (i32.const 1934394833)) + (i32.add (i32.const 18321502)) + (i32.add (i32.const 1805951038)) + (i32.add (i32.const 83006496)) + (i32.add (i32.const 1897764800)) + (i32.add (i32.const -2002643443)) + (i32.add (i32.const -175607535)) + (i32.add (i32.const -2007163440)) + (i32.add (i32.const 2113431805)) + (i32.add (i32.const -1110518339)) + (i32.add (i32.const 356303952)) + (i32.add (i32.const 1958780996)) + (i32.add (i32.const -1927970132)) + (i32.add (i32.const -1713768518)) + (i32.add (i32.const 58509245)) + (i32.add (i32.const -458820336)) + (i32.add (i32.const 420901528)) + (i32.add (i32.const 27414098)) + (i32.add (i32.const -1600143020)) + (i32.add (i32.const -953153622)) + (i32.add (i32.const 1259049648)) + (i32.add (i32.const -14387354)) + (i32.add (i32.const -1391983475)) + (i32.add (i32.const -2137439705)) + (i32.add (i32.const -1865723861)) + (i32.add (i32.const 883833153)) + (i32.add (i32.const 549841586)) + (i32.add (i32.const -580096280)) + (i32.add (i32.const -2065713282)) + (i32.add (i32.const -1499805579)) + (i32.add (i32.const 1782686193)) + (i32.add (i32.const -1295809905)) + (i32.add (i32.const -1536609898)) + (i32.add (i32.const 1202117847)) + (i32.add (i32.const -1462637576)) + (i32.add (i32.const -969441052)) + (i32.add (i32.const -657685530)) + (i32.add (i32.const -41943428)) + (i32.add (i32.const -1897476854)) + (i32.add (i32.const -1792925699)) + (i32.add (i32.const -104593331)) + (i32.add (i32.const 1771789989)) + (i32.add (i32.const 574025187)) + (i32.add (i32.const -129123218)) + (i32.add (i32.const 1881072416)) + (i32.add (i32.const -234636199)) + (i32.add (i32.const 419872099)) + (i32.add (i32.const 636990609)) + (i32.add (i32.const 497103246)) + (i32.add (i32.const 306163913)) + (i32.add (i32.const 762206440)) + (i32.add (i32.const 1646344440)) + (i32.add (i32.const -975376125)) + (i32.add (i32.const -1654185809)) + (i32.add (i32.const 1736177901)) + (i32.add (i32.const -1283515100)) + (i32.add (i32.const 422615677)) + (i32.add (i32.const -338060867)) + (i32.add (i32.const 717980509)) + (i32.add (i32.const 1343226892)) + (i32.add (i32.const 489712745)) + (i32.add (i32.const -1919353203)) + (i32.add (i32.const -856499370)) + (i32.add (i32.const 393509281)) + (i32.add (i32.const -1123248307)) + (i32.add (i32.const 2079086036)) + (i32.add (i32.const -387593272)) + (i32.add (i32.const 921291658)) + (i32.add (i32.const -1473342370)) + (i32.add (i32.const -11164816)) + (i32.add (i32.const -330215493)) + (i32.add (i32.const 1828385926)) + (i32.add (i32.const 738672735)) + (i32.add (i32.const -993464271)) + (i32.add (i32.const 1645246409)) + (i32.add (i32.const -1687414741)) + (i32.add (i32.const 439112695)) + (i32.add (i32.const -1343460207)) + (i32.add (i32.const -988987281)) + (i32.add (i32.const -93247124)) + (i32.add (i32.const -737241610)) + (i32.add (i32.const -1311414153)) + (i32.add (i32.const -2103678026)) + (i32.add (i32.const 872844051)) + (i32.add (i32.const 859083040)) + (i32.add (i32.const 1609261692)) + (i32.add (i32.const 788636129)) + (i32.add (i32.const 737939773)) + (i32.add (i32.const 1221256589)) + (i32.add (i32.const 1975864153)) + (i32.add (i32.const -358866282)) + (i32.add (i32.const -1853942646)) + (i32.add (i32.const -1671222392)) + (i32.add (i32.const -773350848)) + (i32.add (i32.const -549746639)) + (i32.add (i32.const 513360565)) + (i32.add (i32.const 1127945380)) + (i32.add (i32.const 1197331866)) + (i32.add (i32.const 1611973671)) + (i32.add (i32.const -1731203907)) + (i32.add (i32.const -1523474588)) + (i32.add (i32.const 955596358)) + (i32.add (i32.const -808461718)) + (i32.add (i32.const -1491503332)) + (i32.add (i32.const 1858080578)) + (i32.add (i32.const -217846456)) + (i32.add (i32.const -1335246360)) + (i32.add (i32.const -1231767563)) + (i32.add (i32.const 1125415624)) + (i32.add (i32.const -1129748110)) + (i32.add (i32.const 1150401697)) + (i32.add (i32.const -646122653)) + (i32.add (i32.const 1130858606)) + (i32.add (i32.const -956782076)) + (i32.add (i32.const -1157176531)) + (i32.add (i32.const 251528441)) + (i32.add (i32.const -1327475303)) + (i32.add (i32.const -520612458)) + (i32.add (i32.const 23088508)) + (i32.add (i32.const -918349454)) + (i32.add (i32.const 787919976)) + (i32.add (i32.const 67046424)) + (i32.add (i32.const -199972201)) + (i32.add (i32.const 1408190625)) + (i32.add (i32.const -1354427395)) + (i32.add (i32.const 2092051944)) + (i32.add (i32.const 1059063921)) + (i32.add (i32.const -392717106)) + (i32.add (i32.const 380419230)) + (i32.add (i32.const -1391196833)) + (i32.add (i32.const -388648021)) + (i32.add (i32.const 1966608974)) + (i32.add (i32.const 126976071)) + (i32.add (i32.const -813590871)) + (i32.add (i32.const 93042873)) + (i32.add (i32.const -489980882)) + (i32.add (i32.const -334029012)) + (i32.add (i32.const -1482959040)) + (i32.add (i32.const 163771153)) + (i32.add (i32.const 794896084)) + (i32.add (i32.const 1762607653)) + (i32.add (i32.const 1329456755)) + (i32.add (i32.const -432544352)) + (i32.add (i32.const -478822723)) + (i32.add (i32.const -1356326862)) + (i32.add (i32.const -1802087626)) + (i32.add (i32.const -1544263899)) + (i32.add (i32.const 627263821)) + (i32.add (i32.const 2034943791)) + (i32.add (i32.const -1944191391)) + (i32.add (i32.const -1675063173)) + (i32.add (i32.const 1627757942)) + (i32.add (i32.const 1302399500)) + (i32.add (i32.const -940359840)) + (i32.add (i32.const 315188747)) + (i32.add (i32.const -1970914095)) + (i32.add (i32.const 1663587814)) + (i32.add (i32.const 374355911)) + (i32.add (i32.const 1772201508)) + (i32.add (i32.const 2088951382)) + (i32.add (i32.const 293616194)) + (i32.add (i32.const 1233671245)) + (i32.add (i32.const 868218842)) + (i32.add (i32.const 1326543494)) + (i32.add (i32.const -1628240648)) + (i32.add (i32.const 1330205160)) + (i32.add (i32.const 175282506)) + (i32.add (i32.const -66680057)) + (i32.add (i32.const 1662040869)) + (i32.add (i32.const 316563265)) + (i32.add (i32.const -1763136563)) + (i32.add (i32.const 1215875736)) + (i32.add (i32.const -86682617)) + (i32.add (i32.const -873675741)) + (i32.add (i32.const 861968187)) + (i32.add (i32.const 1139489651)) + (i32.add (i32.const 1959509741)) + (i32.add (i32.const -188813101)) + (i32.add (i32.const -156553667)) + (i32.add (i32.const -1798361343)) + (i32.add (i32.const 1060957556)) + (i32.add (i32.const 1953945323)) + (i32.add (i32.const 434717918)) + (i32.add (i32.const 672651114)) + (i32.add (i32.const 131924507)) + (i32.add (i32.const -851184856)) + (i32.add (i32.const -2079037077)) + (i32.add (i32.const -506309636)) + (i32.add (i32.const -640377076)) + (i32.add (i32.const 193401783)) + (i32.add (i32.const -1029164980)) + (i32.add (i32.const -451553816)) + (i32.add (i32.const 1186489946)) + (i32.add (i32.const -1589005657)) + (i32.add (i32.const 496474282)) + (i32.add (i32.const -71619591)) + (i32.add (i32.const -1899383072)) + (i32.add (i32.const 1380077363)) + (i32.add (i32.const -2003070569)) + (i32.add (i32.const -397445643)) + (i32.add (i32.const -1271872044)) + (i32.add (i32.const 891998866)) + (i32.add (i32.const -1881014885)) + (i32.add (i32.const -371627474)) + (i32.add (i32.const 2073397987)) + (i32.add (i32.const 502324487)) + (i32.add (i32.const 2135175745)) + (i32.add (i32.const -1942444503)) + (i32.add (i32.const -1994458297)) + (i32.add (i32.const 1483879275)) + (i32.add (i32.const -1190036984)) + (i32.add (i32.const 1246675572)) + (i32.add (i32.const 781107778)) + (i32.add (i32.const 402036181)) + (i32.add (i32.const 945417242)) + (i32.add (i32.const -1734258006)) + (i32.add (i32.const 178071919)) + (i32.add (i32.const 44533654)) + (i32.add (i32.const -949080789)) + (i32.add (i32.const 1333595978)) + (i32.add (i32.const -1759882316)) + (i32.add (i32.const -1102313514)) + (i32.add (i32.const 1642084607)) + (i32.add (i32.const -582468533)) + (i32.add (i32.const -1301912688)) + (i32.add (i32.const -35350831)) + (i32.add (i32.const -1333890940)) + (i32.add (i32.const 948850936)) + (i32.add (i32.const 222786296)) + (i32.add (i32.const 352028838)) + (i32.add (i32.const -1861573922)) + (i32.add (i32.const 999396817)) + (i32.add (i32.const 987430966)) + (i32.add (i32.const 1171174977)) + (i32.add (i32.const 885872927)) + (i32.add (i32.const -1873618039)) + (i32.add (i32.const -1414525864)) + (i32.add (i32.const 375915710)) + (i32.add (i32.const 1758667722)) + (i32.add (i32.const -210759056)) + (i32.add (i32.const -1542199920)) + (i32.add (i32.const -940258507)) + (i32.add (i32.const 353199431)) + (i32.add (i32.const 569295880)) + (i32.add (i32.const -1472608331)) + (i32.add (i32.const 326541950)) + (i32.add (i32.const 55198613)) + (i32.add (i32.const 534299561)) + (i32.add (i32.const 1654536183)) + (i32.add (i32.const 1316535502)) + (i32.add (i32.const -1943175701)) + (i32.add (i32.const -1168926517)) + (i32.add (i32.const -326490038)) + (i32.add (i32.const -1972655575)) + (i32.add (i32.const -957577507)) + (i32.add (i32.const -594915243)) + (i32.add (i32.const -1716104662)) + (i32.add (i32.const 1889678829)) + (i32.add (i32.const 129635677)) + (i32.add (i32.const 1035258608)) + (i32.add (i32.const 300931604)) + (i32.add (i32.const 2083216201)) + (i32.add (i32.const 446691044)) + (i32.add (i32.const 1683224706)) + (i32.add (i32.const -1479796075)) + (i32.add (i32.const 178780935)) + (i32.add (i32.const 821190765)) + (i32.add (i32.const -529645486)) + (i32.add (i32.const 1205388688)) + (i32.add (i32.const -1669538391)) + (i32.add (i32.const 119309446)) + (i32.add (i32.const 1137630419)) + (i32.add (i32.const 1253522248)) + (i32.add (i32.const 1515736759)) + (i32.add (i32.const 1479333158)) + (i32.add (i32.const 1153245476)) + (i32.add (i32.const -700006647)) + (i32.add (i32.const 905594646)) + (i32.add (i32.const 671141641)) + (i32.add (i32.const -827985345)) + (i32.add (i32.const 955830279)) + (i32.add (i32.const 633153013)) + (i32.add (i32.const -1018102070)) + (i32.add (i32.const -858683639)) + (i32.add (i32.const -1866036334)) + (i32.add (i32.const -2134985907)) + (i32.add (i32.const 748794095)) + (i32.add (i32.const 1958227991)) + (i32.add (i32.const -1149903436)) + (i32.add (i32.const -1396190860)) + (i32.add (i32.const 2048105393)) + (i32.add (i32.const -1288315031)) + (i32.add (i32.const 268623089)) + (i32.add (i32.const -1837970224)) + (i32.add (i32.const 811513168)) + (i32.add (i32.const -1518395658)) + (i32.add (i32.const 1380908156)) + (i32.add (i32.const 1949385803)) + (i32.add (i32.const 1869863830)) + (i32.add (i32.const -376971400)) + (i32.add (i32.const -2118999083)) + (i32.add (i32.const -6562954)) + (i32.add (i32.const 1960451706)) + (i32.add (i32.const 739642458)) + (i32.add (i32.const -841031503)) + (i32.add (i32.const -659861669)) + (i32.add (i32.const -1870063767)) + (i32.add (i32.const -97634816)) + (i32.add (i32.const 1016088185)) + (i32.add (i32.const 2004630997)) + (i32.add (i32.const 1220807882)) + (i32.add (i32.const 169999653)) + (i32.add (i32.const 2056226157)) + (i32.add (i32.const 1154716761)) + (i32.add (i32.const -2120433857)) + (i32.add (i32.const 181557577)) + (i32.add (i32.const -962212266)) + (i32.add (i32.const 1163207244)) + (i32.add (i32.const 505602351)) + (i32.add (i32.const -47953883)) + (i32.add (i32.const -1926672143)) + (i32.add (i32.const -1229500194)) + (i32.add (i32.const 1773950741)) + (i32.add (i32.const -2051739062)) + (i32.add (i32.const -1557186418)) + (i32.add (i32.const -1629779139)) + (i32.add (i32.const -2132808213)) + (i32.add (i32.const -718453908)) + (i32.add (i32.const 1978447362)) + (i32.add (i32.const -369472732)) + (i32.add (i32.const 1117900406)) + (i32.add (i32.const 1381542729)) + (i32.add (i32.const -2069192666)) + (i32.add (i32.const 1725519787)) + (i32.add (i32.const -1426325430)) + (i32.add (i32.const 1355131982)) + (i32.add (i32.const -1174423933)) + (i32.add (i32.const 707677592)) + (i32.add (i32.const 523072233)) + (i32.add (i32.const 379287263)) + (i32.add (i32.const -1596754284)) + (i32.add (i32.const 181973338)) + (i32.add (i32.const 1085647032)) + (i32.add (i32.const 1184098171)) + (i32.add (i32.const 1664060731)) + (i32.add (i32.const 423400191)) + (i32.add (i32.const -1239367581)) + (i32.add (i32.const 777691312)) + (i32.add (i32.const 690515220)) + (i32.add (i32.const 773340486)) + (i32.add (i32.const 452256349)) + (i32.add (i32.const -1276171436)) + (i32.add (i32.const 1720236510)) + (i32.add (i32.const 1665571568)) + (i32.add (i32.const 1295704319)) + (i32.add (i32.const 673773484)) + (i32.add (i32.const 438283028)) + (i32.add (i32.const -1638504258)) + (i32.add (i32.const 338268232)) + (i32.add (i32.const -1205016110)) + (i32.add (i32.const 430946510)) + (i32.add (i32.const 1907598369)) + (i32.add (i32.const 1112967630)) + (i32.add (i32.const -1477097161)) + (i32.add (i32.const -1969953010)) + (i32.add (i32.const 370294215)) + (i32.add (i32.const 536225889)) + (i32.add (i32.const -1278280848)) + (i32.add (i32.const -1906656666)) + (i32.add (i32.const 268398048)) + (i32.add (i32.const 769444069)) + (i32.add (i32.const -1195082088)) + (i32.add (i32.const -1013484689)) + (i32.add (i32.const -1290614625)) + (i32.add (i32.const -1170037217)) + (i32.add (i32.const 1212605565)) + (i32.add (i32.const -1177975628)) + (i32.add (i32.const 1253078907)) + (i32.add (i32.const 1638626859)) + (i32.add (i32.const 1602291195)) + (i32.add (i32.const -994405637)) + (i32.add (i32.const 1878707149)) + (i32.add (i32.const 267769827)) + (i32.add (i32.const 1590010200)) + (i32.add (i32.const -1118928060)) + (i32.add (i32.const -1817332500)) + (i32.add (i32.const -1097253646)) + (i32.add (i32.const 564860599)) + (i32.add (i32.const 1817002373)) + (i32.add (i32.const 1407369167)) + (i32.add (i32.const -1811044063)) + (i32.add (i32.const 1912674785)) + (i32.add (i32.const -1128047547)) + (i32.add (i32.const -1218146456)) + (i32.add (i32.const 709131193)) + (i32.add (i32.const 417688762)) + (i32.add (i32.const 925204648)) + (i32.add (i32.const 451665708)) + (i32.add (i32.const -1809192130)) + (i32.add (i32.const -1672903130)) + (i32.add (i32.const 1344716324)) + (i32.add (i32.const -913948940)) + (i32.add (i32.const 1227431344)) + (i32.add (i32.const -22720940)) + (i32.add (i32.const -1714385196)) + (i32.add (i32.const -418390786)) + (i32.add (i32.const -1752087331)) + (i32.add (i32.const -1553634360)) + (i32.add (i32.const -80734532)) + (i32.add (i32.const 722839690)) + (i32.add (i32.const 1196459477)) + (i32.add (i32.const 764176142)) + (i32.add (i32.const 1182812565)) + (i32.add (i32.const 1521715564)) + (i32.add (i32.const 1471202952)) + (i32.add (i32.const -1947262451)) + (i32.add (i32.const 1831036028)) + (i32.add (i32.const 1900302342)) + (i32.add (i32.const 1967620106)) + (i32.add (i32.const -1730376771)) + (i32.add (i32.const -1202618574)) + (i32.add (i32.const -1102921940)) + (i32.add (i32.const -748157002)) + (i32.add (i32.const 1639378948)) + (i32.add (i32.const 1727298494)) + (i32.add (i32.const 229513041)) + (i32.add (i32.const -1905947456)) + (i32.add (i32.const -1853340307)) + (i32.add (i32.const 1141290047)) + (i32.add (i32.const 310472475)) + (i32.add (i32.const -385394543)) + (i32.add (i32.const 931370187)) + (i32.add (i32.const 86744666)) + (i32.add (i32.const -1442739927)) + (i32.add (i32.const -610761111)) + (i32.add (i32.const 692428302)) + (i32.add (i32.const -45408941)) + (i32.add (i32.const -376816031)) + (i32.add (i32.const -262749291)) + (i32.add (i32.const -320310773)) + (i32.add (i32.const -1964446822)) + (i32.add (i32.const -1688159984)) + (i32.add (i32.const -496707488)) + (i32.add (i32.const 1404163952)) + (i32.add (i32.const 769946017)) + (i32.add (i32.const 839481982)) + (i32.add (i32.const 1178104375)) + (i32.add (i32.const 2046448103)) + (i32.add (i32.const -741838383)) + (i32.add (i32.const 574062409)) + (i32.add (i32.const 70129390)) + (i32.add (i32.const 1771654617)) + (i32.add (i32.const 715014779)) + (i32.add (i32.const 95160643)) + (i32.add (i32.const 1892894999)) + (i32.add (i32.const 769858450)) + (i32.add (i32.const 342196853)) + (i32.add (i32.const -1204153331)) + (i32.add (i32.const -1587518702)) + (i32.add (i32.const 40237874)) + (i32.add (i32.const 839906412)) + (i32.add (i32.const -827263004)) + (i32.add (i32.const 1488790751)) + (i32.add (i32.const -631666398)) + (i32.add (i32.const 436358197)) + (i32.add (i32.const -142496193)) + (i32.add (i32.const 1061258000)) + (i32.add (i32.const -699433972)) + (i32.add (i32.const 1600874811)) + (i32.add (i32.const 662201186)) + (i32.add (i32.const -206906981)) + (i32.add (i32.const -621016493)) + (i32.add (i32.const -1253923337)) + (i32.add (i32.const 1983132167)) + (i32.add (i32.const -1379191694)) + (i32.add (i32.const -1795756888)) + (i32.add (i32.const 64861092)) + (i32.add (i32.const -663961417)) + (i32.add (i32.const 45682670)) + (i32.add (i32.const -77241337)) + (i32.add (i32.const -1214580434)) + (i32.add (i32.const -2081042806)) + (i32.add (i32.const 240831311)) + (i32.add (i32.const 897672440)) + (i32.add (i32.const -849490394)) + (i32.add (i32.const -537445305)) + (i32.add (i32.const 1154343422)) + (i32.add (i32.const 2035000050)) + (i32.add (i32.const -951280891)) + (i32.add (i32.const 12520498)) + (i32.add (i32.const 1214291384)) + (i32.add (i32.const 1399169035)) + (i32.add (i32.const 171926755)) + (i32.add (i32.const -1151806889)) + (i32.add (i32.const 944895778)) + (i32.add (i32.const 584900613)) + (i32.add (i32.const 1423451146)) + (i32.add (i32.const -1033672025)) + (i32.add (i32.const 1744313076)) + (i32.add (i32.const 1095873195)) + (i32.add (i32.const 1428201065)) + (i32.add (i32.const -478045053)) + (i32.add (i32.const 998447169)) + (i32.add (i32.const 1159612392)) + (i32.add (i32.const 1996567965)) + (i32.add (i32.const -1817601072)) + (i32.add (i32.const 1884268098)) + (i32.add (i32.const -1308935280)) + (i32.add (i32.const 1270110596)) + (i32.add (i32.const 1397414051)) + (i32.add (i32.const 1036834883)) + (i32.add (i32.const 1566317016)) + (i32.add (i32.const -1675674453)) + (i32.add (i32.const 446287553)) + (i32.add (i32.const -130516662)) + (i32.add (i32.const 1134232028)) + (i32.add (i32.const -1413458450)) + (i32.add (i32.const 82218662)) + (i32.add (i32.const -310019734)) + (i32.add (i32.const 1959201210)) + (i32.add (i32.const 210593029)) + (i32.add (i32.const -638851293)) + (i32.add (i32.const 520431411)) + (i32.add (i32.const -2136226840)) + (i32.add (i32.const -434208705)) + (i32.add (i32.const -987776749)) + (i32.add (i32.const 501600616)) + (i32.add (i32.const -220049517)) + (i32.add (i32.const 1390119971)) + (i32.add (i32.const 429783630)) + (i32.add (i32.const 2060568518)) + (i32.add (i32.const 1632190990)) + (i32.add (i32.const -899371536)) + (i32.add (i32.const -666961902)) + (i32.add (i32.const -1007366490)) + (i32.add (i32.const 235961734)) + (i32.add (i32.const -489587668)) + (i32.add (i32.const 1928233051)) + (i32.add (i32.const -413496566)) + (i32.add (i32.const 470934385)) + (i32.add (i32.const -2114673004)) + (i32.add (i32.const -2046035790)) + (i32.add (i32.const 326477442)) + (i32.add (i32.const 635528684)) + (i32.add (i32.const 1391107236)) + (i32.add (i32.const -1071964955)) + (i32.add (i32.const 1262660830)) + (i32.add (i32.const -1316780266)) + (i32.add (i32.const 1220231906)) + (i32.add (i32.const -497892010)) + (i32.add (i32.const -9962315)) + (i32.add (i32.const 1750743040)) + (i32.add (i32.const -852145146)) + (i32.add (i32.const -1380364795)) + (i32.add (i32.const 1340634533)) + (i32.add (i32.const -1860941350)) + (i32.add (i32.const 1336893892)) + (i32.add (i32.const -112016430)) + (i32.add (i32.const 2084155169)) + (i32.add (i32.const -1691400296)) + (i32.add (i32.const -1010147146)) + (i32.add (i32.const -1057105456)) + (i32.add (i32.const 2057166239)) + (i32.add (i32.const -1693027314)) + (i32.add (i32.const -1918060269)) + (i32.add (i32.const 514754142)) + (i32.add (i32.const -1982596096)) + (i32.add (i32.const -712394505)) + (i32.add (i32.const -1151725834)) + (i32.add (i32.const -906765929)) + (i32.add (i32.const -1620111336)) + (i32.add (i32.const 650402120)) + (i32.add (i32.const -477798813)) + (i32.add (i32.const -1105184382)) + (i32.add (i32.const 1498414785)) + (i32.add (i32.const -874266581)) + (i32.add (i32.const -278095816)) + (i32.add (i32.const -1807309404)) + (i32.add (i32.const -873929137)) + (i32.add (i32.const -1304164026)) + (i32.add (i32.const 1198298675)) + (i32.add (i32.const -892370590)) + (i32.add (i32.const -358080448)) + (i32.add (i32.const -1661037127)) + (i32.add (i32.const -1910011692)) + (i32.add (i32.const -215135365)) + (i32.add (i32.const -38426962)) + (i32.add (i32.const 788000685)) + (i32.add (i32.const 1087149191)) + (i32.add (i32.const 1329033580)) + (i32.add (i32.const 1737607046)) + (i32.add (i32.const -1122369513)) + (i32.add (i32.const 1235445444)) + (i32.add (i32.const -285046043)) + (i32.add (i32.const -1011408333)) + (i32.add (i32.const 5302038)) + (i32.add (i32.const -1523188314)) + (i32.add (i32.const 1151650133)) + (i32.add (i32.const 813581534)) + (i32.add (i32.const 788273894)) + (i32.add (i32.const -869156256)) + (i32.add (i32.const 940489660)) + (i32.add (i32.const 83086319)) + (i32.add (i32.const 1717180379)) + (i32.add (i32.const 1574407559)) + (i32.add (i32.const -610455236)) + (i32.add (i32.const 1702419078)) + (i32.add (i32.const -767057110)) + (i32.add (i32.const -1915558882)) + (i32.add (i32.const -51552680)) + (i32.add (i32.const 1357500220)) + (i32.add (i32.const 1288785913)) + (i32.add (i32.const 463399198)) + (i32.add (i32.const -1146164591)) + (i32.add (i32.const 1149035546)) + (i32.add (i32.const -756215892)) + (i32.add (i32.const -564228667)) + (i32.add (i32.const -147485989)) + (i32.add (i32.const 53235922)) + (i32.add (i32.const 487418246)) + (i32.add (i32.const 3675598)) + (i32.add (i32.const -1199190387)) + (i32.add (i32.const -1276389964)) + (i32.add (i32.const -1605923188)) + (i32.add (i32.const -1847833983)) + (i32.add (i32.const -1448130836)) + (i32.add (i32.const -1201989720)) + (i32.add (i32.const 1654404546)) + (i32.add (i32.const 1536218670)) + (i32.add (i32.const 135630556)) + (i32.add (i32.const 1245584845)) + (i32.add (i32.const -1222487160)) + (i32.add (i32.const 2070957497)) + (i32.add (i32.const -1687840759)) + (i32.add (i32.const -689031066)) + (i32.add (i32.const 893875649)) + (i32.add (i32.const 687667788)) + (i32.add (i32.const -2035644152)) + (i32.add (i32.const 207059547)) + (i32.add (i32.const -570755081)) + (i32.add (i32.const 396392098)) + (i32.add (i32.const 601938304)) + (i32.add (i32.const 2108928465)) + (i32.add (i32.const 639706741)) + (i32.add (i32.const -2114092560)) + (i32.add (i32.const -121468414)) + (i32.add (i32.const -1130756200)) + (i32.add (i32.const -1829829463)) + (i32.add (i32.const -880114379)) + (i32.add (i32.const 2062187156)) + (i32.add (i32.const -504413587)) + (i32.add (i32.const -552641882)) + (i32.add (i32.const -109755066)) + (i32.add (i32.const 80563414)) + (i32.add (i32.const 1016314675)) + (i32.add (i32.const -1749946110)) + (i32.add (i32.const -698999147)) + (i32.add (i32.const -1678361030)) + (i32.add (i32.const -1504978338)) + (i32.add (i32.const -487449044)) + (i32.add (i32.const 773568879)) + (i32.add (i32.const 78452877)) + (i32.add (i32.const -1778305851)) + (i32.add (i32.const -174198992)) + (i32.add (i32.const -957564216)) + (i32.add (i32.const 2113339856)) + (i32.add (i32.const 1462889570)) + (i32.add (i32.const 8208306)) + (i32.add (i32.const 1725141268)) + (i32.add (i32.const -1727037613)) + (i32.add (i32.const 2007535284)) + (i32.add (i32.const 1355935785)) + (i32.add (i32.const 156797722)) + (i32.add (i32.const -599323787)) + (i32.add (i32.const 422499204)) + (i32.add (i32.const -1121268349)) + (i32.add (i32.const -1549207774)) + (i32.add (i32.const -664219336)) + (i32.add (i32.const 1086795099)) + (i32.add (i32.const -1196551354)) + (i32.add (i32.const 997562955)) + (i32.add (i32.const 1389273817)) + (i32.add (i32.const -21615935)) + (i32.add (i32.const -16880046)) + (i32.add (i32.const 1676323167)) + (i32.add (i32.const -920965385)) + (i32.add (i32.const 225363527)) + (i32.add (i32.const -1523446443)) + (i32.add (i32.const -867810062)) + (i32.add (i32.const -903566613)) + (i32.add (i32.const -2144615878)) + (i32.add (i32.const -1472491091)) + (i32.add (i32.const 1032911445)) + (i32.add (i32.const 979210739)) + (i32.add (i32.const -717975247)) + (i32.add (i32.const -8968210)) + (i32.add (i32.const -1623705605)) + (i32.add (i32.const 566986987)) + (i32.add (i32.const 1273260488)) + (i32.add (i32.const 1160758691)) + (i32.add (i32.const 146397923)) + (i32.add (i32.const -153502398)) + (i32.add (i32.const -1856135423)) + (i32.add (i32.const 130063555)) + (i32.add (i32.const 1474148041)) + (i32.add (i32.const -1170681654)) + (i32.add (i32.const 434692946)) + (i32.add (i32.const 67009431)) + (i32.add (i32.const -700107041)) + (i32.add (i32.const 1926009248)) + (i32.add (i32.const -970512)) + (i32.add (i32.const 1918717122)) + (i32.add (i32.const -787089328)) + (i32.add (i32.const 1296859621)) + (i32.add (i32.const -678693348)) + (i32.add (i32.const -541355260)) + (i32.add (i32.const -870247455)) + (i32.add (i32.const -298364177)) + (i32.add (i32.const 518528751)) + (i32.add (i32.const 2624508)) + (i32.add (i32.const 1786979660)) + (i32.add (i32.const 1969506893)) + (i32.add (i32.const -783859155)) + (i32.add (i32.const -1055592856)) + (i32.add (i32.const -861213834)) + (i32.add (i32.const -2140467964)) + (i32.add (i32.const 946396220)) + (i32.add (i32.const 160775435)) + (i32.add (i32.const 2041813326)) + (i32.add (i32.const 2046481705)) + (i32.add (i32.const 2024572610)) + (i32.add (i32.const -1180725263)) + (i32.add (i32.const 882328837)) + (i32.add (i32.const -730459050)) + (i32.add (i32.const 1968150505)) + (i32.add (i32.const -120374791)) + (i32.add (i32.const 1688788729)) + (i32.add (i32.const 272758223)) + (i32.add (i32.const -1782955390)) + (i32.add (i32.const -1176722748)) + (i32.add (i32.const 1220146147)) + (i32.add (i32.const 1119872488)) + (i32.add (i32.const -2106507586)) + (i32.add (i32.const 1660991795)) + (i32.add (i32.const 1975041559)) + (i32.add (i32.const 1627362863)) + (i32.add (i32.const -322440401)) + (i32.add (i32.const 2051784226)) + (i32.add (i32.const -1437663754)) + (i32.add (i32.const -1132540308)) + (i32.add (i32.const 2068283586)) + (i32.add (i32.const 1199398913)) + (i32.add (i32.const 612285799)) + (i32.add (i32.const 2065026072)) + (i32.add (i32.const 1574188701)) + (i32.add (i32.const 1193160894)) + (i32.add (i32.const 1546593830)) + (i32.add (i32.const -1677768432)) + (i32.add (i32.const 1778367815)) + (i32.add (i32.const 579050124)) + (i32.add (i32.const 812065787)) + (i32.add (i32.const 1166418041)) + (i32.add (i32.const -390441657)) + (i32.add (i32.const 657350679)) + (i32.add (i32.const -26302662)) + (i32.add (i32.const -860581963)) + (i32.add (i32.const -374738311)) + (i32.add (i32.const -1735339621)) + (i32.add (i32.const -1813687902)) + (i32.add (i32.const -905795252)) + (i32.add (i32.const 1678254155)) + (i32.add (i32.const 2055814249)) + (i32.add (i32.const 1868123442)) + (i32.add (i32.const -1793203085)) + (i32.add (i32.const 1007011883)) + (i32.add (i32.const -1752227607)) + (i32.add (i32.const 671849031)) + (i32.add (i32.const 1974502121)) + (i32.add (i32.const 1711139560)) + (i32.add (i32.const 1957372394)) + (i32.add (i32.const 1910473755)) + (i32.add (i32.const 284074645)) + (i32.add (i32.const -900508489)) + (i32.add (i32.const -682687222)) + (i32.add (i32.const -122876630)) + (i32.add (i32.const 997154156)) + (i32.add (i32.const 975326101)) + (i32.add (i32.const 1791450269)) + (i32.add (i32.const 1164459385)) + (i32.add (i32.const 507133867)) + (i32.add (i32.const -831658294)) + (i32.add (i32.const -79786612)) + (i32.add (i32.const 1361959071)) + (i32.add (i32.const 1093500309)) + (i32.add (i32.const -1478346503)) + (i32.add (i32.const 839646296)) + (i32.add (i32.const -381969190)) + (i32.add (i32.const 1589358026)) + (i32.add (i32.const 1321347672)) + (i32.add (i32.const 296356375)) + (i32.add (i32.const -1958120505)) + (i32.add (i32.const -1438887740)) + (i32.add (i32.const -1006653533)) + (i32.add (i32.const -1307930229)) + (i32.add (i32.const -1904456872)) + (i32.add (i32.const 523047383)) + (i32.add (i32.const -1499871185)) + (i32.add (i32.const 1424854268)) + (i32.add (i32.const -1298511318)) + (i32.add (i32.const 996536281)) + (i32.add (i32.const 1972676253)) + (i32.add (i32.const -773287107)) + (i32.add (i32.const -938697379)) + (i32.add (i32.const 1699018956)) + (i32.add (i32.const 1685049157)) + (i32.add (i32.const 907297644)) + (i32.add (i32.const -1719616415)) + (i32.add (i32.const 1407205777)) + (i32.add (i32.const 928782812)) + (i32.add (i32.const -1651331581)) + (i32.add (i32.const -2061264611)) + (i32.add (i32.const -1463167556)) + (i32.add (i32.const -1201649076)) + (i32.add (i32.const -795800767)) + (i32.add (i32.const 1364116374)) + (i32.add (i32.const 1518529016)) + (i32.add (i32.const 798615209)) + (i32.add (i32.const 604736228)) + (i32.add (i32.const -1671205099)) + (i32.add (i32.const 1693648533)) + (i32.add (i32.const 1321917849)) + (i32.add (i32.const -64812692)) + (i32.add (i32.const -290124539)) + (i32.add (i32.const 908892401)) + (i32.add (i32.const 1025094373)) + (i32.add (i32.const 528581585)) + (i32.add (i32.const -1300721960)) + (i32.add (i32.const 1518225324)) + (i32.add (i32.const -449037628)) + (i32.add (i32.const -2042105369)) + (i32.add (i32.const -174736557)) + (i32.add (i32.const 1005860390)) + (i32.add (i32.const 1136913416)) + (i32.add (i32.const 1740834747)) + (i32.add (i32.const 1831454827)) + (i32.add (i32.const -1573690478)) + (i32.add (i32.const -1674748405)) + (i32.add (i32.const -1913080253)) + (i32.add (i32.const -1716906781)) + (i32.add (i32.const -191363169)) + (i32.add (i32.const -1898202364)) + (i32.add (i32.const 2092514175)) + (i32.add (i32.const -998165687)) + (i32.add (i32.const -1354487401)) + (i32.add (i32.const -861360347)) + (i32.add (i32.const 582434226)) + (i32.add (i32.const -2104432950)) + (i32.add (i32.const 1737622722)) + (i32.add (i32.const -1563505491)) + (i32.add (i32.const 1194734089)) + (i32.add (i32.const -830886706)) + (i32.add (i32.const 1131965906)) + (i32.add (i32.const 343673128)) + (i32.add (i32.const -2037308148)) + (i32.add (i32.const 558411680)) + (i32.add (i32.const -1253183812)) + (i32.add (i32.const -1989316567)) + (i32.add (i32.const 1314573875)) + (i32.add (i32.const 1999821263)) + (i32.add (i32.const 1420586367)) + (i32.add (i32.const -231918892)) + (i32.add (i32.const -1919417635)) + (i32.add (i32.const -1317830685)) + (i32.add (i32.const 713651413)) + (i32.add (i32.const 1793597408)) + (i32.add (i32.const 1143598365)) + (i32.add (i32.const -966168948)) + (i32.add (i32.const 1295585480)) + (i32.add (i32.const 1757953821)) + (i32.add (i32.const 570047816)) + (i32.add (i32.const -1239166191)) + (i32.add (i32.const -859225761)) + (i32.add (i32.const -1260565282)) + (i32.add (i32.const -662514812)) + (i32.add (i32.const -1279016042)) + (i32.add (i32.const 410663680)) + (i32.add (i32.const -1659784598)) + (i32.add (i32.const -973192435)) + (i32.add (i32.const 1352056236)) + (i32.add (i32.const -2096340577)) + (i32.add (i32.const 1802723665)) + (i32.add (i32.const 336148255)) + (i32.add (i32.const 985579151)) + (i32.add (i32.const 1509271908)) + (i32.add (i32.const -1332107975)) + (i32.add (i32.const 1597626434)) + (i32.add (i32.const -1547493963)) + (i32.add (i32.const -459816946)) + (i32.add (i32.const -418913540)) + (i32.add (i32.const 1749328903)) + (i32.add (i32.const -226479805)) + (i32.add (i32.const -795386462)) + (i32.add (i32.const 725649527)) + (i32.add (i32.const -461713723)) + (i32.add (i32.const -1821252496)) + (i32.add (i32.const -1096628218)) + (i32.add (i32.const -1262487996)) + (i32.add (i32.const -642663014)) + (i32.add (i32.const 518250920)) + (i32.add (i32.const 234469275)) + (i32.add (i32.const -1901053798)) + (i32.add (i32.const 1487592053)) + (i32.add (i32.const 994337306)) + (i32.add (i32.const 1158880913)) + (i32.add (i32.const 2095762975)) + (i32.add (i32.const -692562002)) + (i32.add (i32.const 1756609028)) + (i32.add (i32.const -1886830278)) + (i32.add (i32.const 163822933)) + (i32.add (i32.const 812562591)) + (i32.add (i32.const -1860382349)) + (i32.add (i32.const 521941588)) + (i32.add (i32.const -1188843663)) + (i32.add (i32.const -2030321009)) + (i32.add (i32.const -1909874179)) + (i32.add (i32.const 1928060830)) + (i32.add (i32.const 1148595776)) + (i32.add (i32.const 1803353730)) + (i32.add (i32.const -1244682772)) + (i32.add (i32.const 417978728)) + (i32.add (i32.const -116168720)) + (i32.add (i32.const 1441296061)) + (i32.add (i32.const 1785861905)) + (i32.add (i32.const -1664971203)) + (i32.add (i32.const 1867785885)) + (i32.add (i32.const -139865476)) + (i32.add (i32.const 109850937)) + (i32.add (i32.const 1652372942)) + (i32.add (i32.const 1476116627)) + (i32.add (i32.const 395726013)) + (i32.add (i32.const -935114525)) + (i32.add (i32.const -825675868)) + (i32.add (i32.const 372381584)) + (i32.add (i32.const 1521276160)) + (i32.add (i32.const -415945553)) + (i32.add (i32.const 1215985194)) + (i32.add (i32.const 993156223)) + (i32.add (i32.const -1425262526)) + (i32.add (i32.const -522171236)) + (i32.add (i32.const -302848342)) + (i32.add (i32.const 1070890918)) + (i32.add (i32.const 306452691)) + (i32.add (i32.const -1871990348)) + (i32.add (i32.const -1350586334)) + (i32.add (i32.const -596867409)) + (i32.add (i32.const -1954938353)) + (i32.add (i32.const 1554896751)) + (i32.add (i32.const -62902120)) + (i32.add (i32.const -1000971962)) + (i32.add (i32.const -1254878504)) + (i32.add (i32.const -1418689707)) + (i32.add (i32.const 100698268)) + (i32.add (i32.const 473966633)) + (i32.add (i32.const 2747069)) + (i32.add (i32.const -1585889659)) + (i32.add (i32.const 563110787)) + (i32.add (i32.const 179761312)) + (i32.add (i32.const -1695516981)) + (i32.add (i32.const 1188748013)) + (i32.add (i32.const -1760776071)) + (i32.add (i32.const -141219795)) + (i32.add (i32.const 1794645355)) + (i32.add (i32.const 2124843861)) + (i32.add (i32.const 1013340191)) + (i32.add (i32.const 119295878)) + (i32.add (i32.const -1867895098)) + (i32.add (i32.const 1065471320)) + (i32.add (i32.const -1025977296)) + (i32.add (i32.const 496775324)) + (i32.add (i32.const 565033728)) + (i32.add (i32.const -1238756236)) + (i32.add (i32.const -1577953268)) + (i32.add (i32.const -2020726685)) + (i32.add (i32.const 955288806)) + (i32.add (i32.const -1895387569)) + (i32.add (i32.const -512821838)) + (i32.add (i32.const 329964677)) + (i32.add (i32.const 1035123896)) + (i32.add (i32.const 1257971099)) + (i32.add (i32.const -1879531535)) + (i32.add (i32.const 398207572)) + (i32.add (i32.const -1680588386)) + (i32.add (i32.const -197700329)) + (i32.add (i32.const 1626960857)) + (i32.add (i32.const 1993114936)) + (i32.add (i32.const -1601096745)) + (i32.add (i32.const -403100786)) + (i32.add (i32.const -1958670115)) + (i32.add (i32.const -2086033200)) + (i32.add (i32.const 869086454)) + (i32.add (i32.const 1168199235)) + (i32.add (i32.const -1757160018)) + (i32.add (i32.const 611870705)) + (i32.add (i32.const 1232046114)) + (i32.add (i32.const -1640694969)) + (i32.add (i32.const -1349402069)) + (i32.add (i32.const -1120570963)) + (i32.add (i32.const -1704479577)) + (i32.add (i32.const -481727412)) + (i32.add (i32.const 1024823241)) + (i32.add (i32.const 131832842)) + (i32.add (i32.const -1843754319)) + (i32.add (i32.const 829864674)) + (i32.add (i32.const 1198048552)) + (i32.add (i32.const -1339939223)) + (i32.add (i32.const -834679458)) + (i32.add (i32.const -2026556520)) + (i32.add (i32.const 1718710379)) + (i32.add (i32.const -1123843926)) + (i32.add (i32.const -648520103)) + (i32.add (i32.const 369757826)) + (i32.add (i32.const -1292742910)) + (i32.add (i32.const 1610378654)) + (i32.add (i32.const -27545011)) + (i32.add (i32.const -350131022)) + (i32.add (i32.const 834318889)) + (i32.add (i32.const 1684957163)) + (i32.add (i32.const 1657250078)) + (i32.add (i32.const -1785127318)) + (i32.add (i32.const 1679021679)) + (i32.add (i32.const 1164974791)) + (i32.add (i32.const 795222396)) + (i32.add (i32.const 2062068598)) + (i32.add (i32.const 964002365)) + (i32.add (i32.const -1307837889)) + (i32.add (i32.const 1357719106)) + (i32.add (i32.const -1812716475)) + (i32.add (i32.const 124559872)) + (i32.add (i32.const 1627744125)) + (i32.add (i32.const 2073044817)) + (i32.add (i32.const 554682895)) + (i32.add (i32.const -1763645173)) + (i32.add (i32.const 826786400)) + (i32.add (i32.const 1974274012)) + (i32.add (i32.const 1253178001)) + (i32.add (i32.const 544921263)) + (i32.add (i32.const -1214724132)) + (i32.add (i32.const -1444134054)) + (i32.add (i32.const 302041881)) + (i32.add (i32.const -1321619923)) + (i32.add (i32.const 804800096)) + (i32.add (i32.const 14106316)) + (i32.add (i32.const 655075701)) + (i32.add (i32.const 1284086831)) + (i32.add (i32.const 901908722)) + (i32.add (i32.const 1094850485)) + (i32.add (i32.const 2073038007)) + (i32.add (i32.const -1911671040)) + (i32.add (i32.const -1682868371)) + (i32.add (i32.const 389479416)) + (i32.add (i32.const -63212782)) + (i32.add (i32.const -610123784)) + (i32.add (i32.const 1369884391)) + (i32.add (i32.const -889999951)) + (i32.add (i32.const 447660537)) + (i32.add (i32.const -588458249)) + (i32.add (i32.const 115441233)) + (i32.add (i32.const 685085144)) + (i32.add (i32.const 1516718534)) + (i32.add (i32.const 52916933)) + (i32.add (i32.const -208101563)) + (i32.add (i32.const 1313892749)) + (i32.add (i32.const -1411009792)) + (i32.add (i32.const -987459767)) + (i32.add (i32.const 2022392546)) + (i32.add (i32.const -2116557732)) + (i32.add (i32.const -18494708)) + (i32.add (i32.const 561756373)) + (i32.add (i32.const 1416708970)) + (i32.add (i32.const 1856227540)) + (i32.add (i32.const 2141183233)) + (i32.add (i32.const 1756786952)) + (i32.add (i32.const 2084227704)) + (i32.add (i32.const 686573058)) + (i32.add (i32.const 241230566)) + (i32.add (i32.const -290271541)) + (i32.add (i32.const 894460459)) + (i32.add (i32.const -1653310016)) + (i32.add (i32.const 319320353)) + (i32.add (i32.const 1644732812)) + (i32.add (i32.const 294343872)) + (i32.add (i32.const 442646505)) + (i32.add (i32.const 1023227550)) + (i32.add (i32.const -316587515)) + (i32.add (i32.const 924072634)) + (i32.add (i32.const -812941807)) + (i32.add (i32.const -1194304817)) + (i32.add (i32.const -1689796783)) + (i32.add (i32.const 1424157478)) + (i32.add (i32.const -918066169)) + (i32.add (i32.const 1734148503)) + (i32.add (i32.const -1899193417)) + (i32.add (i32.const 1822732037)) + (i32.add (i32.const 82634361)) + (i32.add (i32.const -1651955887)) + (i32.add (i32.const 649090181)) + (i32.add (i32.const -454271930)) + (i32.add (i32.const -1230271103)) + (i32.add (i32.const -2144463191)) + (i32.add (i32.const -1872129613)) + (i32.add (i32.const -669286269)) + (i32.add (i32.const 1737315292)) + (i32.add (i32.const -1627778750)) + (i32.add (i32.const 1229426053)) + (i32.add (i32.const 40756748)) + (i32.add (i32.const 1930952082)) + (i32.add (i32.const 1273862306)) + (i32.add (i32.const -77773321)) + (i32.add (i32.const 290906868)) + (i32.add (i32.const 1026775976)) + (i32.add (i32.const 2013009432)) + (i32.add (i32.const -126236783)) + (i32.add (i32.const -1714775419)) + (i32.add (i32.const -885891569)) + (i32.add (i32.const 669054625)) + (i32.add (i32.const -814755346)) + (i32.add (i32.const -1786386332)) + (i32.add (i32.const 1127061643)) + (i32.add (i32.const 544232064)) + (i32.add (i32.const 1227210541)) + (i32.add (i32.const 400474002)) + (i32.add (i32.const -529784170)) + (i32.add (i32.const -84717058)) + (i32.add (i32.const 2042220618)) + (i32.add (i32.const -680218980)) + (i32.add (i32.const 831290804)) + (i32.add (i32.const 1221017465)) + (i32.add (i32.const 580312375)) + (i32.add (i32.const 362770962)) + (i32.add (i32.const 571122118)) + (i32.add (i32.const -1631485688)) + (i32.add (i32.const 1827027234)) + (i32.add (i32.const 490577629)) + (i32.add (i32.const 1119757690)) + (i32.add (i32.const -1405841389)) + (i32.add (i32.const -1422358940)) + (i32.add (i32.const 823348183)) + (i32.add (i32.const 806075379)) + (i32.add (i32.const 1726356526)) + (i32.add (i32.const -2010004402)) + (i32.add (i32.const -23279709)) + (i32.add (i32.const 1953528473)) + (i32.add (i32.const 1210184106)) + (i32.add (i32.const 809929500)) + (i32.add (i32.const -716052254)) + (i32.add (i32.const -1296204997)) + (i32.add (i32.const -672642129)) + (i32.add (i32.const 1380845633)) + (i32.add (i32.const 1415117796)) + (i32.add (i32.const -1286880819)) + (i32.add (i32.const -760912608)) + (i32.add (i32.const -784031789)) + (i32.add (i32.const 2145455598)) + (i32.add (i32.const 1660127246)) + (i32.add (i32.const 1968046761)) + (i32.add (i32.const -279186986)) + (i32.add (i32.const 2122653010)) + (i32.add (i32.const -771481682)) + (i32.add (i32.const 1893281873)) + (i32.add (i32.const 112263825)) + (i32.add (i32.const -166260658)) + (i32.add (i32.const -1807985025)) + (i32.add (i32.const -1324586582)) + (i32.add (i32.const 1884711617)) + (i32.add (i32.const 1676864432)) + (i32.add (i32.const 843136648)) + (i32.add (i32.const 950938091)) + (i32.add (i32.const -516473569)) + (i32.add (i32.const 1671997106)) + (i32.add (i32.const 265219463)) + (i32.add (i32.const 2044251391)) + (i32.add (i32.const 1054190445)) + (i32.add (i32.const 1472844216)) + (i32.add (i32.const -659566032)) + (i32.add (i32.const -324216889)) + (i32.add (i32.const -820449762)) + (i32.add (i32.const 2073910709)) + (i32.add (i32.const 1102524676)) + (i32.add (i32.const -651317227)) + (i32.add (i32.const -1331450159)) + (i32.add (i32.const -1833884057)) + (i32.add (i32.const -680312413)) + (i32.add (i32.const 1717292138)) + (i32.add (i32.const 834127334)) + (i32.add (i32.const -2114759305)) + (i32.add (i32.const 430441889)) + (i32.add (i32.const -1433702103)) + (i32.add (i32.const 402401506)) + (i32.add (i32.const -1117928182)) + (i32.add (i32.const -396904187)) + (i32.add (i32.const -301273908)) + (i32.add (i32.const -1145153132)) + (i32.add (i32.const -235445163)) + (i32.add (i32.const 746277875)) + (i32.add (i32.const -1859407992)) + (i32.add (i32.const -2093531797)) + (i32.add (i32.const 1445666271)) + (i32.add (i32.const 458871318)) + (i32.add (i32.const 342376635)) + (i32.add (i32.const -2029192552)) + (i32.add (i32.const 47988230)) + (i32.add (i32.const 2108573799)) + (i32.add (i32.const 395186282)) + (i32.add (i32.const 1132698818)) + (i32.add (i32.const -1220861293)) + (i32.add (i32.const -30581980)) + (i32.add (i32.const 1129464357)) + (i32.add (i32.const 12724817)) + (i32.add (i32.const -283464662)) + (i32.add (i32.const -1681110916)) + (i32.add (i32.const 1265753539)) + (i32.add (i32.const -696279904)) + (i32.add (i32.const 391976334)) + (i32.add (i32.const 1797784041)) + (i32.add (i32.const 1644294033)) + (i32.add (i32.const -1455333771)) + (i32.add (i32.const -1979912527)) + (i32.add (i32.const -861958410)) + (i32.add (i32.const -622014423)) + (i32.add (i32.const 2127672849)) + (i32.add (i32.const -866291615)) + (i32.add (i32.const 1912634654)) + (i32.add (i32.const 221090653)) + (i32.add (i32.const -1598287229)) + (i32.add (i32.const -110928471)) + (i32.add (i32.const -978701067)) + (i32.add (i32.const -611402823)) + (i32.add (i32.const 1883072612)) + (i32.add (i32.const 597092262)) + (i32.add (i32.const -2068936350)) + (i32.add (i32.const -767375956)) + (i32.add (i32.const 21967955)) + (i32.add (i32.const 397767086)) + (i32.add (i32.const 1252286348)) + (i32.add (i32.const 1490464765)) + (i32.add (i32.const -870653944)) + (i32.add (i32.const -1942769166)) + (i32.add (i32.const 2074433851)) + (i32.add (i32.const -1235879985)) + (i32.add (i32.const 235354099)) + (i32.add (i32.const -1792892729)) + (i32.add (i32.const -1782252676)) + (i32.add (i32.const 2059403216)) + (i32.add (i32.const 470887808)) + (i32.add (i32.const -907916617)) + (i32.add (i32.const 1563998936)) + (i32.add (i32.const 195175642)) + (i32.add (i32.const -1639622355)) + (i32.add (i32.const 1234520671)) + (i32.add (i32.const -740765056)) + (i32.add (i32.const 2002784357)) + (i32.add (i32.const -2005460459)) + (i32.add (i32.const -960272638)) + (i32.add (i32.const -1300792180)) + (i32.add (i32.const 1163800615)) + (i32.add (i32.const -1996950970)) + (i32.add (i32.const -768162607)) + (i32.add (i32.const -1812247662)) + (i32.add (i32.const 2058997973)) + (i32.add (i32.const -516913982)) + (i32.add (i32.const -1573716886)) + (i32.add (i32.const -1553759397)) + (i32.add (i32.const -1131770127)) + (i32.add (i32.const -249175715)) + (i32.add (i32.const 138439609)) + (i32.add (i32.const -368399721)) + (i32.add (i32.const -2105621168)) + (i32.add (i32.const 780209873)) + (i32.add (i32.const 1877727443)) + (i32.add (i32.const 514429106)) + (i32.add (i32.const -576785114)) + (i32.add (i32.const -1482546163)) + (i32.add (i32.const -1055875348)) + (i32.add (i32.const 1786216903)) + (i32.add (i32.const 75250856)) + (i32.add (i32.const 1950030636)) + (i32.add (i32.const 1735786112)) + (i32.add (i32.const -104358777)) + (i32.add (i32.const 961197059)) + (i32.add (i32.const 836088007)) + (i32.add (i32.const 848415601)) + (i32.add (i32.const -1681755182)) + (i32.add (i32.const -1821069518)) + (i32.add (i32.const 1455444699)) + (i32.add (i32.const 1924473574)) + (i32.add (i32.const -1075425545)) + (i32.add (i32.const 1444074183)) + (i32.add (i32.const 1508339819)) + (i32.add (i32.const -2069515351)) + (i32.add (i32.const -1300936091)) + (i32.add (i32.const 1000319758)) + (i32.add (i32.const -1254943830)) + (i32.add (i32.const -1869018620)) + (i32.add (i32.const 371904114)) + (i32.add (i32.const 1135233360)) + (i32.add (i32.const -1025853337)) + (i32.add (i32.const 56616683)) + (i32.add (i32.const -1007716695)) + (i32.add (i32.const -643531108)) + (i32.add (i32.const -1335399127)) + (i32.add (i32.const 1731690413)) + (i32.add (i32.const 655534953)) + (i32.add (i32.const -1095984257)) + (i32.add (i32.const -1445287340)) + (i32.add (i32.const 1904307659)) + (i32.add (i32.const 408849904)) + (i32.add (i32.const -1441720695)) + (i32.add (i32.const -1449603262)) + (i32.add (i32.const -739047645)) + (i32.add (i32.const 1157745633)) + (i32.add (i32.const -633598063)) + (i32.add (i32.const 364961546)) + (i32.add (i32.const -154769269)) + (i32.add (i32.const -734389759)) + (i32.add (i32.const 1645156230)) + (i32.add (i32.const -1789078936)) + (i32.add (i32.const 1633498529)) + (i32.add (i32.const 1575334533)) + (i32.add (i32.const 1391113639)) + (i32.add (i32.const 104502351)) + (i32.add (i32.const 2113011909)) + (i32.add (i32.const 1167404635)) + (i32.add (i32.const 1239047249)) + (i32.add (i32.const 2097006454)) + (i32.add (i32.const -1442757801)) + (i32.add (i32.const -951190523)) + (i32.add (i32.const -242289960)) + (i32.add (i32.const -1144995342)) + (i32.add (i32.const -536422556)) + (i32.add (i32.const 1577804355)) + (i32.add (i32.const -457033797)) + (i32.add (i32.const 102370103)) + (i32.add (i32.const 1979791355)) + (i32.add (i32.const -1894823152)) + (i32.add (i32.const -447932036)) + (i32.add (i32.const 1810615068)) + (i32.add (i32.const -2045689563)) + (i32.add (i32.const -107688065)) + (i32.add (i32.const -415515813)) + (i32.add (i32.const -2017585997)) + (i32.add (i32.const 1468580056)) + (i32.add (i32.const 1158678853)) + (i32.add (i32.const 1062770043)) + (i32.add (i32.const 570512344)) + (i32.add (i32.const -1567178813)) + (i32.add (i32.const 1448809998)) + (i32.add (i32.const 1632732685)) + (i32.add (i32.const 1224143231)) + (i32.add (i32.const -959173521)) + (i32.add (i32.const 303733140)) + (i32.add (i32.const -1446596411)) + (i32.add (i32.const -541977168)) + (i32.add (i32.const 1950276558)) + (i32.add (i32.const 167925820)) + (i32.add (i32.const -991584140)) + (i32.add (i32.const -1598133045)) + (i32.add (i32.const 1954911842)) + (i32.add (i32.const -2100470639)) + (i32.add (i32.const 2024142548)) + (i32.add (i32.const 1897944651)) + (i32.add (i32.const -199183818)) + (i32.add (i32.const -1400923527)) + (i32.add (i32.const -1943250352)) + (i32.add (i32.const -279274868)) + (i32.add (i32.const -1385991456)) + (i32.add (i32.const -29108978)) + (i32.add (i32.const 503361310)) + (i32.add (i32.const 1124323495)) + (i32.add (i32.const 1931085477)) + (i32.add (i32.const -552800142)) + (i32.add (i32.const 29118768)) + (i32.add (i32.const 896425381)) + (i32.add (i32.const -270846239)) + (i32.add (i32.const 893576722)) + (i32.add (i32.const 1136887012)) + (i32.add (i32.const -1083786872)) + (i32.add (i32.const -1171693131)) + (i32.add (i32.const 552839628)) + (i32.add (i32.const 1687896842)) + (i32.add (i32.const -1651969631)) + (i32.add (i32.const -532180665)) + (i32.add (i32.const -1958088103)) + (i32.add (i32.const 1108678135)) + (i32.add (i32.const -1028754384)) + (i32.add (i32.const 2090485808)) + (i32.add (i32.const -613875979)) + (i32.add (i32.const 1917589244)) + (i32.add (i32.const 2008596979)) + (i32.add (i32.const 1919479891)) + (i32.add (i32.const 575306972)) + (i32.add (i32.const 674938213)) + (i32.add (i32.const -645023791)) + (i32.add (i32.const 1176509538)) + (i32.add (i32.const -596073446)) + (i32.add (i32.const 1932432803)) + (i32.add (i32.const -310982223)) + (i32.add (i32.const -660898549)) + (i32.add (i32.const -425176370)) + (i32.add (i32.const 1630319711)) + (i32.add (i32.const -1204813980)) + (i32.add (i32.const -1795438315)) + (i32.add (i32.const 1447603895)) + (i32.add (i32.const 248299899)) + (i32.add (i32.const -1486721944)) + (i32.add (i32.const -344529282)) + (i32.add (i32.const -1954548037)) + (i32.add (i32.const 1575307145)) + (i32.add (i32.const 1956595278)) + (i32.add (i32.const 1676698157)) + (i32.add (i32.const -211049093)) + (i32.add (i32.const 1687296099)) + (i32.add (i32.const 1427365960)) + (i32.add (i32.const -1291938371)) + (i32.add (i32.const -716444629)) + (i32.add (i32.const 1184299445)) + (i32.add (i32.const -1972453235)) + (i32.add (i32.const -916020005)) + (i32.add (i32.const 1417250833)) + (i32.add (i32.const 686179862)) + (i32.add (i32.const 749141342)) + (i32.add (i32.const -413084987)) + (i32.add (i32.const -120918649)) + (i32.add (i32.const -15394345)) + (i32.add (i32.const 119768128)) + (i32.add (i32.const -502055279)) + (i32.add (i32.const 1567268989)) + (i32.add (i32.const 2070826535)) + (i32.add (i32.const 1499971822)) + (i32.add (i32.const 1036975818)) + (i32.add (i32.const -1118110444)) + (i32.add (i32.const -800560232)) + (i32.add (i32.const -1795622255)) + (i32.add (i32.const -1327760444)) + (i32.add (i32.const -1108103603)) + (i32.add (i32.const -575458914)) + (i32.add (i32.const 877010616)) + (i32.add (i32.const 686980972)) + (i32.add (i32.const 1995819342)) + (i32.add (i32.const 1840255511)) + (i32.add (i32.const 431334034)) + (i32.add (i32.const -1082473031)) + (i32.add (i32.const 1931217557)) + (i32.add (i32.const -63548645)) + (i32.add (i32.const 1111144272)) + (i32.add (i32.const -730191943)) + (i32.add (i32.const 1382384468)) + (i32.add (i32.const 629853427)) + (i32.add (i32.const 327504849)) + (i32.add (i32.const -1088079629)) + (i32.add (i32.const 539177556)) + (i32.add (i32.const 566731519)) + (i32.add (i32.const -59565840)) + (i32.add (i32.const -668127949)) + (i32.add (i32.const -204052610)) + (i32.add (i32.const -6962864)) + (i32.add (i32.const 1599114266)) + (i32.add (i32.const 1651043648)) + (i32.add (i32.const 584665060)) + (i32.add (i32.const 622868085)) + (i32.add (i32.const 561498541)) + (i32.add (i32.const 1187876299)) + (i32.add (i32.const -1017441419)) + (i32.add (i32.const 2102016304)) + (i32.add (i32.const 2086972497)) + (i32.add (i32.const -617670550)) + (i32.add (i32.const -1484509442)) + (i32.add (i32.const -748673208)) + (i32.add (i32.const 1246318333)) + (i32.add (i32.const 1099172063)) + (i32.add (i32.const 970031771)) + (i32.add (i32.const -1197877434)) + (i32.add (i32.const 291541392)) + (i32.add (i32.const -889645093)) + (i32.add (i32.const 1479189642)) + (i32.add (i32.const -1102537271)) + (i32.add (i32.const 2007557517)) + (i32.add (i32.const 226290360)) + (i32.add (i32.const -2131993141)) + (i32.add (i32.const 1727844973)) + (i32.add (i32.const -118520745)) + (i32.add (i32.const 1422164279)) + (i32.add (i32.const 2016161529)) + (i32.add (i32.const -1391318622)) + (i32.add (i32.const -385314104)) + (i32.add (i32.const 720565763)) + (i32.add (i32.const -1378777380)) + (i32.add (i32.const 1517047884)) + (i32.add (i32.const -564569658)) + (i32.add (i32.const -391144864)) + (i32.add (i32.const -873747706)) + (i32.add (i32.const -37011082)) + (i32.add (i32.const -932147282)) + (i32.add (i32.const 1700916448)) + (i32.add (i32.const -523481046)) + (i32.add (i32.const 325946609)) + (i32.add (i32.const -511881402)) + (i32.add (i32.const -287880380)) + (i32.add (i32.const -1419381278)) + (i32.add (i32.const -678016872)) + (i32.add (i32.const 964060287)) + (i32.add (i32.const -531538916)) + (i32.add (i32.const -317465606)) + (i32.add (i32.const -537093155)) + (i32.add (i32.const -1815898062)) + (i32.add (i32.const -368946117)) + (i32.add (i32.const -630097340)) + (i32.add (i32.const -2034233878)) + (i32.add (i32.const 481386117)) + (i32.add (i32.const 1128562872)) + (i32.add (i32.const -523263655)) + (i32.add (i32.const 595300160)) + (i32.add (i32.const -648041866)) + (i32.add (i32.const 1304977093)) + (i32.add (i32.const -718114067)) + (i32.add (i32.const 675900273)) + (i32.add (i32.const -865431514)) + (i32.add (i32.const -1027736543)) + (i32.add (i32.const 775644071)) + (i32.add (i32.const 805555046)) + (i32.add (i32.const -1764696743)) + (i32.add (i32.const -184197517)) + (i32.add (i32.const 175804503)) + (i32.add (i32.const -1912425632)) + (i32.add (i32.const -1030458343)) + (i32.add (i32.const 787750928)) + (i32.add (i32.const 845014094)) + (i32.add (i32.const 707077234)) + (i32.add (i32.const -648606000)) + (i32.add (i32.const -1885717867)) + (i32.add (i32.const -714199777)) + (i32.add (i32.const 996072257)) + (i32.add (i32.const 644223760)) + (i32.add (i32.const -910650091)) + (i32.add (i32.const -1462771908)) + (i32.add (i32.const 1145120141)) + (i32.add (i32.const -1022097132)) + (i32.add (i32.const 639837088)) + (i32.add (i32.const 688554311)) + (i32.add (i32.const 42013661)) + (i32.add (i32.const -250653734)) + (i32.add (i32.const -292230445)) + (i32.add (i32.const -1842411000)) + (i32.add (i32.const -1830390773)) + (i32.add (i32.const -1476368546)) + (i32.add (i32.const 650792096)) + (i32.add (i32.const -2031496999)) + (i32.add (i32.const 145878776)) + (i32.add (i32.const 666081170)) + (i32.add (i32.const 366881541)) + (i32.add (i32.const 1513602447)) + (i32.add (i32.const -2047225603)) + (i32.add (i32.const 1065895029)) + (i32.add (i32.const -2034990115)) + (i32.add (i32.const -165853475)) + (i32.add (i32.const -1166016726)) + (i32.add (i32.const -1149693700)) + (i32.add (i32.const 916628856)) + (i32.add (i32.const 356592582)) + (i32.add (i32.const 864246546)) + (i32.add (i32.const 1527919016)) + (i32.add (i32.const -1038003990)) + (i32.add (i32.const -1274681780)) + (i32.add (i32.const 1423604872)) + (i32.add (i32.const 1789322395)) + (i32.add (i32.const -793326585)) + (i32.add (i32.const 1279415651)) + (i32.add (i32.const -113857457)) + (i32.add (i32.const -1506455264)) + (i32.add (i32.const 223162193)) + (i32.add (i32.const 1306597343)) + (i32.add (i32.const -1510852746)) + (i32.add (i32.const -2117938174)) + (i32.add (i32.const -1369681843)) + (i32.add (i32.const -751617107)) + (i32.add (i32.const 1724365798)) + (i32.add (i32.const 1103219924)) + (i32.add (i32.const -757717103)) + (i32.add (i32.const -542916664)) + (i32.add (i32.const 829238981)) + (i32.add (i32.const -40502833)) + (i32.add (i32.const -1491310442)) + (i32.add (i32.const -425942201)) + (i32.add (i32.const 2043554323)) + (i32.add (i32.const -1232933641)) + (i32.add (i32.const -1252034419)) + (i32.add (i32.const -1293740361)) + (i32.add (i32.const 1264949153)) + (i32.add (i32.const -10244596)) + (i32.add (i32.const 584852572)) + (i32.add (i32.const 1995061861)) + (i32.add (i32.const 2025930302)) + (i32.add (i32.const -1499251071)) + (i32.add (i32.const -548919025)) + (i32.add (i32.const 629579813)) + (i32.add (i32.const 158615950)) + (i32.add (i32.const 1572256401)) + (i32.add (i32.const 778206818)) + (i32.add (i32.const -1489729453)) + (i32.add (i32.const -672135654)) + (i32.add (i32.const 941395894)) + (i32.add (i32.const -1263431866)) + (i32.add (i32.const -1731284530)) + (i32.add (i32.const 114155189)) + (i32.add (i32.const 808642501)) + (i32.add (i32.const -1800169516)) + (i32.add (i32.const 68506818)) + (i32.add (i32.const 1586294607)) + (i32.add (i32.const 1607066012)) + (i32.add (i32.const -2080431609)) + (i32.add (i32.const 817979351)) + (i32.add (i32.const 1449224143)) + (i32.add (i32.const 601461118)) + (i32.add (i32.const 1904989365)) + (i32.add (i32.const -1690417461)) + (i32.add (i32.const -857574226)) + (i32.add (i32.const 442338357)) + (i32.add (i32.const -224302917)) + (i32.add (i32.const 367581408)) + (i32.add (i32.const -2021660941)) + (i32.add (i32.const 1582271938)) + (i32.add (i32.const -1780556802)) + (i32.add (i32.const -162315210)) + (i32.add (i32.const -455392922)) + (i32.add (i32.const -330566360)) + (i32.add (i32.const 1135906753)) + (i32.add (i32.const -1517375669)) + (i32.add (i32.const 1954076329)) + (i32.add (i32.const 1814613433)) + (i32.add (i32.const -681153091)) + (i32.add (i32.const -510191695)) + (i32.add (i32.const -1926022764)) + (i32.add (i32.const -1590463567)) + (i32.add (i32.const 675700982)) + (i32.add (i32.const 1838711787)) + (i32.add (i32.const 577471484)) + (i32.add (i32.const 1975290900)) + (i32.add (i32.const -398712602)) + (i32.add (i32.const -572009895)) + (i32.add (i32.const 26968127)) + (i32.add (i32.const -1068649243)) + (i32.add (i32.const 1219818716)) + (i32.add (i32.const -134379806)) + (i32.add (i32.const -429786080)) + (i32.add (i32.const 76338208)) + (i32.add (i32.const 1555640052)) + (i32.add (i32.const -739272267)) + (i32.add (i32.const -391251082)) + (i32.add (i32.const -919063903)) + (i32.add (i32.const 873941684)) + (i32.add (i32.const -688186400)) + (i32.add (i32.const -2069034595)) + (i32.add (i32.const -736582122)) + (i32.add (i32.const -133075114)) + (i32.add (i32.const -1321156945)) + (i32.add (i32.const 891871922)) + (i32.add (i32.const 1993478944)) + (i32.add (i32.const 730871911)) + (i32.add (i32.const -557937640)) + (i32.add (i32.const -2143970481)) + (i32.add (i32.const -1256605065)) + (i32.add (i32.const 2091023681)) + (i32.add (i32.const 647713125)) + (i32.add (i32.const 162796781)) + (i32.add (i32.const 218480689)) + (i32.add (i32.const 1069912838)) + (i32.add (i32.const -1404309428)) + (i32.add (i32.const 1672372438)) + (i32.add (i32.const -1505279092)) + (i32.add (i32.const 2122251388)) + (i32.add (i32.const 2135980219)) + (i32.add (i32.const -1084946297)) + (i32.add (i32.const 812640079)) + (i32.add (i32.const 1276940157)) + (i32.add (i32.const -609602309)) + (i32.add (i32.const -126979396)) + (i32.add (i32.const 1535018877)) + (i32.add (i32.const 191624370)) + (i32.add (i32.const 298680340)) + (i32.add (i32.const 838482010)) + (i32.add (i32.const -1666843073)) + (i32.add (i32.const 1791682261)) + (i32.add (i32.const 1585556176)) + (i32.add (i32.const 1307981568)) + (i32.add (i32.const -1143387302)) + (i32.add (i32.const 1719219065)) + (i32.add (i32.const 1994194798)) + (i32.add (i32.const 696173380)) + (i32.add (i32.const -1025002433)) + (i32.add (i32.const -1416625348)) + (i32.add (i32.const -1660400947)) + (i32.add (i32.const 98460993)) + (i32.add (i32.const 800043471)) + (i32.add (i32.const 1784602379)) + (i32.add (i32.const 1311761256)) + (i32.add (i32.const -879987989)) + (i32.add (i32.const 1019231109)) + (i32.add (i32.const 772701258)) + (i32.add (i32.const 1475688211)) + (i32.add (i32.const -1132979507)) + (i32.add (i32.const 817074012)) + (i32.add (i32.const 2010709853)) + (i32.add (i32.const 1538961533)) + (i32.add (i32.const 1169700299)) + (i32.add (i32.const 1881827608)) + (i32.add (i32.const -207318563)) + (i32.add (i32.const -108162655)) + (i32.add (i32.const -1431160182)) + (i32.add (i32.const 168529715)) + (i32.add (i32.const 907642195)) + (i32.add (i32.const -1158359651)) + (i32.add (i32.const 1604256487)) + (i32.add (i32.const -1398946118)) + (i32.add (i32.const -26153004)) + (i32.add (i32.const -1410300420)) + (i32.add (i32.const -402178034)) + (i32.add (i32.const -920686491)) + (i32.add (i32.const -715312083)) + (i32.add (i32.const -1077895230)) + (i32.add (i32.const -456325108)) + (i32.add (i32.const -952781347)) + (i32.add (i32.const -1948818540)) + (i32.add (i32.const -772048723)) + (i32.add (i32.const 374920778)) + (i32.add (i32.const 739258068)) + (i32.add (i32.const -1248977693)) + (i32.add (i32.const 1005962315)) + (i32.add (i32.const -1109627642)) + (i32.add (i32.const 35145306)) + (i32.add (i32.const -1025134556)) + (i32.add (i32.const -76707708)) + (i32.add (i32.const -937298018)) + (i32.add (i32.const 1799433771)) + (i32.add (i32.const -721353271)) + (i32.add (i32.const -1135432787)) + (i32.add (i32.const 2051016595)) + (i32.add (i32.const 933560612)) + (i32.add (i32.const -1479789502)) + (i32.add (i32.const 342893880)) + (i32.add (i32.const 1150410834)) + (i32.add (i32.const -882302243)) + (i32.add (i32.const 671147023)) + (i32.add (i32.const 1259627103)) + (i32.add (i32.const 1569029510)) + (i32.add (i32.const 796202589)) + (i32.add (i32.const -1586729215)) + (i32.add (i32.const -1064938675)) + (i32.add (i32.const 815910775)) + (i32.add (i32.const 17606424)) + (i32.add (i32.const -1600281961)) + (i32.add (i32.const 391033076)) + (i32.add (i32.const 979854159)) + (i32.add (i32.const 652733498)) + (i32.add (i32.const -357477083)) + (i32.add (i32.const -885177929)) + (i32.add (i32.const -830525146)) + (i32.add (i32.const -1896932911)) + (i32.add (i32.const -359459188)) + (i32.add (i32.const 1383422866)) + (i32.add (i32.const 1696527586)) + (i32.add (i32.const -1605087522)) + (i32.add (i32.const 1462384891)) + (i32.add (i32.const 86509783)) + (i32.add (i32.const 63834094)) + (i32.add (i32.const -443375418)) + (i32.add (i32.const -723584183)) + (i32.add (i32.const 446956109)) + (i32.add (i32.const -400505128)) + (i32.add (i32.const -1406301331)) + (i32.add (i32.const -2109245733)) + (i32.add (i32.const 546080947)) + (i32.add (i32.const 1648013905)) + (i32.add (i32.const -575868111)) + (i32.add (i32.const -864259634)) + (i32.add (i32.const -595726265)) + (i32.add (i32.const -1636341639)) + (i32.add (i32.const -632412181)) + (i32.add (i32.const -659637917)) + (i32.add (i32.const -125719918)) + (i32.add (i32.const -1129078974)) + (i32.add (i32.const 1702704475)) + (i32.add (i32.const 95686403)) + (i32.add (i32.const -375220777)) + (i32.add (i32.const 2074709068)) + (i32.add (i32.const -243340048)) + (i32.add (i32.const 2138080596)) + (i32.add (i32.const -798222181)) + (i32.add (i32.const -445419277)) + (i32.add (i32.const -145917061)) + (i32.add (i32.const -2127012195)) + (i32.add (i32.const -886843663)) + (i32.add (i32.const 1293095310)) + (i32.add (i32.const 1086219026)) + (i32.add (i32.const 294235913)) + (i32.add (i32.const -1481745764)) + (i32.add (i32.const 417311007)) + (i32.add (i32.const 1532793234)) + (i32.add (i32.const 1094410496)) + (i32.add (i32.const -603498058)) + (i32.add (i32.const -1269656843)) + (i32.add (i32.const 112208449)) + (i32.add (i32.const -2100452399)) + (i32.add (i32.const 60640508)) + (i32.add (i32.const 576708360)) + (i32.add (i32.const -716995741)) + (i32.add (i32.const -260782828)) + (i32.add (i32.const 434023036)) + (i32.add (i32.const -1609908504)) + (i32.add (i32.const 1438811570)) + (i32.add (i32.const 775014390)) + (i32.add (i32.const -1013567766)) + (i32.add (i32.const 160997337)) + (i32.add (i32.const -2002924401)) + (i32.add (i32.const -484311520)) + (i32.add (i32.const 344871259)) + (i32.add (i32.const -1767446200)) + (i32.add (i32.const -768064540)) + (i32.add (i32.const 367380089)) + (i32.add (i32.const -743623074)) + (i32.add (i32.const 185733251)) + (i32.add (i32.const 2138595838)) + (i32.add (i32.const -1495209817)) + (i32.add (i32.const 2039212284)) + (i32.add (i32.const -477965089)) + (i32.add (i32.const 864635494)) + (i32.add (i32.const -1723024441)) + (i32.add (i32.const 650421200)) + (i32.add (i32.const -1913487790)) + (i32.add (i32.const -647683857)) + (i32.add (i32.const 1370020140)) + (i32.add (i32.const 1130129450)) + (i32.add (i32.const 298749455)) + (i32.add (i32.const -1349429467)) + (i32.add (i32.const 1376251756)) + (i32.add (i32.const -616554803)) + (i32.add (i32.const -50505112)) + (i32.add (i32.const 617961454)) + (i32.add (i32.const -1580215604)) + (i32.add (i32.const -1077463272)) + (i32.add (i32.const -1404395760)) + (i32.add (i32.const 664518990)) + (i32.add (i32.const 1041605792)) + (i32.add (i32.const 924072114)) + (i32.add (i32.const -325576996)) + (i32.add (i32.const -1176130791)) + (i32.add (i32.const 1257967292)) + (i32.add (i32.const 1683617036)) + (i32.add (i32.const 402440834)) + (i32.add (i32.const -1732126938)) + (i32.add (i32.const -879305409)) + (i32.add (i32.const -668892983)) + (i32.add (i32.const 267371926)) + (i32.add (i32.const -773466960)) + (i32.add (i32.const -1965375913)) + (i32.add (i32.const -1389166889)) + (i32.add (i32.const 2052701974)) + (i32.add (i32.const 1657186270)) + (i32.add (i32.const 67571589)) + (i32.add (i32.const 449392511)) + (i32.add (i32.const 765853946)) + (i32.add (i32.const -731768736)) + (i32.add (i32.const -765085074)) + (i32.add (i32.const -914884854)) + (i32.add (i32.const -986524625)) + (i32.add (i32.const 1444216612)) + (i32.add (i32.const -1492642947)) + (i32.add (i32.const -19711259)) + (i32.add (i32.const 126290484)) + (i32.add (i32.const -155040715)) + (i32.add (i32.const -384737228)) + (i32.add (i32.const 2141696472)) + (i32.add (i32.const -1628120109)) + (i32.add (i32.const -1160710487)) + (i32.add (i32.const 328805765)) + (i32.add (i32.const -2001363757)) + (i32.add (i32.const 1090688358)) + (i32.add (i32.const 826850235)) + (i32.add (i32.const 1853972200)) + (i32.add (i32.const -894739362)) + (i32.add (i32.const -1250407103)) + (i32.add (i32.const 1177615134)) + (i32.add (i32.const -1163798165)) + (i32.add (i32.const -785098874)) + (i32.add (i32.const -1355372311)) + (i32.add (i32.const -1902201672)) + (i32.add (i32.const -571222866)) + (i32.add (i32.const -1447971663)) + (i32.add (i32.const -276966537)) + (i32.add (i32.const 1228527508)) + (i32.add (i32.const 1931396954)) + (i32.add (i32.const -615086668)) + (i32.add (i32.const -174634339)) + (i32.add (i32.const -1634346579)) + (i32.add (i32.const 366454441)) + (i32.add (i32.const -812948961)) + (i32.add (i32.const 1143651927)) + (i32.add (i32.const 143961194)) + (i32.add (i32.const 1720057173)) + (i32.add (i32.const -1632411632)) + (i32.add (i32.const -55656623)) + (i32.add (i32.const 1937175450)) + (i32.add (i32.const -135182917)) + (i32.add (i32.const -1431677780)) + (i32.add (i32.const -1306780980)) + (i32.add (i32.const -1965319972)) + (i32.add (i32.const -6464247)) + (i32.add (i32.const 1267962844)) + (i32.add (i32.const -1026623882)) + (i32.add (i32.const -192457096)) + (i32.add (i32.const 786011463)) + (i32.add (i32.const -1102008244)) + (i32.add (i32.const 546848636)) + (i32.add (i32.const -988728189)) + (i32.add (i32.const -1409114054)) + (i32.add (i32.const 1651758425)) + (i32.add (i32.const -1885145439)) + (i32.add (i32.const -982362649)) + (i32.add (i32.const -459944170)) + (i32.add (i32.const 460745150)) + (i32.add (i32.const -658543654)) + (i32.add (i32.const -118825378)) + (i32.add (i32.const -761527449)) + (i32.add (i32.const 759694955)) + (i32.add (i32.const -1144424937)) + (i32.add (i32.const -637980420)) + (i32.add (i32.const 144170031)) + (i32.add (i32.const 1205243278)) + (i32.add (i32.const 1105416543)) + (i32.add (i32.const 1448713317)) + (i32.add (i32.const 1316029763)) + (i32.add (i32.const 2124151070)) + (i32.add (i32.const 486873743)) + (i32.add (i32.const 2018270741)) + (i32.add (i32.const -741973592)) + (i32.add (i32.const 1080539246)) + (i32.add (i32.const 1771307780)) + (i32.add (i32.const -1340032689)) + (i32.add (i32.const -1762005212)) + (i32.add (i32.const 641957376)) + (i32.add (i32.const -1438528532)) + (i32.add (i32.const -806885847)) + (i32.add (i32.const -1998321569)) + (i32.add (i32.const -1265271093)) + (i32.add (i32.const -248412391)) + (i32.add (i32.const -692613058)) + (i32.add (i32.const -1127860879)) + (i32.add (i32.const -1846024329)) + (i32.add (i32.const -286293329)) + (i32.add (i32.const 1293181940)) + (i32.add (i32.const 390353333)) + (i32.add (i32.const -1193883115)) + (i32.add (i32.const 1649098237)) + (i32.add (i32.const -847740552)) + (i32.add (i32.const 893060950)) + (i32.add (i32.const -996598618)) + (i32.add (i32.const -586708228)) + (i32.add (i32.const 518603195)) + (i32.add (i32.const -1780949175)) + (i32.add (i32.const -905456102)) + (i32.add (i32.const 1298443377)) + (i32.add (i32.const 1276815735)) + (i32.add (i32.const -2110623191)) + (i32.add (i32.const 2022063613)) + (i32.add (i32.const -1398124848)) + (i32.add (i32.const -1075567827)) + (i32.add (i32.const 322151633)) + (i32.add (i32.const 1800908287)) + (i32.add (i32.const 1383757149)) + (i32.add (i32.const 1966879212)) + (i32.add (i32.const 1069687950)) + (i32.add (i32.const -1254037665)) + (i32.add (i32.const 1203074508)) + (i32.add (i32.const 1920119330)) + (i32.add (i32.const 875345821)) + (i32.add (i32.const 1938724657)) + (i32.add (i32.const -1565464943)) + (i32.add (i32.const 290851461)) + (i32.add (i32.const -549755632)) + (i32.add (i32.const 1442837756)) + (i32.add (i32.const 255357437)) + (i32.add (i32.const -1162144908)) + (i32.add (i32.const 427381625)) + (i32.add (i32.const -281464381)) + (i32.add (i32.const 555947996)) + (i32.add (i32.const -334691566)) + (i32.add (i32.const 1033987143)) + (i32.add (i32.const -752439018)) + (i32.add (i32.const 1963245021)) + (i32.add (i32.const -1451275815)) + (i32.add (i32.const 1340923933)) + (i32.add (i32.const 411041799)) + (i32.add (i32.const 2145478953)) + (i32.add (i32.const 1955840737)) + (i32.add (i32.const -657702706)) + (i32.add (i32.const 1979900698)) + (i32.add (i32.const -208104069)) + (i32.add (i32.const -664662290)) + (i32.add (i32.const 710929989)) + (i32.add (i32.const -414858173)) + (i32.add (i32.const -1627991885)) + (i32.add (i32.const -1931046972)) + (i32.add (i32.const -427871737)) + (i32.add (i32.const -1190532199)) + (i32.add (i32.const 647808686)) + (i32.add (i32.const 1287372386)) + (i32.add (i32.const -1079638267)) + (i32.add (i32.const -116183754)) + (i32.add (i32.const -1655580655)) + (i32.add (i32.const 252797955)) + (i32.add (i32.const 1572584529)) + (i32.add (i32.const 943081185)) + (i32.add (i32.const -767742863)) + (i32.add (i32.const -2003029420)) + (i32.add (i32.const 1241176130)) + (i32.add (i32.const -1943093629)) + (i32.add (i32.const -1313259251)) + (i32.add (i32.const 1196618863)) + (i32.add (i32.const -258818283)) + (i32.add (i32.const -1891408814)) + (i32.add (i32.const 1653080869)) + (i32.add (i32.const -1845468201)) + (i32.add (i32.const -986839468)) + (i32.add (i32.const -1699987691)) + (i32.add (i32.const 2101920684)) + (i32.add (i32.const -914672314)) + (i32.add (i32.const -198209958)) + (i32.add (i32.const 1519018962)) + (i32.add (i32.const 1037881091)) + (i32.add (i32.const -1087950919)) + (i32.add (i32.const 2097790631)) + (i32.add (i32.const -828377130)) + (i32.add (i32.const -304938874)) + (i32.add (i32.const -1076991201)) + (i32.add (i32.const -414807584)) + (i32.add (i32.const 1152738256)) + (i32.add (i32.const -1171653009)) + (i32.add (i32.const 357402557)) + (i32.add (i32.const 1797342896)) + (i32.add (i32.const 1329591938)) + (i32.add (i32.const 1588834764)) + (i32.add (i32.const -1959683436)) + (i32.add (i32.const 1249902974)) + (i32.add (i32.const -1744147251)) + (i32.add (i32.const -1328810109)) + (i32.add (i32.const -1163470604)) + (i32.add (i32.const 361134101)) + (i32.add (i32.const -79599584)) + (i32.add (i32.const 1048880455)) + (i32.add (i32.const -214788940)) + (i32.add (i32.const 539964521)) + (i32.add (i32.const -192690553)) + (i32.add (i32.const -1095834040)) + (i32.add (i32.const 1473985057)) + (i32.add (i32.const -1579359850)) + (i32.add (i32.const -1454230863)) + (i32.add (i32.const 2027878113)) + (i32.add (i32.const -171034110)) + (i32.add (i32.const 2065666301)) + (i32.add (i32.const -1293298921)) + (i32.add (i32.const 1118298797)) + (i32.add (i32.const 675745853)) + (i32.add (i32.const 889496484)) + (i32.add (i32.const -1461509279)) + (i32.add (i32.const 803451217)) + (i32.add (i32.const -2037853141)) + (i32.add (i32.const 903904741)) + (i32.add (i32.const -395687354)) + (i32.add (i32.const 1857659136)) + (i32.add (i32.const 1854438376)) + (i32.add (i32.const 2120820870)) + (i32.add (i32.const 708223004)) + (i32.add (i32.const -1792475401)) + (i32.add (i32.const 68995133)) + (i32.add (i32.const 1299776153)) + (i32.add (i32.const -1938748369)) + (i32.add (i32.const -1776408473)) + (i32.add (i32.const 1944285711)) + (i32.add (i32.const -1596533663)) + (i32.add (i32.const -1940007584)) + (i32.add (i32.const 1269393371)) + (i32.add (i32.const -1242463342)) + (i32.add (i32.const 1260944846)) + (i32.add (i32.const -1930871124)) + (i32.add (i32.const -171080885)) + (i32.add (i32.const -473321849)) + (i32.add (i32.const -1340080190)) + (i32.add (i32.const -1808428944)) + (i32.add (i32.const 1236699922)) + (i32.add (i32.const -1437932489)) + (i32.add (i32.const -1263377586)) + (i32.add (i32.const 1740650802)) + (i32.add (i32.const 1185490727)) + (i32.add (i32.const 196945776)) + (i32.add (i32.const -612155984)) + (i32.add (i32.const -743247102)) + (i32.add (i32.const 1173524004)) + (i32.add (i32.const 187374339)) + (i32.add (i32.const 585805608)) + (i32.add (i32.const 1351441439)) + (i32.add (i32.const 1587485081)) + (i32.add (i32.const 1737691836)) + (i32.add (i32.const -472378124)) + (i32.add (i32.const -284377346)) + (i32.add (i32.const 756881372)) + (i32.add (i32.const -447116857)) + (i32.add (i32.const 1469233535)) + (i32.add (i32.const -1541055713)) + (i32.add (i32.const -79406490)) + (i32.add (i32.const -376333270)) + (i32.add (i32.const 2127157278)) + (i32.add (i32.const 1734865054)) + (i32.add (i32.const -729195661)) + (i32.add (i32.const 625318936)) + (i32.add (i32.const -554516628)) + (i32.add (i32.const -1857208770)) + (i32.add (i32.const -709404707)) + (i32.add (i32.const 1917409135)) + (i32.add (i32.const 896146225)) + (i32.add (i32.const -693072167)) + (i32.add (i32.const -1843027245)) + (i32.add (i32.const -1066144441)) + (i32.add (i32.const 1484299260)) + (i32.add (i32.const -1781470202)) + (i32.add (i32.const -236657496)) + (i32.add (i32.const -1236719921)) + (i32.add (i32.const 1508300136)) + (i32.add (i32.const -1485514665)) + (i32.add (i32.const 545527207)) + (i32.add (i32.const 548466075)) + (i32.add (i32.const 1218856223)) + (i32.add (i32.const 1543299284)) + (i32.add (i32.const 262087894)) + (i32.add (i32.const 758958406)) + (i32.add (i32.const -465329876)) + (i32.add (i32.const -1260549651)) + (i32.add (i32.const -1577934616)) + (i32.add (i32.const 777074037)) + (i32.add (i32.const -1339414591)) + (i32.add (i32.const -1695802236)) + (i32.add (i32.const 222055326)) + (i32.add (i32.const 534198889)) + (i32.add (i32.const -1459546758)) + (i32.add (i32.const 1551631076)) + (i32.add (i32.const -165709330)) + (i32.add (i32.const 253821342)) + (i32.add (i32.const 455934604)) + (i32.add (i32.const -1130454641)) + (i32.add (i32.const 1338610543)) + (i32.add (i32.const 1214043001)) + (i32.add (i32.const 1758747696)) + (i32.add (i32.const -402317355)) + (i32.add (i32.const -1824593789)) + (i32.add (i32.const 2095532873)) + (i32.add (i32.const 1712113443)) + (i32.add (i32.const 1809450248)) + (i32.add (i32.const 1160618290)) + (i32.add (i32.const -687704930)) + (i32.add (i32.const -1290550089)) + (i32.add (i32.const 2030019060)) + (i32.add (i32.const -1702154429)) + (i32.add (i32.const 1104429703)) + (i32.add (i32.const 384927665)) + (i32.add (i32.const -1341762091)) + (i32.add (i32.const 1821756973)) + (i32.add (i32.const 926322883)) + (i32.add (i32.const -2146692437)) + (i32.add (i32.const -1105976974)) + (i32.add (i32.const -1133667666)) + (i32.add (i32.const 2110578964)) + (i32.add (i32.const -211898823)) + (i32.add (i32.const 2103903058)) + (i32.add (i32.const 1754401263)) + (i32.add (i32.const 1809812821)) + (i32.add (i32.const 484939169)) + (i32.add (i32.const 1256718728)) + (i32.add (i32.const 1277708923)) + (i32.add (i32.const 396813282)) + (i32.add (i32.const -1361727502)) + (i32.add (i32.const -948584249)) + (i32.add (i32.const 1508754842)) + (i32.add (i32.const 403077657)) + (i32.add (i32.const -1735087233)) + (i32.add (i32.const -1415594020)) + (i32.add (i32.const -1958470909)) + (i32.add (i32.const -2094913706)) + (i32.add (i32.const -2093124342)) + (i32.add (i32.const 211524716)) + (i32.add (i32.const 87199189)) + (i32.add (i32.const 2041892402)) + (i32.add (i32.const -1471543678)) + (i32.add (i32.const -2081467281)) + (i32.add (i32.const 1573455809)) + (i32.add (i32.const 191683085)) + (i32.add (i32.const -1146300569)) + (i32.add (i32.const 954660845)) + (i32.add (i32.const -1784484424)) + (i32.add (i32.const -637563660)) + (i32.add (i32.const 2124577401)) + (i32.add (i32.const 2016476345)) + (i32.add (i32.const -1030743977)) + (i32.add (i32.const 1269864593)) + (i32.add (i32.const 1463568421)) + (i32.add (i32.const 2056917616)) + (i32.add (i32.const 612656355)) + (i32.add (i32.const 318435997)) + (i32.add (i32.const 1392909850)) + (i32.add (i32.const -1172445536)) + (i32.add (i32.const -588773059)) + (i32.add (i32.const 935025922)) + (i32.add (i32.const 1759980224)) + (i32.add (i32.const 649085316)) + (i32.add (i32.const 128388714)) + (i32.add (i32.const -1731692691)) + (i32.add (i32.const -1600558457)) + (i32.add (i32.const -1612371242)) + (i32.add (i32.const 1328651135)) + (i32.add (i32.const 1234656977)) + (i32.add (i32.const 343058612)) + (i32.add (i32.const 1976770755)) + (i32.add (i32.const -1566774255)) + (i32.add (i32.const 413299165)) + (i32.add (i32.const -1044989040)) + (i32.add (i32.const -1501759659)) + (i32.add (i32.const -1507732014)) + (i32.add (i32.const 1661097308)) + (i32.add (i32.const -1905606827)) + (i32.add (i32.const -844217824)) + (i32.add (i32.const 1067853144)) + (i32.add (i32.const -1587187646)) + (i32.add (i32.const 1762725671)) + (i32.add (i32.const 150652178)) + (i32.add (i32.const -859259934)) + (i32.add (i32.const 1491749082)) + (i32.add (i32.const 632281554)) + (i32.add (i32.const -1118102895)) + (i32.add (i32.const 819792391)) + (i32.add (i32.const 230376872)) + (i32.add (i32.const 1597256377)) + (i32.add (i32.const -608196186)) + (i32.add (i32.const -727698570)) + (i32.add (i32.const -729323419)) + (i32.add (i32.const 1592532079)) + (i32.add (i32.const -1198848383)) + (i32.add (i32.const -1544728724)) + (i32.add (i32.const -1081270045)) + (i32.add (i32.const -653200706)) + (i32.add (i32.const 1227058999)) + (i32.add (i32.const -431546742)) + (i32.add (i32.const 1584480178)) + (i32.add (i32.const 1057864118)) + (i32.add (i32.const -1419623092)) + (i32.add (i32.const -304427716)) + (i32.add (i32.const 1004583663)) + (i32.add (i32.const -893085268)) + (i32.add (i32.const -683799839)) + (i32.add (i32.const 298446409)) + (i32.add (i32.const -1641028627)) + (i32.add (i32.const 1874857261)) + (i32.add (i32.const -657424222)) + (i32.add (i32.const 969584282)) + (i32.add (i32.const 856060029)) + (i32.add (i32.const 1868311493)) + (i32.add (i32.const 1755384221)) + (i32.add (i32.const 1896072754)) + (i32.add (i32.const 298517318)) + (i32.add (i32.const 1327323416)) + (i32.add (i32.const 2095791866)) + (i32.add (i32.const -436905602)) + (i32.add (i32.const -1111447462)) + (i32.add (i32.const -938809528)) + (i32.add (i32.const -1170263507)) + (i32.add (i32.const 1940653755)) + (i32.add (i32.const -1160526760)) + (i32.add (i32.const 1193065463)) + (i32.add (i32.const -498035803)) + (i32.add (i32.const 1287923230)) + (i32.add (i32.const -1775094135)) + (i32.add (i32.const 1118093003)) + (i32.add (i32.const 357302809)) + (i32.add (i32.const -1761130045)) + (i32.add (i32.const 1070962270)) + (i32.add (i32.const -152133832)) + (i32.add (i32.const -924184297)) + (i32.add (i32.const 1689065098)) + (i32.add (i32.const -530160641)) + (i32.add (i32.const -273028711)) + (i32.add (i32.const 1277168164)) + (i32.add (i32.const -1532266863)) + (i32.add (i32.const -930191394)) + (i32.add (i32.const -1659444071)) + (i32.add (i32.const -1129900225)) + (i32.add (i32.const -1300687659)) + (i32.add (i32.const 370885372)) + (i32.add (i32.const 762867154)) + (i32.add (i32.const 583950594)) + (i32.add (i32.const -936078357)) + (i32.add (i32.const 1605147045)) + (i32.add (i32.const -249821555)) + (i32.add (i32.const 248073742)) + (i32.add (i32.const -1396406796)) + (i32.add (i32.const -1204285210)) + (i32.add (i32.const 315731134)) + (i32.add (i32.const -1989082074)) + (i32.add (i32.const 40084525)) + (i32.add (i32.const -1096758449)) + (i32.add (i32.const 180601364)) + (i32.add (i32.const -1318001732)) + (i32.add (i32.const -1919425078)) + (i32.add (i32.const 441845447)) + (i32.add (i32.const 624521842)) + (i32.add (i32.const 1044909578)) + (i32.add (i32.const 2127905187)) + (i32.add (i32.const 1266230895)) + (i32.add (i32.const 1551880593)) + (i32.add (i32.const 2034975455)) + (i32.add (i32.const 309486068)) + (i32.add (i32.const -522681912)) + (i32.add (i32.const 858043444)) + (i32.add (i32.const -136592397)) + (i32.add (i32.const -304584548)) + (i32.add (i32.const -20038989)) + (i32.add (i32.const -1601656260)) + (i32.add (i32.const -1747340851)) + (i32.add (i32.const 357478557)) + (i32.add (i32.const -762530420)) + (i32.add (i32.const 593051772)) + (i32.add (i32.const -1435504514)) + (i32.add (i32.const 1429945082)) + (i32.add (i32.const -1842446686)) + (i32.add (i32.const 1082767249)) + (i32.add (i32.const 1165061795)) + (i32.add (i32.const 1691267972)) + (i32.add (i32.const 921965181)) + (i32.add (i32.const 212929431)) + (i32.add (i32.const 6028028)) + (i32.add (i32.const -1051415406)) + (i32.add (i32.const -966085833)) + (i32.add (i32.const 937931528)) + (i32.add (i32.const 644050108)) + (i32.add (i32.const -180213357)) + (i32.add (i32.const 1800124977)) + (i32.add (i32.const 674862327)) + (i32.add (i32.const -338588429)) + (i32.add (i32.const -1435978301)) + (i32.add (i32.const -1388277849)) + (i32.add (i32.const -1152298992)) + (i32.add (i32.const -1785302235)) + (i32.add (i32.const -144468095)) + (i32.add (i32.const -506565641)) + (i32.add (i32.const -177157330)) + (i32.add (i32.const -334566242)) + (i32.add (i32.const 302428669)) + (i32.add (i32.const -1284639572)) + (i32.add (i32.const -2146120146)) + (i32.add (i32.const 1913711741)) + (i32.add (i32.const -1223695111)) + (i32.add (i32.const -1231225749)) + (i32.add (i32.const 87111970)) + (i32.add (i32.const 1041388615)) + (i32.add (i32.const 1303630803)) + (i32.add (i32.const -1963328314)) + (i32.add (i32.const 590449911)) + (i32.add (i32.const -1266382585)) + (i32.add (i32.const -1271213157)) + (i32.add (i32.const 1823953250)) + (i32.add (i32.const 1202606716)) + (i32.add (i32.const -1807586242)) + (i32.add (i32.const 1713846374)) + (i32.add (i32.const -1008802650)) + (i32.add (i32.const 1663906089)) + (i32.add (i32.const -746350901)) + (i32.add (i32.const -402456542)) + (i32.add (i32.const -37069351)) + (i32.add (i32.const 570095681)) + (i32.add (i32.const 1318602621)) + (i32.add (i32.const -843578732)) + (i32.add (i32.const -266827780)) + (i32.add (i32.const 1912213154)) + (i32.add (i32.const 1441475116)) + (i32.add (i32.const 1307295639)) + (i32.add (i32.const -509845874)) + (i32.add (i32.const 1689006394)) + (i32.add (i32.const -1691529038)) + (i32.add (i32.const -1670268704)) + (i32.add (i32.const -1713922497)) + (i32.add (i32.const 1088882743)) + (i32.add (i32.const -1234162460)) + (i32.add (i32.const -1947167762)) + (i32.add (i32.const -1621449795)) + (i32.add (i32.const 1650840356)) + (i32.add (i32.const 750983332)) + (i32.add (i32.const -156583775)) + (i32.add (i32.const 2007666481)) + (i32.add (i32.const 399145455)) + (i32.add (i32.const 1955674157)) + (i32.add (i32.const -8780691)) + (i32.add (i32.const 213674844)) + (i32.add (i32.const 1796663693)) + (i32.add (i32.const 413656139)) + (i32.add (i32.const -1105778601)) + (i32.add (i32.const 1200061237)) + (i32.add (i32.const 1714171316)) + (i32.add (i32.const 90573030)) + (i32.add (i32.const -1813652239)) + (i32.add (i32.const -2130918568)) + (i32.add (i32.const 1126179717)) + (i32.add (i32.const 1547574117)) + (i32.add (i32.const -1251540829)) + (i32.add (i32.const -213786350)) + (i32.add (i32.const 1994976075)) + (i32.add (i32.const 2010702189)) + (i32.add (i32.const 4473883)) + (i32.add (i32.const 1979426636)) + (i32.add (i32.const 1517418881)) + (i32.add (i32.const 690547218)) + (i32.add (i32.const 2017525015)) + (i32.add (i32.const -1700797907)) + (i32.add (i32.const 1553314307)) + (i32.add (i32.const 1957086650)) + (i32.add (i32.const -1318889811)) + (i32.add (i32.const 589313195)) + (i32.add (i32.const 1806714756)) + (i32.add (i32.const 794678305)) + (i32.add (i32.const -254280751)) + (i32.add (i32.const 1325479695)) + (i32.add (i32.const -725171175)) + (i32.add (i32.const 312426771)) + (i32.add (i32.const 540184213)) + (i32.add (i32.const 1856259825)) + (i32.add (i32.const -2100409377)) + (i32.add (i32.const -280661988)) + (i32.add (i32.const -1572830796)) + (i32.add (i32.const 261733666)) + (i32.add (i32.const -1581383375)) + (i32.add (i32.const -1096395150)) + (i32.add (i32.const 1226290044)) + (i32.add (i32.const 674841217)) + (i32.add (i32.const -1649969546)) + (i32.add (i32.const 2118305116)) + (i32.add (i32.const -317895803)) + (i32.add (i32.const 1680799185)) + (i32.add (i32.const -752901144)) + (i32.add (i32.const -1185382413)) + (i32.add (i32.const 1150451033)) + (i32.add (i32.const -449393346)) + (i32.add (i32.const 267055208)) + (i32.add (i32.const 863661189)) + (i32.add (i32.const -69755569)) + (i32.add (i32.const -1818062052)) + (i32.add (i32.const 1695732115)) + (i32.add (i32.const -313785963)) + (i32.add (i32.const -327987186)) + (i32.add (i32.const 1843786874)) + (i32.add (i32.const 1187598166)) + (i32.add (i32.const 158368031)) + (i32.add (i32.const -2127915963)) + (i32.add (i32.const 1529994176)) + (i32.add (i32.const 359400206)) + (i32.add (i32.const 1173661995)) + (i32.add (i32.const -233170457)) + (i32.add (i32.const -2030485484)) + (i32.add (i32.const -1840765780)) + (i32.add (i32.const -1976668014)) + (i32.add (i32.const -683408709)) + (i32.add (i32.const -1202317978)) + (i32.add (i32.const -2093339729)) + (i32.add (i32.const 110953729)) + (i32.add (i32.const -304278581)) + (i32.add (i32.const -1814355803)) + (i32.add (i32.const 2086539133)) + (i32.add (i32.const 1677299226)) + (i32.add (i32.const -1992611841)) + (i32.add (i32.const 1647984153)) + (i32.add (i32.const -1488800322)) + (i32.add (i32.const 8962999)) + (i32.add (i32.const -776057212)) + (i32.add (i32.const 1724403201)) + (i32.add (i32.const 871905323)) + (i32.add (i32.const 1556089014)) + (i32.add (i32.const 324475765)) + (i32.add (i32.const -1569486304)) + (i32.add (i32.const -1053672379)) + (i32.add (i32.const 902608208)) + (i32.add (i32.const -1301744976)) + (i32.add (i32.const 705757197)) + (i32.add (i32.const 320799404)) + (i32.add (i32.const 292262638)) + (i32.add (i32.const 538021544)) + (i32.add (i32.const -359448129)) + (i32.add (i32.const -1037326026)) + (i32.add (i32.const -976868123)) + (i32.add (i32.const -879197483)) + (i32.add (i32.const 1611197738)) + (i32.add (i32.const -537816306)) + (i32.add (i32.const -341624158)) + (i32.add (i32.const -1583041732)) + (i32.add (i32.const -325409924)) + (i32.add (i32.const -1260738082)) + (i32.add (i32.const 1815008546)) + (i32.add (i32.const -167166147)) + (i32.add (i32.const 1687581785)) + (i32.add (i32.const 1076453334)) + (i32.add (i32.const 2085150498)) + (i32.add (i32.const -1006888042)) + (i32.add (i32.const 2034793030)) + (i32.add (i32.const 3187976)) + (i32.add (i32.const 1358908856)) + (i32.add (i32.const 325302134)) + (i32.add (i32.const -250852504)) + (i32.add (i32.const -1478275033)) + (i32.add (i32.const 1597137938)) + (i32.add (i32.const -1314114731)) + (i32.add (i32.const 347021344)) + (i32.add (i32.const -1628223229)) + (i32.add (i32.const -1035971515)) + (i32.add (i32.const -939591493)) + (i32.add (i32.const 982988376)) + (i32.add (i32.const -522907735)) + (i32.add (i32.const 1334610212)) + (i32.add (i32.const 835451388)) + (i32.add (i32.const -783333332)) + (i32.add (i32.const 626279900)) + (i32.add (i32.const -776509638)) + (i32.add (i32.const -1699988515)) + (i32.add (i32.const 110684771)) + (i32.add (i32.const -2103364918)) + (i32.add (i32.const 135467861)) + (i32.add (i32.const -2133196647)) + (i32.add (i32.const 543418195)) + (i32.add (i32.const -103757064)) + (i32.add (i32.const -397302319)) + (i32.add (i32.const -1985520109)) + (i32.add (i32.const 620325922)) + (i32.add (i32.const 824384411)) + (i32.add (i32.const -675850942)) + (i32.add (i32.const 1378894521)) + (i32.add (i32.const 669410534)) + (i32.add (i32.const -1854289204)) + (i32.add (i32.const 993894792)) + (i32.add (i32.const -119512496)) + (i32.add (i32.const 513398127)) + (i32.add (i32.const 1470480154)) + (i32.add (i32.const -1929702030)) + (i32.add (i32.const 2068031137)) + (i32.add (i32.const 290598502)) + (i32.add (i32.const 1930679408)) + (i32.add (i32.const -1628624224)) + (i32.add (i32.const 916621121)) + (i32.add (i32.const -876045425)) + (i32.add (i32.const -2015624434)) + (i32.add (i32.const 1430588740)) + (i32.add (i32.const 2060748315)) + (i32.add (i32.const -317299835)) + (i32.add (i32.const 584649886)) + (i32.add (i32.const 1140655297)) + (i32.add (i32.const -1250289264)) + (i32.add (i32.const -1942263869)) + (i32.add (i32.const 2126869150)) + (i32.add (i32.const -2112505592)) + (i32.add (i32.const -1775248204)) + (i32.add (i32.const -94263803)) + (i32.add (i32.const -881127541)) + (i32.add (i32.const -425810549)) + (i32.add (i32.const 447859000)) + (i32.add (i32.const -1944666529)) + (i32.add (i32.const 1854095667)) + (i32.add (i32.const 1237376840)) + (i32.add (i32.const 2105777282)) + (i32.add (i32.const 921647182)) + (i32.add (i32.const 561168297)) + (i32.add (i32.const -489964275)) + (i32.add (i32.const -1495469987)) + (i32.add (i32.const -1811677061)) + (i32.add (i32.const -1938289846)) + (i32.add (i32.const 639916964)) + (i32.add (i32.const -56970372)) + (i32.add (i32.const -510342836)) + (i32.add (i32.const -1376344314)) + (i32.add (i32.const -1037004930)) + (i32.add (i32.const -803931100)) + (i32.add (i32.const -1829830840)) + (i32.add (i32.const 1746618170)) + (i32.add (i32.const -140462641)) + (i32.add (i32.const 2013392191)) + (i32.add (i32.const -1295962039)) + (i32.add (i32.const -1869992829)) + (i32.add (i32.const 951883572)) + (i32.add (i32.const -94941401)) + (i32.add (i32.const -297782893)) + (i32.add (i32.const -416546745)) + (i32.add (i32.const 159438790)) + (i32.add (i32.const -1128592625)) + (i32.add (i32.const -851631460)) + (i32.add (i32.const -469418518)) + (i32.add (i32.const -1501047913)) + (i32.add (i32.const 1269255980)) + (i32.add (i32.const -1142156205)) + (i32.add (i32.const -1784111962)) + (i32.add (i32.const 1187297725)) + (i32.add (i32.const 603516846)) + (i32.add (i32.const -770207346)) + (i32.add (i32.const 124415671)) + (i32.add (i32.const 198926905)) + (i32.add (i32.const 1076446722)) + (i32.add (i32.const -1406149353)) + (i32.add (i32.const -813623453)) + (i32.add (i32.const -1452243081)) + (i32.add (i32.const 91585926)) + (i32.add (i32.const 1486086358)) + (i32.add (i32.const -314083273)) + (i32.add (i32.const -555020584)) + (i32.add (i32.const -1450357041)) + (i32.add (i32.const 323502827)) + (i32.add (i32.const 1295905286)) + (i32.add (i32.const 1922048170)) + (i32.add (i32.const 415692732)) + (i32.add (i32.const -33143008)) + (i32.add (i32.const -796417743)) + (i32.add (i32.const 919776566)) + (i32.add (i32.const 2066193051)) + (i32.add (i32.const 231742859)) + (i32.add (i32.const -1538997850)) + (i32.add (i32.const -1598337224)) + (i32.add (i32.const 237801691)) + (i32.add (i32.const -409564081)) + (i32.add (i32.const 489893434)) + (i32.add (i32.const 1441449341)) + (i32.add (i32.const 1384383666)) + (i32.add (i32.const -1280988160)) + (i32.add (i32.const -812027785)) + (i32.add (i32.const 261611024)) + (i32.add (i32.const 991419064)) + (i32.add (i32.const -2035755980)) + (i32.add (i32.const -1188105052)) + (i32.add (i32.const -1255504128)) + (i32.add (i32.const -1310289657)) + (i32.add (i32.const 1541227004)) + (i32.add (i32.const -651236554)) + (i32.add (i32.const 795403558)) + (i32.add (i32.const -1029044468)) + (i32.add (i32.const 496341940)) + (i32.add (i32.const 1462360800)) + (i32.add (i32.const -1118677435)) + (i32.add (i32.const -1324863038)) + (i32.add (i32.const -465636045)) + (i32.add (i32.const 351025833)) + (i32.add (i32.const 1559105233)) + (i32.add (i32.const 1392244698)) + (i32.add (i32.const 2058073867)) + (i32.add (i32.const 1154170585)) + (i32.add (i32.const 822942338)) + (i32.add (i32.const 464191317)) + (i32.add (i32.const -1346826186)) + (i32.add (i32.const -1070962447)) + (i32.add (i32.const -1570625932)) + (i32.add (i32.const 397568657)) + (i32.add (i32.const 1789442841)) + (i32.add (i32.const 664998932)) + (i32.add (i32.const -927150354)) + (i32.add (i32.const 573034083)) + (i32.add (i32.const -1316174772)) + (i32.add (i32.const -1352418185)) + (i32.add (i32.const -1302308727)) + (i32.add (i32.const -1256231630)) + (i32.add (i32.const -437416733)) + (i32.add (i32.const 2074112425)) + (i32.add (i32.const 1096666337)) + (i32.add (i32.const -2044962563)) + (i32.add (i32.const 661289604)) + (i32.add (i32.const -1855103840)) + (i32.add (i32.const -1374636783)) + (i32.add (i32.const 1311003347)) + (i32.add (i32.const -603676138)) + (i32.add (i32.const 1191088351)) + (i32.add (i32.const -30050443)) + (i32.add (i32.const 22469264)) + (i32.add (i32.const 1840730911)) + (i32.add (i32.const 926182003)) + (i32.add (i32.const 114890493)) + (i32.add (i32.const -667803311)) + (i32.add (i32.const 968879236)) + (i32.add (i32.const -903279356)) + (i32.add (i32.const 682902959)) + (i32.add (i32.const -43866341)) + (i32.add (i32.const 1157874799)) + (i32.add (i32.const 1371773238)) + (i32.add (i32.const -424278502)) + (i32.add (i32.const -267524472)) + (i32.add (i32.const -374380)) + (i32.add (i32.const 265677902)) + (i32.add (i32.const -61006730)) + (i32.add (i32.const 38441682)) + (i32.add (i32.const -1470607083)) + (i32.add (i32.const 714166590)) + (i32.add (i32.const -1886076176)) + (i32.add (i32.const -1011014106)) + (i32.add (i32.const 6364560)) + (i32.add (i32.const 620670818)) + (i32.add (i32.const -1910613263)) + (i32.add (i32.const 1422318558)) + (i32.add (i32.const -399151664)) + (i32.add (i32.const -965956236)) + (i32.add (i32.const -87831760)) + (i32.add (i32.const 832480880)) + (i32.add (i32.const -1354415943)) + (i32.add (i32.const 1181820320)) + (i32.add (i32.const 1751131834)) + (i32.add (i32.const -1479895340)) + (i32.add (i32.const -762300218)) + (i32.add (i32.const -1795198372)) + (i32.add (i32.const -915425357)) + (i32.add (i32.const -811166472)) + (i32.add (i32.const 476899898)) + (i32.add (i32.const -885655775)) + (i32.add (i32.const -884780390)) + (i32.add (i32.const 397734321)) + (i32.add (i32.const 884738469)) + (i32.add (i32.const -1324586305)) + (i32.add (i32.const -1929028233)) + (i32.add (i32.const 1948209440)) + (i32.add (i32.const 1663510739)) + (i32.add (i32.const 682798897)) + (i32.add (i32.const -112386422)) + (i32.add (i32.const -1921716798)) + (i32.add (i32.const 967350610)) + (i32.add (i32.const -1169960852)) + (i32.add (i32.const -190638904)) + (i32.add (i32.const 793122756)) + (i32.add (i32.const -1767448737)) + (i32.add (i32.const 1572854706)) + (i32.add (i32.const -1968719812)) + (i32.add (i32.const -1740150225)) + (i32.add (i32.const -154121176)) + (i32.add (i32.const 162102822)) + (i32.add (i32.const -675045545)) + (i32.add (i32.const 1229773459)) + (i32.add (i32.const 1620256684)) + (i32.add (i32.const 237114701)) + (i32.add (i32.const 111260225)) + (i32.add (i32.const 476721687)) + (i32.add (i32.const 373235035)) + (i32.add (i32.const -956285325)) + (i32.add (i32.const -289893318)) + (i32.add (i32.const 1296854829)) + (i32.add (i32.const -1697862517)) + (i32.add (i32.const 647826473)) + (i32.add (i32.const -974944816)) + (i32.add (i32.const 1420538611)) + (i32.add (i32.const -838450360)) + (i32.add (i32.const -813116100)) + (i32.add (i32.const -1264968157)) + (i32.add (i32.const 737523443)) + (i32.add (i32.const -1519310315)) + (i32.add (i32.const -696559869)) + (i32.add (i32.const -765915488)) + (i32.add (i32.const -132138852)) + (i32.add (i32.const 1830768464)) + (i32.add (i32.const 2080479488)) + (i32.add (i32.const -2059391237)) + (i32.add (i32.const -1367205862)) + (i32.add (i32.const -1488409437)) + (i32.add (i32.const -1535746016)) + (i32.add (i32.const 1233396490)) + (i32.add (i32.const 2086539697)) + (i32.add (i32.const 873890422)) + (i32.add (i32.const 1397742487)) + (i32.add (i32.const -1305187694)) + (i32.add (i32.const 1976910781)) + (i32.add (i32.const 1285154763)) + (i32.add (i32.const 1818919711)) + (i32.add (i32.const 1142619058)) + (i32.add (i32.const 1696505783)) + (i32.add (i32.const 426007277)) + (i32.add (i32.const 422691504)) + (i32.add (i32.const 1388505414)) + (i32.add (i32.const -1008271403)) + (i32.add (i32.const -1459429714)) + (i32.add (i32.const 1813354696)) + (i32.add (i32.const -1832024852)) + (i32.add (i32.const 433231742)) + (i32.add (i32.const 2114992050)) + (i32.add (i32.const 1747730402)) + (i32.add (i32.const -807497781)) + (i32.add (i32.const 413386158)) + (i32.add (i32.const 1398451293)) + (i32.add (i32.const -468214005)) + (i32.add (i32.const -18444080)) + (i32.add (i32.const -2015569874)) + (i32.add (i32.const -1809193983)) + (i32.add (i32.const 1194508682)) + (i32.add (i32.const -477605776)) + (i32.add (i32.const -1091611600)) + (i32.add (i32.const -2011201336)) + (i32.add (i32.const 433891494)) + (i32.add (i32.const -2101595680)) + (i32.add (i32.const 1704729437)) + (i32.add (i32.const 357031960)) + (i32.add (i32.const 1340768236)) + (i32.add (i32.const 73394031)) + (i32.add (i32.const -2009428061)) + (i32.add (i32.const -286768291)) + (i32.add (i32.const 1114977315)) + (i32.add (i32.const 1328643019)) + (i32.add (i32.const -1101487387)) + (i32.add (i32.const -1956124591)) + (i32.add (i32.const -931218544)) + (i32.add (i32.const 631629629)) + (i32.add (i32.const -2142589302)) + (i32.add (i32.const -1760503854)) + (i32.add (i32.const 406114467)) + (i32.add (i32.const 933881569)) + (i32.add (i32.const -1487770102)) + (i32.add (i32.const -2128846315)) + (i32.add (i32.const 523132114)) + (i32.add (i32.const -300455399)) + (i32.add (i32.const -574813806)) + (i32.add (i32.const -1517336509)) + (i32.add (i32.const 64680751)) + (i32.add (i32.const -101151165)) + (i32.add (i32.const 1698986682)) + (i32.add (i32.const 752384335)) + (i32.add (i32.const 824551109)) + (i32.add (i32.const -1718596023)) + (i32.add (i32.const -1965296428)) + (i32.add (i32.const 1138577450)) + (i32.add (i32.const -876903335)) + (i32.add (i32.const 1548012042)) + (i32.add (i32.const -606245867)) + (i32.add (i32.const 72342710)) + (i32.add (i32.const 72885641)) + (i32.add (i32.const -224077711)) + (i32.add (i32.const -801731853)) + (i32.add (i32.const 2110947035)) + (i32.add (i32.const 1724061221)) + (i32.add (i32.const 520827580)) + (i32.add (i32.const 1304338706)) + (i32.add (i32.const -571263109)) + (i32.add (i32.const -2065889189)) + (i32.add (i32.const 1362212392)) + (i32.add (i32.const -1118636770)) + (i32.add (i32.const 803302574)) + (i32.add (i32.const 176128395)) + (i32.add (i32.const 409587613)) + (i32.add (i32.const -615159696)) + (i32.add (i32.const 1432822631)) + (i32.add (i32.const -2027892582)) + (i32.add (i32.const 1521745824)) + (i32.add (i32.const -1889710683)) + (i32.add (i32.const 1003933543)) + (i32.add (i32.const 1415325136)) + (i32.add (i32.const 1218221290)) + (i32.add (i32.const -129142263)) + (i32.add (i32.const 1221735081)) + (i32.add (i32.const 1750459037)) + (i32.add (i32.const -2052947227)) + (i32.add (i32.const 1048629932)) + (i32.add (i32.const 729508170)) + (i32.add (i32.const -1545846317)) + (i32.add (i32.const -804137662)) + (i32.add (i32.const 438676787)) + (i32.add (i32.const 993278154)) + (i32.add (i32.const -399355858)) + (i32.add (i32.const -801043986)) + (i32.add (i32.const 792176581)) + (i32.add (i32.const 1354063747)) + (i32.add (i32.const 821901480)) + (i32.add (i32.const -1436652338)) + (i32.add (i32.const 2118612568)) + (i32.add (i32.const 1973796139)) + (i32.add (i32.const -937823564)) + (i32.add (i32.const 1070144638)) + (i32.add (i32.const -236320811)) + (i32.add (i32.const -1158617637)) + (i32.add (i32.const -1707011984)) + (i32.add (i32.const 1089874805)) + (i32.add (i32.const -71781338)) + (i32.add (i32.const 553662022)) + (i32.add (i32.const -1544781516)) + (i32.add (i32.const 1348446424)) + (i32.add (i32.const 1070344102)) + (i32.add (i32.const -1495700805)) + (i32.add (i32.const -383623978)) + (i32.add (i32.const -58413132)) + (i32.add (i32.const -691478608)) + (i32.add (i32.const -1171736995)) + (i32.add (i32.const -1352132877)) + (i32.add (i32.const -963466331)) + (i32.add (i32.const -625624650)) + (i32.add (i32.const 1948732012)) + (i32.add (i32.const 1949493837)) + (i32.add (i32.const 1758186640)) + (i32.add (i32.const -430320869)) + (i32.add (i32.const -830128750)) + (i32.add (i32.const 1244549134)) + (i32.add (i32.const 1178509387)) + (i32.add (i32.const -1094127105)) + (i32.add (i32.const 1040367743)) + (i32.add (i32.const -1436493923)) + (i32.add (i32.const 325796155)) + (i32.add (i32.const -151466073)) + (i32.add (i32.const 1432908528)) + (i32.add (i32.const 2041729894)) + (i32.add (i32.const 1392405582)) + (i32.add (i32.const -1055463609)) + (i32.add (i32.const -295369545)) + (i32.add (i32.const -260756717)) + (i32.add (i32.const -1087786962)) + (i32.add (i32.const -643577951)) + (i32.add (i32.const -801260848)) + (i32.add (i32.const -1669642396)) + (i32.add (i32.const -802414133)) + (i32.add (i32.const 1615406883)) + (i32.add (i32.const 1970369025)) + (i32.add (i32.const 249136308)) + (i32.add (i32.const 578862944)) + (i32.add (i32.const -695822636)) + (i32.add (i32.const 1711975494)) + (i32.add (i32.const -680371239)) + (i32.add (i32.const -590575311)) + (i32.add (i32.const 1025453658)) + (i32.add (i32.const -1093706593)) + (i32.add (i32.const -627812445)) + (i32.add (i32.const 743775821)) + (i32.add (i32.const 1639849267)) + (i32.add (i32.const -1515573901)) + (i32.add (i32.const 1726811187)) + (i32.add (i32.const -651102028)) + (i32.add (i32.const -1796955482)) + (i32.add (i32.const -1599154398)) + (i32.add (i32.const -1468954299)) + (i32.add (i32.const -294432925)) + (i32.add (i32.const 1877342763)) + (i32.add (i32.const 1367941251)) + (i32.add (i32.const -652533988)) + (i32.add (i32.const -507511175)) + (i32.add (i32.const -11842452)) + (i32.add (i32.const 1773881113)) + (i32.add (i32.const 786772749)) + (i32.add (i32.const 630416714)) + (i32.add (i32.const -158957500)) + (i32.add (i32.const -2125215169)) + (i32.add (i32.const -332888875)) + (i32.add (i32.const 1592055286)) + (i32.add (i32.const -344404200)) + (i32.add (i32.const -128352958)) + (i32.add (i32.const 1197037172)) + (i32.add (i32.const -352520347)) + (i32.add (i32.const -311009132)) + (i32.add (i32.const -1620518134)) + (i32.add (i32.const 1979456174)) + (i32.add (i32.const 1656904072)) + (i32.add (i32.const 1498194172)) + (i32.add (i32.const -273373589)) + (i32.add (i32.const -1804957279)) + (i32.add (i32.const 568638569)) + (i32.add (i32.const -1821461226)) + (i32.add (i32.const 578565086)) + (i32.add (i32.const 1201059968)) + (i32.add (i32.const 795310813)) + (i32.add (i32.const 2033928973)) + (i32.add (i32.const 1949683375)) + (i32.add (i32.const 482168048)) + (i32.add (i32.const -1085303150)) + (i32.add (i32.const -1975406608)) + (i32.add (i32.const -1484429491)) + (i32.add (i32.const -332588074)) + (i32.add (i32.const -2134304123)) + (i32.add (i32.const -559731063)) + (i32.add (i32.const -1454908568)) + (i32.add (i32.const -21231031)) + (i32.add (i32.const -1496190344)) + (i32.add (i32.const -425820988)) + (i32.add (i32.const 1173573979)) + (i32.add (i32.const 1711601649)) + (i32.add (i32.const 26674080)) + (i32.add (i32.const 967440404)) + (i32.add (i32.const -931556673)) + (i32.add (i32.const 44070031)) + (i32.add (i32.const -1394519334)) + (i32.add (i32.const 553338633)) + (i32.add (i32.const 535158087)) + (i32.add (i32.const 1020089763)) + (i32.add (i32.const -1463736698)) + (i32.add (i32.const 1069109932)) + (i32.add (i32.const -794003972)) + (i32.add (i32.const -1442216252)) + (i32.add (i32.const 376226741)) + (i32.add (i32.const -1508122946)) + (i32.add (i32.const 144038898)) + (i32.add (i32.const -2085911864)) + (i32.add (i32.const -999940311)) + (i32.add (i32.const -168502805)) + (i32.add (i32.const -833001476)) + (i32.add (i32.const -48696977)) + (i32.add (i32.const 1922851367)) + (i32.add (i32.const 1284347668)) + (i32.add (i32.const -763300981)) + (i32.add (i32.const 621808648)) + (i32.add (i32.const -1239783003)) + (i32.add (i32.const 1575143362)) + (i32.add (i32.const -1302706837)) + (i32.add (i32.const -1192836502)) + (i32.add (i32.const -779299561)) + (i32.add (i32.const -491368671)) + (i32.add (i32.const -1768587214)) + (i32.add (i32.const -175718420)) + (i32.add (i32.const -2058891909)) + (i32.add (i32.const 1201449025)) + (i32.add (i32.const -576545944)) + (i32.add (i32.const 10309885)) + (i32.add (i32.const 2134549864)) + (i32.add (i32.const -1765719955)) + (i32.add (i32.const -413154475)) + (i32.add (i32.const 1546794886)) + (i32.add (i32.const 541804399)) + (i32.add (i32.const 1222489759)) + (i32.add (i32.const -98781630)) + (i32.add (i32.const -527097699)) + (i32.add (i32.const -1395812232)) + (i32.add (i32.const -1537165528)) + (i32.add (i32.const 1005992257)) + (i32.add (i32.const -2125987544)) + (i32.add (i32.const 1818519331)) + (i32.add (i32.const 432892795)) + (i32.add (i32.const -620751749)) + (i32.add (i32.const -989312004)) + (i32.add (i32.const -2004442259)) + (i32.add (i32.const 594715701)) + (i32.add (i32.const -2139251288)) + (i32.add (i32.const -1292933224)) + (i32.add (i32.const 924257397)) + (i32.add (i32.const -1862429227)) + (i32.add (i32.const -531795943)) + (i32.add (i32.const -1047384737)) + (i32.add (i32.const 204404296)) + (i32.add (i32.const 552239171)) + (i32.add (i32.const 2053168411)) + (i32.add (i32.const 141687091)) + (i32.add (i32.const 127255115)) + (i32.add (i32.const -504019658)) + (i32.add (i32.const 920470026)) + (i32.add (i32.const -193448070)) + (i32.add (i32.const -345082864)) + (i32.add (i32.const 1257274667)) + (i32.add (i32.const -406390720)) + (i32.add (i32.const 1014101282)) + (i32.add (i32.const -39010405)) + (i32.add (i32.const 408894415)) + (i32.add (i32.const 646408232)) + (i32.add (i32.const 244914057)) + (i32.add (i32.const 32593339)) + (i32.add (i32.const -706257572)) + (i32.add (i32.const -1759729081)) + (i32.add (i32.const -1790369892)) + (i32.add (i32.const -1902973877)) + (i32.add (i32.const -1423405803)) + (i32.add (i32.const 798694198)) + (i32.add (i32.const -1660723122)) + (i32.add (i32.const -1230313051)) + (i32.add (i32.const 1301294171)) + (i32.add (i32.const 960539627)) + (i32.add (i32.const 981391441)) + (i32.add (i32.const -796078507)) + (i32.add (i32.const 1985238535)) + (i32.add (i32.const 986418115)) + (i32.add (i32.const 2007739172)) + (i32.add (i32.const -2060116041)) + (i32.add (i32.const -1444622795)) + (i32.add (i32.const -1527660582)) + (i32.add (i32.const 234626768)) + (i32.add (i32.const -2117595898)) + (i32.add (i32.const -1251304062)) + (i32.add (i32.const 262031598)) + (i32.add (i32.const -2432248)) + (i32.add (i32.const 1183545796)) + (i32.add (i32.const 681810023)) + (i32.add (i32.const -1491826225)) + (i32.add (i32.const 1523884946)) + (i32.add (i32.const 2105048984)) + (i32.add (i32.const 403374054)) + (i32.add (i32.const -142819866)) + (i32.add (i32.const 296200334)) + (i32.add (i32.const -1315677624)) + (i32.add (i32.const 385371289)) + (i32.add (i32.const 1959365086)) + (i32.add (i32.const -1423419052)) + (i32.add (i32.const -1604141696)) + (i32.add (i32.const -2086984583)) + (i32.add (i32.const -2147132077)) + (i32.add (i32.const -1304059068)) + (i32.add (i32.const 1745558372)) + (i32.add (i32.const -1460004441)) + (i32.add (i32.const 326607602)) + (i32.add (i32.const 454961629)) + (i32.add (i32.const -276360924)) + (i32.add (i32.const -359557785)) + (i32.add (i32.const 790193224)) + (i32.add (i32.const -1102973933)) + (i32.add (i32.const -1545163017)) + (i32.add (i32.const 535724767)) + (i32.add (i32.const 946747867)) + (i32.add (i32.const 72977924)) + (i32.add (i32.const -427839351)) + (i32.add (i32.const 422020025)) + (i32.add (i32.const -1173520442)) + (i32.add (i32.const -183343721)) + (i32.add (i32.const 1465140004)) + (i32.add (i32.const -1565309544)) + (i32.add (i32.const -250757266)) + (i32.add (i32.const 779698915)) + (i32.add (i32.const 1283572379)) + (i32.add (i32.const -1797832254)) + (i32.add (i32.const -40758432)) + (i32.add (i32.const -1884223037)) + (i32.add (i32.const 785021721)) + (i32.add (i32.const -1707811642)) + (i32.add (i32.const -2055186646)) + (i32.add (i32.const 1571743989)) + (i32.add (i32.const 237758809)) + (i32.add (i32.const 454040278)) + (i32.add (i32.const 461609920)) + (i32.add (i32.const -1752247706)) + (i32.add (i32.const 2023447964)) + (i32.add (i32.const -838537938)) + (i32.add (i32.const 2131901313)) + (i32.add (i32.const 1244557770)) + (i32.add (i32.const 21845655)) + (i32.add (i32.const -1185235036)) + (i32.add (i32.const 547178884)) + (i32.add (i32.const 511416436)) + (i32.add (i32.const 1273141727)) + (i32.add (i32.const 665441571)) + (i32.add (i32.const -2039425588)) + (i32.add (i32.const 242648940)) + (i32.add (i32.const 141872265)) + (i32.add (i32.const 802902788)) + (i32.add (i32.const -265737396)) + (i32.add (i32.const -1732624865)) + (i32.add (i32.const -737983413)) + (i32.add (i32.const -924088094)) + (i32.add (i32.const 350282087)) + (i32.add (i32.const 695080431)) + (i32.add (i32.const -355920600)) + (i32.add (i32.const 109804616)) + (i32.add (i32.const 43888887)) + (i32.add (i32.const -1081018529)) + (i32.add (i32.const 608720528)) + (i32.add (i32.const 1787707811)) + (i32.add (i32.const 966518449)) + (i32.add (i32.const -701284333)) + (i32.add (i32.const -846498207)) + (i32.add (i32.const 200054068)) + (i32.add (i32.const -1268304729)) + (i32.add (i32.const -98106530)) + (i32.add (i32.const -2144077301)) + (i32.add (i32.const -1232375845)) + (i32.add (i32.const 1388957127)) + (i32.add (i32.const -1453165792)) + (i32.add (i32.const -878967061)) + (i32.add (i32.const -1056118352)) + (i32.add (i32.const 963086613)) + (i32.add (i32.const 1423834668)) + (i32.add (i32.const 1498169824)) + (i32.add (i32.const -1679764959)) + (i32.add (i32.const 684936092)) + (i32.add (i32.const 201910592)) + (i32.add (i32.const -407091829)) + (i32.add (i32.const 1558900110)) + (i32.add (i32.const 224222741)) + (i32.add (i32.const -214834145)) + (i32.add (i32.const -534307292)) + (i32.add (i32.const -1958457599)) + (i32.add (i32.const 95602710)) + (i32.add (i32.const 1377755452)) + (i32.add (i32.const 1087358758)) + (i32.add (i32.const -1366850258)) + (i32.add (i32.const -1249827187)) + (i32.add (i32.const -199503056)) + (i32.add (i32.const -2050061454)) + (i32.add (i32.const -1183122579)) + (i32.add (i32.const 1358444304)) + (i32.add (i32.const -1444758395)) + (i32.add (i32.const 493142775)) + (i32.add (i32.const -1649329057)) + (i32.add (i32.const -909924246)) + (i32.add (i32.const -605871429)) + (i32.add (i32.const -584053849)) + (i32.add (i32.const -925541361)) + (i32.add (i32.const 368106787)) + (i32.add (i32.const -1320037507)) + (i32.add (i32.const -1705551375)) + (i32.add (i32.const -502844742)) + (i32.add (i32.const -1747287752)) + (i32.add (i32.const 1058944966)) + (i32.add (i32.const 2093805275)) + (i32.add (i32.const 1558093212)) + (i32.add (i32.const -406885153)) + (i32.add (i32.const -47805975)) + (i32.add (i32.const 1159882225)) + (i32.add (i32.const -1687137692)) + (i32.add (i32.const -503342315)) + (i32.add (i32.const 1412935169)) + (i32.add (i32.const 1433824963)) + (i32.add (i32.const 460412817)) + (i32.add (i32.const -1999724813)) + (i32.add (i32.const -2119267721)) + (i32.add (i32.const -516834837)) + (i32.add (i32.const -80708157)) + (i32.add (i32.const -76005725)) + (i32.add (i32.const -1492374623)) + (i32.add (i32.const 931242285)) + (i32.add (i32.const 1048330828)) + (i32.add (i32.const -1569166309)) + (i32.add (i32.const -1380080340)) + (i32.add (i32.const -852403160)) + (i32.add (i32.const -1505292771)) + (i32.add (i32.const -834799530)) + (i32.add (i32.const -211000742)) + (i32.add (i32.const 1776582816)) + (i32.add (i32.const 1545364857)) + (i32.add (i32.const -1812142606)) + (i32.add (i32.const 1384509256)) + (i32.add (i32.const -1470661395)) + (i32.add (i32.const -1722893420)) + (i32.add (i32.const 164482923)) + (i32.add (i32.const 77796101)) + (i32.add (i32.const 764388749)) + (i32.add (i32.const 1804692689)) + (i32.add (i32.const 1165518699)) + (i32.add (i32.const 1478129839)) + (i32.add (i32.const 1333315867)) + (i32.add (i32.const -811640088)) + (i32.add (i32.const 949016033)) + (i32.add (i32.const 312159387)) + (i32.add (i32.const 785711918)) + (i32.add (i32.const -2989869)) + (i32.add (i32.const 1221498935)) + (i32.add (i32.const -849241627)) + (i32.add (i32.const 1300998053)) + (i32.add (i32.const 868428273)) + (i32.add (i32.const 1323266702)) + (i32.add (i32.const 1379562248)) + (i32.add (i32.const -1858743063)) + (i32.add (i32.const -14778475)) + (i32.add (i32.const -1763734059)) + (i32.add (i32.const -1154055437)) + (i32.add (i32.const -1282483888)) + (i32.add (i32.const 1242898737)) + (i32.add (i32.const 1783460488)) + (i32.add (i32.const 204335134)) + (i32.add (i32.const 1756168549)) + (i32.add (i32.const 1580476886)) + (i32.add (i32.const 111620402)) + (i32.add (i32.const 2052301033)) + (i32.add (i32.const 1945344729)) + (i32.add (i32.const -2070830694)) + (i32.add (i32.const -1308331299)) + (i32.add (i32.const 1298933848)) + (i32.add (i32.const 482811789)) + (i32.add (i32.const -451467003)) + (i32.add (i32.const 559366771)) + (i32.add (i32.const -561161115)) + (i32.add (i32.const 438219174)) + (i32.add (i32.const 283938645)) + (i32.add (i32.const -874267069)) + (i32.add (i32.const 902111045)) + (i32.add (i32.const -53352829)) + (i32.add (i32.const 1556543469)) + (i32.add (i32.const 204177714)) + (i32.add (i32.const -793061269)) + (i32.add (i32.const 1347859778)) + (i32.add (i32.const -1174681174)) + (i32.add (i32.const -1194558960)) + (i32.add (i32.const -270554925)) + (i32.add (i32.const 975218406)) + (i32.add (i32.const 1518799489)) + (i32.add (i32.const 164868627)) + (i32.add (i32.const 2144870031)) + (i32.add (i32.const -543920936)) + (i32.add (i32.const -1841707630)) + (i32.add (i32.const -2142239851)) + (i32.add (i32.const 1757716528)) + (i32.add (i32.const 1419179879)) + (i32.add (i32.const 468455157)) + (i32.add (i32.const -803234117)) + (i32.add (i32.const -2129427466)) + (i32.add (i32.const 580354589)) + (i32.add (i32.const -394288898)) + (i32.add (i32.const -1334389559)) + (i32.add (i32.const 1102666624)) + (i32.add (i32.const 1817433417)) + (i32.add (i32.const -1852283532)) + (i32.add (i32.const 1992725390)) + (i32.add (i32.const 1790226331)) + (i32.add (i32.const -1107109154)) + (i32.add (i32.const 1260760440)) + (i32.add (i32.const 1021138996)) + (i32.add (i32.const 1179050636)) + (i32.add (i32.const -1054398949)) + (i32.add (i32.const -1192756258)) + (i32.add (i32.const 1736714234)) + (i32.add (i32.const 2117727240)) + (i32.add (i32.const -360234923)) + (i32.add (i32.const 1080912405)) + (i32.add (i32.const -785716037)) + (i32.add (i32.const -1118182436)) + (i32.add (i32.const -1183892557)) + (i32.add (i32.const 1688673155)) + (i32.add (i32.const 213282929)) + (i32.add (i32.const -2080115106)) + (i32.add (i32.const -1730514810)) + (i32.add (i32.const -1094198426)) + (i32.add (i32.const 1461303800)) + (i32.add (i32.const -1220504769)) + (i32.add (i32.const 6210449)) + (i32.add (i32.const -1805798385)) + (i32.add (i32.const -2098582208)) + (i32.add (i32.const 1658281519)) + (i32.add (i32.const 323918398)) + (i32.add (i32.const 18723028)) + (i32.add (i32.const 2114873082)) + (i32.add (i32.const 969842084)) + (i32.add (i32.const -1073855511)) + (i32.add (i32.const 1911015495)) + (i32.add (i32.const -7072349)) + (i32.add (i32.const 1431575471)) + (i32.add (i32.const 930648946)) + (i32.add (i32.const -310111896)) + (i32.add (i32.const 1675928935)) + (i32.add (i32.const 1943574704)) + (i32.add (i32.const 1120437968)) + (i32.add (i32.const 1029126013)) + (i32.add (i32.const -706016460)) + (i32.add (i32.const -1427456736)) + (i32.add (i32.const 179903447)) + (i32.add (i32.const -1359863675)) + (i32.add (i32.const 1506925994)) + (i32.add (i32.const -97850290)) + (i32.add (i32.const 603445282)) + (i32.add (i32.const 723800247)) + (i32.add (i32.const 1817519218)) + (i32.add (i32.const -206324852)) + (i32.add (i32.const 140131062)) + (i32.add (i32.const -52503198)) + (i32.add (i32.const -1675432560)) + (i32.add (i32.const 103542907)) + (i32.add (i32.const 503404860)) + (i32.add (i32.const 1277125675)) + (i32.add (i32.const 1069946593)) + (i32.add (i32.const 1548531683)) + (i32.add (i32.const 1634897085)) + (i32.add (i32.const 875190942)) + (i32.add (i32.const 1676118825)) + (i32.add (i32.const -580644450)) + (i32.add (i32.const -2090473882)) + (i32.add (i32.const 798940480)) + (i32.add (i32.const -1718065789)) + (i32.add (i32.const -1494421360)) + (i32.add (i32.const -398070203)) + (i32.add (i32.const 1669451758)) + (i32.add (i32.const -905362380)) + (i32.add (i32.const 122015144)) + (i32.add (i32.const 1139554530)) + (i32.add (i32.const 1233363683)) + (i32.add (i32.const 1357594413)) + (i32.add (i32.const 2039702226)) + (i32.add (i32.const 1564448983)) + (i32.add (i32.const 894246147)) + (i32.add (i32.const 943684233)) + (i32.add (i32.const 1606091296)) + (i32.add (i32.const -901629378)) + (i32.add (i32.const 106759623)) + (i32.add (i32.const -496141788)) + (i32.add (i32.const -1968168879)) + (i32.add (i32.const -569465819)) + (i32.add (i32.const -181623996)) + (i32.add (i32.const 1602030395)) + (i32.add (i32.const 444252705)) + (i32.add (i32.const -2018750531)) + (i32.add (i32.const 1945530825)) + (i32.add (i32.const 518823313)) + (i32.add (i32.const -1103910711)) + (i32.add (i32.const -1739448827)) + (i32.add (i32.const -92752487)) + (i32.add (i32.const -1912016909)) + (i32.add (i32.const -1312186485)) + (i32.add (i32.const 1540916702)) + (i32.add (i32.const -77129042)) + (i32.add (i32.const -1267348099)) + (i32.add (i32.const 740241478)) + (i32.add (i32.const 233271015)) + (i32.add (i32.const 1182193643)) + (i32.add (i32.const 1632234794)) + (i32.add (i32.const 126912753)) + (i32.add (i32.const 1730771588)) + (i32.add (i32.const 1658114610)) + (i32.add (i32.const -1933052959)) + (i32.add (i32.const 1556344101)) + (i32.add (i32.const 2014201433)) + (i32.add (i32.const -581510908)) + (i32.add (i32.const 1759608046)) + (i32.add (i32.const 1278798770)) + (i32.add (i32.const 1822395490)) + (i32.add (i32.const 1922474323)) + (i32.add (i32.const 73941758)) + (i32.add (i32.const -217337152)) + (i32.add (i32.const 368152449)) + (i32.add (i32.const -1755301471)) + (i32.add (i32.const -870625704)) + (i32.add (i32.const 1773599513)) + (i32.add (i32.const 556494766)) + (i32.add (i32.const 1879953871)) + (i32.add (i32.const 358977849)) + (i32.add (i32.const 958721338)) + (i32.add (i32.const -882046278)) + (i32.add (i32.const 651572558)) + (i32.add (i32.const -1143949998)) + (i32.add (i32.const 1529511004)) + (i32.add (i32.const 774869937)) + (i32.add (i32.const 2140615327)) + (i32.add (i32.const -2053410094)) + (i32.add (i32.const 678029173)) + (i32.add (i32.const 1444201954)) + (i32.add (i32.const -1297296500)) + (i32.add (i32.const 392785008)) + (i32.add (i32.const -2035311398)) + (i32.add (i32.const -842344753)) + (i32.add (i32.const -340746107)) + (i32.add (i32.const 1351154072)) + (i32.add (i32.const 28127745)) + (i32.add (i32.const 954787664)) + (i32.add (i32.const 313552281)) + (i32.add (i32.const -1690838073)) + (i32.add (i32.const 528898367)) + (i32.add (i32.const 1964830952)) + (i32.add (i32.const -1979825903)) + (i32.add (i32.const 84312902)) + (i32.add (i32.const -1673212195)) + (i32.add (i32.const -290485206)) + (i32.add (i32.const 1372123712)) + (i32.add (i32.const -223367538)) + (i32.add (i32.const -1777425478)) + (i32.add (i32.const 795138971)) + (i32.add (i32.const -116921167)) + (i32.add (i32.const -1182940391)) + (i32.add (i32.const 1765960219)) + (i32.add (i32.const -857291177)) + (i32.add (i32.const 188539755)) + (i32.add (i32.const -1796759119)) + (i32.add (i32.const -1110362462)) + (i32.add (i32.const 213764141)) + (i32.add (i32.const 1944919227)) + (i32.add (i32.const -1258579206)) + (i32.add (i32.const -468453021)) + (i32.add (i32.const 910131079)) + (i32.add (i32.const 1028986711)) + (i32.add (i32.const -871126695)) + (i32.add (i32.const -1986633182)) + (i32.add (i32.const 754118873)) + (i32.add (i32.const 5798026)) + (i32.add (i32.const 333753147)) + (i32.add (i32.const -706662192)) + (i32.add (i32.const -1276785904)) + (i32.add (i32.const -1945486933)) + (i32.add (i32.const -1816490547)) + (i32.add (i32.const -2109742277)) + (i32.add (i32.const -1703588188)) + (i32.add (i32.const 1335803791)) + (i32.add (i32.const 1112853743)) + (i32.add (i32.const 1648797649)) + (i32.add (i32.const 493265011)) + (i32.add (i32.const 992274181)) + (i32.add (i32.const -1817762216)) + (i32.add (i32.const -1445469337)) + (i32.add (i32.const 161804034)) + (i32.add (i32.const -939909029)) + (i32.add (i32.const -2111755750)) + (i32.add (i32.const 672651363)) + (i32.add (i32.const -70184095)) + (i32.add (i32.const -897277026)) + (i32.add (i32.const 459575241)) + (i32.add (i32.const 1394025166)) + (i32.add (i32.const 158642604)) + (i32.add (i32.const 1920702849)) + (i32.add (i32.const -460744251)) + (i32.add (i32.const 2099715300)) + (i32.add (i32.const 304020246)) + (i32.add (i32.const -1052796045)) + (i32.add (i32.const -1574767515)) + (i32.add (i32.const -1484295285)) + (i32.add (i32.const 1330479416)) + (i32.add (i32.const 273802931)) + (i32.add (i32.const 2015029340)) + (i32.add (i32.const -2128097202)) + (i32.add (i32.const 547563465)) + (i32.add (i32.const 244080835)) + (i32.add (i32.const 1239916860)) + (i32.add (i32.const 186197816)) + (i32.add (i32.const -1625452604)) + (i32.add (i32.const -79246995)) + (i32.add (i32.const 1536643448)) + (i32.add (i32.const -432921731)) + (i32.add (i32.const -186029970)) + (i32.add (i32.const 1343472530)) + (i32.add (i32.const -1579042554)) + (i32.add (i32.const -1707109053)) + (i32.add (i32.const 140787035)) + (i32.add (i32.const -1834452291)) + (i32.add (i32.const -136763237)) + (i32.add (i32.const 623462467)) + (i32.add (i32.const 1639348249)) + (i32.add (i32.const -1281755949)) + (i32.add (i32.const -1631045017)) + (i32.add (i32.const 1254000467)) + (i32.add (i32.const 1483153539)) + (i32.add (i32.const 73974910)) + (i32.add (i32.const -1810466618)) + (i32.add (i32.const 1838223472)) + (i32.add (i32.const -344840722)) + (i32.add (i32.const 765209150)) + (i32.add (i32.const -1256689455)) + (i32.add (i32.const -598052965)) + (i32.add (i32.const -1877068122)) + (i32.add (i32.const -1719813721)) + (i32.add (i32.const -1125603083)) + (i32.add (i32.const -816600225)) + (i32.add (i32.const 1133723329)) + (i32.add (i32.const 288927168)) + (i32.add (i32.const 288087573)) + (i32.add (i32.const -802791230)) + (i32.add (i32.const -777431213)) + (i32.add (i32.const 761107582)) + (i32.add (i32.const 1816954775)) + (i32.add (i32.const 483818756)) + (i32.add (i32.const -497138613)) + (i32.add (i32.const -1332209804)) + (i32.add (i32.const 623646230)) + (i32.add (i32.const 1116563711)) + (i32.add (i32.const -1524676886)) + (i32.add (i32.const -331844400)) + (i32.add (i32.const 1078067455)) + (i32.add (i32.const -18191764)) + (i32.add (i32.const -566365887)) + (i32.add (i32.const -377057871)) + (i32.add (i32.const 563346612)) + (i32.add (i32.const 953693501)) + (i32.add (i32.const 2025695793)) + (i32.add (i32.const -371401379)) + (i32.add (i32.const -1871607798)) + (i32.add (i32.const -1635895197)) + (i32.add (i32.const 243126451)) + (i32.add (i32.const -927205115)) + (i32.add (i32.const 1427300692)) + (i32.add (i32.const 2004075084)) + (i32.add (i32.const -786091380)) + (i32.add (i32.const -1726272226)) + (i32.add (i32.const -1763828732)) + (i32.add (i32.const -1125495058)) + (i32.add (i32.const -118075854)) + (i32.add (i32.const -438071682)) + (i32.add (i32.const -1644422420)) + (i32.add (i32.const -183090773)) + (i32.add (i32.const 231174411)) + (i32.add (i32.const 1163555715)) + (i32.add (i32.const 477458528)) + (i32.add (i32.const 9561183)) + (i32.add (i32.const 291268423)) + (i32.add (i32.const -476807560)) + (i32.add (i32.const -2069498632)) + (i32.add (i32.const -418023269)) + (i32.add (i32.const -1651859051)) + (i32.add (i32.const -642827582)) + (i32.add (i32.const 526699243)) + (i32.add (i32.const 252065277)) + (i32.add (i32.const -1838777704)) + (i32.add (i32.const 982962452)) + (i32.add (i32.const 360696562)) + (i32.add (i32.const -608068939)) + (i32.add (i32.const -1499891962)) + (i32.add (i32.const -877901474)) + (i32.add (i32.const -665180055)) + (i32.add (i32.const 1742424833)) + (i32.add (i32.const 1940510108)) + (i32.add (i32.const -1157157185)) + (i32.add (i32.const -477509814)) + (i32.add (i32.const 982710076)) + (i32.add (i32.const -159051439)) + (i32.add (i32.const -991732832)) + (i32.add (i32.const 1072883082)) + (i32.add (i32.const -20963585)) + (i32.add (i32.const 665112343)) + (i32.add (i32.const -723937108)) + (i32.add (i32.const -600374628)) + (i32.add (i32.const -936946810)) + (i32.add (i32.const 464874018)) + (i32.add (i32.const -1970078024)) + (i32.add (i32.const -1434304605)) + (i32.add (i32.const -1338320698)) + (i32.add (i32.const 1877875443)) + (i32.add (i32.const -1194988136)) + (i32.add (i32.const -1380102134)) + (i32.add (i32.const -234905235)) + (i32.add (i32.const 3974488)) + (i32.add (i32.const 1371436072)) + (i32.add (i32.const -454599979)) + (i32.add (i32.const -1275896026)) + (i32.add (i32.const -434869530)) + (i32.add (i32.const 1680209322)) + (i32.add (i32.const -565448822)) + (i32.add (i32.const -369936496)) + (i32.add (i32.const 1030494715)) + (i32.add (i32.const 397633966)) + (i32.add (i32.const 843395005)) + (i32.add (i32.const 20756286)) + (i32.add (i32.const 78042980)) + (i32.add (i32.const 1982077579)) + (i32.add (i32.const 1430115992)) + (i32.add (i32.const 467850819)) + (i32.add (i32.const -1657991586)) + (i32.add (i32.const -551721805)) + (i32.add (i32.const 131640498)) + (i32.add (i32.const 1313474594)) + (i32.add (i32.const 1399857503)) + (i32.add (i32.const 720423262)) + (i32.add (i32.const 374449064)) + (i32.add (i32.const -859452704)) + (i32.add (i32.const 114617302)) + (i32.add (i32.const -2121980010)) + (i32.add (i32.const 305087366)) + (i32.add (i32.const 718799879)) + (i32.add (i32.const 263249137)) + (i32.add (i32.const 503937365)) + (i32.add (i32.const -1055086151)) + (i32.add (i32.const -1207181511)) + (i32.add (i32.const 121956978)) + (i32.add (i32.const 899241647)) + (i32.add (i32.const -1716522259)) + (i32.add (i32.const 716149862)) + (i32.add (i32.const -1332629255)) + (i32.add (i32.const -1149220370)) + (i32.add (i32.const 749939004)) + (i32.add (i32.const -1226599991)) + (i32.add (i32.const -2101121142)) + (i32.add (i32.const 897059285)) + (i32.add (i32.const 1229099196)) + (i32.add (i32.const 385896713)) + (i32.add (i32.const 95668984)) + (i32.add (i32.const 1601125386)) + (i32.add (i32.const -1812135543)) + (i32.add (i32.const 7198367)) + (i32.add (i32.const -1023661689)) + (i32.add (i32.const -381111650)) + (i32.add (i32.const -1966506305)) + (i32.add (i32.const 1904096930)) + (i32.add (i32.const 1886152839)) + (i32.add (i32.const -1198702139)) + (i32.add (i32.const -479520246)) + (i32.add (i32.const -356272223)) + (i32.add (i32.const 1386168444)) + (i32.add (i32.const -844541557)) + (i32.add (i32.const 297183988)) + (i32.add (i32.const -257345456)) + (i32.add (i32.const 186577359)) + (i32.add (i32.const 2125965275)) + (i32.add (i32.const 467742006)) + (i32.add (i32.const -1338882800)) + (i32.add (i32.const -842724931)) + (i32.add (i32.const -1870698092)) + (i32.add (i32.const -79704584)) + (i32.add (i32.const 598705858)) + (i32.add (i32.const 399651637)) + (i32.add (i32.const -2011190355)) + (i32.add (i32.const -1612513592)) + (i32.add (i32.const 551578053)) + (i32.add (i32.const -122056985)) + (i32.add (i32.const 1838090666)) + (i32.add (i32.const -1025441914)) + (i32.add (i32.const -1828378930)) + (i32.add (i32.const -1638486311)) + (i32.add (i32.const 1116857641)) + (i32.add (i32.const 371235912)) + (i32.add (i32.const 363468131)) + (i32.add (i32.const -2044532338)) + (i32.add (i32.const -124192236)) + (i32.add (i32.const 1122268313)) + (i32.add (i32.const 2106732186)) + (i32.add (i32.const -1807015533)) + (i32.add (i32.const 1281514733)) + (i32.add (i32.const 1871473593)) + (i32.add (i32.const 1509194578)) + (i32.add (i32.const -1319196549)) + (i32.add (i32.const 1230253562)) + (i32.add (i32.const 2058367873)) + (i32.add (i32.const 263000329)) + (i32.add (i32.const 947488310)) + (i32.add (i32.const 224780726)) + (i32.add (i32.const 1963341083)) + (i32.add (i32.const 1557878103)) + (i32.add (i32.const 1915273459)) + (i32.add (i32.const 1282485689)) + (i32.add (i32.const -733218051)) + (i32.add (i32.const -1415014252)) + (i32.add (i32.const 192002077)) + (i32.add (i32.const 1656630675)) + (i32.add (i32.const -567661690)) + (i32.add (i32.const -1913102251)) + (i32.add (i32.const -2038090349)) + (i32.add (i32.const 1677958509)) + (i32.add (i32.const -1428397164)) + (i32.add (i32.const -1433738805)) + (i32.add (i32.const -449596753)) + (i32.add (i32.const -687069369)) + (i32.add (i32.const 1405156586)) + (i32.add (i32.const 1992894575)) + (i32.add (i32.const -1819779896)) + (i32.add (i32.const 321195521)) + (i32.add (i32.const -574671838)) + (i32.add (i32.const -559520744)) + (i32.add (i32.const 1917194423)) + (i32.add (i32.const -559504171)) + (i32.add (i32.const 2000005598)) + (i32.add (i32.const -276396902)) + (i32.add (i32.const 721907780)) + (i32.add (i32.const 5967264)) + (i32.add (i32.const -1317803386)) + (i32.add (i32.const 1005388740)) + (i32.add (i32.const 355254822)) + (i32.add (i32.const 595906922)) + (i32.add (i32.const -666780023)) + (i32.add (i32.const -956505583)) + (i32.add (i32.const -1838889975)) + (i32.add (i32.const 785982863)) + (i32.add (i32.const -1228680439)) + (i32.add (i32.const -462460234)) + (i32.add (i32.const 1218463762)) + (i32.add (i32.const -262118085)) + (i32.add (i32.const 524939396)) + (i32.add (i32.const -899537641)) + (i32.add (i32.const -160116219)) + (i32.add (i32.const -624979756)) + (i32.add (i32.const -1529611003)) + (i32.add (i32.const 215652311)) + (i32.add (i32.const 1592025055)) + (i32.add (i32.const -621964666)) + (i32.add (i32.const 1566079858)) + (i32.add (i32.const -2051979948)) + (i32.add (i32.const -1159208793)) + (i32.add (i32.const -923594346)) + (i32.add (i32.const -1645270405)) + (i32.add (i32.const -941407514)) + (i32.add (i32.const -1112813384)) + (i32.add (i32.const -1153125294)) + (i32.add (i32.const -166304719)) + (i32.add (i32.const -705172809)) + (i32.add (i32.const -691935833)) + (i32.add (i32.const 1202877570)) + (i32.add (i32.const -937055743)) + (i32.add (i32.const 1960804738)) + (i32.add (i32.const 2146436852)) + (i32.add (i32.const -1301117628)) + (i32.add (i32.const 1509670234)) + (i32.add (i32.const 1499451087)) + (i32.add (i32.const 1752144644)) + (i32.add (i32.const -714369917)) + (i32.add (i32.const -106488578)) + (i32.add (i32.const 1695228976)) + (i32.add (i32.const -783007083)) + (i32.add (i32.const 22342545)) + (i32.add (i32.const -1320320025)) + (i32.add (i32.const 1521364707)) + (i32.add (i32.const -1085714943)) + (i32.add (i32.const -1782207538)) + (i32.add (i32.const 570938827)) + (i32.add (i32.const 794756257)) + (i32.add (i32.const 896648740)) + (i32.add (i32.const -1308086155)) + (i32.add (i32.const 1426286711)) + (i32.add (i32.const -49477059)) + (i32.add (i32.const 654649605)) + (i32.add (i32.const 159984937)) + (i32.add (i32.const -1188697874)) + (i32.add (i32.const 1493664928)) + (i32.add (i32.const -1874174758)) + (i32.add (i32.const 1511237190)) + (i32.add (i32.const -567315768)) + (i32.add (i32.const -1488073018)) + (i32.add (i32.const 8678843)) + (i32.add (i32.const 1455280067)) + (i32.add (i32.const -706387147)) + (i32.add (i32.const -269798525)) + (i32.add (i32.const -2033727027)) + (i32.add (i32.const -7198865)) + (i32.add (i32.const 1747161792)) + (i32.add (i32.const -1702846936)) + (i32.add (i32.const -206903996)) + (i32.add (i32.const -2018572050)) + (i32.add (i32.const 576871112)) + (i32.add (i32.const -804727276)) + (i32.add (i32.const 970645488)) + (i32.add (i32.const 1781097617)) + (i32.add (i32.const 1521807227)) + (i32.add (i32.const -1029549069)) + (i32.add (i32.const 836736282)) + (i32.add (i32.const 265596080)) + (i32.add (i32.const 1965862196)) + (i32.add (i32.const 38546020)) + (i32.add (i32.const -1333591032)) + (i32.add (i32.const 1932006921)) + (i32.add (i32.const -1464313849)) + (i32.add (i32.const 639418837)) + (i32.add (i32.const -1967326992)) + (i32.add (i32.const 1024841244)) + (i32.add (i32.const 402468608)) + (i32.add (i32.const -343793405)) + (i32.add (i32.const -1718779005)) + (i32.add (i32.const -2142932704)) + (i32.add (i32.const -800473128)) + (i32.add (i32.const -1057368446)) + (i32.add (i32.const -900956747)) + (i32.add (i32.const -2146155147)) + (i32.add (i32.const -163273818)) + (i32.add (i32.const 1483277263)) + (i32.add (i32.const -1711715199)) + (i32.add (i32.const 1638798022)) + (i32.add (i32.const -781849086)) + (i32.add (i32.const 1125460178)) + (i32.add (i32.const -560796936)) + (i32.add (i32.const -173875265)) + (i32.add (i32.const 1272785476)) + (i32.add (i32.const -692720124)) + (i32.add (i32.const 1773687501)) + (i32.add (i32.const 578861041)) + (i32.add (i32.const -1061823952)) + (i32.add (i32.const 1627328738)) + (i32.add (i32.const 1902401138)) + (i32.add (i32.const -630585294)) + (i32.add (i32.const 1263215056)) + (i32.add (i32.const -242227950)) + (i32.add (i32.const -1569303233)) + (i32.add (i32.const 839202734)) + (i32.add (i32.const 1418569398)) + (i32.add (i32.const 192647449)) + (i32.add (i32.const -872890121)) + (i32.add (i32.const 1001878676)) + (i32.add (i32.const 1529591785)) + (i32.add (i32.const -1574272421)) + (i32.add (i32.const -352730382)) + (i32.add (i32.const 8588907)) + (i32.add (i32.const -268861608)) + (i32.add (i32.const 743579226)) + (i32.add (i32.const 1861727953)) + (i32.add (i32.const -291177582)) + (i32.add (i32.const -2099924155)) + (i32.add (i32.const -1138586184)) + (i32.add (i32.const 128296164)) + (i32.add (i32.const 925965818)) + (i32.add (i32.const 1597412309)) + (i32.add (i32.const 986855851)) + (i32.add (i32.const -1602542209)) + (i32.add (i32.const 942188977)) + (i32.add (i32.const -2018390448)) + (i32.add (i32.const 1162345236)) + (i32.add (i32.const 393084008)) + (i32.add (i32.const -2100080101)) + (i32.add (i32.const 801160361)) + (i32.add (i32.const 571838287)) + (i32.add (i32.const 1812304752)) + (i32.add (i32.const -1746529969)) + (i32.add (i32.const -1133616410)) + (i32.add (i32.const -2117886865)) + (i32.add (i32.const -2142962049)) + (i32.add (i32.const 954573596)) + (i32.add (i32.const -1020516926)) + (i32.add (i32.const 274199980)) + (i32.add (i32.const 1073945059)) + (i32.add (i32.const -1327854704)) + (i32.add (i32.const -1094226747)) + (i32.add (i32.const -1371508228)) + (i32.add (i32.const -1022200159)) + (i32.add (i32.const -1498385751)) + (i32.add (i32.const 2134839157)) + (i32.add (i32.const 1296419006)) + (i32.add (i32.const -492733451)) + (i32.add (i32.const -1365740958)) + (i32.add (i32.const -569435149)) + (i32.add (i32.const 716543868)) + (i32.add (i32.const 845359321)) + (i32.add (i32.const -125207386)) + (i32.add (i32.const 1145515580)) + (i32.add (i32.const 1178716384)) + (i32.add (i32.const -922514607)) + (i32.add (i32.const -1506597043)) + (i32.add (i32.const -550969467)) + (i32.add (i32.const -394462732)) + (i32.add (i32.const -988966334)) + (i32.add (i32.const 1925822556)) + (i32.add (i32.const -1217809290)) + (i32.add (i32.const 911157723)) + (i32.add (i32.const 638233141)) + (i32.add (i32.const 1045634853)) + (i32.add (i32.const -420083420)) + (i32.add (i32.const 245693310)) + (i32.add (i32.const -1353280357)) + (i32.add (i32.const 1245590387)) + (i32.add (i32.const -1553993286)) + (i32.add (i32.const 621247174)) + (i32.add (i32.const -872134053)) + (i32.add (i32.const -840866318)) + (i32.add (i32.const 1547681629)) + (i32.add (i32.const -2074342344)) + (i32.add (i32.const -568946016)) + (i32.add (i32.const -1289519681)) + (i32.add (i32.const -1662513387)) + (i32.add (i32.const 334208664)) + (i32.add (i32.const -1471939480)) + (i32.add (i32.const 367258821)) + (i32.add (i32.const -1821157057)) + (i32.add (i32.const 1112536803)) + (i32.add (i32.const -1426905672)) + (i32.add (i32.const -261835121)) + (i32.add (i32.const 936612299)) + (i32.add (i32.const 1301298173)) + (i32.add (i32.const -1521245032)) + (i32.add (i32.const -775172127)) + (i32.add (i32.const -510642592)) + (i32.add (i32.const -923744855)) + (i32.add (i32.const 1493292123)) + (i32.add (i32.const 604084289)) + (i32.add (i32.const 1427620323)) + (i32.add (i32.const -1357843991)) + (i32.add (i32.const 634514046)) + (i32.add (i32.const 788534370)) + (i32.add (i32.const 139182425)) + (i32.add (i32.const 1888355983)) + (i32.add (i32.const 311290688)) + (i32.add (i32.const 593619444)) + (i32.add (i32.const -616332073)) + (i32.add (i32.const -331967724)) + (i32.add (i32.const 1534326686)) + (i32.add (i32.const -1882355782)) + (i32.add (i32.const 825227067)) + (i32.add (i32.const 654105077)) + (i32.add (i32.const 961303449)) + (i32.add (i32.const 1994223892)) + (i32.add (i32.const 960771823)) + (i32.add (i32.const 1979283650)) + (i32.add (i32.const 899073485)) + (i32.add (i32.const 944839609)) + (i32.add (i32.const 524124964)) + (i32.add (i32.const 841681118)) + (i32.add (i32.const 776646332)) + (i32.add (i32.const -1374222542)) + (i32.add (i32.const 14686227)) + (i32.add (i32.const -530338638)) + (i32.add (i32.const -1874416482)) + (i32.add (i32.const -1469969897)) + (i32.add (i32.const -3297023)) + (i32.add (i32.const 717121238)) + (i32.add (i32.const 1900327592)) + (i32.add (i32.const 1887279163)) + (i32.add (i32.const 982535579)) + (i32.add (i32.const 446927202)) + (i32.add (i32.const 1470880794)) + (i32.add (i32.const -219923496)) + (i32.add (i32.const 1636485625)) + (i32.add (i32.const -1543758553)) + (i32.add (i32.const -1067613757)) + (i32.add (i32.const -459425496)) + (i32.add (i32.const -20586395)) + (i32.add (i32.const -1266035085)) + (i32.add (i32.const -1363066222)) + (i32.add (i32.const 406453943)) + (i32.add (i32.const -591420370)) + (i32.add (i32.const 1013286628)) + (i32.add (i32.const 1349518481)) + (i32.add (i32.const -1656611176)) + (i32.add (i32.const -1199235714)) + (i32.add (i32.const 593280752)) + (i32.add (i32.const 1434954729)) + (i32.add (i32.const 2142947608)) + (i32.add (i32.const -918246459)) + (i32.add (i32.const 1248071258)) + (i32.add (i32.const -675347594)) + (i32.add (i32.const -412297828)) + (i32.add (i32.const 976453485)) + (i32.add (i32.const 344243498)) + (i32.add (i32.const -1516160749)) + (i32.add (i32.const -1320369751)) + (i32.add (i32.const 1907527918)) + (i32.add (i32.const 1795862983)) + (i32.add (i32.const 1734325487)) + (i32.add (i32.const 1117974499)) + (i32.add (i32.const 2012141301)) + (i32.add (i32.const 229195593)) + (i32.add (i32.const -2071766043)) + (i32.add (i32.const 1982207752)) + (i32.add (i32.const -1164757254)) + (i32.add (i32.const -837818739)) + (i32.add (i32.const -1583471856)) + (i32.add (i32.const 1715891518)) + (i32.add (i32.const -714220171)) + (i32.add (i32.const -1963640669)) + (i32.add (i32.const 41435189)) + (i32.add (i32.const 988084420)) + (i32.add (i32.const -1613294609)) + (i32.add (i32.const 779684729)) + (i32.add (i32.const 1499769835)) + (i32.add (i32.const 1776104652)) + (i32.add (i32.const 1983536083)) + (i32.add (i32.const -297119467)) + (i32.add (i32.const 819995776)) + (i32.add (i32.const 1625885705)) + (i32.add (i32.const 75133866)) + (i32.add (i32.const 161628801)) + (i32.add (i32.const -369416126)) + (i32.add (i32.const -913447592)) + (i32.add (i32.const 1297129503)) + (i32.add (i32.const -386427154)) + (i32.add (i32.const -1015536065)) + (i32.add (i32.const -1005103239)) + (i32.add (i32.const -132618797)) + (i32.add (i32.const -2131104964)) + (i32.add (i32.const -1480326747)) + (i32.add (i32.const 1419635690)) + (i32.add (i32.const -706351787)) + (i32.add (i32.const 160784118)) + (i32.add (i32.const 335118307)) + (i32.add (i32.const 442229116)) + (i32.add (i32.const 377991972)) + (i32.add (i32.const 1732460866)) + (i32.add (i32.const 967155280)) + (i32.add (i32.const -609484522)) + (i32.add (i32.const 1859874279)) + (i32.add (i32.const 1939813805)) + (i32.add (i32.const -349124129)) + (i32.add (i32.const 536889032)) + (i32.add (i32.const 609467213)) + (i32.add (i32.const 699148695)) + (i32.add (i32.const -223698857)) + (i32.add (i32.const -1491703894)) + (i32.add (i32.const -1104333118)) + (i32.add (i32.const 1887379561)) + (i32.add (i32.const -311852374)) + (i32.add (i32.const 86190369)) + (i32.add (i32.const 1636533375)) + (i32.add (i32.const 1570727094)) + (i32.add (i32.const 1282018911)) + (i32.add (i32.const 1643657929)) + (i32.add (i32.const 1508163824)) + (i32.add (i32.const 1668742643)) + (i32.add (i32.const -1157792001)) + (i32.add (i32.const 572475912)) + (i32.add (i32.const 1281357513)) + (i32.add (i32.const -162888090)) + (i32.add (i32.const -1703173737)) + (i32.add (i32.const -588145493)) + (i32.add (i32.const -1067987344)) + (i32.add (i32.const 1469065455)) + (i32.add (i32.const -1165986121)) + (i32.add (i32.const -1536994170)) + (i32.add (i32.const 2060012160)) + (i32.add (i32.const 1380521639)) + (i32.add (i32.const 1100575601)) + (i32.add (i32.const 163570289)) + (i32.add (i32.const -1456144447)) + (i32.add (i32.const 1888641199)) + (i32.add (i32.const -544409523)) + (i32.add (i32.const -1676871361)) + (i32.add (i32.const -2044213522)) + (i32.add (i32.const -2039525463)) + (i32.add (i32.const -54128814)) + (i32.add (i32.const -1365115134)) + (i32.add (i32.const -479018062)) + (i32.add (i32.const -904756433)) + (i32.add (i32.const 629266008)) + (i32.add (i32.const -2012620760)) + (i32.add (i32.const -401484760)) + (i32.add (i32.const 15888200)) + (i32.add (i32.const -486293942)) + (i32.add (i32.const 1329917854)) + (i32.add (i32.const -1766343020)) + (i32.add (i32.const 1234169363)) + (i32.add (i32.const -1988820764)) + (i32.add (i32.const 135639340)) + (i32.add (i32.const 275928888)) + (i32.add (i32.const 2075389145)) + (i32.add (i32.const -543466007)) + (i32.add (i32.const 560561968)) + (i32.add (i32.const -1000214068)) + (i32.add (i32.const 87415218)) + (i32.add (i32.const 1046497771)) + (i32.add (i32.const 207696740)) + (i32.add (i32.const -1397546992)) + (i32.add (i32.const 1802003757)) + (i32.add (i32.const -2070092735)) + (i32.add (i32.const 569468541)) + (i32.add (i32.const 1297893128)) + (i32.add (i32.const -521364800)) + (i32.add (i32.const 2066501234)) + (i32.add (i32.const 36248647)) + (i32.add (i32.const -881605942)) + (i32.add (i32.const 798144725)) + (i32.add (i32.const -365913520)) + (i32.add (i32.const -639807423)) + (i32.add (i32.const 641541500)) + (i32.add (i32.const -1665827889)) + (i32.add (i32.const 2138496451)) + (i32.add (i32.const -699773824)) + (i32.add (i32.const -731441181)) + (i32.add (i32.const -1233671439)) + (i32.add (i32.const -66252978)) + (i32.add (i32.const -1700890870)) + (i32.add (i32.const 807262594)) + (i32.add (i32.const 544331171)) + (i32.add (i32.const -1408469691)) + (i32.add (i32.const 666294270)) + (i32.add (i32.const 912982524)) + (i32.add (i32.const -1417032542)) + (i32.add (i32.const 679737458)) + (i32.add (i32.const -614757663)) + (i32.add (i32.const -1239599619)) + (i32.add (i32.const -1816721588)) + (i32.add (i32.const -691653859)) + (i32.add (i32.const -1213683601)) + (i32.add (i32.const 1313606406)) + (i32.add (i32.const -1348136658)) + (i32.add (i32.const -550502313)) + (i32.add (i32.const 900697452)) + (i32.add (i32.const 1150413281)) + (i32.add (i32.const 1670317771)) + (i32.add (i32.const -1442830782)) + (i32.add (i32.const 81675531)) + (i32.add (i32.const 257526378)) + (i32.add (i32.const 388037918)) + (i32.add (i32.const -1608926805)) + (i32.add (i32.const 598849374)) + (i32.add (i32.const -555868434)) + (i32.add (i32.const -824314991)) + (i32.add (i32.const 1039091453)) + (i32.add (i32.const -1551367384)) + (i32.add (i32.const -1851265883)) + (i32.add (i32.const 253727794)) + (i32.add (i32.const -775412462)) + (i32.add (i32.const -816451705)) + (i32.add (i32.const -994621460)) + (i32.add (i32.const -1442879249)) + (i32.add (i32.const 436246584)) + (i32.add (i32.const 1080815472)) + (i32.add (i32.const -943920111)) + (i32.add (i32.const 919165228)) + (i32.add (i32.const 437342663)) + (i32.add (i32.const -370802813)) + (i32.add (i32.const 1222486736)) + (i32.add (i32.const 1739178510)) + (i32.add (i32.const 19065115)) + (i32.add (i32.const 1076725441)) + (i32.add (i32.const -36141097)) + (i32.add (i32.const 97894391)) + (i32.add (i32.const -389840945)) + (i32.add (i32.const 166775749)) + (i32.add (i32.const -1720667041)) + (i32.add (i32.const -911598190)) + (i32.add (i32.const -219989740)) + (i32.add (i32.const 1890189507)) + (i32.add (i32.const 856699648)) + (i32.add (i32.const 1572356022)) + (i32.add (i32.const -1134623621)) + (i32.add (i32.const 1011845959)) + (i32.add (i32.const 735291184)) + (i32.add (i32.const -944240152)) + (i32.add (i32.const 2131050385)) + (i32.add (i32.const 178636282)) + (i32.add (i32.const 289950567)) + (i32.add (i32.const -164252222)) + (i32.add (i32.const -1643699386)) + (i32.add (i32.const 1515256612)) + (i32.add (i32.const 1001090480)) + (i32.add (i32.const -1550969314)) + (i32.add (i32.const -1163487089)) + (i32.add (i32.const -1120472261)) + (i32.add (i32.const -1492239194)) + (i32.add (i32.const -7990800)) + (i32.add (i32.const -1547477733)) + (i32.add (i32.const -1292740654)) + (i32.add (i32.const -1103513391)) + (i32.add (i32.const -1214137618)) + (i32.add (i32.const -1956374036)) + (i32.add (i32.const 228055804)) + (i32.add (i32.const -1854233860)) + (i32.add (i32.const 1421603397)) + (i32.add (i32.const 1081761900)) + (i32.add (i32.const -914911333)) + (i32.add (i32.const 2104085859)) + (i32.add (i32.const -2140002855)) + (i32.add (i32.const -1247914076)) + (i32.add (i32.const 2028649441)) + (i32.add (i32.const -1685537416)) + (i32.add (i32.const 2060643747)) + (i32.add (i32.const -652803198)) + (i32.add (i32.const 1858401)) + (i32.add (i32.const -1685217055)) + (i32.add (i32.const 95998010)) + (i32.add (i32.const 1996219494)) + (i32.add (i32.const 683934613)) + (i32.add (i32.const -1689202274)) + (i32.add (i32.const 174099513)) + (i32.add (i32.const 887936104)) + (i32.add (i32.const 682666687)) + (i32.add (i32.const -1996040829)) + (i32.add (i32.const -277104087)) + (i32.add (i32.const -290621308)) + (i32.add (i32.const -1578725246)) + (i32.add (i32.const -1152752571)) + (i32.add (i32.const 1449568359)) + (i32.add (i32.const 964788207)) + (i32.add (i32.const 469962974)) + (i32.add (i32.const 868951903)) + (i32.add (i32.const 63147281)) + (i32.add (i32.const -1549745347)) + (i32.add (i32.const 1667163489)) + (i32.add (i32.const 135010318)) + (i32.add (i32.const 1884199708)) + (i32.add (i32.const 50685197)) + (i32.add (i32.const 41876363)) + (i32.add (i32.const -1516030251)) + (i32.add (i32.const 2050881396)) + (i32.add (i32.const -1806713592)) + (i32.add (i32.const 372036883)) + (i32.add (i32.const -950313142)) + (i32.add (i32.const -1368722734)) + (i32.add (i32.const -1982971220)) + (i32.add (i32.const 1805885784)) + (i32.add (i32.const 941076941)) + (i32.add (i32.const -883599909)) + (i32.add (i32.const -825935627)) + (i32.add (i32.const 879336327)) + (i32.add (i32.const 609087034)) + (i32.add (i32.const -195397433)) + (i32.add (i32.const -812141245)) + (i32.add (i32.const 82234485)) + (i32.add (i32.const -1458996360)) + (i32.add (i32.const 2063759064)) + (i32.add (i32.const -920433856)) + (i32.add (i32.const 1909586809)) + (i32.add (i32.const 902610945)) + (i32.add (i32.const 1048405394)) + (i32.add (i32.const 951764438)) + (i32.add (i32.const -240082293)) + (i32.add (i32.const 1190467203)) + (i32.add (i32.const 825763718)) + (i32.add (i32.const 543607046)) + (i32.add (i32.const -686699031)) + (i32.add (i32.const -279994428)) + (i32.add (i32.const -1661312791)) + (i32.add (i32.const 224337172)) + (i32.add (i32.const -1583296397)) + (i32.add (i32.const -1695449182)) + (i32.add (i32.const -759347395)) + (i32.add (i32.const 1902772314)) + (i32.add (i32.const 1096963885)) + (i32.add (i32.const -1057695277)) + (i32.add (i32.const -1252052477)) + (i32.add (i32.const -697662967)) + (i32.add (i32.const -129475925)) + (i32.add (i32.const 130875504)) + (i32.add (i32.const 184724450)) + (i32.add (i32.const -1479876041)) + (i32.add (i32.const 1657293732)) + (i32.add (i32.const -447624247)) + (i32.add (i32.const -148171901)) + (i32.add (i32.const -1949466567)) + (i32.add (i32.const -353551429)) + (i32.add (i32.const 911457309)) + (i32.add (i32.const 1825181615)) + (i32.add (i32.const 303816123)) + (i32.add (i32.const 910164636)) + (i32.add (i32.const 1689542793)) + (i32.add (i32.const 1000276632)) + (i32.add (i32.const -1753466521)) + (i32.add (i32.const -1120177547)) + (i32.add (i32.const 1127002691)) + (i32.add (i32.const -125173209)) + (i32.add (i32.const 248860464)) + (i32.add (i32.const 358231769)) + (i32.add (i32.const 921647391)) + (i32.add (i32.const -1713995594)) + (i32.add (i32.const 1614207809)) + (i32.add (i32.const -172598065)) + (i32.add (i32.const 1740821050)) + (i32.add (i32.const -983913220)) + (i32.add (i32.const -586638981)) + (i32.add (i32.const -2134448419)) + (i32.add (i32.const -1170962994)) + (i32.add (i32.const 2099917650)) + (i32.add (i32.const -537231407)) + (i32.add (i32.const -466051650)) + (i32.add (i32.const -1691652412)) + (i32.add (i32.const -1749616522)) + (i32.add (i32.const -66655551)) + (i32.add (i32.const 1529248895)) + (i32.add (i32.const 1836062000)) + (i32.add (i32.const -1478827613)) + (i32.add (i32.const 1950217155)) + (i32.add (i32.const -450186574)) + (i32.add (i32.const 1864321793)) + (i32.add (i32.const 190904021)) + (i32.add (i32.const -596455380)) + (i32.add (i32.const -1530046659)) + (i32.add (i32.const 525432798)) + (i32.add (i32.const 279541028)) + (i32.add (i32.const 1919157904)) + (i32.add (i32.const -1267150298)) + (i32.add (i32.const 894480402)) + (i32.add (i32.const -1820217594)) + (i32.add (i32.const 110611348)) + (i32.add (i32.const -1780572961)) + (i32.add (i32.const 1817319211)) + (i32.add (i32.const 1535387174)) + (i32.add (i32.const -1740285080)) + (i32.add (i32.const -1481760089)) + (i32.add (i32.const 1445933073)) + (i32.add (i32.const -280600774)) + (i32.add (i32.const 823421559)) + (i32.add (i32.const -119212948)) + (i32.add (i32.const 892602540)) + (i32.add (i32.const 296435450)) + (i32.add (i32.const 1851624901)) + (i32.add (i32.const -1542994655)) + (i32.add (i32.const 2038384389)) + (i32.add (i32.const 2140469525)) + (i32.add (i32.const -1197162874)) + (i32.add (i32.const 2051981100)) + (i32.add (i32.const 1767548856)) + (i32.add (i32.const -701636811)) + (i32.add (i32.const 137786553)) + (i32.add (i32.const 1625132347)) + (i32.add (i32.const -270847831)) + (i32.add (i32.const -1371772599)) + (i32.add (i32.const 388482268)) + (i32.add (i32.const 533563926)) + (i32.add (i32.const 1116589449)) + (i32.add (i32.const -1832256608)) + (i32.add (i32.const -216237015)) + (i32.add (i32.const 435204183)) + (i32.add (i32.const 1420986722)) + (i32.add (i32.const -1920795155)) + (i32.add (i32.const -316865088)) + (i32.add (i32.const -1054005834)) + (i32.add (i32.const -1147633457)) + (i32.add (i32.const -43821656)) + (i32.add (i32.const 1515419066)) + (i32.add (i32.const 1395238216)) + (i32.add (i32.const -1858902332)) + (i32.add (i32.const -1541913934)) + (i32.add (i32.const -1974861902)) + (i32.add (i32.const 1352544496)) + (i32.add (i32.const 933081782)) + (i32.add (i32.const 1504349808)) + (i32.add (i32.const -1542317180)) + (i32.add (i32.const -1618627146)) + (i32.add (i32.const 486689257)) + (i32.add (i32.const -1879882328)) + (i32.add (i32.const -55542726)) + (i32.add (i32.const 812454663)) + (i32.add (i32.const 1199080378)) + (i32.add (i32.const 667920323)) + (i32.add (i32.const -483717864)) + (i32.add (i32.const -1644201536)) + (i32.add (i32.const 479610840)) + (i32.add (i32.const 1339250451)) + (i32.add (i32.const 1030580963)) + (i32.add (i32.const -837330400)) + (i32.add (i32.const 1217060956)) + (i32.add (i32.const 1929375013)) + (i32.add (i32.const -2006009337)) + (i32.add (i32.const -163551389)) + (i32.add (i32.const -1124974967)) + (i32.add (i32.const -707651108)) + (i32.add (i32.const -1677362107)) + (i32.add (i32.const -2037710577)) + (i32.add (i32.const -988239994)) + (i32.add (i32.const -360997891)) + (i32.add (i32.const -1111230738)) + (i32.add (i32.const 1650064299)) + (i32.add (i32.const 858878371)) + (i32.add (i32.const -745980170)) + (i32.add (i32.const -379595680)) + (i32.add (i32.const -280410069)) + (i32.add (i32.const 546649242)) + (i32.add (i32.const -1617745205)) + (i32.add (i32.const 177119487)) + (i32.add (i32.const -1785785025)) + (i32.add (i32.const -143167395)) + (i32.add (i32.const 335819396)) + (i32.add (i32.const -1094439243)) + (i32.add (i32.const 171095178)) + (i32.add (i32.const -1557194324)) + (i32.add (i32.const -1947318680)) + (i32.add (i32.const 1733507663)) + (i32.add (i32.const -445598955)) + (i32.add (i32.const 1256384551)) + (i32.add (i32.const 683133059)) + (i32.add (i32.const -2103575841)) + (i32.add (i32.const -2135989352)) + (i32.add (i32.const 1690591745)) + (i32.add (i32.const 1183796387)) + (i32.add (i32.const -668335518)) + (i32.add (i32.const 1284748082)) + (i32.add (i32.const -2144568119)) + (i32.add (i32.const 1199592528)) + (i32.add (i32.const -653569522)) + (i32.add (i32.const -1548089858)) + (i32.add (i32.const -602743062)) + (i32.add (i32.const 1215770508)) + (i32.add (i32.const 1357554148)) + (i32.add (i32.const -957682969)) + (i32.add (i32.const 534595170)) + (i32.add (i32.const -30249998)) + (i32.add (i32.const -2062558299)) + (i32.add (i32.const -1188223966)) + (i32.add (i32.const -1647231759)) + (i32.add (i32.const 124405019)) + (i32.add (i32.const 1896356138)) + (i32.add (i32.const 494649092)) + (i32.add (i32.const 1568058670)) + (i32.add (i32.const 1031126097)) + (i32.add (i32.const 1739095004)) + (i32.add (i32.const -261149218)) + (i32.add (i32.const -1638393862)) + (i32.add (i32.const -2131448562)) + (i32.add (i32.const -1651105820)) + (i32.add (i32.const 89164587)) + (i32.add (i32.const -201739278)) + (i32.add (i32.const -385366934)) + (i32.add (i32.const 998623127)) + (i32.add (i32.const -1284349545)) + (i32.add (i32.const 1094142076)) + (i32.add (i32.const 836914488)) + (i32.add (i32.const -1217942906)) + (i32.add (i32.const 1081520799)) + (i32.add (i32.const -1592107780)) + (i32.add (i32.const -207160910)) + (i32.add (i32.const 192842282)) + (i32.add (i32.const -1509510006)) + (i32.add (i32.const -1957575105)) + (i32.add (i32.const -1317329926)) + (i32.add (i32.const 972762188)) + (i32.add (i32.const 748285937)) + (i32.add (i32.const 947500243)) + (i32.add (i32.const 311598861)) + (i32.add (i32.const -1724881624)) + (i32.add (i32.const -459726694)) + (i32.add (i32.const 1885317391)) + (i32.add (i32.const -1983746861)) + (i32.add (i32.const -1808606392)) + (i32.add (i32.const 1467937706)) + (i32.add (i32.const 907413749)) + (i32.add (i32.const -1208537803)) + (i32.add (i32.const -1120019045)) + (i32.add (i32.const -456540615)) + (i32.add (i32.const 1921877873)) + (i32.add (i32.const -237077911)) + (i32.add (i32.const 1330844298)) + (i32.add (i32.const -1766088526)) + (i32.add (i32.const -1838809867)) + (i32.add (i32.const 681605628)) + (i32.add (i32.const -1679405459)) + (i32.add (i32.const -187876416)) + (i32.add (i32.const -168971969)) + (i32.add (i32.const -925218415)) + (i32.add (i32.const -1386665195)) + (i32.add (i32.const -1642492082)) + (i32.add (i32.const 1491893765)) + (i32.add (i32.const -335670336)) + (i32.add (i32.const 1550352580)) + (i32.add (i32.const 825488939)) + (i32.add (i32.const -1206824293)) + (i32.add (i32.const -2004126653)) + (i32.add (i32.const 474024055)) + (i32.add (i32.const 701424892)) + (i32.add (i32.const 340921623)) + (i32.add (i32.const -215260148)) + (i32.add (i32.const 705936486)) + (i32.add (i32.const 1153995564)) + (i32.add (i32.const -355032609)) + (i32.add (i32.const -1743491535)) + (i32.add (i32.const 421455827)) + (i32.add (i32.const 1996921267)) + (i32.add (i32.const -453382828)) + (i32.add (i32.const 1363856089)) + (i32.add (i32.const 1617731722)) + (i32.add (i32.const -228952306)) + (i32.add (i32.const -235679508)) + (i32.add (i32.const 1711580416)) + (i32.add (i32.const -1925652664)) + (i32.add (i32.const -389075457)) + (i32.add (i32.const 1648409549)) + (i32.add (i32.const 728196466)) + (i32.add (i32.const 136782618)) + (i32.add (i32.const -1185092864)) + (i32.add (i32.const -1826915014)) + (i32.add (i32.const 300939804)) + (i32.add (i32.const 1600354494)) + (i32.add (i32.const -1929842144)) + (i32.add (i32.const -39762511)) + (i32.add (i32.const 1739402450)) + (i32.add (i32.const -1215174523)) + (i32.add (i32.const -184687005)) + (i32.add (i32.const -521315618)) + (i32.add (i32.const 852908391)) + (i32.add (i32.const 480232844)) + (i32.add (i32.const -996449799)) + (i32.add (i32.const -910849229)) + (i32.add (i32.const -459508539)) + (i32.add (i32.const 572250316)) + (i32.add (i32.const 1926722475)) + (i32.add (i32.const -1817734389)) + (i32.add (i32.const -495441381)) + (i32.add (i32.const 305248762)) + (i32.add (i32.const -1246027392)) + (i32.add (i32.const 1012539765)) + (i32.add (i32.const -860364031)) + (i32.add (i32.const -2077360457)) + (i32.add (i32.const -182998356)) + (i32.add (i32.const 1588830445)) + (i32.add (i32.const 438788569)) + (i32.add (i32.const -1614177577)) + (i32.add (i32.const 854441003)) + (i32.add (i32.const 911124372)) + (i32.add (i32.const -1913730462)) + (i32.add (i32.const 1731298498)) + (i32.add (i32.const -1947661165)) + (i32.add (i32.const -1002175369)) + (i32.add (i32.const 355847176)) + (i32.add (i32.const -336972688)) + (i32.add (i32.const -2088490245)) + (i32.add (i32.const 516443227)) + (i32.add (i32.const 1451643978)) + (i32.add (i32.const 727287977)) + (i32.add (i32.const 2027962918)) + (i32.add (i32.const 1293659141)) + (i32.add (i32.const -477877177)) + (i32.add (i32.const 1496896631)) + (i32.add (i32.const -1443141109)) + (i32.add (i32.const -336387664)) + (i32.add (i32.const 1343741398)) + (i32.add (i32.const 2143476075)) + (i32.add (i32.const -986720161)) + (i32.add (i32.const -1183117680)) + (i32.add (i32.const 1273687359)) + (i32.add (i32.const -245143047)) + (i32.add (i32.const -605325641)) + (i32.add (i32.const 129328866)) + (i32.add (i32.const -1312760065)) + (i32.add (i32.const -480081785)) + (i32.add (i32.const -990010319)) + (i32.add (i32.const 605452478)) + (i32.add (i32.const 1331463506)) + (i32.add (i32.const -2142453132)) + (i32.add (i32.const 1511805860)) + (i32.add (i32.const 1840583332)) + (i32.add (i32.const -619283115)) + (i32.add (i32.const -951774378)) + (i32.add (i32.const 595586168)) + (i32.add (i32.const -738641621)) + (i32.add (i32.const -482331874)) + (i32.add (i32.const 1878029541)) + (i32.add (i32.const 2028049589)) + (i32.add (i32.const 1522737369)) + (i32.add (i32.const -825756999)) + (i32.add (i32.const 173092438)) + (i32.add (i32.const -2053010445)) + (i32.add (i32.const -1937148906)) + (i32.add (i32.const 819031701)) + (i32.add (i32.const -1220724747)) + (i32.add (i32.const -1372956158)) + (i32.add (i32.const 1933990691)) + (i32.add (i32.const 1272076451)) + (i32.add (i32.const 250452367)) + (i32.add (i32.const 220552662)) + (i32.add (i32.const 1637255424)) + (i32.add (i32.const -2117587778)) + (i32.add (i32.const -1163284916)) + (i32.add (i32.const 1825324335)) + (i32.add (i32.const 1559491247)) + (i32.add (i32.const -1940549244)) + (i32.add (i32.const -2073719168)) + (i32.add (i32.const 2080131594)) + (i32.add (i32.const -1388767612)) + (i32.add (i32.const 1761100942)) + (i32.add (i32.const 1702121860)) + (i32.add (i32.const -2083805413)) + (i32.add (i32.const 1394502606)) + (i32.add (i32.const -1638038658)) + (i32.add (i32.const 321168186)) + (i32.add (i32.const 1017758502)) + (i32.add (i32.const 647304569)) + (i32.add (i32.const 803562076)) + (i32.add (i32.const -1581918762)) + (i32.add (i32.const 949225165)) + (i32.add (i32.const 1375528579)) + (i32.add (i32.const 1737536498)) + (i32.add (i32.const 1320001528)) + (i32.add (i32.const -866058407)) + (i32.add (i32.const 1646017711)) + (i32.add (i32.const 1893674781)) + (i32.add (i32.const 930167018)) + (i32.add (i32.const -838727761)) + (i32.add (i32.const 1694335390)) + (i32.add (i32.const 1095610497)) + (i32.add (i32.const 1398781650)) + (i32.add (i32.const 1422143476)) + (i32.add (i32.const -818453024)) + (i32.add (i32.const -1957737022)) + (i32.add (i32.const -1224022428)) + (i32.add (i32.const 1674699426)) + (i32.add (i32.const 1991333388)) + (i32.add (i32.const 78156352)) + (i32.add (i32.const -33976872)) + (i32.add (i32.const -129763382)) + (i32.add (i32.const 399223252)) + (i32.add (i32.const -777355797)) + (i32.add (i32.const -1744223242)) + (i32.add (i32.const -1164521113)) + (i32.add (i32.const -1791568844)) + (i32.add (i32.const -1415180317)) + (i32.add (i32.const -1353722690)) + (i32.add (i32.const -890581968)) + (i32.add (i32.const -328822008)) + (i32.add (i32.const 1581328612)) + (i32.add (i32.const -1788959244)) + (i32.add (i32.const -2053028754)) + (i32.add (i32.const 1213482979)) + (i32.add (i32.const 1267844380)) + (i32.add (i32.const -1292239458)) + (i32.add (i32.const -1644953791)) + (i32.add (i32.const 295362490)) + (i32.add (i32.const 1071821691)) + (i32.add (i32.const -266796331)) + (i32.add (i32.const 1842095610)) + (i32.add (i32.const 921585085)) + (i32.add (i32.const -66369517)) + (i32.add (i32.const -1510763961)) + (i32.add (i32.const 1022212048)) + (i32.add (i32.const 830242940)) + (i32.add (i32.const -1155468937)) + (i32.add (i32.const -1624790350)) + (i32.add (i32.const 440572635)) + (i32.add (i32.const 1444662659)) + (i32.add (i32.const -509288009)) + (i32.add (i32.const 1279525785)) + (i32.add (i32.const -610636571)) + (i32.add (i32.const 1983413670)) + (i32.add (i32.const 703365952)) + (i32.add (i32.const -1246669330)) + (i32.add (i32.const 106177376)) + (i32.add (i32.const 97364195)) + (i32.add (i32.const 195728161)) + (i32.add (i32.const 449419027)) + (i32.add (i32.const 1835695621)) + (i32.add (i32.const 1730251197)) + (i32.add (i32.const -2021501982)) + (i32.add (i32.const 1999668882)) + (i32.add (i32.const -372875714)) + (i32.add (i32.const -2093660289)) + (i32.add (i32.const -83550803)) + (i32.add (i32.const -485894477)) + (i32.add (i32.const 1778856418)) + (i32.add (i32.const 143379407)) + (i32.add (i32.const 1091016907)) + (i32.add (i32.const -1048977443)) + (i32.add (i32.const -1438547002)) + (i32.add (i32.const -1157935038)) + (i32.add (i32.const -1445778707)) + (i32.add (i32.const -1220883947)) + (i32.add (i32.const 1741790283)) + (i32.add (i32.const -159809443)) + (i32.add (i32.const -1179346176)) + (i32.add (i32.const 32961952)) + (i32.add (i32.const 1447723823)) + (i32.add (i32.const 1700471280)) + (i32.add (i32.const 608328623)) + (i32.add (i32.const 1840593933)) + (i32.add (i32.const 1276516125)) + (i32.add (i32.const 397490137)) + (i32.add (i32.const 281888783)) + (i32.add (i32.const 1151693629)) + (i32.add (i32.const 1138632662)) + (i32.add (i32.const 844479763)) + (i32.add (i32.const -1670404628)) + (i32.add (i32.const 1537611935)) + (i32.add (i32.const 1002443961)) + (i32.add (i32.const 1094971626)) + (i32.add (i32.const 149222490)) + (i32.add (i32.const 1542120324)) + (i32.add (i32.const 1013055268)) + (i32.add (i32.const -541141640)) + (i32.add (i32.const -2000660516)) + (i32.add (i32.const -1541477286)) + (i32.add (i32.const 385851490)) + (i32.add (i32.const 1860585272)) + (i32.add (i32.const -893902100)) + (i32.add (i32.const 1718812477)) + (i32.add (i32.const 1360947775)) + (i32.add (i32.const -1458511770)) + (i32.add (i32.const 1497610048)) + (i32.add (i32.const 951521240)) + (i32.add (i32.const 1717123763)) + (i32.add (i32.const 1592607052)) + (i32.add (i32.const -1576412397)) + (i32.add (i32.const 937694112)) + (i32.add (i32.const 1373254618)) + (i32.add (i32.const -155644804)) + (i32.add (i32.const 767235899)) + (i32.add (i32.const 1478042854)) + (i32.add (i32.const -121612883)) + (i32.add (i32.const -1031091686)) + (i32.add (i32.const 770691596)) + (i32.add (i32.const 180888915)) + (i32.add (i32.const 600022914)) + (i32.add (i32.const 89395241)) + (i32.add (i32.const 920730116)) + (i32.add (i32.const 1377815383)) + (i32.add (i32.const 764713063)) + (i32.add (i32.const 881140639)) + (i32.add (i32.const -416653200)) + (i32.add (i32.const 1465784554)) + (i32.add (i32.const -242091710)) + (i32.add (i32.const -1378385060)) + (i32.add (i32.const -1639308974)) + (i32.add (i32.const -2144533058)) + (i32.add (i32.const -492245593)) + (i32.add (i32.const 1826119142)) + (i32.add (i32.const -43026874)) + (i32.add (i32.const -1031599719)) + (i32.add (i32.const 1182430716)) + (i32.add (i32.const 1332638609)) + (i32.add (i32.const 1635803451)) + (i32.add (i32.const -2054436053)) + (i32.add (i32.const 176008910)) + (i32.add (i32.const -66072739)) + (i32.add (i32.const -2139414260)) + (i32.add (i32.const 983456496)) + (i32.add (i32.const -465035040)) + (i32.add (i32.const 63878782)) + (i32.add (i32.const 692711720)) + (i32.add (i32.const -904811661)) + (i32.add (i32.const -1441627437)) + (i32.add (i32.const 1000479797)) + (i32.add (i32.const -355608286)) + (i32.add (i32.const 1001824526)) + (i32.add (i32.const 243367752)) + (i32.add (i32.const -1534172922)) + (i32.add (i32.const 1578633090)) + (i32.add (i32.const -1639667739)) + (i32.add (i32.const -56633398)) + (i32.add (i32.const 1039579441)) + (i32.add (i32.const 400384240)) + (i32.add (i32.const 1209978612)) + (i32.add (i32.const -1650089593)) + (i32.add (i32.const 336393280)) + (i32.add (i32.const 1501574368)) + (i32.add (i32.const 2044744907)) + (i32.add (i32.const 673255977)) + (i32.add (i32.const 1397839430)) + (i32.add (i32.const -956557556)) + (i32.add (i32.const 1758706391)) + (i32.add (i32.const -418256181)) + (i32.add (i32.const 393942088)) + (i32.add (i32.const 2020734950)) + (i32.add (i32.const 23384382)) + (i32.add (i32.const 1229280701)) + (i32.add (i32.const -1299089492)) + (i32.add (i32.const 1642447445)) + (i32.add (i32.const 996811276)) + (i32.add (i32.const -859869812)) + (i32.add (i32.const 1565034165)) + (i32.add (i32.const 216923226)) + (i32.add (i32.const 611276850)) + (i32.add (i32.const -465786036)) + (i32.add (i32.const -1011917820)) + (i32.add (i32.const 1262152710)) + (i32.add (i32.const -2037435470)) + (i32.add (i32.const -1388994780)) + (i32.add (i32.const 584500434)) + (i32.add (i32.const 1630620458)) + (i32.add (i32.const -298257633)) + (i32.add (i32.const 282517533)) + (i32.add (i32.const -1306614715)) + (i32.add (i32.const -199347123)) + (i32.add (i32.const -1753447681)) + (i32.add (i32.const 1599689992)) + (i32.add (i32.const -720378334)) + (i32.add (i32.const 461426119)) + (i32.add (i32.const -204556908)) + (i32.add (i32.const -786564058)) + (i32.add (i32.const -456499115)) + (i32.add (i32.const -601975332)) + (i32.add (i32.const 71057301)) + (i32.add (i32.const -2121187348)) + (i32.add (i32.const 1794331665)) + (i32.add (i32.const 265456320)) + (i32.add (i32.const 60529010)) + (i32.add (i32.const 1659447550)) + (i32.add (i32.const -336998390)) + (i32.add (i32.const -1212564588)) + (i32.add (i32.const 1623957066)) + (i32.add (i32.const -928715228)) + (i32.add (i32.const 705614530)) + (i32.add (i32.const 560673854)) + (i32.add (i32.const -1460950376)) + (i32.add (i32.const -470014795)) + (i32.add (i32.const -1628423003)) + (i32.add (i32.const -791143887)) + (i32.add (i32.const 461061618)) + (i32.add (i32.const -1886271539)) + (i32.add (i32.const 919627625)) + (i32.add (i32.const 1068331220)) + (i32.add (i32.const -645398922)) + (i32.add (i32.const -728742234)) + (i32.add (i32.const 989728024)) + (i32.add (i32.const 1602128655)) + (i32.add (i32.const -97557944)) + (i32.add (i32.const 2101673156)) + (i32.add (i32.const -1405961041)) + (i32.add (i32.const 1285881890)) + (i32.add (i32.const -999271346)) + (i32.add (i32.const -918060644)) + (i32.add (i32.const 901271662)) + (i32.add (i32.const -1182484459)) + (i32.add (i32.const 1559681035)) + (i32.add (i32.const -1721804635)) + (i32.add (i32.const -1575120227)) + (i32.add (i32.const 371152620)) + (i32.add (i32.const 487314657)) + (i32.add (i32.const 777217006)) + (i32.add (i32.const 2131460719)) + (i32.add (i32.const -506412842)) + (i32.add (i32.const 234777213)) + (i32.add (i32.const 1321825915)) + (i32.add (i32.const 1093943971)) + (i32.add (i32.const -421560932)) + (i32.add (i32.const -1916273905)) + (i32.add (i32.const 43907466)) + (i32.add (i32.const 515660703)) + (i32.add (i32.const 15101708)) + (i32.add (i32.const -1478544448)) + (i32.add (i32.const 1037113887)) + (i32.add (i32.const 1653240567)) + (i32.add (i32.const 1538296489)) + (i32.add (i32.const -2094529483)) + (i32.add (i32.const 1005739037)) + (i32.add (i32.const 692280431)) + (i32.add (i32.const -446565917)) + (i32.add (i32.const 161700974)) + (i32.add (i32.const 2087283318)) + (i32.add (i32.const 616565403)) + (i32.add (i32.const -1337264556)) + (i32.add (i32.const 550783705)) + (i32.add (i32.const -1366811327)) + (i32.add (i32.const 239981565)) + (i32.add (i32.const -1154372867)) + (i32.add (i32.const -783590003)) + (i32.add (i32.const -883653812)) + (i32.add (i32.const 928136383)) + (i32.add (i32.const -374751524)) + (i32.add (i32.const -530927241)) + (i32.add (i32.const 309715186)) + (i32.add (i32.const -111067982)) + (i32.add (i32.const 1524121187)) + (i32.add (i32.const 20450733)) + (i32.add (i32.const -1107157970)) + (i32.add (i32.const 1348277463)) + (i32.add (i32.const 211631943)) + (i32.add (i32.const 280827244)) + (i32.add (i32.const -1931775015)) + (i32.add (i32.const -1904789873)) + (i32.add (i32.const -789915567)) + (i32.add (i32.const 248054647)) + (i32.add (i32.const -839048966)) + (i32.add (i32.const 2111917082)) + (i32.add (i32.const -2100996644)) + (i32.add (i32.const 983230619)) + (i32.add (i32.const -137322463)) + (i32.add (i32.const 1868970767)) + (i32.add (i32.const -491943875)) + (i32.add (i32.const -1070466236)) + (i32.add (i32.const -1762311425)) + (i32.add (i32.const -1352475272)) + (i32.add (i32.const 1684499265)) + (i32.add (i32.const 520389846)) + (i32.add (i32.const 1599717275)) + (i32.add (i32.const -474289692)) + (i32.add (i32.const 558447649)) + (i32.add (i32.const -1907352237)) + (i32.add (i32.const -303128520)) + (i32.add (i32.const -1466117734)) + (i32.add (i32.const 1804941640)) + (i32.add (i32.const 672479062)) + (i32.add (i32.const -248560073)) + (i32.add (i32.const -1202065741)) + (i32.add (i32.const 761332129)) + (i32.add (i32.const 603232062)) + (i32.add (i32.const 1227363662)) + (i32.add (i32.const 787738412)) + (i32.add (i32.const 1384702646)) + (i32.add (i32.const -1991450305)) + (i32.add (i32.const 1390876207)) + (i32.add (i32.const 687230876)) + (i32.add (i32.const -1106034881)) + (i32.add (i32.const -1506002528)) + (i32.add (i32.const -888192506)) + (i32.add (i32.const 715629175)) + (i32.add (i32.const -785707207)) + (i32.add (i32.const -417008051)) + (i32.add (i32.const -933673120)) + (i32.add (i32.const 1301034368)) + (i32.add (i32.const 377677883)) + (i32.add (i32.const -578080990)) + (i32.add (i32.const -564453986)) + (i32.add (i32.const -376352154)) + (i32.add (i32.const -954460243)) + (i32.add (i32.const -74617452)) + (i32.add (i32.const -142437195)) + (i32.add (i32.const -1036358588)) + (i32.add (i32.const -1237724756)) + (i32.add (i32.const -736292639)) + (i32.add (i32.const -906294539)) + (i32.add (i32.const 138048509)) + (i32.add (i32.const 1141419428)) + (i32.add (i32.const -573117714)) + (i32.add (i32.const -1763119467)) + (i32.add (i32.const 1655512314)) + (i32.add (i32.const 1427338562)) + (i32.add (i32.const -696842698)) + (i32.add (i32.const -1706833497)) + (i32.add (i32.const 278686868)) + (i32.add (i32.const 1419360615)) + (i32.add (i32.const 1986568109)) + (i32.add (i32.const 695323953)) + (i32.add (i32.const 416859436)) + (i32.add (i32.const 796141458)) + (i32.add (i32.const -1681432529)) + (i32.add (i32.const 438146466)) + (i32.add (i32.const 1077030035)) + (i32.add (i32.const 528178078)) + (i32.add (i32.const -1485773143)) + (i32.add (i32.const 568534162)) + (i32.add (i32.const 694201253)) + (i32.add (i32.const -1838822925)) + (i32.add (i32.const -1290621809)) + (i32.add (i32.const 1077239921)) + (i32.add (i32.const -1603882509)) + (i32.add (i32.const -318370374)) + (i32.add (i32.const 1654885031)) + (i32.add (i32.const -70448602)) + (i32.add (i32.const 251036797)) + (i32.add (i32.const 1894926700)) + (i32.add (i32.const 312759808)) + (i32.add (i32.const 1535612820)) + (i32.add (i32.const 1891334305)) + (i32.add (i32.const -1324229708)) + (i32.add (i32.const 1247933604)) + (i32.add (i32.const 2050429461)) + (i32.add (i32.const 296339819)) + (i32.add (i32.const -2007115515)) + (i32.add (i32.const 43685679)) + (i32.add (i32.const 1870473492)) + (i32.add (i32.const -1709172725)) + (i32.add (i32.const 667760755)) + (i32.add (i32.const -685509070)) + (i32.add (i32.const -1326281156)) + (i32.add (i32.const -1898967480)) + (i32.add (i32.const -1801356808)) + (i32.add (i32.const -1628330277)) + (i32.add (i32.const -558369085)) + (i32.add (i32.const 1419741777)) + (i32.add (i32.const -812098403)) + (i32.add (i32.const 333581737)) + (i32.add (i32.const 359234592)) + (i32.add (i32.const -68442887)) + (i32.add (i32.const -1822240372)) + (i32.add (i32.const 1965923904)) + (i32.add (i32.const 269283434)) + (i32.add (i32.const 642085016)) + (i32.add (i32.const 1764984849)) + (i32.add (i32.const 2079765899)) + (i32.add (i32.const -1603234962)) + (i32.add (i32.const 1096661276)) + (i32.add (i32.const 1275233698)) + (i32.add (i32.const 1443719505)) + (i32.add (i32.const 71212893)) + (i32.add (i32.const -163006199)) + (i32.add (i32.const 218554352)) + (i32.add (i32.const 553366859)) + (i32.add (i32.const -132733500)) + (i32.add (i32.const -375718104)) + (i32.add (i32.const -1946042075)) + (i32.add (i32.const -1269098536)) + (i32.add (i32.const -1666523455)) + (i32.add (i32.const 395575895)) + (i32.add (i32.const -568976078)) + (i32.add (i32.const -1816145278)) + (i32.add (i32.const -1119415487)) + (i32.add (i32.const -1516801436)) + (i32.add (i32.const -532007330)) + (i32.add (i32.const -1687134513)) + (i32.add (i32.const -1368846328)) + (i32.add (i32.const -1928558012)) + (i32.add (i32.const -1321299843)) + (i32.add (i32.const 2029853267)) + (i32.add (i32.const -1755244758)) + (i32.add (i32.const -1882445582)) + (i32.add (i32.const 1820505441)) + (i32.add (i32.const -1030627418)) + (i32.add (i32.const 147981169)) + (i32.add (i32.const -1670251373)) + (i32.add (i32.const 2011427202)) + (i32.add (i32.const -982837237)) + (i32.add (i32.const -1754526440)) + (i32.add (i32.const 1872116087)) + (i32.add (i32.const 505682277)) + (i32.add (i32.const 1719052975)) + (i32.add (i32.const 1606208046)) + (i32.add (i32.const 1697885296)) + (i32.add (i32.const -1139330303)) + (i32.add (i32.const -1650790181)) + (i32.add (i32.const -235006143)) + (i32.add (i32.const 146347509)) + (i32.add (i32.const 1545984503)) + (i32.add (i32.const -1193290747)) + (i32.add (i32.const 1335334403)) + (i32.add (i32.const 1870409865)) + (i32.add (i32.const 2010186766)) + (i32.add (i32.const -809221398)) + (i32.add (i32.const -314363924)) + (i32.add (i32.const 628540626)) + (i32.add (i32.const -597189691)) + (i32.add (i32.const 1338837471)) + (i32.add (i32.const -1227877557)) + (i32.add (i32.const -1516066874)) + (i32.add (i32.const -1055909222)) + (i32.add (i32.const 1093482728)) + (i32.add (i32.const -705978329)) + (i32.add (i32.const 1023319151)) + (i32.add (i32.const -535796305)) + (i32.add (i32.const -366536678)) + (i32.add (i32.const 851321114)) + (i32.add (i32.const -1788391038)) + (i32.add (i32.const 1036700302)) + (i32.add (i32.const 460529929)) + (i32.add (i32.const -1676197761)) + (i32.add (i32.const -24909491)) + (i32.add (i32.const -1565907723)) + (i32.add (i32.const -1531228354)) + (i32.add (i32.const 344330186)) + (i32.add (i32.const 848893762)) + (i32.add (i32.const -147515188)) + (i32.add (i32.const -1048666611)) + (i32.add (i32.const -74900021)) + (i32.add (i32.const -1382296421)) + (i32.add (i32.const 249583234)) + (i32.add (i32.const 498174499)) + (i32.add (i32.const 265267136)) + (i32.add (i32.const 84250747)) + (i32.add (i32.const 2129605258)) + (i32.add (i32.const 1511332390)) + (i32.add (i32.const 1788857195)) + (i32.add (i32.const -136373341)) + (i32.add (i32.const -2144559349)) + (i32.add (i32.const -1535478325)) + (i32.add (i32.const 1919283039)) + (i32.add (i32.const -506882622)) + (i32.add (i32.const 1242965481)) + (i32.add (i32.const 1236737394)) + (i32.add (i32.const -1811192795)) + (i32.add (i32.const -1974356498)) + (i32.add (i32.const -1950819059)) + (i32.add (i32.const -157744375)) + (i32.add (i32.const -723325311)) + (i32.add (i32.const 1575993289)) + (i32.add (i32.const 1847106593)) + (i32.add (i32.const 129491968)) + (i32.add (i32.const 625708569)) + (i32.add (i32.const -1818968566)) + (i32.add (i32.const 959476871)) + (i32.add (i32.const 1082224581)) + (i32.add (i32.const 1490598834)) + (i32.add (i32.const 1567017114)) + (i32.add (i32.const -916627341)) + (i32.add (i32.const 1564937325)) + (i32.add (i32.const -380033184)) + (i32.add (i32.const -1393683364)) + (i32.add (i32.const 1732668435)) + (i32.add (i32.const 1370124378)) + (i32.add (i32.const 982952467)) + (i32.add (i32.const 49631926)) + (i32.add (i32.const -1003242553)) + (i32.add (i32.const 536805328)) + (i32.add (i32.const 255361696)) + (i32.add (i32.const 689325482)) + (i32.add (i32.const 411313759)) + (i32.add (i32.const -1213171741)) + (i32.add (i32.const -173939265)) + (i32.add (i32.const 1843718224)) + (i32.add (i32.const 118499318)) + (i32.add (i32.const -47479780)) + (i32.add (i32.const 723141901)) + (i32.add (i32.const -616734562)) + (i32.add (i32.const 1452178557)) + (i32.add (i32.const 443643219)) + (i32.add (i32.const -2054786761)) + (i32.add (i32.const -1478433744)) + (i32.add (i32.const 404843525)) + (i32.add (i32.const 1298194787)) + (i32.add (i32.const 465529792)) + (i32.add (i32.const -1175816525)) + (i32.add (i32.const -1279462133)) + (i32.add (i32.const 1272667787)) + (i32.add (i32.const 655165467)) + (i32.add (i32.const -965213747)) + (i32.add (i32.const 1785087793)) + (i32.add (i32.const 1610994803)) + (i32.add (i32.const 2057889073)) + (i32.add (i32.const -883814139)) + (i32.add (i32.const 1622138363)) + (i32.add (i32.const -36104916)) + (i32.add (i32.const -1828989634)) + (i32.add (i32.const 1834116170)) + (i32.add (i32.const 1159253348)) + (i32.add (i32.const -1738689756)) + (i32.add (i32.const -1358127250)) + (i32.add (i32.const 298997289)) + (i32.add (i32.const 815030478)) + (i32.add (i32.const 932849111)) + (i32.add (i32.const -757062556)) + (i32.add (i32.const 242571953)) + (i32.add (i32.const -799696795)) + (i32.add (i32.const 1345884401)) + (i32.add (i32.const 2056028139)) + (i32.add (i32.const 868696661)) + (i32.add (i32.const -993760030)) + (i32.add (i32.const -1519705606)) + (i32.add (i32.const -1988728494)) + (i32.add (i32.const 402620558)) + (i32.add (i32.const 195985544)) + (i32.add (i32.const 603805054)) + (i32.add (i32.const 354961529)) + (i32.add (i32.const -780808056)) + (i32.add (i32.const -957605266)) + (i32.add (i32.const -1838211697)) + (i32.add (i32.const -163213164)) + (i32.add (i32.const -1915665997)) + (i32.add (i32.const 1578415379)) + (i32.add (i32.const -869440235)) + (i32.add (i32.const -1863365414)) + (i32.add (i32.const -717650483)) + (i32.add (i32.const -1760712245)) + (i32.add (i32.const 1921055616)) + (i32.add (i32.const 1264412515)) + (i32.add (i32.const -1147398111)) + (i32.add (i32.const -70544495)) + (i32.add (i32.const -1260191846)) + (i32.add (i32.const -579993739)) + (i32.add (i32.const -1512414036)) + (i32.add (i32.const 594204520)) + (i32.add (i32.const -1091986159)) + (i32.add (i32.const 554796487)) + (i32.add (i32.const -578329993)) + (i32.add (i32.const 643633566)) + (i32.add (i32.const -921805497)) + (i32.add (i32.const 299791699)) + (i32.add (i32.const 1079292360)) + (i32.add (i32.const -1927258936)) + (i32.add (i32.const 686917294)) + (i32.add (i32.const 857140355)) + (i32.add (i32.const 1137956277)) + (i32.add (i32.const -1652096680)) + (i32.add (i32.const -1257377070)) + (i32.add (i32.const 1872183531)) + (i32.add (i32.const 630997969)) + (i32.add (i32.const 958213804)) + (i32.add (i32.const 1500741671)) + (i32.add (i32.const -577312098)) + (i32.add (i32.const -1081579094)) + (i32.add (i32.const -152938634)) + (i32.add (i32.const 1290901244)) + (i32.add (i32.const 1236901085)) + (i32.add (i32.const 64064294)) + (i32.add (i32.const -658481249)) + (i32.add (i32.const 769360502)) + (i32.add (i32.const -220602576)) + (i32.add (i32.const 1513573957)) + (i32.add (i32.const -1404578125)) + (i32.add (i32.const 1600042352)) + (i32.add (i32.const -1471260511)) + (i32.add (i32.const -80235903)) + (i32.add (i32.const -272937616)) + (i32.add (i32.const 518005002)) + (i32.add (i32.const -1079373064)) + (i32.add (i32.const 774454031)) + (i32.add (i32.const 279448216)) + (i32.add (i32.const 433265232)) + (i32.add (i32.const 48007698)) + (i32.add (i32.const -1972505793)) + (i32.add (i32.const -651970118)) + (i32.add (i32.const -2095877473)) + (i32.add (i32.const 1682082416)) + (i32.add (i32.const -226409904)) + (i32.add (i32.const -1923873234)) + (i32.add (i32.const -1925430831)) + (i32.add (i32.const 1312726339)) + (i32.add (i32.const 1821485625)) + (i32.add (i32.const -1308102030)) + (i32.add (i32.const -1048986459)) + (i32.add (i32.const 772715737)) + (i32.add (i32.const -448051503)) + (i32.add (i32.const 1839533342)) + (i32.add (i32.const 447097535)) + (i32.add (i32.const 2104914588)) + (i32.add (i32.const -2006417335)) + (i32.add (i32.const -969583855)) + (i32.add (i32.const -351564862)) + (i32.add (i32.const 954064254)) + (i32.add (i32.const 1736905639)) + (i32.add (i32.const -669178345)) + (i32.add (i32.const 2042943430)) + (i32.add (i32.const 1296172763)) + (i32.add (i32.const 36455181)) + (i32.add (i32.const -825475883)) + (i32.add (i32.const -1678011836)) + (i32.add (i32.const -533815376)) + (i32.add (i32.const -1047493847)) + (i32.add (i32.const -1283854254)) + (i32.add (i32.const 269789195)) + (i32.add (i32.const -1175104338)) + (i32.add (i32.const 1177960742)) + (i32.add (i32.const 1205188573)) + (i32.add (i32.const 1636383773)) + (i32.add (i32.const 2071439679)) + (i32.add (i32.const -1420674394)) + (i32.add (i32.const -286721487)) + (i32.add (i32.const -104908435)) + (i32.add (i32.const -1288873459)) + (i32.add (i32.const 754217998)) + (i32.add (i32.const -1838802946)) + (i32.add (i32.const -860090626)) + (i32.add (i32.const -1855294757)) + (i32.add (i32.const 1042621892)) + (i32.add (i32.const 2130762311)) + (i32.add (i32.const -376129177)) + (i32.add (i32.const -918074616)) + (i32.add (i32.const 1748560095)) + (i32.add (i32.const 824243562)) + (i32.add (i32.const -2141799291)) + (i32.add (i32.const -779355763)) + (i32.add (i32.const -1538162704)) + (i32.add (i32.const -1433683538)) + (i32.add (i32.const -1472444913)) + (i32.add (i32.const -1573408339)) + (i32.add (i32.const 1200835906)) + (i32.add (i32.const 2139163571)) + (i32.add (i32.const 1448059284)) + (i32.add (i32.const -828044875)) + (i32.add (i32.const 1748667584)) + (i32.add (i32.const -722247772)) + (i32.add (i32.const -699632949)) + (i32.add (i32.const 1377100352)) + (i32.add (i32.const 404294141)) + (i32.add (i32.const -2057775449)) + (i32.add (i32.const 1148518711)) + (i32.add (i32.const -604548715)) + (i32.add (i32.const -1501652847)) + (i32.add (i32.const 1883572561)) + (i32.add (i32.const 995217720)) + (i32.add (i32.const 1129453083)) + (i32.add (i32.const -2120164286)) + (i32.add (i32.const 1499057574)) + (i32.add (i32.const 1222583921)) + (i32.add (i32.const -2009101834)) + (i32.add (i32.const 1411763123)) + (i32.add (i32.const 1150217056)) + (i32.add (i32.const -977726254)) + (i32.add (i32.const 2019798530)) + (i32.add (i32.const -1433869878)) + (i32.add (i32.const 750582401)) + (i32.add (i32.const 756918463)) + (i32.add (i32.const 346347032)) + (i32.add (i32.const -1455920982)) + (i32.add (i32.const -636900700)) + (i32.add (i32.const -1605272827)) + (i32.add (i32.const 430530281)) + (i32.add (i32.const 281348115)) + (i32.add (i32.const 929284037)) + (i32.add (i32.const 1892031827)) + (i32.add (i32.const -1483369352)) + (i32.add (i32.const -699516865)) + (i32.add (i32.const 1042326862)) + (i32.add (i32.const -265577021)) + (i32.add (i32.const 1495863523)) + (i32.add (i32.const 279056495)) + (i32.add (i32.const -1954969932)) + (i32.add (i32.const 207013693)) + (i32.add (i32.const 2133324531)) + (i32.add (i32.const -1020243882)) + (i32.add (i32.const 496211051)) + (i32.add (i32.const -214234714)) + (i32.add (i32.const 793355762)) + (i32.add (i32.const -210922001)) + (i32.add (i32.const 1476024792)) + (i32.add (i32.const 2023443403)) + (i32.add (i32.const 1062318242)) + (i32.add (i32.const -1378110837)) + (i32.add (i32.const -1864643874)) + (i32.add (i32.const -1979412083)) + (i32.add (i32.const 1865796761)) + (i32.add (i32.const 598245955)) + (i32.add (i32.const 925288666)) + (i32.add (i32.const -1401772869)) + (i32.add (i32.const 1483021392)) + (i32.add (i32.const -1346025840)) + (i32.add (i32.const -1798243214)) + (i32.add (i32.const -1498851406)) + (i32.add (i32.const 2091816825)) + (i32.add (i32.const -1774988692)) + (i32.add (i32.const 540414503)) + (i32.add (i32.const 811473133)) + (i32.add (i32.const -261087462)) + (i32.add (i32.const -1863742198)) + (i32.add (i32.const 1853365184)) + (i32.add (i32.const -1988063559)) + (i32.add (i32.const -996417289)) + (i32.add (i32.const -1032040175)) + (i32.add (i32.const 1156849603)) + (i32.add (i32.const -27579238)) + (i32.add (i32.const 2051759751)) + (i32.add (i32.const 1486936672)) + (i32.add (i32.const -606043552)) + (i32.add (i32.const -2078910144)) + (i32.add (i32.const -1470811879)) + (i32.add (i32.const -397234058)) + (i32.add (i32.const -1971502462)) + (i32.add (i32.const 245006917)) + (i32.add (i32.const -1519542682)) + (i32.add (i32.const -238445858)) + (i32.add (i32.const 539918212)) + (i32.add (i32.const -1757136458)) + (i32.add (i32.const -458033365)) + (i32.add (i32.const -309101336)) + (i32.add (i32.const -1702634235)) + (i32.add (i32.const 1087060872)) + (i32.add (i32.const 712984919)) + (i32.add (i32.const -1274614134)) + (i32.add (i32.const -1583116944)) + (i32.add (i32.const 2126700981)) + (i32.add (i32.const 53373738)) + (i32.add (i32.const -52346105)) + (i32.add (i32.const 1607597286)) + (i32.add (i32.const -82039005)) + (i32.add (i32.const -1712812890)) + (i32.add (i32.const -2015472297)) + (i32.add (i32.const 416087434)) + (i32.add (i32.const 1925909130)) + (i32.add (i32.const -1628008678)) + (i32.add (i32.const 2010915581)) + (i32.add (i32.const -204652289)) + (i32.add (i32.const 1579096965)) + (i32.add (i32.const -1073032069)) + (i32.add (i32.const 1740211940)) + (i32.add (i32.const -189376491)) + (i32.add (i32.const 1102239701)) + (i32.add (i32.const 2012619121)) + (i32.add (i32.const -508169218)) + (i32.add (i32.const -2103602508)) + (i32.add (i32.const -1652550264)) + (i32.add (i32.const -1228763435)) + (i32.add (i32.const 352240029)) + (i32.add (i32.const -294401352)) + (i32.add (i32.const -810603396)) + (i32.add (i32.const 1122248899)) + (i32.add (i32.const -676223464)) + (i32.add (i32.const 1393567569)) + (i32.add (i32.const 705214523)) + (i32.add (i32.const 1732794644)) + (i32.add (i32.const 720810045)) + (i32.add (i32.const 381802567)) + (i32.add (i32.const -939561194)) + (i32.add (i32.const -1703076499)) + (i32.add (i32.const -362933044)) + (i32.add (i32.const -537741369)) + (i32.add (i32.const 1213151932)) + (i32.add (i32.const -847788469)) + (i32.add (i32.const 1246920304)) + (i32.add (i32.const -1071520334)) + (i32.add (i32.const 1750788797)) + (i32.add (i32.const -2040657425)) + (i32.add (i32.const 632600034)) + (i32.add (i32.const 2067065325)) + (i32.add (i32.const 527432673)) + (i32.add (i32.const 1100915401)) + (i32.add (i32.const 658811426)) + (i32.add (i32.const -1026704887)) + (i32.add (i32.const 1844326151)) + (i32.add (i32.const -1717122982)) + (i32.add (i32.const 322962212)) + (i32.add (i32.const 1153907430)) + (i32.add (i32.const -626838213)) + (i32.add (i32.const -399153634)) + (i32.add (i32.const -62062693)) + (i32.add (i32.const 835058558)) + (i32.add (i32.const -9757861)) + (i32.add (i32.const 434861765)) + (i32.add (i32.const -1941168555)) + (i32.add (i32.const -1775078753)) + (i32.add (i32.const 345130997)) + (i32.add (i32.const -796620009)) + (i32.add (i32.const -1794867599)) + (i32.add (i32.const -68837957)) + (i32.add (i32.const 1577457782)) + (i32.add (i32.const 597838443)) + (i32.add (i32.const -1771653458)) + (i32.add (i32.const -2070300850)) + (i32.add (i32.const 1248705856)) + (i32.add (i32.const 925356774)) + (i32.add (i32.const 226076050)) + (i32.add (i32.const 1054018425)) + (i32.add (i32.const 632017083)) + (i32.add (i32.const -1998868062)) + (i32.add (i32.const 1895528038)) + (i32.add (i32.const -972278473)) + (i32.add (i32.const 1084017955)) + (i32.add (i32.const -1470168832)) + (i32.add (i32.const 1951142155)) + (i32.add (i32.const 568578363)) + (i32.add (i32.const -1420426556)) + (i32.add (i32.const 2017658348)) + (i32.add (i32.const -937130075)) + (i32.add (i32.const -1697456827)) + (i32.add (i32.const -1975747213)) + (i32.add (i32.const -1219336001)) + (i32.add (i32.const -1414220486)) + (i32.add (i32.const 553363515)) + (i32.add (i32.const 2003897549)) + (i32.add (i32.const 1439520226)) + (i32.add (i32.const 542151521)) + (i32.add (i32.const -429554343)) + (i32.add (i32.const 1520195132)) + (i32.add (i32.const 1929832484)) + (i32.add (i32.const 2000497200)) + (i32.add (i32.const 940119676)) + (i32.add (i32.const 2138281923)) + (i32.add (i32.const 389218213)) + (i32.add (i32.const 1574421991)) + (i32.add (i32.const 1986079220)) + (i32.add (i32.const -983554244)) + (i32.add (i32.const -315424843)) + (i32.add (i32.const -1416775599)) + (i32.add (i32.const -1713971770)) + (i32.add (i32.const -37693238)) + (i32.add (i32.const -468193473)) + (i32.add (i32.const -1664604026)) + (i32.add (i32.const 258435281)) + (i32.add (i32.const 731256509)) + (i32.add (i32.const 739316250)) + (i32.add (i32.const 151611283)) + (i32.add (i32.const 1634926325)) + (i32.add (i32.const 160252386)) + (i32.add (i32.const -1412961272)) + (i32.add (i32.const 455262312)) + (i32.add (i32.const -1918932237)) + (i32.add (i32.const -470869435)) + (i32.add (i32.const 1536452859)) + (i32.add (i32.const 1362864033)) + (i32.add (i32.const 1001287461)) + (i32.add (i32.const 1012102288)) + (i32.add (i32.const 2023032263)) + (i32.add (i32.const -310197935)) + (i32.add (i32.const 1953647217)) + (i32.add (i32.const -1371113847)) + (i32.add (i32.const -1522398647)) + (i32.add (i32.const 1113345884)) + (i32.add (i32.const 1579440322)) + (i32.add (i32.const 1676165072)) + (i32.add (i32.const 2012576401)) + (i32.add (i32.const -821671414)) + (i32.add (i32.const -399936079)) + (i32.add (i32.const -868496735)) + (i32.add (i32.const 1777618643)) + (i32.add (i32.const 1702744749)) + (i32.add (i32.const 1053511994)) + (i32.add (i32.const 1516902980)) + (i32.add (i32.const -1722283394)) + (i32.add (i32.const -56019907)) + (i32.add (i32.const 91379349)) + (i32.add (i32.const 1855853425)) + (i32.add (i32.const 881257320)) + (i32.add (i32.const -1160523257)) + (i32.add (i32.const -863706345)) + (i32.add (i32.const -1544591976)) + (i32.add (i32.const 1929170508)) + (i32.add (i32.const -1967302533)) + (i32.add (i32.const -1188590744)) + (i32.add (i32.const 367400350)) + (i32.add (i32.const -425276008)) + (i32.add (i32.const 82521290)) + (i32.add (i32.const -1725208859)) + (i32.add (i32.const 480071368)) + (i32.add (i32.const -1377894873)) + (i32.add (i32.const -1432951914)) + (i32.add (i32.const 750092862)) + (i32.add (i32.const -1236795570)) + (i32.add (i32.const 1973793156)) + (i32.add (i32.const 1208996699)) + (i32.add (i32.const -1733618734)) + (i32.add (i32.const -309940035)) + (i32.add (i32.const 510295197)) + (i32.add (i32.const 1531921932)) + (i32.add (i32.const -1251196285)) + (i32.add (i32.const -1016216141)) + (i32.add (i32.const 1158827591)) + (i32.add (i32.const 778910484)) + (i32.add (i32.const 294799118)) + (i32.add (i32.const 868437775)) + (i32.add (i32.const 1980077499)) + (i32.add (i32.const 1864276770)) + (i32.add (i32.const 1068078656)) + (i32.add (i32.const -1159416358)) + (i32.add (i32.const 706799972)) + (i32.add (i32.const -1410714869)) + (i32.add (i32.const -1323344844)) + (i32.add (i32.const 771799884)) + (i32.add (i32.const 1567014619)) + (i32.add (i32.const 1948186830)) + (i32.add (i32.const -1754471843)) + (i32.add (i32.const 180738853)) + (i32.add (i32.const -1003780787)) + (i32.add (i32.const 340172297)) + (i32.add (i32.const -293266171)) + (i32.add (i32.const 728633032)) + (i32.add (i32.const -1183806056)) + (i32.add (i32.const 876127236)) + (i32.add (i32.const 118808233)) + (i32.add (i32.const 506994400)) + (i32.add (i32.const 16734354)) + (i32.add (i32.const -2000367205)) + (i32.add (i32.const -87228881)) + (i32.add (i32.const 658100899)) + (i32.add (i32.const -1820735244)) + (i32.add (i32.const 2023555073)) + (i32.add (i32.const 314916000)) + (i32.add (i32.const -1066021990)) + (i32.add (i32.const 1310851384)) + (i32.add (i32.const 826962412)) + (i32.add (i32.const -858708004)) + (i32.add (i32.const 1719356925)) + (i32.add (i32.const 1994202281)) + (i32.add (i32.const -89354269)) + (i32.add (i32.const 347098446)) + (i32.add (i32.const 1912035632)) + (i32.add (i32.const -1604429437)) + (i32.add (i32.const 2047791396)) + (i32.add (i32.const -870056789)) + (i32.add (i32.const 1715814963)) + (i32.add (i32.const 1765517419)) + (i32.add (i32.const 1745578186)) + (i32.add (i32.const -909628393)) + (i32.add (i32.const 512462109)) + (i32.add (i32.const -206015143)) + (i32.add (i32.const -1392124013)) + (i32.add (i32.const -2101540093)) + (i32.add (i32.const 2065121956)) + (i32.add (i32.const 88930272)) + (i32.add (i32.const -1710380090)) + (i32.add (i32.const 294207868)) + (i32.add (i32.const -1091419560)) + (i32.add (i32.const 1427506218)) + (i32.add (i32.const -1701751504)) + (i32.add (i32.const 90390460)) + (i32.add (i32.const -1292317583)) + (i32.add (i32.const 736857180)) + (i32.add (i32.const -1944389858)) + (i32.add (i32.const 321933507)) + (i32.add (i32.const 1569894277)) + (i32.add (i32.const -1050483174)) + (i32.add (i32.const 1759034444)) + (i32.add (i32.const -873997577)) + (i32.add (i32.const 884926014)) + (i32.add (i32.const 1553838034)) + (i32.add (i32.const -1494456469)) + (i32.add (i32.const -513395876)) + (i32.add (i32.const -74823013)) + (i32.add (i32.const -1837411841)) + (i32.add (i32.const -728605063)) + (i32.add (i32.const 305411511)) + (i32.add (i32.const 186155769)) + (i32.add (i32.const -2115570287)) + (i32.add (i32.const -828355112)) + (i32.add (i32.const 910112415)) + (i32.add (i32.const 1042792612)) + (i32.add (i32.const -2141934532)) + (i32.add (i32.const 532379955)) + (i32.add (i32.const 260518139)) + (i32.add (i32.const -201935734)) + (i32.add (i32.const 889040307)) + (i32.add (i32.const 1005664403)) + (i32.add (i32.const 388699506)) + (i32.add (i32.const -2013453393)) + (i32.add (i32.const 349101371)) + (i32.add (i32.const 1464489327)) + (i32.add (i32.const 315652571)) + (i32.add (i32.const 256613248)) + (i32.add (i32.const -655215434)) + (i32.add (i32.const 1597003303)) + (i32.add (i32.const 1118864503)) + (i32.add (i32.const -590888180)) + (i32.add (i32.const -1363251240)) + (i32.add (i32.const 120459003)) + (i32.add (i32.const 1400318626)) + (i32.add (i32.const -1582785082)) + (i32.add (i32.const 346725706)) + (i32.add (i32.const 255879321)) + (i32.add (i32.const 831753973)) + (i32.add (i32.const 1515925832)) + (i32.add (i32.const -148953088)) + (i32.add (i32.const 1798597082)) + (i32.add (i32.const -471272892)) + (i32.add (i32.const 954635687)) + (i32.add (i32.const 1534812129)) + (i32.add (i32.const -1071540252)) + (i32.add (i32.const -1380421953)) + (i32.add (i32.const 241402263)) + (i32.add (i32.const -1597130976)) + (i32.add (i32.const 1934644950)) + (i32.add (i32.const -1630678692)) + (i32.add (i32.const -120970234)) + (i32.add (i32.const 661725323)) + (i32.add (i32.const 837641467)) + (i32.add (i32.const -1600400032)) + (i32.add (i32.const 222617969)) + (i32.add (i32.const 1337440812)) + (i32.add (i32.const 1119350230)) + (i32.add (i32.const 102325042)) + (i32.add (i32.const 739739153)) + (i32.add (i32.const 699218210)) + (i32.add (i32.const -1336768541)) + (i32.add (i32.const -2066271742)) + (i32.add (i32.const 954685540)) + (i32.add (i32.const 1603227501)) + (i32.add (i32.const 451813382)) + (i32.add (i32.const -1111459979)) + (i32.add (i32.const 288715264)) + (i32.add (i32.const 1864333887)) + (i32.add (i32.const -904569284)) + (i32.add (i32.const 2021469922)) + (i32.add (i32.const -1223903021)) + (i32.add (i32.const -291193110)) + (i32.add (i32.const 1645848392)) + (i32.add (i32.const 1893709360)) + (i32.add (i32.const -1282876217)) + (i32.add (i32.const -1375125669)) + (i32.add (i32.const -1921218553)) + (i32.add (i32.const 31639436)) + (i32.add (i32.const 1457822654)) + (i32.add (i32.const -1196338211)) + (i32.add (i32.const -1646272463)) + (i32.add (i32.const -1331085148)) + (i32.add (i32.const 898846138)) + (i32.add (i32.const -932270623)) + (i32.add (i32.const 1686990666)) + (i32.add (i32.const 895864724)) + (i32.add (i32.const 1764006764)) + (i32.add (i32.const 402519418)) + (i32.add (i32.const -1953386591)) + (i32.add (i32.const -417537452)) + (i32.add (i32.const -730673043)) + (i32.add (i32.const 834955167)) + (i32.add (i32.const 1354267736)) + (i32.add (i32.const -1912143126)) + (i32.add (i32.const -1862135787)) + (i32.add (i32.const -746700247)) + (i32.add (i32.const 163895081)) + (i32.add (i32.const 1742043126)) + (i32.add (i32.const -1981152256)) + (i32.add (i32.const 466734865)) + (i32.add (i32.const 70307264)) + (i32.add (i32.const 573798898)) + (i32.add (i32.const -1188573778)) + (i32.add (i32.const -844732028)) + (i32.add (i32.const 324336930)) + (i32.add (i32.const -741347047)) + (i32.add (i32.const -549500093)) + (i32.add (i32.const -1111940271)) + (i32.add (i32.const -453034971)) + (i32.add (i32.const 1235551749)) + (i32.add (i32.const 556518137)) + (i32.add (i32.const 606727714)) + (i32.add (i32.const 1294228588)) + (i32.add (i32.const 1801852273)) + (i32.add (i32.const 1385669863)) + (i32.add (i32.const 1546951830)) + (i32.add (i32.const 81542638)) + (i32.add (i32.const -180320345)) + (i32.add (i32.const 1813091847)) + (i32.add (i32.const -2071431833)) + (i32.add (i32.const 994574813)) + (i32.add (i32.const 1409556826)) + (i32.add (i32.const -227156404)) + (i32.add (i32.const 1446918963)) + (i32.add (i32.const 1294299643)) + (i32.add (i32.const 1390465324)) + (i32.add (i32.const -789220891)) + (i32.add (i32.const -932637524)) + (i32.add (i32.const -1597142900)) + (i32.add (i32.const -2106361924)) + (i32.add (i32.const -749689177)) + (i32.add (i32.const 381424927)) + (i32.add (i32.const -45800737)) + (i32.add (i32.const -731734390)) + (i32.add (i32.const -1697086639)) + (i32.add (i32.const 311140418)) + (i32.add (i32.const 1546428277)) + (i32.add (i32.const 246150940)) + (i32.add (i32.const -138771067)) + (i32.add (i32.const 597719888)) + (i32.add (i32.const 457807281)) + (i32.add (i32.const -1517888979)) + (i32.add (i32.const -1302044031)) + (i32.add (i32.const 82167901)) + (i32.add (i32.const 1445858398)) + (i32.add (i32.const -966996550)) + (i32.add (i32.const -856582428)) + (i32.add (i32.const -706524754)) + (i32.add (i32.const -2109644656)) + (i32.add (i32.const 1565723138)) + (i32.add (i32.const -692205695)) + (i32.add (i32.const 1381139657)) + (i32.add (i32.const -547586572)) + (i32.add (i32.const -1737295641)) + (i32.add (i32.const -776387579)) + (i32.add (i32.const -2114904228)) + (i32.add (i32.const 849718874)) + (i32.add (i32.const 453887535)) + (i32.add (i32.const 1377417508)) + (i32.add (i32.const -1874320143)) + (i32.add (i32.const 1277659105)) + (i32.add (i32.const -1783239784)) + (i32.add (i32.const 1721701560)) + (i32.add (i32.const 908694927)) + (i32.add (i32.const 239771247)) + (i32.add (i32.const 1071166746)) + (i32.add (i32.const 1878423901)) + (i32.add (i32.const -974971979)) + (i32.add (i32.const 2081912536)) + (i32.add (i32.const 840734665)) + (i32.add (i32.const 72024310)) + (i32.add (i32.const -306885677)) + (i32.add (i32.const 1249957887)) + (i32.add (i32.const -1141049913)) + (i32.add (i32.const -1222931025)) + (i32.add (i32.const -447188242)) + (i32.add (i32.const 1309189176)) + (i32.add (i32.const -1529245491)) + (i32.add (i32.const -722461990)) + (i32.add (i32.const 2058045075)) + (i32.add (i32.const 958105302)) + (i32.add (i32.const 665836315)) + (i32.add (i32.const 327326793)) + (i32.add (i32.const -1845088224)) + (i32.add (i32.const -1254256451)) + (i32.add (i32.const -2124152027)) + (i32.add (i32.const -806751182)) + (i32.add (i32.const -459297609)) + (i32.add (i32.const -1734614780)) + (i32.add (i32.const -104140862)) + (i32.add (i32.const 1255696035)) + (i32.add (i32.const -1460538805)) + (i32.add (i32.const 1702857165)) + (i32.add (i32.const 1396837458)) + (i32.add (i32.const -759898838)) + (i32.add (i32.const -287375888)) + (i32.add (i32.const 126114617)) + (i32.add (i32.const 1865307530)) + (i32.add (i32.const -1454872279)) + (i32.add (i32.const 10976627)) + (i32.add (i32.const -2136433228)) + (i32.add (i32.const 2115498248)) + (i32.add (i32.const -897627160)) + (i32.add (i32.const -977633093)) + (i32.add (i32.const 1426267205)) + (i32.add (i32.const 76927171)) + (i32.add (i32.const 1468215403)) + (i32.add (i32.const -792526859)) + (i32.add (i32.const 1689446076)) + (i32.add (i32.const -972248054)) + (i32.add (i32.const 2132351999)) + (i32.add (i32.const -295334117)) + (i32.add (i32.const 337257370)) + (i32.add (i32.const -1438154544)) + (i32.add (i32.const -628174675)) + (i32.add (i32.const -1760884485)) + (i32.add (i32.const 486350673)) + (i32.add (i32.const 832987862)) + (i32.add (i32.const 720515098)) + (i32.add (i32.const -1659624415)) + (i32.add (i32.const 946559293)) + (i32.add (i32.const 1087153406)) + (i32.add (i32.const -1946056375)) + (i32.add (i32.const 816995259)) + (i32.add (i32.const -1959232729)) + (i32.add (i32.const 325698117)) + (i32.add (i32.const 92189364)) + (i32.add (i32.const 1763274833)) + (i32.add (i32.const 549749376)) + (i32.add (i32.const -719854106)) + (i32.add (i32.const -349722400)) + (i32.add (i32.const -1604206941)) + (i32.add (i32.const -1417096231)) + (i32.add (i32.const -212519963)) + (i32.add (i32.const 66619842)) + (i32.add (i32.const 1701514147)) + (i32.add (i32.const 718684308)) + (i32.add (i32.const -281720331)) + (i32.add (i32.const -1920290187)) + (i32.add (i32.const -485939257)) + (i32.add (i32.const 1828360722)) + (i32.add (i32.const -832227206)) + (i32.add (i32.const -197304982)) + (i32.add (i32.const -1686575792)) + (i32.add (i32.const -1016719567)) + (i32.add (i32.const 1933689347)) + (i32.add (i32.const -477978474)) + (i32.add (i32.const 1288155098)) + (i32.add (i32.const 1877963356)) + (i32.add (i32.const -306137784)) + (i32.add (i32.const 892130559)) + (i32.add (i32.const -8033467)) + (i32.add (i32.const 202897877)) + (i32.add (i32.const -1724498553)) + (i32.add (i32.const -454407722)) + (i32.add (i32.const 1309621693)) + (i32.add (i32.const 1369462558)) + (i32.add (i32.const -1731221471)) + (i32.add (i32.const 1477250386)) + (i32.add (i32.const -2100918712)) + (i32.add (i32.const -2079253115)) + (i32.add (i32.const -1340751487)) + (i32.add (i32.const 1275248720)) + (i32.add (i32.const -1809078465)) + (i32.add (i32.const -1933394708)) + (i32.add (i32.const -145540411)) + (i32.add (i32.const 713470185)) + (i32.add (i32.const -1702403115)) + (i32.add (i32.const 1282791652)) + (i32.add (i32.const 1211383079)) + (i32.add (i32.const -1640018355)) + (i32.add (i32.const -1237126008)) + (i32.add (i32.const 1910173495)) + (i32.add (i32.const -1310142147)) + (i32.add (i32.const 78267964)) + (i32.add (i32.const -1756252091)) + (i32.add (i32.const 1091962571)) + (i32.add (i32.const 18757071)) + (i32.add (i32.const -1094561630)) + (i32.add (i32.const 1655996297)) + (i32.add (i32.const 1711354367)) + (i32.add (i32.const 1159613321)) + (i32.add (i32.const 163184724)) + (i32.add (i32.const -2089733210)) + (i32.add (i32.const 159704496)) + (i32.add (i32.const -1594499762)) + (i32.add (i32.const -142742899)) + (i32.add (i32.const 200511118)) + (i32.add (i32.const 695378804)) + (i32.add (i32.const -968931002)) + (i32.add (i32.const -1922443570)) + (i32.add (i32.const 309195640)) + (i32.add (i32.const -591305357)) + (i32.add (i32.const 1934339325)) + (i32.add (i32.const -669827384)) + (i32.add (i32.const 144685273)) + (i32.add (i32.const 952074833)) + (i32.add (i32.const -595504307)) + (i32.add (i32.const -503056207)) + (i32.add (i32.const 1953059133)) + (i32.add (i32.const -1214719677)) + (i32.add (i32.const -1310448979)) + (i32.add (i32.const -809300457)) + (i32.add (i32.const -552182727)) + (i32.add (i32.const 1898570609)) + (i32.add (i32.const 539236062)) + (i32.add (i32.const -940129105)) + (i32.add (i32.const 908016425)) + (i32.add (i32.const -1560560135)) + (i32.add (i32.const 1598662987)) + (i32.add (i32.const -1188099265)) + (i32.add (i32.const -1097437787)) + (i32.add (i32.const 1369167172)) + (i32.add (i32.const 1261248718)) + (i32.add (i32.const -445923362)) + (i32.add (i32.const 1822551412)) + (i32.add (i32.const -1488575148)) + (i32.add (i32.const 1293528026)) + (i32.add (i32.const -1997106538)) + (i32.add (i32.const -125324320)) + (i32.add (i32.const -765229460)) + (i32.add (i32.const 1730539593)) + (i32.add (i32.const -1112298582)) + (i32.add (i32.const 1624350280)) + (i32.add (i32.const 767122371)) + (i32.add (i32.const 1674939163)) + (i32.add (i32.const -1800840404)) + (i32.add (i32.const 1903171955)) + (i32.add (i32.const -103076685)) + (i32.add (i32.const -1076216446)) + (i32.add (i32.const -205907786)) + (i32.add (i32.const -1164943014)) + (i32.add (i32.const -482512221)) + (i32.add (i32.const 134574001)) + (i32.add (i32.const -1717258156)) + (i32.add (i32.const -1956852408)) + (i32.add (i32.const 401149603)) + (i32.add (i32.const -1021596297)) + (i32.add (i32.const 1484606640)) + (i32.add (i32.const -240461733)) + (i32.add (i32.const 1062488860)) + (i32.add (i32.const -1808890727)) + (i32.add (i32.const 1448109890)) + (i32.add (i32.const -893669451)) + (i32.add (i32.const -1780482146)) + (i32.add (i32.const 1685730007)) + (i32.add (i32.const 575214928)) + (i32.add (i32.const 440619703)) + (i32.add (i32.const -1924154687)) + (i32.add (i32.const -1315360608)) + (i32.add (i32.const -65755500)) + (i32.add (i32.const 1723748875)) + (i32.add (i32.const 690808926)) + (i32.add (i32.const -1597863624)) + (i32.add (i32.const 985282614)) + (i32.add (i32.const 1800437862)) + (i32.add (i32.const -292804710)) + (i32.add (i32.const -1297431312)) + (i32.add (i32.const 474944539)) + (i32.add (i32.const 36970701)) + (i32.add (i32.const -1404102907)) + (i32.add (i32.const 2101348242)) + (i32.add (i32.const -1796975482)) + (i32.add (i32.const -1497021681)) + (i32.add (i32.const 2137505888)) + (i32.add (i32.const 1738287155)) + (i32.add (i32.const 70970015)) + (i32.add (i32.const -1712369927)) + (i32.add (i32.const 897181003)) + (i32.add (i32.const -1378505949)) + (i32.add (i32.const -1330478102)) + (i32.add (i32.const -278282801)) + (i32.add (i32.const 1780737717)) + (i32.add (i32.const -1899781927)) + (i32.add (i32.const -1476490187)) + (i32.add (i32.const 1422007824)) + (i32.add (i32.const -1057377047)) + (i32.add (i32.const 591632861)) + (i32.add (i32.const -1735766671)) + (i32.add (i32.const -612667164)) + (i32.add (i32.const 1183627525)) + (i32.add (i32.const -894668376)) + (i32.add (i32.const -773220849)) + (i32.add (i32.const -1817595366)) + (i32.add (i32.const 301392230)) + (i32.add (i32.const 2006069923)) + (i32.add (i32.const -1695034480)) + (i32.add (i32.const 662043027)) + (i32.add (i32.const 1984641315)) + (i32.add (i32.const -1029395561)) + (i32.add (i32.const 895856647)) + (i32.add (i32.const -2020668166)) + (i32.add (i32.const 418212600)) + (i32.add (i32.const -490382457)) + (i32.add (i32.const 400362097)) + (i32.add (i32.const -1940517503)) + (i32.add (i32.const 727959528)) + (i32.add (i32.const -951929641)) + (i32.add (i32.const 1456539497)) + (i32.add (i32.const 1553126065)) + (i32.add (i32.const -1625968133)) + (i32.add (i32.const 701549432)) + (i32.add (i32.const 46771556)) + (i32.add (i32.const 518169212)) + (i32.add (i32.const 1185979546)) + (i32.add (i32.const 929292414)) + (i32.add (i32.const 1279130079)) + (i32.add (i32.const 2053102425)) + (i32.add (i32.const 544992260)) + (i32.add (i32.const -1114585140)) + (i32.add (i32.const -352409342)) + (i32.add (i32.const -5207452)) + (i32.add (i32.const 894534024)) + (i32.add (i32.const -838122415)) + (i32.add (i32.const -1950892039)) + (i32.add (i32.const -681297346)) + (i32.add (i32.const -595189239)) + (i32.add (i32.const 417124661)) + (i32.add (i32.const -201385000)) + (i32.add (i32.const -1087403900)) + (i32.add (i32.const 157876773)) + (i32.add (i32.const -1284511661)) + (i32.add (i32.const -401654344)) + (i32.add (i32.const 1144306002)) + (i32.add (i32.const 816852705)) + (i32.add (i32.const 19285542)) + (i32.add (i32.const -584317610)) + (i32.add (i32.const 1948997199)) + (i32.add (i32.const -2118316159)) + (i32.add (i32.const -440553478)) + (i32.add (i32.const -1497876262)) + (i32.add (i32.const -1452638635)) + (i32.add (i32.const -814643224)) + (i32.add (i32.const 1383300198)) + (i32.add (i32.const 1570179675)) + (i32.add (i32.const -2087978157)) + (i32.add (i32.const -896503408)) + (i32.add (i32.const -1359491894)) + (i32.add (i32.const 1379608777)) + (i32.add (i32.const -361667778)) + (i32.add (i32.const 1290126387)) + (i32.add (i32.const -476770879)) + (i32.add (i32.const 510432210)) + (i32.add (i32.const 1696197757)) + (i32.add (i32.const 1957772340)) + (i32.add (i32.const -137217374)) + (i32.add (i32.const 111979059)) + (i32.add (i32.const -1726881798)) + (i32.add (i32.const 59656353)) + (i32.add (i32.const 628723486)) + (i32.add (i32.const 2047376635)) + (i32.add (i32.const 2099801342)) + (i32.add (i32.const -989618784)) + (i32.add (i32.const -1204442993)) + (i32.add (i32.const -1965152366)) + (i32.add (i32.const 125259120)) + (i32.add (i32.const -392103585)) + (i32.add (i32.const 1919496029)) + (i32.add (i32.const -977597348)) + (i32.add (i32.const 1808723761)) + (i32.add (i32.const 1932709896)) + (i32.add (i32.const -314450957)) + (i32.add (i32.const -221405379)) + (i32.add (i32.const -273428252)) + (i32.add (i32.const 1825725836)) + (i32.add (i32.const 493625501)) + (i32.add (i32.const 1345543436)) + (i32.add (i32.const 374469056)) + (i32.add (i32.const -1716067270)) + (i32.add (i32.const 247230497)) + (i32.add (i32.const 1845471220)) + (i32.add (i32.const -1198265297)) + (i32.add (i32.const -648173132)) + (i32.add (i32.const 379742413)) + (i32.add (i32.const 385775001)) + (i32.add (i32.const -1528150029)) + (i32.add (i32.const 579758178)) + (i32.add (i32.const -1876112657)) + (i32.add (i32.const 1557433198)) + (i32.add (i32.const -510079716)) + (i32.add (i32.const -844421978)) + (i32.add (i32.const 265538399)) + (i32.add (i32.const -1190634281)) + (i32.add (i32.const -1891312320)) + (i32.add (i32.const -1621003608)) + (i32.add (i32.const 1357150164)) + (i32.add (i32.const 1149801764)) + (i32.add (i32.const 1323716729)) + (i32.add (i32.const -1459388733)) + (i32.add (i32.const 935177743)) + (i32.add (i32.const 155373866)) + (i32.add (i32.const -1162682996)) + (i32.add (i32.const -1278447319)) + (i32.add (i32.const -2029096467)) + (i32.add (i32.const -784375871)) + (i32.add (i32.const 1859190687)) + (i32.add (i32.const -1127064667)) + (i32.add (i32.const 400137700)) + (i32.add (i32.const -783962992)) + (i32.add (i32.const -1537147166)) + (i32.add (i32.const 723407187)) + (i32.add (i32.const 23843737)) + (i32.add (i32.const -1881084010)) + (i32.add (i32.const 1650989329)) + (i32.add (i32.const 1713461713)) + (i32.add (i32.const -850970281)) + (i32.add (i32.const 1217670322)) + (i32.add (i32.const -266395652)) + (i32.add (i32.const -241970528)) + (i32.add (i32.const 1179011658)) + (i32.add (i32.const 1684126067)) + (i32.add (i32.const 1427731240)) + (i32.add (i32.const 1450166463)) + (i32.add (i32.const -1098765318)) + (i32.add (i32.const -810747910)) + (i32.add (i32.const -2141864152)) + (i32.add (i32.const -504939772)) + (i32.add (i32.const 3624165)) + (i32.add (i32.const 694633320)) + (i32.add (i32.const 1045334399)) + (i32.add (i32.const 1926036716)) + (i32.add (i32.const -46374496)) + (i32.add (i32.const 2114395784)) + (i32.add (i32.const 1141089183)) + (i32.add (i32.const -1288359404)) + (i32.add (i32.const 1386235862)) + (i32.add (i32.const -1301637498)) + (i32.add (i32.const -94237515)) + (i32.add (i32.const -1654066336)) + (i32.add (i32.const 1116215843)) + (i32.add (i32.const 1968506979)) + (i32.add (i32.const -865053837)) + (i32.add (i32.const -1080314667)) + (i32.add (i32.const -852760075)) + (i32.add (i32.const 1222754839)) + (i32.add (i32.const 635772705)) + (i32.add (i32.const 901114855)) + (i32.add (i32.const 664342034)) + (i32.add (i32.const -1341292880)) + (i32.add (i32.const -643205874)) + (i32.add (i32.const -798787380)) + (i32.add (i32.const 769390502)) + (i32.add (i32.const -856093237)) + (i32.add (i32.const -2102567661)) + (i32.add (i32.const -1756248175)) + (i32.add (i32.const -1847910656)) + (i32.add (i32.const -900085166)) + (i32.add (i32.const 879243769)) + (i32.add (i32.const 1799406945)) + (i32.add (i32.const 235961038)) + (i32.add (i32.const -1044615266)) + (i32.add (i32.const -1362463866)) + (i32.add (i32.const 1201238405)) + (i32.add (i32.const -1467267900)) + (i32.add (i32.const -41001069)) + (i32.add (i32.const 1399492972)) + (i32.add (i32.const 619643320)) + (i32.add (i32.const 1854614575)) + (i32.add (i32.const -278801577)) + (i32.add (i32.const -1696211377)) + (i32.add (i32.const -1450140485)) + (i32.add (i32.const -1910131377)) + (i32.add (i32.const 1281566200)) + (i32.add (i32.const 331754644)) + (i32.add (i32.const -1631783352)) + (i32.add (i32.const 479293148)) + (i32.add (i32.const 959374909)) + (i32.add (i32.const 449549527)) + (i32.add (i32.const -1098382218)) + (i32.add (i32.const 938464890)) + (i32.add (i32.const -261681842)) + (i32.add (i32.const -1672434184)) + (i32.add (i32.const -1329236577)) + (i32.add (i32.const -1908530644)) + (i32.add (i32.const 2029386118)) + (i32.add (i32.const 1331015832)) + (i32.add (i32.const 899576271)) + (i32.add (i32.const -177466402)) + (i32.add (i32.const -1502156684)) + (i32.add (i32.const -371904627)) + (i32.add (i32.const 1991770026)) + (i32.add (i32.const 554793225)) + (i32.add (i32.const 1707770433)) + (i32.add (i32.const 1326862310)) + (i32.add (i32.const 1797358147)) + (i32.add (i32.const 703176740)) + (i32.add (i32.const -369305851)) + (i32.add (i32.const -1163605333)) + (i32.add (i32.const -577708168)) + (i32.add (i32.const 1637880985)) + (i32.add (i32.const 1929578626)) + (i32.add (i32.const -667153086)) + (i32.add (i32.const -1909018065)) + (i32.add (i32.const -248981445)) + (i32.add (i32.const -1110206576)) + (i32.add (i32.const -1769275237)) + (i32.add (i32.const 1685350276)) + (i32.add (i32.const -324339127)) + (i32.add (i32.const -760106242)) + (i32.add (i32.const 1248622243)) + (i32.add (i32.const -1412040093)) + (i32.add (i32.const 966029195)) + (i32.add (i32.const 1517134082)) + (i32.add (i32.const -315101509)) + (i32.add (i32.const -173107412)) + (i32.add (i32.const -1113012721)) + (i32.add (i32.const -1185963845)) + (i32.add (i32.const -1146390258)) + (i32.add (i32.const -571749329)) + (i32.add (i32.const 786202457)) + (i32.add (i32.const 200463594)) + (i32.add (i32.const 1743444000)) + (i32.add (i32.const 156115902)) + (i32.add (i32.const -1821493858)) + (i32.add (i32.const -1681405941)) + (i32.add (i32.const -1859250980)) + (i32.add (i32.const -211991812)) + (i32.add (i32.const 1580470080)) + (i32.add (i32.const 1502330668)) + (i32.add (i32.const 995937685)) + (i32.add (i32.const -374123677)) + (i32.add (i32.const -898395424)) + (i32.add (i32.const 1304262313)) + (i32.add (i32.const -1775871973)) + (i32.add (i32.const 665598917)) + (i32.add (i32.const -198190698)) + (i32.add (i32.const -657664653)) + (i32.add (i32.const 1830909709)) + (i32.add (i32.const 823592329)) + (i32.add (i32.const -804292144)) + (i32.add (i32.const -292015430)) + (i32.add (i32.const 642993452)) + (i32.add (i32.const 1393752653)) + (i32.add (i32.const -671010211)) + (i32.add (i32.const 1037203869)) + (i32.add (i32.const 765504580)) + (i32.add (i32.const -1220456890)) + (i32.add (i32.const 1010845613)) + (i32.add (i32.const -1256575454)) + (i32.add (i32.const 1722052494)) + (i32.add (i32.const -435303633)) + (i32.add (i32.const -1487750958)) + (i32.add (i32.const -1409169135)) + (i32.add (i32.const -494069821)) + (i32.add (i32.const 895061314)) + (i32.add (i32.const 869498555)) + (i32.add (i32.const -1428494430)) + (i32.add (i32.const -1115602156)) + (i32.add (i32.const -1831853077)) + (i32.add (i32.const 1546430444)) + (i32.add (i32.const -165970641)) + (i32.add (i32.const 120856696)) + (i32.add (i32.const 1652002785)) + (i32.add (i32.const -379585125)) + (i32.add (i32.const -210829561)) + (i32.add (i32.const -2100828637)) + (i32.add (i32.const -194776081)) + (i32.add (i32.const -1879298667)) + (i32.add (i32.const 767284482)) + (i32.add (i32.const 855208470)) + (i32.add (i32.const 1928536126)) + (i32.add (i32.const 1323973485)) + (i32.add (i32.const 696486959)) + (i32.add (i32.const 1727748015)) + (i32.add (i32.const -260809799)) + (i32.add (i32.const 368068372)) + (i32.add (i32.const 1860331721)) + (i32.add (i32.const -1124321574)) + (i32.add (i32.const 710161053)) + (i32.add (i32.const -530750992)) + (i32.add (i32.const -1497627758)) + (i32.add (i32.const 1442626517)) + (i32.add (i32.const -1539298007)) + (i32.add (i32.const -1671368471)) + (i32.add (i32.const 1459574538)) + (i32.add (i32.const -890386339)) + (i32.add (i32.const 1422558259)) + (i32.add (i32.const -67957122)) + (i32.add (i32.const -1539135970)) + (i32.add (i32.const 436851314)) + (i32.add (i32.const -1165320794)) + (i32.add (i32.const 1085187677)) + (i32.add (i32.const -1784431346)) + (i32.add (i32.const 1999439203)) + (i32.add (i32.const 1280860304)) + (i32.add (i32.const 188443150)) + (i32.add (i32.const -45661623)) + (i32.add (i32.const 1452924443)) + (i32.add (i32.const -855754836)) + (i32.add (i32.const 876562383)) + (i32.add (i32.const -1130030379)) + (i32.add (i32.const -618615334)) + (i32.add (i32.const -2047559170)) + (i32.add (i32.const 1292102987)) + (i32.add (i32.const -1615286223)) + (i32.add (i32.const 1123096034)) + (i32.add (i32.const 431939168)) + (i32.add (i32.const -813122624)) + (i32.add (i32.const -1981577021)) + (i32.add (i32.const -1501894795)) + (i32.add (i32.const -509237370)) + (i32.add (i32.const 423894194)) + (i32.add (i32.const -1086793491)) + (i32.add (i32.const 1299803332)) + (i32.add (i32.const 739759009)) + (i32.add (i32.const -641870898)) + (i32.add (i32.const -854288927)) + (i32.add (i32.const 205311067)) + (i32.add (i32.const 373560583)) + (i32.add (i32.const 1590613752)) + (i32.add (i32.const -1902449881)) + (i32.add (i32.const -1134259273)) + (i32.add (i32.const -2126924669)) + (i32.add (i32.const -1710721551)) + (i32.add (i32.const 439161517)) + (i32.add (i32.const 509933942)) + (i32.add (i32.const -1798325756)) + (i32.add (i32.const -1984480102)) + (i32.add (i32.const -1358473130)) + (i32.add (i32.const -1730727574)) + (i32.add (i32.const 272325394)) + (i32.add (i32.const -511307760)) + (i32.add (i32.const -157128951)) + (i32.add (i32.const 542324051)) + (i32.add (i32.const -811078783)) + (i32.add (i32.const 2061204656)) + (i32.add (i32.const -1193056624)) + (i32.add (i32.const -1839555079)) + (i32.add (i32.const 930078347)) + (i32.add (i32.const -1452171389)) + (i32.add (i32.const 325431750)) + (i32.add (i32.const -2109248811)) + (i32.add (i32.const -747012051)) + (i32.add (i32.const -1287483540)) + (i32.add (i32.const 790658768)) + (i32.add (i32.const 189107547)) + (i32.add (i32.const -1571527369)) + (i32.add (i32.const 120978654)) + (i32.add (i32.const 991897140)) + (i32.add (i32.const -727045783)) + (i32.add (i32.const 257555361)) + (i32.add (i32.const 1721659229)) + (i32.add (i32.const 1853880025)) + (i32.add (i32.const -1873049077)) + (i32.add (i32.const 1150529893)) + (i32.add (i32.const 1708796062)) + (i32.add (i32.const -1069553001)) + (i32.add (i32.const 683900808)) + (i32.add (i32.const -1633944182)) + (i32.add (i32.const 1368022196)) + (i32.add (i32.const -953088397)) + (i32.add (i32.const 390475647)) + (i32.add (i32.const -216839067)) + (i32.add (i32.const 1922534848)) + (i32.add (i32.const -1032916084)) + (i32.add (i32.const -602827491)) + (i32.add (i32.const 152991768)) + (i32.add (i32.const 1021423142)) + (i32.add (i32.const 349808232)) + (i32.add (i32.const -930902983)) + (i32.add (i32.const -999124940)) + (i32.add (i32.const 795668066)) + (i32.add (i32.const -955486998)) + (i32.add (i32.const -1413641993)) + (i32.add (i32.const 1912483856)) + (i32.add (i32.const 1161688938)) + (i32.add (i32.const -935706235)) + (i32.add (i32.const -216232475)) + (i32.add (i32.const -946711146)) + (i32.add (i32.const -40423652)) + (i32.add (i32.const 1535399759)) + (i32.add (i32.const 350927227)) + (i32.add (i32.const -1126345892)) + (i32.add (i32.const -846545721)) + (i32.add (i32.const 1740724607)) + (i32.add (i32.const -1266247269)) + (i32.add (i32.const 61075448)) + (i32.add (i32.const -1649131876)) + (i32.add (i32.const 1745980627)) + (i32.add (i32.const 1059750053)) + (i32.add (i32.const -2099131716)) + (i32.add (i32.const 584537050)) + (i32.add (i32.const -1065805113)) + (i32.add (i32.const -1787430757)) + (i32.add (i32.const 1838169207)) + (i32.add (i32.const 18458018)) + (i32.add (i32.const 1637995132)) + (i32.add (i32.const -1730132756)) + (i32.add (i32.const -154734050)) + (i32.add (i32.const -727339474)) + (i32.add (i32.const -580418386)) + (i32.add (i32.const 1174131054)) + (i32.add (i32.const -1685059701)) + (i32.add (i32.const 1105935646)) + (i32.add (i32.const 1954121032)) + (i32.add (i32.const 1399317385)) + (i32.add (i32.const -218108917)) + (i32.add (i32.const -871536300)) + (i32.add (i32.const 545326975)) + (i32.add (i32.const 1129688664)) + (i32.add (i32.const 22162087)) + (i32.add (i32.const -1707753991)) + (i32.add (i32.const 1992434796)) + (i32.add (i32.const -898812544)) + (i32.add (i32.const 803672067)) + (i32.add (i32.const -725425529)) + (i32.add (i32.const -1497936860)) + (i32.add (i32.const -1391355655)) + (i32.add (i32.const -1615116673)) + (i32.add (i32.const 542075471)) + (i32.add (i32.const -494832588)) + (i32.add (i32.const -1437600518)) + (i32.add (i32.const 1008830792)) + (i32.add (i32.const 1498312970)) + (i32.add (i32.const 1760348565)) + (i32.add (i32.const -794679269)) + (i32.add (i32.const -1055582070)) + (i32.add (i32.const -1583361488)) + (i32.add (i32.const 530120560)) + (i32.add (i32.const -446152363)) + (i32.add (i32.const -1223387163)) + (i32.add (i32.const -278425759)) + (i32.add (i32.const 1674187964)) + (i32.add (i32.const 1155985868)) + (i32.add (i32.const -102294645)) + (i32.add (i32.const 150175337)) + (i32.add (i32.const -1482878955)) + (i32.add (i32.const 396217888)) + (i32.add (i32.const 1163423111)) + (i32.add (i32.const 2113699258)) + (i32.add (i32.const -1862344622)) + (i32.add (i32.const 1433868715)) + (i32.add (i32.const 1584925334)) + (i32.add (i32.const 969294245)) + (i32.add (i32.const -1206335458)) + (i32.add (i32.const -2067179900)) + (i32.add (i32.const -1316458952)) + (i32.add (i32.const -1190428840)) + (i32.add (i32.const -1389711776)) + (i32.add (i32.const -1852641384)) + (i32.add (i32.const -1074959554)) + (i32.add (i32.const 260138698)) + (i32.add (i32.const -1843862952)) + (i32.add (i32.const -601347418)) + (i32.add (i32.const -2073037709)) + (i32.add (i32.const 1443345121)) + (i32.add (i32.const 347563636)) + (i32.add (i32.const -682295503)) + (i32.add (i32.const 1197833057)) + (i32.add (i32.const 1629391260)) + (i32.add (i32.const -1148456029)) + (i32.add (i32.const -1638195565)) + (i32.add (i32.const 1780747805)) + (i32.add (i32.const -633601749)) + (i32.add (i32.const -1870700149)) + (i32.add (i32.const 585979539)) + (i32.add (i32.const -1618174328)) + (i32.add (i32.const -593423309)) + (i32.add (i32.const -1739397624)) + (i32.add (i32.const -1642705877)) + (i32.add (i32.const -352456606)) + (i32.add (i32.const -1508320041)) + (i32.add (i32.const 1582587480)) + (i32.add (i32.const -1964200922)) + (i32.add (i32.const 78723519)) + (i32.add (i32.const -1607434859)) + (i32.add (i32.const -1148537885)) + (i32.add (i32.const -141404389)) + (i32.add (i32.const 1051437120)) + (i32.add (i32.const -2099308761)) + (i32.add (i32.const 676407835)) + (i32.add (i32.const 325960327)) + (i32.add (i32.const 171743182)) + (i32.add (i32.const -1472913812)) + (i32.add (i32.const 839264187)) + (i32.add (i32.const -603505668)) + (i32.add (i32.const 675011810)) + (i32.add (i32.const -1975719225)) + (i32.add (i32.const -1544755733)) + (i32.add (i32.const 604568682)) + (i32.add (i32.const 673934987)) + (i32.add (i32.const 914674901)) + (i32.add (i32.const -739366833)) + (i32.add (i32.const -748224547)) + (i32.add (i32.const 23658154)) + (i32.add (i32.const -1796264467)) + (i32.add (i32.const 1005639941)) + (i32.add (i32.const 892473601)) + (i32.add (i32.const 445307637)) + (i32.add (i32.const 887571767)) + (i32.add (i32.const 1975512119)) + (i32.add (i32.const 557711108)) + (i32.add (i32.const 92669578)) + (i32.add (i32.const 1177096098)) + (i32.add (i32.const 484900096)) + (i32.add (i32.const -1808954007)) + (i32.add (i32.const 274409742)) + (i32.add (i32.const 773398128)) + (i32.add (i32.const -8710154)) + (i32.add (i32.const -708202792)) + (i32.add (i32.const -1566552558)) + (i32.add (i32.const 1470169516)) + (i32.add (i32.const -1756231333)) + (i32.add (i32.const -729443369)) + (i32.add (i32.const -1259803191)) + (i32.add (i32.const -2122046896)) + (i32.add (i32.const -1393624004)) + (i32.add (i32.const 1298870948)) + (i32.add (i32.const -462157298)) + (i32.add (i32.const 208897398)) + (i32.add (i32.const -1085171260)) + (i32.add (i32.const 1620907740)) + (i32.add (i32.const -134620907)) + (i32.add (i32.const 1843614665)) + (i32.add (i32.const 2042921137)) + (i32.add (i32.const 693203957)) + (i32.add (i32.const 67675443)) + (i32.add (i32.const -651986726)) + (i32.add (i32.const 1500696961)) + (i32.add (i32.const -791764154)) + (i32.add (i32.const -436056419)) + (i32.add (i32.const 209613106)) + (i32.add (i32.const -1922460898)) + (i32.add (i32.const 878288559)) + (i32.add (i32.const 1138486633)) + (i32.add (i32.const -1968254743)) + (i32.add (i32.const 888465714)) + (i32.add (i32.const -1064073602)) + (i32.add (i32.const -831769871)) + (i32.add (i32.const -332764766)) + (i32.add (i32.const 540403811)) + (i32.add (i32.const 181163929)) + (i32.add (i32.const 380675054)) + (i32.add (i32.const -1836751902)) + (i32.add (i32.const -1925698447)) + (i32.add (i32.const -179987804)) + (i32.add (i32.const -2084080832)) + (i32.add (i32.const -799912724)) + (i32.add (i32.const -1654428979)) + (i32.add (i32.const 1340546241)) + (i32.add (i32.const 1293019311)) + (i32.add (i32.const -1939439599)) + (i32.add (i32.const 873683620)) + (i32.add (i32.const 62696751)) + (i32.add (i32.const -2102082560)) + (i32.add (i32.const 1639789602)) + (i32.add (i32.const -2116013062)) + (i32.add (i32.const -1517886142)) + (i32.add (i32.const 45565414)) + (i32.add (i32.const -1273505810)) + (i32.add (i32.const -225368135)) + (i32.add (i32.const 376555752)) + (i32.add (i32.const -1777830690)) + (i32.add (i32.const 1053328917)) + (i32.add (i32.const -79268145)) + (i32.add (i32.const -178549405)) + (i32.add (i32.const 1571768810)) + (i32.add (i32.const 1699369996)) + (i32.add (i32.const 297821741)) + (i32.add (i32.const -431744235)) + (i32.add (i32.const -499752037)) + (i32.add (i32.const 1782945159)) + (i32.add (i32.const -1645701840)) + (i32.add (i32.const -1274286510)) + (i32.add (i32.const 832899018)) + (i32.add (i32.const -607663118)) + (i32.add (i32.const 1164701197)) + (i32.add (i32.const 1116217823)) + (i32.add (i32.const 1080562834)) + (i32.add (i32.const -918015519)) + (i32.add (i32.const -663829564)) + (i32.add (i32.const -185867860)) + (i32.add (i32.const 1758058486)) + (i32.add (i32.const -1425699689)) + (i32.add (i32.const -440838637)) + (i32.add (i32.const -1129266822)) + (i32.add (i32.const -1026940416)) + (i32.add (i32.const -245261210)) + (i32.add (i32.const 246937623)) + (i32.add (i32.const 749249997)) + (i32.add (i32.const 437724438)) + (i32.add (i32.const 614330268)) + (i32.add (i32.const 1947758137)) + (i32.add (i32.const 848203765)) + (i32.add (i32.const -151112698)) + (i32.add (i32.const -363771364)) + (i32.add (i32.const 1996662811)) + (i32.add (i32.const 1643900111)) + (i32.add (i32.const 1994783128)) + (i32.add (i32.const 498208298)) + (i32.add (i32.const -492666996)) + (i32.add (i32.const -973683444)) + (i32.add (i32.const 1139389063)) + (i32.add (i32.const 1217310712)) + (i32.add (i32.const -1445022454)) + (i32.add (i32.const -1467616190)) + (i32.add (i32.const -1443802615)) + (i32.add (i32.const -392121242)) + (i32.add (i32.const -762891435)) + (i32.add (i32.const -828143624)) + (i32.add (i32.const 1992014447)) + (i32.add (i32.const 1528993718)) + (i32.add (i32.const -1371599922)) + (i32.add (i32.const 1665156838)) + (i32.add (i32.const -2105116529)) + (i32.add (i32.const -124597045)) + (i32.add (i32.const 638365562)) + (i32.add (i32.const -926105657)) + (i32.add (i32.const -2143102073)) + (i32.add (i32.const -387698877)) + (i32.add (i32.const 1028501869)) + (i32.add (i32.const -267212751)) + (i32.add (i32.const -251683009)) + (i32.add (i32.const -1090285583)) + (i32.add (i32.const 1513843710)) + (i32.add (i32.const -2097359504)) + (i32.add (i32.const 314277410)) + (i32.add (i32.const -525913089)) + (i32.add (i32.const -2101936914)) + (i32.add (i32.const -1735939466)) + (i32.add (i32.const 1170938294)) + (i32.add (i32.const 1978145615)) + (i32.add (i32.const 1504688343)) + (i32.add (i32.const -1191151335)) + (i32.add (i32.const 803856473)) + (i32.add (i32.const -319382125)) + (i32.add (i32.const -1970971320)) + (i32.add (i32.const -1127445305)) + (i32.add (i32.const 1281741339)) + (i32.add (i32.const 147906342)) + (i32.add (i32.const 687693972)) + (i32.add (i32.const -1233242673)) + (i32.add (i32.const 1062697303)) + (i32.add (i32.const -1899667959)) + (i32.add (i32.const -1358243493)) + (i32.add (i32.const -663845630)) + (i32.add (i32.const -1950827242)) + (i32.add (i32.const -913691669)) + (i32.add (i32.const 155926763)) + (i32.add (i32.const 7716606)) + (i32.add (i32.const 1339738916)) + (i32.add (i32.const 300822099)) + (i32.add (i32.const 2035305486)) + (i32.add (i32.const 1145796550)) + (i32.add (i32.const 2041949299)) + (i32.add (i32.const 329630223)) + (i32.add (i32.const -629325232)) + (i32.add (i32.const 942085959)) + (i32.add (i32.const -518403510)) + (i32.add (i32.const 1663298840)) + (i32.add (i32.const -993594130)) + (i32.add (i32.const -796174542)) + (i32.add (i32.const -165138075)) + (i32.add (i32.const 528581580)) + (i32.add (i32.const -544180987)) + (i32.add (i32.const 901078493)) + (i32.add (i32.const -1626511796)) + (i32.add (i32.const -1608981220)) + (i32.add (i32.const 831654878)) + (i32.add (i32.const -1798529140)) + (i32.add (i32.const -245003773)) + (i32.add (i32.const -315439617)) + (i32.add (i32.const -1698361177)) + (i32.add (i32.const 591739936)) + (i32.add (i32.const -1340616238)) + (i32.add (i32.const -2012788489)) + (i32.add (i32.const 1921087194)) + (i32.add (i32.const -1364867223)) + (i32.add (i32.const -95994226)) + (i32.add (i32.const -2099479233)) + (i32.add (i32.const -540405457)) + (i32.add (i32.const -1142499247)) + (i32.add (i32.const 592332832)) + (i32.add (i32.const 1244823705)) + (i32.add (i32.const 861176825)) + (i32.add (i32.const 900725968)) + (i32.add (i32.const 115515628)) + (i32.add (i32.const 1448838788)) + (i32.add (i32.const 535319556)) + (i32.add (i32.const -321930439)) + (i32.add (i32.const 909473254)) + (i32.add (i32.const 1790540327)) + (i32.add (i32.const -2064866648)) + (i32.add (i32.const 1751479987)) + (i32.add (i32.const 1441188334)) + (i32.add (i32.const 1590982576)) + (i32.add (i32.const -959512041)) + (i32.add (i32.const 1393730571)) + (i32.add (i32.const -1131757720)) + (i32.add (i32.const 60198818)) + (i32.add (i32.const -110075744)) + (i32.add (i32.const 1923276339)) + (i32.add (i32.const 1904687109)) + (i32.add (i32.const -2144629918)) + (i32.add (i32.const 858158772)) + (i32.add (i32.const 114440073)) + (i32.add (i32.const -378111139)) + (i32.add (i32.const 1950389902)) + (i32.add (i32.const -754530075)) + (i32.add (i32.const -1765452252)) + (i32.add (i32.const -1913529746)) + (i32.add (i32.const 1924297805)) + (i32.add (i32.const 731962511)) + (i32.add (i32.const 2121293774)) + (i32.add (i32.const -1114628194)) + (i32.add (i32.const -169883552)) + (i32.add (i32.const 157651986)) + (i32.add (i32.const -2039148903)) + (i32.add (i32.const 749049369)) + (i32.add (i32.const 396745690)) + (i32.add (i32.const 1238130401)) + (i32.add (i32.const -376850631)) + (i32.add (i32.const -943993486)) + (i32.add (i32.const -1869630650)) + (i32.add (i32.const -722378768)) + (i32.add (i32.const 90099750)) + (i32.add (i32.const -784291635)) + (i32.add (i32.const -1515999075)) + (i32.add (i32.const 43841562)) + (i32.add (i32.const -1311730327)) + (i32.add (i32.const -638367132)) + (i32.add (i32.const 898216443)) + (i32.add (i32.const 397264106)) + (i32.add (i32.const 1898757468)) + (i32.add (i32.const 1076968436)) + (i32.add (i32.const 1912827814)) + (i32.add (i32.const -953732352)) + (i32.add (i32.const 1075756980)) + (i32.add (i32.const 981565158)) + (i32.add (i32.const 1639377541)) + (i32.add (i32.const 962039384)) + (i32.add (i32.const 385979314)) + (i32.add (i32.const 414576035)) + (i32.add (i32.const 461379562)) + (i32.add (i32.const -434017899)) + (i32.add (i32.const -1174462646)) + (i32.add (i32.const -538161405)) + (i32.add (i32.const -1878683710)) + (i32.add (i32.const -685958066)) + (i32.add (i32.const -520942481)) + (i32.add (i32.const 1308630512)) + (i32.add (i32.const -1398790768)) + (i32.add (i32.const -123289560)) + (i32.add (i32.const 1667270858)) + (i32.add (i32.const 439752588)) + (i32.add (i32.const -2054582497)) + (i32.add (i32.const -985723852)) + (i32.add (i32.const -1283424262)) + (i32.add (i32.const -1600564845)) + (i32.add (i32.const 1547513657)) + (i32.add (i32.const -1504172718)) + (i32.add (i32.const 1277199406)) + (i32.add (i32.const 1711273989)) + (i32.add (i32.const -1366538353)) + (i32.add (i32.const 487740115)) + (i32.add (i32.const 572162328)) + (i32.add (i32.const 980279195)) + (i32.add (i32.const 1171688701)) + (i32.add (i32.const 547696319)) + (i32.add (i32.const -687458090)) + (i32.add (i32.const 1340234237)) + (i32.add (i32.const -812978883)) + (i32.add (i32.const 1380911987)) + (i32.add (i32.const -1354231794)) + (i32.add (i32.const -72836620)) + (i32.add (i32.const 560419135)) + (i32.add (i32.const 1514996312)) + (i32.add (i32.const -1213367712)) + (i32.add (i32.const -38171234)) + (i32.add (i32.const -157751201)) + (i32.add (i32.const 1506229185)) + (i32.add (i32.const 948269470)) + (i32.add (i32.const 780454791)) + (i32.add (i32.const -864174162)) + (i32.add (i32.const -1225044905)) + (i32.add (i32.const 95225559)) + (i32.add (i32.const 1662363697)) + (i32.add (i32.const 830038598)) + (i32.add (i32.const 466189248)) + (i32.add (i32.const -390750294)) + (i32.add (i32.const -1644499117)) + (i32.add (i32.const -1749341378)) + (i32.add (i32.const 943660143)) + (i32.add (i32.const -702910159)) + (i32.add (i32.const -845085378)) + (i32.add (i32.const 1305534851)) + (i32.add (i32.const -108671627)) + (i32.add (i32.const 1846751851)) + (i32.add (i32.const -1892866043)) + (i32.add (i32.const -1566255304)) + (i32.add (i32.const 879636118)) + (i32.add (i32.const -1507230323)) + (i32.add (i32.const -1576826402)) + (i32.add (i32.const -239375759)) + (i32.add (i32.const 1784739524)) + (i32.add (i32.const 1582716882)) + (i32.add (i32.const -2129695159)) + (i32.add (i32.const 66167272)) + (i32.add (i32.const 371868676)) + (i32.add (i32.const 1410360712)) + (i32.add (i32.const 850860496)) + (i32.add (i32.const 726923557)) + (i32.add (i32.const -1165613790)) + (i32.add (i32.const -1539664535)) + (i32.add (i32.const 1803052201)) + (i32.add (i32.const -1717905266)) + (i32.add (i32.const 493603650)) + (i32.add (i32.const 1749161732)) + (i32.add (i32.const 1097449822)) + (i32.add (i32.const -1850706745)) + (i32.add (i32.const 578570733)) + (i32.add (i32.const -1068582389)) + (i32.add (i32.const 108768404)) + (i32.add (i32.const -1851138975)) + (i32.add (i32.const 817876645)) + (i32.add (i32.const 1658584725)) + (i32.add (i32.const 1111805205)) + (i32.add (i32.const 649640412)) + (i32.add (i32.const 1518112417)) + (i32.add (i32.const 1099016545)) + (i32.add (i32.const -663438713)) + (i32.add (i32.const -1756633535)) + (i32.add (i32.const -391591841)) + (i32.add (i32.const -631901045)) + (i32.add (i32.const 1050887392)) + (i32.add (i32.const 1209926616)) + (i32.add (i32.const -355316377)) + (i32.add (i32.const 984913505)) + (i32.add (i32.const 98920195)) + (i32.add (i32.const 1534911133)) + (i32.add (i32.const 1667264916)) + (i32.add (i32.const -679478330)) + (i32.add (i32.const 420375409)) + (i32.add (i32.const 770279540)) + (i32.add (i32.const -431320497)) + (i32.add (i32.const 166865143)) + (i32.add (i32.const 760149719)) + (i32.add (i32.const 688541784)) + (i32.add (i32.const -690831717)) + (i32.add (i32.const 599024962)) + (i32.add (i32.const -1289656434)) + (i32.add (i32.const -389909306)) + (i32.add (i32.const -642227055)) + (i32.add (i32.const -1951100301)) + (i32.add (i32.const 87315556)) + (i32.add (i32.const 1211424652)) + (i32.add (i32.const -1244354206)) + (i32.add (i32.const 1051068731)) + (i32.add (i32.const 1111779403)) + (i32.add (i32.const 214002968)) + (i32.add (i32.const 263835697)) + (i32.add (i32.const 1057770864)) + (i32.add (i32.const -1542229455)) + (i32.add (i32.const -2125445470)) + (i32.add (i32.const 654223039)) + (i32.add (i32.const 1271297191)) + (i32.add (i32.const -1318557526)) + (i32.add (i32.const -935917489)) + (i32.add (i32.const 672428662)) + (i32.add (i32.const 1512533706)) + (i32.add (i32.const -1529135023)) + (i32.add (i32.const 731505405)) + (i32.add (i32.const -1748687573)) + (i32.add (i32.const 348236761)) + (i32.add (i32.const -571763650)) + (i32.add (i32.const 2140830790)) + (i32.add (i32.const -478667709)) + (i32.add (i32.const -182582880)) + (i32.add (i32.const -1689575415)) + (i32.add (i32.const -1062860567)) + (i32.add (i32.const 154663990)) + (i32.add (i32.const -1092502960)) + (i32.add (i32.const 247162999)) + (i32.add (i32.const -1435680521)) + (i32.add (i32.const -254601534)) + (i32.add (i32.const -62540775)) + (i32.add (i32.const 170811175)) + (i32.add (i32.const 186740341)) + (i32.add (i32.const -1117223046)) + (i32.add (i32.const -1839885954)) + (i32.add (i32.const -757779156)) + (i32.add (i32.const 2107737781)) + (i32.add (i32.const 1654711212)) + (i32.add (i32.const -316263523)) + (i32.add (i32.const -1579873296)) + (i32.add (i32.const -1327781666)) + (i32.add (i32.const 2003315466)) + (i32.add (i32.const -1046406433)) + (i32.add (i32.const 539032287)) + (i32.add (i32.const -1215532803)) + (i32.add (i32.const -2105182237)) + (i32.add (i32.const 1413509514)) + (i32.add (i32.const 34567195)) + (i32.add (i32.const 1784754283)) + (i32.add (i32.const -1825704237)) + (i32.add (i32.const -467757484)) + (i32.add (i32.const -1124062578)) + (i32.add (i32.const -1786303159)) + (i32.add (i32.const 1914993367)) + (i32.add (i32.const 2032384700)) + (i32.add (i32.const -120736784)) + (i32.add (i32.const -1250936145)) + (i32.add (i32.const 1598691942)) + (i32.add (i32.const 1846499794)) + (i32.add (i32.const -1110349838)) + (i32.add (i32.const -647895786)) + (i32.add (i32.const 1733165111)) + (i32.add (i32.const -432867342)) + (i32.add (i32.const 1631263577)) + (i32.add (i32.const -1700083322)) + (i32.add (i32.const -580309590)) + (i32.add (i32.const -951293574)) + (i32.add (i32.const 1916470624)) + (i32.add (i32.const -1912187851)) + (i32.add (i32.const 269380216)) + (i32.add (i32.const -1235340115)) + (i32.add (i32.const 796983409)) + (i32.add (i32.const -358476595)) + (i32.add (i32.const 1265020837)) + (i32.add (i32.const -601338682)) + (i32.add (i32.const 1371210570)) + (i32.add (i32.const -1238603946)) + (i32.add (i32.const 1961538703)) + (i32.add (i32.const 1287336064)) + (i32.add (i32.const -1682288668)) + (i32.add (i32.const -121446322)) + (i32.add (i32.const -2089447714)) + (i32.add (i32.const -1136104223)) + (i32.add (i32.const -889904262)) + (i32.add (i32.const 1181580062)) + (i32.add (i32.const -1733927606)) + (i32.add (i32.const 323143456)) + (i32.add (i32.const 1810903463)) + (i32.add (i32.const 2146091169)) + (i32.add (i32.const 1076477589)) + (i32.add (i32.const 613853222)) + (i32.add (i32.const 1569990792)) + (i32.add (i32.const -1094310939)) + (i32.add (i32.const 137461233)) + (i32.add (i32.const 293600623)) + (i32.add (i32.const -1375644298)) + (i32.add (i32.const -746683848)) + (i32.add (i32.const -1622663873)) + (i32.add (i32.const -308156382)) + (i32.add (i32.const 765614057)) + (i32.add (i32.const 738467956)) + (i32.add (i32.const -265032462)) + (i32.add (i32.const 1010846609)) + (i32.add (i32.const 1127383866)) + (i32.add (i32.const 1684405613)) + (i32.add (i32.const 105690168)) + (i32.add (i32.const 1133693748)) + (i32.add (i32.const -2021371211)) + (i32.add (i32.const 165385340)) + (i32.add (i32.const -1144789617)) + (i32.add (i32.const -928430340)) + (i32.add (i32.const 1625557458)) + (i32.add (i32.const 545790091)) + (i32.add (i32.const -1753406174)) + (i32.add (i32.const 2140986634)) + (i32.add (i32.const -1064164209)) + (i32.add (i32.const -824083761)) + (i32.add (i32.const 452672695)) + (i32.add (i32.const -170413241)) + (i32.add (i32.const 1745572850)) + (i32.add (i32.const 1619798749)) + (i32.add (i32.const -1370230775)) + (i32.add (i32.const -770572467)) + (i32.add (i32.const 1332958016)) + (i32.add (i32.const 1134048075)) + (i32.add (i32.const -1647304117)) + (i32.add (i32.const -1765990677)) + (i32.add (i32.const 1195127846)) + (i32.add (i32.const -1075346593)) + (i32.add (i32.const 551138547)) + (i32.add (i32.const 2143116712)) + (i32.add (i32.const 935817811)) + (i32.add (i32.const -132662451)) + (i32.add (i32.const 1066534907)) + (i32.add (i32.const -2001534743)) + (i32.add (i32.const 68087667)) + (i32.add (i32.const 1431689226)) + (i32.add (i32.const 807679484)) + (i32.add (i32.const -1232077502)) + (i32.add (i32.const 1818362971)) + (i32.add (i32.const -1151440086)) + (i32.add (i32.const -498289613)) + (i32.add (i32.const -1820673998)) + (i32.add (i32.const 156169374)) + (i32.add (i32.const 1977697608)) + (i32.add (i32.const -1290595540)) + (i32.add (i32.const -63936211)) + (i32.add (i32.const -562415940)) + (i32.add (i32.const 573750589)) + (i32.add (i32.const -309957822)) + (i32.add (i32.const 646736184)) + (i32.add (i32.const 170171289)) + (i32.add (i32.const -1764966852)) + (i32.add (i32.const 1933413784)) + (i32.add (i32.const -441155495)) + (i32.add (i32.const -1291947501)) + (i32.add (i32.const -1637531325)) + (i32.add (i32.const 1135472325)) + (i32.add (i32.const -1238168889)) + (i32.add (i32.const 814280309)) + (i32.add (i32.const -2062060089)) + (i32.add (i32.const 38156389)) + (i32.add (i32.const -323556870)) + (i32.add (i32.const -410191378)) + (i32.add (i32.const -612589952)) + (i32.add (i32.const -355064314)) + (i32.add (i32.const 1068648716)) + (i32.add (i32.const 1540653626)) + (i32.add (i32.const -10810645)) + (i32.add (i32.const -5849878)) + (i32.add (i32.const -1099558795)) + (i32.add (i32.const 1456669113)) + (i32.add (i32.const -2139505812)) + (i32.add (i32.const -238745798)) + (i32.add (i32.const 1601201086)) + (i32.add (i32.const -1914024890)) + (i32.add (i32.const 510085272)) + (i32.add (i32.const 445786840)) + (i32.add (i32.const -1678452457)) + (i32.add (i32.const 385368321)) + (i32.add (i32.const -1961940770)) + (i32.add (i32.const 1713329393)) + (i32.add (i32.const -1775334686)) + (i32.add (i32.const 1426683240)) + (i32.add (i32.const -2124715474)) + (i32.add (i32.const -111686824)) + (i32.add (i32.const -593691604)) + (i32.add (i32.const -400347228)) + (i32.add (i32.const -1761361448)) + (i32.add (i32.const 2040817057)) + (i32.add (i32.const 1872595100)) + (i32.add (i32.const -50081796)) + (i32.add (i32.const 913378022)) + (i32.add (i32.const -933755571)) + (i32.add (i32.const 1662862474)) + (i32.add (i32.const 667186939)) + (i32.add (i32.const -1330946439)) + (i32.add (i32.const -330104320)) + (i32.add (i32.const -1496864309)) + (i32.add (i32.const 849467320)) + (i32.add (i32.const -428585133)) + (i32.add (i32.const 1146072426)) + (i32.add (i32.const -656187411)) + (i32.add (i32.const 1024855995)) + (i32.add (i32.const -674108798)) + (i32.add (i32.const 1268089020)) + (i32.add (i32.const 1410926546)) + (i32.add (i32.const 48888208)) + (i32.add (i32.const -526795978)) + (i32.add (i32.const 807726024)) + (i32.add (i32.const 1543422587)) + (i32.add (i32.const 1829246875)) + (i32.add (i32.const 501478605)) + (i32.add (i32.const -1886180256)) + (i32.add (i32.const -709004434)) + (i32.add (i32.const -1151719495)) + (i32.add (i32.const 433372085)) + (i32.add (i32.const -1641248320)) + (i32.add (i32.const 1990314996)) + (i32.add (i32.const 907115302)) + (i32.add (i32.const 769508299)) + (i32.add (i32.const 84701418)) + (i32.add (i32.const 1330908477)) + (i32.add (i32.const -1398599757)) + (i32.add (i32.const 2076647327)) + (i32.add (i32.const -1472271991)) + (i32.add (i32.const 1024544949)) + (i32.add (i32.const -1423401322)) + (i32.add (i32.const -781293415)) + (i32.add (i32.const -1158470289)) + (i32.add (i32.const -1748010485)) + (i32.add (i32.const -1506052477)) + (i32.add (i32.const -1368893896)) + (i32.add (i32.const 1852564600)) + (i32.add (i32.const 648488531)) + (i32.add (i32.const -177671746)) + (i32.add (i32.const -675096787)) + (i32.add (i32.const -385367507)) + (i32.add (i32.const 1875330579)) + (i32.add (i32.const -1228353964)) + (i32.add (i32.const -1306136521)) + (i32.add (i32.const -2112496968)) + (i32.add (i32.const -1059516940)) + (i32.add (i32.const -1085372459)) + (i32.add (i32.const -2076403799)) + (i32.add (i32.const -1132542605)) + (i32.add (i32.const 19700230)) + (i32.add (i32.const -1203666475)) + (i32.add (i32.const 1830285575)) + (i32.add (i32.const 9108963)) + (i32.add (i32.const 378692420)) + (i32.add (i32.const 241118819)) + (i32.add (i32.const -1165717729)) + (i32.add (i32.const -867530846)) + (i32.add (i32.const -149320003)) + (i32.add (i32.const -1019403252)) + (i32.add (i32.const -1809912876)) + (i32.add (i32.const -1499536757)) + (i32.add (i32.const -957394673)) + (i32.add (i32.const -202026720)) + (i32.add (i32.const 391448243)) + (i32.add (i32.const 935375633)) + (i32.add (i32.const -1360947223)) + (i32.add (i32.const -217199354)) + (i32.add (i32.const 964473711)) + (i32.add (i32.const 1313437227)) + (i32.add (i32.const -1649688636)) + (i32.add (i32.const -989092294)) + (i32.add (i32.const 1200908944)) + (i32.add (i32.const 2007915126)) + (i32.add (i32.const -1167567365)) + (i32.add (i32.const 1836923996)) + (i32.add (i32.const -207894344)) + (i32.add (i32.const -140890304)) + (i32.add (i32.const 1719126131)) + (i32.add (i32.const -355879433)) + (i32.add (i32.const -65166005)) + (i32.add (i32.const -283794854)) + (i32.add (i32.const -1512649265)) + (i32.add (i32.const 154522504)) + (i32.add (i32.const 1111778329)) + (i32.add (i32.const 2136986469)) + (i32.add (i32.const -1830574930)) + (i32.add (i32.const 288601762)) + (i32.add (i32.const 735174462)) + (i32.add (i32.const 1615653528)) + (i32.add (i32.const 1137471211)) + (i32.add (i32.const -1902244289)) + (i32.add (i32.const -814494350)) + (i32.add (i32.const -1637181469)) + (i32.add (i32.const -1307506024)) + (i32.add (i32.const -1579445880)) + (i32.add (i32.const 38181446)) + (i32.add (i32.const 302651427)) + (i32.add (i32.const -1754250011)) + (i32.add (i32.const -1178438112)) + (i32.add (i32.const -1173934185)) + (i32.add (i32.const 1722560710)) + (i32.add (i32.const 502058530)) + (i32.add (i32.const -615528296)) + (i32.add (i32.const -1935114304)) + (i32.add (i32.const 304110895)) + (i32.add (i32.const 1030706193)) + (i32.add (i32.const -1387375576)) + (i32.add (i32.const -15893296)) + (i32.add (i32.const 718326947)) + (i32.add (i32.const -1858437516)) + (i32.add (i32.const -235892467)) + (i32.add (i32.const -1143283392)) + (i32.add (i32.const 1534899795)) + (i32.add (i32.const 144106042)) + (i32.add (i32.const 894092046)) + (i32.add (i32.const 656818885)) + (i32.add (i32.const 239056975)) + (i32.add (i32.const 1494683805)) + (i32.add (i32.const -1170894946)) + (i32.add (i32.const 1153516280)) + (i32.add (i32.const 617586524)) + (i32.add (i32.const 789693390)) + (i32.add (i32.const 981142270)) + (i32.add (i32.const 1362577833)) + (i32.add (i32.const -630251811)) + (i32.add (i32.const -54045649)) + (i32.add (i32.const -470365900)) + (i32.add (i32.const 195000406)) + (i32.add (i32.const 860146720)) + (i32.add (i32.const 1414603118)) + (i32.add (i32.const -930369256)) + (i32.add (i32.const 388887137)) + (i32.add (i32.const 1523664341)) + (i32.add (i32.const 997761304)) + (i32.add (i32.const 1184024111)) + (i32.add (i32.const -1683217103)) + (i32.add (i32.const 1095374246)) + (i32.add (i32.const 1678782769)) + (i32.add (i32.const 779924290)) + (i32.add (i32.const -955566406)) + (i32.add (i32.const 1769129866)) + (i32.add (i32.const -1665577175)) + (i32.add (i32.const 1580766592)) + (i32.add (i32.const -1017016432)) + (i32.add (i32.const 1786034765)) + (i32.add (i32.const -1820736234)) + (i32.add (i32.const -613617366)) + (i32.add (i32.const -619420194)) + (i32.add (i32.const 945007986)) + (i32.add (i32.const 1121016372)) + (i32.add (i32.const 710980325)) + (i32.add (i32.const 567811860)) + (i32.add (i32.const 58709674)) + (i32.add (i32.const -1085166892)) + (i32.add (i32.const 1588455561)) + (i32.add (i32.const 1556716638)) + (i32.add (i32.const -684434434)) + (i32.add (i32.const -1352348603)) + (i32.add (i32.const 653245250)) + (i32.add (i32.const -1790700303)) + (i32.add (i32.const 1119532479)) + (i32.add (i32.const 565751191)) + (i32.add (i32.const -2040738531)) + (i32.add (i32.const 1972932814)) + (i32.add (i32.const -1264429541)) + (i32.add (i32.const 2035603094)) + (i32.add (i32.const 1096303291)) + (i32.add (i32.const -1150448108)) + (i32.add (i32.const 306403348)) + (i32.add (i32.const 2065614994)) + (i32.add (i32.const -2092271880)) + (i32.add (i32.const -2068366595)) + (i32.add (i32.const 1312850381)) + (i32.add (i32.const -1588220511)) + (i32.add (i32.const -467581002)) + (i32.add (i32.const -2137002304)) + (i32.add (i32.const 240247983)) + (i32.add (i32.const 1943249016)) + (i32.add (i32.const 1946880375)) + (i32.add (i32.const 1187194060)) + (i32.add (i32.const 1743955163)) + (i32.add (i32.const 860130636)) + (i32.add (i32.const -50029022)) + (i32.add (i32.const -793177861)) + (i32.add (i32.const -101547343)) + (i32.add (i32.const -725483441)) + (i32.add (i32.const 1681638599)) + (i32.add (i32.const 1738731827)) + (i32.add (i32.const -1180059536)) + (i32.add (i32.const -2015158712)) + (i32.add (i32.const -76444753)) + (i32.add (i32.const -1789651659)) + (i32.add (i32.const -436716256)) + (i32.add (i32.const -1048033604)) + (i32.add (i32.const 1605071728)) + (i32.add (i32.const -1377856559)) + (i32.add (i32.const -1467475704)) + (i32.add (i32.const 583426203)) + (i32.add (i32.const 1210933744)) + (i32.add (i32.const 267347728)) + (i32.add (i32.const -1687588949)) + (i32.add (i32.const -420057445)) + (i32.add (i32.const 1177320608)) + (i32.add (i32.const -1887096454)) + (i32.add (i32.const 268672694)) + (i32.add (i32.const 1427993659)) + (i32.add (i32.const -453414505)) + (i32.add (i32.const -1857337996)) + (i32.add (i32.const 425525204)) + (i32.add (i32.const -986680571)) + (i32.add (i32.const 2134969483)) + (i32.add (i32.const -2034909729)) + (i32.add (i32.const 418177666)) + (i32.add (i32.const 945159724)) + (i32.add (i32.const 1832758056)) + (i32.add (i32.const 901628843)) + (i32.add (i32.const -273968208)) + (i32.add (i32.const -1913395071)) + (i32.add (i32.const 730268548)) + (i32.add (i32.const -1647874412)) + (i32.add (i32.const 1955047631)) + (i32.add (i32.const -421878083)) + (i32.add (i32.const 2064973555)) + (i32.add (i32.const 615375045)) + (i32.add (i32.const 1574247581)) + (i32.add (i32.const 1779957189)) + (i32.add (i32.const 147028351)) + (i32.add (i32.const 1783979348)) + (i32.add (i32.const 920526098)) + (i32.add (i32.const -2136805511)) + (i32.add (i32.const -1109321555)) + (i32.add (i32.const 763568444)) + (i32.add (i32.const 1309359599)) + (i32.add (i32.const -1076906136)) + (i32.add (i32.const -767898688)) + (i32.add (i32.const -1109717942)) + (i32.add (i32.const -552510887)) + (i32.add (i32.const -1791634140)) + (i32.add (i32.const -2013867253)) + (i32.add (i32.const -825988547)) + (i32.add (i32.const -139564695)) + (i32.add (i32.const 575795285)) + (i32.add (i32.const -263453727)) + (i32.add (i32.const -2092980900)) + (i32.add (i32.const -1510952202)) + (i32.add (i32.const -323726884)) + (i32.add (i32.const 328504198)) + (i32.add (i32.const 2079755008)) + (i32.add (i32.const 1651925751)) + (i32.add (i32.const 465482791)) + (i32.add (i32.const -775825454)) + (i32.add (i32.const -2029760129)) + (i32.add (i32.const -1340797334)) + (i32.add (i32.const -1151792721)) + (i32.add (i32.const 1457856031)) + (i32.add (i32.const 536603428)) + (i32.add (i32.const 1581054776)) + (i32.add (i32.const -2019445998)) + (i32.add (i32.const 1976024461)) + (i32.add (i32.const 380488462)) + (i32.add (i32.const -2007964877)) + (i32.add (i32.const 2033495389)) + (i32.add (i32.const -268152059)) + (i32.add (i32.const 301950612)) + (i32.add (i32.const 1342208926)) + (i32.add (i32.const 570473227)) + (i32.add (i32.const -1813806932)) + (i32.add (i32.const 272235110)) + (i32.add (i32.const -1178921107)) + (i32.add (i32.const -1699055790)) + (i32.add (i32.const 105570050)) + (i32.add (i32.const 510434245)) + (i32.add (i32.const -731847195)) + (i32.add (i32.const 522103146)) + (i32.add (i32.const -811785533)) + (i32.add (i32.const 1107338378)) + (i32.add (i32.const 2117850663)) + (i32.add (i32.const 485220998)) + (i32.add (i32.const 390052014)) + (i32.add (i32.const -344571027)) + (i32.add (i32.const 1122391769)) + (i32.add (i32.const -2005805820)) + (i32.add (i32.const 50885842)) + (i32.add (i32.const 1970668727)) + (i32.add (i32.const -351472558)) + (i32.add (i32.const -440979071)) + (i32.add (i32.const 1333368519)) + (i32.add (i32.const -171670408)) + (i32.add (i32.const 2119755237)) + (i32.add (i32.const -481929402)) + (i32.add (i32.const -941676038)) + (i32.add (i32.const -20675852)) + (i32.add (i32.const 839617136)) + (i32.add (i32.const 1428289095)) + (i32.add (i32.const 719617667)) + (i32.add (i32.const -1485261578)) + (i32.add (i32.const -1996176884)) + (i32.add (i32.const -1668964762)) + (i32.add (i32.const 1151733100)) + (i32.add (i32.const 1192804036)) + (i32.add (i32.const 987590276)) + (i32.add (i32.const -1289926077)) + (i32.add (i32.const -52928272)) + (i32.add (i32.const 128432845)) + (i32.add (i32.const -87293015)) + (i32.add (i32.const -1479445218)) + (i32.add (i32.const 1436441652)) + (i32.add (i32.const 614323904)) + (i32.add (i32.const 714122317)) + (i32.add (i32.const 520273045)) + (i32.add (i32.const 1143483400)) + (i32.add (i32.const 208056002)) + (i32.add (i32.const -1671452431)) + (i32.add (i32.const -1152198484)) + (i32.add (i32.const -445394059)) + (i32.add (i32.const -478116776)) + (i32.add (i32.const 209143553)) + (i32.add (i32.const -1487182642)) + (i32.add (i32.const -1691401198)) + (i32.add (i32.const 914845551)) + (i32.add (i32.const -1662275426)) + (i32.add (i32.const 1840582866)) + (i32.add (i32.const -2003286829)) + (i32.add (i32.const -934628689)) + (i32.add (i32.const 1731710274)) + (i32.add (i32.const -1154852426)) + (i32.add (i32.const 616945956)) + (i32.add (i32.const -1870919730)) + (i32.add (i32.const -137854014)) + (i32.add (i32.const 916864794)) + (i32.add (i32.const 1409686868)) + (i32.add (i32.const -81520369)) + (i32.add (i32.const 793856110)) + (i32.add (i32.const 2106074131)) + (i32.add (i32.const 565480414)) + (i32.add (i32.const -494694608)) + (i32.add (i32.const 2063744172)) + (i32.add (i32.const -618812482)) + (i32.add (i32.const 1381392801)) + (i32.add (i32.const -1598162379)) + (i32.add (i32.const 1252602582)) + (i32.add (i32.const -1955473874)) + (i32.add (i32.const -1798376514)) + (i32.add (i32.const -229983537)) + (i32.add (i32.const -1702049066)) + (i32.add (i32.const 422185964)) + (i32.add (i32.const 1762820886)) + (i32.add (i32.const -1153744811)) + (i32.add (i32.const -960341553)) + (i32.add (i32.const -381121388)) + (i32.add (i32.const 1183965229)) + (i32.add (i32.const 1852557621)) + (i32.add (i32.const 1154528751)) + (i32.add (i32.const 1024905802)) + (i32.add (i32.const -860597183)) + (i32.add (i32.const 1581249128)) + (i32.add (i32.const -1052897957)) + (i32.add (i32.const -1871699806)) + (i32.add (i32.const -617356922)) + (i32.add (i32.const 732837250)) + (i32.add (i32.const -2048020043)) + (i32.add (i32.const -83752782)) + (i32.add (i32.const 201816682)) + (i32.add (i32.const 791886456)) + (i32.add (i32.const -1402188476)) + (i32.add (i32.const 693701624)) + (i32.add (i32.const 1379505348)) + (i32.add (i32.const 1990083358)) + (i32.add (i32.const 500201777)) + (i32.add (i32.const -259168603)) + (i32.add (i32.const -573191945)) + (i32.add (i32.const -581609929)) + (i32.add (i32.const -234127487)) + (i32.add (i32.const -1400383592)) + (i32.add (i32.const -888690825)) + (i32.add (i32.const 588425584)) + (i32.add (i32.const 736085189)) + (i32.add (i32.const 1461665371)) + (i32.add (i32.const 1530634471)) + (i32.add (i32.const 1326385226)) + (i32.add (i32.const -591293544)) + (i32.add (i32.const -2033200307)) + (i32.add (i32.const 1304323115)) + (i32.add (i32.const 1047727688)) + (i32.add (i32.const -6625531)) + (i32.add (i32.const 24799824)) + (i32.add (i32.const 1780487730)) + (i32.add (i32.const 933556488)) + (i32.add (i32.const 239899535)) + (i32.add (i32.const 1375356153)) + (i32.add (i32.const 669025213)) + (i32.add (i32.const 504291767)) + (i32.add (i32.const -1961882937)) + (i32.add (i32.const 933761449)) + (i32.add (i32.const -1842545656)) + (i32.add (i32.const 1248122834)) + (i32.add (i32.const -1728268667)) + (i32.add (i32.const 1162960131)) + (i32.add (i32.const -2125667089)) + (i32.add (i32.const -129296637)) + (i32.add (i32.const 1715332274)) + (i32.add (i32.const 1931752640)) + (i32.add (i32.const -1644044654)) + (i32.add (i32.const -642876320)) + (i32.add (i32.const -343733450)) + (i32.add (i32.const -933978173)) + (i32.add (i32.const 399559967)) + (i32.add (i32.const 751393223)) + (i32.add (i32.const -517476283)) + (i32.add (i32.const -1515479151)) + (i32.add (i32.const 656816713)) + (i32.add (i32.const 506180215)) + (i32.add (i32.const 205777809)) + (i32.add (i32.const -639175878)) + (i32.add (i32.const 114356507)) + (i32.add (i32.const 1595890744)) + (i32.add (i32.const 193119564)) + (i32.add (i32.const 1721889625)) + (i32.add (i32.const -469309912)) + (i32.add (i32.const -1059302337)) + (i32.add (i32.const 1563712690)) + (i32.add (i32.const -140949996)) + (i32.add (i32.const -1352559137)) + (i32.add (i32.const -732416976)) + (i32.add (i32.const -529953808)) + (i32.add (i32.const 2083315049)) + (i32.add (i32.const 843112941)) + (i32.add (i32.const -1734333108)) + (i32.add (i32.const -2070587447)) + (i32.add (i32.const -1166029708)) + (i32.add (i32.const -227600655)) + (i32.add (i32.const 2028621804)) + (i32.add (i32.const -829716139)) + (i32.add (i32.const -840138429)) + (i32.add (i32.const 642587251)) + (i32.add (i32.const 1932456160)) + (i32.add (i32.const -579765728)) + (i32.add (i32.const -249598449)) + (i32.add (i32.const -1650400506)) + (i32.add (i32.const 627513367)) + (i32.add (i32.const -979735966)) + (i32.add (i32.const -97675327)) + (i32.add (i32.const 1994401970)) + (i32.add (i32.const -124893481)) + (i32.add (i32.const -1751842708)) + (i32.add (i32.const 1869068882)) + (i32.add (i32.const -2090507990)) + (i32.add (i32.const 577700269)) + (i32.add (i32.const -851519139)) + (i32.add (i32.const 1457776855)) + (i32.add (i32.const 765756696)) + (i32.add (i32.const 2038654856)) + (i32.add (i32.const -1996299321)) + (i32.add (i32.const 957074937)) + (i32.add (i32.const 2036584682)) + (i32.add (i32.const -1572624136)) + (i32.add (i32.const -1229628167)) + (i32.add (i32.const -672460213)) + (i32.add (i32.const 939482562)) + (i32.add (i32.const 2085275141)) + (i32.add (i32.const 478463978)) + (i32.add (i32.const -1720714907)) + (i32.add (i32.const -134416774)) + (i32.add (i32.const 2108693838)) + (i32.add (i32.const -755441762)) + (i32.add (i32.const -938661809)) + (i32.add (i32.const 1503348530)) + (i32.add (i32.const 449602636)) + (i32.add (i32.const 968349827)) + (i32.add (i32.const 1885648096)) + (i32.add (i32.const 903426166)) + (i32.add (i32.const -1276381148)) + (i32.add (i32.const 1850111192)) + (i32.add (i32.const 1204855721)) + (i32.add (i32.const 1312539798)) + (i32.add (i32.const 772300447)) + (i32.add (i32.const -250305037)) + (i32.add (i32.const -737698593)) + (i32.add (i32.const 2115676878)) + (i32.add (i32.const 74710478)) + (i32.add (i32.const -1284413984)) + (i32.add (i32.const 1346678340)) + (i32.add (i32.const -53021226)) + (i32.add (i32.const -675938697)) + (i32.add (i32.const 1998967712)) + (i32.add (i32.const -1716948387)) + (i32.add (i32.const 642321517)) + (i32.add (i32.const -445321412)) + (i32.add (i32.const -1328275868)) + (i32.add (i32.const 1833594961)) + (i32.add (i32.const 1698392151)) + (i32.add (i32.const 1099521418)) + (i32.add (i32.const 1219561139)) + (i32.add (i32.const 1706239558)) + (i32.add (i32.const -45636821)) + (i32.add (i32.const 764807205)) + (i32.add (i32.const 46629216)) + (i32.add (i32.const 961762327)) + (i32.add (i32.const -176107429)) + (i32.add (i32.const -1343610049)) + (i32.add (i32.const 93673870)) + (i32.add (i32.const -1588395064)) + (i32.add (i32.const 479197294)) + (i32.add (i32.const -1073632411)) + (i32.add (i32.const 1839074118)) + (i32.add (i32.const 1558404245)) + (i32.add (i32.const -1247948984)) + (i32.add (i32.const -563038909)) + (i32.add (i32.const 495600579)) + (i32.add (i32.const 2115311493)) + (i32.add (i32.const -1713994934)) + (i32.add (i32.const 1512783881)) + (i32.add (i32.const 511918778)) + (i32.add (i32.const 14881794)) + (i32.add (i32.const -1119232126)) + (i32.add (i32.const 938229658)) + (i32.add (i32.const 1704265772)) + (i32.add (i32.const -754730069)) + (i32.add (i32.const 1150613916)) + (i32.add (i32.const -467941972)) + (i32.add (i32.const -183566532)) + (i32.add (i32.const -179848711)) + (i32.add (i32.const 863614321)) + (i32.add (i32.const 444192546)) + (i32.add (i32.const -39156593)) + (i32.add (i32.const -1934559671)) + (i32.add (i32.const 421097965)) + (i32.add (i32.const -401747666)) + (i32.add (i32.const -1836059402)) + (i32.add (i32.const -1004538590)) + (i32.add (i32.const 757509267)) + (i32.add (i32.const 1911872017)) + (i32.add (i32.const 813456682)) + (i32.add (i32.const 1670550691)) + (i32.add (i32.const 811878520)) + (i32.add (i32.const -599610993)) + (i32.add (i32.const -1496045058)) + (i32.add (i32.const 1689560806)) + (i32.add (i32.const 380320567)) + (i32.add (i32.const -1455337997)) + (i32.add (i32.const 251874514)) + (i32.add (i32.const -2879587)) + (i32.add (i32.const -1719065158)) + (i32.add (i32.const 690926144)) + (i32.add (i32.const 1768823148)) + (i32.add (i32.const 2122981129)) + (i32.add (i32.const 2035636012)) + (i32.add (i32.const -223926116)) + (i32.add (i32.const -1542012165)) + (i32.add (i32.const -318694850)) + (i32.add (i32.const 718085416)) + (i32.add (i32.const -496467011)) + (i32.add (i32.const -916803534)) + (i32.add (i32.const -1929309981)) + (i32.add (i32.const -1325681187)) + (i32.add (i32.const 98504998)) + (i32.add (i32.const 1921313569)) + (i32.add (i32.const -743192901)) + (i32.add (i32.const 413829639)) + (i32.add (i32.const -491519967)) + (i32.add (i32.const -64100946)) + (i32.add (i32.const 710544673)) + (i32.add (i32.const 770529902)) + (i32.add (i32.const 238664172)) + (i32.add (i32.const -1974459743)) + (i32.add (i32.const -480581677)) + (i32.add (i32.const 1033694359)) + (i32.add (i32.const 2114484551)) + (i32.add (i32.const -1458442588)) + (i32.add (i32.const 1912364572)) + (i32.add (i32.const -562150549)) + (i32.add (i32.const 1097280434)) + (i32.add (i32.const -562251843)) + (i32.add (i32.const -1047070517)) + (i32.add (i32.const 1134990824)) + (i32.add (i32.const -186573492)) + (i32.add (i32.const -883567933)) + (i32.add (i32.const 1266025797)) + (i32.add (i32.const 854662579)) + (i32.add (i32.const -87907691)) + (i32.add (i32.const -1397766601)) + (i32.add (i32.const -1317481212)) + (i32.add (i32.const 1256457706)) + (i32.add (i32.const 488302431)) + (i32.add (i32.const -530702380)) + (i32.add (i32.const -1451229242)) + (i32.add (i32.const 984323623)) + (i32.add (i32.const 1772650)) + (i32.add (i32.const 516093650)) + (i32.add (i32.const 25198771)) + (i32.add (i32.const -254742038)) + (i32.add (i32.const -1911911685)) + (i32.add (i32.const 100962704)) + (i32.add (i32.const -1729972263)) + (i32.add (i32.const -676446887)) + (i32.add (i32.const -297406834)) + (i32.add (i32.const -1809940696)) + (i32.add (i32.const -1048623782)) + (i32.add (i32.const 725065978)) + (i32.add (i32.const 437300611)) + (i32.add (i32.const -2084353441)) + (i32.add (i32.const 398903918)) + (i32.add (i32.const -2010456351)) + (i32.add (i32.const 1739767379)) + (i32.add (i32.const 2138601291)) + (i32.add (i32.const -167531853)) + (i32.add (i32.const -1506853578)) + (i32.add (i32.const -1435102915)) + (i32.add (i32.const -593836086)) + (i32.add (i32.const -1728445321)) + (i32.add (i32.const -1444150228)) + (i32.add (i32.const 1529346730)) + (i32.add (i32.const 987113839)) + (i32.add (i32.const 1935714700)) + (i32.add (i32.const 135229151)) + (i32.add (i32.const 62212446)) + (i32.add (i32.const -2055152188)) + (i32.add (i32.const 1856877032)) + (i32.add (i32.const 1946559846)) + (i32.add (i32.const -1745711743)) + (i32.add (i32.const -1897655530)) + (i32.add (i32.const -2014365698)) + (i32.add (i32.const -190463586)) + (i32.add (i32.const 58053470)) + (i32.add (i32.const 173128185)) + (i32.add (i32.const 12517861)) + (i32.add (i32.const -2089048812)) + (i32.add (i32.const -2092235137)) + (i32.add (i32.const 383621237)) + (i32.add (i32.const 1886259169)) + (i32.add (i32.const -1667350348)) + (i32.add (i32.const -366869145)) + (i32.add (i32.const 181517728)) + (i32.add (i32.const -2031731692)) + (i32.add (i32.const -785966945)) + (i32.add (i32.const 858227570)) + (i32.add (i32.const -491081001)) + (i32.add (i32.const -2101656776)) + (i32.add (i32.const -215259440)) + (i32.add (i32.const 686400509)) + (i32.add (i32.const 2051484602)) + (i32.add (i32.const -819943301)) + (i32.add (i32.const -638672294)) + (i32.add (i32.const 245672071)) + (i32.add (i32.const -484730583)) + (i32.add (i32.const -1581692804)) + (i32.add (i32.const -120415849)) + (i32.add (i32.const 1995669524)) + (i32.add (i32.const 1906604414)) + (i32.add (i32.const 1822993695)) + (i32.add (i32.const -1756844205)) + (i32.add (i32.const -862461807)) + (i32.add (i32.const 823339417)) + (i32.add (i32.const 1347833075)) + (i32.add (i32.const -1955515587)) + (i32.add (i32.const -1233861076)) + (i32.add (i32.const -860880966)) + (i32.add (i32.const 1599408827)) + (i32.add (i32.const 322059476)) + (i32.add (i32.const 1019468706)) + (i32.add (i32.const 667425808)) + (i32.add (i32.const 707730346)) + (i32.add (i32.const -1811833919)) + (i32.add (i32.const 1721491990)) + (i32.add (i32.const -1569766001)) + (i32.add (i32.const -746798690)) + (i32.add (i32.const 849255091)) + (i32.add (i32.const 946624374)) + (i32.add (i32.const -1895420697)) + (i32.add (i32.const 1674443211)) + (i32.add (i32.const -1791748071)) + (i32.add (i32.const -18806768)) + (i32.add (i32.const -1171293342)) + (i32.add (i32.const -1529157441)) + (i32.add (i32.const 510243940)) + (i32.add (i32.const -2098337403)) + (i32.add (i32.const -709137452)) + (i32.add (i32.const -975672106)) + (i32.add (i32.const -841100920)) + (i32.add (i32.const -1902913358)) + (i32.add (i32.const 322150240)) + (i32.add (i32.const 1683260890)) + (i32.add (i32.const 2060125852)) + (i32.add (i32.const -2037430925)) + (i32.add (i32.const 247385999)) + (i32.add (i32.const -1171384897)) + (i32.add (i32.const 442706290)) + (i32.add (i32.const 2100057504)) + (i32.add (i32.const -595807760)) + (i32.add (i32.const -711883263)) + (i32.add (i32.const -1170302003)) + (i32.add (i32.const -1217459137)) + (i32.add (i32.const 995822127)) + (i32.add (i32.const -254007707)) + (i32.add (i32.const -1694162420)) + (i32.add (i32.const -977748576)) + (i32.add (i32.const -2089864593)) + (i32.add (i32.const 1610537169)) + (i32.add (i32.const 733485891)) + (i32.add (i32.const -447332172)) + (i32.add (i32.const 1453346082)) + (i32.add (i32.const 1486360038)) + (i32.add (i32.const 317581181)) + (i32.add (i32.const 101838368)) + (i32.add (i32.const -157865855)) + (i32.add (i32.const 1015262272)) + (i32.add (i32.const -2078250790)) + (i32.add (i32.const -971263151)) + (i32.add (i32.const -260563845)) + (i32.add (i32.const -1530913919)) + (i32.add (i32.const -1311903302)) + (i32.add (i32.const 436555150)) + (i32.add (i32.const -1749639349)) + (i32.add (i32.const 96171757)) + (i32.add (i32.const -1974175654)) + (i32.add (i32.const -610470045)) + (i32.add (i32.const -1098144754)) + (i32.add (i32.const -59891434)) + (i32.add (i32.const 189155007)) + (i32.add (i32.const 1569314809)) + (i32.add (i32.const -1257936136)) + (i32.add (i32.const 477207962)) + (i32.add (i32.const 2019958034)) + (i32.add (i32.const 982900811)) + (i32.add (i32.const -934096728)) + (i32.add (i32.const -454931540)) + (i32.add (i32.const -872604144)) + (i32.add (i32.const -1453399261)) + (i32.add (i32.const 1079400544)) + (i32.add (i32.const 1440039820)) + (i32.add (i32.const 411748793)) + (i32.add (i32.const -1601224505)) + (i32.add (i32.const -629793673)) + (i32.add (i32.const 336867769)) + (i32.add (i32.const -1520608240)) + (i32.add (i32.const -1299201214)) + (i32.add (i32.const -461510184)) + (i32.add (i32.const -489196935)) + (i32.add (i32.const -799961907)) + (i32.add (i32.const -987306072)) + (i32.add (i32.const 1917778222)) + (i32.add (i32.const 1726111320)) + (i32.add (i32.const -490019281)) + (i32.add (i32.const -1568122607)) + (i32.add (i32.const -1197926755)) + (i32.add (i32.const -899775446)) + (i32.add (i32.const -1208972805)) + (i32.add (i32.const 118861021)) + (i32.add (i32.const 987551778)) + (i32.add (i32.const -1969228944)) + (i32.add (i32.const -122348122)) + (i32.add (i32.const -810040595)) + (i32.add (i32.const -820990769)) + (i32.add (i32.const 103429061)) + (i32.add (i32.const -206721603)) + (i32.add (i32.const 1733026075)) + (i32.add (i32.const 666827278)) + (i32.add (i32.const 153892482)) + (i32.add (i32.const -2124459993)) + (i32.add (i32.const -1983077914)) + (i32.add (i32.const 1216602625)) + (i32.add (i32.const -2075885084)) + (i32.add (i32.const -1341417524)) + (i32.add (i32.const 47913677)) + (i32.add (i32.const 1485170592)) + (i32.add (i32.const 1099342492)) + (i32.add (i32.const -1711772989)) + (i32.add (i32.const 597587448)) + (i32.add (i32.const 1083001850)) + (i32.add (i32.const 566806483)) + (i32.add (i32.const -617557923)) + (i32.add (i32.const -1554614464)) + (i32.add (i32.const 2119386729)) + (i32.add (i32.const 77823514)) + (i32.add (i32.const -500867797)) + (i32.add (i32.const -1680620417)) + (i32.add (i32.const 1368752785)) + (i32.add (i32.const -808890652)) + (i32.add (i32.const -1563007953)) + (i32.add (i32.const 468181360)) + (i32.add (i32.const 66826466)) + (i32.add (i32.const 1630707743)) + (i32.add (i32.const -2094222159)) + (i32.add (i32.const 741320153)) + (i32.add (i32.const -2064037890)) + (i32.add (i32.const 259844849)) + (i32.add (i32.const -422868372)) + (i32.add (i32.const 1538784077)) + (i32.add (i32.const 1040736004)) + (i32.add (i32.const 1612940663)) + (i32.add (i32.const -196270821)) + (i32.add (i32.const 49164345)) + (i32.add (i32.const 1460426249)) + (i32.add (i32.const 1254386625)) + (i32.add (i32.const 1598133201)) + (i32.add (i32.const -1722578313)) + (i32.add (i32.const 435001913)) + (i32.add (i32.const -1787421456)) + (i32.add (i32.const 1493237082)) + (i32.add (i32.const -1673520701)) + (i32.add (i32.const 2021177041)) + (i32.add (i32.const 1323422225)) + (i32.add (i32.const -586424375)) + (i32.add (i32.const -1879807503)) + (i32.add (i32.const 1031962863)) + (i32.add (i32.const 1788870615)) + (i32.add (i32.const 692416855)) + (i32.add (i32.const 2033626915)) + (i32.add (i32.const 7333569)) + (i32.add (i32.const 1936728314)) + (i32.add (i32.const -439277198)) + (i32.add (i32.const 202750507)) + (i32.add (i32.const -995096268)) + (i32.add (i32.const -1407764448)) + (i32.add (i32.const 734011025)) + (i32.add (i32.const -919050789)) + (i32.add (i32.const -24557182)) + (i32.add (i32.const -1515726032)) + (i32.add (i32.const 141807025)) + (i32.add (i32.const 765441810)) + (i32.add (i32.const 453811410)) + (i32.add (i32.const -1371038082)) + (i32.add (i32.const 51212460)) + (i32.add (i32.const 1489615977)) + (i32.add (i32.const -2134474211)) + (i32.add (i32.const 1006166636)) + (i32.add (i32.const -2139498152)) + (i32.add (i32.const -685815992)) + (i32.add (i32.const -1819353722)) + (i32.add (i32.const 431609918)) + (i32.add (i32.const 1554797154)) + (i32.add (i32.const 710127343)) + (i32.add (i32.const 903250620)) + (i32.add (i32.const -682464710)) + (i32.add (i32.const -865108509)) + (i32.add (i32.const 1251639716)) + (i32.add (i32.const 89773220)) + (i32.add (i32.const -82343372)) + (i32.add (i32.const -1372134135)) + (i32.add (i32.const 1315059744)) + (i32.add (i32.const 2015236489)) + (i32.add (i32.const 1456125001)) + (i32.add (i32.const 1860978840)) + (i32.add (i32.const -1217209323)) + (i32.add (i32.const -786803491)) + (i32.add (i32.const -613296864)) + (i32.add (i32.const 1952957147)) + (i32.add (i32.const -1769620536)) + (i32.add (i32.const 2009913470)) + (i32.add (i32.const 612162806)) + (i32.add (i32.const 662287416)) + (i32.add (i32.const -376298746)) + (i32.add (i32.const -1070858498)) + (i32.add (i32.const -517605180)) + (i32.add (i32.const -1052261532)) + (i32.add (i32.const -1586669442)) + (i32.add (i32.const -248708171)) + (i32.add (i32.const -1833764989)) + (i32.add (i32.const -1703679423)) + (i32.add (i32.const -1764815028)) + (i32.add (i32.const 444227313)) + (i32.add (i32.const 1832404047)) + (i32.add (i32.const 657308102)) + (i32.add (i32.const -229232778)) + (i32.add (i32.const -873908465)) + (i32.add (i32.const -243239952)) + (i32.add (i32.const 888174613)) + (i32.add (i32.const 1479696289)) + (i32.add (i32.const 1199755086)) + (i32.add (i32.const -250189764)) + (i32.add (i32.const 1699138068)) + (i32.add (i32.const -612903904)) + (i32.add (i32.const -1069617896)) + (i32.add (i32.const 914378873)) + (i32.add (i32.const 974449059)) + (i32.add (i32.const -2095659763)) + (i32.add (i32.const -1249647111)) + (i32.add (i32.const -2046414607)) + (i32.add (i32.const 260397700)) + (i32.add (i32.const 1630853613)) + (i32.add (i32.const -586545887)) + (i32.add (i32.const 2045411231)) + (i32.add (i32.const 998929387)) + (i32.add (i32.const -816217412)) + (i32.add (i32.const 2031995804)) + (i32.add (i32.const 9717149)) + (i32.add (i32.const -1987156940)) + (i32.add (i32.const -892256592)) + (i32.add (i32.const -494800857)) + (i32.add (i32.const 1338491708)) + (i32.add (i32.const 1795424831)) + (i32.add (i32.const -512363703)) + (i32.add (i32.const 1338610565)) + (i32.add (i32.const 944192201)) + (i32.add (i32.const 1119453788)) + (i32.add (i32.const 1701731864)) + (i32.add (i32.const 1834305533)) + (i32.add (i32.const 241118094)) + (i32.add (i32.const 352976736)) + (i32.add (i32.const -1915034476)) + (i32.add (i32.const 1529258645)) + (i32.add (i32.const -198213093)) + (i32.add (i32.const -1342580692)) + (i32.add (i32.const -570777229)) + (i32.add (i32.const -3353644)) + (i32.add (i32.const 927389197)) + (i32.add (i32.const -400748046)) + (i32.add (i32.const 796970014)) + (i32.add (i32.const 1036685502)) + (i32.add (i32.const -851394802)) + (i32.add (i32.const -612545906)) + (i32.add (i32.const 648022080)) + (i32.add (i32.const 5286660)) + (i32.add (i32.const 1505150670)) + (i32.add (i32.const -1562302681)) + (i32.add (i32.const 193065519)) + (i32.add (i32.const 1838819445)) + (i32.add (i32.const -2078365300)) + (i32.add (i32.const -1558448281)) + (i32.add (i32.const -1729207354)) + (i32.add (i32.const -420825598)) + (i32.add (i32.const 1042934547)) + (i32.add (i32.const -321259556)) + (i32.add (i32.const 1688732541)) + (i32.add (i32.const -1522846386)) + (i32.add (i32.const 1517989923)) + (i32.add (i32.const 565185722)) + (i32.add (i32.const 1681338973)) + (i32.add (i32.const 1235517383)) + (i32.add (i32.const -501516622)) + (i32.add (i32.const 16514368)) + (i32.add (i32.const 1911141426)) + (i32.add (i32.const 1540011970)) + (i32.add (i32.const -565005694)) + (i32.add (i32.const 877722904)) + (i32.add (i32.const -745198913)) + (i32.add (i32.const -216627032)) + (i32.add (i32.const -1489653237)) + (i32.add (i32.const -736625571)) + (i32.add (i32.const 1656218739)) + (i32.add (i32.const 1381547063)) + (i32.add (i32.const -1452227873)) + (i32.add (i32.const 1468842721)) + (i32.add (i32.const 418306803)) + (i32.add (i32.const 1703561077)) + (i32.add (i32.const 1236317845)) + (i32.add (i32.const 1088329070)) + (i32.add (i32.const -679587660)) + (i32.add (i32.const -832786614)) + (i32.add (i32.const -1858291620)) + (i32.add (i32.const 892448741)) + (i32.add (i32.const -954958113)) + (i32.add (i32.const -45415533)) + (i32.add (i32.const -1812263725)) + (i32.add (i32.const -2003642880)) + (i32.add (i32.const -351408029)) + (i32.add (i32.const -1383084147)) + (i32.add (i32.const 2114471103)) + (i32.add (i32.const 1860009517)) + (i32.add (i32.const 340624506)) + (i32.add (i32.const 413603763)) + (i32.add (i32.const 1647074776)) + (i32.add (i32.const -381051471)) + (i32.add (i32.const -1628926055)) + (i32.add (i32.const 1221023846)) + (i32.add (i32.const -101246820)) + (i32.add (i32.const 1739653294)) + (i32.add (i32.const 1523346673)) + (i32.add (i32.const 1692606599)) + (i32.add (i32.const 1108648643)) + (i32.add (i32.const 1276726150)) + (i32.add (i32.const 1437659043)) + (i32.add (i32.const -1755023982)) + (i32.add (i32.const -460618067)) + (i32.add (i32.const -1354271614)) + (i32.add (i32.const -298062651)) + (i32.add (i32.const -292763342)) + (i32.add (i32.const -1166595542)) + (i32.add (i32.const 1376620247)) + (i32.add (i32.const 262890535)) + (i32.add (i32.const -861941067)) + (i32.add (i32.const -1569026323)) + (i32.add (i32.const -1478648294)) + (i32.add (i32.const -998896283)) + (i32.add (i32.const -2014673150)) + (i32.add (i32.const 1677596258)) + (i32.add (i32.const 892835536)) + (i32.add (i32.const 1388055104)) + (i32.add (i32.const 326931354)) + (i32.add (i32.const -1946416353)) + (i32.add (i32.const -637227675)) + (i32.add (i32.const -2075836548)) + (i32.add (i32.const 1136668447)) + (i32.add (i32.const 1562833275)) + (i32.add (i32.const -381963860)) + (i32.add (i32.const 568643329)) + (i32.add (i32.const 574897121)) + (i32.add (i32.const 270557375)) + (i32.add (i32.const 1255559861)) + (i32.add (i32.const -1051039236)) + (i32.add (i32.const -1419423909)) + (i32.add (i32.const -1370545223)) + (i32.add (i32.const -443178350)) + (i32.add (i32.const -569026509)) + (i32.add (i32.const -1155519596)) + (i32.add (i32.const -147967956)) + (i32.add (i32.const -2091310663)) + (i32.add (i32.const 161739787)) + (i32.add (i32.const -970165045)) + (i32.add (i32.const -1531654093)) + (i32.add (i32.const -1929282510)) + (i32.add (i32.const -1787058598)) + (i32.add (i32.const -737081079)) + (i32.add (i32.const 982503085)) + (i32.add (i32.const -1909697559)) + (i32.add (i32.const 761379891)) + (i32.add (i32.const -2064743498)) + (i32.add (i32.const 1291656003)) + (i32.add (i32.const -2032734397)) + (i32.add (i32.const -855729299)) + (i32.add (i32.const -778036168)) + (i32.add (i32.const 962648291)) + (i32.add (i32.const -184751451)) + (i32.add (i32.const -707090534)) + (i32.add (i32.const 881397047)) + (i32.add (i32.const -206553020)) + (i32.add (i32.const 1469499878)) + (i32.add (i32.const -61993040)) + (i32.add (i32.const 1721295008)) + (i32.add (i32.const 283017601)) + (i32.add (i32.const -1410250097)) + (i32.add (i32.const 1904006157)) + (i32.add (i32.const -1219674787)) + (i32.add (i32.const 1477955327)) + (i32.add (i32.const 659465109)) + (i32.add (i32.const -1358559712)) + (i32.add (i32.const -1243842968)) + (i32.add (i32.const 820435272)) + (i32.add (i32.const -254856915)) + (i32.add (i32.const -73983647)) + (i32.add (i32.const 1251961060)) + (i32.add (i32.const 1495022002)) + (i32.add (i32.const -759544476)) + (i32.add (i32.const -2018734876)) + (i32.add (i32.const -1817736284)) + (i32.add (i32.const 928653708)) + (i32.add (i32.const -749877649)) + (i32.add (i32.const -1461222093)) + (i32.add (i32.const 1071982755)) + (i32.add (i32.const -2013753212)) + (i32.add (i32.const -2059296397)) + (i32.add (i32.const 1696906356)) + (i32.add (i32.const -1689960229)) + (i32.add (i32.const 1237314746)) + (i32.add (i32.const -1079834465)) + (i32.add (i32.const -1586163914)) + (i32.add (i32.const 1032509830)) + (i32.add (i32.const -1454294079)) + (i32.add (i32.const 2112701834)) + (i32.add (i32.const -1320610990)) + (i32.add (i32.const 517523480)) + (i32.add (i32.const -250915543)) + (i32.add (i32.const -1966729692)) + (i32.add (i32.const -568601132)) + (i32.add (i32.const -494561465)) + (i32.add (i32.const 858358074)) + (i32.add (i32.const -1977886270)) + (i32.add (i32.const 625689163)) + (i32.add (i32.const -1703653690)) + (i32.add (i32.const 1120743727)) + (i32.add (i32.const 542248885)) + (i32.add (i32.const -628220161)) + (i32.add (i32.const 1152975923)) + (i32.add (i32.const -335141489)) + (i32.add (i32.const 2058284680)) + (i32.add (i32.const -1903951596)) + (i32.add (i32.const -969893177)) + (i32.add (i32.const -567037178)) + (i32.add (i32.const 2105329942)) + (i32.add (i32.const -410921931)) + (i32.add (i32.const 1984180722)) + (i32.add (i32.const 800134892)) + (i32.add (i32.const -443449790)) + (i32.add (i32.const 1154350307)) + (i32.add (i32.const 421455983)) + (i32.add (i32.const -493139893)) + (i32.add (i32.const -2057505766)) + (i32.add (i32.const -785164851)) + (i32.add (i32.const -1659400584)) + (i32.add (i32.const 938678632)) + (i32.add (i32.const 2133831833)) + (i32.add (i32.const 1925450674)) + (i32.add (i32.const -1706253716)) + (i32.add (i32.const -941759981)) + (i32.add (i32.const -661682622)) + (i32.add (i32.const 518610185)) + (i32.add (i32.const 333246145)) + (i32.add (i32.const -265297411)) + (i32.add (i32.const -1564968689)) + (i32.add (i32.const 1676879018)) + (i32.add (i32.const -194711813)) + (i32.add (i32.const -1498938039)) + (i32.add (i32.const -1678788476)) + (i32.add (i32.const 301496871)) + (i32.add (i32.const -190030488)) + (i32.add (i32.const 1771821960)) + (i32.add (i32.const -1606540451)) + (i32.add (i32.const -2138221983)) + (i32.add (i32.const -845717335)) + (i32.add (i32.const 1898245942)) + (i32.add (i32.const -1658070149)) + (i32.add (i32.const -837480466)) + (i32.add (i32.const 1358481743)) + (i32.add (i32.const -1055353922)) + (i32.add (i32.const 1216440722)) + (i32.add (i32.const -433247116)) + (i32.add (i32.const 1036343974)) + (i32.add (i32.const -820520205)) + (i32.add (i32.const 1260233987)) + (i32.add (i32.const -2026475448)) + (i32.add (i32.const -2103420216)) + (i32.add (i32.const -1356683973)) + (i32.add (i32.const -200319766)) + (i32.add (i32.const 426746541)) + (i32.add (i32.const 554368275)) + (i32.add (i32.const -1222338246)) + (i32.add (i32.const 1103144121)) + (i32.add (i32.const 126026522)) + (i32.add (i32.const -1119281420)) + (i32.add (i32.const -311122653)) + (i32.add (i32.const 1851827264)) + (i32.add (i32.const -1319577846)) + (i32.add (i32.const 121236951)) + (i32.add (i32.const -554327200)) + (i32.add (i32.const 632051614)) + (i32.add (i32.const 744462821)) + (i32.add (i32.const -550520526)) + (i32.add (i32.const 1008802471)) + (i32.add (i32.const -1854687265)) + (i32.add (i32.const -1139496752)) + (i32.add (i32.const 43614283)) + (i32.add (i32.const -1329935052)) + (i32.add (i32.const -1558162934)) + (i32.add (i32.const 1474018999)) + (i32.add (i32.const -452816233)) + (i32.add (i32.const -1593247994)) + (i32.add (i32.const 327418221)) + (i32.add (i32.const 807224604)) + (i32.add (i32.const 825464964)) + (i32.add (i32.const 281755887)) + (i32.add (i32.const 1279007053)) + (i32.add (i32.const 954142610)) + (i32.add (i32.const 544453143)) + (i32.add (i32.const -1720306624)) + (i32.add (i32.const -368433827)) + (i32.add (i32.const 2139649939)) + (i32.add (i32.const -2145796907)) + (i32.add (i32.const -37666653)) + (i32.add (i32.const -133969815)) + (i32.add (i32.const -150400835)) + (i32.add (i32.const -180900779)) + (i32.add (i32.const -782118486)) + (i32.add (i32.const 275756823)) + (i32.add (i32.const -605812034)) + (i32.add (i32.const -371869461)) + (i32.add (i32.const -100424385)) + (i32.add (i32.const 1468469156)) + (i32.add (i32.const -1897507562)) + (i32.add (i32.const 890190983)) + (i32.add (i32.const 2040619148)) + (i32.add (i32.const -1074418614)) + (i32.add (i32.const -1436003731)) + (i32.add (i32.const 696044524)) + (i32.add (i32.const -64842112)) + (i32.add (i32.const 1647125212)) + (i32.add (i32.const 1739476824)) + (i32.add (i32.const 1112571622)) + (i32.add (i32.const 660970047)) + (i32.add (i32.const -141174749)) + (i32.add (i32.const -1533234935)) + (i32.add (i32.const 1505011397)) + (i32.add (i32.const -1662910736)) + (i32.add (i32.const 1346177079)) + (i32.add (i32.const -775053522)) + (i32.add (i32.const 15257874)) + (i32.add (i32.const -1976259327)) + (i32.add (i32.const 519508846)) + (i32.add (i32.const -211306540)) + (i32.add (i32.const 252952201)) + (i32.add (i32.const 207069969)) + (i32.add (i32.const -2035665200)) + (i32.add (i32.const 1550355763)) + (i32.add (i32.const -2077391451)) + (i32.add (i32.const -1585483819)) + (i32.add (i32.const -946418843)) + (i32.add (i32.const 226708221)) + (i32.add (i32.const -2050781218)) + (i32.add (i32.const 948510856)) + (i32.add (i32.const -1219750172)) + (i32.add (i32.const 3056415)) + (i32.add (i32.const 1975570821)) + (i32.add (i32.const -1531273541)) + (i32.add (i32.const -1852123384)) + (i32.add (i32.const -2006328669)) + (i32.add (i32.const -276995196)) + (i32.add (i32.const -794930199)) + (i32.add (i32.const 1647998428)) + (i32.add (i32.const -2137913440)) + (i32.add (i32.const 721683163)) + (i32.add (i32.const -1548654287)) + (i32.add (i32.const 1297130545)) + (i32.add (i32.const 763210778)) + (i32.add (i32.const -52781471)) + (i32.add (i32.const 2100390535)) + (i32.add (i32.const -928474765)) + (i32.add (i32.const 830415104)) + (i32.add (i32.const 1506445693)) + (i32.add (i32.const 25346197)) + (i32.add (i32.const 499260948)) + (i32.add (i32.const -1904493276)) + (i32.add (i32.const -29133848)) + (i32.add (i32.const -1194246838)) + (i32.add (i32.const -1818926308)) + (i32.add (i32.const 422595604)) + (i32.add (i32.const 1413659294)) + (i32.add (i32.const 1038293811)) + (i32.add (i32.const -401601674)) + (i32.add (i32.const 749735101)) + (i32.add (i32.const -1200075696)) + (i32.add (i32.const -1752661303)) + (i32.add (i32.const -1761006443)) + (i32.add (i32.const 1234386247)) + (i32.add (i32.const 282393336)) + (i32.add (i32.const -726071595)) + (i32.add (i32.const -1226110906)) + (i32.add (i32.const 966378089)) + (i32.add (i32.const 1620882329)) + (i32.add (i32.const -550327725)) + (i32.add (i32.const 1934059783)) + (i32.add (i32.const -1345218871)) + (i32.add (i32.const -527415143)) + (i32.add (i32.const -1111927483)) + (i32.add (i32.const -1278853424)) + (i32.add (i32.const 291758128)) + (i32.add (i32.const 1732026716)) + (i32.add (i32.const -1754016276)) + (i32.add (i32.const -1230657445)) + (i32.add (i32.const 1153977832)) + (i32.add (i32.const 1446972721)) + (i32.add (i32.const -997814564)) + (i32.add (i32.const 494609280)) + (i32.add (i32.const 1203477526)) + (i32.add (i32.const 436454966)) + (i32.add (i32.const -705348218)) + (i32.add (i32.const 1926371048)) + (i32.add (i32.const 1725424738)) + (i32.add (i32.const 1236668713)) + (i32.add (i32.const -359950404)) + (i32.add (i32.const -1453251901)) + (i32.add (i32.const -500682796)) + (i32.add (i32.const 1934465596)) + (i32.add (i32.const -674780240)) + (i32.add (i32.const 37928841)) + (i32.add (i32.const -1877864071)) + (i32.add (i32.const -327718560)) + (i32.add (i32.const -2068490252)) + (i32.add (i32.const 151971682)) + (i32.add (i32.const 419686708)) + (i32.add (i32.const -464087923)) + (i32.add (i32.const -1939226325)) + (i32.add (i32.const -1901551528)) + (i32.add (i32.const -1642493265)) + (i32.add (i32.const -900268162)) + (i32.add (i32.const 829522693)) + (i32.add (i32.const -428784244)) + (i32.add (i32.const 1965744105)) + (i32.add (i32.const -1087177226)) + (i32.add (i32.const -625168356)) + (i32.add (i32.const -899880410)) + (i32.add (i32.const 933990175)) + (i32.add (i32.const -70296980)) + (i32.add (i32.const -1644751366)) + (i32.add (i32.const 125528903)) + (i32.add (i32.const 2068858145)) + (i32.add (i32.const -1987892399)) + (i32.add (i32.const -431595634)) + (i32.add (i32.const 65803249)) + (i32.add (i32.const 858575118)) + (i32.add (i32.const 921910148)) + (i32.add (i32.const 55764983)) + (i32.add (i32.const 2083163582)) + (i32.add (i32.const -2072425361)) + (i32.add (i32.const 286081605)) + (i32.add (i32.const -951727285)) + (i32.add (i32.const 1698194958)) + (i32.add (i32.const 979401722)) + (i32.add (i32.const -186042614)) + (i32.add (i32.const 137807048)) + (i32.add (i32.const 1150807997)) + (i32.add (i32.const -419076344)) + (i32.add (i32.const -597722583)) + (i32.add (i32.const -19759158)) + (i32.add (i32.const 1076494022)) + (i32.add (i32.const -1632769409)) + (i32.add (i32.const -13332406)) + (i32.add (i32.const -1615263925)) + (i32.add (i32.const -1691909791)) + (i32.add (i32.const -95650159)) + (i32.add (i32.const -640761133)) + (i32.add (i32.const -1951629127)) + (i32.add (i32.const -210652416)) + (i32.add (i32.const -1067719456)) + (i32.add (i32.const -66397313)) + (i32.add (i32.const -2133202686)) + (i32.add (i32.const 660382976)) + (i32.add (i32.const 342595278)) + (i32.add (i32.const 553283905)) + (i32.add (i32.const 105468110)) + (i32.add (i32.const 552667663)) + (i32.add (i32.const -366390635)) + (i32.add (i32.const -2071384425)) + (i32.add (i32.const 928728229)) + (i32.add (i32.const -1898325545)) + (i32.add (i32.const 1764292523)) + (i32.add (i32.const 267961372)) + (i32.add (i32.const 99375983)) + (i32.add (i32.const -1284890518)) + (i32.add (i32.const -839660121)) + (i32.add (i32.const -1889315814)) + (i32.add (i32.const -1500332441)) + (i32.add (i32.const -792621347)) + (i32.add (i32.const 1052441069)) + (i32.add (i32.const -490004410)) + (i32.add (i32.const 553189976)) + (i32.add (i32.const -2046024095)) + (i32.add (i32.const -1262005919)) + (i32.add (i32.const -2113400670)) + (i32.add (i32.const 918429443)) + (i32.add (i32.const 1087619765)) + (i32.add (i32.const 38633566)) + (i32.add (i32.const -321501749)) + (i32.add (i32.const 882505211)) + (i32.add (i32.const -2131271957)) + (i32.add (i32.const 362041984)) + (i32.add (i32.const -2005832368)) + (i32.add (i32.const -960461282)) + (i32.add (i32.const 436154710)) + (i32.add (i32.const -723253878)) + (i32.add (i32.const 289017559)) + (i32.add (i32.const 145328135)) + (i32.add (i32.const 1368867935)) + (i32.add (i32.const -698821807)) + (i32.add (i32.const -1686866153)) + (i32.add (i32.const 1716524755)) + (i32.add (i32.const 2016840808)) + (i32.add (i32.const -1902704232)) + (i32.add (i32.const 1640542848)) + (i32.add (i32.const -405385144)) + (i32.add (i32.const -1802505750)) + (i32.add (i32.const -1442625548)) + (i32.add (i32.const -579992233)) + (i32.add (i32.const 1475389282)) + (i32.add (i32.const 191465787)) + (i32.add (i32.const 159938848)) + (i32.add (i32.const -1724926688)) + (i32.add (i32.const -1833817601)) + (i32.add (i32.const -367376927)) + (i32.add (i32.const -278133005)) + (i32.add (i32.const 348489735)) + (i32.add (i32.const -1092345081)) + (i32.add (i32.const 162867206)) + (i32.add (i32.const -1687183771)) + (i32.add (i32.const 1861711351)) + (i32.add (i32.const 1147219708)) + (i32.add (i32.const 1402512593)) + (i32.add (i32.const -2009599620)) + (i32.add (i32.const -705537664)) + (i32.add (i32.const -251011113)) + (i32.add (i32.const 1946286431)) + (i32.add (i32.const -1704893665)) + (i32.add (i32.const 761593823)) + (i32.add (i32.const -1791584988)) + (i32.add (i32.const 1793315207)) + (i32.add (i32.const 1160744237)) + (i32.add (i32.const -24974471)) + (i32.add (i32.const -446417806)) + (i32.add (i32.const 1846520072)) + (i32.add (i32.const -712745508)) + (i32.add (i32.const -2056176650)) + (i32.add (i32.const -14715748)) + (i32.add (i32.const 1642429701)) + (i32.add (i32.const 1527105693)) + (i32.add (i32.const 1726490405)) + (i32.add (i32.const 790557089)) + (i32.add (i32.const -980373142)) + (i32.add (i32.const -1482112487)) + (i32.add (i32.const -401109669)) + (i32.add (i32.const 347061844)) + (i32.add (i32.const -1501780665)) + (i32.add (i32.const -1120533423)) + (i32.add (i32.const -625275075)) + (i32.add (i32.const 1559927586)) + (i32.add (i32.const -1884152467)) + (i32.add (i32.const 1206205218)) + (i32.add (i32.const -2016264560)) + (i32.add (i32.const 180451962)) + (i32.add (i32.const 525135299)) + (i32.add (i32.const 1428481748)) + (i32.add (i32.const -1968719648)) + (i32.add (i32.const 360148889)) + (i32.add (i32.const 1243146966)) + (i32.add (i32.const 2079362777)) + (i32.add (i32.const 676630572)) + (i32.add (i32.const -930685567)) + (i32.add (i32.const -276718825)) + (i32.add (i32.const 1505283829)) + (i32.add (i32.const 1845632193)) + (i32.add (i32.const -1866457589)) + (i32.add (i32.const -1647968389)) + (i32.add (i32.const 1311706712)) + (i32.add (i32.const -1163270888)) + (i32.add (i32.const 509748494)) + (i32.add (i32.const 602482164)) + (i32.add (i32.const -1894961736)) + (i32.add (i32.const -1213592575)) + (i32.add (i32.const 353464226)) + (i32.add (i32.const 1860537115)) + (i32.add (i32.const 497722552)) + (i32.add (i32.const -593258038)) + (i32.add (i32.const 945800624)) + (i32.add (i32.const 329378414)) + (i32.add (i32.const 1147086772)) + (i32.add (i32.const -609926462)) + (i32.add (i32.const -648185708)) + (i32.add (i32.const -1931284754)) + (i32.add (i32.const 1995182377)) + (i32.add (i32.const -119812287)) + (i32.add (i32.const -858341835)) + (i32.add (i32.const -1295071689)) + (i32.add (i32.const 708843215)) + (i32.add (i32.const 1084163678)) + (i32.add (i32.const -1153488322)) + (i32.add (i32.const 363480536)) + (i32.add (i32.const 2111036045)) + (i32.add (i32.const -111438484)) + (i32.add (i32.const -1695103363)) + (i32.add (i32.const 329946607)) + (i32.add (i32.const -1900869324)) + (i32.add (i32.const 933684790)) + (i32.add (i32.const -1011432016)) + (i32.add (i32.const 960016131)) + (i32.add (i32.const -879664218)) + (i32.add (i32.const 805514399)) + (i32.add (i32.const -1384830007)) + (i32.add (i32.const 1267163032)) + (i32.add (i32.const 893739436)) + (i32.add (i32.const 1333018636)) + (i32.add (i32.const -2014077002)) + (i32.add (i32.const -1942263123)) + (i32.add (i32.const 257639891)) + (i32.add (i32.const -1989097304)) + (i32.add (i32.const 1399448525)) + (i32.add (i32.const -1754236871)) + (i32.add (i32.const 2090962794)) + (i32.add (i32.const -1403414058)) + (i32.add (i32.const -289662933)) + (i32.add (i32.const 295955562)) + (i32.add (i32.const -1177364860)) + (i32.add (i32.const 794168731)) + (i32.add (i32.const 1386067975)) + (i32.add (i32.const 1686966557)) + (i32.add (i32.const 633686046)) + (i32.add (i32.const -1086800461)) + (i32.add (i32.const -942413657)) + (i32.add (i32.const 1489452196)) + (i32.add (i32.const -179116077)) + (i32.add (i32.const 1411110438)) + (i32.add (i32.const 1986674690)) + (i32.add (i32.const -1636948732)) + (i32.add (i32.const -1758358491)) + (i32.add (i32.const -521627243)) + (i32.add (i32.const -696198701)) + (i32.add (i32.const -236371504)) + (i32.add (i32.const -508636839)) + (i32.add (i32.const -1299683515)) + (i32.add (i32.const 1937198018)) + (i32.add (i32.const 1822826352)) + (i32.add (i32.const 323715023)) + (i32.add (i32.const 676453475)) + (i32.add (i32.const -1781339389)) + (i32.add (i32.const -1585021797)) + (i32.add (i32.const -1829705936)) + (i32.add (i32.const 2119823864)) + (i32.add (i32.const 653879773)) + (i32.add (i32.const -250123076)) + (i32.add (i32.const 1235674555)) + (i32.add (i32.const -89500137)) + (i32.add (i32.const -1642485578)) + (i32.add (i32.const -481541991)) + (i32.add (i32.const 1746550344)) + (i32.add (i32.const 984339263)) + (i32.add (i32.const -521281489)) + (i32.add (i32.const 1209141935)) + (i32.add (i32.const 1806267043)) + (i32.add (i32.const -1240601212)) + (i32.add (i32.const -17364845)) + (i32.add (i32.const 981555766)) + (i32.add (i32.const 61775821)) + (i32.add (i32.const 1625288171)) + (i32.add (i32.const -1389434851)) + (i32.add (i32.const -2032580384)) + (i32.add (i32.const -925928578)) + (i32.add (i32.const -675729153)) + (i32.add (i32.const 2107554229)) + (i32.add (i32.const -937194912)) + (i32.add (i32.const -1084380320)) + (i32.add (i32.const 816530328)) + (i32.add (i32.const -1940255945)) + (i32.add (i32.const -227250851)) + (i32.add (i32.const -388150043)) + (i32.add (i32.const -838275785)) + (i32.add (i32.const -1242683590)) + (i32.add (i32.const 906328799)) + (i32.add (i32.const -1019097779)) + (i32.add (i32.const 8796131)) + (i32.add (i32.const 1489093123)) + (i32.add (i32.const -102727227)) + (i32.add (i32.const -311315860)) + (i32.add (i32.const 1436269401)) + (i32.add (i32.const -856089493)) + (i32.add (i32.const 1361209865)) + (i32.add (i32.const 947552511)) + (i32.add (i32.const -1194843601)) + (i32.add (i32.const 662708972)) + (i32.add (i32.const -1074411538)) + (i32.add (i32.const -1767234635)) + (i32.add (i32.const -1855886555)) + (i32.add (i32.const -1745745718)) + (i32.add (i32.const -1331778675)) + (i32.add (i32.const -1961336697)) + (i32.add (i32.const -440693522)) + (i32.add (i32.const 1175385795)) + (i32.add (i32.const 2026164684)) + (i32.add (i32.const -1276225759)) + (i32.add (i32.const 57411864)) + (i32.add (i32.const -728167391)) + (i32.add (i32.const -153755900)) + (i32.add (i32.const 1501088928)) + (i32.add (i32.const 1196952915)) + (i32.add (i32.const -1723495320)) + (i32.add (i32.const 1338491806)) + (i32.add (i32.const -47298351)) + (i32.add (i32.const 1576993495)) + (i32.add (i32.const 1919483303)) + (i32.add (i32.const -2058777559)) + (i32.add (i32.const 1659107781)) + (i32.add (i32.const 136623121)) + (i32.add (i32.const 900516600)) + (i32.add (i32.const -1375006952)) + (i32.add (i32.const 984553677)) + (i32.add (i32.const -1913210540)) + (i32.add (i32.const -507030789)) + (i32.add (i32.const -1751141963)) + (i32.add (i32.const -63350053)) + (i32.add (i32.const -1497343136)) + (i32.add (i32.const 1993237457)) + (i32.add (i32.const -1938394601)) + (i32.add (i32.const 2072877106)) + (i32.add (i32.const -1347358463)) + (i32.add (i32.const -1103003185)) + (i32.add (i32.const -161163764)) + (i32.add (i32.const 1641994622)) + (i32.add (i32.const 965251874)) + (i32.add (i32.const 2016623662)) + (i32.add (i32.const -1688486022)) + (i32.add (i32.const 1571163317)) + (i32.add (i32.const 926054941)) + (i32.add (i32.const -120131997)) + (i32.add (i32.const 1521223812)) + (i32.add (i32.const -1844102560)) + (i32.add (i32.const -940100140)) + (i32.add (i32.const 1325846758)) + (i32.add (i32.const -84518469)) + (i32.add (i32.const 50114576)) + (i32.add (i32.const 1966324301)) + (i32.add (i32.const -353124212)) + (i32.add (i32.const 1039228051)) + (i32.add (i32.const -228490067)) + (i32.add (i32.const -1870507994)) + (i32.add (i32.const 109016609)) + (i32.add (i32.const 1489950716)) + (i32.add (i32.const -1560326095)) + (i32.add (i32.const 1315409476)) + (i32.add (i32.const 755008939)) + (i32.add (i32.const -526053406)) + (i32.add (i32.const -1533402586)) + (i32.add (i32.const -39297339)) + (i32.add (i32.const -280861923)) + (i32.add (i32.const -85220651)) + (i32.add (i32.const 1109440741)) + (i32.add (i32.const -2016845170)) + (i32.add (i32.const -1635266922)) + (i32.add (i32.const 461971047)) + (i32.add (i32.const 182567090)) + (i32.add (i32.const -814107127)) + (i32.add (i32.const 2024176972)) + (i32.add (i32.const -1724642949)) + (i32.add (i32.const -1365281727)) + (i32.add (i32.const 102777599)) + (i32.add (i32.const 1286322043)) + (i32.add (i32.const -1936614254)) + (i32.add (i32.const -813864610)) + (i32.add (i32.const 284353768)) + (i32.add (i32.const 1021985675)) + (i32.add (i32.const 1921713991)) + (i32.add (i32.const 1560152572)) + (i32.add (i32.const 989087713)) + (i32.add (i32.const 154858703)) + (i32.add (i32.const 277684287)) + (i32.add (i32.const -1776276640)) + (i32.add (i32.const -1543414462)) + (i32.add (i32.const 1932992901)) + (i32.add (i32.const -1335839092)) + (i32.add (i32.const 829395020)) + (i32.add (i32.const -798532891)) + (i32.add (i32.const -1629116548)) + (i32.add (i32.const -1239678019)) + (i32.add (i32.const 686970570)) + (i32.add (i32.const -1352485236)) + (i32.add (i32.const -299894451)) + (i32.add (i32.const 1924316636)) + (i32.add (i32.const -579294914)) + (i32.add (i32.const 1905288265)) + (i32.add (i32.const 1665285694)) + (i32.add (i32.const -984621911)) + (i32.add (i32.const -1360959915)) + (i32.add (i32.const -988525708)) + (i32.add (i32.const 1349735443)) + (i32.add (i32.const 554113740)) + (i32.add (i32.const 312860443)) + (i32.add (i32.const -1593220623)) + (i32.add (i32.const -1495260075)) + (i32.add (i32.const -1588041500)) + (i32.add (i32.const 886610170)) + (i32.add (i32.const -1929161832)) + (i32.add (i32.const -395887453)) + (i32.add (i32.const -1937827612)) + (i32.add (i32.const 1810519739)) + (i32.add (i32.const 1574367281)) + (i32.add (i32.const 1025369229)) + (i32.add (i32.const -501120405)) + (i32.add (i32.const 2082069817)) + (i32.add (i32.const -2078058750)) + (i32.add (i32.const -97472727)) + (i32.add (i32.const 705911594)) + (i32.add (i32.const -41216359)) + (i32.add (i32.const -2115283456)) + (i32.add (i32.const 1100794855)) + (i32.add (i32.const 595400581)) + (i32.add (i32.const 280379919)) + (i32.add (i32.const 225357037)) + (i32.add (i32.const -1945353076)) + (i32.add (i32.const 493118267)) + (i32.add (i32.const -461878044)) + (i32.add (i32.const 2072903842)) + (i32.add (i32.const 41627614)) + (i32.add (i32.const -1462051025)) + (i32.add (i32.const 1470494419)) + (i32.add (i32.const 1470295080)) + (i32.add (i32.const -604442977)) + (i32.add (i32.const 1322547357)) + (i32.add (i32.const 885928062)) + (i32.add (i32.const 812523882)) + (i32.add (i32.const 1972630602)) + (i32.add (i32.const -522837235)) + (i32.add (i32.const 1825174082)) + (i32.add (i32.const -1525682411)) + (i32.add (i32.const 1681377012)) + (i32.add (i32.const 1370156780)) + (i32.add (i32.const -1416881127)) + (i32.add (i32.const 1477773302)) + (i32.add (i32.const 845967561)) + (i32.add (i32.const 220900604)) + (i32.add (i32.const 463740715)) + (i32.add (i32.const -1188907341)) + (i32.add (i32.const 634980884)) + (i32.add (i32.const 85766908)) + (i32.add (i32.const -806213823)) + (i32.add (i32.const 1488813796)) + (i32.add (i32.const 704385515)) + (i32.add (i32.const -254320922)) + (i32.add (i32.const -1863170624)) + (i32.add (i32.const -956496194)) + (i32.add (i32.const -1200034835)) + (i32.add (i32.const -12683866)) + (i32.add (i32.const 532399861)) + (i32.add (i32.const 1516485318)) + (i32.add (i32.const 2058168431)) + (i32.add (i32.const -1052499420)) + (i32.add (i32.const 1719680538)) + (i32.add (i32.const -2071319355)) + (i32.add (i32.const -115004609)) + (i32.add (i32.const -879269227)) + (i32.add (i32.const 1781567157)) + (i32.add (i32.const -870765327)) + (i32.add (i32.const -2084195918)) + (i32.add (i32.const -1601398904)) + (i32.add (i32.const -1623391461)) + (i32.add (i32.const -395741485)) + (i32.add (i32.const -1266215700)) + (i32.add (i32.const -571906349)) + (i32.add (i32.const -1060659272)) + (i32.add (i32.const -1599691760)) + (i32.add (i32.const -1117452626)) + (i32.add (i32.const 1186779978)) + (i32.add (i32.const 1247268641)) + (i32.add (i32.const 212598718)) + (i32.add (i32.const -683440947)) + (i32.add (i32.const 671789549)) + (i32.add (i32.const 1107313634)) + (i32.add (i32.const 714252951)) + (i32.add (i32.const 439590728)) + (i32.add (i32.const 614387505)) + (i32.add (i32.const -1922289515)) + (i32.add (i32.const 311522191)) + (i32.add (i32.const 441280202)) + (i32.add (i32.const 1927223266)) + (i32.add (i32.const -1824443639)) + (i32.add (i32.const -2062008673)) + (i32.add (i32.const -158588265)) + (i32.add (i32.const -693222144)) + (i32.add (i32.const 867135224)) + (i32.add (i32.const 729460153)) + (i32.add (i32.const -1070827785)) + (i32.add (i32.const -587571930)) + (i32.add (i32.const 987549965)) + (i32.add (i32.const -1466132541)) + (i32.add (i32.const 1470279812)) + (i32.add (i32.const 654904626)) + (i32.add (i32.const -1486360755)) + (i32.add (i32.const 386146427)) + (i32.add (i32.const -1493775452)) + (i32.add (i32.const -426453777)) + (i32.add (i32.const 2131617946)) + (i32.add (i32.const 1833599322)) + (i32.add (i32.const -1831850117)) + (i32.add (i32.const 1204440892)) + (i32.add (i32.const -2104279593)) + (i32.add (i32.const -1820492886)) + (i32.add (i32.const -1219588173)) + (i32.add (i32.const 739191780)) + (i32.add (i32.const 972276278)) + (i32.add (i32.const 1015705254)) + (i32.add (i32.const -1920487131)) + (i32.add (i32.const 1866577578)) + (i32.add (i32.const -80567914)) + (i32.add (i32.const -1647080951)) + (i32.add (i32.const 572916399)) + (i32.add (i32.const 29531658)) + (i32.add (i32.const 905622305)) + (i32.add (i32.const 1054262877)) + (i32.add (i32.const -1971322111)) + (i32.add (i32.const -919132105)) + (i32.add (i32.const -453817871)) + (i32.add (i32.const 2132449108)) + (i32.add (i32.const -1804769525)) + (i32.add (i32.const -1769537118)) + (i32.add (i32.const 2145531801)) + (i32.add (i32.const 656746054)) + (i32.add (i32.const -226918810)) + (i32.add (i32.const -1776519760)) + (i32.add (i32.const 380823084)) + (i32.add (i32.const -1683239186)) + (i32.add (i32.const 681121855)) + (i32.add (i32.const -883107748)) + (i32.add (i32.const 638058257)) + (i32.add (i32.const 2096235423)) + (i32.add (i32.const 509017011)) + (i32.add (i32.const 1597501180)) + (i32.add (i32.const -1153651055)) + (i32.add (i32.const -1332577858)) + (i32.add (i32.const 1746547261)) + (i32.add (i32.const -1095744674)) + (i32.add (i32.const -1729938705)) + (i32.add (i32.const -1936260170)) + (i32.add (i32.const -2014514350)) + (i32.add (i32.const 318891107)) + (i32.add (i32.const -2011451096)) + (i32.add (i32.const 1392304247)) + (i32.add (i32.const -163721994)) + (i32.add (i32.const 355254350)) + (i32.add (i32.const -660030573)) + (i32.add (i32.const 983012679)) + (i32.add (i32.const -1045831700)) + (i32.add (i32.const -1101506486)) + (i32.add (i32.const -872011792)) + (i32.add (i32.const 1276950806)) + (i32.add (i32.const 1655043495)) + (i32.add (i32.const 484254493)) + (i32.add (i32.const -1262243263)) + (i32.add (i32.const -482434526)) + (i32.add (i32.const 767680743)) + (i32.add (i32.const 1643282251)) + (i32.add (i32.const 1124886411)) + (i32.add (i32.const -827685250)) + (i32.add (i32.const -1434831886)) + (i32.add (i32.const -2018774100)) + (i32.add (i32.const 1721688565)) + (i32.add (i32.const -1982414905)) + (i32.add (i32.const -1095167645)) + (i32.add (i32.const -797041706)) + (i32.add (i32.const -1079661929)) + (i32.add (i32.const 368444257)) + (i32.add (i32.const 581876632)) + (i32.add (i32.const 1772288034)) + (i32.add (i32.const 2070086126)) + (i32.add (i32.const 804624471)) + (i32.add (i32.const 118931051)) + (i32.add (i32.const -2013871808)) + (i32.add (i32.const -916862086)) + (i32.add (i32.const -1746657531)) + (i32.add (i32.const 2020849881)) + (i32.add (i32.const 1546850676)) + (i32.add (i32.const 52234869)) + (i32.add (i32.const -1615917884)) + (i32.add (i32.const -1198002258)) + (i32.add (i32.const -342554229)) + (i32.add (i32.const 1567819551)) + (i32.add (i32.const -276288301)) + (i32.add (i32.const 1689982630)) + (i32.add (i32.const -1042962167)) + (i32.add (i32.const 862022304)) + (i32.add (i32.const -668707516)) + (i32.add (i32.const 1317599950)) + (i32.add (i32.const 888843931)) + (i32.add (i32.const 1108593211)) + (i32.add (i32.const 130047374)) + (i32.add (i32.const 369682055)) + (i32.add (i32.const -383414551)) + (i32.add (i32.const -788056030)) + (i32.add (i32.const 1120909054)) + (i32.add (i32.const 1229300638)) + (i32.add (i32.const -1908708559)) + (i32.add (i32.const 1398635893)) + (i32.add (i32.const 1570667326)) + (i32.add (i32.const -1426266581)) + (i32.add (i32.const 1671446492)) + (i32.add (i32.const 1340861263)) + (i32.add (i32.const 725729640)) + (i32.add (i32.const -2127495620)) + (i32.add (i32.const 1461576059)) + (i32.add (i32.const 2131235824)) + (i32.add (i32.const -2057268707)) + (i32.add (i32.const -1029199618)) + (i32.add (i32.const 45161388)) + (i32.add (i32.const -2055452020)) + (i32.add (i32.const 1565142849)) + (i32.add (i32.const 1883943035)) + (i32.add (i32.const -200079892)) + (i32.add (i32.const 1002986541)) + (i32.add (i32.const -845460723)) + (i32.add (i32.const -1244004829)) + (i32.add (i32.const 923329209)) + (i32.add (i32.const 1100320521)) + (i32.add (i32.const 60805448)) + (i32.add (i32.const -922371978)) + (i32.add (i32.const 1014206508)) + (i32.add (i32.const -1815710054)) + (i32.add (i32.const -759956048)) + (i32.add (i32.const -553386495)) + (i32.add (i32.const 1667870665)) + (i32.add (i32.const -290761840)) + (i32.add (i32.const -1055387690)) + (i32.add (i32.const -1742697682)) + (i32.add (i32.const -57904809)) + (i32.add (i32.const -1463738569)) + (i32.add (i32.const 490342168)) + (i32.add (i32.const 622731499)) + (i32.add (i32.const 1742766006)) + (i32.add (i32.const -1678113674)) + (i32.add (i32.const -447376617)) + (i32.add (i32.const -1169111134)) + (i32.add (i32.const -767329749)) + (i32.add (i32.const -390950909)) + (i32.add (i32.const -1959928026)) + (i32.add (i32.const 1112383291)) + (i32.add (i32.const 1442619281)) + (i32.add (i32.const -203479088)) + (i32.add (i32.const -537963042)) + (i32.add (i32.const 1937443264)) + (i32.add (i32.const 573880516)) + (i32.add (i32.const -1319606881)) + (i32.add (i32.const 1580962897)) + (i32.add (i32.const -1664673360)) + (i32.add (i32.const -1314686422)) + (i32.add (i32.const 46994490)) + (i32.add (i32.const 472002652)) + (i32.add (i32.const 1851891516)) + (i32.add (i32.const 2054610192)) + (i32.add (i32.const -1311576284)) + (i32.add (i32.const 323310832)) + (i32.add (i32.const -733483421)) + (i32.add (i32.const -174541009)) + (i32.add (i32.const 1485598227)) + (i32.add (i32.const 972612155)) + (i32.add (i32.const 1568013710)) + (i32.add (i32.const 1638142368)) + (i32.add (i32.const -946940424)) + (i32.add (i32.const 1916779331)) + (i32.add (i32.const -1227023335)) + (i32.add (i32.const -1851643606)) + (i32.add (i32.const 1982418614)) + (i32.add (i32.const 676027615)) + (i32.add (i32.const 1415200079)) + (i32.add (i32.const -576663506)) + (i32.add (i32.const 305515807)) + (i32.add (i32.const -1959695805)) + (i32.add (i32.const 977871963)) + (i32.add (i32.const 4096178)) + (i32.add (i32.const 577869422)) + (i32.add (i32.const 2095761489)) + (i32.add (i32.const -1549451066)) + (i32.add (i32.const -1087043425)) + (i32.add (i32.const 19285345)) + (i32.add (i32.const 848591100)) + (i32.add (i32.const -191711041)) + (i32.add (i32.const -511722505)) + (i32.add (i32.const 882023194)) + (i32.add (i32.const 1197056571)) + (i32.add (i32.const 1251320179)) + (i32.add (i32.const -1575000494)) + (i32.add (i32.const 1461442414)) + (i32.add (i32.const -1077685550)) + (i32.add (i32.const 38182177)) + (i32.add (i32.const -1280140173)) + (i32.add (i32.const 1096641632)) + (i32.add (i32.const -549379823)) + (i32.add (i32.const -1894661432)) + (i32.add (i32.const -839483115)) + (i32.add (i32.const -1660127692)) + (i32.add (i32.const 170172393)) + (i32.add (i32.const -1838568080)) + (i32.add (i32.const 1188111319)) + (i32.add (i32.const 630224809)) + (i32.add (i32.const 303358631)) + (i32.add (i32.const -964800938)) + (i32.add (i32.const 508316718)) + (i32.add (i32.const 1881457925)) + (i32.add (i32.const -1250210297)) + (i32.add (i32.const 294590146)) + (i32.add (i32.const -205054945)) + (i32.add (i32.const 1381746584)) + (i32.add (i32.const -901272564)) + (i32.add (i32.const -1484377570)) + (i32.add (i32.const -1550715139)) + (i32.add (i32.const 1449764913)) + (i32.add (i32.const 1895467403)) + (i32.add (i32.const -1119253005)) + (i32.add (i32.const -1236453406)) + (i32.add (i32.const 1338250402)) + (i32.add (i32.const 1672840651)) + (i32.add (i32.const -1843950356)) + (i32.add (i32.const 956115219)) + (i32.add (i32.const -1118027222)) + (i32.add (i32.const 1200552489)) + (i32.add (i32.const -1041803022)) + (i32.add (i32.const 1467136558)) + (i32.add (i32.const 1943950262)) + (i32.add (i32.const -298124288)) + (i32.add (i32.const -2019690102)) + (i32.add (i32.const 1891931262)) + (i32.add (i32.const 257726437)) + (i32.add (i32.const -1963059548)) + (i32.add (i32.const -1519452032)) + (i32.add (i32.const -1061032563)) + (i32.add (i32.const -1312071827)) + (i32.add (i32.const 257940510)) + (i32.add (i32.const -13521009)) + (i32.add (i32.const -669056397)) + (i32.add (i32.const 1099225201)) + (i32.add (i32.const -454646770)) + (i32.add (i32.const -1328458695)) + (i32.add (i32.const 139037250)) + (i32.add (i32.const 273528863)) + (i32.add (i32.const 1967159908)) + (i32.add (i32.const -1486962917)) + (i32.add (i32.const -1374008061)) + (i32.add (i32.const -1477919207)) + (i32.add (i32.const -1665548727)) + (i32.add (i32.const -67762156)) + (i32.add (i32.const -1378244011)) + (i32.add (i32.const 140442688)) + (i32.add (i32.const 1268802472)) + (i32.add (i32.const -784880664)) + (i32.add (i32.const 1134379706)) + (i32.add (i32.const 54829705)) + (i32.add (i32.const -1285644539)) + (i32.add (i32.const -1971417243)) + (i32.add (i32.const -1251191955)) + (i32.add (i32.const 405723457)) + (i32.add (i32.const -1859009064)) + (i32.add (i32.const -1901503204)) + (i32.add (i32.const -610236373)) + (i32.add (i32.const -1432952571)) + (i32.add (i32.const -874123164)) + (i32.add (i32.const 876009268)) + (i32.add (i32.const -23393240)) + (i32.add (i32.const -1972858028)) + (i32.add (i32.const 1392647274)) + (i32.add (i32.const 1911072893)) + (i32.add (i32.const 1597725113)) + (i32.add (i32.const -1025879542)) + (i32.add (i32.const 1061101132)) + (i32.add (i32.const -126165619)) + (i32.add (i32.const 732916869)) + (i32.add (i32.const 2080519844)) + (i32.add (i32.const 2141223206)) + (i32.add (i32.const -97725785)) + (i32.add (i32.const -1433454934)) + (i32.add (i32.const -1846513579)) + (i32.add (i32.const 1849775925)) + (i32.add (i32.const 703976631)) + (i32.add (i32.const -893468325)) + (i32.add (i32.const -95820037)) + (i32.add (i32.const 1564464450)) + (i32.add (i32.const -516146621)) + (i32.add (i32.const -1239341162)) + (i32.add (i32.const -1903138188)) + (i32.add (i32.const -9258787)) + (i32.add (i32.const 1032067612)) + (i32.add (i32.const 2113216252)) + (i32.add (i32.const -869024283)) + (i32.add (i32.const -314449432)) + (i32.add (i32.const 233522714)) + (i32.add (i32.const -863515579)) + (i32.add (i32.const -843065966)) + (i32.add (i32.const 469596288)) + (i32.add (i32.const 949774238)) + (i32.add (i32.const -1810223126)) + (i32.add (i32.const -387367766)) + (i32.add (i32.const -394805327)) + (i32.add (i32.const -1885598318)) + (i32.add (i32.const -1772819184)) + (i32.add (i32.const -2136989155)) + (i32.add (i32.const 1107129813)) + (i32.add (i32.const 1878362343)) + (i32.add (i32.const 517053123)) + (i32.add (i32.const 1015957942)) + (i32.add (i32.const 1610614867)) + (i32.add (i32.const 1438518464)) + (i32.add (i32.const -1073335491)) + (i32.add (i32.const -1934701029)) + (i32.add (i32.const -2115376012)) + (i32.add (i32.const 774792105)) + (i32.add (i32.const -280472288)) + (i32.add (i32.const 2039830165)) + (i32.add (i32.const 1691890266)) + (i32.add (i32.const -1394434925)) + (i32.add (i32.const -286337325)) + (i32.add (i32.const -1555541697)) + (i32.add (i32.const 753923080)) + (i32.add (i32.const 1515303888)) + (i32.add (i32.const 1407882806)) + (i32.add (i32.const 858614412)) + (i32.add (i32.const 168590013)) + (i32.add (i32.const 1361861148)) + (i32.add (i32.const 1663923933)) + (i32.add (i32.const 870916575)) + (i32.add (i32.const -471228458)) + (i32.add (i32.const 1096902488)) + (i32.add (i32.const 920485564)) + (i32.add (i32.const -492325396)) + (i32.add (i32.const 2094866359)) + (i32.add (i32.const -206958569)) + (i32.add (i32.const 1781382030)) + (i32.add (i32.const 285077551)) + (i32.add (i32.const 1646375888)) + (i32.add (i32.const 2123122855)) + (i32.add (i32.const 731699660)) + (i32.add (i32.const 683462185)) + (i32.add (i32.const -1203928632)) + (i32.add (i32.const -2095512282)) + (i32.add (i32.const 1218878467)) + (i32.add (i32.const 1544369881)) + (i32.add (i32.const 1748568066)) + (i32.add (i32.const -1743413788)) + (i32.add (i32.const 792495466)) + (i32.add (i32.const 1272718867)) + (i32.add (i32.const 78802686)) + (i32.add (i32.const -1892080733)) + (i32.add (i32.const 1808950150)) + (i32.add (i32.const -804408796)) + (i32.add (i32.const -427034332)) + (i32.add (i32.const -1419134106)) + (i32.add (i32.const 2028911926)) + (i32.add (i32.const 1469576281)) + (i32.add (i32.const -1686672843)) + (i32.add (i32.const -1946581352)) + (i32.add (i32.const -1342814953)) + (i32.add (i32.const 1435341343)) + (i32.add (i32.const 554528303)) + (i32.add (i32.const -1148508128)) + (i32.add (i32.const -52807284)) + (i32.add (i32.const -634684579)) + (i32.add (i32.const 528225913)) + (i32.add (i32.const 1935380284)) + (i32.add (i32.const 2141283843)) + (i32.add (i32.const 1275243327)) + (i32.add (i32.const 1740687294)) + (i32.add (i32.const -1904998508)) + (i32.add (i32.const -1061917345)) + (i32.add (i32.const 749387315)) + (i32.add (i32.const 1651179329)) + (i32.add (i32.const -60482403)) + (i32.add (i32.const -61429217)) + (i32.add (i32.const 628152167)) + (i32.add (i32.const -1113238673)) + (i32.add (i32.const 337393831)) + (i32.add (i32.const 1300043114)) + (i32.add (i32.const 109236361)) + (i32.add (i32.const 2029468331)) + (i32.add (i32.const 951787582)) + (i32.add (i32.const -860655840)) + (i32.add (i32.const 742172696)) + (i32.add (i32.const 1414495410)) + (i32.add (i32.const 1367461598)) + (i32.add (i32.const -455288255)) + (i32.add (i32.const 1243578509)) + (i32.add (i32.const -97530222)) + (i32.add (i32.const 252893048)) + (i32.add (i32.const 397945408)) + (i32.add (i32.const -1889423528)) + (i32.add (i32.const 629829063)) + (i32.add (i32.const 859175272)) + (i32.add (i32.const 1055440713)) + (i32.add (i32.const -1111362880)) + (i32.add (i32.const 1191995039)) + (i32.add (i32.const 1563813589)) + (i32.add (i32.const -131207603)) + (i32.add (i32.const -964538315)) + (i32.add (i32.const -1236215086)) + (i32.add (i32.const 1669105398)) + (i32.add (i32.const 265431063)) + (i32.add (i32.const 1931173738)) + (i32.add (i32.const -624301844)) + (i32.add (i32.const 1271053882)) + (i32.add (i32.const 201506395)) + (i32.add (i32.const -1287467203)) + (i32.add (i32.const -1221197992)) + (i32.add (i32.const 1837883201)) + (i32.add (i32.const -1205547423)) + (i32.add (i32.const 1873451873)) + (i32.add (i32.const 628546022)) + (i32.add (i32.const -1668448800)) + (i32.add (i32.const 152824839)) + (i32.add (i32.const 798108598)) + (i32.add (i32.const 857362272)) + (i32.add (i32.const 198527553)) + (i32.add (i32.const -651887917)) + (i32.add (i32.const -1406603293)) + (i32.add (i32.const -1413391553)) + (i32.add (i32.const -452096208)) + (i32.add (i32.const 882923630)) + (i32.add (i32.const -655697611)) + (i32.add (i32.const 202773372)) + (i32.add (i32.const -1382108908)) + (i32.add (i32.const -452879169)) + (i32.add (i32.const 681548511)) + (i32.add (i32.const -277500681)) + (i32.add (i32.const 545169181)) + (i32.add (i32.const -428305447)) + (i32.add (i32.const 1451551369)) + (i32.add (i32.const 1035852863)) + (i32.add (i32.const 512726548)) + (i32.add (i32.const -930524311)) + (i32.add (i32.const 1870773101)) + (i32.add (i32.const 901965448)) + (i32.add (i32.const -576425834)) + (i32.add (i32.const 351084350)) + (i32.add (i32.const -1291225113)) + (i32.add (i32.const -487396110)) + (i32.add (i32.const -590654550)) + (i32.add (i32.const 897238501)) + (i32.add (i32.const -81110220)) + (i32.add (i32.const 1237525562)) + (i32.add (i32.const -1961825536)) + (i32.add (i32.const -1057442122)) + (i32.add (i32.const -697868336)) + (i32.add (i32.const -2021643440)) + (i32.add (i32.const 1666073752)) + (i32.add (i32.const -483336792)) + (i32.add (i32.const 514461942)) + (i32.add (i32.const -488896700)) + (i32.add (i32.const 1320677228)) + (i32.add (i32.const 1443594811)) + (i32.add (i32.const 847305938)) + (i32.add (i32.const -595578695)) + (i32.add (i32.const -192978101)) + (i32.add (i32.const 2031566241)) + (i32.add (i32.const 172612862)) + (i32.add (i32.const -597183810)) + (i32.add (i32.const 946968274)) + (i32.add (i32.const 1888660215)) + (i32.add (i32.const -2020029929)) + (i32.add (i32.const 1161035215)) + (i32.add (i32.const -668163661)) + (i32.add (i32.const -964152056)) + (i32.add (i32.const -860208907)) + (i32.add (i32.const 1770621526)) + (i32.add (i32.const -300767501)) + (i32.add (i32.const -988920211)) + (i32.add (i32.const -811514429)) + (i32.add (i32.const 1042906444)) + (i32.add (i32.const 1914789783)) + (i32.add (i32.const -1930664832)) + (i32.add (i32.const 114332389)) + (i32.add (i32.const -942532061)) + (i32.add (i32.const -1582562505)) + (i32.add (i32.const 102127584)) + (i32.add (i32.const 241680401)) + (i32.add (i32.const -804334260)) + (i32.add (i32.const -528561060)) + (i32.add (i32.const 1381797756)) + (i32.add (i32.const 800196000)) + (i32.add (i32.const 130008983)) + (i32.add (i32.const -11400201)) + (i32.add (i32.const 1641606101)) + (i32.add (i32.const 531530183)) + (i32.add (i32.const 1018637582)) + (i32.add (i32.const 1666302089)) + (i32.add (i32.const 774941105)) + (i32.add (i32.const 1343717856)) + (i32.add (i32.const 125791375)) + (i32.add (i32.const -158701661)) + (i32.add (i32.const -96990682)) + (i32.add (i32.const 2144414261)) + (i32.add (i32.const 1459604760)) + (i32.add (i32.const 2009556041)) + (i32.add (i32.const -1069379734)) + (i32.add (i32.const 1106055593)) + (i32.add (i32.const -1240098588)) + (i32.add (i32.const -1213802987)) + (i32.add (i32.const 735180836)) + (i32.add (i32.const -883733202)) + (i32.add (i32.const 625583145)) + (i32.add (i32.const 1001161786)) + (i32.add (i32.const 1859010859)) + (i32.add (i32.const 1413062624)) + (i32.add (i32.const -1366959057)) + (i32.add (i32.const 263908153)) + (i32.add (i32.const -817551118)) + (i32.add (i32.const 949346241)) + (i32.add (i32.const 619474396)) + (i32.add (i32.const 1964750969)) + (i32.add (i32.const 1610153036)) + (i32.add (i32.const -393816219)) + (i32.add (i32.const 368426987)) + (i32.add (i32.const -528413005)) + (i32.add (i32.const 298524205)) + (i32.add (i32.const 595477817)) + (i32.add (i32.const 1294247088)) + (i32.add (i32.const 1688018983)) + (i32.add (i32.const -1434115357)) + (i32.add (i32.const 16117666)) + (i32.add (i32.const 363935642)) + (i32.add (i32.const -1144734969)) + (i32.add (i32.const -704051197)) + (i32.add (i32.const 1424596467)) + (i32.add (i32.const 83702353)) + (i32.add (i32.const 598988583)) + (i32.add (i32.const 1077669503)) + (i32.add (i32.const 1263175356)) + (i32.add (i32.const 1530399855)) + (i32.add (i32.const -510688699)) + (i32.add (i32.const 923245747)) + (i32.add (i32.const 791601887)) + (i32.add (i32.const -1523610703)) + (i32.add (i32.const 778826063)) + (i32.add (i32.const -851444002)) + (i32.add (i32.const -1292704448)) + (i32.add (i32.const 1068270811)) + (i32.add (i32.const 562535820)) + (i32.add (i32.const 1785662322)) + (i32.add (i32.const 789628223)) + (i32.add (i32.const 2040198188)) + (i32.add (i32.const -1731753135)) + (i32.add (i32.const -1437301786)) + (i32.add (i32.const -89598592)) + (i32.add (i32.const -272290545)) + (i32.add (i32.const -1703574067)) + (i32.add (i32.const 35636428)) + (i32.add (i32.const 253115709)) + (i32.add (i32.const 1685033584)) + (i32.add (i32.const 1415552290)) + (i32.add (i32.const 1860071413)) + (i32.add (i32.const -1963757635)) + (i32.add (i32.const -342536222)) + (i32.add (i32.const 978844290)) + (i32.add (i32.const 1132162924)) + (i32.add (i32.const -969888176)) + (i32.add (i32.const -1123194405)) + (i32.add (i32.const -694748221)) + (i32.add (i32.const -2121386810)) + (i32.add (i32.const -573114171)) + (i32.add (i32.const 2081528250)) + (i32.add (i32.const 1925764786)) + (i32.add (i32.const -1769259448)) + (i32.add (i32.const 1160964864)) + (i32.add (i32.const 1980641039)) + (i32.add (i32.const -1707093523)) + (i32.add (i32.const 17758896)) + (i32.add (i32.const -1289496228)) + (i32.add (i32.const -1902466322)) + (i32.add (i32.const 1627662727)) + (i32.add (i32.const -787056323)) + (i32.add (i32.const 191149279)) + (i32.add (i32.const 1513217396)) + (i32.add (i32.const 705263977)) + (i32.add (i32.const -1183281799)) + (i32.add (i32.const -565619968)) + (i32.add (i32.const 1269427213)) + (i32.add (i32.const -56192516)) + (i32.add (i32.const 1751502710)) + (i32.add (i32.const -1159520815)) + (i32.add (i32.const -1683723126)) + (i32.add (i32.const 784890973)) + (i32.add (i32.const -1656004395)) + (i32.add (i32.const -150701616)) + (i32.add (i32.const -1121746763)) + (i32.add (i32.const -907804830)) + (i32.add (i32.const -412971054)) + (i32.add (i32.const -316916494)) + (i32.add (i32.const -773110722)) + (i32.add (i32.const 231846713)) + (i32.add (i32.const -665364475)) + (i32.add (i32.const 1516094241)) + (i32.add (i32.const -586340861)) + (i32.add (i32.const -563164616)) + (i32.add (i32.const -792412148)) + (i32.add (i32.const 462498995)) + (i32.add (i32.const 1204742785)) + (i32.add (i32.const -527015680)) + (i32.add (i32.const 2082389270)) + (i32.add (i32.const -953684765)) + (i32.add (i32.const 2036740362)) + (i32.add (i32.const 1642946615)) + (i32.add (i32.const 1652783364)) + (i32.add (i32.const 1396963193)) + (i32.add (i32.const -48062978)) + (i32.add (i32.const -928062054)) + (i32.add (i32.const 1918973332)) + (i32.add (i32.const -526568501)) + (i32.add (i32.const -1954263288)) + (i32.add (i32.const -692740906)) + (i32.add (i32.const -1992128979)) + (i32.add (i32.const -1203701672)) + (i32.add (i32.const -1170638476)) + (i32.add (i32.const -1782937588)) + (i32.add (i32.const 1108557815)) + (i32.add (i32.const -513125821)) + (i32.add (i32.const 1692224167)) + (i32.add (i32.const -616459771)) + (i32.add (i32.const 2050676599)) + (i32.add (i32.const -1296693673)) + (i32.add (i32.const 430357011)) + (i32.add (i32.const -633155911)) + (i32.add (i32.const -1810569980)) + (i32.add (i32.const 2045571221)) + (i32.add (i32.const -1970945090)) + (i32.add (i32.const 1422211318)) + (i32.add (i32.const 1944849527)) + (i32.add (i32.const 938179469)) + (i32.add (i32.const -1156264385)) + (i32.add (i32.const -144538726)) + (i32.add (i32.const 384697536)) + (i32.add (i32.const 1023090454)) + (i32.add (i32.const -1889139170)) + (i32.add (i32.const 1049617690)) + (i32.add (i32.const -754244005)) + (i32.add (i32.const 215306256)) + (i32.add (i32.const -899724688)) + (i32.add (i32.const 964479472)) + (i32.add (i32.const -221452352)) + (i32.add (i32.const 1977157231)) + (i32.add (i32.const 341148613)) + (i32.add (i32.const 306359468)) + (i32.add (i32.const 1778759471)) + (i32.add (i32.const -1773417631)) + (i32.add (i32.const 1920767473)) + (i32.add (i32.const 361992974)) + (i32.add (i32.const -703002522)) + (i32.add (i32.const -937731066)) + (i32.add (i32.const -1951447747)) + (i32.add (i32.const 860438161)) + (i32.add (i32.const -1408037848)) + (i32.add (i32.const -1948772655)) + (i32.add (i32.const -780988391)) + (i32.add (i32.const 2133285278)) + (i32.add (i32.const 1743647918)) + (i32.add (i32.const 1126977401)) + (i32.add (i32.const 337118259)) + (i32.add (i32.const 48451647)) + (i32.add (i32.const -732064119)) + (i32.add (i32.const -1905019079)) + (i32.add (i32.const 1763013951)) + (i32.add (i32.const -1726701788)) + (i32.add (i32.const -1124552182)) + (i32.add (i32.const -443178368)) + (i32.add (i32.const -1636529991)) + (i32.add (i32.const -225461615)) + (i32.add (i32.const 565165751)) + (i32.add (i32.const 278647837)) + (i32.add (i32.const -1777227173)) + (i32.add (i32.const 566816963)) + (i32.add (i32.const -829537830)) + (i32.add (i32.const 1745260873)) + (i32.add (i32.const -2097313574)) + (i32.add (i32.const 1078563631)) + (i32.add (i32.const 2043853772)) + (i32.add (i32.const -435294605)) + (i32.add (i32.const -487798809)) + (i32.add (i32.const 1541077270)) + (i32.add (i32.const 1030622720)) + (i32.add (i32.const -1699018565)) + (i32.add (i32.const -62155778)) + (i32.add (i32.const -698397040)) + (i32.add (i32.const -651059544)) + (i32.add (i32.const -837583594)) + (i32.add (i32.const -186065657)) + (i32.add (i32.const 2065044902)) + (i32.add (i32.const 1045752341)) + (i32.add (i32.const 1977512008)) + (i32.add (i32.const 1287288954)) + (i32.add (i32.const -1509167620)) + (i32.add (i32.const -469937114)) + (i32.add (i32.const -1452363043)) + (i32.add (i32.const 622388988)) + (i32.add (i32.const -391058742)) + (i32.add (i32.const -1481575797)) + (i32.add (i32.const 1414012142)) + (i32.add (i32.const -626895247)) + (i32.add (i32.const 938004276)) + (i32.add (i32.const 1690355836)) + (i32.add (i32.const -1818915959)) + (i32.add (i32.const -1169666696)) + (i32.add (i32.const -1516251782)) + (i32.add (i32.const -1154326883)) + (i32.add (i32.const -1825034168)) + (i32.add (i32.const 567580588)) + (i32.add (i32.const 752384655)) + (i32.add (i32.const -558868395)) + (i32.add (i32.const -254267488)) + (i32.add (i32.const 562676945)) + (i32.add (i32.const 1402419285)) + (i32.add (i32.const 1716888720)) + (i32.add (i32.const -1181992583)) + (i32.add (i32.const 1756034162)) + (i32.add (i32.const 492845328)) + (i32.add (i32.const 89677429)) + (i32.add (i32.const -149760127)) + (i32.add (i32.const 1832567204)) + (i32.add (i32.const -743455901)) + (i32.add (i32.const -762547065)) + (i32.add (i32.const -1888913297)) + (i32.add (i32.const -579625833)) + (i32.add (i32.const -2016141999)) + (i32.add (i32.const 663726741)) + (i32.add (i32.const -773245147)) + (i32.add (i32.const -705528113)) + (i32.add (i32.const -1750579832)) + (i32.add (i32.const 1528409596)) + (i32.add (i32.const -858117264)) + (i32.add (i32.const -685587716)) + (i32.add (i32.const -1045548664)) + (i32.add (i32.const -1957554351)) + (i32.add (i32.const -350796956)) + (i32.add (i32.const -22350816)) + (i32.add (i32.const -2110526651)) + (i32.add (i32.const -830155181)) + (i32.add (i32.const 244995611)) + (i32.add (i32.const 1799292908)) + (i32.add (i32.const -718254194)) + (i32.add (i32.const 303385517)) + (i32.add (i32.const 2109107987)) + (i32.add (i32.const -2022414891)) + (i32.add (i32.const -1627503222)) + (i32.add (i32.const -1426776889)) + (i32.add (i32.const 1278259762)) + (i32.add (i32.const -1233926301)) + (i32.add (i32.const -380624438)) + (i32.add (i32.const 532242728)) + (i32.add (i32.const -425449889)) + (i32.add (i32.const -398903537)) + (i32.add (i32.const 1279542826)) + (i32.add (i32.const -1061066762)) + (i32.add (i32.const 1026701426)) + (i32.add (i32.const -1537593951)) + (i32.add (i32.const 1201279933)) + (i32.add (i32.const -470581829)) + (i32.add (i32.const 33862576)) + (i32.add (i32.const -2099975261)) + (i32.add (i32.const -208331973)) + (i32.add (i32.const -1002011727)) + (i32.add (i32.const -1724710638)) + (i32.add (i32.const 1004453003)) + (i32.add (i32.const -601790224)) + (i32.add (i32.const 728829158)) + (i32.add (i32.const 1185670369)) + (i32.add (i32.const 2118083238)) + (i32.add (i32.const 1295808029)) + (i32.add (i32.const -620570144)) + (i32.add (i32.const 1617564460)) + (i32.add (i32.const -720554669)) + (i32.add (i32.const -458139520)) + (i32.add (i32.const -165709774)) + (i32.add (i32.const 2092421889)) + (i32.add (i32.const 1704915197)) + (i32.add (i32.const -1550031038)) + (i32.add (i32.const 156555538)) + (i32.add (i32.const -443440644)) + (i32.add (i32.const 367165041)) + (i32.add (i32.const -1184517567)) + (i32.add (i32.const 356040809)) + (i32.add (i32.const 1810842323)) + (i32.add (i32.const 2062236635)) + (i32.add (i32.const 1686199291)) + (i32.add (i32.const -264032873)) + (i32.add (i32.const -347556986)) + (i32.add (i32.const -129747353)) + (i32.add (i32.const 757374609)) + (i32.add (i32.const -1859306698)) + (i32.add (i32.const 1590528112)) + (i32.add (i32.const 353031322)) + (i32.add (i32.const -444069532)) + (i32.add (i32.const -1998646100)) + (i32.add (i32.const -470300023)) + (i32.add (i32.const -523451103)) + (i32.add (i32.const 1404535016)) + (i32.add (i32.const -242797784)) + (i32.add (i32.const 2136656985)) + (i32.add (i32.const -276909040)) + (i32.add (i32.const 295127003)) + (i32.add (i32.const 1332887942)) + (i32.add (i32.const 1284614040)) + (i32.add (i32.const -1480227275)) + (i32.add (i32.const 1944681808)) + (i32.add (i32.const -924788662)) + (i32.add (i32.const -1303926453)) + (i32.add (i32.const -1173963169)) + (i32.add (i32.const -509659692)) + (i32.add (i32.const -391579803)) + (i32.add (i32.const 1840729132)) + (i32.add (i32.const -1608685376)) + (i32.add (i32.const -1774411761)) + (i32.add (i32.const 1832889622)) + (i32.add (i32.const 971012088)) + (i32.add (i32.const 500544255)) + (i32.add (i32.const -1163653694)) + (i32.add (i32.const 1708947165)) + (i32.add (i32.const 921636240)) + (i32.add (i32.const 1162411917)) + (i32.add (i32.const 1569480331)) + (i32.add (i32.const -1437359373)) + (i32.add (i32.const 1231478794)) + (i32.add (i32.const 419920181)) + (i32.add (i32.const 2093426352)) + (i32.add (i32.const 607378867)) + (i32.add (i32.const -1678102212)) + (i32.add (i32.const -1765898663)) + (i32.add (i32.const 923497471)) + (i32.add (i32.const -1537454447)) + (i32.add (i32.const 1546814983)) + (i32.add (i32.const 2104208310)) + (i32.add (i32.const 1145810213)) + (i32.add (i32.const 303490567)) + (i32.add (i32.const -2003903060)) + (i32.add (i32.const 1494390011)) + (i32.add (i32.const 1884251707)) + (i32.add (i32.const 1000194173)) + (i32.add (i32.const -880402854)) + (i32.add (i32.const -411846985)) + (i32.add (i32.const -385158295)) + (i32.add (i32.const -1872747930)) + (i32.add (i32.const -116836511)) + (i32.add (i32.const 1945932888)) + (i32.add (i32.const 1354372328)) + (i32.add (i32.const 1560120340)) + (i32.add (i32.const -617394409)) + (i32.add (i32.const 332634400)) + (i32.add (i32.const 1392609750)) + (i32.add (i32.const -816956019)) + (i32.add (i32.const -877509500)) + (i32.add (i32.const -2120589293)) + (i32.add (i32.const -1080478130)) + (i32.add (i32.const 1106180183)) + (i32.add (i32.const 1639215678)) + (i32.add (i32.const 498407531)) + (i32.add (i32.const -1924514378)) + (i32.add (i32.const -1661160357)) + (i32.add (i32.const 973530063)) + (i32.add (i32.const 2032257200)) + (i32.add (i32.const -1277636036)) + (i32.add (i32.const -1786435140)) + (i32.add (i32.const -2141933167)) + (i32.add (i32.const 1334420633)) + (i32.add (i32.const -1689172207)) + (i32.add (i32.const -842411690)) + (i32.add (i32.const 1354328385)) + (i32.add (i32.const 1375083472)) + (i32.add (i32.const -1196768754)) + (i32.add (i32.const 2090028846)) + (i32.add (i32.const 194393267)) + (i32.add (i32.const 1122342319)) + (i32.add (i32.const -1920760235)) + (i32.add (i32.const 924069648)) + (i32.add (i32.const 806921655)) + (i32.add (i32.const -1744964273)) + (i32.add (i32.const 289688347)) + (i32.add (i32.const 964438358)) + (i32.add (i32.const -1838844059)) + (i32.add (i32.const -1783696424)) + (i32.add (i32.const -785246926)) + (i32.add (i32.const -1443780335)) + (i32.add (i32.const 240495321)) + (i32.add (i32.const -567479738)) + (i32.add (i32.const -2079707200)) + (i32.add (i32.const 532530678)) + (i32.add (i32.const -2016942046)) + (i32.add (i32.const -1949899641)) + (i32.add (i32.const 1058208614)) + (i32.add (i32.const 992259690)) + (i32.add (i32.const -1332877674)) + (i32.add (i32.const -2072843628)) + (i32.add (i32.const 1445904481)) + (i32.add (i32.const 91936559)) + (i32.add (i32.const 723345677)) + (i32.add (i32.const 1702239153)) + (i32.add (i32.const -1373781737)) + (i32.add (i32.const 254105323)) + (i32.add (i32.const 1340522664)) + (i32.add (i32.const 1854396472)) + (i32.add (i32.const 635678030)) + (i32.add (i32.const -861966413)) + (i32.add (i32.const -1740534964)) + (i32.add (i32.const 1983572834)) + (i32.add (i32.const -1728265720)) + (i32.add (i32.const -1750156150)) + (i32.add (i32.const -174998476)) + (i32.add (i32.const 1248674741)) + (i32.add (i32.const 1184926306)) + (i32.add (i32.const -545451763)) + (i32.add (i32.const 211455455)) + (i32.add (i32.const -174946727)) + (i32.add (i32.const -1977055778)) + (i32.add (i32.const 1113689726)) + (i32.add (i32.const -123585965)) + (i32.add (i32.const 1237311596)) + (i32.add (i32.const -1503715612)) + (i32.add (i32.const 2118694683)) + (i32.add (i32.const 524299732)) + (i32.add (i32.const -1985188837)) + (i32.add (i32.const -491578392)) + (i32.add (i32.const 1689057676)) + (i32.add (i32.const -34295463)) + (i32.add (i32.const -2137395596)) + (i32.add (i32.const -348231201)) + (i32.add (i32.const -1281944743)) + (i32.add (i32.const -1107296137)) + (i32.add (i32.const -14798233)) + (i32.add (i32.const -1675964634)) + (i32.add (i32.const -761305571)) + (i32.add (i32.const -1606968734)) + (i32.add (i32.const -1747189334)) + (i32.add (i32.const 1146735670)) + (i32.add (i32.const -1415923738)) + (i32.add (i32.const 65697308)) + (i32.add (i32.const 1258506349)) + (i32.add (i32.const -1807495923)) + (i32.add (i32.const 1509879797)) + (i32.add (i32.const -1144112181)) + (i32.add (i32.const 1580986366)) + (i32.add (i32.const 2056069013)) + (i32.add (i32.const -293806550)) + (i32.add (i32.const 975327032)) + (i32.add (i32.const 1623230115)) + (i32.add (i32.const -850766522)) + (i32.add (i32.const 1154715090)) + (i32.add (i32.const -698769301)) + (i32.add (i32.const -497821925)) + (i32.add (i32.const 843636830)) + (i32.add (i32.const 1605853386)) + (i32.add (i32.const 834771442)) + (i32.add (i32.const -1155207439)) + (i32.add (i32.const 1566699265)) + (i32.add (i32.const -591342542)) + (i32.add (i32.const 806140881)) + (i32.add (i32.const 1493245820)) + (i32.add (i32.const -596382033)) + (i32.add (i32.const -2084080868)) + (i32.add (i32.const 1850308851)) + (i32.add (i32.const 1633471424)) + (i32.add (i32.const -1779122373)) + (i32.add (i32.const -1527834867)) + (i32.add (i32.const 1409108249)) + (i32.add (i32.const -359426997)) + (i32.add (i32.const -1609663934)) + (i32.add (i32.const 1242300535)) + (i32.add (i32.const -46185955)) + (i32.add (i32.const 1881118495)) + (i32.add (i32.const 112084787)) + (i32.add (i32.const 1453639104)) + (i32.add (i32.const -97899573)) + (i32.add (i32.const -986951663)) + (i32.add (i32.const -2069117311)) + (i32.add (i32.const 1895606201)) + (i32.add (i32.const -416344926)) + (i32.add (i32.const -1959961568)) + (i32.add (i32.const -919250591)) + (i32.add (i32.const 258821452)) + (i32.add (i32.const -261167114)) + (i32.add (i32.const -1429790759)) + (i32.add (i32.const 1740030748)) + (i32.add (i32.const -2008478413)) + (i32.add (i32.const -1740035703)) + (i32.add (i32.const -1582346433)) + (i32.add (i32.const 1768700568)) + (i32.add (i32.const -1782979056)) + (i32.add (i32.const -1504446115)) + (i32.add (i32.const 2044337746)) + (i32.add (i32.const -204795682)) + (i32.add (i32.const -547654737)) + (i32.add (i32.const 1240688447)) + (i32.add (i32.const -1002986536)) + (i32.add (i32.const -207510373)) + (i32.add (i32.const 1551395683)) + (i32.add (i32.const -1285942082)) + (i32.add (i32.const 346928178)) + (i32.add (i32.const -1296340897)) + (i32.add (i32.const 967350127)) + (i32.add (i32.const -1029112770)) + (i32.add (i32.const -2120805290)) + (i32.add (i32.const -957354291)) + (i32.add (i32.const -2121203506)) + (i32.add (i32.const -757377983)) + (i32.add (i32.const 1097867708)) + (i32.add (i32.const 1785160927)) + (i32.add (i32.const -2033661254)) + (i32.add (i32.const 100592971)) + (i32.add (i32.const 1019255448)) + (i32.add (i32.const -1687074046)) + (i32.add (i32.const -1663640966)) + (i32.add (i32.const -654089458)) + (i32.add (i32.const -1984798222)) + (i32.add (i32.const 804158769)) + (i32.add (i32.const -1695027867)) + (i32.add (i32.const -279222936)) + (i32.add (i32.const 1765528601)) + (i32.add (i32.const 1402156720)) + (i32.add (i32.const -2127077832)) + (i32.add (i32.const -850568145)) + (i32.add (i32.const -35024397)) + (i32.add (i32.const -633856797)) + (i32.add (i32.const 1721466237)) + (i32.add (i32.const -347378039)) + (i32.add (i32.const 1389819779)) + (i32.add (i32.const -515539191)) + (i32.add (i32.const 1425913016)) + (i32.add (i32.const -898000639)) + (i32.add (i32.const 1441447293)) + (i32.add (i32.const 1322379714)) + (i32.add (i32.const -820993951)) + (i32.add (i32.const 1026405450)) + (i32.add (i32.const 295478902)) + (i32.add (i32.const 980815318)) + (i32.add (i32.const 1769162769)) + (i32.add (i32.const -1641066826)) + (i32.add (i32.const 29675115)) + (i32.add (i32.const -641078106)) + (i32.add (i32.const 1113627112)) + (i32.add (i32.const -922230713)) + (i32.add (i32.const 1409770103)) + (i32.add (i32.const 1267206403)) + (i32.add (i32.const -921745666)) + (i32.add (i32.const -268746078)) + (i32.add (i32.const -1838825951)) + (i32.add (i32.const -266815748)) + (i32.add (i32.const -1596476904)) + (i32.add (i32.const 2136936903)) + (i32.add (i32.const -692111620)) + (i32.add (i32.const 2044154013)) + (i32.add (i32.const -1458776161)) + (i32.add (i32.const 2108097837)) + (i32.add (i32.const 1291411545)) + (i32.add (i32.const -787125127)) + (i32.add (i32.const 716570754)) + (i32.add (i32.const 1936218622)) + (i32.add (i32.const -413043254)) + (i32.add (i32.const -1822648934)) + (i32.add (i32.const 289976773)) + (i32.add (i32.const -110200840)) + (i32.add (i32.const -2097250688)) + (i32.add (i32.const -1914672411)) + (i32.add (i32.const -1383675733)) + (i32.add (i32.const 1147761382)) + (i32.add (i32.const -2000836436)) + (i32.add (i32.const -1139405580)) + (i32.add (i32.const 314178847)) + (i32.add (i32.const -86794208)) + (i32.add (i32.const 1041798673)) + (i32.add (i32.const -1207405095)) + (i32.add (i32.const -1517920780)) + (i32.add (i32.const 1177567260)) + (i32.add (i32.const -1865972371)) + (i32.add (i32.const -1428552323)) + (i32.add (i32.const 1568755369)) + (i32.add (i32.const 1193907896)) + (i32.add (i32.const -836699281)) + (i32.add (i32.const -1447339882)) + (i32.add (i32.const -1429864719)) + (i32.add (i32.const 313206532)) + (i32.add (i32.const -969754153)) + (i32.add (i32.const -1837756530)) + (i32.add (i32.const -1661657305)) + (i32.add (i32.const 1972376395)) + (i32.add (i32.const 1208406458)) + (i32.add (i32.const -1605917569)) + (i32.add (i32.const -72880615)) + (i32.add (i32.const 491022397)) + (i32.add (i32.const -625504539)) + (i32.add (i32.const 1056542497)) + (i32.add (i32.const 1259187795)) + (i32.add (i32.const 937930846)) + (i32.add (i32.const 869957678)) + (i32.add (i32.const -1819399851)) + (i32.add (i32.const -327564007)) + (i32.add (i32.const 1529955267)) + (i32.add (i32.const -421065728)) + (i32.add (i32.const -1555621399)) + (i32.add (i32.const 639066532)) + (i32.add (i32.const -2073371719)) + (i32.add (i32.const -1223703218)) + (i32.add (i32.const -1908476355)) + (i32.add (i32.const -195534321)) + (i32.add (i32.const -1772530116)) + (i32.add (i32.const -2105813605)) + (i32.add (i32.const 398740426)) + (i32.add (i32.const 1235507000)) + (i32.add (i32.const -250372478)) + (i32.add (i32.const -318964384)) + (i32.add (i32.const -581629924)) + (i32.add (i32.const 1749198393)) + (i32.add (i32.const -2072218411)) + (i32.add (i32.const 1932562902)) + (i32.add (i32.const -871754451)) + (i32.add (i32.const 599202986)) + (i32.add (i32.const -1158512456)) + (i32.add (i32.const -1882880269)) + (i32.add (i32.const -1562346517)) + (i32.add (i32.const 2116868671)) + (i32.add (i32.const -1194922430)) + (i32.add (i32.const -121131285)) + (i32.add (i32.const -684832691)) + (i32.add (i32.const 628710109)) + (i32.add (i32.const 1949102733)) + (i32.add (i32.const 1251336064)) + (i32.add (i32.const -2132784920)) + (i32.add (i32.const 1854667384)) + (i32.add (i32.const -740788545)) + (i32.add (i32.const -671107867)) + (i32.add (i32.const -544945863)) + (i32.add (i32.const 319123035)) + (i32.add (i32.const -488142453)) + (i32.add (i32.const 1836597283)) + (i32.add (i32.const -1230400082)) + (i32.add (i32.const 1569285749)) + (i32.add (i32.const 54348060)) + (i32.add (i32.const -1829766378)) + (i32.add (i32.const -1424697569)) + (i32.add (i32.const -48633597)) + (i32.add (i32.const 481235734)) + (i32.add (i32.const -705930432)) + (i32.add (i32.const 753949116)) + (i32.add (i32.const 471862297)) + (i32.add (i32.const 1639933031)) + (i32.add (i32.const -581931010)) + (i32.add (i32.const 596146024)) + (i32.add (i32.const -927686465)) + (i32.add (i32.const -1650875340)) + (i32.add (i32.const -1496622441)) + (i32.add (i32.const -1584243189)) + (i32.add (i32.const 2112584333)) + (i32.add (i32.const 905604444)) + (i32.add (i32.const -1425356251)) + (i32.add (i32.const 1046371356)) + (i32.add (i32.const 781979348)) + (i32.add (i32.const 1578040039)) + (i32.add (i32.const 1029247356)) + (i32.add (i32.const -2091697457)) + (i32.add (i32.const -2125618610)) + (i32.add (i32.const 1919474272)) + (i32.add (i32.const 2072048136)) + (i32.add (i32.const 1034069838)) + (i32.add (i32.const -228301834)) + (i32.add (i32.const 1495108344)) + (i32.add (i32.const 1287522914)) + (i32.add (i32.const -1995198395)) + (i32.add (i32.const -80701693)) + (i32.add (i32.const -404229190)) + (i32.add (i32.const 1027051863)) + (i32.add (i32.const -1293786243)) + (i32.add (i32.const 875066764)) + (i32.add (i32.const -559444680)) + (i32.add (i32.const -557364105)) + (i32.add (i32.const -1088257455)) + (i32.add (i32.const -557885677)) + (i32.add (i32.const 1566570580)) + (i32.add (i32.const 645372295)) + (i32.add (i32.const 1846130214)) + (i32.add (i32.const -1595683948)) + (i32.add (i32.const -392580323)) + (i32.add (i32.const 579011456)) + (i32.add (i32.const -451621491)) + (i32.add (i32.const -1807543901)) + (i32.add (i32.const -1436732277)) + (i32.add (i32.const -2065667683)) + (i32.add (i32.const 1176522375)) + (i32.add (i32.const -1511303811)) + (i32.add (i32.const -730621217)) + (i32.add (i32.const 171046822)) + (i32.add (i32.const -1329412207)) + (i32.add (i32.const 1553250679)) + (i32.add (i32.const -1989789497)) + (i32.add (i32.const 136092462)) + (i32.add (i32.const -1938485859)) + (i32.add (i32.const -924953701)) + (i32.add (i32.const 416925897)) + (i32.add (i32.const -1618865267)) + (i32.add (i32.const -1251755604)) + (i32.add (i32.const 504960407)) + (i32.add (i32.const -1816235638)) + (i32.add (i32.const -1870782547)) + (i32.add (i32.const -1295861231)) + (i32.add (i32.const -577896406)) + (i32.add (i32.const -755194016)) + (i32.add (i32.const 2098015211)) + (i32.add (i32.const 1460483097)) + (i32.add (i32.const 1640913021)) + (i32.add (i32.const 17381983)) + (i32.add (i32.const -1176676249)) + (i32.add (i32.const -1381637365)) + (i32.add (i32.const 1881104310)) + (i32.add (i32.const 1090750363)) + (i32.add (i32.const -656620783)) + (i32.add (i32.const 993745837)) + (i32.add (i32.const -1655868146)) + (i32.add (i32.const 665423831)) + (i32.add (i32.const -699977820)) + (i32.add (i32.const -2091490259)) + (i32.add (i32.const 1846904885)) + (i32.add (i32.const 1733348011)) + (i32.add (i32.const -1778518927)) + (i32.add (i32.const 706670347)) + (i32.add (i32.const -1198841459)) + (i32.add (i32.const -1648934262)) + (i32.add (i32.const 2093513336)) + (i32.add (i32.const 411316372)) + (i32.add (i32.const 450344240)) + (i32.add (i32.const -11333505)) + (i32.add (i32.const -1460210077)) + (i32.add (i32.const -942258584)) + (i32.add (i32.const -268381863)) + (i32.add (i32.const -640995650)) + (i32.add (i32.const 1073500854)) + (i32.add (i32.const -783320015)) + (i32.add (i32.const 944548541)) + (i32.add (i32.const -52154930)) + (i32.add (i32.const 1038620560)) + (i32.add (i32.const 680165760)) + (i32.add (i32.const 1068185438)) + (i32.add (i32.const -174175743)) + (i32.add (i32.const 433701639)) + (i32.add (i32.const 1052433270)) + (i32.add (i32.const 2045870521)) + (i32.add (i32.const -1305755990)) + (i32.add (i32.const -731284234)) + (i32.add (i32.const 1828792271)) + (i32.add (i32.const -380564974)) + (i32.add (i32.const -1771266885)) + (i32.add (i32.const -389454529)) + (i32.add (i32.const 848127689)) + (i32.add (i32.const -8489705)) + (i32.add (i32.const -645884768)) + (i32.add (i32.const 611064547)) + (i32.add (i32.const 833428812)) + (i32.add (i32.const -594146779)) + (i32.add (i32.const -1978599899)) + (i32.add (i32.const -401554532)) + (i32.add (i32.const 675444103)) + (i32.add (i32.const -1395806526)) + (i32.add (i32.const -947758857)) + (i32.add (i32.const -1003509577)) + (i32.add (i32.const 1296221024)) + (i32.add (i32.const -1186865620)) + (i32.add (i32.const -327635861)) + (i32.add (i32.const -2145187065)) + (i32.add (i32.const 401834169)) + (i32.add (i32.const 95043256)) + (i32.add (i32.const -58747100)) + (i32.add (i32.const 1563082410)) + (i32.add (i32.const -1611417332)) + (i32.add (i32.const 1240709754)) + (i32.add (i32.const 174412520)) + (i32.add (i32.const 1310958639)) + (i32.add (i32.const 1368731862)) + (i32.add (i32.const 694964092)) + (i32.add (i32.const -556704119)) + (i32.add (i32.const -2065741845)) + (i32.add (i32.const 1177418280)) + (i32.add (i32.const 309040745)) + (i32.add (i32.const -1562192595)) + (i32.add (i32.const -1177085171)) + (i32.add (i32.const 2027231597)) + (i32.add (i32.const -228691212)) + (i32.add (i32.const 1531642185)) + (i32.add (i32.const 1075599743)) + (i32.add (i32.const -490090855)) + (i32.add (i32.const -1556435680)) + (i32.add (i32.const 523474761)) + (i32.add (i32.const -144585363)) + (i32.add (i32.const 822021993)) + (i32.add (i32.const 1278729674)) + (i32.add (i32.const 2099198072)) + (i32.add (i32.const -1722786720)) + (i32.add (i32.const -1753258127)) + (i32.add (i32.const 1769296154)) + (i32.add (i32.const -953764912)) + (i32.add (i32.const -1535397080)) + (i32.add (i32.const 1222055115)) + (i32.add (i32.const -776467927)) + (i32.add (i32.const -114560794)) + (i32.add (i32.const 1008317147)) + (i32.add (i32.const 1245460272)) + (i32.add (i32.const 382024700)) + (i32.add (i32.const -1562462862)) + (i32.add (i32.const -7841511)) + (i32.add (i32.const -1983131057)) + (i32.add (i32.const -2093346993)) + (i32.add (i32.const -1018948717)) + (i32.add (i32.const 167749710)) + (i32.add (i32.const -1691007220)) + (i32.add (i32.const 289287753)) + (i32.add (i32.const 46156408)) + (i32.add (i32.const 150574350)) + (i32.add (i32.const -1816278443)) + (i32.add (i32.const -2143248263)) + (i32.add (i32.const 1070312053)) + (i32.add (i32.const -2142700860)) + (i32.add (i32.const -931605636)) + (i32.add (i32.const -1596017876)) + (i32.add (i32.const -433008385)) + (i32.add (i32.const 1555625890)) + (i32.add (i32.const 1815658790)) + (i32.add (i32.const -1694656189)) + (i32.add (i32.const 1703414742)) + (i32.add (i32.const -2028351905)) + (i32.add (i32.const 247808864)) + (i32.add (i32.const -1330840941)) + (i32.add (i32.const 435584597)) + (i32.add (i32.const 906375317)) + (i32.add (i32.const 1753955809)) + (i32.add (i32.const 1221165117)) + (i32.add (i32.const 370174654)) + (i32.add (i32.const -1632563658)) + (i32.add (i32.const -1848216271)) + (i32.add (i32.const -2061385032)) + (i32.add (i32.const 390573096)) + (i32.add (i32.const -198400479)) + (i32.add (i32.const -1044588663)) + (i32.add (i32.const 494108556)) + (i32.add (i32.const 1571225107)) + (i32.add (i32.const -2137860023)) + (i32.add (i32.const -1200767554)) + (i32.add (i32.const -352297675)) + (i32.add (i32.const 1527909666)) + (i32.add (i32.const 1801302662)) + (i32.add (i32.const 116501281)) + (i32.add (i32.const -1545128125)) + (i32.add (i32.const 942123517)) + (i32.add (i32.const -187466885)) + (i32.add (i32.const 714487794)) + (i32.add (i32.const -1880021496)) + (i32.add (i32.const -1826069368)) + (i32.add (i32.const 188044652)) + (i32.add (i32.const 493760998)) + (i32.add (i32.const -982875784)) + (i32.add (i32.const 1861917725)) + (i32.add (i32.const -1204409981)) + (i32.add (i32.const 1189841660)) + (i32.add (i32.const -1115174553)) + (i32.add (i32.const -633228398)) + (i32.add (i32.const 1770841215)) + (i32.add (i32.const 420554118)) + (i32.add (i32.const -244759794)) + (i32.add (i32.const -337821140)) + (i32.add (i32.const 384159013)) + (i32.add (i32.const -226367259)) + (i32.add (i32.const -1381323141)) + (i32.add (i32.const 1072395814)) + (i32.add (i32.const 145788931)) + (i32.add (i32.const 1130027806)) + (i32.add (i32.const -1626559942)) + (i32.add (i32.const 766623909)) + (i32.add (i32.const -1379390459)) + (i32.add (i32.const -118935399)) + (i32.add (i32.const 2074279113)) + (i32.add (i32.const 960122398)) + (i32.add (i32.const 1771150364)) + (i32.add (i32.const 131268319)) + (i32.add (i32.const -192012359)) + (i32.add (i32.const -191783779)) + (i32.add (i32.const 1106136845)) + (i32.add (i32.const 1457300435)) + (i32.add (i32.const 641701386)) + (i32.add (i32.const 635584538)) + (i32.add (i32.const 84053696)) + (i32.add (i32.const -1055001826)) + (i32.add (i32.const 506246196)) + (i32.add (i32.const 509478800)) + (i32.add (i32.const -889967495)) + (i32.add (i32.const 1064969635)) + (i32.add (i32.const 1487107300)) + (i32.add (i32.const 133878590)) + (i32.add (i32.const -1246264217)) + (i32.add (i32.const -388413642)) + (i32.add (i32.const 556148503)) + (i32.add (i32.const -1754847340)) + (i32.add (i32.const -267859403)) + (i32.add (i32.const -1189331639)) + (i32.add (i32.const 1369380572)) + (i32.add (i32.const 1189952783)) + (i32.add (i32.const -376013112)) + (i32.add (i32.const 336376612)) + (i32.add (i32.const 1231317215)) + (i32.add (i32.const 835066437)) + (i32.add (i32.const -1867943073)) + (i32.add (i32.const 707644670)) + (i32.add (i32.const -43150534)) + (i32.add (i32.const -1708068505)) + (i32.add (i32.const -1630236927)) + (i32.add (i32.const 1097570137)) + (i32.add (i32.const 1039053987)) + (i32.add (i32.const -1452943264)) + (i32.add (i32.const -1545325094)) + (i32.add (i32.const 2005906079)) + (i32.add (i32.const -297789290)) + (i32.add (i32.const 1041901988)) + (i32.add (i32.const 4351490)) + (i32.add (i32.const -1504549723)) + (i32.add (i32.const 55399503)) + (i32.add (i32.const 167018688)) + (i32.add (i32.const -890083535)) + (i32.add (i32.const -1194843210)) + (i32.add (i32.const 768716308)) + (i32.add (i32.const -1441652185)) + (i32.add (i32.const 932148217)) + (i32.add (i32.const 140777379)) + (i32.add (i32.const 939351256)) + (i32.add (i32.const 386703147)) + (i32.add (i32.const 904357109)) + (i32.add (i32.const -450799341)) + (i32.add (i32.const -1079552524)) + (i32.add (i32.const -1221352930)) + (i32.add (i32.const -348151235)) + (i32.add (i32.const 1923187360)) + (i32.add (i32.const 182746434)) + (i32.add (i32.const -1407594857)) + (i32.add (i32.const -664483799)) + (i32.add (i32.const -10413231)) + (i32.add (i32.const -1773474670)) + (i32.add (i32.const 1045483649)) + (i32.add (i32.const -2064202982)) + (i32.add (i32.const -1089758992)) + (i32.add (i32.const -322237797)) + (i32.add (i32.const -1103015238)) + (i32.add (i32.const 1801275353)) + (i32.add (i32.const -136793840)) + (i32.add (i32.const -318747393)) + (i32.add (i32.const -1631088856)) + (i32.add (i32.const -931302022)) + (i32.add (i32.const 20391101)) + (i32.add (i32.const -2102803790)) + (i32.add (i32.const -276984917)) + (i32.add (i32.const 713831347)) + (i32.add (i32.const -1627103239)) + (i32.add (i32.const 2055937466)) + (i32.add (i32.const -1422309522)) + (i32.add (i32.const -24751553)) + (i32.add (i32.const 492486073)) + (i32.add (i32.const 397744865)) + (i32.add (i32.const -1752698206)) + (i32.add (i32.const -1418432127)) + (i32.add (i32.const -528629389)) + (i32.add (i32.const -1378229092)) + (i32.add (i32.const -410470005)) + (i32.add (i32.const -659186268)) + (i32.add (i32.const 2131122773)) + (i32.add (i32.const 1827187320)) + (i32.add (i32.const -2062845985)) + (i32.add (i32.const 791620088)) + (i32.add (i32.const 1595593419)) + (i32.add (i32.const 2055802713)) + (i32.add (i32.const -1764630318)) + (i32.add (i32.const -1866052031)) + (i32.add (i32.const -1876038654)) + (i32.add (i32.const -652581486)) + (i32.add (i32.const -1623446327)) + (i32.add (i32.const -675082909)) + (i32.add (i32.const 1480159422)) + (i32.add (i32.const 2085846655)) + (i32.add (i32.const 1125408897)) + (i32.add (i32.const 755501310)) + (i32.add (i32.const 189819572)) + (i32.add (i32.const -1675710174)) + (i32.add (i32.const 1458713092)) + (i32.add (i32.const -1815680764)) + (i32.add (i32.const 1935143268)) + (i32.add (i32.const -1051524845)) + (i32.add (i32.const -1638391905)) + (i32.add (i32.const -846378777)) + (i32.add (i32.const 1327173235)) + (i32.add (i32.const 884061048)) + (i32.add (i32.const -184310464)) + (i32.add (i32.const -288212162)) + (i32.add (i32.const -1055322411)) + (i32.add (i32.const 297247640)) + (i32.add (i32.const 1132914363)) + (i32.add (i32.const -1807293131)) + (i32.add (i32.const 846618290)) + (i32.add (i32.const -647377294)) + (i32.add (i32.const 1996632927)) + (i32.add (i32.const 232005306)) + (i32.add (i32.const -173891953)) + (i32.add (i32.const 410250962)) + (i32.add (i32.const 1679756372)) + (i32.add (i32.const 1239385790)) + (i32.add (i32.const 118397817)) + (i32.add (i32.const 916143876)) + (i32.add (i32.const 1664583893)) + (i32.add (i32.const -1534157632)) + (i32.add (i32.const -877107324)) + (i32.add (i32.const 1995963814)) + (i32.add (i32.const 2087761919)) + (i32.add (i32.const -169495823)) + (i32.add (i32.const 1558885947)) + (i32.add (i32.const 58930843)) + (i32.add (i32.const -324238678)) + (i32.add (i32.const -1387228025)) + (i32.add (i32.const 1385426520)) + (i32.add (i32.const -1678306011)) + (i32.add (i32.const 1501095721)) + (i32.add (i32.const -1315147732)) + (i32.add (i32.const -254628817)) + (i32.add (i32.const 1685330896)) + (i32.add (i32.const 60729077)) + (i32.add (i32.const 1532161426)) + (i32.add (i32.const -914588928)) + (i32.add (i32.const 1391596187)) + (i32.add (i32.const -1200053488)) + (i32.add (i32.const -61769886)) + (i32.add (i32.const -1025273497)) + (i32.add (i32.const -1397742032)) + (i32.add (i32.const 1854571987)) + (i32.add (i32.const 223568185)) + (i32.add (i32.const -325730449)) + (i32.add (i32.const -1847910516)) + (i32.add (i32.const 778534957)) + (i32.add (i32.const 430059179)) + (i32.add (i32.const -325230949)) + (i32.add (i32.const 1902121859)) + (i32.add (i32.const 2089535941)) + (i32.add (i32.const -1332898442)) + (i32.add (i32.const -416637608)) + (i32.add (i32.const -1175500448)) + (i32.add (i32.const 99017682)) + (i32.add (i32.const 1679570987)) + (i32.add (i32.const -850143843)) + (i32.add (i32.const -943119589)) + (i32.add (i32.const 85798669)) + (i32.add (i32.const -852577833)) + (i32.add (i32.const -1467218664)) + (i32.add (i32.const -130721576)) + (i32.add (i32.const 1128532049)) + (i32.add (i32.const 1082842557)) + (i32.add (i32.const -941058707)) + (i32.add (i32.const 1756167502)) + (i32.add (i32.const 2050183610)) + (i32.add (i32.const 1313877068)) + (i32.add (i32.const -1152634255)) + (i32.add (i32.const -282540278)) + (i32.add (i32.const 404802447)) + (i32.add (i32.const -1565319655)) + (i32.add (i32.const -450908360)) + (i32.add (i32.const 246061396)) + (i32.add (i32.const 1738710278)) + (i32.add (i32.const -1357758577)) + (i32.add (i32.const 1121131098)) + (i32.add (i32.const 683345538)) + (i32.add (i32.const -461863162)) + (i32.add (i32.const -1889226327)) + (i32.add (i32.const 1751695999)) + (i32.add (i32.const 982763994)) + (i32.add (i32.const 585984341)) + (i32.add (i32.const -382132253)) + (i32.add (i32.const 1320040406)) + (i32.add (i32.const -481568130)) + (i32.add (i32.const -912325238)) + (i32.add (i32.const 1962019320)) + (i32.add (i32.const -1677915700)) + (i32.add (i32.const 1391701017)) + (i32.add (i32.const -209516273)) + (i32.add (i32.const -1808538949)) + (i32.add (i32.const -285597921)) + (i32.add (i32.const 69216851)) + (i32.add (i32.const -84480087)) + (i32.add (i32.const -502423137)) + (i32.add (i32.const -1599178848)) + (i32.add (i32.const 1506340284)) + (i32.add (i32.const 644239474)) + (i32.add (i32.const 1254030061)) + (i32.add (i32.const 1514863754)) + (i32.add (i32.const -871157112)) + (i32.add (i32.const -977456589)) + (i32.add (i32.const 1856338678)) + (i32.add (i32.const 1607081072)) + (i32.add (i32.const -1918545244)) + (i32.add (i32.const -97873894)) + (i32.add (i32.const -1662770790)) + (i32.add (i32.const -2120838377)) + (i32.add (i32.const -932047118)) + (i32.add (i32.const 518922820)) + (i32.add (i32.const -821084606)) + (i32.add (i32.const 680876683)) + (i32.add (i32.const -1135085920)) + (i32.add (i32.const -1902907676)) + (i32.add (i32.const -1175392245)) + (i32.add (i32.const -1062943573)) + (i32.add (i32.const -1266952209)) + (i32.add (i32.const -49112571)) + (i32.add (i32.const 509076822)) + (i32.add (i32.const -1310906858)) + (i32.add (i32.const 1668246683)) + (i32.add (i32.const 442352182)) + (i32.add (i32.const 365554916)) + (i32.add (i32.const 1454197086)) + (i32.add (i32.const -1306521515)) + (i32.add (i32.const 2010770221)) + (i32.add (i32.const 2146180009)) + (i32.add (i32.const 1206405045)) + (i32.add (i32.const 1111778313)) + (i32.add (i32.const 470251169)) + (i32.add (i32.const 736017456)) + (i32.add (i32.const 1369349441)) + (i32.add (i32.const 852768754)) + (i32.add (i32.const -1300731409)) + (i32.add (i32.const 1629057012)) + (i32.add (i32.const 1773633687)) + (i32.add (i32.const -17432413)) + (i32.add (i32.const -937504836)) + (i32.add (i32.const 1825934126)) + (i32.add (i32.const -173254608)) + (i32.add (i32.const -596466628)) + (i32.add (i32.const 480607452)) + (i32.add (i32.const 966311063)) + (i32.add (i32.const -1983090502)) + (i32.add (i32.const -152550854)) + (i32.add (i32.const 1419538037)) + (i32.add (i32.const -404915772)) + (i32.add (i32.const -738620591)) + (i32.add (i32.const 2051530789)) + (i32.add (i32.const -570630663)) + (i32.add (i32.const -1692307513)) + (i32.add (i32.const -1329435135)) + (i32.add (i32.const -1409004610)) + (i32.add (i32.const -1105346397)) + (i32.add (i32.const -49542136)) + (i32.add (i32.const 2138787992)) + (i32.add (i32.const -1227347643)) + (i32.add (i32.const -709913386)) + (i32.add (i32.const -1854069883)) + (i32.add (i32.const 190604313)) + (i32.add (i32.const -1738522010)) + (i32.add (i32.const -247660291)) + (i32.add (i32.const -69428525)) + (i32.add (i32.const -1294584715)) + (i32.add (i32.const -995482984)) + (i32.add (i32.const -266782402)) + (i32.add (i32.const 1095184714)) + (i32.add (i32.const 2118141767)) + (i32.add (i32.const -13595128)) + (i32.add (i32.const 379346535)) + (i32.add (i32.const 616548669)) + (i32.add (i32.const -1836900895)) + (i32.add (i32.const -1608377820)) + (i32.add (i32.const -1131702501)) + (i32.add (i32.const 1604049515)) + (i32.add (i32.const -1062093300)) + (i32.add (i32.const 1905020903)) + (i32.add (i32.const 892567177)) + (i32.add (i32.const -714917650)) + (i32.add (i32.const 1530168051)) + (i32.add (i32.const -1322139320)) + (i32.add (i32.const 328228183)) + (i32.add (i32.const -1610779915)) + (i32.add (i32.const 1219885441)) + (i32.add (i32.const -1740728126)) + (i32.add (i32.const -1696989787)) + (i32.add (i32.const 1951489502)) + (i32.add (i32.const 2100796303)) + (i32.add (i32.const 715158708)) + (i32.add (i32.const 136342476)) + (i32.add (i32.const -492706177)) + (i32.add (i32.const 1598856914)) + (i32.add (i32.const 1640653248)) + (i32.add (i32.const 937479164)) + (i32.add (i32.const -1981838355)) + (i32.add (i32.const 268375540)) + (i32.add (i32.const 986327450)) + (i32.add (i32.const 1212888114)) + (i32.add (i32.const 1568399171)) + (i32.add (i32.const 1748488090)) + (i32.add (i32.const 1424111166)) + (i32.add (i32.const -1471042575)) + (i32.add (i32.const 1880330387)) + (i32.add (i32.const 753922113)) + (i32.add (i32.const -609230318)) + (i32.add (i32.const -1304161919)) + (i32.add (i32.const -1859789183)) + (i32.add (i32.const 156529246)) + (i32.add (i32.const -2102612423)) + (i32.add (i32.const -419736181)) + (i32.add (i32.const -2108996200)) + (i32.add (i32.const -1720460611)) + (i32.add (i32.const 1935096088)) + (i32.add (i32.const -1620273549)) + (i32.add (i32.const -785072034)) + (i32.add (i32.const 1725281773)) + (i32.add (i32.const 868858268)) + (i32.add (i32.const 1405284298)) + (i32.add (i32.const 1540278493)) + (i32.add (i32.const 1689261867)) + (i32.add (i32.const -1870952671)) + (i32.add (i32.const -174996832)) + (i32.add (i32.const -145869145)) + (i32.add (i32.const -1345812588)) + (i32.add (i32.const 1733339941)) + (i32.add (i32.const 862781894)) + (i32.add (i32.const -2057617160)) + (i32.add (i32.const 22828355)) + (i32.add (i32.const -1245797680)) + (i32.add (i32.const -869276284)) + (i32.add (i32.const 1967648374)) + (i32.add (i32.const 2003021477)) + (i32.add (i32.const -12542882)) + (i32.add (i32.const -960535776)) + (i32.add (i32.const 402418285)) + (i32.add (i32.const 1545622691)) + (i32.add (i32.const 1087548256)) + (i32.add (i32.const -788266004)) + (i32.add (i32.const -1776722482)) + (i32.add (i32.const -930531347)) + (i32.add (i32.const -447318150)) + (i32.add (i32.const 831275204)) + (i32.add (i32.const 2006235489)) + (i32.add (i32.const -1365242386)) + (i32.add (i32.const -1847164705)) + (i32.add (i32.const 2036106809)) + (i32.add (i32.const -722015172)) + (i32.add (i32.const 1380296481)) + (i32.add (i32.const -1108161955)) + (i32.add (i32.const 1896506093)) + (i32.add (i32.const 245990331)) + (i32.add (i32.const -3306521)) + (i32.add (i32.const 2063046574)) + (i32.add (i32.const 757348700)) + (i32.add (i32.const -1913544952)) + (i32.add (i32.const -1712395867)) + (i32.add (i32.const -870018831)) + (i32.add (i32.const -403017873)) + (i32.add (i32.const 1832750370)) + (i32.add (i32.const 981818247)) + (i32.add (i32.const -1502906883)) + (i32.add (i32.const 477326655)) + (i32.add (i32.const -2011037034)) + (i32.add (i32.const -55052854)) + (i32.add (i32.const 781349432)) + (i32.add (i32.const 998916387)) + (i32.add (i32.const 1454502156)) + (i32.add (i32.const 295172378)) + (i32.add (i32.const 981974000)) + (i32.add (i32.const 90848345)) + (i32.add (i32.const -1330368339)) + (i32.add (i32.const 934667478)) + (i32.add (i32.const -388128320)) + (i32.add (i32.const -1504565114)) + (i32.add (i32.const 1676779866)) + (i32.add (i32.const 281407912)) + (i32.add (i32.const 864420515)) + (i32.add (i32.const 1210283225)) + (i32.add (i32.const 784866640)) + (i32.add (i32.const -1050595095)) + (i32.add (i32.const 370449537)) + (i32.add (i32.const 903364534)) + (i32.add (i32.const -92165071)) + (i32.add (i32.const 1180005109)) + (i32.add (i32.const 184250403)) + (i32.add (i32.const 713474634)) + (i32.add (i32.const 1031319146)) + (i32.add (i32.const -147992337)) + (i32.add (i32.const -1103954923)) + (i32.add (i32.const 67957048)) + (i32.add (i32.const -238094823)) + (i32.add (i32.const 1040342042)) + (i32.add (i32.const -2146049597)) + (i32.add (i32.const 914252055)) + (i32.add (i32.const -646059428)) + (i32.add (i32.const -1512473773)) + (i32.add (i32.const 1518138291)) + (i32.add (i32.const 384003610)) + (i32.add (i32.const 1920744907)) + (i32.add (i32.const -708284021)) + (i32.add (i32.const -1247772397)) + (i32.add (i32.const -1295841689)) + (i32.add (i32.const 141619444)) + (i32.add (i32.const 1237906022)) + (i32.add (i32.const -1626604409)) + (i32.add (i32.const 1622771271)) + (i32.add (i32.const 654690537)) + (i32.add (i32.const 256636443)) + (i32.add (i32.const 81045527)) + (i32.add (i32.const -253727712)) + (i32.add (i32.const 1455474317)) + (i32.add (i32.const 1055815760)) + (i32.add (i32.const -973064077)) + (i32.add (i32.const -1539762667)) + (i32.add (i32.const 1468466865)) + (i32.add (i32.const -1167253600)) + (i32.add (i32.const -292126766)) + (i32.add (i32.const -1456668442)) + (i32.add (i32.const 976543296)) + (i32.add (i32.const -1020108910)) + (i32.add (i32.const -943250050)) + (i32.add (i32.const -191641327)) + (i32.add (i32.const 193980839)) + (i32.add (i32.const -104485282)) + (i32.add (i32.const -645928253)) + (i32.add (i32.const -2127291078)) + (i32.add (i32.const -330801695)) + (i32.add (i32.const 747659668)) + (i32.add (i32.const 844560808)) + (i32.add (i32.const -1834933174)) + (i32.add (i32.const -1772139545)) + (i32.add (i32.const -858995352)) + (i32.add (i32.const 1494041957)) + (i32.add (i32.const -639532315)) + (i32.add (i32.const 2128990034)) + (i32.add (i32.const -2141388543)) + (i32.add (i32.const 295283851)) + (i32.add (i32.const -159458276)) + (i32.add (i32.const 1196370268)) + (i32.add (i32.const -703943515)) + (i32.add (i32.const -1073233600)) + (i32.add (i32.const -1530322172)) + (i32.add (i32.const -422005421)) + (i32.add (i32.const -971050446)) + (i32.add (i32.const -1730407282)) + (i32.add (i32.const 162360140)) + (i32.add (i32.const -92004670)) + (i32.add (i32.const -985616158)) + (i32.add (i32.const 863627996)) + (i32.add (i32.const 69321499)) + (i32.add (i32.const 2007392739)) + (i32.add (i32.const -1823648707)) + (i32.add (i32.const 1689981316)) + (i32.add (i32.const 1772537226)) + (i32.add (i32.const 14135584)) + (i32.add (i32.const -904471016)) + (i32.add (i32.const 1627595042)) + (i32.add (i32.const 159004159)) + (i32.add (i32.const 1165187532)) + (i32.add (i32.const 16433420)) + (i32.add (i32.const -866812034)) + (i32.add (i32.const -239344255)) + (i32.add (i32.const 143466785)) + (i32.add (i32.const -406466654)) + (i32.add (i32.const -1476222156)) + (i32.add (i32.const -950681509)) + (i32.add (i32.const -1348951609)) + (i32.add (i32.const -327785687)) + (i32.add (i32.const 1566924537)) + (i32.add (i32.const -1750372073)) + (i32.add (i32.const 982969430)) + (i32.add (i32.const -626272292)) + (i32.add (i32.const 1735397073)) + (i32.add (i32.const -324874263)) + (i32.add (i32.const 831606457)) + (i32.add (i32.const -1420112845)) + (i32.add (i32.const -470937545)) + (i32.add (i32.const -1134859665)) + (i32.add (i32.const 1881879322)) + (i32.add (i32.const 1736587052)) + (i32.add (i32.const 1969565798)) + (i32.add (i32.const -224292276)) + (i32.add (i32.const -1087011982)) + (i32.add (i32.const -1117443716)) + (i32.add (i32.const -2049196538)) + (i32.add (i32.const -894932584)) + (i32.add (i32.const 262291630)) + (i32.add (i32.const -2103743298)) + (i32.add (i32.const -308152884)) + (i32.add (i32.const -704004316)) + (i32.add (i32.const -1087717301)) + (i32.add (i32.const 30444108)) + (i32.add (i32.const 588673242)) + (i32.add (i32.const -1514723518)) + (i32.add (i32.const 1972072949)) + (i32.add (i32.const -1207472534)) + (i32.add (i32.const 346992056)) + (i32.add (i32.const 1939171642)) + (i32.add (i32.const -379015174)) + (i32.add (i32.const 1719992933)) + (i32.add (i32.const -1106973394)) + (i32.add (i32.const 112047540)) + (i32.add (i32.const -1422336191)) + (i32.add (i32.const 1249196787)) + (i32.add (i32.const -1137423928)) + (i32.add (i32.const -357174737)) + (i32.add (i32.const 769616315)) + (i32.add (i32.const 569224864)) + (i32.add (i32.const 1228835059)) + (i32.add (i32.const 2147097899)) + (i32.add (i32.const 1072983167)) + (i32.add (i32.const 15740634)) + (i32.add (i32.const 762847485)) + (i32.add (i32.const -1872257652)) + (i32.add (i32.const -24914886)) + (i32.add (i32.const -350619656)) + (i32.add (i32.const 1404342268)) + (i32.add (i32.const -1348468070)) + (i32.add (i32.const -1110806814)) + (i32.add (i32.const -1620552330)) + (i32.add (i32.const 246276133)) + (i32.add (i32.const 1138698936)) + (i32.add (i32.const 1173354284)) + (i32.add (i32.const -176450491)) + (i32.add (i32.const 1118909828)) + (i32.add (i32.const -1778018232)) + (i32.add (i32.const 1509569006)) + (i32.add (i32.const -1376990624)) + (i32.add (i32.const 2126021887)) + (i32.add (i32.const 509485580)) + (i32.add (i32.const 1814951520)) + (i32.add (i32.const 1207635885)) + (i32.add (i32.const -1595429468)) + (i32.add (i32.const -777760275)) + (i32.add (i32.const 1165725760)) + (i32.add (i32.const 1793780414)) + (i32.add (i32.const 1766640126)) + (i32.add (i32.const 758699762)) + (i32.add (i32.const -113597615)) + (i32.add (i32.const 1512575813)) + (i32.add (i32.const -329282061)) + (i32.add (i32.const 1302029460)) + (i32.add (i32.const 883239014)) + (i32.add (i32.const 1588421611)) + (i32.add (i32.const -1531426169)) + (i32.add (i32.const 1916052193)) + (i32.add (i32.const -1810120804)) + (i32.add (i32.const -1606975176)) + (i32.add (i32.const 2014308792)) + (i32.add (i32.const -380563049)) + (i32.add (i32.const -455696317)) + (i32.add (i32.const 846879295)) + (i32.add (i32.const 1495338700)) + (i32.add (i32.const 1395126778)) + (i32.add (i32.const 1812024796)) + (i32.add (i32.const -1053995164)) + (i32.add (i32.const -1447290982)) + (i32.add (i32.const -384870093)) + (i32.add (i32.const 371686079)) + (i32.add (i32.const -1786035144)) + (i32.add (i32.const -1126221250)) + (i32.add (i32.const 1519883888)) + (i32.add (i32.const 23297297)) + (i32.add (i32.const 421639562)) + (i32.add (i32.const 333950380)) + (i32.add (i32.const 1047249728)) + (i32.add (i32.const -1563950283)) + (i32.add (i32.const 1795316584)) + (i32.add (i32.const 1413895807)) + (i32.add (i32.const -83365529)) + (i32.add (i32.const -451067369)) + (i32.add (i32.const 1192772271)) + (i32.add (i32.const 763148712)) + (i32.add (i32.const 1642759449)) + (i32.add (i32.const 595694934)) + (i32.add (i32.const -1895948291)) + (i32.add (i32.const 803674643)) + (i32.add (i32.const 772316068)) + (i32.add (i32.const -110437944)) + (i32.add (i32.const 963018031)) + (i32.add (i32.const -1437647798)) + (i32.add (i32.const 1659287224)) + (i32.add (i32.const -1934199846)) + (i32.add (i32.const 1590535944)) + (i32.add (i32.const -116788271)) + (i32.add (i32.const -622334392)) + (i32.add (i32.const -625319800)) + (i32.add (i32.const 547294658)) + (i32.add (i32.const -432797851)) + (i32.add (i32.const 1200479577)) + (i32.add (i32.const -319463987)) + (i32.add (i32.const 671306371)) + (i32.add (i32.const 1173456663)) + (i32.add (i32.const 259176956)) + (i32.add (i32.const 1004933684)) + (i32.add (i32.const -1598111916)) + (i32.add (i32.const 1563632229)) + (i32.add (i32.const -1848480539)) + (i32.add (i32.const 846932437)) + (i32.add (i32.const -1830836739)) + (i32.add (i32.const 2082605854)) + (i32.add (i32.const 785993097)) + (i32.add (i32.const 1894601609)) + (i32.add (i32.const -1651354)) + (i32.add (i32.const 899220876)) + (i32.add (i32.const -784260465)) + (i32.add (i32.const -552049052)) + (i32.add (i32.const 2118452544)) + (i32.add (i32.const -949256578)) + (i32.add (i32.const 1623680643)) + (i32.add (i32.const 156480786)) + (i32.add (i32.const -74065590)) + (i32.add (i32.const 1604767675)) + (i32.add (i32.const 1240539651)) + (i32.add (i32.const -410159642)) + (i32.add (i32.const 1048402196)) + (i32.add (i32.const 1049537605)) + (i32.add (i32.const 1404678381)) + (i32.add (i32.const -2078233416)) + (i32.add (i32.const 1416154921)) + (i32.add (i32.const -2021164967)) + (i32.add (i32.const -443941905)) + (i32.add (i32.const 18604619)) + (i32.add (i32.const -519066677)) + (i32.add (i32.const -1473782222)) + (i32.add (i32.const -277972981)) + (i32.add (i32.const 1782888724)) + (i32.add (i32.const 771923960)) + (i32.add (i32.const 1671594055)) + (i32.add (i32.const -1390046327)) + (i32.add (i32.const 1327956462)) + (i32.add (i32.const -1788163675)) + (i32.add (i32.const 1349037898)) + (i32.add (i32.const 2132277042)) + (i32.add (i32.const 1417057915)) + (i32.add (i32.const 980795716)) + (i32.add (i32.const -283961084)) + (i32.add (i32.const 1774449788)) + (i32.add (i32.const -231846521)) + (i32.add (i32.const 1307457483)) + (i32.add (i32.const -1707149671)) + (i32.add (i32.const 689458808)) + (i32.add (i32.const -1197667495)) + (i32.add (i32.const 1785819199)) + (i32.add (i32.const -932809418)) + (i32.add (i32.const -1579775187)) + (i32.add (i32.const -1070950799)) + (i32.add (i32.const -2028148150)) + (i32.add (i32.const 910588207)) + (i32.add (i32.const 1561918802)) + (i32.add (i32.const 1339134717)) + (i32.add (i32.const -236284721)) + (i32.add (i32.const 1597531176)) + (i32.add (i32.const 1993753915)) + (i32.add (i32.const -809551662)) + (i32.add (i32.const 734248299)) + (i32.add (i32.const -695570863)) + (i32.add (i32.const 1865416656)) + (i32.add (i32.const -322578755)) + (i32.add (i32.const -719091606)) + (i32.add (i32.const -531167970)) + (i32.add (i32.const 177208848)) + (i32.add (i32.const 2053979205)) + (i32.add (i32.const 1579297551)) + (i32.add (i32.const -832863300)) + (i32.add (i32.const -1814399468)) + (i32.add (i32.const 1221718195)) + (i32.add (i32.const 57728652)) + (i32.add (i32.const -1786258468)) + (i32.add (i32.const -955311013)) + (i32.add (i32.const 1999666592)) + (i32.add (i32.const 688283953)) + (i32.add (i32.const -1455150122)) + (i32.add (i32.const 262245261)) + (i32.add (i32.const 405410080)) + (i32.add (i32.const -1160219750)) + (i32.add (i32.const -2146851660)) + (i32.add (i32.const -898188434)) + (i32.add (i32.const 524150252)) + (i32.add (i32.const 2147283732)) + (i32.add (i32.const 2068564829)) + (i32.add (i32.const -888970312)) + (i32.add (i32.const 2015153393)) + (i32.add (i32.const -911285700)) + (i32.add (i32.const -93142628)) + (i32.add (i32.const -730736756)) + (i32.add (i32.const -583587706)) + (i32.add (i32.const -1916228151)) + (i32.add (i32.const -217892782)) + (i32.add (i32.const -2013674179)) + (i32.add (i32.const -1797056634)) + (i32.add (i32.const -650314082)) + (i32.add (i32.const 561001453)) + (i32.add (i32.const -373968709)) + (i32.add (i32.const 1099494353)) + (i32.add (i32.const 874237151)) + (i32.add (i32.const 2130722378)) + (i32.add (i32.const 467958132)) + (i32.add (i32.const -1506816526)) + (i32.add (i32.const -1376411522)) + (i32.add (i32.const -1381150970)) + (i32.add (i32.const 1080685165)) + (i32.add (i32.const -1152816439)) + (i32.add (i32.const -1362573289)) + (i32.add (i32.const 1399603189)) + (i32.add (i32.const 865646118)) + (i32.add (i32.const 508761821)) + (i32.add (i32.const -2055978424)) + (i32.add (i32.const -2127933117)) + (i32.add (i32.const 733557455)) + (i32.add (i32.const -26882626)) + (i32.add (i32.const 1158703055)) + (i32.add (i32.const -968729590)) + (i32.add (i32.const -292006270)) + (i32.add (i32.const -1236548785)) + (i32.add (i32.const 1854232937)) + (i32.add (i32.const 188686977)) + (i32.add (i32.const -486308922)) + (i32.add (i32.const -1733996042)) + (i32.add (i32.const 1686111448)) + (i32.add (i32.const 1180147798)) + (i32.add (i32.const -1897412984)) + (i32.add (i32.const 62509036)) + (i32.add (i32.const 2089509606)) + (i32.add (i32.const 330924418)) + (i32.add (i32.const 825261204)) + (i32.add (i32.const -1761797435)) + (i32.add (i32.const -445294284)) + (i32.add (i32.const -1078196375)) + (i32.add (i32.const 498810132)) + (i32.add (i32.const -1080828807)) + (i32.add (i32.const 1598314315)) + (i32.add (i32.const -1691544629)) + (i32.add (i32.const 855438061)) + (i32.add (i32.const -1369167276)) + (i32.add (i32.const 1575066364)) + (i32.add (i32.const 194355905)) + (i32.add (i32.const 1906017714)) + (i32.add (i32.const -305996600)) + (i32.add (i32.const 1220661873)) + (i32.add (i32.const -22764784)) + (i32.add (i32.const 352458750)) + (i32.add (i32.const -663106757)) + (i32.add (i32.const 226979045)) + (i32.add (i32.const -10537853)) + (i32.add (i32.const 457720360)) + (i32.add (i32.const 1270422052)) + (i32.add (i32.const 1891424504)) + (i32.add (i32.const -1730410224)) + (i32.add (i32.const -71039060)) + (i32.add (i32.const -343684307)) + (i32.add (i32.const 2010582859)) + (i32.add (i32.const -1287719050)) + (i32.add (i32.const -553548703)) + (i32.add (i32.const -1098024782)) + (i32.add (i32.const -1596491923)) + (i32.add (i32.const 603032331)) + (i32.add (i32.const 1103133417)) + (i32.add (i32.const -1293521343)) + (i32.add (i32.const -464162025)) + (i32.add (i32.const 19862271)) + (i32.add (i32.const 585342967)) + (i32.add (i32.const -1792316252)) + (i32.add (i32.const 969907354)) + (i32.add (i32.const 499173272)) + (i32.add (i32.const -533115860)) + (i32.add (i32.const 472742524)) + (i32.add (i32.const -63070705)) + (i32.add (i32.const 1429741200)) + (i32.add (i32.const 1987812484)) + (i32.add (i32.const -548953486)) + (i32.add (i32.const 1528622906)) + (i32.add (i32.const -1251114247)) + (i32.add (i32.const 1794044005)) + (i32.add (i32.const -1670292151)) + (i32.add (i32.const -1194073062)) + (i32.add (i32.const -1398292292)) + (i32.add (i32.const -1236525127)) + (i32.add (i32.const -500110038)) + (i32.add (i32.const -1809602156)) + (i32.add (i32.const 1321609202)) + (i32.add (i32.const 752513173)) + (i32.add (i32.const 738832719)) + (i32.add (i32.const 1537374672)) + (i32.add (i32.const 320009040)) + (i32.add (i32.const -1898669814)) + (i32.add (i32.const 1658032929)) + (i32.add (i32.const 1944366438)) + (i32.add (i32.const 907182816)) + (i32.add (i32.const -96900482)) + (i32.add (i32.const -681182808)) + (i32.add (i32.const 1455235711)) + (i32.add (i32.const -884838650)) + (i32.add (i32.const -390828505)) + (i32.add (i32.const 49577901)) + (i32.add (i32.const -817080418)) + (i32.add (i32.const -583315579)) + (i32.add (i32.const -831474454)) + (i32.add (i32.const 1691187694)) + (i32.add (i32.const -672030384)) + (i32.add (i32.const 1035827836)) + (i32.add (i32.const -1902462948)) + (i32.add (i32.const -359537414)) + (i32.add (i32.const -1254170546)) + (i32.add (i32.const -1004612515)) + (i32.add (i32.const -876419017)) + (i32.add (i32.const -579380593)) + (i32.add (i32.const 993641655)) + (i32.add (i32.const -596045155)) + (i32.add (i32.const 639416938)) + (i32.add (i32.const -1064964664)) + (i32.add (i32.const -92593239)) + (i32.add (i32.const 1353535324)) + (i32.add (i32.const 1586896082)) + (i32.add (i32.const 527695963)) + (i32.add (i32.const 88259217)) + (i32.add (i32.const 1227099479)) + (i32.add (i32.const 786917736)) + (i32.add (i32.const 41397055)) + (i32.add (i32.const -1263803693)) + (i32.add (i32.const 797894291)) + (i32.add (i32.const -690044494)) + (i32.add (i32.const -1439636074)) + (i32.add (i32.const 2103067325)) + (i32.add (i32.const 1401531225)) + (i32.add (i32.const -1363782320)) + (i32.add (i32.const 736600815)) + (i32.add (i32.const 147615395)) + (i32.add (i32.const 314120934)) + (i32.add (i32.const 395869455)) + (i32.add (i32.const -1758291421)) + (i32.add (i32.const 1099376903)) + (i32.add (i32.const 544105883)) + (i32.add (i32.const 127945754)) + (i32.add (i32.const -1451510510)) + (i32.add (i32.const 1021728160)) + (i32.add (i32.const -1188386561)) + (i32.add (i32.const -1156754267)) + (i32.add (i32.const 1632991688)) + (i32.add (i32.const 1505916280)) + (i32.add (i32.const 679908939)) + (i32.add (i32.const 481681629)) + (i32.add (i32.const -1703339968)) + (i32.add (i32.const 637684682)) + (i32.add (i32.const 600472427)) + (i32.add (i32.const -2007408647)) + (i32.add (i32.const -1075560836)) + (i32.add (i32.const 1208150053)) + (i32.add (i32.const 1186263025)) + (i32.add (i32.const 1078896125)) + (i32.add (i32.const 30278803)) + (i32.add (i32.const 1696075350)) + (i32.add (i32.const 933023716)) + (i32.add (i32.const 2072840762)) + (i32.add (i32.const -1397774304)) + (i32.add (i32.const -48115062)) + (i32.add (i32.const -1900715317)) + (i32.add (i32.const -1344472813)) + (i32.add (i32.const -253925325)) + (i32.add (i32.const -1152626610)) + (i32.add (i32.const 1241667954)) + (i32.add (i32.const -429872314)) + (i32.add (i32.const 139297018)) + (i32.add (i32.const -1998196579)) + (i32.add (i32.const 542404849)) + (i32.add (i32.const 266160050)) + (i32.add (i32.const 774600300)) + (i32.add (i32.const 970076408)) + (i32.add (i32.const 830498434)) + (i32.add (i32.const 258022995)) + (i32.add (i32.const 800637766)) + (i32.add (i32.const 315534184)) + (i32.add (i32.const -2006984648)) + (i32.add (i32.const -1220609602)) + (i32.add (i32.const -1980895459)) + (i32.add (i32.const -1653828266)) + (i32.add (i32.const -248400207)) + (i32.add (i32.const -937374610)) + (i32.add (i32.const 516771562)) + (i32.add (i32.const -800239504)) + (i32.add (i32.const 595129322)) + (i32.add (i32.const 1281004198)) + (i32.add (i32.const -1391112002)) + (i32.add (i32.const 1995383651)) + (i32.add (i32.const 1609743496)) + (i32.add (i32.const -1194134158)) + (i32.add (i32.const 1102878503)) + (i32.add (i32.const 922278327)) + (i32.add (i32.const -1807040970)) + (i32.add (i32.const 801810913)) + (i32.add (i32.const 1604065821)) + (i32.add (i32.const -1963761897)) + (i32.add (i32.const -274813324)) + (i32.add (i32.const -1823476361)) + (i32.add (i32.const 425447223)) + (i32.add (i32.const 526720395)) + (i32.add (i32.const -864764134)) + (i32.add (i32.const 405829181)) + (i32.add (i32.const -1788520378)) + (i32.add (i32.const 260808628)) + (i32.add (i32.const -1374696894)) + (i32.add (i32.const 1311052695)) + (i32.add (i32.const -2040010927)) + (i32.add (i32.const -829194611)) + (i32.add (i32.const -302981190)) + (i32.add (i32.const 899791272)) + (i32.add (i32.const 407518577)) + (i32.add (i32.const 659930234)) + (i32.add (i32.const -63806847)) + (i32.add (i32.const 1326012290)) + (i32.add (i32.const -1757187654)) + (i32.add (i32.const -364021596)) + (i32.add (i32.const -1840491596)) + (i32.add (i32.const 524937613)) + (i32.add (i32.const -78161148)) + (i32.add (i32.const 417159451)) + (i32.add (i32.const -1311572269)) + (i32.add (i32.const 965747162)) + (i32.add (i32.const 481361148)) + (i32.add (i32.const 1087725696)) + (i32.add (i32.const 564341824)) + (i32.add (i32.const -743378415)) + (i32.add (i32.const -1512236830)) + (i32.add (i32.const -1807419737)) + (i32.add (i32.const 1571094630)) + (i32.add (i32.const -1620750766)) + (i32.add (i32.const -1886183797)) + (i32.add (i32.const -1060461644)) + (i32.add (i32.const -562138911)) + (i32.add (i32.const 978927765)) + (i32.add (i32.const -35041358)) + (i32.add (i32.const -669850461)) + (i32.add (i32.const 2017233288)) + (i32.add (i32.const 1767285861)) + (i32.add (i32.const -577931520)) + (i32.add (i32.const 412371025)) + (i32.add (i32.const 1666329231)) + (i32.add (i32.const -267347768)) + (i32.add (i32.const -1548190543)) + (i32.add (i32.const -129647015)) + (i32.add (i32.const -750404339)) + (i32.add (i32.const 1096275596)) + (i32.add (i32.const 549503505)) + (i32.add (i32.const -2005736220)) + (i32.add (i32.const -1869972077)) + (i32.add (i32.const 1488586057)) + (i32.add (i32.const 1600765340)) + (i32.add (i32.const -2135303979)) + (i32.add (i32.const 561614557)) + (i32.add (i32.const 563681640)) + (i32.add (i32.const -925206566)) + (i32.add (i32.const 2010270529)) + (i32.add (i32.const 418443653)) + (i32.add (i32.const -1260760424)) + (i32.add (i32.const 1876425891)) + (i32.add (i32.const 473632858)) + (i32.add (i32.const 1033731940)) + (i32.add (i32.const -1411176701)) + (i32.add (i32.const -1974028657)) + (i32.add (i32.const 905924287)) + (i32.add (i32.const 1803467972)) + (i32.add (i32.const 1380375659)) + (i32.add (i32.const 2062717029)) + (i32.add (i32.const -1809047187)) + (i32.add (i32.const -1861419055)) + (i32.add (i32.const 1789279549)) + (i32.add (i32.const -1692705302)) + (i32.add (i32.const -882224016)) + (i32.add (i32.const 500757612)) + (i32.add (i32.const 1415706139)) + (i32.add (i32.const 521287105)) + (i32.add (i32.const -1861274820)) + (i32.add (i32.const 224190701)) + (i32.add (i32.const 987668566)) + (i32.add (i32.const -1875857809)) + (i32.add (i32.const -401500861)) + (i32.add (i32.const 841003492)) + (i32.add (i32.const 30870258)) + (i32.add (i32.const 382593617)) + (i32.add (i32.const -307536517)) + (i32.add (i32.const -1095035049)) + (i32.add (i32.const -1751748714)) + (i32.add (i32.const 1148552764)) + (i32.add (i32.const -696817913)) + (i32.add (i32.const 735201275)) + (i32.add (i32.const -989221490)) + (i32.add (i32.const -861118131)) + (i32.add (i32.const 1880118139)) + (i32.add (i32.const 1761505383)) + (i32.add (i32.const 61780311)) + (i32.add (i32.const 415303948)) + (i32.add (i32.const -1125556778)) + (i32.add (i32.const 1498591195)) + (i32.add (i32.const 1522642485)) + (i32.add (i32.const -1788928686)) + (i32.add (i32.const -1179372184)) + (i32.add (i32.const -1500718671)) + (i32.add (i32.const 532225395)) + (i32.add (i32.const 557950107)) + (i32.add (i32.const 1342895684)) + (i32.add (i32.const 636170709)) + (i32.add (i32.const -386053968)) + (i32.add (i32.const -1800076154)) + (i32.add (i32.const 1685715721)) + (i32.add (i32.const -241854434)) + (i32.add (i32.const -1479568946)) + (i32.add (i32.const 689699259)) + (i32.add (i32.const -2145932262)) + (i32.add (i32.const 1825248528)) + (i32.add (i32.const 1473870368)) + (i32.add (i32.const -1975181650)) + (i32.add (i32.const -867474743)) + (i32.add (i32.const 1693322657)) + (i32.add (i32.const 1575579750)) + (i32.add (i32.const -838439667)) + (i32.add (i32.const 1188299402)) + (i32.add (i32.const 262326352)) + (i32.add (i32.const -26026273)) + (i32.add (i32.const -474519621)) + (i32.add (i32.const -2099742588)) + (i32.add (i32.const 1055649185)) + (i32.add (i32.const 322668623)) + (i32.add (i32.const 1116217091)) + (i32.add (i32.const -2020124382)) + (i32.add (i32.const 147369042)) + (i32.add (i32.const 147215661)) + (i32.add (i32.const -100197234)) + (i32.add (i32.const 1334017845)) + (i32.add (i32.const -233843043)) + (i32.add (i32.const 351555383)) + (i32.add (i32.const -1820131087)) + (i32.add (i32.const 964503560)) + (i32.add (i32.const -846611300)) + (i32.add (i32.const 416240906)) + (i32.add (i32.const -307446786)) + (i32.add (i32.const 1590341661)) + (i32.add (i32.const -1184550380)) + (i32.add (i32.const -1274535190)) + (i32.add (i32.const 66348284)) + (i32.add (i32.const -451693770)) + (i32.add (i32.const 136518046)) + (i32.add (i32.const -1592380358)) + (i32.add (i32.const -1181692679)) + (i32.add (i32.const 1567217257)) + (i32.add (i32.const 595996789)) + (i32.add (i32.const -578714708)) + (i32.add (i32.const -1650812745)) + (i32.add (i32.const 823442078)) + (i32.add (i32.const -1339875108)) + (i32.add (i32.const -1239260067)) + (i32.add (i32.const -784243133)) + (i32.add (i32.const -786609514)) + (i32.add (i32.const 784280653)) + (i32.add (i32.const 2096473223)) + (i32.add (i32.const -860228003)) + (i32.add (i32.const 2021711904)) + (i32.add (i32.const 805887200)) + (i32.add (i32.const 1504371732)) + (i32.add (i32.const -1917502354)) + (i32.add (i32.const -401932165)) + (i32.add (i32.const 528767317)) + (i32.add (i32.const -1429527579)) + (i32.add (i32.const 467684375)) + (i32.add (i32.const 607817530)) + (i32.add (i32.const 1073656788)) + (i32.add (i32.const 253316344)) + (i32.add (i32.const -1571803458)) + (i32.add (i32.const 923542678)) + (i32.add (i32.const -481511919)) + (i32.add (i32.const -835860641)) + (i32.add (i32.const -972164626)) + (i32.add (i32.const 1416842720)) + (i32.add (i32.const -228892281)) + (i32.add (i32.const 936212167)) + (i32.add (i32.const 1467819995)) + (i32.add (i32.const -1854908918)) + (i32.add (i32.const -24560705)) + (i32.add (i32.const 531738483)) + (i32.add (i32.const 835192408)) + (i32.add (i32.const -1733676426)) + (i32.add (i32.const -1648650989)) + (i32.add (i32.const -328127861)) + (i32.add (i32.const -308350308)) + (i32.add (i32.const -86347905)) + (i32.add (i32.const 246574038)) + (i32.add (i32.const -1482470946)) + (i32.add (i32.const 1189651869)) + (i32.add (i32.const -1520715664)) + (i32.add (i32.const 472988690)) + (i32.add (i32.const 1744796503)) + (i32.add (i32.const 275123626)) + (i32.add (i32.const -1028492158)) + (i32.add (i32.const 1785440271)) + (i32.add (i32.const -1880899454)) + (i32.add (i32.const -1670905200)) + (i32.add (i32.const 1098528465)) + (i32.add (i32.const 1194262365)) + (i32.add (i32.const -711815719)) + (i32.add (i32.const 1536617085)) + (i32.add (i32.const 250044983)) + (i32.add (i32.const 666268946)) + (i32.add (i32.const 84793843)) + (i32.add (i32.const 1350481305)) + (i32.add (i32.const -1078527481)) + (i32.add (i32.const -2043974922)) + (i32.add (i32.const 1757165055)) + (i32.add (i32.const 986553217)) + (i32.add (i32.const 1041860515)) + (i32.add (i32.const -1951064181)) + (i32.add (i32.const 1679567308)) + (i32.add (i32.const 1149200272)) + (i32.add (i32.const 384821793)) + (i32.add (i32.const -873179266)) + (i32.add (i32.const -1507583083)) + (i32.add (i32.const -424085628)) + (i32.add (i32.const -21094833)) + (i32.add (i32.const -1831884517)) + (i32.add (i32.const -489699021)) + (i32.add (i32.const -304809495)) + (i32.add (i32.const -1651455436)) + (i32.add (i32.const -671985185)) + (i32.add (i32.const 94845907)) + (i32.add (i32.const -140422156)) + (i32.add (i32.const 1455840108)) + (i32.add (i32.const 191956161)) + (i32.add (i32.const 387304187)) + (i32.add (i32.const 1279520671)) + (i32.add (i32.const -2128387083)) + (i32.add (i32.const -947362845)) + (i32.add (i32.const 17710754)) + (i32.add (i32.const 574146761)) + (i32.add (i32.const -1570079519)) + (i32.add (i32.const -1985560499)) + (i32.add (i32.const 1010153797)) + (i32.add (i32.const 1096755757)) + (i32.add (i32.const -99699006)) + (i32.add (i32.const 1766766228)) + (i32.add (i32.const 1866890073)) + (i32.add (i32.const 203952587)) + (i32.add (i32.const 1821182861)) + (i32.add (i32.const -1173846371)) + (i32.add (i32.const 2020896756)) + (i32.add (i32.const 1702495474)) + (i32.add (i32.const 1376059453)) + (i32.add (i32.const -173306664)) + (i32.add (i32.const -615777902)) + (i32.add (i32.const -218474649)) + (i32.add (i32.const -750524956)) + (i32.add (i32.const -671653722)) + (i32.add (i32.const -472506997)) + (i32.add (i32.const -8134585)) + (i32.add (i32.const 1671097220)) + (i32.add (i32.const -2074837459)) + (i32.add (i32.const 1308529744)) + (i32.add (i32.const 494561598)) + (i32.add (i32.const -2042777014)) + (i32.add (i32.const 1227561224)) + (i32.add (i32.const 192881295)) + (i32.add (i32.const -1417795727)) + (i32.add (i32.const 1136301953)) + (i32.add (i32.const -228461703)) + (i32.add (i32.const -335031021)) + (i32.add (i32.const 193113590)) + (i32.add (i32.const -573440056)) + (i32.add (i32.const -863476461)) + (i32.add (i32.const 1525109802)) + (i32.add (i32.const -1374253095)) + (i32.add (i32.const 1070619881)) + (i32.add (i32.const 1242035338)) + (i32.add (i32.const 775780356)) + (i32.add (i32.const -846243521)) + (i32.add (i32.const -1098739357)) + (i32.add (i32.const 1339797400)) + (i32.add (i32.const 199515090)) + (i32.add (i32.const -75762589)) + (i32.add (i32.const 1253101009)) + (i32.add (i32.const -473532)) + (i32.add (i32.const 1788409019)) + (i32.add (i32.const -647243092)) + (i32.add (i32.const 1160786557)) + (i32.add (i32.const 201301550)) + (i32.add (i32.const 153112841)) + (i32.add (i32.const -1913312466)) + (i32.add (i32.const -2042134601)) + (i32.add (i32.const 1384849767)) + (i32.add (i32.const -1919802377)) + (i32.add (i32.const 1305791337)) + (i32.add (i32.const 1029258136)) + (i32.add (i32.const 740045522)) + (i32.add (i32.const 907226180)) + (i32.add (i32.const -2118176540)) + (i32.add (i32.const -1811052496)) + (i32.add (i32.const -1794594265)) + (i32.add (i32.const -817654053)) + (i32.add (i32.const -1505873587)) + (i32.add (i32.const 522135579)) + (i32.add (i32.const 1095694124)) + (i32.add (i32.const -629428179)) + (i32.add (i32.const -1904666224)) + (i32.add (i32.const -966785956)) + (i32.add (i32.const 719725101)) + (i32.add (i32.const -1904850175)) + (i32.add (i32.const 992975299)) + (i32.add (i32.const 182865215)) + (i32.add (i32.const 1778863032)) + (i32.add (i32.const 1117936685)) + (i32.add (i32.const -324201454)) + (i32.add (i32.const 114510925)) + (i32.add (i32.const -233633945)) + (i32.add (i32.const -1686468553)) + (i32.add (i32.const -74185210)) + (i32.add (i32.const -660813272)) + (i32.add (i32.const 1912058593)) + (i32.add (i32.const -927902435)) + (i32.add (i32.const 947491423)) + (i32.add (i32.const -2048772772)) + (i32.add (i32.const -1337762148)) + (i32.add (i32.const 2103744784)) + (i32.add (i32.const 878446215)) + (i32.add (i32.const -1936572518)) + (i32.add (i32.const -698288871)) + (i32.add (i32.const 1942032009)) + (i32.add (i32.const -924591866)) + (i32.add (i32.const 812122739)) + (i32.add (i32.const 1583059409)) + (i32.add (i32.const 270001495)) + (i32.add (i32.const 367794999)) + (i32.add (i32.const 1482404560)) + (i32.add (i32.const 1410771202)) + (i32.add (i32.const 1257370552)) + (i32.add (i32.const -1679178723)) + (i32.add (i32.const 1961900195)) + (i32.add (i32.const 755967703)) + (i32.add (i32.const -653958692)) + (i32.add (i32.const -903489599)) + (i32.add (i32.const 1911513317)) + (i32.add (i32.const -1750174182)) + (i32.add (i32.const 1230332486)) + (i32.add (i32.const 1645621647)) + (i32.add (i32.const 1895132709)) + (i32.add (i32.const -1714076193)) + (i32.add (i32.const 1083360942)) + (i32.add (i32.const 101070323)) + (i32.add (i32.const 1084246752)) + (i32.add (i32.const -963034830)) + (i32.add (i32.const -984030199)) + (i32.add (i32.const 13318339)) + (i32.add (i32.const -2002590708)) + (i32.add (i32.const -1853134759)) + (i32.add (i32.const -2013565602)) + (i32.add (i32.const 1591866205)) + (i32.add (i32.const -1474380192)) + (i32.add (i32.const -1468146366)) + (i32.add (i32.const -1871075083)) + (i32.add (i32.const -1313678380)) + (i32.add (i32.const -811184823)) + (i32.add (i32.const 1549469044)) + (i32.add (i32.const 469314605)) + (i32.add (i32.const -572161551)) + (i32.add (i32.const 319707071)) + (i32.add (i32.const 1093515724)) + (i32.add (i32.const -777955912)) + (i32.add (i32.const -830350686)) + (i32.add (i32.const 891444441)) + (i32.add (i32.const 348790488)) + (i32.add (i32.const -860150468)) + (i32.add (i32.const 798079262)) + (i32.add (i32.const 1139884590)) + (i32.add (i32.const -1564737690)) + (i32.add (i32.const -989699329)) + (i32.add (i32.const -1369425002)) + (i32.add (i32.const 732478293)) + (i32.add (i32.const -1274508199)) + (i32.add (i32.const 984799931)) + (i32.add (i32.const -1713229420)) + (i32.add (i32.const -75076880)) + (i32.add (i32.const -2139493693)) + (i32.add (i32.const -1035332364)) + (i32.add (i32.const 1240496478)) + (i32.add (i32.const -711608568)) + (i32.add (i32.const -2126657011)) + (i32.add (i32.const 1823390368)) + (i32.add (i32.const -765766592)) + (i32.add (i32.const -1292274342)) + (i32.add (i32.const -141485505)) + (i32.add (i32.const -1429880807)) + (i32.add (i32.const 1920471355)) + (i32.add (i32.const 103470175)) + (i32.add (i32.const -684486509)) + (i32.add (i32.const 1142404912)) + (i32.add (i32.const -1887237917)) + (i32.add (i32.const 1486131876)) + (i32.add (i32.const 1140290241)) + (i32.add (i32.const -1441010015)) + (i32.add (i32.const 1751644241)) + (i32.add (i32.const 330216541)) + (i32.add (i32.const 549399148)) + (i32.add (i32.const -1541410165)) + (i32.add (i32.const -375769137)) + (i32.add (i32.const -556345849)) + (i32.add (i32.const -1354616922)) + (i32.add (i32.const -163687638)) + (i32.add (i32.const -1257533349)) + (i32.add (i32.const 1713165074)) + (i32.add (i32.const 858509473)) + (i32.add (i32.const -933494340)) + (i32.add (i32.const 986326553)) + (i32.add (i32.const 958398299)) + (i32.add (i32.const 741000680)) + (i32.add (i32.const 331990604)) + (i32.add (i32.const -579889761)) + (i32.add (i32.const 2064578529)) + (i32.add (i32.const -1053118907)) + (i32.add (i32.const -1510785048)) + (i32.add (i32.const -551502679)) + (i32.add (i32.const -305388617)) + (i32.add (i32.const 596139700)) + (i32.add (i32.const -462542238)) + (i32.add (i32.const -669809578)) + (i32.add (i32.const -1883196943)) + (i32.add (i32.const 65576430)) + (i32.add (i32.const 282809759)) + (i32.add (i32.const 2118539859)) + (i32.add (i32.const -1537993784)) + (i32.add (i32.const 2147356018)) + (i32.add (i32.const -229147936)) + (i32.add (i32.const 2096071981)) + (i32.add (i32.const 2142354554)) + (i32.add (i32.const -257854616)) + (i32.add (i32.const 528447556)) + (i32.add (i32.const -1700865220)) + (i32.add (i32.const 1897325641)) + (i32.add (i32.const -1775010311)) + (i32.add (i32.const 1943051239)) + (i32.add (i32.const 1386080887)) + (i32.add (i32.const 1656269021)) + (i32.add (i32.const 1005558664)) + (i32.add (i32.const 1754625662)) + (i32.add (i32.const -1649964002)) + (i32.add (i32.const -567597736)) + (i32.add (i32.const 1433803372)) + (i32.add (i32.const -1647951430)) + (i32.add (i32.const 1081303400)) + (i32.add (i32.const 749782111)) + (i32.add (i32.const -922785300)) + (i32.add (i32.const 162266746)) + (i32.add (i32.const -712103576)) + (i32.add (i32.const 1880363768)) + (i32.add (i32.const -29181681)) + (i32.add (i32.const 1408598260)) + (i32.add (i32.const 1119917717)) + (i32.add (i32.const 1692686537)) + (i32.add (i32.const 1473447744)) + (i32.add (i32.const -1139553135)) + (i32.add (i32.const 2085562826)) + (i32.add (i32.const 684670777)) + (i32.add (i32.const 1738237276)) + (i32.add (i32.const -27503683)) + (i32.add (i32.const -2074794353)) + (i32.add (i32.const 127641259)) + (i32.add (i32.const 1307801282)) + (i32.add (i32.const -1856778779)) + (i32.add (i32.const -2136453141)) + (i32.add (i32.const -713064862)) + (i32.add (i32.const -1377707089)) + (i32.add (i32.const 1433548279)) + (i32.add (i32.const 2077489731)) + (i32.add (i32.const 417903264)) + (i32.add (i32.const -710515542)) + (i32.add (i32.const 125570911)) + (i32.add (i32.const -280261681)) + (i32.add (i32.const 292693910)) + (i32.add (i32.const -1095897706)) + (i32.add (i32.const 157916140)) + (i32.add (i32.const 515996429)) + (i32.add (i32.const 2110776751)) + (i32.add (i32.const -80943632)) + (i32.add (i32.const 1457419290)) + (i32.add (i32.const 1212208025)) + (i32.add (i32.const -450670821)) + (i32.add (i32.const 582987827)) + (i32.add (i32.const -1360874333)) + (i32.add (i32.const -744972352)) + (i32.add (i32.const -2117442242)) + (i32.add (i32.const 1296058763)) + (i32.add (i32.const 793353909)) + (i32.add (i32.const -1173740408)) + (i32.add (i32.const -1505076050)) + (i32.add (i32.const 2091563836)) + (i32.add (i32.const 1596059923)) + (i32.add (i32.const -1045119051)) + (i32.add (i32.const 1185659744)) + (i32.add (i32.const -1451223595)) + (i32.add (i32.const -696983431)) + (i32.add (i32.const 468967108)) + (i32.add (i32.const -547655936)) + (i32.add (i32.const -1056916375)) + (i32.add (i32.const 842399220)) + (i32.add (i32.const 1210083293)) + (i32.add (i32.const -1151424440)) + (i32.add (i32.const 1146233548)) + (i32.add (i32.const -1020543959)) + (i32.add (i32.const 2117573090)) + (i32.add (i32.const 878066889)) + (i32.add (i32.const 862650443)) + (i32.add (i32.const -1496573433)) + (i32.add (i32.const -1383082129)) + (i32.add (i32.const -126294666)) + (i32.add (i32.const -134767161)) + (i32.add (i32.const 42979283)) + (i32.add (i32.const 1733639504)) + (i32.add (i32.const 1877287080)) + (i32.add (i32.const 570937117)) + (i32.add (i32.const -693544166)) + (i32.add (i32.const 972751422)) + (i32.add (i32.const 1438190017)) + (i32.add (i32.const 15851555)) + (i32.add (i32.const 1149470599)) + (i32.add (i32.const -799453113)) + (i32.add (i32.const -427016210)) + (i32.add (i32.const -2074797200)) + (i32.add (i32.const 518777592)) + (i32.add (i32.const 583226833)) + (i32.add (i32.const -1880716195)) + (i32.add (i32.const -793190884)) + (i32.add (i32.const -1049193547)) + (i32.add (i32.const 925443043)) + (i32.add (i32.const 1940500064)) + (i32.add (i32.const 2063962593)) + (i32.add (i32.const -505118359)) + (i32.add (i32.const 1416601455)) + (i32.add (i32.const 234516433)) + (i32.add (i32.const 2037160995)) + (i32.add (i32.const 259866268)) + (i32.add (i32.const -1351830021)) + (i32.add (i32.const -1747987939)) + (i32.add (i32.const 2016995610)) + (i32.add (i32.const -1165344789)) + (i32.add (i32.const -1232121237)) + (i32.add (i32.const -595683095)) + (i32.add (i32.const 672649188)) + (i32.add (i32.const -594537170)) + (i32.add (i32.const -247446319)) + (i32.add (i32.const -655161707)) + (i32.add (i32.const -1398505650)) + (i32.add (i32.const -24036065)) + (i32.add (i32.const 760928173)) + (i32.add (i32.const -2372767)) + (i32.add (i32.const -114239640)) + (i32.add (i32.const 122793132)) + (i32.add (i32.const 1723372249)) + (i32.add (i32.const -40682341)) + (i32.add (i32.const -591179899)) + (i32.add (i32.const -676241904)) + (i32.add (i32.const -297966327)) + (i32.add (i32.const -1617043054)) + (i32.add (i32.const 428853437)) + (i32.add (i32.const 878531944)) + (i32.add (i32.const 1690210056)) + (i32.add (i32.const -1329187247)) + (i32.add (i32.const 1574454375)) + (i32.add (i32.const 1150916789)) + (i32.add (i32.const 271887207)) + (i32.add (i32.const -443394240)) + (i32.add (i32.const 743824309)) + (i32.add (i32.const 921644466)) + (i32.add (i32.const -486568781)) + (i32.add (i32.const -1771789829)) + (i32.add (i32.const 1454585964)) + (i32.add (i32.const -1303211886)) + (i32.add (i32.const -939931755)) + (i32.add (i32.const 1063061674)) + (i32.add (i32.const -1411742304)) + (i32.add (i32.const 549552782)) + (i32.add (i32.const -1174298834)) + (i32.add (i32.const -1656694849)) + (i32.add (i32.const -463805566)) + (i32.add (i32.const 724645882)) + (i32.add (i32.const -2145663354)) + (i32.add (i32.const -435688673)) + (i32.add (i32.const -673625628)) + (i32.add (i32.const 340669873)) + (i32.add (i32.const 843216535)) + (i32.add (i32.const 394631552)) + (i32.add (i32.const 1468489930)) + (i32.add (i32.const 1582379109)) + (i32.add (i32.const 244977514)) + (i32.add (i32.const 1870456118)) + (i32.add (i32.const -1753616581)) + (i32.add (i32.const -2078883758)) + (i32.add (i32.const 644300992)) + (i32.add (i32.const -676084580)) + (i32.add (i32.const -972508205)) + (i32.add (i32.const -1511624633)) + (i32.add (i32.const 1515504686)) + (i32.add (i32.const 1627172899)) + (i32.add (i32.const -253744102)) + (i32.add (i32.const -1256473693)) + (i32.add (i32.const 646984677)) + (i32.add (i32.const 486578323)) + (i32.add (i32.const -1391716943)) + (i32.add (i32.const -2015352033)) + (i32.add (i32.const -282089324)) + (i32.add (i32.const -249892643)) + (i32.add (i32.const 1305633273)) + (i32.add (i32.const 1794982674)) + (i32.add (i32.const 1082739721)) + (i32.add (i32.const 692694601)) + (i32.add (i32.const -1472572918)) + (i32.add (i32.const -793870576)) + (i32.add (i32.const 958573087)) + (i32.add (i32.const 350873935)) + (i32.add (i32.const 974507598)) + (i32.add (i32.const 1729966557)) + (i32.add (i32.const 1167613702)) + (i32.add (i32.const 860760562)) + (i32.add (i32.const -177076501)) + (i32.add (i32.const 1994537502)) + (i32.add (i32.const 421548779)) + (i32.add (i32.const 1031939072)) + (i32.add (i32.const 1392630315)) + (i32.add (i32.const -169484648)) + (i32.add (i32.const -675039610)) + (i32.add (i32.const -230965396)) + (i32.add (i32.const -1960044208)) + (i32.add (i32.const 563482690)) + (i32.add (i32.const -56681867)) + (i32.add (i32.const -43779259)) + (i32.add (i32.const -1384531186)) + (i32.add (i32.const -736655210)) + (i32.add (i32.const 1530099083)) + (i32.add (i32.const 1568589057)) + (i32.add (i32.const 1822676394)) + (i32.add (i32.const 1588238734)) + (i32.add (i32.const 1446092704)) + (i32.add (i32.const -1061367086)) + (i32.add (i32.const -1928624101)) + (i32.add (i32.const -446557732)) + (i32.add (i32.const -149885871)) + (i32.add (i32.const 2038134570)) + (i32.add (i32.const 1250752585)) + (i32.add (i32.const 1392793725)) + (i32.add (i32.const 153732353)) + (i32.add (i32.const 1484997936)) + (i32.add (i32.const 1594441112)) + (i32.add (i32.const 1947626425)) + (i32.add (i32.const 1402972294)) + (i32.add (i32.const 137878178)) + (i32.add (i32.const 435249453)) + (i32.add (i32.const 1553875044)) + (i32.add (i32.const -861517714)) + (i32.add (i32.const 1912307799)) + (i32.add (i32.const 1083774621)) + (i32.add (i32.const 404906473)) + (i32.add (i32.const 1467672671)) + (i32.add (i32.const 1632276290)) + (i32.add (i32.const 578668997)) + (i32.add (i32.const 2098252)) + (i32.add (i32.const 1138656416)) + (i32.add (i32.const -942840458)) + (i32.add (i32.const -676584968)) + (i32.add (i32.const -1727526332)) + (i32.add (i32.const -575067909)) + (i32.add (i32.const 30126717)) + (i32.add (i32.const -2128284349)) + (i32.add (i32.const 2085419622)) + (i32.add (i32.const -1458280687)) + (i32.add (i32.const -437005100)) + (i32.add (i32.const 632920052)) + (i32.add (i32.const 236096590)) + (i32.add (i32.const 807992309)) + (i32.add (i32.const 646213088)) + (i32.add (i32.const -519500617)) + (i32.add (i32.const -1561775529)) + (i32.add (i32.const 919996170)) + (i32.add (i32.const -566957947)) + (i32.add (i32.const 2141517684)) + (i32.add (i32.const 607475430)) + (i32.add (i32.const -1306366483)) + (i32.add (i32.const 1906569242)) + (i32.add (i32.const 1981481457)) + (i32.add (i32.const 1869981611)) + (i32.add (i32.const 386237607)) + (i32.add (i32.const 1602132507)) + (i32.add (i32.const 1109290439)) + (i32.add (i32.const 572678622)) + (i32.add (i32.const 687708812)) + (i32.add (i32.const -1424527460)) + (i32.add (i32.const -970350829)) + (i32.add (i32.const -850092681)) + (i32.add (i32.const -394147091)) + (i32.add (i32.const -1741458291)) + (i32.add (i32.const 216849099)) + (i32.add (i32.const 83054823)) + (i32.add (i32.const 418578335)) + (i32.add (i32.const 573042164)) + (i32.add (i32.const -1341354672)) + (i32.add (i32.const -1938705699)) + (i32.add (i32.const -1701773622)) + (i32.add (i32.const -977606250)) + (i32.add (i32.const -728773218)) + (i32.add (i32.const -609144357)) + (i32.add (i32.const 1227830053)) + (i32.add (i32.const 1856282967)) + (i32.add (i32.const -2069516862)) + (i32.add (i32.const 2053062593)) + (i32.add (i32.const -1378768211)) + (i32.add (i32.const -1007953587)) + (i32.add (i32.const -255418589)) + (i32.add (i32.const 754347250)) + (i32.add (i32.const -1791624621)) + (i32.add (i32.const 500439366)) + (i32.add (i32.const 651073038)) + (i32.add (i32.const 849417875)) + (i32.add (i32.const 1736220241)) + (i32.add (i32.const 2056801931)) + (i32.add (i32.const 155395797)) + (i32.add (i32.const -598979975)) + (i32.add (i32.const 246689700)) + (i32.add (i32.const 1824551717)) + (i32.add (i32.const -1629246329)) + (i32.add (i32.const -388696272)) + (i32.add (i32.const -2078236673)) + (i32.add (i32.const -162435115)) + (i32.add (i32.const 1481451239)) + (i32.add (i32.const 1909989119)) + (i32.add (i32.const 267882167)) + (i32.add (i32.const -1202085152)) + (i32.add (i32.const -1311432456)) + (i32.add (i32.const -1250564920)) + (i32.add (i32.const -949244811)) + (i32.add (i32.const 1529172338)) + (i32.add (i32.const -898772372)) + (i32.add (i32.const -947670395)) + (i32.add (i32.const 1309814100)) + (i32.add (i32.const 297979506)) + (i32.add (i32.const -1567399999)) + (i32.add (i32.const 429878719)) + (i32.add (i32.const -86716170)) + (i32.add (i32.const -1293024274)) + (i32.add (i32.const -1347982986)) + (i32.add (i32.const 237488051)) + (i32.add (i32.const -2100525480)) + (i32.add (i32.const -1507032684)) + (i32.add (i32.const 1869300595)) + (i32.add (i32.const -1346797230)) + (i32.add (i32.const 28102503)) + (i32.add (i32.const -1116277647)) + (i32.add (i32.const -1200313271)) + (i32.add (i32.const -277474648)) + (i32.add (i32.const -251568878)) + (i32.add (i32.const 215475908)) + (i32.add (i32.const -1283778663)) + (i32.add (i32.const 1884251528)) + (i32.add (i32.const 104217190)) + (i32.add (i32.const -956956101)) + (i32.add (i32.const -42418079)) + (i32.add (i32.const 1068198804)) + (i32.add (i32.const -1656344076)) + (i32.add (i32.const -842508783)) + (i32.add (i32.const 1404792651)) + (i32.add (i32.const 212784950)) + (i32.add (i32.const -761073940)) + (i32.add (i32.const -1921599293)) + (i32.add (i32.const 1184187761)) + (i32.add (i32.const -1725085241)) + (i32.add (i32.const -1744541550)) + (i32.add (i32.const -507212435)) + (i32.add (i32.const -1329364826)) + (i32.add (i32.const -701016751)) + (i32.add (i32.const 1661150811)) + (i32.add (i32.const -1677513546)) + (i32.add (i32.const 1217762393)) + (i32.add (i32.const 833054692)) + (i32.add (i32.const 220063220)) + (i32.add (i32.const 2312004)) + (i32.add (i32.const -1017727511)) + (i32.add (i32.const 397543527)) + (i32.add (i32.const 109534960)) + (i32.add (i32.const -1626515713)) + (i32.add (i32.const -993673526)) + (i32.add (i32.const 1228879479)) + (i32.add (i32.const 2098973122)) + (i32.add (i32.const -390309946)) + (i32.add (i32.const 1732493059)) + (i32.add (i32.const -1479265143)) + (i32.add (i32.const 1869318615)) + (i32.add (i32.const -1797667844)) + (i32.add (i32.const -2087741977)) + (i32.add (i32.const -17301481)) + (i32.add (i32.const -103915597)) + (i32.add (i32.const -237503547)) + (i32.add (i32.const 378907545)) + (i32.add (i32.const 1921729434)) + (i32.add (i32.const 65959289)) + (i32.add (i32.const 411223460)) + (i32.add (i32.const 1724781397)) + (i32.add (i32.const -509489876)) + (i32.add (i32.const 1407645924)) + (i32.add (i32.const -434306431)) + (i32.add (i32.const 1352056408)) + (i32.add (i32.const 1603787099)) + (i32.add (i32.const 1479225042)) + (i32.add (i32.const 1780218786)) + (i32.add (i32.const 390978401)) + (i32.add (i32.const 1732142241)) + (i32.add (i32.const -1819657983)) + (i32.add (i32.const 468270873)) + (i32.add (i32.const -1590363090)) + (i32.add (i32.const 1692797981)) + (i32.add (i32.const -1143833883)) + (i32.add (i32.const -1233291127)) + (i32.add (i32.const -680033842)) + (i32.add (i32.const -588129462)) + (i32.add (i32.const -32187615)) + (i32.add (i32.const -75383607)) + (i32.add (i32.const 883399255)) + (i32.add (i32.const -1313487736)) + (i32.add (i32.const -605277631)) + (i32.add (i32.const -611197436)) + (i32.add (i32.const 1037147542)) + (i32.add (i32.const 1787932295)) + (i32.add (i32.const -1030600000)) + (i32.add (i32.const 1683904921)) + (i32.add (i32.const 865635091)) + (i32.add (i32.const 970130535)) + (i32.add (i32.const -1155094097)) + (i32.add (i32.const -1600633899)) + (i32.add (i32.const -1517202093)) + (i32.add (i32.const 1165638408)) + (i32.add (i32.const -809309072)) + (i32.add (i32.const 877855334)) + (i32.add (i32.const -1663773675)) + (i32.add (i32.const 56685360)) + (i32.add (i32.const -1595481836)) + (i32.add (i32.const -5241718)) + (i32.add (i32.const 6438720)) + (i32.add (i32.const -419403558)) + (i32.add (i32.const -208151228)) + (i32.add (i32.const -1423669078)) + (i32.add (i32.const 698832256)) + (i32.add (i32.const -107340966)) + (i32.add (i32.const 860470198)) + (i32.add (i32.const -484205690)) + (i32.add (i32.const 1728868366)) + (i32.add (i32.const -1240696541)) + (i32.add (i32.const 412731802)) + (i32.add (i32.const -520543155)) + (i32.add (i32.const 748312045)) + (i32.add (i32.const 722594751)) + (i32.add (i32.const 916300480)) + (i32.add (i32.const -1390741338)) + (i32.add (i32.const -54319756)) + (i32.add (i32.const 1624303958)) + (i32.add (i32.const -621154142)) + (i32.add (i32.const 1417227819)) + (i32.add (i32.const -504451803)) + (i32.add (i32.const 1185782512)) + (i32.add (i32.const 1607319607)) + (i32.add (i32.const 1815408390)) + (i32.add (i32.const 1485388183)) + (i32.add (i32.const 315272517)) + (i32.add (i32.const -1111619361)) + (i32.add (i32.const 1553155849)) + (i32.add (i32.const 354402621)) + (i32.add (i32.const -23993887)) + (i32.add (i32.const -1236988661)) + (i32.add (i32.const -1109348201)) + (i32.add (i32.const 1163343655)) + (i32.add (i32.const -1775900829)) + (i32.add (i32.const 2125557795)) + (i32.add (i32.const -783336752)) + (i32.add (i32.const -1019876256)) + (i32.add (i32.const 532228928)) + (i32.add (i32.const -352017943)) + (i32.add (i32.const -1113155191)) + (i32.add (i32.const 1127998895)) + (i32.add (i32.const 2130229624)) + (i32.add (i32.const 645122552)) + (i32.add (i32.const 1803614569)) + (i32.add (i32.const -1496837460)) + (i32.add (i32.const -1625033731)) + (i32.add (i32.const -1852754904)) + (i32.add (i32.const -729317978)) + (i32.add (i32.const -1294272331)) + (i32.add (i32.const 1488883276)) + (i32.add (i32.const -1178279087)) + (i32.add (i32.const 1423039690)) + (i32.add (i32.const -1051440277)) + (i32.add (i32.const -1930750995)) + (i32.add (i32.const 1678431160)) + (i32.add (i32.const 1516363230)) + (i32.add (i32.const -131432419)) + (i32.add (i32.const -1934900717)) + (i32.add (i32.const 1293836674)) + (i32.add (i32.const -356776933)) + (i32.add (i32.const 1022702395)) + (i32.add (i32.const -1282166862)) + (i32.add (i32.const -501963427)) + (i32.add (i32.const -62660692)) + (i32.add (i32.const -2145849949)) + (i32.add (i32.const -1630740678)) + (i32.add (i32.const -1638397456)) + (i32.add (i32.const 72220869)) + (i32.add (i32.const 1986467766)) + (i32.add (i32.const 1280709970)) + (i32.add (i32.const -1949717209)) + (i32.add (i32.const -550770289)) + (i32.add (i32.const 1071654598)) + (i32.add (i32.const 944418091)) + (i32.add (i32.const 843029703)) + (i32.add (i32.const 612796090)) + (i32.add (i32.const -2013775591)) + (i32.add (i32.const -1038040327)) + (i32.add (i32.const 38110707)) + (i32.add (i32.const 1814880196)) + (i32.add (i32.const -1934731739)) + (i32.add (i32.const 1279509670)) + (i32.add (i32.const -1560351479)) + (i32.add (i32.const -1368729506)) + (i32.add (i32.const 12115063)) + (i32.add (i32.const 1376956431)) + (i32.add (i32.const -10190159)) + (i32.add (i32.const 425584111)) + (i32.add (i32.const 1612874006)) + (i32.add (i32.const -261630193)) + (i32.add (i32.const -1496096059)) + (i32.add (i32.const -1750321596)) + (i32.add (i32.const -2099601963)) + (i32.add (i32.const -585138133)) + (i32.add (i32.const -448218652)) + (i32.add (i32.const -239606947)) + (i32.add (i32.const 1621013647)) + (i32.add (i32.const -1308816014)) + (i32.add (i32.const -488119719)) + (i32.add (i32.const -434025680)) + (i32.add (i32.const -1382620171)) + (i32.add (i32.const -419269536)) + (i32.add (i32.const 402022642)) + (i32.add (i32.const 237787238)) + (i32.add (i32.const 915430890)) + (i32.add (i32.const 307939911)) + (i32.add (i32.const 1836581053)) + (i32.add (i32.const -657456891)) + (i32.add (i32.const 1855715594)) + (i32.add (i32.const 569454013)) + (i32.add (i32.const 271293317)) + (i32.add (i32.const -1260283491)) + (i32.add (i32.const -406548180)) + (i32.add (i32.const -1034861991)) + (i32.add (i32.const 15943095)) + (i32.add (i32.const -1136535897)) + (i32.add (i32.const -1211580950)) + (i32.add (i32.const 1606483185)) + (i32.add (i32.const 1652880484)) + (i32.add (i32.const 1624303610)) + (i32.add (i32.const -977855165)) + (i32.add (i32.const 653767405)) + (i32.add (i32.const 632970388)) + (i32.add (i32.const 1208839766)) + (i32.add (i32.const 60178826)) + (i32.add (i32.const 1771833107)) + (i32.add (i32.const 1613056183)) + (i32.add (i32.const -292030693)) + (i32.add (i32.const -556535656)) + (i32.add (i32.const -325472120)) + (i32.add (i32.const 1506684635)) + (i32.add (i32.const 158843761)) + (i32.add (i32.const 256073741)) + (i32.add (i32.const 1757909419)) + (i32.add (i32.const -271532113)) + (i32.add (i32.const -1142623866)) + (i32.add (i32.const 2107064274)) + (i32.add (i32.const 197681291)) + (i32.add (i32.const 291014283)) + (i32.add (i32.const -1564087975)) + (i32.add (i32.const 865354150)) + (i32.add (i32.const -806338777)) + (i32.add (i32.const -1471305197)) + (i32.add (i32.const 499873121)) + (i32.add (i32.const 1213198837)) + (i32.add (i32.const 1274281882)) + (i32.add (i32.const -1856357586)) + (i32.add (i32.const -480836895)) + (i32.add (i32.const 566159545)) + (i32.add (i32.const 801846824)) + (i32.add (i32.const -1707611208)) + (i32.add (i32.const 272104431)) + (i32.add (i32.const 1824037357)) + (i32.add (i32.const 1188276130)) + (i32.add (i32.const 453331757)) + (i32.add (i32.const 480000)) + (i32.add (i32.const -1323289583)) + (i32.add (i32.const 1934856480)) + (i32.add (i32.const -1072954202)) + (i32.add (i32.const 1107369866)) + (i32.add (i32.const 1975875981)) + (i32.add (i32.const -2009085326)) + (i32.add (i32.const -1345162369)) + (i32.add (i32.const -93759131)) + (i32.add (i32.const -881015791)) + (i32.add (i32.const -735718758)) + (i32.add (i32.const 921453153)) + (i32.add (i32.const -1019347786)) + (i32.add (i32.const -52625405)) + (i32.add (i32.const 1832543934)) + (i32.add (i32.const 1010887499)) + (i32.add (i32.const -1863402204)) + (i32.add (i32.const -1048069742)) + (i32.add (i32.const 764002390)) + (i32.add (i32.const 69098841)) + (i32.add (i32.const -722731597)) + (i32.add (i32.const 434686123)) + (i32.add (i32.const -58074206)) + (i32.add (i32.const 482103967)) + (i32.add (i32.const -89522655)) + (i32.add (i32.const 1428635497)) + (i32.add (i32.const 854704550)) + (i32.add (i32.const 154038699)) + (i32.add (i32.const -962057830)) + (i32.add (i32.const -1924148363)) + (i32.add (i32.const -67296117)) + (i32.add (i32.const -30877510)) + (i32.add (i32.const 364538130)) + (i32.add (i32.const 627199989)) + (i32.add (i32.const 1918450214)) + (i32.add (i32.const 1091792273)) + (i32.add (i32.const 304208716)) + (i32.add (i32.const 727784864)) + (i32.add (i32.const -1072092013)) + (i32.add (i32.const -1516498915)) + (i32.add (i32.const -969255276)) + (i32.add (i32.const 1200230549)) + (i32.add (i32.const 1190751428)) + (i32.add (i32.const -186290446)) + (i32.add (i32.const 1725366449)) + (i32.add (i32.const 1404193081)) + (i32.add (i32.const -78628515)) + (i32.add (i32.const -753870894)) + (i32.add (i32.const 1595581139)) + (i32.add (i32.const 9098546)) + (i32.add (i32.const 111780812)) + (i32.add (i32.const 1259292087)) + (i32.add (i32.const -749901233)) + (i32.add (i32.const 298170112)) + (i32.add (i32.const -185952065)) + (i32.add (i32.const -924806321)) + (i32.add (i32.const 214777014)) + (i32.add (i32.const -615638447)) + (i32.add (i32.const -1671637836)) + (i32.add (i32.const 2070321543)) + (i32.add (i32.const 1955367500)) + (i32.add (i32.const -1432362916)) + (i32.add (i32.const 1272647707)) + (i32.add (i32.const 1916366350)) + (i32.add (i32.const -2101103940)) + (i32.add (i32.const 128759761)) + (i32.add (i32.const -1671743869)) + (i32.add (i32.const 850778791)) + (i32.add (i32.const -2060055180)) + (i32.add (i32.const 512736745)) + (i32.add (i32.const 1819747587)) + (i32.add (i32.const -1387185744)) + (i32.add (i32.const 1586147168)) + (i32.add (i32.const 1241646484)) + (i32.add (i32.const 341275531)) + (i32.add (i32.const 580301181)) + (i32.add (i32.const 244177248)) + (i32.add (i32.const 47252474)) + (i32.add (i32.const -733408546)) + (i32.add (i32.const 2004371963)) + (i32.add (i32.const -897219190)) + (i32.add (i32.const -1460400883)) + (i32.add (i32.const 2098803505)) + (i32.add (i32.const -1442108015)) + (i32.add (i32.const -151489870)) + (i32.add (i32.const 251473899)) + (i32.add (i32.const -1123003806)) + (i32.add (i32.const 1207520183)) + (i32.add (i32.const 320211693)) + (i32.add (i32.const 96442893)) + (i32.add (i32.const 671831206)) + (i32.add (i32.const 2099007424)) + (i32.add (i32.const 36186926)) + (i32.add (i32.const 516173882)) + (i32.add (i32.const -621771535)) + (i32.add (i32.const -238489146)) + (i32.add (i32.const -921347141)) + (i32.add (i32.const 556557052)) + (i32.add (i32.const 1600876384)) + (i32.add (i32.const -1885951649)) + (i32.add (i32.const 849694848)) + (i32.add (i32.const 13284259)) + (i32.add (i32.const 925152936)) + (i32.add (i32.const 148220608)) + (i32.add (i32.const -597995621)) + (i32.add (i32.const -369284999)) + (i32.add (i32.const 857380821)) + (i32.add (i32.const -259168626)) + (i32.add (i32.const -792926227)) + (i32.add (i32.const 123183909)) + (i32.add (i32.const -887148252)) + (i32.add (i32.const 503509501)) + (i32.add (i32.const 794885608)) + (i32.add (i32.const 1929066752)) + (i32.add (i32.const -187948215)) + (i32.add (i32.const 907975127)) + (i32.add (i32.const 969198459)) + (i32.add (i32.const -473727833)) + (i32.add (i32.const 207772899)) + (i32.add (i32.const -1260733993)) + (i32.add (i32.const 379925935)) + (i32.add (i32.const -269658938)) + (i32.add (i32.const -126882762)) + (i32.add (i32.const 1342708371)) + (i32.add (i32.const -6448101)) + (i32.add (i32.const 1951000126)) + (i32.add (i32.const 1676338329)) + (i32.add (i32.const 548137966)) + (i32.add (i32.const -1560034847)) + (i32.add (i32.const 2120412753)) + (i32.add (i32.const 886344535)) + (i32.add (i32.const -668626536)) + (i32.add (i32.const 2048601697)) + (i32.add (i32.const -1627403590)) + (i32.add (i32.const -182181315)) + (i32.add (i32.const 1420941464)) + (i32.add (i32.const 1483564163)) + (i32.add (i32.const 1576107234)) + (i32.add (i32.const 1197400126)) + (i32.add (i32.const -1234939536)) + (i32.add (i32.const -712460105)) + (i32.add (i32.const -1301983419)) + (i32.add (i32.const -1152500246)) + (i32.add (i32.const 1435568946)) + (i32.add (i32.const 1335314471)) + (i32.add (i32.const 677459652)) + (i32.add (i32.const 80592141)) + (i32.add (i32.const -1343801454)) + (i32.add (i32.const 1208580533)) + (i32.add (i32.const 1971970110)) + (i32.add (i32.const 1465565437)) + (i32.add (i32.const -71122156)) + (i32.add (i32.const 1911625737)) + (i32.add (i32.const 1765320452)) + (i32.add (i32.const -353375814)) + (i32.add (i32.const 1256626342)) + (i32.add (i32.const -1037134370)) + (i32.add (i32.const 1483288774)) + (i32.add (i32.const -350413297)) + (i32.add (i32.const 363136137)) + (i32.add (i32.const 518663092)) + (i32.add (i32.const 472760261)) + (i32.add (i32.const 794113473)) + (i32.add (i32.const 353955573)) + (i32.add (i32.const 1466648035)) + (i32.add (i32.const 1750409630)) + (i32.add (i32.const 1947879297)) + (i32.add (i32.const 10740108)) + (i32.add (i32.const -461481086)) + (i32.add (i32.const -1485475337)) + (i32.add (i32.const 874532597)) + (i32.add (i32.const 672857431)) + (i32.add (i32.const -551235287)) + (i32.add (i32.const 1223676833)) + (i32.add (i32.const -1467660817)) + (i32.add (i32.const -2071550333)) + (i32.add (i32.const -1244128334)) + (i32.add (i32.const -1177334204)) + (i32.add (i32.const -24836014)) + (i32.add (i32.const 768398009)) + (i32.add (i32.const -2066054108)) + (i32.add (i32.const -937533427)) + (i32.add (i32.const -1167556980)) + (i32.add (i32.const -1526350666)) + (i32.add (i32.const 1668013578)) + (i32.add (i32.const 1799741682)) + (i32.add (i32.const 1055792204)) + (i32.add (i32.const -1232589344)) + (i32.add (i32.const 514987514)) + (i32.add (i32.const -760464420)) + (i32.add (i32.const -1595544577)) + (i32.add (i32.const -1700679684)) + (i32.add (i32.const 1710905535)) + (i32.add (i32.const 1913245038)) + (i32.add (i32.const 1771873067)) + (i32.add (i32.const -1281943648)) + (i32.add (i32.const -1530236887)) + (i32.add (i32.const 1489151466)) + (i32.add (i32.const -548219149)) + (i32.add (i32.const 606825670)) + (i32.add (i32.const 972164313)) + (i32.add (i32.const -177467236)) + (i32.add (i32.const -1872229042)) + (i32.add (i32.const 2064994255)) + (i32.add (i32.const 2006674822)) + (i32.add (i32.const 420237842)) + (i32.add (i32.const -1783473764)) + (i32.add (i32.const -369584193)) + (i32.add (i32.const 388385613)) + (i32.add (i32.const -166113926)) + (i32.add (i32.const 1322258540)) + (i32.add (i32.const -292640016)) + (i32.add (i32.const -2085131132)) + (i32.add (i32.const 929448192)) + (i32.add (i32.const -1072038200)) + (i32.add (i32.const 841214734)) + (i32.add (i32.const 1225250472)) + (i32.add (i32.const -1885201916)) + (i32.add (i32.const -423198147)) + (i32.add (i32.const -495847716)) + (i32.add (i32.const -1188557833)) + (i32.add (i32.const 1423591513)) + (i32.add (i32.const 1199629919)) + (i32.add (i32.const 576858270)) + (i32.add (i32.const -1794921342)) + (i32.add (i32.const -1990537628)) + (i32.add (i32.const -1865555753)) + (i32.add (i32.const -530924649)) + (i32.add (i32.const -1520402046)) + (i32.add (i32.const 651305762)) + (i32.add (i32.const 1842948281)) + (i32.add (i32.const 1086727267)) + (i32.add (i32.const 1725411852)) + (i32.add (i32.const 1296745557)) + (i32.add (i32.const 1189735577)) + (i32.add (i32.const 1046174699)) + (i32.add (i32.const 614808098)) + (i32.add (i32.const -1092907833)) + (i32.add (i32.const -1020220843)) + (i32.add (i32.const 66898974)) + (i32.add (i32.const 1726050323)) + (i32.add (i32.const 1297698040)) + (i32.add (i32.const 1989763615)) + (i32.add (i32.const 2000380365)) + (i32.add (i32.const 1398569849)) + (i32.add (i32.const -948500436)) + (i32.add (i32.const -1035032018)) + (i32.add (i32.const -1545063424)) + (i32.add (i32.const -334758773)) + (i32.add (i32.const -1934462533)) + (i32.add (i32.const -842844437)) + (i32.add (i32.const 1713162618)) + (i32.add (i32.const 986131872)) + (i32.add (i32.const 1635347744)) + (i32.add (i32.const -1447663825)) + (i32.add (i32.const 146060833)) + (i32.add (i32.const 1653763430)) + (i32.add (i32.const 1837906578)) + (i32.add (i32.const 1131603416)) + (i32.add (i32.const 768236753)) + (i32.add (i32.const -749714834)) + (i32.add (i32.const -582530281)) + (i32.add (i32.const -114958495)) + (i32.add (i32.const -196807922)) + (i32.add (i32.const 117308195)) + (i32.add (i32.const -1692780536)) + (i32.add (i32.const 1297977408)) + (i32.add (i32.const 2026582314)) + (i32.add (i32.const -1660443388)) + (i32.add (i32.const -1798823386)) + (i32.add (i32.const -1419133221)) + (i32.add (i32.const -334210255)) + (i32.add (i32.const -411274774)) + (i32.add (i32.const 179901842)) + (i32.add (i32.const -970362510)) + (i32.add (i32.const 1359976554)) + (i32.add (i32.const -1800771803)) + (i32.add (i32.const 176318024)) + (i32.add (i32.const -103626983)) + (i32.add (i32.const -854798187)) + (i32.add (i32.const -648193666)) + (i32.add (i32.const -919208207)) + (i32.add (i32.const -158755654)) + (i32.add (i32.const 2025752314)) + (i32.add (i32.const 921617843)) + (i32.add (i32.const 1608824062)) + (i32.add (i32.const 27682354)) + (i32.add (i32.const 1597178412)) + (i32.add (i32.const -1574101803)) + (i32.add (i32.const -1346069863)) + (i32.add (i32.const -290799319)) + (i32.add (i32.const 1330734866)) + (i32.add (i32.const 450035942)) + (i32.add (i32.const -1377543061)) + (i32.add (i32.const -227820722)) + (i32.add (i32.const 76332797)) + (i32.add (i32.const 1842238102)) + (i32.add (i32.const 1687214006)) + (i32.add (i32.const 202286616)) + (i32.add (i32.const 156774584)) + (i32.add (i32.const -1579759415)) + (i32.add (i32.const -834809482)) + (i32.add (i32.const 1117960407)) + (i32.add (i32.const -198550590)) + (i32.add (i32.const -895345979)) + (i32.add (i32.const -1164154312)) + (i32.add (i32.const -886687691)) + (i32.add (i32.const 1929182561)) + (i32.add (i32.const 711432229)) + (i32.add (i32.const -1513479318)) + (i32.add (i32.const 899983751)) + (i32.add (i32.const -1063675611)) + (i32.add (i32.const -1300124523)) + (i32.add (i32.const 1368842776)) + (i32.add (i32.const 2052144906)) + (i32.add (i32.const 85560135)) + (i32.add (i32.const 625688432)) + (i32.add (i32.const 848928235)) + (i32.add (i32.const -1563758018)) + (i32.add (i32.const 1737631908)) + (i32.add (i32.const 1695766633)) + (i32.add (i32.const -641315393)) + (i32.add (i32.const -1739974836)) + (i32.add (i32.const -1633171850)) + (i32.add (i32.const 288509499)) + (i32.add (i32.const -829290631)) + (i32.add (i32.const -15945183)) + (i32.add (i32.const -399313953)) + (i32.add (i32.const -118088858)) + (i32.add (i32.const -1963026591)) + (i32.add (i32.const 1700672562)) + (i32.add (i32.const -1769341688)) + (i32.add (i32.const -1538439330)) + (i32.add (i32.const 325543469)) + (i32.add (i32.const 534194087)) + (i32.add (i32.const 607602103)) + (i32.add (i32.const 1006268207)) + (i32.add (i32.const 1884834904)) + (i32.add (i32.const 173163967)) + (i32.add (i32.const 1356792759)) + (i32.add (i32.const -1748064704)) + (i32.add (i32.const -536154763)) + (i32.add (i32.const 886248941)) + (i32.add (i32.const 452354800)) + (i32.add (i32.const 1538223092)) + (i32.add (i32.const -886584906)) + (i32.add (i32.const -27219503)) + (i32.add (i32.const 911471282)) + (i32.add (i32.const -262370311)) + (i32.add (i32.const 1240449435)) + (i32.add (i32.const 1771110968)) + (i32.add (i32.const 423926717)) + (i32.add (i32.const 1070292666)) + (i32.add (i32.const -598765108)) + (i32.add (i32.const 959548688)) + (i32.add (i32.const -1391047010)) + (i32.add (i32.const 1021405863)) + (i32.add (i32.const 10328558)) + (i32.add (i32.const 764060216)) + (i32.add (i32.const 1966170798)) + (i32.add (i32.const 890781355)) + (i32.add (i32.const -1065122632)) + (i32.add (i32.const -426871347)) + (i32.add (i32.const 1892474054)) + (i32.add (i32.const 140512189)) + (i32.add (i32.const -437740782)) + (i32.add (i32.const -546110972)) + (i32.add (i32.const -293666587)) + (i32.add (i32.const -44551341)) + (i32.add (i32.const -2020979062)) + (i32.add (i32.const -1689339069)) + (i32.add (i32.const -1077332672)) + (i32.add (i32.const -1942365899)) + (i32.add (i32.const -1389706265)) + (i32.add (i32.const -1738802536)) + (i32.add (i32.const -1135300364)) + (i32.add (i32.const 56913707)) + (i32.add (i32.const -305138238)) + (i32.add (i32.const -912305889)) + (i32.add (i32.const 1709955957)) + (i32.add (i32.const 994637884)) + (i32.add (i32.const 847040290)) + (i32.add (i32.const -1901864208)) + (i32.add (i32.const -1437252251)) + (i32.add (i32.const 719481759)) + (i32.add (i32.const 1113205433)) + (i32.add (i32.const -17435530)) + (i32.add (i32.const 1987876616)) + (i32.add (i32.const 601256284)) + (i32.add (i32.const -761465670)) + (i32.add (i32.const -383471916)) + (i32.add (i32.const 1398416524)) + (i32.add (i32.const 228618016)) + (i32.add (i32.const 348339282)) + (i32.add (i32.const 264593026)) + (i32.add (i32.const -1505473519)) + (i32.add (i32.const -1372327815)) + (i32.add (i32.const 1278595256)) + (i32.add (i32.const -124801153)) + (i32.add (i32.const -819008362)) + (i32.add (i32.const -724256010)) + (i32.add (i32.const -1130210643)) + (i32.add (i32.const -1781624750)) + (i32.add (i32.const 1656827810)) + (i32.add (i32.const -1480412970)) + (i32.add (i32.const -1447056941)) + (i32.add (i32.const 529740119)) + (i32.add (i32.const 1261619595)) + (i32.add (i32.const 115485068)) + (i32.add (i32.const 3419234)) + (i32.add (i32.const -700672643)) + (i32.add (i32.const 1418647241)) + (i32.add (i32.const 151231458)) + (i32.add (i32.const -1936369764)) + (i32.add (i32.const 308294718)) + (i32.add (i32.const 737689997)) + (i32.add (i32.const 1155916645)) + (i32.add (i32.const 1725953336)) + (i32.add (i32.const 1443725467)) + (i32.add (i32.const 1633968973)) + (i32.add (i32.const -1964621518)) + (i32.add (i32.const 1733417657)) + (i32.add (i32.const 310932636)) + (i32.add (i32.const 1812927791)) + (i32.add (i32.const 1374265270)) + (i32.add (i32.const -2127696868)) + (i32.add (i32.const -664430188)) + (i32.add (i32.const -1706846177)) + (i32.add (i32.const 1879725401)) + (i32.add (i32.const -1344783563)) + (i32.add (i32.const -1144868176)) + (i32.add (i32.const 5593958)) + (i32.add (i32.const 186143542)) + (i32.add (i32.const 662441702)) + (i32.add (i32.const 2096412885)) + (i32.add (i32.const 1798697144)) + (i32.add (i32.const 573410273)) + (i32.add (i32.const -554103294)) + (i32.add (i32.const -62614502)) + (i32.add (i32.const -2045999136)) + (i32.add (i32.const 1382607852)) + (i32.add (i32.const -735041960)) + (i32.add (i32.const 965835700)) + (i32.add (i32.const 1024149723)) + (i32.add (i32.const -733295512)) + (i32.add (i32.const -1856891772)) + (i32.add (i32.const 1567066279)) + (i32.add (i32.const -2090868599)) + (i32.add (i32.const 242923444)) + (i32.add (i32.const -671413769)) + (i32.add (i32.const 1515753158)) + (i32.add (i32.const 1861352320)) + (i32.add (i32.const -1209032575)) + (i32.add (i32.const 2140719656)) + (i32.add (i32.const 159347882)) + (i32.add (i32.const 1655430499)) + (i32.add (i32.const -154160852)) + (i32.add (i32.const 1073216206)) + (i32.add (i32.const 1583894994)) + (i32.add (i32.const 2019376726)) + (i32.add (i32.const 794808222)) + (i32.add (i32.const 1665464402)) + (i32.add (i32.const -1003136566)) + (i32.add (i32.const 1137989882)) + (i32.add (i32.const -2022877819)) + (i32.add (i32.const -693448894)) + (i32.add (i32.const 2037502981)) + (i32.add (i32.const -1083500132)) + (i32.add (i32.const 1051007482)) + (i32.add (i32.const -266324141)) + (i32.add (i32.const 1559624190)) + (i32.add (i32.const 280235685)) + (i32.add (i32.const -923644275)) + (i32.add (i32.const 2017156196)) + (i32.add (i32.const -1828335428)) + (i32.add (i32.const 1119495683)) + (i32.add (i32.const 1835530897)) + (i32.add (i32.const 214860133)) + (i32.add (i32.const -182114011)) + (i32.add (i32.const -636808003)) + (i32.add (i32.const 745021392)) + (i32.add (i32.const -1346608769)) + (i32.add (i32.const -461589826)) + (i32.add (i32.const -1860545438)) + (i32.add (i32.const -250955754)) + (i32.add (i32.const -1343271734)) + (i32.add (i32.const -155678886)) + (i32.add (i32.const -1932022765)) + (i32.add (i32.const 198643600)) + (i32.add (i32.const 524439553)) + (i32.add (i32.const 1120997881)) + (i32.add (i32.const 797455036)) + (i32.add (i32.const -1139975803)) + (i32.add (i32.const -1288501711)) + (i32.add (i32.const -1385891853)) + (i32.add (i32.const 881090489)) + (i32.add (i32.const -1496283170)) + (i32.add (i32.const 2026920076)) + (i32.add (i32.const -747943788)) + (i32.add (i32.const 845128462)) + (i32.add (i32.const -1870326072)) + (i32.add (i32.const -200515562)) + (i32.add (i32.const 307777154)) + (i32.add (i32.const 1328175861)) + (i32.add (i32.const -1229626195)) + (i32.add (i32.const 79975612)) + (i32.add (i32.const -191512777)) + (i32.add (i32.const 622259410)) + (i32.add (i32.const -1077252903)) + (i32.add (i32.const 1566663460)) + (i32.add (i32.const -1509694704)) + (i32.add (i32.const -254831342)) + (i32.add (i32.const 1815303809)) + (i32.add (i32.const -1101531828)) + (i32.add (i32.const -340310114)) + (i32.add (i32.const -1229308390)) + (i32.add (i32.const 1523706773)) + (i32.add (i32.const -1441246093)) + (i32.add (i32.const 1180890732)) + (i32.add (i32.const 639486489)) + (i32.add (i32.const -546129476)) + (i32.add (i32.const -1291041464)) + (i32.add (i32.const 1507137333)) + (i32.add (i32.const -1113825555)) + (i32.add (i32.const 495718169)) + (i32.add (i32.const -839770566)) + (i32.add (i32.const 1525692857)) + (i32.add (i32.const 303640030)) + (i32.add (i32.const -2096018946)) + (i32.add (i32.const 961984764)) + (i32.add (i32.const -846149700)) + (i32.add (i32.const -1685860593)) + (i32.add (i32.const -943055518)) + (i32.add (i32.const 334960186)) + (i32.add (i32.const -276395602)) + (i32.add (i32.const 1520062320)) + (i32.add (i32.const -1638146201)) + (i32.add (i32.const -2084438456)) + (i32.add (i32.const -1932738250)) + (i32.add (i32.const -760635024)) + (i32.add (i32.const 63541288)) + (i32.add (i32.const -1018542895)) + (i32.add (i32.const -1420406123)) + (i32.add (i32.const -269594307)) + (i32.add (i32.const 829770691)) + (i32.add (i32.const -197912196)) + (i32.add (i32.const -1154080187)) + (i32.add (i32.const -2061685992)) + (i32.add (i32.const -1382593780)) + (i32.add (i32.const -349374614)) + (i32.add (i32.const 1048271346)) + (i32.add (i32.const 1091197094)) + (i32.add (i32.const 452900221)) + (i32.add (i32.const -411829276)) + (i32.add (i32.const 1803041211)) + (i32.add (i32.const -688441401)) + (i32.add (i32.const -1927095742)) + (i32.add (i32.const 584229814)) + (i32.add (i32.const 1622140758)) + (i32.add (i32.const 602386979)) + (i32.add (i32.const 480425670)) + (i32.add (i32.const -1090053113)) + (i32.add (i32.const -27799672)) + (i32.add (i32.const -921621230)) + (i32.add (i32.const 2081345093)) + (i32.add (i32.const 1584484104)) + (i32.add (i32.const -501872893)) + (i32.add (i32.const -1716395721)) + (i32.add (i32.const 123323045)) + (i32.add (i32.const -779593257)) + (i32.add (i32.const -1670441403)) + (i32.add (i32.const -719927350)) + (i32.add (i32.const -638778389)) + (i32.add (i32.const -929157017)) + (i32.add (i32.const -2013712345)) + (i32.add (i32.const -1719854669)) + (i32.add (i32.const 1659569543)) + (i32.add (i32.const -951434501)) + (i32.add (i32.const -262965328)) + (i32.add (i32.const -1337002927)) + (i32.add (i32.const 9460469)) + (i32.add (i32.const 98085383)) + (i32.add (i32.const 241892439)) + (i32.add (i32.const -1299780724)) + (i32.add (i32.const -1184751698)) + (i32.add (i32.const -2003513976)) + (i32.add (i32.const -1121836615)) + (i32.add (i32.const 177549797)) + (i32.add (i32.const -853666420)) + (i32.add (i32.const -791019307)) + (i32.add (i32.const 728873894)) + (i32.add (i32.const -1288992986)) + (i32.add (i32.const 1302716614)) + (i32.add (i32.const 370409360)) + (i32.add (i32.const 2104094898)) + (i32.add (i32.const 58701879)) + (i32.add (i32.const -1589291944)) + (i32.add (i32.const -1983692367)) + (i32.add (i32.const 385019197)) + (i32.add (i32.const -323589374)) + (i32.add (i32.const -1928990702)) + (i32.add (i32.const -1624086208)) + (i32.add (i32.const 822570058)) + (i32.add (i32.const 2005482985)) + (i32.add (i32.const -1654672193)) + (i32.add (i32.const 443519132)) + (i32.add (i32.const 1904034422)) + (i32.add (i32.const -781960614)) + (i32.add (i32.const -687740965)) + (i32.add (i32.const 1828534292)) + (i32.add (i32.const -2122608070)) + (i32.add (i32.const 1497104936)) + (i32.add (i32.const 1646740311)) + (i32.add (i32.const -171943195)) + (i32.add (i32.const -860876536)) + (i32.add (i32.const 1020322681)) + (i32.add (i32.const -1408655521)) + (i32.add (i32.const -1937096330)) + (i32.add (i32.const -993056424)) + (i32.add (i32.const 1859612438)) + (i32.add (i32.const 331250097)) + (i32.add (i32.const -396011362)) + (i32.add (i32.const -1359449260)) + (i32.add (i32.const -1736964222)) + (i32.add (i32.const 566856434)) + (i32.add (i32.const 519800941)) + (i32.add (i32.const 309384224)) + (i32.add (i32.const -811425827)) + (i32.add (i32.const -473393986)) + (i32.add (i32.const -372782388)) + (i32.add (i32.const -1844975378)) + (i32.add (i32.const -574988509)) + (i32.add (i32.const 1641045052)) + (i32.add (i32.const -1214589305)) + (i32.add (i32.const -269282040)) + (i32.add (i32.const -818473762)) + (i32.add (i32.const 857045272)) + (i32.add (i32.const -184174629)) + (i32.add (i32.const -47592429)) + (i32.add (i32.const -1657035888)) + (i32.add (i32.const -1411360527)) + (i32.add (i32.const -2119851793)) + (i32.add (i32.const 1331855655)) + (i32.add (i32.const 655034257)) + (i32.add (i32.const -765009583)) + (i32.add (i32.const -43277151)) + (i32.add (i32.const -698000193)) + (i32.add (i32.const 2146074981)) + (i32.add (i32.const -804890684)) + (i32.add (i32.const 502601908)) + (i32.add (i32.const -378453383)) + (i32.add (i32.const 1663477263)) + (i32.add (i32.const 33778260)) + (i32.add (i32.const -1238459437)) + (i32.add (i32.const 2119157218)) + (i32.add (i32.const -1760549091)) + (i32.add (i32.const -1455657144)) + (i32.add (i32.const -47260668)) + (i32.add (i32.const 716709609)) + (i32.add (i32.const -1877307812)) + (i32.add (i32.const -1310264832)) + (i32.add (i32.const 2014578654)) + (i32.add (i32.const 443819581)) + (i32.add (i32.const -529540303)) + (i32.add (i32.const -1988186170)) + (i32.add (i32.const 2139617294)) + (i32.add (i32.const -1516219372)) + (i32.add (i32.const -2137430218)) + (i32.add (i32.const 328658028)) + (i32.add (i32.const 43969844)) + (i32.add (i32.const -220275978)) + (i32.add (i32.const -1179221915)) + (i32.add (i32.const -1066898795)) + (i32.add (i32.const 1322481376)) + (i32.add (i32.const -870065236)) + (i32.add (i32.const -1401708436)) + (i32.add (i32.const 2052845937)) + (i32.add (i32.const -1074830384)) + (i32.add (i32.const 1083647045)) + (i32.add (i32.const -492350108)) + (i32.add (i32.const -1626757116)) + (i32.add (i32.const 396763846)) + (i32.add (i32.const 1028489500)) + (i32.add (i32.const -1159776499)) + (i32.add (i32.const -682099583)) + (i32.add (i32.const -1254822257)) + (i32.add (i32.const 991430310)) + (i32.add (i32.const 1894472997)) + (i32.add (i32.const -1653065081)) + (i32.add (i32.const -400270885)) + (i32.add (i32.const 2114300218)) + (i32.add (i32.const 2087166948)) + (i32.add (i32.const 966891296)) + (i32.add (i32.const -190760644)) + (i32.add (i32.const 908242876)) + (i32.add (i32.const -2120720279)) + (i32.add (i32.const -2020992512)) + (i32.add (i32.const 1673358712)) + (i32.add (i32.const -1154192677)) + (i32.add (i32.const 884816252)) + (i32.add (i32.const 1116917109)) + (i32.add (i32.const 1244596079)) + (i32.add (i32.const 1703947889)) + (i32.add (i32.const -959612558)) + (i32.add (i32.const -684065036)) + (i32.add (i32.const 41501283)) + (i32.add (i32.const -1593859786)) + (i32.add (i32.const 1545964783)) + (i32.add (i32.const -845100539)) + (i32.add (i32.const -1153394834)) + (i32.add (i32.const 981307595)) + (i32.add (i32.const -1096845914)) + (i32.add (i32.const 66287898)) + (i32.add (i32.const 2041703037)) + (i32.add (i32.const 705201788)) + (i32.add (i32.const -1062404628)) + (i32.add (i32.const -1326475693)) + (i32.add (i32.const -488671520)) + (i32.add (i32.const 1059409308)) + (i32.add (i32.const -1069788432)) + (i32.add (i32.const 111915351)) + (i32.add (i32.const -597553403)) + (i32.add (i32.const 851141458)) + (i32.add (i32.const 37894732)) + (i32.add (i32.const 245255702)) + (i32.add (i32.const -1261897047)) + (i32.add (i32.const -827516738)) + (i32.add (i32.const 1212796267)) + (i32.add (i32.const -993896340)) + (i32.add (i32.const 1687039407)) + (i32.add (i32.const -225223291)) + (i32.add (i32.const 1191253923)) + (i32.add (i32.const 1421725909)) + (i32.add (i32.const 937064298)) + (i32.add (i32.const -1389414406)) + (i32.add (i32.const 389405956)) + (i32.add (i32.const 2030616618)) + (i32.add (i32.const -1745852387)) + (i32.add (i32.const -1986573532)) + (i32.add (i32.const 1755356061)) + (i32.add (i32.const 1135798185)) + (i32.add (i32.const -921985289)) + (i32.add (i32.const 1914222759)) + (i32.add (i32.const -1341512609)) + (i32.add (i32.const 349046324)) + (i32.add (i32.const -363646776)) + (i32.add (i32.const -1172578146)) + (i32.add (i32.const 2072756466)) + (i32.add (i32.const 748840536)) + (i32.add (i32.const 484346586)) + (i32.add (i32.const 1522152992)) + (i32.add (i32.const -945694389)) + (i32.add (i32.const -1528001716)) + (i32.add (i32.const -1090951602)) + (i32.add (i32.const 52131713)) + (i32.add (i32.const -110446890)) + (i32.add (i32.const -892665227)) + (i32.add (i32.const 1995159605)) + (i32.add (i32.const -1996238706)) + (i32.add (i32.const 1959350781)) + (i32.add (i32.const -486881834)) + (i32.add (i32.const 1226356921)) + (i32.add (i32.const 899008808)) + (i32.add (i32.const -564992687)) + (i32.add (i32.const -258609078)) + (i32.add (i32.const 1168095771)) + (i32.add (i32.const 1757826861)) + (i32.add (i32.const -1053741413)) + (i32.add (i32.const -1202111560)) + (i32.add (i32.const 216044841)) + (i32.add (i32.const 693116476)) + (i32.add (i32.const 1423883903)) + (i32.add (i32.const 636985314)) + (i32.add (i32.const -872378058)) + (i32.add (i32.const -559373455)) + (i32.add (i32.const -748778735)) + (i32.add (i32.const -1422276587)) + (i32.add (i32.const -1072345544)) + (i32.add (i32.const 991034779)) + (i32.add (i32.const -1945279535)) + (i32.add (i32.const 1412169114)) + (i32.add (i32.const -1038077214)) + (i32.add (i32.const 695066167)) + (i32.add (i32.const -1432995213)) + (i32.add (i32.const 277213101)) + (i32.add (i32.const -662151388)) + (i32.add (i32.const 116255503)) + (i32.add (i32.const -1095152820)) + (i32.add (i32.const 747097776)) + (i32.add (i32.const -2130045257)) + (i32.add (i32.const -978815128)) + (i32.add (i32.const -1844367254)) + (i32.add (i32.const -1338145058)) + (i32.add (i32.const 395950007)) + (i32.add (i32.const 548904189)) + (i32.add (i32.const 381516947)) + (i32.add (i32.const 221536395)) + (i32.add (i32.const 464906564)) + (i32.add (i32.const -462382934)) + (i32.add (i32.const -1224614718)) + (i32.add (i32.const 479070617)) + (i32.add (i32.const -1149505965)) + (i32.add (i32.const -59995465)) + (i32.add (i32.const 732571535)) + (i32.add (i32.const 1541126187)) + (i32.add (i32.const 1216601704)) + (i32.add (i32.const -1969323452)) + (i32.add (i32.const 1128571261)) + (i32.add (i32.const 1941716877)) + (i32.add (i32.const -7226974)) + (i32.add (i32.const 1230689000)) + (i32.add (i32.const 1550451334)) + (i32.add (i32.const -460142827)) + (i32.add (i32.const 282142752)) + (i32.add (i32.const 1974269478)) + (i32.add (i32.const 615167194)) + (i32.add (i32.const -1306646682)) + (i32.add (i32.const 1921663528)) + (i32.add (i32.const 1718739339)) + (i32.add (i32.const -1667787711)) + (i32.add (i32.const -1350786967)) + (i32.add (i32.const -1588876707)) + (i32.add (i32.const -1415332174)) + (i32.add (i32.const 1721383101)) + (i32.add (i32.const 2097974519)) + (i32.add (i32.const 1582844409)) + (i32.add (i32.const 675565766)) + (i32.add (i32.const 1234269921)) + (i32.add (i32.const -896479936)) + (i32.add (i32.const 997180907)) + (i32.add (i32.const -1398604270)) + (i32.add (i32.const 1536809985)) + (i32.add (i32.const 691160081)) + (i32.add (i32.const 448784453)) + (i32.add (i32.const 822949008)) + (i32.add (i32.const -207039821)) + (i32.add (i32.const 1082180196)) + (i32.add (i32.const -717577920)) + (i32.add (i32.const 999194368)) + (i32.add (i32.const 345581626)) + (i32.add (i32.const -2085385064)) + (i32.add (i32.const 935703034)) + (i32.add (i32.const -918649651)) + (i32.add (i32.const -388237335)) + (i32.add (i32.const -1214351487)) + (i32.add (i32.const 1880003358)) + (i32.add (i32.const -1930111504)) + (i32.add (i32.const 1431277127)) + (i32.add (i32.const -398348915)) + (i32.add (i32.const 1688280781)) + (i32.add (i32.const -502411866)) + (i32.add (i32.const 319006464)) + (i32.add (i32.const 755951775)) + (i32.add (i32.const -1128291501)) + (i32.add (i32.const -639534665)) + (i32.add (i32.const 840254469)) + (i32.add (i32.const -126207875)) + (i32.add (i32.const 1762837232)) + (i32.add (i32.const 274061011)) + (i32.add (i32.const 732098848)) + (i32.add (i32.const -1338318531)) + (i32.add (i32.const -36144653)) + (i32.add (i32.const -1963269517)) + (i32.add (i32.const -385076044)) + (i32.add (i32.const -1321131962)) + (i32.add (i32.const -1635387100)) + (i32.add (i32.const -1772986670)) + (i32.add (i32.const -892639174)) + (i32.add (i32.const -1765352961)) + (i32.add (i32.const -565303041)) + (i32.add (i32.const 108801821)) + (i32.add (i32.const 1031643822)) + (i32.add (i32.const -645088754)) + (i32.add (i32.const -192228018)) + (i32.add (i32.const 753091426)) + (i32.add (i32.const -675942781)) + (i32.add (i32.const -178424187)) + (i32.add (i32.const -1274386740)) + (i32.add (i32.const 1189890641)) + (i32.add (i32.const -208223945)) + (i32.add (i32.const 230449798)) + (i32.add (i32.const -967534564)) + (i32.add (i32.const 301462079)) + (i32.add (i32.const 1339321769)) + (i32.add (i32.const -707129102)) + (i32.add (i32.const -1374674262)) + (i32.add (i32.const -855322072)) + (i32.add (i32.const 1933435104)) + (i32.add (i32.const 349697915)) + (i32.add (i32.const 812439432)) + (i32.add (i32.const -56684674)) + (i32.add (i32.const 93763619)) + (i32.add (i32.const -2106493233)) + (i32.add (i32.const -1982286982)) + (i32.add (i32.const -895077381)) + (i32.add (i32.const -2036858659)) + (i32.add (i32.const -931125631)) + (i32.add (i32.const 1653662434)) + (i32.add (i32.const 746582773)) + (i32.add (i32.const -97793106)) + (i32.add (i32.const 398777142)) + (i32.add (i32.const 1909574633)) + (i32.add (i32.const 2077370321)) + (i32.add (i32.const -1508534360)) + (i32.add (i32.const 123204423)) + (i32.add (i32.const 559702507)) + (i32.add (i32.const -1912194383)) + (i32.add (i32.const -1088471695)) + (i32.add (i32.const -686420267)) + (i32.add (i32.const -468870860)) + (i32.add (i32.const 2097167039)) + (i32.add (i32.const -426448721)) + (i32.add (i32.const 1818341914)) + (i32.add (i32.const 629216958)) + (i32.add (i32.const -887318219)) + (i32.add (i32.const 2015219039)) + (i32.add (i32.const -1464810562)) + (i32.add (i32.const 390924010)) + (i32.add (i32.const -1400629520)) + (i32.add (i32.const -488941495)) + (i32.add (i32.const -1148855185)) + (i32.add (i32.const 2035012632)) + (i32.add (i32.const 1671090649)) + (i32.add (i32.const -507644009)) + (i32.add (i32.const -1492137638)) + (i32.add (i32.const -498728662)) + (i32.add (i32.const 321839204)) + (i32.add (i32.const 563576882)) + (i32.add (i32.const 1660449147)) + (i32.add (i32.const 1279568538)) + (i32.add (i32.const 1976590766)) + (i32.add (i32.const 1821767161)) + (i32.add (i32.const -879245836)) + (i32.add (i32.const 593981620)) + (i32.add (i32.const 1438361075)) + (i32.add (i32.const 892293037)) + (i32.add (i32.const -1430515119)) + (i32.add (i32.const 733017506)) + (i32.add (i32.const 1835781005)) + (i32.add (i32.const 1246203582)) + (i32.add (i32.const -144224288)) + (i32.add (i32.const -1122328721)) + (i32.add (i32.const -1221040874)) + (i32.add (i32.const -1381848741)) + (i32.add (i32.const 143528255)) + (i32.add (i32.const 128302399)) + (i32.add (i32.const 2092341716)) + (i32.add (i32.const 707725275)) + (i32.add (i32.const -2141261369)) + (i32.add (i32.const 337056344)) + (i32.add (i32.const -731015349)) + (i32.add (i32.const -2049232103)) + (i32.add (i32.const -1704467347)) + (i32.add (i32.const 1702391256)) + (i32.add (i32.const -918043931)) + (i32.add (i32.const 409292740)) + (i32.add (i32.const 1707553837)) + (i32.add (i32.const -238934446)) + (i32.add (i32.const -1808085367)) + (i32.add (i32.const 1354535000)) + (i32.add (i32.const -1968506814)) + (i32.add (i32.const 1931160733)) + (i32.add (i32.const -1195958407)) + (i32.add (i32.const 1490882736)) + (i32.add (i32.const 1663458159)) + (i32.add (i32.const 49970569)) + (i32.add (i32.const -617747413)) + (i32.add (i32.const 469017410)) + (i32.add (i32.const -461099358)) + (i32.add (i32.const -1452517594)) + (i32.add (i32.const 1561767422)) + (i32.add (i32.const 904360821)) + (i32.add (i32.const 925023275)) + (i32.add (i32.const -1269775691)) + (i32.add (i32.const -1112888739)) + (i32.add (i32.const 1487790500)) + (i32.add (i32.const 1429237693)) + (i32.add (i32.const -376628172)) + (i32.add (i32.const -1631026511)) + (i32.add (i32.const -1849528228)) + (i32.add (i32.const 1562558186)) + (i32.add (i32.const 760889699)) + (i32.add (i32.const 849500529)) + (i32.add (i32.const 408911500)) + (i32.add (i32.const 53768942)) + (i32.add (i32.const -2044474663)) + (i32.add (i32.const -880810919)) + (i32.add (i32.const -409891550)) + (i32.add (i32.const -3094433)) + (i32.add (i32.const 1855652502)) + (i32.add (i32.const 560804946)) + (i32.add (i32.const 1307747579)) + (i32.add (i32.const -815873542)) + (i32.add (i32.const -14610713)) + (i32.add (i32.const -1677627819)) + (i32.add (i32.const 1208075587)) + (i32.add (i32.const 1199019223)) + (i32.add (i32.const 47370426)) + (i32.add (i32.const 125590851)) + (i32.add (i32.const 217405143)) + (i32.add (i32.const -229184050)) + (i32.add (i32.const -1710026620)) + (i32.add (i32.const -2003846613)) + (i32.add (i32.const 1643344349)) + (i32.add (i32.const 690658132)) + (i32.add (i32.const -853507764)) + (i32.add (i32.const 292089952)) + (i32.add (i32.const 116200283)) + (i32.add (i32.const -503264767)) + (i32.add (i32.const 157663928)) + (i32.add (i32.const 27428943)) + (i32.add (i32.const -980695711)) + (i32.add (i32.const -1207536255)) + (i32.add (i32.const 1188480925)) + (i32.add (i32.const -177458952)) + (i32.add (i32.const -1876101697)) + (i32.add (i32.const -725463434)) + (i32.add (i32.const 1728493532)) + (i32.add (i32.const -300299988)) + (i32.add (i32.const 444220454)) + (i32.add (i32.const -1189745235)) + (i32.add (i32.const 389247914)) + (i32.add (i32.const 610812459)) + (i32.add (i32.const 1580088268)) + (i32.add (i32.const -1694670707)) + (i32.add (i32.const -617208026)) + (i32.add (i32.const -175513280)) + (i32.add (i32.const -991665356)) + (i32.add (i32.const 538343835)) + (i32.add (i32.const -99034242)) + (i32.add (i32.const 600601450)) + (i32.add (i32.const -12452352)) + (i32.add (i32.const -2010377800)) + (i32.add (i32.const -1178869927)) + (i32.add (i32.const 185213781)) + (i32.add (i32.const 163132488)) + (i32.add (i32.const -49516237)) + (i32.add (i32.const -398845500)) + (i32.add (i32.const 951992904)) + (i32.add (i32.const -1666450292)) + (i32.add (i32.const -558353891)) + (i32.add (i32.const -1474830401)) + (i32.add (i32.const 823353465)) + (i32.add (i32.const 1566811449)) + (i32.add (i32.const 191879742)) + (i32.add (i32.const -224214259)) + (i32.add (i32.const 1185004949)) + (i32.add (i32.const -865099818)) + (i32.add (i32.const 99646674)) + (i32.add (i32.const -1316604980)) + (i32.add (i32.const -243696962)) + (i32.add (i32.const 1093120149)) + (i32.add (i32.const -1018615852)) + (i32.add (i32.const -60174070)) + (i32.add (i32.const -1975122746)) + (i32.add (i32.const -1771231702)) + (i32.add (i32.const 2056607865)) + (i32.add (i32.const -1990709055)) + (i32.add (i32.const -545141018)) + (i32.add (i32.const -1244175573)) + (i32.add (i32.const -636069393)) + (i32.add (i32.const 1563887832)) + (i32.add (i32.const 1609597567)) + (i32.add (i32.const 1500865362)) + (i32.add (i32.const 1432937584)) + (i32.add (i32.const -1765840692)) + (i32.add (i32.const 1144162894)) + (i32.add (i32.const 860052933)) + (i32.add (i32.const 268318736)) + (i32.add (i32.const -740296387)) + (i32.add (i32.const 913080347)) + (i32.add (i32.const -1870269350)) + (i32.add (i32.const -1670533132)) + (i32.add (i32.const 1340870144)) + (i32.add (i32.const -1146486122)) + (i32.add (i32.const -787862211)) + (i32.add (i32.const 1609403900)) + (i32.add (i32.const 748426292)) + (i32.add (i32.const -585983454)) + (i32.add (i32.const -897932134)) + (i32.add (i32.const 27842682)) + (i32.add (i32.const 1110466919)) + (i32.add (i32.const 178548103)) + (i32.add (i32.const -867957796)) + (i32.add (i32.const -1098656540)) + (i32.add (i32.const -33715572)) + (i32.add (i32.const -116117074)) + (i32.add (i32.const -396132877)) + (i32.add (i32.const 215222708)) + (i32.add (i32.const -2003162548)) + (i32.add (i32.const 2026621269)) + (i32.add (i32.const -1580357875)) + (i32.add (i32.const -2000437935)) + (i32.add (i32.const 1763031360)) + (i32.add (i32.const 918732327)) + (i32.add (i32.const 568616138)) + (i32.add (i32.const -268987438)) + (i32.add (i32.const 1856982250)) + (i32.add (i32.const -298470725)) + (i32.add (i32.const 201749084)) + (i32.add (i32.const -1139288213)) + (i32.add (i32.const -1909422296)) + (i32.add (i32.const -1117921562)) + (i32.add (i32.const 114853467)) + (i32.add (i32.const 29067418)) + (i32.add (i32.const 378565328)) + (i32.add (i32.const -2072974106)) + (i32.add (i32.const 747471337)) + (i32.add (i32.const -1581842342)) + (i32.add (i32.const 1092776288)) + (i32.add (i32.const 1700966294)) + (i32.add (i32.const -149931998)) + (i32.add (i32.const -2025144969)) + (i32.add (i32.const 132383785)) + (i32.add (i32.const -3146868)) + (i32.add (i32.const 624023660)) + (i32.add (i32.const 725303242)) + (i32.add (i32.const -1701836424)) + (i32.add (i32.const -1364376396)) + (i32.add (i32.const -1102714214)) + (i32.add (i32.const -851105404)) + (i32.add (i32.const 1933006221)) + (i32.add (i32.const 515430504)) + (i32.add (i32.const -308905432)) + (i32.add (i32.const -1216829322)) + (i32.add (i32.const -1934932164)) + (i32.add (i32.const 426504106)) + (i32.add (i32.const -1607792948)) + (i32.add (i32.const -418939645)) + (i32.add (i32.const 1409478061)) + (i32.add (i32.const -1297443685)) + (i32.add (i32.const -895832786)) + (i32.add (i32.const -1382430192)) + (i32.add (i32.const 1575734726)) + (i32.add (i32.const 1494496562)) + (i32.add (i32.const 1884305314)) + (i32.add (i32.const 1623783989)) + (i32.add (i32.const 200038596)) + (i32.add (i32.const 1941402891)) + (i32.add (i32.const 427739835)) + (i32.add (i32.const 1128635926)) + (i32.add (i32.const -922635089)) + (i32.add (i32.const 337763851)) + (i32.add (i32.const 663327348)) + (i32.add (i32.const -1447533985)) + (i32.add (i32.const 1341394724)) + (i32.add (i32.const -920844586)) + (i32.add (i32.const -1604457664)) + (i32.add (i32.const -1191387466)) + (i32.add (i32.const -195793344)) + (i32.add (i32.const 938708180)) + (i32.add (i32.const 41480710)) + (i32.add (i32.const -1217218710)) + (i32.add (i32.const 1170359369)) + (i32.add (i32.const 757032378)) + (i32.add (i32.const 275737697)) + (i32.add (i32.const -1401491386)) + (i32.add (i32.const 464407799)) + (i32.add (i32.const -1098509827)) + (i32.add (i32.const 1089525777)) + (i32.add (i32.const 1274266479)) + (i32.add (i32.const 1982319142)) + (i32.add (i32.const 2117472439)) + (i32.add (i32.const -1294868571)) + (i32.add (i32.const 1382317465)) + (i32.add (i32.const -749148063)) + (i32.add (i32.const 978421849)) + (i32.add (i32.const 75951925)) + (i32.add (i32.const -557818094)) + (i32.add (i32.const -384605483)) + (i32.add (i32.const 1133860697)) + (i32.add (i32.const 164857440)) + (i32.add (i32.const 151560634)) + (i32.add (i32.const 448862439)) + (i32.add (i32.const -1770946316)) + (i32.add (i32.const 1761822441)) + (i32.add (i32.const -1335780747)) + (i32.add (i32.const -250282247)) + (i32.add (i32.const 1202591537)) + (i32.add (i32.const 521393375)) + (i32.add (i32.const -994407781)) + (i32.add (i32.const 1330055848)) + (i32.add (i32.const 258892066)) + (i32.add (i32.const 765366099)) + (i32.add (i32.const -1406460467)) + (i32.add (i32.const -1649875701)) + (i32.add (i32.const 1783370037)) + (i32.add (i32.const 1434838389)) + (i32.add (i32.const 110698483)) + (i32.add (i32.const -1706332646)) + (i32.add (i32.const 505308456)) + (i32.add (i32.const 1002557035)) + (i32.add (i32.const -2061979323)) + (i32.add (i32.const -236838305)) + (i32.add (i32.const 1816255402)) + (i32.add (i32.const 38574421)) + (i32.add (i32.const -763984486)) + (i32.add (i32.const 3202910)) + (i32.add (i32.const 280199786)) + (i32.add (i32.const -1354765913)) + (i32.add (i32.const 520850733)) + (i32.add (i32.const -1366167473)) + (i32.add (i32.const 102640492)) + (i32.add (i32.const -1209242809)) + (i32.add (i32.const 67802693)) + (i32.add (i32.const 1452777082)) + (i32.add (i32.const 1879494721)) + (i32.add (i32.const 318468557)) + (i32.add (i32.const -499854880)) + (i32.add (i32.const 1896531397)) + (i32.add (i32.const -1955605474)) + (i32.add (i32.const 2098233635)) + (i32.add (i32.const 489923878)) + (i32.add (i32.const 1756071792)) + (i32.add (i32.const 2146496236)) + (i32.add (i32.const -1238799576)) + (i32.add (i32.const 546891073)) + (i32.add (i32.const 681005426)) + (i32.add (i32.const -28496427)) + (i32.add (i32.const 1451326356)) + (i32.add (i32.const -2057973012)) + (i32.add (i32.const 1735528793)) + (i32.add (i32.const -1897715776)) + (i32.add (i32.const -770796542)) + (i32.add (i32.const -815952832)) + (i32.add (i32.const -1399243394)) + (i32.add (i32.const -356504351)) + (i32.add (i32.const 517502241)) + (i32.add (i32.const 1341940196)) + (i32.add (i32.const 623458145)) + (i32.add (i32.const -1680906382)) + (i32.add (i32.const 2006457321)) + (i32.add (i32.const -987992654)) + (i32.add (i32.const 1191543573)) + (i32.add (i32.const 1794380419)) + (i32.add (i32.const 318741332)) + (i32.add (i32.const 1814832480)) + (i32.add (i32.const -116320993)) + (i32.add (i32.const 242214579)) + (i32.add (i32.const 464978911)) + (i32.add (i32.const 1922379028)) + (i32.add (i32.const -551221275)) + (i32.add (i32.const -919158362)) + (i32.add (i32.const -1414237695)) + (i32.add (i32.const -1425752578)) + (i32.add (i32.const -2110613899)) + (i32.add (i32.const 379547212)) + (i32.add (i32.const 1970231022)) + (i32.add (i32.const 1432361652)) + (i32.add (i32.const -133220762)) + (i32.add (i32.const -192201708)) + (i32.add (i32.const -120326884)) + (i32.add (i32.const -298826508)) + (i32.add (i32.const -1712434688)) + (i32.add (i32.const 938142648)) + (i32.add (i32.const 475917931)) + (i32.add (i32.const -873332651)) + (i32.add (i32.const 294301989)) + (i32.add (i32.const 34803031)) + (i32.add (i32.const -665223082)) + (i32.add (i32.const 1206124282)) + (i32.add (i32.const -833996212)) + (i32.add (i32.const 1710255502)) + (i32.add (i32.const 338745534)) + (i32.add (i32.const 1991490933)) + (i32.add (i32.const 677812764)) + (i32.add (i32.const -1749429748)) + (i32.add (i32.const 383546300)) + (i32.add (i32.const 406196399)) + (i32.add (i32.const -773068267)) + (i32.add (i32.const -1064136430)) + (i32.add (i32.const -1049289946)) + (i32.add (i32.const -20131188)) + (i32.add (i32.const -823760825)) + (i32.add (i32.const 183228775)) + (i32.add (i32.const -1900183387)) + (i32.add (i32.const 1127039103)) + (i32.add (i32.const 2038144826)) + (i32.add (i32.const -186193492)) + (i32.add (i32.const -695129653)) + (i32.add (i32.const -57332052)) + (i32.add (i32.const -679255006)) + (i32.add (i32.const 1009825540)) + (i32.add (i32.const -566186552)) + (i32.add (i32.const -622005467)) + (i32.add (i32.const 1019576636)) + (i32.add (i32.const -523705740)) + (i32.add (i32.const 245606344)) + (i32.add (i32.const -1196482490)) + (i32.add (i32.const 581228558)) + (i32.add (i32.const 1273229886)) + (i32.add (i32.const -1547268844)) + (i32.add (i32.const 1443378699)) + (i32.add (i32.const 458176826)) + (i32.add (i32.const -1175943593)) + (i32.add (i32.const -1115667005)) + (i32.add (i32.const -1444183528)) + (i32.add (i32.const 1612554610)) + (i32.add (i32.const 1351042681)) + (i32.add (i32.const -688399511)) + (i32.add (i32.const -932908073)) + (i32.add (i32.const 2117530333)) + (i32.add (i32.const -15214251)) + (i32.add (i32.const 1201375473)) + (i32.add (i32.const 2118056169)) + (i32.add (i32.const 1687449940)) + (i32.add (i32.const -1663452502)) + (i32.add (i32.const -1933362672)) + (i32.add (i32.const 898769109)) + (i32.add (i32.const 32658232)) + (i32.add (i32.const 235084596)) + (i32.add (i32.const 2081979166)) + (i32.add (i32.const 736018854)) + (i32.add (i32.const 440398878)) + (i32.add (i32.const 988298403)) + (i32.add (i32.const 791407207)) + (i32.add (i32.const 1452040071)) + (i32.add (i32.const -2075070893)) + (i32.add (i32.const -476577493)) + (i32.add (i32.const 802183547)) + (i32.add (i32.const 1645103930)) + (i32.add (i32.const 1276766932)) + (i32.add (i32.const -1321311178)) + (i32.add (i32.const 1683096515)) + (i32.add (i32.const 1161624920)) + (i32.add (i32.const 41795223)) + (i32.add (i32.const 204191425)) + (i32.add (i32.const -752762089)) + (i32.add (i32.const 1664839150)) + (i32.add (i32.const -528926237)) + (i32.add (i32.const -1170030048)) + (i32.add (i32.const -834450025)) + (i32.add (i32.const -685179504)) + (i32.add (i32.const 2012878252)) + (i32.add (i32.const 940124203)) + (i32.add (i32.const -1781250603)) + (i32.add (i32.const -721247937)) + (i32.add (i32.const -1279117107)) + (i32.add (i32.const 789509980)) + (i32.add (i32.const -20473893)) + (i32.add (i32.const 1762806836)) + (i32.add (i32.const 683535246)) + (i32.add (i32.const -370336461)) + (i32.add (i32.const -53511038)) + (i32.add (i32.const -1407907420)) + (i32.add (i32.const -1150757946)) + (i32.add (i32.const 911484122)) + (i32.add (i32.const -713222738)) + (i32.add (i32.const -1637515522)) + (i32.add (i32.const 1603558287)) + (i32.add (i32.const 1883496366)) + (i32.add (i32.const 1403251117)) + (i32.add (i32.const 1614405860)) + (i32.add (i32.const -998574472)) + (i32.add (i32.const 842226093)) + (i32.add (i32.const 525398076)) + (i32.add (i32.const 1688490071)) + (i32.add (i32.const 1281075222)) + (i32.add (i32.const 1729043853)) + (i32.add (i32.const 2129105298)) + (i32.add (i32.const -712426645)) + (i32.add (i32.const -1204629644)) + (i32.add (i32.const -256959893)) + (i32.add (i32.const 1627191454)) + (i32.add (i32.const -18230655)) + (i32.add (i32.const -549673653)) + (i32.add (i32.const -1311063282)) + (i32.add (i32.const 1234324132)) + (i32.add (i32.const 1969532963)) + (i32.add (i32.const -2097317712)) + (i32.add (i32.const 765194427)) + (i32.add (i32.const 647000862)) + (i32.add (i32.const 1972219923)) + (i32.add (i32.const 1838766566)) + (i32.add (i32.const 767461922)) + (i32.add (i32.const -2061059031)) + (i32.add (i32.const 2019907931)) + (i32.add (i32.const 143444335)) + (i32.add (i32.const 510237865)) + (i32.add (i32.const -854786906)) + (i32.add (i32.const 1261652249)) + (i32.add (i32.const -396370704)) + (i32.add (i32.const 226061891)) + (i32.add (i32.const 1467921736)) + (i32.add (i32.const 99700659)) + (i32.add (i32.const 1911361337)) + (i32.add (i32.const 1890623977)) + (i32.add (i32.const -220275023)) + (i32.add (i32.const 770505705)) + (i32.add (i32.const 88475198)) + (i32.add (i32.const -645201514)) + (i32.add (i32.const -173248133)) + (i32.add (i32.const 1864763630)) + (i32.add (i32.const 1224226645)) + (i32.add (i32.const -956054852)) + (i32.add (i32.const -772067537)) + (i32.add (i32.const -154066563)) + (i32.add (i32.const 734267371)) + (i32.add (i32.const 945775889)) + (i32.add (i32.const 1025519785)) + (i32.add (i32.const 1724115638)) + (i32.add (i32.const -1854427419)) + (i32.add (i32.const 1688832102)) + (i32.add (i32.const 899719159)) + (i32.add (i32.const -308844383)) + (i32.add (i32.const 2101948206)) + (i32.add (i32.const 993105290)) + (i32.add (i32.const -1240676746)) + (i32.add (i32.const -837553056)) + (i32.add (i32.const 798597426)) + (i32.add (i32.const 706506028)) + (i32.add (i32.const -882266534)) + (i32.add (i32.const -998924760)) + (i32.add (i32.const 815472363)) + (i32.add (i32.const -366736874)) + (i32.add (i32.const 494768539)) + (i32.add (i32.const -834224551)) + (i32.add (i32.const 2046007206)) + (i32.add (i32.const -367932715)) + (i32.add (i32.const 1998939925)) + (i32.add (i32.const 2143767662)) + (i32.add (i32.const 1552646032)) + (i32.add (i32.const 972335758)) + (i32.add (i32.const 205060040)) + (i32.add (i32.const 1256721993)) + (i32.add (i32.const -637066269)) + (i32.add (i32.const -408613828)) + (i32.add (i32.const 1144496332)) + (i32.add (i32.const -921719086)) + (i32.add (i32.const 1540632136)) + (i32.add (i32.const 1835568410)) + (i32.add (i32.const -762494025)) + (i32.add (i32.const 1540528178)) + (i32.add (i32.const -1684974034)) + (i32.add (i32.const -1919580691)) + (i32.add (i32.const -1274135384)) + (i32.add (i32.const 1815335508)) + (i32.add (i32.const -1377584283)) + (i32.add (i32.const -1438342270)) + (i32.add (i32.const -27227108)) + (i32.add (i32.const 129766973)) + (i32.add (i32.const 861613635)) + (i32.add (i32.const 467103106)) + (i32.add (i32.const 1964552162)) + (i32.add (i32.const -1709203795)) + (i32.add (i32.const 936664563)) + (i32.add (i32.const 381190222)) + (i32.add (i32.const 1388720754)) + (i32.add (i32.const -1228932552)) + (i32.add (i32.const -1221972940)) + (i32.add (i32.const -995467111)) + (i32.add (i32.const -745946774)) + (i32.add (i32.const -1980186073)) + (i32.add (i32.const 1236230317)) + (i32.add (i32.const -580185522)) + (i32.add (i32.const 57404687)) + (i32.add (i32.const -6267600)) + (i32.add (i32.const -672652608)) + (i32.add (i32.const 1225077764)) + (i32.add (i32.const -235331020)) + (i32.add (i32.const 2100999209)) + (i32.add (i32.const -1867872003)) + (i32.add (i32.const 1723525670)) + (i32.add (i32.const -1198801227)) + (i32.add (i32.const -196183224)) + (i32.add (i32.const -829953158)) + (i32.add (i32.const -912941022)) + (i32.add (i32.const 1662099454)) + (i32.add (i32.const -804106501)) + (i32.add (i32.const -1799156552)) + (i32.add (i32.const 1130792424)) + (i32.add (i32.const -1278521975)) + (i32.add (i32.const -1480582067)) + (i32.add (i32.const 654843209)) + (i32.add (i32.const 851930444)) + (i32.add (i32.const 1766439066)) + (i32.add (i32.const -2076130690)) + (i32.add (i32.const 1483951470)) + (i32.add (i32.const 1818666175)) + (i32.add (i32.const 1900720386)) + (i32.add (i32.const 1005511071)) + (i32.add (i32.const 2090602258)) + (i32.add (i32.const 1486098250)) + (i32.add (i32.const 648634485)) + (i32.add (i32.const -335474570)) + (i32.add (i32.const 246149322)) + (i32.add (i32.const -894676970)) + (i32.add (i32.const 38359147)) + (i32.add (i32.const 721874199)) + (i32.add (i32.const -665500408)) + (i32.add (i32.const 1363459685)) + (i32.add (i32.const 659939888)) + (i32.add (i32.const -1614896545)) + (i32.add (i32.const -1150271620)) + (i32.add (i32.const -522824348)) + (i32.add (i32.const 1257014245)) + (i32.add (i32.const 1219437010)) + (i32.add (i32.const 636199745)) + (i32.add (i32.const -118129178)) + (i32.add (i32.const -1938555666)) + (i32.add (i32.const -348284413)) + (i32.add (i32.const 142345468)) + (i32.add (i32.const -72461541)) + (i32.add (i32.const 1727393452)) + (i32.add (i32.const 1743524804)) + (i32.add (i32.const 1328825974)) + (i32.add (i32.const 994442838)) + (i32.add (i32.const -300990852)) + (i32.add (i32.const -1497784983)) + (i32.add (i32.const 743692329)) + (i32.add (i32.const -1005886672)) + (i32.add (i32.const 1329188746)) + (i32.add (i32.const -623252330)) + (i32.add (i32.const 1607032674)) + (i32.add (i32.const -1080818681)) + (i32.add (i32.const -863257664)) + (i32.add (i32.const 712780712)) + (i32.add (i32.const 1135422965)) + (i32.add (i32.const 202397194)) + (i32.add (i32.const -1746499297)) + (i32.add (i32.const 232874165)) + (i32.add (i32.const -717036310)) + (i32.add (i32.const -2097559473)) + (i32.add (i32.const -552145970)) + (i32.add (i32.const 1659629371)) + (i32.add (i32.const 1792129415)) + (i32.add (i32.const 217955597)) + (i32.add (i32.const 1505044963)) + (i32.add (i32.const 1945418994)) + (i32.add (i32.const -1664753500)) + (i32.add (i32.const -190971802)) + (i32.add (i32.const 47633541)) + (i32.add (i32.const 1936958989)) + (i32.add (i32.const -1599762711)) + (i32.add (i32.const 88923096)) + (i32.add (i32.const 1929425725)) + (i32.add (i32.const -1569309484)) + (i32.add (i32.const 2042672206)) + (i32.add (i32.const -1107092491)) + (i32.add (i32.const -1297347348)) + (i32.add (i32.const -1286063456)) + (i32.add (i32.const -1752484416)) + (i32.add (i32.const -230480505)) + (i32.add (i32.const -321848799)) + (i32.add (i32.const -1495570187)) + (i32.add (i32.const 8512220)) + (i32.add (i32.const 1630715631)) + (i32.add (i32.const 138104903)) + (i32.add (i32.const 820751280)) + (i32.add (i32.const 1042288954)) + (i32.add (i32.const 11467315)) + (i32.add (i32.const 1496044993)) + (i32.add (i32.const -336644374)) + (i32.add (i32.const -1883674600)) + (i32.add (i32.const -546849080)) + (i32.add (i32.const -386414336)) + (i32.add (i32.const -1905225127)) + (i32.add (i32.const -1814660374)) + (i32.add (i32.const -1256495186)) + (i32.add (i32.const 852525236)) + (i32.add (i32.const -242496393)) + (i32.add (i32.const -572277631)) + (i32.add (i32.const -2008281314)) + (i32.add (i32.const -1762067666)) + (i32.add (i32.const -2077009426)) + (i32.add (i32.const -2049863711)) + (i32.add (i32.const -59893626)) + (i32.add (i32.const 1533777384)) + (i32.add (i32.const 1652220931)) + (i32.add (i32.const 1384053135)) + (i32.add (i32.const 115859309)) + (i32.add (i32.const -385690763)) + (i32.add (i32.const -921040780)) + (i32.add (i32.const 1643298259)) + (i32.add (i32.const 677097665)) + (i32.add (i32.const 2127030198)) + (i32.add (i32.const -1456743128)) + (i32.add (i32.const 1029172981)) + (i32.add (i32.const -90627432)) + (i32.add (i32.const 800656177)) + (i32.add (i32.const -855818663)) + (i32.add (i32.const 705069429)) + (i32.add (i32.const 331313906)) + (i32.add (i32.const -2036826151)) + (i32.add (i32.const 2067597096)) + (i32.add (i32.const 1353079847)) + (i32.add (i32.const -273301989)) + (i32.add (i32.const -2013828436)) + (i32.add (i32.const 904777290)) + (i32.add (i32.const -1208135716)) + (i32.add (i32.const 657463562)) + (i32.add (i32.const -1624506107)) + (i32.add (i32.const 222826113)) + (i32.add (i32.const 310573686)) + (i32.add (i32.const -1411656693)) + (i32.add (i32.const -1200718938)) + (i32.add (i32.const 1717412424)) + (i32.add (i32.const -1238911259)) + (i32.add (i32.const 435655598)) + (i32.add (i32.const 210467087)) + (i32.add (i32.const 424901165)) + (i32.add (i32.const 1451838700)) + (i32.add (i32.const -1609402954)) + (i32.add (i32.const -1217709774)) + (i32.add (i32.const 934728318)) + (i32.add (i32.const -334844552)) + (i32.add (i32.const -765270584)) + (i32.add (i32.const -237893768)) + (i32.add (i32.const -746127741)) + (i32.add (i32.const -1869630610)) + (i32.add (i32.const 1889246818)) + (i32.add (i32.const 1057195950)) + (i32.add (i32.const -1808146577)) + (i32.add (i32.const 836297182)) + (i32.add (i32.const -2120451238)) + (i32.add (i32.const -1226779626)) + (i32.add (i32.const 693747657)) + (i32.add (i32.const 83698568)) + (i32.add (i32.const -136182585)) + (i32.add (i32.const -1896195445)) + (i32.add (i32.const -302829301)) + (i32.add (i32.const -6193650)) + (i32.add (i32.const -1092687108)) + (i32.add (i32.const 1476699894)) + (i32.add (i32.const 1129594820)) + (i32.add (i32.const -172584524)) + (i32.add (i32.const -44468432)) + (i32.add (i32.const 574909697)) + (i32.add (i32.const 1674109719)) + (i32.add (i32.const 1305784500)) + (i32.add (i32.const -523540191)) + (i32.add (i32.const -2083807825)) + (i32.add (i32.const -548504542)) + (i32.add (i32.const 1602075276)) + (i32.add (i32.const -183193846)) + (i32.add (i32.const 1363878789)) + (i32.add (i32.const -711641208)) + (i32.add (i32.const 746574793)) + (i32.add (i32.const -157889104)) + (i32.add (i32.const -1255020099)) + (i32.add (i32.const -1714229352)) + (i32.add (i32.const 350991879)) + (i32.add (i32.const -1595469968)) + (i32.add (i32.const 1961941032)) + (i32.add (i32.const 1213177874)) + (i32.add (i32.const -1015574734)) + (i32.add (i32.const -1673690318)) + (i32.add (i32.const 427599515)) + (i32.add (i32.const -1426608554)) + (i32.add (i32.const -1280711861)) + (i32.add (i32.const 1242418407)) + (i32.add (i32.const -412026337)) + (i32.add (i32.const 709142004)) + (i32.add (i32.const -973515650)) + (i32.add (i32.const -1922285035)) + (i32.add (i32.const -705197386)) + (i32.add (i32.const -1852513074)) + (i32.add (i32.const 1568631435)) + (i32.add (i32.const -1626934069)) + (i32.add (i32.const 1244983142)) + (i32.add (i32.const -1338941645)) + (i32.add (i32.const 821408545)) + (i32.add (i32.const 2145403542)) + (i32.add (i32.const -985812849)) + (i32.add (i32.const -534044765)) + (i32.add (i32.const 1752337386)) + (i32.add (i32.const -2084164348)) + (i32.add (i32.const 1544978429)) + (i32.add (i32.const -1682916247)) + (i32.add (i32.const -900104360)) + (i32.add (i32.const -1029318915)) + (i32.add (i32.const 576474542)) + (i32.add (i32.const -1554934257)) + (i32.add (i32.const 713441770)) + (i32.add (i32.const 1700025992)) + (i32.add (i32.const -47691328)) + (i32.add (i32.const 820009077)) + (i32.add (i32.const -429200535)) + (i32.add (i32.const 757022160)) + (i32.add (i32.const 487799463)) + (i32.add (i32.const 2023916451)) + (i32.add (i32.const 2079432361)) + (i32.add (i32.const 1001724744)) + (i32.add (i32.const 1208280401)) + (i32.add (i32.const 661848503)) + (i32.add (i32.const 1722087487)) + (i32.add (i32.const -1674556772)) + (i32.add (i32.const 10463357)) + (i32.add (i32.const -905288285)) + (i32.add (i32.const 1242177728)) + (i32.add (i32.const 1906054702)) + (i32.add (i32.const -1650389938)) + (i32.add (i32.const -18996165)) + (i32.add (i32.const 1915438802)) + (i32.add (i32.const -1765808528)) + (i32.add (i32.const 2143063914)) + (i32.add (i32.const 194475343)) + (i32.add (i32.const -1861524966)) + (i32.add (i32.const 2024169785)) + (i32.add (i32.const 678109337)) + (i32.add (i32.const -35731156)) + (i32.add (i32.const 1466598991)) + (i32.add (i32.const -289466782)) + (i32.add (i32.const -1334603253)) + (i32.add (i32.const -901894813)) + (i32.add (i32.const 2014532474)) + (i32.add (i32.const -1756283681)) + (i32.add (i32.const 1504583632)) + (i32.add (i32.const -776561190)) + (i32.add (i32.const 899027943)) + (i32.add (i32.const 809596958)) + (i32.add (i32.const -839867198)) + (i32.add (i32.const 1571018155)) + (i32.add (i32.const 782277900)) + (i32.add (i32.const 145349218)) + (i32.add (i32.const 642346811)) + (i32.add (i32.const -1004800324)) + (i32.add (i32.const 2123683331)) + (i32.add (i32.const 1033800493)) + (i32.add (i32.const 2092079405)) + (i32.add (i32.const -177672845)) + (i32.add (i32.const 271606220)) + (i32.add (i32.const 1528873556)) + (i32.add (i32.const 1659828399)) + (i32.add (i32.const -427557120)) + (i32.add (i32.const 2042582117)) + (i32.add (i32.const 1250555657)) + (i32.add (i32.const -1688410359)) + (i32.add (i32.const -297584420)) + (i32.add (i32.const 250615250)) + (i32.add (i32.const -909951876)) + (i32.add (i32.const 40364278)) + (i32.add (i32.const 573257740)) + (i32.add (i32.const 864051301)) + (i32.add (i32.const 264113014)) + (i32.add (i32.const 1534096844)) + (i32.add (i32.const -87164635)) + (i32.add (i32.const 1030836755)) + (i32.add (i32.const 1680415622)) + (i32.add (i32.const 1705391698)) + (i32.add (i32.const -2099321270)) + (i32.add (i32.const 822363017)) + (i32.add (i32.const -1167416620)) + (i32.add (i32.const -100755784)) + (i32.add (i32.const -1445554658)) + (i32.add (i32.const -1474309819)) + (i32.add (i32.const -1046880228)) + (i32.add (i32.const -1016815083)) + (i32.add (i32.const -208689536)) + (i32.add (i32.const 1676693367)) + (i32.add (i32.const 1327645857)) + (i32.add (i32.const -1145469908)) + (i32.add (i32.const 263189289)) + (i32.add (i32.const -1257253276)) + (i32.add (i32.const 909070659)) + (i32.add (i32.const -1856378377)) + (i32.add (i32.const -1625356300)) + (i32.add (i32.const 1565512096)) + (i32.add (i32.const 797842331)) + (i32.add (i32.const 267986970)) + (i32.add (i32.const -1549024803)) + (i32.add (i32.const 1435855032)) + (i32.add (i32.const -258291362)) + (i32.add (i32.const -911273668)) + (i32.add (i32.const -1799407728)) + (i32.add (i32.const -1065524103)) + (i32.add (i32.const -1265513129)) + (i32.add (i32.const -2030752054)) + (i32.add (i32.const -1403041148)) + (i32.add (i32.const 1786311034)) + (i32.add (i32.const 1946550713)) + (i32.add (i32.const -287679860)) + (i32.add (i32.const -892404764)) + (i32.add (i32.const -1927946495)) + (i32.add (i32.const 553535621)) + (i32.add (i32.const -1720861413)) + (i32.add (i32.const 2094745125)) + (i32.add (i32.const 1571977877)) + (i32.add (i32.const 1947336985)) + (i32.add (i32.const -1517979907)) + (i32.add (i32.const 390016748)) + (i32.add (i32.const -1061413700)) + (i32.add (i32.const 545175413)) + (i32.add (i32.const 255095096)) + (i32.add (i32.const -675123584)) + (i32.add (i32.const -2010858480)) + (i32.add (i32.const 1488598974)) + (i32.add (i32.const 1989959995)) + (i32.add (i32.const -1344952356)) + (i32.add (i32.const -20837465)) + (i32.add (i32.const 206335046)) + (i32.add (i32.const 1751308310)) + (i32.add (i32.const -1176218694)) + (i32.add (i32.const -1476903882)) + (i32.add (i32.const 979618230)) + (i32.add (i32.const 1320752136)) + (i32.add (i32.const -578435719)) + (i32.add (i32.const -724788616)) + (i32.add (i32.const -795920278)) + (i32.add (i32.const -493643634)) + (i32.add (i32.const 2062425931)) + (i32.add (i32.const -353966600)) + (i32.add (i32.const -2003726861)) + (i32.add (i32.const -2060783157)) + (i32.add (i32.const 1202646080)) + (i32.add (i32.const -336822329)) + (i32.add (i32.const 927423442)) + (i32.add (i32.const -1900001806)) + (i32.add (i32.const -1651275238)) + (i32.add (i32.const 547214223)) + (i32.add (i32.const 945773251)) + (i32.add (i32.const 192488022)) + (i32.add (i32.const -1725942543)) + (i32.add (i32.const -462688701)) + (i32.add (i32.const 205410968)) + (i32.add (i32.const -972144855)) + (i32.add (i32.const 2110612633)) + (i32.add (i32.const 957988974)) + (i32.add (i32.const -1750896722)) + (i32.add (i32.const 203936800)) + (i32.add (i32.const -80287878)) + (i32.add (i32.const 1176968627)) + (i32.add (i32.const 716875482)) + (i32.add (i32.const 1865121504)) + (i32.add (i32.const 1993865702)) + (i32.add (i32.const 1243857259)) + (i32.add (i32.const -102547661)) + (i32.add (i32.const 229897430)) + (i32.add (i32.const -806087534)) + (i32.add (i32.const 292518030)) + (i32.add (i32.const 482654275)) + (i32.add (i32.const 1631635105)) + (i32.add (i32.const 739611019)) + (i32.add (i32.const -1079947145)) + (i32.add (i32.const 1174710278)) + (i32.add (i32.const 26201309)) + (i32.add (i32.const -1051043388)) + (i32.add (i32.const -35435373)) + (i32.add (i32.const 1801256610)) + (i32.add (i32.const -1071353316)) + (i32.add (i32.const -1114124193)) + (i32.add (i32.const -849347899)) + (i32.add (i32.const 1726018015)) + (i32.add (i32.const -917031009)) + (i32.add (i32.const 173651293)) + (i32.add (i32.const 702314758)) + (i32.add (i32.const 1481394105)) + (i32.add (i32.const -389054766)) + (i32.add (i32.const 592022842)) + (i32.add (i32.const -703081460)) + (i32.add (i32.const 2054750998)) + (i32.add (i32.const -1964982416)) + (i32.add (i32.const 1186604152)) + (i32.add (i32.const -197082009)) + (i32.add (i32.const 2144483633)) + (i32.add (i32.const 1769533052)) + (i32.add (i32.const 464611526)) + (i32.add (i32.const -1340392629)) + (i32.add (i32.const 619223328)) + (i32.add (i32.const -1260795600)) + (i32.add (i32.const 929068122)) + (i32.add (i32.const -536802910)) + (i32.add (i32.const -1428616122)) + (i32.add (i32.const -1559547556)) + (i32.add (i32.const -1172252072)) + (i32.add (i32.const 670320301)) + (i32.add (i32.const -1047404813)) + (i32.add (i32.const 1784021217)) + (i32.add (i32.const -284290596)) + (i32.add (i32.const -2116202801)) + (i32.add (i32.const 1141656288)) + (i32.add (i32.const 1475330391)) + (i32.add (i32.const 1789892930)) + (i32.add (i32.const -976114237)) + (i32.add (i32.const -1611886959)) + (i32.add (i32.const 1255960384)) + (i32.add (i32.const 121382915)) + (i32.add (i32.const 1889149671)) + (i32.add (i32.const -511518860)) + (i32.add (i32.const -958991082)) + (i32.add (i32.const -1519633838)) + (i32.add (i32.const 157261175)) + (i32.add (i32.const -893249705)) + (i32.add (i32.const 1232994527)) + (i32.add (i32.const -870205342)) + (i32.add (i32.const 2087662027)) + (i32.add (i32.const -1613623504)) + (i32.add (i32.const 75808200)) + (i32.add (i32.const -851755671)) + (i32.add (i32.const -999964756)) + (i32.add (i32.const 875406880)) + (i32.add (i32.const 305093873)) + (i32.add (i32.const -177846530)) + (i32.add (i32.const 1437089638)) + (i32.add (i32.const -308083058)) + (i32.add (i32.const 662864894)) + (i32.add (i32.const 1718154780)) + (i32.add (i32.const -1439348222)) + (i32.add (i32.const -1454493345)) + (i32.add (i32.const -584116227)) + (i32.add (i32.const 1325568135)) + (i32.add (i32.const -736291433)) + (i32.add (i32.const 1261535711)) + (i32.add (i32.const 538261750)) + (i32.add (i32.const 550899027)) + (i32.add (i32.const -1659511767)) + (i32.add (i32.const -1084948252)) + (i32.add (i32.const -1814867924)) + (i32.add (i32.const 456809015)) + (i32.add (i32.const -155699904)) + (i32.add (i32.const -1345828338)) + (i32.add (i32.const -1142404258)) + (i32.add (i32.const -1918915720)) + (i32.add (i32.const -1714494512)) + (i32.add (i32.const 1872785872)) + (i32.add (i32.const 1188751129)) + (i32.add (i32.const -1598461007)) + (i32.add (i32.const 742221017)) + (i32.add (i32.const -19751915)) + (i32.add (i32.const -1616301460)) + (i32.add (i32.const 1561393860)) + (i32.add (i32.const 1443146271)) + (i32.add (i32.const 1064605391)) + (i32.add (i32.const 1005420165)) + (i32.add (i32.const -1962162751)) + (i32.add (i32.const 43509751)) + (i32.add (i32.const -1675677325)) + (i32.add (i32.const -1396792209)) + (i32.add (i32.const 2094254363)) + (i32.add (i32.const 767404861)) + (i32.add (i32.const 503523297)) + (i32.add (i32.const -2001958238)) + (i32.add (i32.const -747278222)) + (i32.add (i32.const 1137494196)) + (i32.add (i32.const 751455709)) + (i32.add (i32.const -862326086)) + (i32.add (i32.const -237270020)) + (i32.add (i32.const 1351835424)) + (i32.add (i32.const 500921904)) + (i32.add (i32.const -1729551498)) + (i32.add (i32.const -1050906308)) + (i32.add (i32.const 1531544366)) + (i32.add (i32.const -966491043)) + (i32.add (i32.const -1802974321)) + (i32.add (i32.const -8836540)) + (i32.add (i32.const 1266856292)) + (i32.add (i32.const -1216214869)) + (i32.add (i32.const 1078763441)) + (i32.add (i32.const -1392213926)) + (i32.add (i32.const 417502714)) + (i32.add (i32.const -1786116863)) + (i32.add (i32.const -1230026055)) + (i32.add (i32.const -1683084829)) + (i32.add (i32.const -1265147044)) + (i32.add (i32.const -407875859)) + (i32.add (i32.const 1216984730)) + (i32.add (i32.const -571647991)) + (i32.add (i32.const -1258712140)) + (i32.add (i32.const -1636974500)) + (i32.add (i32.const 682739238)) + (i32.add (i32.const -1772130081)) + (i32.add (i32.const -2009678593)) + (i32.add (i32.const -176326403)) + (i32.add (i32.const -1182237961)) + (i32.add (i32.const 450000016)) + (i32.add (i32.const 708959826)) + (i32.add (i32.const 303658004)) + (i32.add (i32.const 1814913879)) + (i32.add (i32.const -873564042)) + (i32.add (i32.const -942059126)) + (i32.add (i32.const -475501065)) + (i32.add (i32.const 244189138)) + (i32.add (i32.const 1535821115)) + (i32.add (i32.const 1982433014)) + (i32.add (i32.const 1072821512)) + (i32.add (i32.const 723987989)) + (i32.add (i32.const 1927009607)) + (i32.add (i32.const -1307291959)) + (i32.add (i32.const 1539097529)) + (i32.add (i32.const 1213681428)) + (i32.add (i32.const 1701938479)) + (i32.add (i32.const 110869212)) + (i32.add (i32.const -1737959105)) + (i32.add (i32.const -950397347)) + (i32.add (i32.const 135470594)) + (i32.add (i32.const 1778550163)) + (i32.add (i32.const -267684635)) + (i32.add (i32.const 2109530096)) + (i32.add (i32.const 1571067004)) + (i32.add (i32.const 1685828275)) + (i32.add (i32.const 1991254824)) + (i32.add (i32.const 1333345064)) + (i32.add (i32.const 242403917)) + (i32.add (i32.const 1591884345)) + (i32.add (i32.const 1580731070)) + (i32.add (i32.const 1894466211)) + (i32.add (i32.const -307599304)) + (i32.add (i32.const 1473272754)) + (i32.add (i32.const 1599275502)) + (i32.add (i32.const -98111686)) + (i32.add (i32.const -601824329)) + (i32.add (i32.const 363913130)) + (i32.add (i32.const -1348590222)) + (i32.add (i32.const 52739913)) + (i32.add (i32.const -1903204542)) + (i32.add (i32.const -1730047862)) + (i32.add (i32.const -1914819594)) + (i32.add (i32.const -335842697)) + (i32.add (i32.const 1814162913)) + (i32.add (i32.const 1938814912)) + (i32.add (i32.const 1891949441)) + (i32.add (i32.const -1475052303)) + (i32.add (i32.const -1781880417)) + (i32.add (i32.const 338332197)) + (i32.add (i32.const 1242721441)) + (i32.add (i32.const 593584317)) + (i32.add (i32.const -1881761539)) + (i32.add (i32.const 1688487411)) + (i32.add (i32.const 326556673)) + (i32.add (i32.const 1323509004)) + (i32.add (i32.const 384557072)) + (i32.add (i32.const 226403727)) + (i32.add (i32.const 1131784739)) + (i32.add (i32.const -596768423)) + (i32.add (i32.const -1999401174)) + (i32.add (i32.const 231678181)) + (i32.add (i32.const -1529885511)) + (i32.add (i32.const 126770852)) + (i32.add (i32.const 1734502816)) + (i32.add (i32.const 565946404)) + (i32.add (i32.const 283857209)) + (i32.add (i32.const -1422093262)) + (i32.add (i32.const 1678529117)) + (i32.add (i32.const -185094792)) + (i32.add (i32.const -1352657504)) + (i32.add (i32.const 132951461)) + (i32.add (i32.const -1025916987)) + (i32.add (i32.const 2050912676)) + (i32.add (i32.const 1002309626)) + (i32.add (i32.const 1105487193)) + (i32.add (i32.const -178614901)) + (i32.add (i32.const -1638954385)) + (i32.add (i32.const 1443098076)) + (i32.add (i32.const 766861688)) + (i32.add (i32.const -956673419)) + (i32.add (i32.const 1175350021)) + (i32.add (i32.const 1781257350)) + (i32.add (i32.const 2035216739)) + (i32.add (i32.const -325063461)) + (i32.add (i32.const -1471944730)) + (i32.add (i32.const 68915710)) + (i32.add (i32.const -2079160115)) + (i32.add (i32.const -343077323)) + (i32.add (i32.const 1032483478)) + (i32.add (i32.const -1793192116)) + (i32.add (i32.const -1450105123)) + (i32.add (i32.const 899271774)) + (i32.add (i32.const -1627804019)) + (i32.add (i32.const -1491580747)) + (i32.add (i32.const -252518937)) + (i32.add (i32.const 1206217606)) + (i32.add (i32.const -1074669308)) + (i32.add (i32.const 1747628312)) + (i32.add (i32.const 1555721287)) + (i32.add (i32.const 1341903796)) + (i32.add (i32.const 1101574664)) + (i32.add (i32.const 476110094)) + (i32.add (i32.const -368242976)) + (i32.add (i32.const 1762506716)) + (i32.add (i32.const -543561938)) + (i32.add (i32.const 926179436)) + (i32.add (i32.const -1733729880)) + (i32.add (i32.const -410507584)) + (i32.add (i32.const 899188513)) + (i32.add (i32.const 1483267556)) + (i32.add (i32.const -2134241796)) + (i32.add (i32.const 1259197810)) + (i32.add (i32.const 462236523)) + (i32.add (i32.const 80932876)) + (i32.add (i32.const -1192014773)) + (i32.add (i32.const -1861736882)) + (i32.add (i32.const -256023262)) + (i32.add (i32.const 1145876217)) + (i32.add (i32.const 542377404)) + (i32.add (i32.const 1393691808)) + (i32.add (i32.const -2080417837)) + (i32.add (i32.const 868701576)) + (i32.add (i32.const 1452816143)) + (i32.add (i32.const -1416722665)) + (i32.add (i32.const 749806634)) + (i32.add (i32.const -566569715)) + (i32.add (i32.const 1639279531)) + (i32.add (i32.const 978498603)) + (i32.add (i32.const 113290670)) + (i32.add (i32.const -1064122489)) + (i32.add (i32.const 2078453911)) + (i32.add (i32.const -1814724316)) + (i32.add (i32.const -2036204751)) + (i32.add (i32.const -736675578)) + (i32.add (i32.const 3499685)) + (i32.add (i32.const 1674396386)) + (i32.add (i32.const -518893950)) + (i32.add (i32.const -243821614)) + (i32.add (i32.const -1192456752)) + (i32.add (i32.const 1551186733)) + (i32.add (i32.const 1836108910)) + (i32.add (i32.const -115352671)) + (i32.add (i32.const 1920510518)) + (i32.add (i32.const 64141859)) + (i32.add (i32.const 482378124)) + (i32.add (i32.const -1475380948)) + (i32.add (i32.const -416554209)) + (i32.add (i32.const -1048075196)) + (i32.add (i32.const 270084738)) + (i32.add (i32.const 1738855531)) + (i32.add (i32.const -630655593)) + (i32.add (i32.const -501550004)) + (i32.add (i32.const 2019369293)) + (i32.add (i32.const 925647280)) + (i32.add (i32.const 1980603497)) + (i32.add (i32.const -1008257070)) + (i32.add (i32.const -602414401)) + (i32.add (i32.const -1000645874)) + (i32.add (i32.const 1669596952)) + (i32.add (i32.const -1439418480)) + (i32.add (i32.const 714734464)) + (i32.add (i32.const -696376269)) + (i32.add (i32.const -979060254)) + (i32.add (i32.const 138574740)) + (i32.add (i32.const -1263866008)) + (i32.add (i32.const -26210519)) + (i32.add (i32.const 217679903)) + (i32.add (i32.const 51571852)) + (i32.add (i32.const 344715383)) + (i32.add (i32.const 329898982)) + (i32.add (i32.const 2082060297)) + (i32.add (i32.const -1906305149)) + (i32.add (i32.const -1549948816)) + (i32.add (i32.const 2090326259)) + (i32.add (i32.const -339907557)) + (i32.add (i32.const 1854524757)) + (i32.add (i32.const 296872483)) + (i32.add (i32.const 418980212)) + (i32.add (i32.const 1426805373)) + (i32.add (i32.const -1991187256)) + (i32.add (i32.const -1958889578)) + (i32.add (i32.const -400573352)) + (i32.add (i32.const 1911126918)) + (i32.add (i32.const 271406746)) + (i32.add (i32.const -1995448352)) + (i32.add (i32.const 1960325415)) + (i32.add (i32.const -654376641)) + (i32.add (i32.const 205537942)) + (i32.add (i32.const 247866277)) + (i32.add (i32.const 776894833)) + (i32.add (i32.const -390523290)) + (i32.add (i32.const 878299740)) + (i32.add (i32.const -2031700797)) + (i32.add (i32.const 1655613802)) + (i32.add (i32.const 1214958457)) + (i32.add (i32.const 77239794)) + (i32.add (i32.const 894503908)) + (i32.add (i32.const 330426178)) + (i32.add (i32.const -1526795865)) + (i32.add (i32.const -1901049612)) + (i32.add (i32.const -1607831309)) + (i32.add (i32.const -144832956)) + (i32.add (i32.const 193333660)) + (i32.add (i32.const -1744165877)) + (i32.add (i32.const 1947567749)) + (i32.add (i32.const 10340653)) + (i32.add (i32.const 387347578)) + (i32.add (i32.const -1803916948)) + (i32.add (i32.const -449677578)) + (i32.add (i32.const -1117668445)) + (i32.add (i32.const -890868181)) + (i32.add (i32.const -285537238)) + (i32.add (i32.const -1392514026)) + (i32.add (i32.const -2075883263)) + (i32.add (i32.const -102819510)) + (i32.add (i32.const -1930230127)) + (i32.add (i32.const -1941600431)) + (i32.add (i32.const -859795080)) + (i32.add (i32.const 1501169063)) + (i32.add (i32.const 1984785006)) + (i32.add (i32.const -2029943655)) + (i32.add (i32.const 750141068)) + (i32.add (i32.const 921980762)) + (i32.add (i32.const 395179676)) + (i32.add (i32.const 683436474)) + (i32.add (i32.const 482877285)) + (i32.add (i32.const 22281551)) + (i32.add (i32.const 1842007136)) + (i32.add (i32.const 2294356)) + (i32.add (i32.const -2138509524)) + (i32.add (i32.const -842819360)) + (i32.add (i32.const 993195261)) + (i32.add (i32.const 877303577)) + (i32.add (i32.const -287686773)) + (i32.add (i32.const 359920577)) + (i32.add (i32.const -1396464156)) + (i32.add (i32.const -996716867)) + (i32.add (i32.const -1665169591)) + (i32.add (i32.const 1199923953)) + (i32.add (i32.const -804356382)) + (i32.add (i32.const -1095572690)) + (i32.add (i32.const 691417574)) + (i32.add (i32.const 2025010915)) + (i32.add (i32.const 2020520725)) + (i32.add (i32.const 2001862091)) + (i32.add (i32.const -1083322279)) + (i32.add (i32.const -280695096)) + (i32.add (i32.const 529821116)) + (i32.add (i32.const -919996187)) + (i32.add (i32.const -1874444328)) + (i32.add (i32.const -369826199)) + (i32.add (i32.const 1297201833)) + (i32.add (i32.const -1791568437)) + (i32.add (i32.const 452635312)) + (i32.add (i32.const 1095604492)) + (i32.add (i32.const 2034964356)) + (i32.add (i32.const 1021931020)) + (i32.add (i32.const -1100088244)) + (i32.add (i32.const 1062859823)) + (i32.add (i32.const -1044823332)) + (i32.add (i32.const -1760780786)) + (i32.add (i32.const 1305767981)) + (i32.add (i32.const -1377370500)) + (i32.add (i32.const 1088812609)) + (i32.add (i32.const 1717051432)) + (i32.add (i32.const -1205616282)) + (i32.add (i32.const -678566920)) + (i32.add (i32.const 1909804714)) + (i32.add (i32.const 1960507690)) + (i32.add (i32.const -2139649305)) + (i32.add (i32.const 1082905605)) + (i32.add (i32.const 1564597058)) + (i32.add (i32.const -1265584149)) + (i32.add (i32.const -1446228451)) + (i32.add (i32.const 1864430134)) + (i32.add (i32.const 1344844194)) + (i32.add (i32.const 1675075374)) + (i32.add (i32.const 2008023975)) + (i32.add (i32.const 155847813)) + (i32.add (i32.const -1670137790)) + (i32.add (i32.const -1893135793)) + (i32.add (i32.const 1596729811)) + (i32.add (i32.const -1163691652)) + (i32.add (i32.const -990712869)) + (i32.add (i32.const 241627310)) + (i32.add (i32.const -338982238)) + (i32.add (i32.const 257512177)) + (i32.add (i32.const -1090729362)) + (i32.add (i32.const 17040225)) + (i32.add (i32.const 1687995565)) + (i32.add (i32.const -66144512)) + (i32.add (i32.const -493083421)) + (i32.add (i32.const -1797712886)) + (i32.add (i32.const -581148274)) + (i32.add (i32.const 315659302)) + (i32.add (i32.const -959550805)) + (i32.add (i32.const -1021319534)) + (i32.add (i32.const -968104063)) + (i32.add (i32.const 1957787555)) + (i32.add (i32.const 1300039846)) + (i32.add (i32.const -1503594605)) + (i32.add (i32.const 243712374)) + (i32.add (i32.const 86739507)) + (i32.add (i32.const 1098983054)) + (i32.add (i32.const -934517639)) + (i32.add (i32.const -1403078212)) + (i32.add (i32.const -286304973)) + (i32.add (i32.const -1930175956)) + (i32.add (i32.const 349968751)) + (i32.add (i32.const 10481483)) + (i32.add (i32.const -698259024)) + (i32.add (i32.const -38550292)) + (i32.add (i32.const 849491037)) + (i32.add (i32.const 52838267)) + (i32.add (i32.const -2136495862)) + (i32.add (i32.const -1445772209)) + (i32.add (i32.const 2106317296)) + (i32.add (i32.const 1552184301)) + (i32.add (i32.const 413988019)) + (i32.add (i32.const 1216337356)) + (i32.add (i32.const 1739629781)) + (i32.add (i32.const 394950227)) + (i32.add (i32.const 629448372)) + (i32.add (i32.const -698544524)) + (i32.add (i32.const -1281954663)) + (i32.add (i32.const 1416395122)) + (i32.add (i32.const -1786786894)) + (i32.add (i32.const -1814518784)) + (i32.add (i32.const -15426747)) + (i32.add (i32.const 1600869606)) + (i32.add (i32.const -2124248072)) + (i32.add (i32.const 565309534)) + (i32.add (i32.const 257945601)) + (i32.add (i32.const 2017131161)) + (i32.add (i32.const 953435128)) + (i32.add (i32.const -1119112514)) + (i32.add (i32.const -1977592706)) + (i32.add (i32.const 623118563)) + (i32.add (i32.const 690293227)) + (i32.add (i32.const 870859221)) + (i32.add (i32.const 559870174)) + (i32.add (i32.const -1988012473)) + (i32.add (i32.const 710989468)) + (i32.add (i32.const -443001973)) + (i32.add (i32.const -1553367700)) + (i32.add (i32.const -130314309)) + (i32.add (i32.const 1812138369)) + (i32.add (i32.const -1228229930)) + (i32.add (i32.const 362316659)) + (i32.add (i32.const -1417330112)) + (i32.add (i32.const -1583903933)) + (i32.add (i32.const -1749688049)) + (i32.add (i32.const 2056984618)) + (i32.add (i32.const 236016618)) + (i32.add (i32.const 607098412)) + (i32.add (i32.const 1907768176)) + (i32.add (i32.const -526450098)) + (i32.add (i32.const 233319170)) + (i32.add (i32.const -90820860)) + (i32.add (i32.const -1875287878)) + (i32.add (i32.const 2019953551)) + (i32.add (i32.const -880733066)) + (i32.add (i32.const -765940119)) + (i32.add (i32.const 1604054999)) + (i32.add (i32.const 1391719862)) + (i32.add (i32.const -1804190650)) + (i32.add (i32.const -2079003730)) + (i32.add (i32.const 461496265)) + (i32.add (i32.const -2073518821)) + (i32.add (i32.const 362760414)) + (i32.add (i32.const 81344155)) + (i32.add (i32.const -848406615)) + (i32.add (i32.const -64266029)) + (i32.add (i32.const -1842693816)) + (i32.add (i32.const 604387413)) + (i32.add (i32.const -111577370)) + (i32.add (i32.const -752660290)) + (i32.add (i32.const -1157141460)) + (i32.add (i32.const -127994308)) + (i32.add (i32.const 1862465057)) + (i32.add (i32.const -1416085763)) + (i32.add (i32.const 1825360664)) + (i32.add (i32.const 1680021754)) + (i32.add (i32.const 1168713484)) + (i32.add (i32.const -1138616366)) + (i32.add (i32.const -207667125)) + (i32.add (i32.const 758119368)) + (i32.add (i32.const 1356395681)) + (i32.add (i32.const -250393633)) + (i32.add (i32.const 1469481820)) + (i32.add (i32.const -102100724)) + (i32.add (i32.const -1605187581)) + (i32.add (i32.const -408333352)) + (i32.add (i32.const 613106920)) + (i32.add (i32.const -1519041336)) + (i32.add (i32.const 1195521375)) + (i32.add (i32.const -815801155)) + (i32.add (i32.const 2026174045)) + (i32.add (i32.const 103045663)) + (i32.add (i32.const -1487577099)) + (i32.add (i32.const -1163973878)) + (i32.add (i32.const 1137449)) + (i32.add (i32.const -651997223)) + (i32.add (i32.const 692051684)) + (i32.add (i32.const 445615149)) + (i32.add (i32.const -170448664)) + (i32.add (i32.const 1968341605)) + (i32.add (i32.const -1203781440)) + (i32.add (i32.const 1224824523)) + (i32.add (i32.const -1948068561)) + (i32.add (i32.const 1261958914)) + (i32.add (i32.const -8198162)) + (i32.add (i32.const -1355950205)) + (i32.add (i32.const 2018829304)) + (i32.add (i32.const -61239357)) + (i32.add (i32.const -311738754)) + (i32.add (i32.const -1866548733)) + (i32.add (i32.const -1673699071)) + (i32.add (i32.const -1620734827)) + (i32.add (i32.const -185329036)) + (i32.add (i32.const 719746070)) + (i32.add (i32.const -342101546)) + (i32.add (i32.const -1611118701)) + (i32.add (i32.const 1069618550)) + (i32.add (i32.const -1992839923)) + (i32.add (i32.const 1384212317)) + (i32.add (i32.const -1695297908)) + (i32.add (i32.const 1065830839)) + (i32.add (i32.const 1965402720)) + (i32.add (i32.const -654362614)) + (i32.add (i32.const -383641459)) + (i32.add (i32.const -1786192345)) + (i32.add (i32.const -1771367233)) + (i32.add (i32.const -2057547205)) + (i32.add (i32.const 422899490)) + (i32.add (i32.const 659012449)) + (i32.add (i32.const -1364723065)) + (i32.add (i32.const 1809297147)) + (i32.add (i32.const 1141808429)) + (i32.add (i32.const -1574097255)) + (i32.add (i32.const -1112994352)) + (i32.add (i32.const 478811121)) + (i32.add (i32.const -2036845452)) + (i32.add (i32.const 1394450502)) + (i32.add (i32.const 7478350)) + (i32.add (i32.const 1232945048)) + (i32.add (i32.const 108657167)) + (i32.add (i32.const -619383651)) + (i32.add (i32.const -1605294242)) + (i32.add (i32.const -166346540)) + (i32.add (i32.const -1821653770)) + (i32.add (i32.const 1477722577)) + (i32.add (i32.const 1963340133)) + (i32.add (i32.const 248648046)) + (i32.add (i32.const 1867362768)) + (i32.add (i32.const -1905720554)) + (i32.add (i32.const 1228462945)) + (i32.add (i32.const -1727606582)) + (i32.add (i32.const -455269509)) + (i32.add (i32.const -49123947)) + (i32.add (i32.const -1157144157)) + (i32.add (i32.const 212037340)) + (i32.add (i32.const 1569157434)) + (i32.add (i32.const -652621510)) + (i32.add (i32.const -119826378)) + (i32.add (i32.const -261999598)) + (i32.add (i32.const -910766303)) + (i32.add (i32.const -817059209)) + (i32.add (i32.const 25692203)) + (i32.add (i32.const -2129638310)) + (i32.add (i32.const -820259904)) + (i32.add (i32.const -1147037021)) + (i32.add (i32.const -1884585112)) + (i32.add (i32.const -190582791)) + (i32.add (i32.const -934328777)) + (i32.add (i32.const 19333498)) + (i32.add (i32.const 794618065)) + (i32.add (i32.const -539165965)) + (i32.add (i32.const -656800363)) + (i32.add (i32.const -2081923993)) + (i32.add (i32.const 1086746230)) + (i32.add (i32.const 1101159073)) + (i32.add (i32.const 1272573806)) + (i32.add (i32.const 1412756182)) + (i32.add (i32.const -520543827)) + (i32.add (i32.const -1915412810)) + (i32.add (i32.const -1328221275)) + (i32.add (i32.const -769961910)) + (i32.add (i32.const -68550849)) + (i32.add (i32.const -1060403354)) + (i32.add (i32.const 587684385)) + (i32.add (i32.const 63550750)) + (i32.add (i32.const -1446488714)) + (i32.add (i32.const -1753540546)) + (i32.add (i32.const 2131517834)) + (i32.add (i32.const 1574856526)) + (i32.add (i32.const -1466935774)) + (i32.add (i32.const 533297172)) + (i32.add (i32.const 1258192588)) + (i32.add (i32.const 670479485)) + (i32.add (i32.const 1571769863)) + (i32.add (i32.const 1525240513)) + (i32.add (i32.const -1611465860)) + (i32.add (i32.const -1577882236)) + (i32.add (i32.const -384546188)) + (i32.add (i32.const 1745815916)) + (i32.add (i32.const 1306915500)) + (i32.add (i32.const 2126506450)) + (i32.add (i32.const -1959696596)) + (i32.add (i32.const -374563591)) + (i32.add (i32.const 1935868971)) + (i32.add (i32.const -594034677)) + (i32.add (i32.const 181591566)) + (i32.add (i32.const -1800585986)) + (i32.add (i32.const 740236862)) + (i32.add (i32.const 210260361)) + (i32.add (i32.const -1550199873)) + (i32.add (i32.const 2051399426)) + (i32.add (i32.const 1348220454)) + (i32.add (i32.const -815753839)) + (i32.add (i32.const -1759804046)) + (i32.add (i32.const -1904199268)) + (i32.add (i32.const 7264436)) + (i32.add (i32.const -946942195)) + (i32.add (i32.const 1026059208)) + (i32.add (i32.const 330495178)) + (i32.add (i32.const -44142721)) + (i32.add (i32.const 903578050)) + (i32.add (i32.const 376577051)) + (i32.add (i32.const 1230986084)) + (i32.add (i32.const 1989118940)) + (i32.add (i32.const 318201755)) + (i32.add (i32.const 335157942)) + (i32.add (i32.const -2049231785)) + (i32.add (i32.const 604749484)) + (i32.add (i32.const -510218837)) + (i32.add (i32.const -1562860864)) + (i32.add (i32.const -1437382872)) + (i32.add (i32.const 2031428146)) + (i32.add (i32.const -46971739)) + (i32.add (i32.const 109595633)) + (i32.add (i32.const -1672450721)) + (i32.add (i32.const -1520454711)) + (i32.add (i32.const -300337475)) + (i32.add (i32.const 111153969)) + (i32.add (i32.const 1669619724)) + (i32.add (i32.const -1191505613)) + (i32.add (i32.const -1028439994)) + (i32.add (i32.const -35514223)) + (i32.add (i32.const -1971584103)) + (i32.add (i32.const -1509757495)) + (i32.add (i32.const 1969735904)) + (i32.add (i32.const 29301763)) + (i32.add (i32.const -429826328)) + (i32.add (i32.const 378004782)) + (i32.add (i32.const 1762432314)) + (i32.add (i32.const 2041319682)) + (i32.add (i32.const -567698011)) + (i32.add (i32.const -70897355)) + (i32.add (i32.const 1833368710)) + (i32.add (i32.const 820223850)) + (i32.add (i32.const 1196598894)) + (i32.add (i32.const 1932391527)) + (i32.add (i32.const 1642020785)) + (i32.add (i32.const -2036367749)) + (i32.add (i32.const 1337245778)) + (i32.add (i32.const -1661641633)) + (i32.add (i32.const -2069039798)) + (i32.add (i32.const 246801862)) + (i32.add (i32.const -283276224)) + (i32.add (i32.const 679010854)) + (i32.add (i32.const 1798651832)) + (i32.add (i32.const 1548376864)) + (i32.add (i32.const 795537776)) + (i32.add (i32.const 1644106913)) + (i32.add (i32.const -787147808)) + (i32.add (i32.const -71632342)) + (i32.add (i32.const 721168461)) + (i32.add (i32.const -808144968)) + (i32.add (i32.const -1498521453)) + (i32.add (i32.const 398340647)) + (i32.add (i32.const 965251952)) + (i32.add (i32.const -985520274)) + (i32.add (i32.const -860811612)) + (i32.add (i32.const -1916791731)) + (i32.add (i32.const 665087297)) + (i32.add (i32.const 1702485366)) + (i32.add (i32.const -982372062)) + (i32.add (i32.const -443653268)) + (i32.add (i32.const 1122375922)) + (i32.add (i32.const -787425916)) + (i32.add (i32.const -943733050)) + (i32.add (i32.const -932559414)) + (i32.add (i32.const 2082073681)) + (i32.add (i32.const -1047559887)) + (i32.add (i32.const 984533111)) + (i32.add (i32.const -2135535727)) + (i32.add (i32.const -1175220635)) + (i32.add (i32.const 491202631)) + (i32.add (i32.const 938895621)) + (i32.add (i32.const 1027504458)) + (i32.add (i32.const -1873702784)) + (i32.add (i32.const -293545039)) + (i32.add (i32.const -283802384)) + (i32.add (i32.const 2112617641)) + (i32.add (i32.const -540936938)) + (i32.add (i32.const -1276902547)) + (i32.add (i32.const 1318776593)) + (i32.add (i32.const 187350045)) + (i32.add (i32.const 1728059882)) + (i32.add (i32.const 742241551)) + (i32.add (i32.const 421741227)) + (i32.add (i32.const 2048714244)) + (i32.add (i32.const -843544899)) + (i32.add (i32.const 2091356725)) + (i32.add (i32.const -13713737)) + (i32.add (i32.const -1554846417)) + (i32.add (i32.const 1275683063)) + (i32.add (i32.const -839252787)) + (i32.add (i32.const 1717607262)) + (i32.add (i32.const 2006777534)) + (i32.add (i32.const 1362957706)) + (i32.add (i32.const -1765188888)) + (i32.add (i32.const 857433558)) + (i32.add (i32.const -838917434)) + (i32.add (i32.const -934294814)) + (i32.add (i32.const -701061156)) + (i32.add (i32.const 623456800)) + (i32.add (i32.const 2037590473)) + (i32.add (i32.const -710172350)) + (i32.add (i32.const 1388944230)) + (i32.add (i32.const 723275279)) + (i32.add (i32.const -1881838463)) + (i32.add (i32.const 464108976)) + (i32.add (i32.const 1745943919)) + (i32.add (i32.const -1638919122)) + (i32.add (i32.const 1323922580)) + (i32.add (i32.const 975834373)) + (i32.add (i32.const -61167876)) + (i32.add (i32.const 1607759555)) + (i32.add (i32.const 1367922554)) + (i32.add (i32.const 439687641)) + (i32.add (i32.const -1102830531)) + (i32.add (i32.const -1934698417)) + (i32.add (i32.const -805150444)) + (i32.add (i32.const -1486183238)) + (i32.add (i32.const -972029504)) + (i32.add (i32.const 1010326084)) + (i32.add (i32.const -1262841712)) + (i32.add (i32.const -1561423802)) + (i32.add (i32.const 1665774019)) + (i32.add (i32.const 1798573628)) + (i32.add (i32.const -799818162)) + (i32.add (i32.const 464062528)) + (i32.add (i32.const 985520604)) + (i32.add (i32.const -1863496235)) + (i32.add (i32.const -693110242)) + (i32.add (i32.const -510298685)) + (i32.add (i32.const 974210396)) + (i32.add (i32.const -1388930061)) + (i32.add (i32.const 1322706380)) + (i32.add (i32.const 1193178364)) + (i32.add (i32.const -1758028125)) + (i32.add (i32.const -478743476)) + (i32.add (i32.const 1385374454)) + (i32.add (i32.const -776677250)) + (i32.add (i32.const -1287392281)) + (i32.add (i32.const -1234148665)) + (i32.add (i32.const 305868355)) + (i32.add (i32.const -707058110)) + (i32.add (i32.const 862012223)) + (i32.add (i32.const 762811933)) + (i32.add (i32.const 860881551)) + (i32.add (i32.const 866224820)) + (i32.add (i32.const 1305373463)) + (i32.add (i32.const -2086521834)) + (i32.add (i32.const 1638409322)) + (i32.add (i32.const -186107195)) + (i32.add (i32.const 843635579)) + (i32.add (i32.const -1652380372)) + (i32.add (i32.const 709579364)) + (i32.add (i32.const 73641744)) + (i32.add (i32.const 1593158578)) + (i32.add (i32.const -753441408)) + (i32.add (i32.const -1294320898)) + (i32.add (i32.const 554302626)) + (i32.add (i32.const 1896044226)) + (i32.add (i32.const 1629856169)) + (i32.add (i32.const 466289293)) + (i32.add (i32.const -1299588208)) + (i32.add (i32.const -198514311)) + (i32.add (i32.const -661899745)) + (i32.add (i32.const 1766288269)) + (i32.add (i32.const 1044157385)) + (i32.add (i32.const -1362120750)) + (i32.add (i32.const 1115079816)) + (i32.add (i32.const -2113549244)) + (i32.add (i32.const 703424428)) + (i32.add (i32.const -1932313332)) + (i32.add (i32.const 2098669397)) + (i32.add (i32.const 1416631762)) + (i32.add (i32.const -1489392431)) + (i32.add (i32.const -767627345)) + (i32.add (i32.const 384845283)) + (i32.add (i32.const 1004811074)) + (i32.add (i32.const -271433010)) + (i32.add (i32.const -311383150)) + (i32.add (i32.const -1129895436)) + (i32.add (i32.const -1392730034)) + (i32.add (i32.const -1625166135)) + (i32.add (i32.const 495513182)) + (i32.add (i32.const 150515687)) + (i32.add (i32.const -99519546)) + (i32.add (i32.const 853447835)) + (i32.add (i32.const 1083969691)) + (i32.add (i32.const -1180905830)) + (i32.add (i32.const -1806226503)) + (i32.add (i32.const 1169325224)) + (i32.add (i32.const 2060584840)) + (i32.add (i32.const 8238774)) + (i32.add (i32.const -1118037070)) + (i32.add (i32.const -256857050)) + (i32.add (i32.const -1059522183)) + (i32.add (i32.const -33271282)) + (i32.add (i32.const 498735728)) + (i32.add (i32.const -162115957)) + (i32.add (i32.const -1591020052)) + (i32.add (i32.const -1155057360)) + (i32.add (i32.const 1638009012)) + (i32.add (i32.const 669336347)) + (i32.add (i32.const -214082062)) + (i32.add (i32.const 63757133)) + (i32.add (i32.const -1747923356)) + (i32.add (i32.const -268152030)) + (i32.add (i32.const -1676048344)) + (i32.add (i32.const 1345640639)) + (i32.add (i32.const 614397798)) + (i32.add (i32.const 88706167)) + (i32.add (i32.const 24884044)) + (i32.add (i32.const 885503017)) + (i32.add (i32.const 397134506)) + (i32.add (i32.const -1912555609)) + (i32.add (i32.const 986360373)) + (i32.add (i32.const 1252226449)) + (i32.add (i32.const -173260184)) + (i32.add (i32.const -1853297289)) + (i32.add (i32.const 1006862501)) + (i32.add (i32.const 1033626513)) + (i32.add (i32.const 1684402421)) + (i32.add (i32.const 1547687994)) + (i32.add (i32.const -1334482204)) + (i32.add (i32.const 1110299785)) + (i32.add (i32.const -865603180)) + (i32.add (i32.const -1317027835)) + (i32.add (i32.const 661736634)) + (i32.add (i32.const 359530990)) + (i32.add (i32.const 1126555096)) + (i32.add (i32.const 1068202947)) + (i32.add (i32.const -1954968698)) + (i32.add (i32.const 886483442)) + (i32.add (i32.const -26580451)) + (i32.add (i32.const -72529730)) + (i32.add (i32.const -835915490)) + (i32.add (i32.const -929700362)) + (i32.add (i32.const 1556937746)) + (i32.add (i32.const -1792930368)) + (i32.add (i32.const 1598523644)) + (i32.add (i32.const 1057946546)) + (i32.add (i32.const 1248593352)) + (i32.add (i32.const 1051029923)) + (i32.add (i32.const 778496208)) + (i32.add (i32.const 1499757944)) + (i32.add (i32.const 1728035494)) + (i32.add (i32.const -1996754171)) + (i32.add (i32.const 2107154652)) + (i32.add (i32.const -490708732)) + (i32.add (i32.const -611672098)) + (i32.add (i32.const 833955313)) + (i32.add (i32.const 1473707721)) + (i32.add (i32.const -244285925)) + (i32.add (i32.const 1953654903)) + (i32.add (i32.const -1687445874)) + (i32.add (i32.const 1371447897)) + (i32.add (i32.const -550192040)) + (i32.add (i32.const 1552503437)) + (i32.add (i32.const -509329543)) + (i32.add (i32.const 2076460227)) + (i32.add (i32.const -129673527)) + (i32.add (i32.const 1733809871)) + (i32.add (i32.const 851545053)) + (i32.add (i32.const 222409957)) + (i32.add (i32.const 1961486391)) + (i32.add (i32.const 828713386)) + (i32.add (i32.const 197765819)) + (i32.add (i32.const 678097338)) + (i32.add (i32.const 297440396)) + (i32.add (i32.const 871841925)) + (i32.add (i32.const -1937914733)) + (i32.add (i32.const 2014797822)) + (i32.add (i32.const -1832434349)) + (i32.add (i32.const 1810974597)) + (i32.add (i32.const 789339153)) + (i32.add (i32.const -2044871959)) + (i32.add (i32.const 1715343927)) + (i32.add (i32.const 333529850)) + (i32.add (i32.const -523584995)) + (i32.add (i32.const 1260435259)) + (i32.add (i32.const 2112697036)) + (i32.add (i32.const 315498033)) + (i32.add (i32.const -1143054082)) + (i32.add (i32.const -186844460)) + (i32.add (i32.const 481318547)) + (i32.add (i32.const -1679002393)) + (i32.add (i32.const -43057118)) + (i32.add (i32.const -991310150)) + (i32.add (i32.const -1990483749)) + (i32.add (i32.const -48700708)) + (i32.add (i32.const 263480241)) + (i32.add (i32.const 1680043645)) + (i32.add (i32.const -1877444285)) + (i32.add (i32.const 1883235699)) + (i32.add (i32.const -86219984)) + (i32.add (i32.const 1238971383)) + (i32.add (i32.const -366547891)) + (i32.add (i32.const 1888221205)) + (i32.add (i32.const -1584439951)) + (i32.add (i32.const 721984307)) + (i32.add (i32.const 1037696125)) + (i32.add (i32.const 1666197172)) + (i32.add (i32.const 1953188468)) + (i32.add (i32.const 1121823595)) + (i32.add (i32.const -1890545807)) + (i32.add (i32.const 485933658)) + (i32.add (i32.const 309057494)) + (i32.add (i32.const -1754133458)) + (i32.add (i32.const -1894724085)) + (i32.add (i32.const 1677391927)) + (i32.add (i32.const 1015195556)) + (i32.add (i32.const -838293696)) + (i32.add (i32.const 1005776868)) + (i32.add (i32.const 2044941299)) + (i32.add (i32.const 974540907)) + (i32.add (i32.const -1817021830)) + (i32.add (i32.const 1473072079)) + (i32.add (i32.const 1333325064)) + (i32.add (i32.const 1872804572)) + (i32.add (i32.const -665814918)) + (i32.add (i32.const -548627406)) + (i32.add (i32.const 2001726289)) + (i32.add (i32.const 1137192257)) + (i32.add (i32.const 118317863)) + (i32.add (i32.const 777443631)) + (i32.add (i32.const -1362989278)) + (i32.add (i32.const 1645667718)) + (i32.add (i32.const -1353021973)) + (i32.add (i32.const -917075352)) + (i32.add (i32.const -1949897538)) + (i32.add (i32.const 757445800)) + (i32.add (i32.const -1486848295)) + (i32.add (i32.const -1599223327)) + (i32.add (i32.const 106836590)) + (i32.add (i32.const -1206658984)) + (i32.add (i32.const -1752626805)) + (i32.add (i32.const -698409285)) + (i32.add (i32.const 927285887)) + (i32.add (i32.const -145229436)) + (i32.add (i32.const 297889912)) + (i32.add (i32.const -224085975)) + (i32.add (i32.const 327075695)) + (i32.add (i32.const 928209855)) + (i32.add (i32.const 1003623561)) + (i32.add (i32.const -865604666)) + (i32.add (i32.const 2038738048)) + (i32.add (i32.const 289372116)) + (i32.add (i32.const -185619381)) + (i32.add (i32.const -1129542131)) + (i32.add (i32.const 369503487)) + (i32.add (i32.const -936311644)) + (i32.add (i32.const 214501360)) + (i32.add (i32.const -2028354573)) + (i32.add (i32.const -1164553916)) + (i32.add (i32.const -2048056382)) + (i32.add (i32.const -2044606360)) + (i32.add (i32.const 1399970890)) + (i32.add (i32.const 697234840)) + (i32.add (i32.const 464673324)) + (i32.add (i32.const 1951922749)) + (i32.add (i32.const 1775477639)) + (i32.add (i32.const 1361918553)) + (i32.add (i32.const -1041900124)) + (i32.add (i32.const 1909352596)) + (i32.add (i32.const 396211864)) + (i32.add (i32.const 2075420184)) + (i32.add (i32.const 694411014)) + (i32.add (i32.const 1164481323)) + (i32.add (i32.const 1013049384)) + (i32.add (i32.const -587802512)) + (i32.add (i32.const 1532768013)) + (i32.add (i32.const -1612661425)) + (i32.add (i32.const -1153138111)) + (i32.add (i32.const -1724860649)) + (i32.add (i32.const -599884897)) + (i32.add (i32.const -486774996)) + (i32.add (i32.const -1388706023)) + (i32.add (i32.const 1481070283)) + (i32.add (i32.const 155245128)) + (i32.add (i32.const -1708420048)) + (i32.add (i32.const 101989983)) + (i32.add (i32.const 413836047)) + (i32.add (i32.const 2118351866)) + (i32.add (i32.const -1652098904)) + (i32.add (i32.const 1138351108)) + (i32.add (i32.const 1500163199)) + (i32.add (i32.const -2118315101)) + (i32.add (i32.const -942816198)) + (i32.add (i32.const 533409123)) + (i32.add (i32.const 1739931746)) + (i32.add (i32.const -1006220510)) + (i32.add (i32.const -1577233767)) + (i32.add (i32.const -1276234965)) + (i32.add (i32.const 737991877)) + (i32.add (i32.const -1165209998)) + (i32.add (i32.const -1763193502)) + (i32.add (i32.const -578221176)) + (i32.add (i32.const -1961264719)) + (i32.add (i32.const 446620023)) + (i32.add (i32.const 320451591)) + (i32.add (i32.const -228803174)) + (i32.add (i32.const 522176251)) + (i32.add (i32.const -1919029857)) + (i32.add (i32.const -641394109)) + (i32.add (i32.const 1022910606)) + (i32.add (i32.const 1019384194)) + (i32.add (i32.const -233656271)) + (i32.add (i32.const -1762326212)) + (i32.add (i32.const 1436747877)) + (i32.add (i32.const 1929192212)) + (i32.add (i32.const 1525895490)) + (i32.add (i32.const -2059971874)) + (i32.add (i32.const -468166859)) + (i32.add (i32.const -1676075716)) + (i32.add (i32.const 430989110)) + (i32.add (i32.const -569248852)) + (i32.add (i32.const 279717613)) + (i32.add (i32.const -1523458167)) + (i32.add (i32.const -531913979)) + (i32.add (i32.const 1071513903)) + (i32.add (i32.const -1243006659)) + (i32.add (i32.const -1709118693)) + (i32.add (i32.const -1648781488)) + (i32.add (i32.const -1824199655)) + (i32.add (i32.const 1606102601)) + (i32.add (i32.const -529278499)) + (i32.add (i32.const -1384023064)) + (i32.add (i32.const 227746332)) + (i32.add (i32.const -1944085258)) + (i32.add (i32.const 1370974997)) + (i32.add (i32.const -65917812)) + (i32.add (i32.const 1663011496)) + (i32.add (i32.const 1325243765)) + (i32.add (i32.const -557170674)) + (i32.add (i32.const 2029318784)) + (i32.add (i32.const 1209504545)) + (i32.add (i32.const -694405924)) + (i32.add (i32.const -161712565)) + (i32.add (i32.const -1425448769)) + (i32.add (i32.const -1255423608)) + (i32.add (i32.const -251363856)) + (i32.add (i32.const 429479021)) + (i32.add (i32.const -1052772337)) + (i32.add (i32.const -856020131)) + (i32.add (i32.const -1372441059)) + (i32.add (i32.const 1105736623)) + (i32.add (i32.const -2100722458)) + (i32.add (i32.const -811492502)) + (i32.add (i32.const 925834263)) + (i32.add (i32.const -522675987)) + (i32.add (i32.const -877634061)) + (i32.add (i32.const -1252862775)) + (i32.add (i32.const 1421152906)) + (i32.add (i32.const -1062375704)) + (i32.add (i32.const -1123350575)) + (i32.add (i32.const -342039129)) + (i32.add (i32.const 1820171681)) + (i32.add (i32.const -1147776059)) + (i32.add (i32.const 514158178)) + (i32.add (i32.const 1825933439)) + (i32.add (i32.const 836281741)) + (i32.add (i32.const 571188976)) + (i32.add (i32.const 198839514)) + (i32.add (i32.const 357917464)) + (i32.add (i32.const -1347420563)) + (i32.add (i32.const 1782475648)) + (i32.add (i32.const -1052090404)) + (i32.add (i32.const 1853361325)) + (i32.add (i32.const 195516760)) + (i32.add (i32.const 306856181)) + (i32.add (i32.const -2024416088)) + (i32.add (i32.const 272724599)) + (i32.add (i32.const 851228317)) + (i32.add (i32.const -1745544015)) + (i32.add (i32.const 1949182178)) + (i32.add (i32.const 852582197)) + (i32.add (i32.const -1579359473)) + (i32.add (i32.const 2039233954)) + (i32.add (i32.const 614339878)) + (i32.add (i32.const -1694682159)) + (i32.add (i32.const -1760523447)) + (i32.add (i32.const -1491634844)) + (i32.add (i32.const 518278422)) + (i32.add (i32.const -59086177)) + (i32.add (i32.const 2065763592)) + (i32.add (i32.const -1200622785)) + (i32.add (i32.const -2014141973)) + (i32.add (i32.const -196525716)) + (i32.add (i32.const 2112566910)) + (i32.add (i32.const -100668529)) + (i32.add (i32.const 1024178185)) + (i32.add (i32.const 1939345321)) + (i32.add (i32.const -1082679141)) + (i32.add (i32.const 1896761915)) + (i32.add (i32.const 1515668532)) + (i32.add (i32.const 695942605)) + (i32.add (i32.const -614988762)) + (i32.add (i32.const -1788030683)) + (i32.add (i32.const 1271928563)) + (i32.add (i32.const 2092484413)) + (i32.add (i32.const 791584749)) + (i32.add (i32.const 1973022878)) + (i32.add (i32.const -2099342083)) + (i32.add (i32.const -475609618)) + (i32.add (i32.const -2026145742)) + (i32.add (i32.const -490387104)) + (i32.add (i32.const -552223761)) + (i32.add (i32.const -547924380)) + (i32.add (i32.const 1021516010)) + (i32.add (i32.const 1092989572)) + (i32.add (i32.const 979248329)) + (i32.add (i32.const 2135646954)) + (i32.add (i32.const 1204291597)) + (i32.add (i32.const -1955800047)) + (i32.add (i32.const 1974262582)) + (i32.add (i32.const -547667428)) + (i32.add (i32.const 1258196951)) + (i32.add (i32.const 1996010138)) + (i32.add (i32.const -1693247724)) + (i32.add (i32.const 1937860263)) + (i32.add (i32.const 1153251170)) + (i32.add (i32.const -130896918)) + (i32.add (i32.const -1983272252)) + (i32.add (i32.const -1691607013)) + (i32.add (i32.const -831304682)) + (i32.add (i32.const 1726695690)) + (i32.add (i32.const -1420969436)) + (i32.add (i32.const -801532172)) + (i32.add (i32.const 995839866)) + (i32.add (i32.const -1532092294)) + (i32.add (i32.const 1223744357)) + (i32.add (i32.const -1326160596)) + (i32.add (i32.const -358030783)) + (i32.add (i32.const 1124364080)) + (i32.add (i32.const -1615591925)) + (i32.add (i32.const 1169197842)) + (i32.add (i32.const -23153468)) + (i32.add (i32.const 1428297856)) + (i32.add (i32.const -1205547238)) + (i32.add (i32.const 1060402496)) + (i32.add (i32.const 898713704)) + (i32.add (i32.const 1814554588)) + (i32.add (i32.const -990266402)) + (i32.add (i32.const 530025060)) + (i32.add (i32.const -2066364905)) + (i32.add (i32.const -91303852)) + (i32.add (i32.const -1139377944)) + (i32.add (i32.const -760218910)) + (i32.add (i32.const -375142857)) + (i32.add (i32.const -1676019907)) + (i32.add (i32.const -39490506)) + (i32.add (i32.const 1059589540)) + (i32.add (i32.const -1489243212)) + (i32.add (i32.const -581518813)) + (i32.add (i32.const 619998213)) + (i32.add (i32.const -1446824227)) + (i32.add (i32.const -37936249)) + (i32.add (i32.const -1029851755)) + (i32.add (i32.const 3177911)) + (i32.add (i32.const 580965049)) + (i32.add (i32.const -892090420)) + (i32.add (i32.const -405723513)) + (i32.add (i32.const -804311411)) + (i32.add (i32.const -563874012)) + (i32.add (i32.const -1944289583)) + (i32.add (i32.const 351666316)) + (i32.add (i32.const -2079719684)) + (i32.add (i32.const -540592210)) + (i32.add (i32.const -2098422673)) + (i32.add (i32.const 1973184058)) + (i32.add (i32.const 789815324)) + (i32.add (i32.const -781372563)) + (i32.add (i32.const 423098097)) + (i32.add (i32.const -321937157)) + (i32.add (i32.const 926790769)) + (i32.add (i32.const 1681943079)) + (i32.add (i32.const -650134047)) + (i32.add (i32.const -2010845129)) + (i32.add (i32.const 1476124634)) + (i32.add (i32.const 1432593705)) + (i32.add (i32.const 989439795)) + (i32.add (i32.const -765751898)) + (i32.add (i32.const -629952497)) + (i32.add (i32.const -1140010922)) + (i32.add (i32.const 1379688134)) + (i32.add (i32.const -1124882443)) + (i32.add (i32.const 1671496569)) + (i32.add (i32.const -695681574)) + (i32.add (i32.const 1209473451)) + (i32.add (i32.const -1090147153)) + (i32.add (i32.const 714972686)) + (i32.add (i32.const 1716260212)) + (i32.add (i32.const 81271301)) + (i32.add (i32.const 1250756402)) + (i32.add (i32.const 1356970932)) + (i32.add (i32.const -1769752165)) + (i32.add (i32.const -2129329168)) + (i32.add (i32.const -397869368)) + (i32.add (i32.const 1974432115)) + (i32.add (i32.const 22954537)) + (i32.add (i32.const 1378512906)) + (i32.add (i32.const 1129710346)) + (i32.add (i32.const -969957049)) + (i32.add (i32.const -1026153607)) + (i32.add (i32.const -288851594)) + (i32.add (i32.const 345277431)) + (i32.add (i32.const -1937565112)) + (i32.add (i32.const 1903145005)) + (i32.add (i32.const 358509487)) + (i32.add (i32.const 1909548972)) + (i32.add (i32.const 1493183342)) + (i32.add (i32.const 1120089986)) + (i32.add (i32.const 1108831545)) + (i32.add (i32.const -1684219657)) + (i32.add (i32.const 1836134131)) + (i32.add (i32.const 2035948385)) + (i32.add (i32.const 678686180)) + (i32.add (i32.const 231601922)) + (i32.add (i32.const -792469047)) + (i32.add (i32.const -133701638)) + (i32.add (i32.const -1480300265)) + (i32.add (i32.const -586744110)) + (i32.add (i32.const -1714870717)) + (i32.add (i32.const -364038331)) + (i32.add (i32.const -58853330)) + (i32.add (i32.const -1564745947)) + (i32.add (i32.const -753892882)) + (i32.add (i32.const 1770720332)) + (i32.add (i32.const -1547872910)) + (i32.add (i32.const 976937871)) + (i32.add (i32.const 1966113257)) + (i32.add (i32.const -1738673445)) + (i32.add (i32.const -1839515296)) + (i32.add (i32.const -2039056631)) + (i32.add (i32.const -1120443465)) + (i32.add (i32.const -1155478365)) + (i32.add (i32.const -1989133780)) + (i32.add (i32.const -1097970556)) + (i32.add (i32.const -613744251)) + (i32.add (i32.const -1684790966)) + (i32.add (i32.const -387606976)) + (i32.add (i32.const 200379354)) + (i32.add (i32.const 228988623)) + (i32.add (i32.const 1890605545)) + (i32.add (i32.const -1138248232)) + (i32.add (i32.const 1339712945)) + (i32.add (i32.const 1800539662)) + (i32.add (i32.const -765355266)) + (i32.add (i32.const -1830995404)) + (i32.add (i32.const 2077668102)) + (i32.add (i32.const 1004562179)) + (i32.add (i32.const 1288959307)) + (i32.add (i32.const -1848974552)) + (i32.add (i32.const 1667682171)) + (i32.add (i32.const 978659243)) + (i32.add (i32.const 941753390)) + (i32.add (i32.const 562567284)) + (i32.add (i32.const -1305126659)) + (i32.add (i32.const -2097157604)) + (i32.add (i32.const 1032388149)) + (i32.add (i32.const 1622234709)) + (i32.add (i32.const 1740105601)) + (i32.add (i32.const -1470196275)) + (i32.add (i32.const -945535559)) + (i32.add (i32.const -534297226)) + (i32.add (i32.const -919533001)) + (i32.add (i32.const 349022159)) + (i32.add (i32.const 102475571)) + (i32.add (i32.const 1428004926)) + (i32.add (i32.const -835851047)) + (i32.add (i32.const -1230664017)) + (i32.add (i32.const 1268252177)) + (i32.add (i32.const 443474693)) + (i32.add (i32.const 1249889417)) + (i32.add (i32.const 1524421300)) + (i32.add (i32.const 1651796907)) + (i32.add (i32.const -490057113)) + (i32.add (i32.const 1174777099)) + (i32.add (i32.const 421996621)) + (i32.add (i32.const -1709262562)) + (i32.add (i32.const 1586056083)) + (i32.add (i32.const 98629394)) + (i32.add (i32.const 760226235)) + (i32.add (i32.const -718085525)) + (i32.add (i32.const 1156556952)) + (i32.add (i32.const 373387388)) + (i32.add (i32.const -807210541)) + (i32.add (i32.const 1100460175)) + (i32.add (i32.const -809668011)) + (i32.add (i32.const -2094339536)) + (i32.add (i32.const 112738943)) + (i32.add (i32.const 258761818)) + (i32.add (i32.const -354193775)) + (i32.add (i32.const -1856039785)) + (i32.add (i32.const 1029086410)) + (i32.add (i32.const 1681130416)) + (i32.add (i32.const 658575750)) + (i32.add (i32.const -1643252127)) + (i32.add (i32.const 1294644874)) + (i32.add (i32.const -1935730753)) + (i32.add (i32.const 1152857525)) + (i32.add (i32.const -269154341)) + (i32.add (i32.const 399418817)) + (i32.add (i32.const 2143444357)) + (i32.add (i32.const 1216760407)) + (i32.add (i32.const 529694969)) + (i32.add (i32.const 327051295)) + (i32.add (i32.const 1185230061)) + (i32.add (i32.const 903639765)) + (i32.add (i32.const -145983263)) + (i32.add (i32.const -1012846170)) + (i32.add (i32.const -888429669)) + (i32.add (i32.const 1729399118)) + (i32.add (i32.const -999562369)) + (i32.add (i32.const 1428408551)) + (i32.add (i32.const -1316112608)) + (i32.add (i32.const 1741960142)) + (i32.add (i32.const -547275811)) + (i32.add (i32.const -260110506)) + (i32.add (i32.const -744133923)) + (i32.add (i32.const -2059679358)) + (i32.add (i32.const -803712047)) + (i32.add (i32.const 1583364799)) + (i32.add (i32.const 618291996)) + (i32.add (i32.const -938379023)) + (i32.add (i32.const 893712010)) + (i32.add (i32.const -993654487)) + (i32.add (i32.const 302526802)) + (i32.add (i32.const 1376639937)) + (i32.add (i32.const 219147549)) + (i32.add (i32.const -674652387)) + (i32.add (i32.const 2128712585)) + (i32.add (i32.const -1177069609)) + (i32.add (i32.const -581896704)) + (i32.add (i32.const -1138227028)) + (i32.add (i32.const -196219719)) + (i32.add (i32.const -1246679698)) + (i32.add (i32.const -1141811802)) + (i32.add (i32.const -2080203001)) + (i32.add (i32.const -644219445)) + (i32.add (i32.const 1174060822)) + (i32.add (i32.const 366746079)) + (i32.add (i32.const 2143900174)) + (i32.add (i32.const -1167728892)) + (i32.add (i32.const -1551379590)) + (i32.add (i32.const -1731394355)) + (i32.add (i32.const 552840991)) + (i32.add (i32.const -2030085662)) + (i32.add (i32.const -1891977238)) + (i32.add (i32.const -102930841)) + (i32.add (i32.const 768726687)) + (i32.add (i32.const 1463779202)) + (i32.add (i32.const -169181894)) + (i32.add (i32.const -1047346805)) + (i32.add (i32.const -674113638)) + (i32.add (i32.const 828574193)) + (i32.add (i32.const -1624636412)) + (i32.add (i32.const -257266242)) + (i32.add (i32.const -1851097961)) + (i32.add (i32.const -236887620)) + (i32.add (i32.const -305492922)) + (i32.add (i32.const 1969757002)) + (i32.add (i32.const 626800436)) + (i32.add (i32.const 1992758872)) + (i32.add (i32.const 1810992874)) + (i32.add (i32.const -1615804588)) + (i32.add (i32.const 189402789)) + (i32.add (i32.const 649701137)) + (i32.add (i32.const -905579789)) + (i32.add (i32.const -2108387688)) + (i32.add (i32.const -251501906)) + (i32.add (i32.const -1236852421)) + (i32.add (i32.const 1895319411)) + (i32.add (i32.const 1566318220)) + (i32.add (i32.const -810982023)) + (i32.add (i32.const -1855254306)) + (i32.add (i32.const 735970802)) + (i32.add (i32.const -384399351)) + (i32.add (i32.const 618280453)) + (i32.add (i32.const 795192269)) + (i32.add (i32.const 251595579)) + (i32.add (i32.const -2120112525)) + (i32.add (i32.const 557347085)) + (i32.add (i32.const 1273086297)) + (i32.add (i32.const 1153626776)) + (i32.add (i32.const 201958486)) + (i32.add (i32.const -1007816076)) + (i32.add (i32.const -211575540)) + (i32.add (i32.const -1061530425)) + (i32.add (i32.const 1114912383)) + (i32.add (i32.const 1846992017)) + (i32.add (i32.const -1783337573)) + (i32.add (i32.const -1259067097)) + (i32.add (i32.const 667835742)) + (i32.add (i32.const 1532531102)) + (i32.add (i32.const -419543692)) + (i32.add (i32.const -1421199303)) + (i32.add (i32.const 1047446645)) + (i32.add (i32.const 2097818101)) + (i32.add (i32.const 1002982528)) + (i32.add (i32.const 578336137)) + (i32.add (i32.const -996644060)) + (i32.add (i32.const 33286186)) + (i32.add (i32.const 1423793810)) + (i32.add (i32.const -939789843)) + (i32.add (i32.const 1104889543)) + (i32.add (i32.const 1795612176)) + (i32.add (i32.const -439452142)) + (i32.add (i32.const 1233516888)) + (i32.add (i32.const -1483941958)) + (i32.add (i32.const 1441532450)) + (i32.add (i32.const -584083244)) + (i32.add (i32.const -1762153940)) + (i32.add (i32.const 1311598645)) + (i32.add (i32.const -1733700886)) + (i32.add (i32.const -1848471653)) + (i32.add (i32.const 1444510784)) + (i32.add (i32.const 2127018521)) + (i32.add (i32.const 789061364)) + (i32.add (i32.const 1613208404)) + (i32.add (i32.const 374144517)) + (i32.add (i32.const 1334411109)) + (i32.add (i32.const 1217215070)) + (i32.add (i32.const 1172775603)) + (i32.add (i32.const -1083968062)) + (i32.add (i32.const 1677046152)) + (i32.add (i32.const -1384432107)) + (i32.add (i32.const 1319131506)) + (i32.add (i32.const -354745002)) + (i32.add (i32.const -470259433)) + (i32.add (i32.const 1461811891)) + (i32.add (i32.const -1734576281)) + (i32.add (i32.const -679166215)) + (i32.add (i32.const -1653175373)) + (i32.add (i32.const 1760711260)) + (i32.add (i32.const 2124807893)) + (i32.add (i32.const 2069799827)) + (i32.add (i32.const 1639384183)) + (i32.add (i32.const -1137056403)) + (i32.add (i32.const 1023684282)) + (i32.add (i32.const -607574645)) + (i32.add (i32.const -469159464)) + (i32.add (i32.const -1698958402)) + (i32.add (i32.const -1344326238)) + (i32.add (i32.const -2116641460)) + (i32.add (i32.const 1683225715)) + (i32.add (i32.const 39926412)) + (i32.add (i32.const 2014019306)) + (i32.add (i32.const -1113672793)) + (i32.add (i32.const -941096054)) + (i32.add (i32.const 1099447542)) + (i32.add (i32.const -561254073)) + (i32.add (i32.const 857499505)) + (i32.add (i32.const -1648554847)) + (i32.add (i32.const 566389160)) + (i32.add (i32.const 782313281)) + (i32.add (i32.const 2016396876)) + (i32.add (i32.const 902195855)) + (i32.add (i32.const 1101114674)) + (i32.add (i32.const -1326181541)) + (i32.add (i32.const 823237159)) + (i32.add (i32.const -128305906)) + (i32.add (i32.const 313469179)) + (i32.add (i32.const -795844474)) + (i32.add (i32.const -240873920)) + (i32.add (i32.const 1345406227)) + (i32.add (i32.const -1497447272)) + (i32.add (i32.const 1654231493)) + (i32.add (i32.const -1958369947)) + (i32.add (i32.const -2088996644)) + (i32.add (i32.const 1083241541)) + (i32.add (i32.const -1602450010)) + (i32.add (i32.const 50451847)) + (i32.add (i32.const -915258762)) + (i32.add (i32.const 797261301)) + (i32.add (i32.const -1396178514)) + (i32.add (i32.const 287870933)) + (i32.add (i32.const -1070444939)) + (i32.add (i32.const 1645879743)) + (i32.add (i32.const 944198954)) + (i32.add (i32.const -667311120)) + (i32.add (i32.const 72698624)) + (i32.add (i32.const 253650124)) + (i32.add (i32.const 1471037516)) + (i32.add (i32.const 53322648)) + (i32.add (i32.const -1217571888)) + (i32.add (i32.const -1837742283)) + (i32.add (i32.const -1959745910)) + (i32.add (i32.const -509768652)) + (i32.add (i32.const -1363791088)) + (i32.add (i32.const -64605812)) + (i32.add (i32.const -241384670)) + (i32.add (i32.const -1723046719)) + (i32.add (i32.const 1016088652)) + (i32.add (i32.const 2142915523)) + (i32.add (i32.const -447925718)) + (i32.add (i32.const -1234153488)) + (i32.add (i32.const 2015441616)) + (i32.add (i32.const 1369250583)) + (i32.add (i32.const -779476079)) + (i32.add (i32.const -1714144865)) + (i32.add (i32.const 1105014603)) + (i32.add (i32.const 1105493471)) + (i32.add (i32.const -398275867)) + (i32.add (i32.const 1000955666)) + (i32.add (i32.const 1390209645)) + (i32.add (i32.const -1729771661)) + (i32.add (i32.const 981200189)) + (i32.add (i32.const -1477327904)) + (i32.add (i32.const -2118989685)) + (i32.add (i32.const 1417359667)) + (i32.add (i32.const -1791824430)) + (i32.add (i32.const 2145749273)) + (i32.add (i32.const -172330119)) + (i32.add (i32.const 374179334)) + (i32.add (i32.const -1043906504)) + (i32.add (i32.const 681018056)) + (i32.add (i32.const 1930308618)) + (i32.add (i32.const 114715293)) + (i32.add (i32.const -513301138)) + (i32.add (i32.const 2135202801)) + (i32.add (i32.const 981091538)) + (i32.add (i32.const 1627875180)) + (i32.add (i32.const -871717375)) + (i32.add (i32.const -531554011)) + (i32.add (i32.const 782330057)) + (i32.add (i32.const 424662815)) + (i32.add (i32.const -1428468037)) + (i32.add (i32.const 1558415495)) + (i32.add (i32.const -924422339)) + (i32.add (i32.const -1934298500)) + (i32.add (i32.const -1547251480)) + (i32.add (i32.const 1526554842)) + (i32.add (i32.const 704652735)) + (i32.add (i32.const -2136933220)) + (i32.add (i32.const 1998910825)) + (i32.add (i32.const -1649389377)) + (i32.add (i32.const 2024869840)) + (i32.add (i32.const -157696021)) + (i32.add (i32.const 1168462490)) + (i32.add (i32.const -1517684050)) + (i32.add (i32.const 1848099754)) + (i32.add (i32.const 497019728)) + (i32.add (i32.const 581880410)) + (i32.add (i32.const 1163980554)) + (i32.add (i32.const -1099208016)) + (i32.add (i32.const -796428983)) + (i32.add (i32.const 682296021)) + (i32.add (i32.const 466247449)) + (i32.add (i32.const 336742816)) + (i32.add (i32.const -929393871)) + (i32.add (i32.const 2094945902)) + (i32.add (i32.const -680209019)) + (i32.add (i32.const -1550697316)) + (i32.add (i32.const 853404800)) + (i32.add (i32.const -939911597)) + (i32.add (i32.const 561039571)) + (i32.add (i32.const -103913314)) + (i32.add (i32.const 1309081961)) + (i32.add (i32.const -289963553)) + (i32.add (i32.const 718035299)) + (i32.add (i32.const -1606184627)) + (i32.add (i32.const 298640400)) + (i32.add (i32.const -2119002013)) + (i32.add (i32.const 426939363)) + (i32.add (i32.const 573335452)) + (i32.add (i32.const -611534046)) + (i32.add (i32.const 1010963538)) + (i32.add (i32.const -1241036634)) + (i32.add (i32.const 2003518128)) + (i32.add (i32.const 122584944)) + (i32.add (i32.const 136099010)) + (i32.add (i32.const 562276717)) + (i32.add (i32.const -644229658)) + (i32.add (i32.const -1813748842)) + (i32.add (i32.const -629233683)) + (i32.add (i32.const -1725525052)) + (i32.add (i32.const 1170586084)) + (i32.add (i32.const 204916343)) + (i32.add (i32.const 748253991)) + (i32.add (i32.const -391000946)) + (i32.add (i32.const 1869803261)) + (i32.add (i32.const -83645031)) + (i32.add (i32.const 419565795)) + (i32.add (i32.const -448820110)) + (i32.add (i32.const 945523662)) + (i32.add (i32.const -1956027845)) + (i32.add (i32.const 70131643)) + (i32.add (i32.const -9838772)) + (i32.add (i32.const -184290909)) + (i32.add (i32.const -526572953)) + (i32.add (i32.const 343396401)) + (i32.add (i32.const 234245736)) + (i32.add (i32.const 1564297832)) + (i32.add (i32.const -646964406)) + (i32.add (i32.const -1295330903)) + (i32.add (i32.const -594787303)) + (i32.add (i32.const 46603935)) + (i32.add (i32.const -868949742)) + (i32.add (i32.const -837703882)) + (i32.add (i32.const -1940996788)) + (i32.add (i32.const -551883437)) + (i32.add (i32.const 1164107774)) + (i32.add (i32.const -1059664365)) + (i32.add (i32.const -42614673)) + (i32.add (i32.const -2131316529)) + (i32.add (i32.const 575453376)) + (i32.add (i32.const -884975871)) + (i32.add (i32.const -530043773)) + (i32.add (i32.const 421133353)) + (i32.add (i32.const -1565447367)) + (i32.add (i32.const -1166109106)) + (i32.add (i32.const -1700942058)) + (i32.add (i32.const 304398817)) + (i32.add (i32.const 2131802444)) + (i32.add (i32.const -1771840283)) + (i32.add (i32.const -887572140)) + (i32.add (i32.const 361015715)) + (i32.add (i32.const 1517947164)) + (i32.add (i32.const -1846813858)) + (i32.add (i32.const -1802524860)) + (i32.add (i32.const -979421836)) + (i32.add (i32.const 1224152256)) + (i32.add (i32.const 397737673)) + (i32.add (i32.const 1435200470)) + (i32.add (i32.const -1692313915)) + (i32.add (i32.const 614976323)) + (i32.add (i32.const -2016012529)) + (i32.add (i32.const 1731721421)) + (i32.add (i32.const -1788522205)) + (i32.add (i32.const -1090475742)) + (i32.add (i32.const 1426784728)) + (i32.add (i32.const -967769524)) + (i32.add (i32.const 210455165)) + (i32.add (i32.const -591524969)) + (i32.add (i32.const 607615690)) + (i32.add (i32.const -2037954552)) + (i32.add (i32.const 1179964211)) + (i32.add (i32.const 516745466)) + (i32.add (i32.const 735677468)) + (i32.add (i32.const -1630636816)) + (i32.add (i32.const -727358913)) + (i32.add (i32.const 1386674598)) + (i32.add (i32.const -228587542)) + (i32.add (i32.const -1147989447)) + (i32.add (i32.const 42264831)) + (i32.add (i32.const -1393866635)) + (i32.add (i32.const -1406208039)) + (i32.add (i32.const -684812955)) + (i32.add (i32.const -1816503711)) + call $timer + local.set $check + (block + local.get $check + i32.const -1063366326 + i32.eq + br_if 0 + unreachable + ) +) diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/user.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/user.wat new file mode 100644 index 0000000000..9ecb4dcc45 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/user.wat @@ -0,0 +1,53 @@ +;; Copyright 2023, Offchain Labs, Inc. +;; For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +(module + (import "vm_hooks" "storage_load_bytes32" (func $storage_load_bytes32 (param i32 i32))) + + (func $storage_load (result i32) + i32.const 0 + i32.const 32 + call $storage_load_bytes32 + i32.const 0 + ) + (func $safe (result i32) + i32.const 5 + ) + (func $unreachable (result i32) + i32.const 0 + i64.const 4 + unreachable + ) + (func $out_of_bounds (result i32) + i32.const 0xFFFFFF + i32.load + ) + (func (export "user_entrypoint") (param $args_len i32) (result i32) + ;; this func uses $args_len to select which func to call + + ;; only call that succeeds + (i32.eq (local.get $args_len) (i32.const 1)) + (if + (then (call $safe) (return)) + ) + + ;; reverts due to an unreachable + (i32.eq (local.get $args_len) (i32.const 2)) + (if + (then (call $unreachable) (return)) + ) + + ;; reverts due to an out of bounds memory access + (i32.eq (local.get $args_len) (i32.const 3)) + (if + (then (call $out_of_bounds) (return)) + ) + + (i32.eq (local.get $args_len) (i32.const 32)) + (if + (then (call $storage_load) (return)) + ) + + unreachable + ) + (memory (export "memory") 1 1)) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs new file mode 100644 index 0000000000..f9862c42a5 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -0,0 +1,139 @@ +use std::fs; +// use wabt::wat2wasm; +use wasmer::wasmparser::{Validator, WasmFeatures}; +// use wasmer::{imports, Imports, Function, Instance, Module, Store}; +use wasmer::{imports, Instance, Module, Store}; + +fn main() -> eyre::Result<()> { + // let wasm = fs::read(format!("../../../target/machines/latest/user_host.wasm"))?; + let wasm = fs::read(format!("../../../target/machines/latest/host_io.wasm"))?; + + let features = WasmFeatures { + mutable_global: true, + saturating_float_to_int: true, + sign_extension: true, + reference_types: false, + multi_value: false, + bulk_memory: true, // not all ops supported yet + simd: false, + relaxed_simd: false, + threads: false, + tail_call: false, + multi_memory: false, + exceptions: false, + memory64: false, + extended_const: false, + component_model: false, + component_model_nested_names: false, + component_model_values: false, + floats: true, + function_references: false, + gc: false, + memory_control: false, + }; + Validator::new_with_features(features).validate_all(&wasm)?; + + let mut store = Store::default(); + let module = Module::new(&store, wasm)?; + + // WHICH IMPORTS TO USE? + let import_object = imports! {}; + let _instance = Instance::new(&mut store, &module, &import_object)?; + + println!("Hello, world!"); + Ok(()) +} + +// fn foo(n: i32) -> i32 { +// n +// } +// fn main() -> eyre::Result<()> { +// let wasm = fs::read(format!("./target/wasm32-wasi/debug/stylus_caller.wasm"))?; +// +// let features = WasmFeatures { +// mutable_global: true, +// saturating_float_to_int: true, +// sign_extension: true, +// reference_types: false, +// multi_value: false, +// bulk_memory: true, // not all ops supported yet +// simd: false, +// relaxed_simd: false, +// threads: false, +// tail_call: false, +// multi_memory: false, +// exceptions: false, +// memory64: false, +// extended_const: false, +// component_model: false, +// component_model_nested_names: false, +// component_model_values: false, +// floats: true, +// function_references: false, +// gc: false, +// memory_control: false, +// }; +// Validator::new_with_features(features).validate_all(&wasm)?; +// +// let mut store = Store::default(); +// let module = Module::new(&store, wasm)?; +// +// let host_fn = Function::new_typed(&mut store, foo); +// let import_object: Imports = imports! { +// "hostio" => { +// "wavm_link_module" => host_fn, +// }, +// }; +// +// let instance = Instance::new(&mut store, &module, &import_object)?; +// +// let main = instance.exports.get_function("main")?; +// let result = main.call(&mut store, &[])?; +// +// println!("Hello, world!, wasm: {:?}", result); +// Ok(()) +// } + +// fn main() -> eyre::Result<()> { +// let wat = fs::read(format!("./programs_to_benchmark/add_one.wat"))?; +// let wasm = wat2wasm(&wat)?; +// +// let features = WasmFeatures { +// mutable_global: true, +// saturating_float_to_int: true, +// sign_extension: true, +// reference_types: false, +// multi_value: false, +// bulk_memory: true, // not all ops supported yet +// simd: false, +// relaxed_simd: false, +// threads: false, +// tail_call: false, +// multi_memory: false, +// exceptions: false, +// memory64: false, +// extended_const: false, +// component_model: false, +// component_model_nested_names: false, +// component_model_values: false, +// floats: false, +// function_references: false, +// gc: false, +// memory_control: false, +// }; +// Validator::new_with_features(features).validate_all(&wasm)?; +// +// let mut store = Store::default(); +// let module = Module::new(&store, &wat)?; +// // The module doesn't import anything, so we create an empty import object. +// let import_object = imports! {}; +// let instance = Instance::new(&mut store, &module, &import_object)?; +// +// let add_one = instance.exports.get_function("add_one")?; +// let result = add_one.call(&mut store, &[Value::I32(42)])?; +// assert_eq!(result[0], Value::I32(43)); +// +// println!("Hello, world!, result: {:?}", result); +// println!("{:?}", wasm); +// Ok(()) +// } diff --git a/arbitrator/tools/stylus_benchmark/stylus_caller/Cargo.toml b/arbitrator/tools/stylus_benchmark/stylus_caller/Cargo.toml new file mode 100644 index 0000000000..5e8aa4fd42 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/stylus_caller/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "stylus_caller" +version = "0.1.0" +edition = "2021" + +[dependencies] +user-host = { path = "../../../wasm-libraries/user-host/" } diff --git a/arbitrator/tools/stylus_benchmark/stylus_caller/src/main.rs b/arbitrator/tools/stylus_benchmark/stylus_caller/src/main.rs new file mode 100644 index 0000000000..7de17d77cc --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/stylus_caller/src/main.rs @@ -0,0 +1,10 @@ +use user_host::link::programs__create_stylus_config; + +fn main() { + println!("Hello, world!"); + + unsafe { + let ret = programs__create_stylus_config(0, 10000, 1, 1); + println!("ret= {}", ret); + } +} diff --git a/arbitrator/wasm-libraries/user-host/Cargo.toml b/arbitrator/wasm-libraries/user-host/Cargo.toml index 15174397eb..be8aa5047b 100644 --- a/arbitrator/wasm-libraries/user-host/Cargo.toml +++ b/arbitrator/wasm-libraries/user-host/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [lib] -crate-type = ["cdylib"] +crate-type = ["cdylib", "lib"] [dependencies] arbutil = { path = "../../arbutil/" } diff --git a/arbitrator/wasm-libraries/user-host/src/lib.rs b/arbitrator/wasm-libraries/user-host/src/lib.rs index cd2d142850..5843812fc8 100644 --- a/arbitrator/wasm-libraries/user-host/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host/src/lib.rs @@ -3,5 +3,5 @@ mod host; mod ink; -mod link; +pub mod link; mod program; From 67059320b9dae16a9bd88d92cd4483fa61c049a6 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 19 Nov 2024 09:33:22 -0300 Subject: [PATCH 047/187] Revert "wip" This reverts commit 4fd9d1083650cd0bde761e165ac234d681e2298f. --- .dockerignore | 1 - arbitrator/Cargo.toml | 1 - arbitrator/tools/stylus_benchmark/Cargo.lock | 2350 -- arbitrator/tools/stylus_benchmark/Cargo.toml | 12 - .../programs_to_benchmark/add_one.wat | 6 - .../programs_to_benchmark/bin-op.wat | 22 - .../programs_to_benchmark/i32-add.wat | 30017 ---------------- .../programs_to_benchmark/user.wat | 53 - arbitrator/tools/stylus_benchmark/src/main.rs | 139 - .../stylus_benchmark/stylus_caller/Cargo.toml | 7 - .../stylus_caller/src/main.rs | 10 - .../wasm-libraries/user-host/Cargo.toml | 2 +- .../wasm-libraries/user-host/src/lib.rs | 2 +- 13 files changed, 2 insertions(+), 32620 deletions(-) delete mode 100644 arbitrator/tools/stylus_benchmark/Cargo.lock delete mode 100644 arbitrator/tools/stylus_benchmark/Cargo.toml delete mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat delete mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/bin-op.wat delete mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/i32-add.wat delete mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/user.wat delete mode 100644 arbitrator/tools/stylus_benchmark/src/main.rs delete mode 100644 arbitrator/tools/stylus_benchmark/stylus_caller/Cargo.toml delete mode 100644 arbitrator/tools/stylus_benchmark/stylus_caller/src/main.rs diff --git a/.dockerignore b/.dockerignore index 3ed2b64574..51424900e8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -25,7 +25,6 @@ nitro-testnode/**/* # Arbitrator ignores arbitrator/tools/module_roots arbitrator/tools/pricer -arbitrator/tools/stylus_benchmark # Rust outputs arbitrator/target/**/* diff --git a/arbitrator/Cargo.toml b/arbitrator/Cargo.toml index 3c5228daf2..eaafb6e439 100644 --- a/arbitrator/Cargo.toml +++ b/arbitrator/Cargo.toml @@ -12,7 +12,6 @@ members = [ exclude = [ "stylus/tests/", "tools/wasmer/", - "tools/stylus_benchmark", ] resolver = "2" diff --git a/arbitrator/tools/stylus_benchmark/Cargo.lock b/arbitrator/tools/stylus_benchmark/Cargo.lock deleted file mode 100644 index 85d0add69d..0000000000 --- a/arbitrator/tools/stylus_benchmark/Cargo.lock +++ /dev/null @@ -1,2350 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli 0.31.1", -] - -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "allocator-api2" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "arbutil" -version = "0.1.0" -dependencies = [ - "digest 0.10.7", - "eyre", - "fnv", - "hex", - "num-traits", - "num_enum", - "ruint2", - "serde", - "sha2 0.10.8", - "sha3 0.10.8", - "siphasher", - "tiny-keccak", - "wasmparser", -] - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" - -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if 1.0.0", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets", -] - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "serde", - "tap", - "wyz", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "block-padding", - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - -[[package]] -name = "brotli" -version = "0.1.0" -dependencies = [ - "lazy_static", - "num_enum", - "wee_alloc", -] - -[[package]] -name = "bumpalo" -version = "3.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - -[[package]] -name = "bytecheck" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" -dependencies = [ - "bytecheck_derive", - "ptr_meta", - "simdutf8", -] - -[[package]] -name = "bytecheck_derive" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" - -[[package]] -name = "caller-env" -version = "0.1.0" -dependencies = [ - "brotli", - "num_enum", - "rand", - "rand_pcg", -] - -[[package]] -name = "cc" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" -dependencies = [ - "shlex", -] - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "serde", - "windows-targets", -] - -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "ansi_term", - "atty", - "bitflags 1.3.2", - "strsim 0.8.0", - "textwrap", - "unicode-width", - "vec_map", -] - -[[package]] -name = "cmake" -version = "0.1.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" -dependencies = [ - "cc", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "corosensei" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80128832c58ea9cbd041d2a759ec449224487b2c1e400453d99d244eead87a8e" -dependencies = [ - "autocfg", - "cfg-if 1.0.0", - "libc", - "scopeguard", - "windows-sys 0.33.0", -] - -[[package]] -name = "cpufeatures" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" -dependencies = [ - "libc", -] - -[[package]] -name = "cranelift-bforest" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2ab4512dfd3a6f4be184403a195f76e81a8a9f9e6c898e19d2dc3ce20e0115" -dependencies = [ - "cranelift-entity", -] - -[[package]] -name = "cranelift-codegen" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98b022ed2a5913a38839dfbafe6cf135342661293b08049843362df4301261dc" -dependencies = [ - "arrayvec", - "bumpalo", - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-egraph", - "cranelift-entity", - "cranelift-isle", - "gimli 0.26.2", - "log", - "regalloc2", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-codegen-meta" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "639307b45434ad112a98f8300c0f0ab085cbefcd767efcdef9ef19d4c0756e74" -dependencies = [ - "cranelift-codegen-shared", -] - -[[package]] -name = "cranelift-codegen-shared" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278e52e29c53fcf32431ef08406c295699a70306d05a0715c5b1bf50e33a9ab7" - -[[package]] -name = "cranelift-egraph" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624b54323b06e675293939311943ba82d323bb340468ce1889be5da7932c8d73" -dependencies = [ - "cranelift-entity", - "fxhash", - "hashbrown 0.12.3", - "indexmap 1.9.3", - "log", - "smallvec", -] - -[[package]] -name = "cranelift-entity" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a59bcbca89c3f1b70b93ab3cbba5e5e0cbf3e63dadb23c7525cb142e21a9d4c" - -[[package]] -name = "cranelift-frontend" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d70abacb8cfef3dc8ff7e8836e9c1d70f7967dfdac824a4cd5e30223415aca6" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-isle" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "393bc73c451830ff8dbb3a07f61843d6cb41a084f9996319917c0b291ed785bb" - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "darling" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.11.1", - "syn 2.0.87", -] - -[[package]] -name = "darling_macro" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if 1.0.0", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", - "serde", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_more" -version = "0.99.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.87", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "crypto-common", -] - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - -[[package]] -name = "enum-iterator" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" -dependencies = [ - "enum-iterator-derive 0.7.0", -] - -[[package]] -name = "enum-iterator" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c280b9e6b3ae19e152d8e31cf47f18389781e119d4013a2a2bb0180e5facc635" -dependencies = [ - "enum-iterator-derive 1.4.0", -] - -[[package]] -name = "enum-iterator-derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "enum-iterator-derive" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "enumset" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" -dependencies = [ - "enumset_derive", -] - -[[package]] -name = "enumset_derive" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" -dependencies = [ - "fallible-iterator", - "indexmap 1.9.3", - "stable_deref_trait", -] - -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "glob" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hashbrown" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "iana-time-zone" -version = "0.1.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" -dependencies = [ - "equivalent", - "hashbrown 0.15.1", - "serde", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "js-sys" -version = "0.3.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "keccak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "leb128" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" - -[[package]] -name = "libc" -version = "0.2.162" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" - -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.1", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "mach2" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" -dependencies = [ - "libc", -] - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - -[[package]] -name = "memmap2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" -dependencies = [ - "adler2", -] - -[[package]] -name = "more-asserts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nom-leb128" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a73b6c3a9ecfff12ad50dedba051ef838d2f478d938bb3e6b3842431028e62" -dependencies = [ - "arrayvec", - "nom", - "num-traits", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_enum" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "object" -version = "0.36.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" - -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "redox_syscall", - "smallvec", - "windows-targets", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "proc-macro-crate" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prover" -version = "0.1.0" -dependencies = [ - "arbutil", - "bincode", - "bitvec", - "brotli", - "derivative", - "digest 0.9.0", - "enum-iterator 2.1.0", - "eyre", - "fnv", - "hex", - "itertools", - "lazy_static", - "libc", - "lru", - "nom", - "nom-leb128", - "num", - "num-derive", - "num-traits", - "once_cell", - "parking_lot", - "rustc-demangle", - "serde", - "serde_json", - "serde_with", - "sha2 0.9.9", - "sha3 0.9.1", - "smallvec", - "static_assertions", - "structopt", - "wasmer-types", - "wasmparser", - "wat", -] - -[[package]] -name = "ptr_meta" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "quote" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - -[[package]] -name = "rand_pcg" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" -dependencies = [ - "rand_core", -] - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "regalloc2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" -dependencies = [ - "fxhash", - "log", - "slice-group-by", - "smallvec", -] - -[[package]] -name = "region" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b6ebd13bc009aef9cd476c1310d49ac354d36e240cf1bd753290f3dc7199a7" -dependencies = [ - "bitflags 1.3.2", - "libc", - "mach2", - "windows-sys 0.52.0", -] - -[[package]] -name = "rend" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" -dependencies = [ - "bytecheck", -] - -[[package]] -name = "rkyv" -version = "0.7.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" -dependencies = [ - "bitvec", - "bytecheck", - "bytes", - "hashbrown 0.12.3", - "indexmap 1.9.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.7.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ruint2" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b066b8e4fcea7fae86b6932d2449670b6b5545b7e8407841b2d3a916ff2a9f86" -dependencies = [ - "derive_more", - "ruint2-macro", - "rustc_version", - "thiserror", -] - -[[package]] -name = "ruint2-macro" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89dc553bc0cf4512a8b96caa2e21ed5f6e4b66bf28a1bd08fd9eb07c0b39b28c" - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - -[[package]] -name = "self_cell" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" - -[[package]] -name = "semver" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" - -[[package]] -name = "serde" -version = "1.0.215" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde_derive" -version = "1.0.215" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "serde_json" -version = "1.0.132" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" -dependencies = [ - "base64", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.6.0", - "serde", - "serde_derive", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "keccak", - "opaque-debug", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest 0.10.7", - "keccak", -] - -[[package]] -name = "shared-buffer" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6c99835bad52957e7aa241d3975ed17c1e5f8c92026377d117a606f36b84b16" -dependencies = [ - "bytes", - "memmap2 0.6.2", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "slice-group-by" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -dependencies = [ - "serde", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "structopt" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" -dependencies = [ - "clap", - "lazy_static", - "structopt-derive", -] - -[[package]] -name = "structopt-derive" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "stylus_benchmark" -version = "0.1.0" -dependencies = [ - "eyre", - "wabt", - "wasmer", -] - -[[package]] -name = "stylus_caller" -version = "0.1.0" -dependencies = [ - "user-host", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "target-lexicon" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" - -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tinyvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "toml_datetime" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" - -[[package]] -name = "toml_edit" -version = "0.22.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" -dependencies = [ - "indexmap 2.6.0", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-ident" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "user-host" -version = "0.1.0" -dependencies = [ - "arbutil", - "caller-env", - "eyre", - "fnv", - "hex", - "prover", - "user-host-trait", - "wasmer-types", -] - -[[package]] -name = "user-host-trait" -version = "0.1.0" -dependencies = [ - "arbutil", - "caller-env", - "eyre", - "prover", - "ruint2", -] - -[[package]] -name = "uuid" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "wabt" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00bef93d5e6c81a293bccf107cf43aa47239382f455ba14869d36695d8963b9c" -dependencies = [ - "serde", - "serde_derive", - "serde_json", - "wabt-sys", -] - -[[package]] -name = "wabt-sys" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a4e043159f63e16986e713e9b5e1c06043df4848565bf672e27c523864c7791" -dependencies = [ - "cc", - "cmake", - "glob", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" -dependencies = [ - "cfg-if 1.0.0", - "once_cell", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.87", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" - -[[package]] -name = "wasm-encoder" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7" -dependencies = [ - "leb128", -] - -[[package]] -name = "wasmer" -version = "4.2.8" -dependencies = [ - "bytes", - "cfg-if 1.0.0", - "derivative", - "indexmap 1.9.3", - "js-sys", - "more-asserts", - "rustc-demangle", - "serde", - "serde-wasm-bindgen", - "shared-buffer", - "target-lexicon", - "thiserror", - "tracing", - "wasm-bindgen", - "wasmer-compiler", - "wasmer-compiler-cranelift", - "wasmer-derive", - "wasmer-types", - "wasmer-vm", - "wat", - "winapi", -] - -[[package]] -name = "wasmer-compiler" -version = "4.2.8" -dependencies = [ - "backtrace", - "bytes", - "cfg-if 1.0.0", - "enum-iterator 0.7.0", - "enumset", - "lazy_static", - "leb128", - "memmap2 0.5.10", - "more-asserts", - "region", - "rkyv", - "self_cell", - "shared-buffer", - "smallvec", - "thiserror", - "wasmer-types", - "wasmer-vm", - "wasmparser", - "winapi", -] - -[[package]] -name = "wasmer-compiler-cranelift" -version = "4.2.8" -dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "gimli 0.26.2", - "more-asserts", - "rayon", - "smallvec", - "target-lexicon", - "tracing", - "wasmer-compiler", - "wasmer-types", -] - -[[package]] -name = "wasmer-derive" -version = "4.2.8" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "wasmer-types" -version = "4.2.8" -dependencies = [ - "bytecheck", - "enum-iterator 0.7.0", - "enumset", - "indexmap 1.9.3", - "more-asserts", - "rkyv", - "target-lexicon", - "thiserror", -] - -[[package]] -name = "wasmer-vm" -version = "4.2.8" -dependencies = [ - "backtrace", - "cc", - "cfg-if 1.0.0", - "corosensei", - "crossbeam-queue", - "dashmap", - "derivative", - "enum-iterator 0.7.0", - "fnv", - "indexmap 1.9.3", - "lazy_static", - "libc", - "mach", - "memoffset", - "more-asserts", - "region", - "scopeguard", - "thiserror", - "wasmer-types", - "winapi", -] - -[[package]] -name = "wasmparser" -version = "0.121.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" -dependencies = [ - "bitflags 2.6.0", - "indexmap 2.6.0", - "semver", -] - -[[package]] -name = "wast" -version = "64.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a259b226fd6910225aa7baeba82f9d9933b6d00f2ce1b49b80fa4214328237cc" -dependencies = [ - "leb128", - "memchr", - "unicode-width", - "wasm-encoder", -] - -[[package]] -name = "wat" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53253d920ab413fca1c7dc2161d601c79b4fdf631d0ba51dd4343bf9b556c3f6" -dependencies = [ - "wast", -] - -[[package]] -name = "wee_alloc" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "memory_units", - "winapi", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-sys" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43dbb096663629518eb1dfa72d80243ca5a6aca764cae62a2df70af760a9be75" -dependencies = [ - "windows_aarch64_msvc 0.33.0", - "windows_i686_gnu 0.33.0", - "windows_i686_msvc 0.33.0", - "windows_x86_64_gnu 0.33.0", - "windows_x86_64_msvc 0.33.0", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "winnow" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" -dependencies = [ - "memchr", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] diff --git a/arbitrator/tools/stylus_benchmark/Cargo.toml b/arbitrator/tools/stylus_benchmark/Cargo.toml deleted file mode 100644 index f12f8bed34..0000000000 --- a/arbitrator/tools/stylus_benchmark/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "stylus_benchmark" -version = "0.1.0" -edition = "2021" - -[dependencies] -eyre = "0.6.12" -wabt = "0.10.0" -wasmer = { path = "../wasmer/lib/api" } - -[workspace] -members = ["stylus_caller"] diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat deleted file mode 100644 index 4882837894..0000000000 --- a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat +++ /dev/null @@ -1,6 +0,0 @@ -(module - (type $t0 (func (param i32) (result i32))) - (func $add_one (export "add_one") (type $t0) (param $p0 i32) (result i32) - local.get $p0 - i32.const 1 - i32.add)) diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/bin-op.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/bin-op.wat deleted file mode 100644 index a9f3530b8a..0000000000 --- a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/bin-op.wat +++ /dev/null @@ -1,22 +0,0 @@ -(module - (memory (export "memory") 128 128) - (func $start - (local $counter i32) - (local $scratch i32) - - (loop $loop - local.get $scratch - local.get $scratch - i32.add - drop - - local.get $counter - i32.const 1 - i32.sub - local.tee - i32.const 0 - i32.ne - br_if $loop) - ) - (start $start) -) diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/i32-add.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/i32-add.wat deleted file mode 100644 index c53556ed07..0000000000 --- a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/i32-add.wat +++ /dev/null @@ -1,30017 +0,0 @@ -(import "pricer" "toggle_timer" (func $timer)) -(start $test) -(memory (export "memory") 0 0) -(func (export "user_entrypoint") (param i32) (result i32) unreachable) -(func $test (local $check i32) - call $timer - i32.const -1483064468 - (i32.add (i32.const -1249511577)) - (i32.add (i32.const -1160200137)) - (i32.add (i32.const 2001118559)) - (i32.add (i32.const -2115852570)) - (i32.add (i32.const -1292169934)) - (i32.add (i32.const -1885632388)) - (i32.add (i32.const 258433188)) - (i32.add (i32.const 839009913)) - (i32.add (i32.const -519215513)) - (i32.add (i32.const -1803636547)) - (i32.add (i32.const -1934748469)) - (i32.add (i32.const 1781436988)) - (i32.add (i32.const -734506083)) - (i32.add (i32.const -757897030)) - (i32.add (i32.const -277341059)) - (i32.add (i32.const 2122901088)) - (i32.add (i32.const -842751430)) - (i32.add (i32.const -424468984)) - (i32.add (i32.const 662675976)) - (i32.add (i32.const 2132528196)) - (i32.add (i32.const -512339037)) - (i32.add (i32.const -350343319)) - (i32.add (i32.const -985464078)) - (i32.add (i32.const 2102083747)) - (i32.add (i32.const -2044168158)) - (i32.add (i32.const -1685149472)) - (i32.add (i32.const 1506613898)) - (i32.add (i32.const 219602722)) - (i32.add (i32.const -1011279442)) - (i32.add (i32.const -1813066681)) - (i32.add (i32.const -1534802746)) - (i32.add (i32.const 215995376)) - (i32.add (i32.const 814464292)) - (i32.add (i32.const -42270370)) - (i32.add (i32.const 1850360001)) - (i32.add (i32.const -1480688974)) - (i32.add (i32.const -1708200521)) - (i32.add (i32.const -1851181543)) - (i32.add (i32.const -480196895)) - (i32.add (i32.const -1785874037)) - (i32.add (i32.const -708349552)) - (i32.add (i32.const -597512941)) - (i32.add (i32.const -1017205241)) - (i32.add (i32.const 456684094)) - (i32.add (i32.const -2070141353)) - (i32.add (i32.const -920459206)) - (i32.add (i32.const -1068028788)) - (i32.add (i32.const 198730701)) - (i32.add (i32.const -369466549)) - (i32.add (i32.const -1962291882)) - (i32.add (i32.const -177246903)) - (i32.add (i32.const -32496306)) - (i32.add (i32.const -136899608)) - (i32.add (i32.const -1256623909)) - (i32.add (i32.const -2104028373)) - (i32.add (i32.const -1871498645)) - (i32.add (i32.const -1385691679)) - (i32.add (i32.const -1454756524)) - (i32.add (i32.const -1403921930)) - (i32.add (i32.const 1760396644)) - (i32.add (i32.const 1344985052)) - (i32.add (i32.const 1756136782)) - (i32.add (i32.const 1470190860)) - (i32.add (i32.const -744703854)) - (i32.add (i32.const 1723585294)) - (i32.add (i32.const 1715474494)) - (i32.add (i32.const 228764655)) - (i32.add (i32.const -881445711)) - (i32.add (i32.const -262068400)) - (i32.add (i32.const 310084206)) - (i32.add (i32.const 683207739)) - (i32.add (i32.const 282258170)) - (i32.add (i32.const -1834527001)) - (i32.add (i32.const 1875945330)) - (i32.add (i32.const 1894203884)) - (i32.add (i32.const -1323283713)) - (i32.add (i32.const 27090658)) - (i32.add (i32.const -508194262)) - (i32.add (i32.const 1869557463)) - (i32.add (i32.const 1691706225)) - (i32.add (i32.const 2096371408)) - (i32.add (i32.const -394021451)) - (i32.add (i32.const 1642025339)) - (i32.add (i32.const -1749826287)) - (i32.add (i32.const -2049160805)) - (i32.add (i32.const 89563772)) - (i32.add (i32.const 1268095817)) - (i32.add (i32.const -1866302283)) - (i32.add (i32.const -390185378)) - (i32.add (i32.const -593804617)) - (i32.add (i32.const -171918306)) - (i32.add (i32.const 1252041087)) - (i32.add (i32.const 1085353151)) - (i32.add (i32.const 1902239600)) - (i32.add (i32.const -1506342593)) - (i32.add (i32.const 1427238043)) - (i32.add (i32.const 1019476114)) - (i32.add (i32.const -2046374019)) - (i32.add (i32.const 776445377)) - (i32.add (i32.const 359473486)) - (i32.add (i32.const 1867111944)) - (i32.add (i32.const -9145030)) - (i32.add (i32.const 557639614)) - (i32.add (i32.const -1202578504)) - (i32.add (i32.const 1527001396)) - (i32.add (i32.const -1507648486)) - (i32.add (i32.const -1562491528)) - (i32.add (i32.const -1149264382)) - (i32.add (i32.const 1896065785)) - (i32.add (i32.const -363950321)) - (i32.add (i32.const 1395063821)) - (i32.add (i32.const -1781465449)) - (i32.add (i32.const -1446070448)) - (i32.add (i32.const -484794836)) - (i32.add (i32.const 670624904)) - (i32.add (i32.const 450386030)) - (i32.add (i32.const -51687461)) - (i32.add (i32.const 1097536905)) - (i32.add (i32.const -87621868)) - (i32.add (i32.const -1749080110)) - (i32.add (i32.const 1899080261)) - (i32.add (i32.const 682889984)) - (i32.add (i32.const -1823407263)) - (i32.add (i32.const 1561708320)) - (i32.add (i32.const -1387046107)) - (i32.add (i32.const -546948475)) - (i32.add (i32.const 1177023942)) - (i32.add (i32.const 491701229)) - (i32.add (i32.const 1683814293)) - (i32.add (i32.const 789743365)) - (i32.add (i32.const 605843693)) - (i32.add (i32.const 288482920)) - (i32.add (i32.const -1397170057)) - (i32.add (i32.const -2088292055)) - (i32.add (i32.const 926411227)) - (i32.add (i32.const -817209878)) - (i32.add (i32.const -404070860)) - (i32.add (i32.const 1520346842)) - (i32.add (i32.const -1864440672)) - (i32.add (i32.const 1030916746)) - (i32.add (i32.const -776868360)) - (i32.add (i32.const -1314189794)) - (i32.add (i32.const 191186971)) - (i32.add (i32.const -1581169945)) - (i32.add (i32.const -1716708693)) - (i32.add (i32.const 396445407)) - (i32.add (i32.const 1133149330)) - (i32.add (i32.const 2079873241)) - (i32.add (i32.const -1240603715)) - (i32.add (i32.const -1190394841)) - (i32.add (i32.const -912479381)) - (i32.add (i32.const 282382994)) - (i32.add (i32.const 1772481939)) - (i32.add (i32.const 2102386702)) - (i32.add (i32.const 1585132188)) - (i32.add (i32.const 1607791758)) - (i32.add (i32.const 1606462472)) - (i32.add (i32.const 1817366877)) - (i32.add (i32.const 853246610)) - (i32.add (i32.const 1661951149)) - (i32.add (i32.const 182348188)) - (i32.add (i32.const -1928939683)) - (i32.add (i32.const 2093307963)) - (i32.add (i32.const 1732670754)) - (i32.add (i32.const -2048942381)) - (i32.add (i32.const 1412930561)) - (i32.add (i32.const 1711595344)) - (i32.add (i32.const -975444655)) - (i32.add (i32.const -343607799)) - (i32.add (i32.const -1636898702)) - (i32.add (i32.const -631207883)) - (i32.add (i32.const 268038084)) - (i32.add (i32.const -1885864383)) - (i32.add (i32.const 1077068774)) - (i32.add (i32.const -1455470499)) - (i32.add (i32.const -165822894)) - (i32.add (i32.const 1728375022)) - (i32.add (i32.const -320140602)) - (i32.add (i32.const -823924308)) - (i32.add (i32.const 868319015)) - (i32.add (i32.const 1359810150)) - (i32.add (i32.const 1640134713)) - (i32.add (i32.const -164479159)) - (i32.add (i32.const 183917518)) - (i32.add (i32.const 189828319)) - (i32.add (i32.const -683889337)) - (i32.add (i32.const -230592374)) - (i32.add (i32.const -239553703)) - (i32.add (i32.const 1625775144)) - (i32.add (i32.const -1669173208)) - (i32.add (i32.const -1507754612)) - (i32.add (i32.const 889577151)) - (i32.add (i32.const 1901710641)) - (i32.add (i32.const 864429008)) - (i32.add (i32.const -2086973808)) - (i32.add (i32.const -1882109637)) - (i32.add (i32.const 222248542)) - (i32.add (i32.const 1852129126)) - (i32.add (i32.const -1887599682)) - (i32.add (i32.const 1645625162)) - (i32.add (i32.const 2014257732)) - (i32.add (i32.const -546345350)) - (i32.add (i32.const -342796218)) - (i32.add (i32.const -128645740)) - (i32.add (i32.const -778169843)) - (i32.add (i32.const 2144260609)) - (i32.add (i32.const 24044858)) - (i32.add (i32.const 1150532038)) - (i32.add (i32.const -882911921)) - (i32.add (i32.const 649430552)) - (i32.add (i32.const -1397210759)) - (i32.add (i32.const -2078711746)) - (i32.add (i32.const -1675486964)) - (i32.add (i32.const 19100221)) - (i32.add (i32.const 1567177756)) - (i32.add (i32.const -1616533921)) - (i32.add (i32.const -588314728)) - (i32.add (i32.const 400952695)) - (i32.add (i32.const 1029935716)) - (i32.add (i32.const -29569409)) - (i32.add (i32.const -495714921)) - (i32.add (i32.const 1857126726)) - (i32.add (i32.const 1099891312)) - (i32.add (i32.const 1093206320)) - (i32.add (i32.const -1943667292)) - (i32.add (i32.const -612127286)) - (i32.add (i32.const 750447949)) - (i32.add (i32.const 758105202)) - (i32.add (i32.const 1599661744)) - (i32.add (i32.const -2040438937)) - (i32.add (i32.const 675696812)) - (i32.add (i32.const 1265962548)) - (i32.add (i32.const 1666921343)) - (i32.add (i32.const 1955387406)) - (i32.add (i32.const -1617296529)) - (i32.add (i32.const 1738161435)) - (i32.add (i32.const -1187109363)) - (i32.add (i32.const 713400918)) - (i32.add (i32.const -1331172631)) - (i32.add (i32.const 1562149833)) - (i32.add (i32.const -797561667)) - (i32.add (i32.const 1198996398)) - (i32.add (i32.const 885452728)) - (i32.add (i32.const 986958792)) - (i32.add (i32.const 1086261942)) - (i32.add (i32.const 856469968)) - (i32.add (i32.const -1229623043)) - (i32.add (i32.const -2012549803)) - (i32.add (i32.const 1512552704)) - (i32.add (i32.const 1752720440)) - (i32.add (i32.const -1314541210)) - (i32.add (i32.const 1895079631)) - (i32.add (i32.const -2027757395)) - (i32.add (i32.const -152738641)) - (i32.add (i32.const 2022630323)) - (i32.add (i32.const 704186603)) - (i32.add (i32.const 346498662)) - (i32.add (i32.const 933960521)) - (i32.add (i32.const -1732810960)) - (i32.add (i32.const 658947250)) - (i32.add (i32.const -1147949448)) - (i32.add (i32.const -1937886379)) - (i32.add (i32.const 687684356)) - (i32.add (i32.const -1010177139)) - (i32.add (i32.const 816080901)) - (i32.add (i32.const -1791271698)) - (i32.add (i32.const 863879180)) - (i32.add (i32.const -1651400350)) - (i32.add (i32.const -705912251)) - (i32.add (i32.const -600515264)) - (i32.add (i32.const 2002936706)) - (i32.add (i32.const -1596715994)) - (i32.add (i32.const -1042008897)) - (i32.add (i32.const 1448223037)) - (i32.add (i32.const 43595034)) - (i32.add (i32.const 1610183269)) - (i32.add (i32.const -1294706971)) - (i32.add (i32.const -482624503)) - (i32.add (i32.const 1050595837)) - (i32.add (i32.const -842831868)) - (i32.add (i32.const 695380267)) - (i32.add (i32.const -1677327946)) - (i32.add (i32.const 539061719)) - (i32.add (i32.const -700151914)) - (i32.add (i32.const -1375737649)) - (i32.add (i32.const 1752534368)) - (i32.add (i32.const 474856220)) - (i32.add (i32.const -1731969309)) - (i32.add (i32.const 362900106)) - (i32.add (i32.const -1201424235)) - (i32.add (i32.const 948572811)) - (i32.add (i32.const -571549998)) - (i32.add (i32.const 587261398)) - (i32.add (i32.const 2001009547)) - (i32.add (i32.const 795060870)) - (i32.add (i32.const 1620193106)) - (i32.add (i32.const -238850839)) - (i32.add (i32.const 1062306287)) - (i32.add (i32.const 655888677)) - (i32.add (i32.const 1449176065)) - (i32.add (i32.const -444333420)) - (i32.add (i32.const 1351453681)) - (i32.add (i32.const 1302051902)) - (i32.add (i32.const 1398846242)) - (i32.add (i32.const -365577174)) - (i32.add (i32.const 60644483)) - (i32.add (i32.const 417471308)) - (i32.add (i32.const 1139864763)) - (i32.add (i32.const 507224006)) - (i32.add (i32.const -1890685856)) - (i32.add (i32.const 634798946)) - (i32.add (i32.const 528069111)) - (i32.add (i32.const 1514085298)) - (i32.add (i32.const 1165660017)) - (i32.add (i32.const -612433351)) - (i32.add (i32.const -969480106)) - (i32.add (i32.const -1268644263)) - (i32.add (i32.const -1925199083)) - (i32.add (i32.const 1237469924)) - (i32.add (i32.const -390165613)) - (i32.add (i32.const -678197716)) - (i32.add (i32.const 501915890)) - (i32.add (i32.const -1428352761)) - (i32.add (i32.const 1542210423)) - (i32.add (i32.const -1002738161)) - (i32.add (i32.const 1903632740)) - (i32.add (i32.const -493869886)) - (i32.add (i32.const -1811329316)) - (i32.add (i32.const 1582350965)) - (i32.add (i32.const -1254631000)) - (i32.add (i32.const 272121632)) - (i32.add (i32.const -1433581162)) - (i32.add (i32.const 954789533)) - (i32.add (i32.const 960676337)) - (i32.add (i32.const -581887944)) - (i32.add (i32.const -1530602096)) - (i32.add (i32.const 2001733016)) - (i32.add (i32.const 1687315045)) - (i32.add (i32.const -2035574347)) - (i32.add (i32.const -260960287)) - (i32.add (i32.const -1323282592)) - (i32.add (i32.const 1602665300)) - (i32.add (i32.const -278811515)) - (i32.add (i32.const 787036495)) - (i32.add (i32.const 465361167)) - (i32.add (i32.const -1558212587)) - (i32.add (i32.const 215079613)) - (i32.add (i32.const -46084827)) - (i32.add (i32.const 295939675)) - (i32.add (i32.const -1663332084)) - (i32.add (i32.const -145375249)) - (i32.add (i32.const -901327064)) - (i32.add (i32.const -1548209584)) - (i32.add (i32.const -471885148)) - (i32.add (i32.const 1365444340)) - (i32.add (i32.const -1482404316)) - (i32.add (i32.const -575361974)) - (i32.add (i32.const -1688686075)) - (i32.add (i32.const 1690004972)) - (i32.add (i32.const 622376335)) - (i32.add (i32.const -104032829)) - (i32.add (i32.const 1746823532)) - (i32.add (i32.const 148078453)) - (i32.add (i32.const 591200957)) - (i32.add (i32.const -289105054)) - (i32.add (i32.const -563514389)) - (i32.add (i32.const -247229637)) - (i32.add (i32.const 983933861)) - (i32.add (i32.const -456794749)) - (i32.add (i32.const -650080027)) - (i32.add (i32.const -408062121)) - (i32.add (i32.const 448932695)) - (i32.add (i32.const -1832767092)) - (i32.add (i32.const 1896841062)) - (i32.add (i32.const 1939613177)) - (i32.add (i32.const 1201981850)) - (i32.add (i32.const 1446431434)) - (i32.add (i32.const 1897763341)) - (i32.add (i32.const -577793893)) - (i32.add (i32.const -616145091)) - (i32.add (i32.const -968876063)) - (i32.add (i32.const 2089127817)) - (i32.add (i32.const -1965458636)) - (i32.add (i32.const -1096303745)) - (i32.add (i32.const 206124651)) - (i32.add (i32.const -118597924)) - (i32.add (i32.const 126145490)) - (i32.add (i32.const -191868672)) - (i32.add (i32.const 1393538686)) - (i32.add (i32.const -592137869)) - (i32.add (i32.const 1090818601)) - (i32.add (i32.const -2017854495)) - (i32.add (i32.const 328548916)) - (i32.add (i32.const 1045548733)) - (i32.add (i32.const -1666138785)) - (i32.add (i32.const -965525577)) - (i32.add (i32.const 48494101)) - (i32.add (i32.const 883941690)) - (i32.add (i32.const -1738715317)) - (i32.add (i32.const 1965606610)) - (i32.add (i32.const 2002493419)) - (i32.add (i32.const 1754363092)) - (i32.add (i32.const 809657766)) - (i32.add (i32.const -257333776)) - (i32.add (i32.const 1496736963)) - (i32.add (i32.const -13426386)) - (i32.add (i32.const 1326067295)) - (i32.add (i32.const -568159405)) - (i32.add (i32.const -580837616)) - (i32.add (i32.const -1207783573)) - (i32.add (i32.const -669491301)) - (i32.add (i32.const -1725251909)) - (i32.add (i32.const -276360291)) - (i32.add (i32.const -17435542)) - (i32.add (i32.const 1000805174)) - (i32.add (i32.const -739162218)) - (i32.add (i32.const 2100970845)) - (i32.add (i32.const -1775937178)) - (i32.add (i32.const 1712141025)) - (i32.add (i32.const 1917298051)) - (i32.add (i32.const 695895615)) - (i32.add (i32.const 942838510)) - (i32.add (i32.const -1864325321)) - (i32.add (i32.const -1448357726)) - (i32.add (i32.const 1419739342)) - (i32.add (i32.const 1051488247)) - (i32.add (i32.const 259240594)) - (i32.add (i32.const 305773491)) - (i32.add (i32.const 381624180)) - (i32.add (i32.const 1836795505)) - (i32.add (i32.const 1830771289)) - (i32.add (i32.const -1460723916)) - (i32.add (i32.const 50300783)) - (i32.add (i32.const 1792855123)) - (i32.add (i32.const -976522589)) - (i32.add (i32.const -1311931476)) - (i32.add (i32.const -2072972387)) - (i32.add (i32.const -112492696)) - (i32.add (i32.const 632009713)) - (i32.add (i32.const -681717511)) - (i32.add (i32.const 602639561)) - (i32.add (i32.const -1663623750)) - (i32.add (i32.const -695748010)) - (i32.add (i32.const -669151255)) - (i32.add (i32.const -628253039)) - (i32.add (i32.const 330316581)) - (i32.add (i32.const -473179010)) - (i32.add (i32.const 1754131531)) - (i32.add (i32.const -1180120652)) - (i32.add (i32.const -781674960)) - (i32.add (i32.const -1059943844)) - (i32.add (i32.const -1362180400)) - (i32.add (i32.const 1171762331)) - (i32.add (i32.const 1596020286)) - (i32.add (i32.const -289968582)) - (i32.add (i32.const 1377545111)) - (i32.add (i32.const 1023854781)) - (i32.add (i32.const 424517512)) - (i32.add (i32.const -1667459039)) - (i32.add (i32.const 340771137)) - (i32.add (i32.const 1701841746)) - (i32.add (i32.const -895100642)) - (i32.add (i32.const -1860221675)) - (i32.add (i32.const 924881766)) - (i32.add (i32.const 2061927584)) - (i32.add (i32.const -601997462)) - (i32.add (i32.const 1001603307)) - (i32.add (i32.const 480068586)) - (i32.add (i32.const -1267819124)) - (i32.add (i32.const 830629456)) - (i32.add (i32.const -1915804934)) - (i32.add (i32.const -803207550)) - (i32.add (i32.const 2008919770)) - (i32.add (i32.const 1117983256)) - (i32.add (i32.const -241287157)) - (i32.add (i32.const -1479133096)) - (i32.add (i32.const -1016552631)) - (i32.add (i32.const -2056536091)) - (i32.add (i32.const -1628320415)) - (i32.add (i32.const -1100155512)) - (i32.add (i32.const -392374187)) - (i32.add (i32.const -393479553)) - (i32.add (i32.const 1557362652)) - (i32.add (i32.const 731898841)) - (i32.add (i32.const -1481573511)) - (i32.add (i32.const 974574924)) - (i32.add (i32.const 1988378687)) - (i32.add (i32.const -1349440574)) - (i32.add (i32.const 1604579439)) - (i32.add (i32.const -1447705869)) - (i32.add (i32.const -1913292095)) - (i32.add (i32.const 1271805842)) - (i32.add (i32.const 766516986)) - (i32.add (i32.const -10483065)) - (i32.add (i32.const 1417965028)) - (i32.add (i32.const 318442685)) - (i32.add (i32.const -1167637191)) - (i32.add (i32.const -1729097537)) - (i32.add (i32.const 1411205475)) - (i32.add (i32.const 1576005507)) - (i32.add (i32.const -385259643)) - (i32.add (i32.const -692954077)) - (i32.add (i32.const -538404572)) - (i32.add (i32.const -102464620)) - (i32.add (i32.const -320493794)) - (i32.add (i32.const 890861030)) - (i32.add (i32.const 1610190806)) - (i32.add (i32.const -1669408209)) - (i32.add (i32.const -2081909735)) - (i32.add (i32.const -1592568627)) - (i32.add (i32.const 1495401483)) - (i32.add (i32.const 928430640)) - (i32.add (i32.const -109218545)) - (i32.add (i32.const 149957530)) - (i32.add (i32.const 1350620355)) - (i32.add (i32.const -22700340)) - (i32.add (i32.const -1478618789)) - (i32.add (i32.const -236600255)) - (i32.add (i32.const 1787970220)) - (i32.add (i32.const -258167492)) - (i32.add (i32.const -142250248)) - (i32.add (i32.const 555145372)) - (i32.add (i32.const 577109139)) - (i32.add (i32.const 261772092)) - (i32.add (i32.const 400541925)) - (i32.add (i32.const -1712077829)) - (i32.add (i32.const -1878940094)) - (i32.add (i32.const 28893145)) - (i32.add (i32.const -1879028716)) - (i32.add (i32.const 778112277)) - (i32.add (i32.const -1187858480)) - (i32.add (i32.const 1471166846)) - (i32.add (i32.const -1598955646)) - (i32.add (i32.const 100454377)) - (i32.add (i32.const -1896751833)) - (i32.add (i32.const -721382865)) - (i32.add (i32.const 88188153)) - (i32.add (i32.const 388027794)) - (i32.add (i32.const -1637805982)) - (i32.add (i32.const 1188301171)) - (i32.add (i32.const -1284079999)) - (i32.add (i32.const 553550975)) - (i32.add (i32.const 10016120)) - (i32.add (i32.const -1914308459)) - (i32.add (i32.const 835817933)) - (i32.add (i32.const -467035059)) - (i32.add (i32.const 1091563439)) - (i32.add (i32.const -1592805650)) - (i32.add (i32.const -1107758525)) - (i32.add (i32.const -168799188)) - (i32.add (i32.const -1634937509)) - (i32.add (i32.const -944390316)) - (i32.add (i32.const -569234452)) - (i32.add (i32.const -603962116)) - (i32.add (i32.const 1291853781)) - (i32.add (i32.const -652549895)) - (i32.add (i32.const -899270912)) - (i32.add (i32.const 1411144015)) - (i32.add (i32.const 790837718)) - (i32.add (i32.const 891842097)) - (i32.add (i32.const 1830451481)) - (i32.add (i32.const 331174435)) - (i32.add (i32.const -543536838)) - (i32.add (i32.const -762687829)) - (i32.add (i32.const -339602145)) - (i32.add (i32.const -1528983362)) - (i32.add (i32.const 63712168)) - (i32.add (i32.const -1149067333)) - (i32.add (i32.const -750661576)) - (i32.add (i32.const -1821284961)) - (i32.add (i32.const 947697106)) - (i32.add (i32.const -567087129)) - (i32.add (i32.const -1146990241)) - (i32.add (i32.const 2017234111)) - (i32.add (i32.const 1917386359)) - (i32.add (i32.const -1614870587)) - (i32.add (i32.const 1298261354)) - (i32.add (i32.const -1278282886)) - (i32.add (i32.const 640587324)) - (i32.add (i32.const -1492473396)) - (i32.add (i32.const 1508416265)) - (i32.add (i32.const -1125582927)) - (i32.add (i32.const 90004306)) - (i32.add (i32.const -1211666867)) - (i32.add (i32.const -2102231373)) - (i32.add (i32.const 1773691718)) - (i32.add (i32.const -754936629)) - (i32.add (i32.const -1670985545)) - (i32.add (i32.const -816008318)) - (i32.add (i32.const -1869895629)) - (i32.add (i32.const -18002505)) - (i32.add (i32.const -1230232333)) - (i32.add (i32.const 1097875283)) - (i32.add (i32.const 1540175024)) - (i32.add (i32.const 1592699201)) - (i32.add (i32.const -1042156616)) - (i32.add (i32.const 1288827313)) - (i32.add (i32.const -1100643258)) - (i32.add (i32.const 1243624837)) - (i32.add (i32.const -264735986)) - (i32.add (i32.const 343462753)) - (i32.add (i32.const 1078223716)) - (i32.add (i32.const 1862458376)) - (i32.add (i32.const 38762193)) - (i32.add (i32.const 694820911)) - (i32.add (i32.const -957311361)) - (i32.add (i32.const 721250201)) - (i32.add (i32.const 1969562252)) - (i32.add (i32.const 2060441967)) - (i32.add (i32.const 1918101114)) - (i32.add (i32.const 1738062348)) - (i32.add (i32.const 1536169630)) - (i32.add (i32.const 885454203)) - (i32.add (i32.const 691902361)) - (i32.add (i32.const 1463214523)) - (i32.add (i32.const 542887750)) - (i32.add (i32.const 537230634)) - (i32.add (i32.const 239200173)) - (i32.add (i32.const 1038769110)) - (i32.add (i32.const -1809104330)) - (i32.add (i32.const 384109961)) - (i32.add (i32.const -478700848)) - (i32.add (i32.const 700445676)) - (i32.add (i32.const -1583828993)) - (i32.add (i32.const 1197265696)) - (i32.add (i32.const -608198770)) - (i32.add (i32.const 413409541)) - (i32.add (i32.const -1314610051)) - (i32.add (i32.const 37647380)) - (i32.add (i32.const 657316064)) - (i32.add (i32.const 353661192)) - (i32.add (i32.const -1132798229)) - (i32.add (i32.const -459022350)) - (i32.add (i32.const -1984878371)) - (i32.add (i32.const 27840933)) - (i32.add (i32.const -334002626)) - (i32.add (i32.const 297060174)) - (i32.add (i32.const 1328480084)) - (i32.add (i32.const -444085234)) - (i32.add (i32.const 933321951)) - (i32.add (i32.const 536294000)) - (i32.add (i32.const 2109864496)) - (i32.add (i32.const 1498294724)) - (i32.add (i32.const -2138165113)) - (i32.add (i32.const -151839310)) - (i32.add (i32.const 859675055)) - (i32.add (i32.const -1070938651)) - (i32.add (i32.const 1204648610)) - (i32.add (i32.const -419298838)) - (i32.add (i32.const -638128060)) - (i32.add (i32.const 1871773499)) - (i32.add (i32.const -2007206665)) - (i32.add (i32.const 1114929778)) - (i32.add (i32.const 212619671)) - (i32.add (i32.const -772470811)) - (i32.add (i32.const 232661811)) - (i32.add (i32.const 478597734)) - (i32.add (i32.const 387578512)) - (i32.add (i32.const 966184564)) - (i32.add (i32.const 649191104)) - (i32.add (i32.const -1904231933)) - (i32.add (i32.const -1120712122)) - (i32.add (i32.const -1173492623)) - (i32.add (i32.const -1262110252)) - (i32.add (i32.const -1633895048)) - (i32.add (i32.const 1909865215)) - (i32.add (i32.const -622304166)) - (i32.add (i32.const -1872766004)) - (i32.add (i32.const -557971372)) - (i32.add (i32.const -241996522)) - (i32.add (i32.const -1533924910)) - (i32.add (i32.const 1450579996)) - (i32.add (i32.const 2078652928)) - (i32.add (i32.const 1712195807)) - (i32.add (i32.const -1547084113)) - (i32.add (i32.const -149962259)) - (i32.add (i32.const 36748456)) - (i32.add (i32.const 18287493)) - (i32.add (i32.const 1094042303)) - (i32.add (i32.const 1509555519)) - (i32.add (i32.const 376422604)) - (i32.add (i32.const -1035275115)) - (i32.add (i32.const 929215898)) - (i32.add (i32.const 1906561437)) - (i32.add (i32.const -393049523)) - (i32.add (i32.const -824677833)) - (i32.add (i32.const 709102417)) - (i32.add (i32.const -26674001)) - (i32.add (i32.const -2133918421)) - (i32.add (i32.const -1581756431)) - (i32.add (i32.const -1147635257)) - (i32.add (i32.const -224207025)) - (i32.add (i32.const 1853656858)) - (i32.add (i32.const 839553191)) - (i32.add (i32.const 374059742)) - (i32.add (i32.const 1092457761)) - (i32.add (i32.const -205443098)) - (i32.add (i32.const 777083653)) - (i32.add (i32.const 1085925667)) - (i32.add (i32.const 328889168)) - (i32.add (i32.const 1428118288)) - (i32.add (i32.const -372358471)) - (i32.add (i32.const 620964519)) - (i32.add (i32.const -167545010)) - (i32.add (i32.const -1427295225)) - (i32.add (i32.const -1983422759)) - (i32.add (i32.const -1879206212)) - (i32.add (i32.const -902587832)) - (i32.add (i32.const 1895600619)) - (i32.add (i32.const -552947093)) - (i32.add (i32.const 2138660394)) - (i32.add (i32.const -1715819093)) - (i32.add (i32.const 1162074591)) - (i32.add (i32.const -238903220)) - (i32.add (i32.const -244132034)) - (i32.add (i32.const -1667639497)) - (i32.add (i32.const -539900673)) - (i32.add (i32.const 1014191199)) - (i32.add (i32.const -1131545757)) - (i32.add (i32.const -774415537)) - (i32.add (i32.const 1060834131)) - (i32.add (i32.const 1621620669)) - (i32.add (i32.const -1962972608)) - (i32.add (i32.const -1636548926)) - (i32.add (i32.const -1484203135)) - (i32.add (i32.const -562076223)) - (i32.add (i32.const 1964590651)) - (i32.add (i32.const 945916380)) - (i32.add (i32.const -1855825923)) - (i32.add (i32.const 42450714)) - (i32.add (i32.const 505623466)) - (i32.add (i32.const 629238288)) - (i32.add (i32.const 2116128631)) - (i32.add (i32.const 861019439)) - (i32.add (i32.const 979869502)) - (i32.add (i32.const 1852499154)) - (i32.add (i32.const -2104370671)) - (i32.add (i32.const 498552570)) - (i32.add (i32.const -1500422457)) - (i32.add (i32.const 1513085193)) - (i32.add (i32.const -1115733044)) - (i32.add (i32.const 2132051711)) - (i32.add (i32.const 962610740)) - (i32.add (i32.const 1774295145)) - (i32.add (i32.const -1676715884)) - (i32.add (i32.const -1088041075)) - (i32.add (i32.const -1749057536)) - (i32.add (i32.const 1574004025)) - (i32.add (i32.const -1223840303)) - (i32.add (i32.const 1824485573)) - (i32.add (i32.const -743922668)) - (i32.add (i32.const 767349067)) - (i32.add (i32.const 1896733163)) - (i32.add (i32.const 252949897)) - (i32.add (i32.const 61351628)) - (i32.add (i32.const 1877307582)) - (i32.add (i32.const 2025924113)) - (i32.add (i32.const -776251387)) - (i32.add (i32.const 1561579580)) - (i32.add (i32.const 1416863682)) - (i32.add (i32.const 1344967762)) - (i32.add (i32.const -1240997388)) - (i32.add (i32.const -1550193354)) - (i32.add (i32.const -1048056612)) - (i32.add (i32.const -652380298)) - (i32.add (i32.const 759517906)) - (i32.add (i32.const 864610848)) - (i32.add (i32.const -2114121863)) - (i32.add (i32.const -1949771552)) - (i32.add (i32.const 314145628)) - (i32.add (i32.const -1770508079)) - (i32.add (i32.const -1963753991)) - (i32.add (i32.const 1802089260)) - (i32.add (i32.const -159777167)) - (i32.add (i32.const -684655624)) - (i32.add (i32.const -2040582568)) - (i32.add (i32.const -2061354181)) - (i32.add (i32.const -1411052110)) - (i32.add (i32.const -99777246)) - (i32.add (i32.const 1404316627)) - (i32.add (i32.const -1495345208)) - (i32.add (i32.const 575252281)) - (i32.add (i32.const -1614947420)) - (i32.add (i32.const 1405701437)) - (i32.add (i32.const 246168689)) - (i32.add (i32.const -337725239)) - (i32.add (i32.const 1766683862)) - (i32.add (i32.const -648868390)) - (i32.add (i32.const 1804527289)) - (i32.add (i32.const 1705507693)) - (i32.add (i32.const 889312916)) - (i32.add (i32.const 695592719)) - (i32.add (i32.const 43035620)) - (i32.add (i32.const 1187755872)) - (i32.add (i32.const 53577796)) - (i32.add (i32.const -2115790362)) - (i32.add (i32.const -224648564)) - (i32.add (i32.const -95250419)) - (i32.add (i32.const -237772973)) - (i32.add (i32.const -49016204)) - (i32.add (i32.const -1036638996)) - (i32.add (i32.const -713419363)) - (i32.add (i32.const -1288932988)) - (i32.add (i32.const -951353909)) - (i32.add (i32.const 1378304342)) - (i32.add (i32.const 1620753045)) - (i32.add (i32.const -186153290)) - (i32.add (i32.const 1734014177)) - (i32.add (i32.const 739062378)) - (i32.add (i32.const 427063590)) - (i32.add (i32.const -1342872967)) - (i32.add (i32.const -1357237268)) - (i32.add (i32.const 749265955)) - (i32.add (i32.const -477800719)) - (i32.add (i32.const -2137918941)) - (i32.add (i32.const 760673081)) - (i32.add (i32.const -364575278)) - (i32.add (i32.const -426433065)) - (i32.add (i32.const -599204970)) - (i32.add (i32.const 455405880)) - (i32.add (i32.const 1221052736)) - (i32.add (i32.const 1489106882)) - (i32.add (i32.const -1519926429)) - (i32.add (i32.const 321290717)) - (i32.add (i32.const -745535456)) - (i32.add (i32.const 1638847449)) - (i32.add (i32.const -1820016377)) - (i32.add (i32.const 1668518955)) - (i32.add (i32.const -633306922)) - (i32.add (i32.const -82373890)) - (i32.add (i32.const 422143819)) - (i32.add (i32.const 1968733112)) - (i32.add (i32.const -588976528)) - (i32.add (i32.const 1058084242)) - (i32.add (i32.const 1631450144)) - (i32.add (i32.const -47291097)) - (i32.add (i32.const -480248856)) - (i32.add (i32.const 32884655)) - (i32.add (i32.const 432602721)) - (i32.add (i32.const -1989580472)) - (i32.add (i32.const 1323331098)) - (i32.add (i32.const 1588395651)) - (i32.add (i32.const -351144653)) - (i32.add (i32.const 367580224)) - (i32.add (i32.const -1443317324)) - (i32.add (i32.const 791810362)) - (i32.add (i32.const -723361669)) - (i32.add (i32.const -1515210110)) - (i32.add (i32.const 137249576)) - (i32.add (i32.const 1595713699)) - (i32.add (i32.const 1461390276)) - (i32.add (i32.const -2109714584)) - (i32.add (i32.const -441257301)) - (i32.add (i32.const -1754009647)) - (i32.add (i32.const -111162787)) - (i32.add (i32.const -1892917587)) - (i32.add (i32.const -1588503145)) - (i32.add (i32.const 246165419)) - (i32.add (i32.const 631869295)) - (i32.add (i32.const -896631386)) - (i32.add (i32.const 230095454)) - (i32.add (i32.const 1965821407)) - (i32.add (i32.const 1039729053)) - (i32.add (i32.const -651569172)) - (i32.add (i32.const 149558120)) - (i32.add (i32.const 1665975643)) - (i32.add (i32.const -1600285557)) - (i32.add (i32.const -1927166155)) - (i32.add (i32.const 181791078)) - (i32.add (i32.const 1910757515)) - (i32.add (i32.const 845991668)) - (i32.add (i32.const -1607348883)) - (i32.add (i32.const -921762979)) - (i32.add (i32.const 27208215)) - (i32.add (i32.const 391126632)) - (i32.add (i32.const -356275332)) - (i32.add (i32.const -510729663)) - (i32.add (i32.const 446658491)) - (i32.add (i32.const -824623305)) - (i32.add (i32.const 1998022898)) - (i32.add (i32.const 1967285423)) - (i32.add (i32.const -1600481251)) - (i32.add (i32.const 1743455934)) - (i32.add (i32.const 1732874199)) - (i32.add (i32.const -209978622)) - (i32.add (i32.const 1419181007)) - (i32.add (i32.const -2065921207)) - (i32.add (i32.const 100704810)) - (i32.add (i32.const -39112656)) - (i32.add (i32.const -985291421)) - (i32.add (i32.const 1676170982)) - (i32.add (i32.const -980464013)) - (i32.add (i32.const -1787358559)) - (i32.add (i32.const 739033369)) - (i32.add (i32.const 246377437)) - (i32.add (i32.const 1898643157)) - (i32.add (i32.const 741305992)) - (i32.add (i32.const -1374219157)) - (i32.add (i32.const 389330569)) - (i32.add (i32.const 794954547)) - (i32.add (i32.const 1130051582)) - (i32.add (i32.const -227395020)) - (i32.add (i32.const -611321825)) - (i32.add (i32.const 1957069301)) - (i32.add (i32.const -227644426)) - (i32.add (i32.const 1550794184)) - (i32.add (i32.const -1276155426)) - (i32.add (i32.const -2075962459)) - (i32.add (i32.const 241036019)) - (i32.add (i32.const 569767192)) - (i32.add (i32.const 1400733968)) - (i32.add (i32.const -806702184)) - (i32.add (i32.const -1956363363)) - (i32.add (i32.const 335696295)) - (i32.add (i32.const 97324834)) - (i32.add (i32.const -755979019)) - (i32.add (i32.const 1644312291)) - (i32.add (i32.const 475882515)) - (i32.add (i32.const 789696277)) - (i32.add (i32.const -1128661069)) - (i32.add (i32.const -2005587074)) - (i32.add (i32.const -1657453934)) - (i32.add (i32.const 625338344)) - (i32.add (i32.const -140714826)) - (i32.add (i32.const -545908827)) - (i32.add (i32.const -237819432)) - (i32.add (i32.const 823865293)) - (i32.add (i32.const 52016019)) - (i32.add (i32.const 396235811)) - (i32.add (i32.const 580335292)) - (i32.add (i32.const 1759056500)) - (i32.add (i32.const 914074040)) - (i32.add (i32.const 1037520288)) - (i32.add (i32.const 1206936719)) - (i32.add (i32.const 1838770833)) - (i32.add (i32.const -1438760325)) - (i32.add (i32.const 1589609031)) - (i32.add (i32.const 1496522134)) - (i32.add (i32.const 730456184)) - (i32.add (i32.const 1680477852)) - (i32.add (i32.const -1774618012)) - (i32.add (i32.const -1438522647)) - (i32.add (i32.const -1873654415)) - (i32.add (i32.const 662416068)) - (i32.add (i32.const 629844153)) - (i32.add (i32.const 220502117)) - (i32.add (i32.const 150387918)) - (i32.add (i32.const -1218769460)) - (i32.add (i32.const -381247602)) - (i32.add (i32.const 1093552798)) - (i32.add (i32.const -565091116)) - (i32.add (i32.const 1326310472)) - (i32.add (i32.const 2103222007)) - (i32.add (i32.const 1773079007)) - (i32.add (i32.const -112167096)) - (i32.add (i32.const -2120586244)) - (i32.add (i32.const 304075622)) - (i32.add (i32.const 610151931)) - (i32.add (i32.const 1097761179)) - (i32.add (i32.const 900315982)) - (i32.add (i32.const 1637272801)) - (i32.add (i32.const -2026828646)) - (i32.add (i32.const 1034115662)) - (i32.add (i32.const -742092446)) - (i32.add (i32.const -1477225936)) - (i32.add (i32.const -2073126441)) - (i32.add (i32.const 1190490548)) - (i32.add (i32.const -165213949)) - (i32.add (i32.const -1881947773)) - (i32.add (i32.const -1107457304)) - (i32.add (i32.const -1337923382)) - (i32.add (i32.const -1786286643)) - (i32.add (i32.const -1385746608)) - (i32.add (i32.const 1014758927)) - (i32.add (i32.const 1998350108)) - (i32.add (i32.const 826259315)) - (i32.add (i32.const 1175105801)) - (i32.add (i32.const -519599406)) - (i32.add (i32.const 560798328)) - (i32.add (i32.const 168159719)) - (i32.add (i32.const 1761673515)) - (i32.add (i32.const -1907989910)) - (i32.add (i32.const 2144428286)) - (i32.add (i32.const 605300222)) - (i32.add (i32.const 255307470)) - (i32.add (i32.const 826442022)) - (i32.add (i32.const -510849320)) - (i32.add (i32.const 194285672)) - (i32.add (i32.const -86440169)) - (i32.add (i32.const -1542184983)) - (i32.add (i32.const 1755538074)) - (i32.add (i32.const -2100608795)) - (i32.add (i32.const -286712272)) - (i32.add (i32.const -1614542658)) - (i32.add (i32.const -154301049)) - (i32.add (i32.const -1948364357)) - (i32.add (i32.const -657782589)) - (i32.add (i32.const 393503594)) - (i32.add (i32.const -1354499162)) - (i32.add (i32.const -447192604)) - (i32.add (i32.const -1172926804)) - (i32.add (i32.const 806306884)) - (i32.add (i32.const -195124991)) - (i32.add (i32.const 1565148635)) - (i32.add (i32.const -553656833)) - (i32.add (i32.const 728240398)) - (i32.add (i32.const -1505589545)) - (i32.add (i32.const -798585309)) - (i32.add (i32.const -1765298508)) - (i32.add (i32.const -2046545294)) - (i32.add (i32.const -1404475280)) - (i32.add (i32.const 600968410)) - (i32.add (i32.const 1776825617)) - (i32.add (i32.const -190121315)) - (i32.add (i32.const 184005007)) - (i32.add (i32.const 1248786490)) - (i32.add (i32.const -600856068)) - (i32.add (i32.const 669627421)) - (i32.add (i32.const -1778053247)) - (i32.add (i32.const 114284091)) - (i32.add (i32.const 805053801)) - (i32.add (i32.const -1998719564)) - (i32.add (i32.const -351068580)) - (i32.add (i32.const -115811994)) - (i32.add (i32.const -1088993199)) - (i32.add (i32.const -462589143)) - (i32.add (i32.const -1814324201)) - (i32.add (i32.const -799243780)) - (i32.add (i32.const 883555195)) - (i32.add (i32.const 1111441746)) - (i32.add (i32.const 212275744)) - (i32.add (i32.const -1295815738)) - (i32.add (i32.const -1655900256)) - (i32.add (i32.const -790094419)) - (i32.add (i32.const 1948629223)) - (i32.add (i32.const 1852601384)) - (i32.add (i32.const -1332078703)) - (i32.add (i32.const -1044988178)) - (i32.add (i32.const 583190445)) - (i32.add (i32.const -160813268)) - (i32.add (i32.const 206708361)) - (i32.add (i32.const -700654013)) - (i32.add (i32.const 1811380481)) - (i32.add (i32.const 1164096814)) - (i32.add (i32.const -963527802)) - (i32.add (i32.const -1297501780)) - (i32.add (i32.const -287820117)) - (i32.add (i32.const -1277064410)) - (i32.add (i32.const 952981502)) - (i32.add (i32.const 2135840373)) - (i32.add (i32.const -450229512)) - (i32.add (i32.const -1795075114)) - (i32.add (i32.const 111389137)) - (i32.add (i32.const 977284393)) - (i32.add (i32.const -1465825310)) - (i32.add (i32.const -1274074974)) - (i32.add (i32.const -1204633141)) - (i32.add (i32.const -1034229172)) - (i32.add (i32.const 1498074427)) - (i32.add (i32.const 7256931)) - (i32.add (i32.const -525812063)) - (i32.add (i32.const -96464712)) - (i32.add (i32.const 2054407988)) - (i32.add (i32.const 1574630807)) - (i32.add (i32.const 369988044)) - (i32.add (i32.const 1290408346)) - (i32.add (i32.const 469241)) - (i32.add (i32.const 573489072)) - (i32.add (i32.const 814842450)) - (i32.add (i32.const -33213750)) - (i32.add (i32.const -1641852311)) - (i32.add (i32.const -1285428293)) - (i32.add (i32.const -1478893511)) - (i32.add (i32.const -1630495385)) - (i32.add (i32.const 1127182561)) - (i32.add (i32.const 193022700)) - (i32.add (i32.const 1193943364)) - (i32.add (i32.const 565067460)) - (i32.add (i32.const 117688653)) - (i32.add (i32.const 1460828571)) - (i32.add (i32.const -1926169345)) - (i32.add (i32.const -1036151263)) - (i32.add (i32.const -1870209817)) - (i32.add (i32.const -522379658)) - (i32.add (i32.const -1436146500)) - (i32.add (i32.const 89175847)) - (i32.add (i32.const -875449169)) - (i32.add (i32.const -245319832)) - (i32.add (i32.const -2093798377)) - (i32.add (i32.const 1176834150)) - (i32.add (i32.const 737658364)) - (i32.add (i32.const -650170596)) - (i32.add (i32.const 425231883)) - (i32.add (i32.const -1056247980)) - (i32.add (i32.const -1656115158)) - (i32.add (i32.const 120047537)) - (i32.add (i32.const -577409897)) - (i32.add (i32.const 1727297390)) - (i32.add (i32.const -938888560)) - (i32.add (i32.const -767089884)) - (i32.add (i32.const 1693922060)) - (i32.add (i32.const -599284477)) - (i32.add (i32.const 2120581762)) - (i32.add (i32.const -907945251)) - (i32.add (i32.const -1773478461)) - (i32.add (i32.const 633909514)) - (i32.add (i32.const -1835792369)) - (i32.add (i32.const 164952007)) - (i32.add (i32.const -1823522914)) - (i32.add (i32.const 369275781)) - (i32.add (i32.const -1084654426)) - (i32.add (i32.const -1801387454)) - (i32.add (i32.const -2087835597)) - (i32.add (i32.const -761992081)) - (i32.add (i32.const 1144066821)) - (i32.add (i32.const 1024744186)) - (i32.add (i32.const -1512807891)) - (i32.add (i32.const 748771407)) - (i32.add (i32.const -1089951169)) - (i32.add (i32.const -817759338)) - (i32.add (i32.const 185193880)) - (i32.add (i32.const -1364674988)) - (i32.add (i32.const -1474618640)) - (i32.add (i32.const 826285710)) - (i32.add (i32.const 1387091259)) - (i32.add (i32.const 197075702)) - (i32.add (i32.const -1788380956)) - (i32.add (i32.const -457052625)) - (i32.add (i32.const 890958396)) - (i32.add (i32.const 476590257)) - (i32.add (i32.const -153242935)) - (i32.add (i32.const 268107900)) - (i32.add (i32.const 1511723185)) - (i32.add (i32.const 477762722)) - (i32.add (i32.const 1800877969)) - (i32.add (i32.const -1273385459)) - (i32.add (i32.const 687288610)) - (i32.add (i32.const 754820770)) - (i32.add (i32.const 1687605944)) - (i32.add (i32.const -594701268)) - (i32.add (i32.const -1015535454)) - (i32.add (i32.const -1205276898)) - (i32.add (i32.const -1626518272)) - (i32.add (i32.const 640216577)) - (i32.add (i32.const -1758918051)) - (i32.add (i32.const -2047403481)) - (i32.add (i32.const 1933490492)) - (i32.add (i32.const 2055594866)) - (i32.add (i32.const -1534754244)) - (i32.add (i32.const -1415433895)) - (i32.add (i32.const -2069805834)) - (i32.add (i32.const -322665651)) - (i32.add (i32.const -522021091)) - (i32.add (i32.const 1057241808)) - (i32.add (i32.const -344461975)) - (i32.add (i32.const 1696527357)) - (i32.add (i32.const -20244115)) - (i32.add (i32.const -1483071354)) - (i32.add (i32.const -1758165149)) - (i32.add (i32.const -1439528332)) - (i32.add (i32.const -804054317)) - (i32.add (i32.const 1476809803)) - (i32.add (i32.const -782560095)) - (i32.add (i32.const -1262907578)) - (i32.add (i32.const -133566535)) - (i32.add (i32.const 966522355)) - (i32.add (i32.const -1825108077)) - (i32.add (i32.const -2051796318)) - (i32.add (i32.const 2007683003)) - (i32.add (i32.const 2067032042)) - (i32.add (i32.const -803168719)) - (i32.add (i32.const -157275183)) - (i32.add (i32.const -470525137)) - (i32.add (i32.const 1546401197)) - (i32.add (i32.const 518498841)) - (i32.add (i32.const 1269420504)) - (i32.add (i32.const 975834854)) - (i32.add (i32.const 1608302747)) - (i32.add (i32.const -938908077)) - (i32.add (i32.const 1068638044)) - (i32.add (i32.const 98872440)) - (i32.add (i32.const -1378130067)) - (i32.add (i32.const 285770460)) - (i32.add (i32.const 2101907803)) - (i32.add (i32.const -1489721621)) - (i32.add (i32.const 847027466)) - (i32.add (i32.const -1783993459)) - (i32.add (i32.const -756913923)) - (i32.add (i32.const 639041617)) - (i32.add (i32.const 1536988308)) - (i32.add (i32.const 1627749114)) - (i32.add (i32.const 881528143)) - (i32.add (i32.const -1886775461)) - (i32.add (i32.const 1409886112)) - (i32.add (i32.const -2019307946)) - (i32.add (i32.const 106251973)) - (i32.add (i32.const 1259230401)) - (i32.add (i32.const -1694354341)) - (i32.add (i32.const -1310242727)) - (i32.add (i32.const 1578170653)) - (i32.add (i32.const -1627281697)) - (i32.add (i32.const -1834692671)) - (i32.add (i32.const -298601511)) - (i32.add (i32.const 912487975)) - (i32.add (i32.const -373118195)) - (i32.add (i32.const -1635015232)) - (i32.add (i32.const -542673544)) - (i32.add (i32.const -1298464289)) - (i32.add (i32.const 2019573595)) - (i32.add (i32.const -828200628)) - (i32.add (i32.const 524441639)) - (i32.add (i32.const -235241876)) - (i32.add (i32.const 1739343357)) - (i32.add (i32.const 283546115)) - (i32.add (i32.const -592305083)) - (i32.add (i32.const -982887389)) - (i32.add (i32.const -2125053815)) - (i32.add (i32.const -88587250)) - (i32.add (i32.const -2114331949)) - (i32.add (i32.const -1258665949)) - (i32.add (i32.const 171075585)) - (i32.add (i32.const -1069787391)) - (i32.add (i32.const 1552738090)) - (i32.add (i32.const -309485404)) - (i32.add (i32.const -2023902493)) - (i32.add (i32.const -1332621549)) - (i32.add (i32.const -1632036413)) - (i32.add (i32.const -509251212)) - (i32.add (i32.const -714736838)) - (i32.add (i32.const -420977561)) - (i32.add (i32.const -1919182599)) - (i32.add (i32.const -121185954)) - (i32.add (i32.const -913553552)) - (i32.add (i32.const 843170473)) - (i32.add (i32.const -1832468149)) - (i32.add (i32.const -2147017484)) - (i32.add (i32.const -1488698775)) - (i32.add (i32.const 902227965)) - (i32.add (i32.const -2064881096)) - (i32.add (i32.const 1979518115)) - (i32.add (i32.const 663525919)) - (i32.add (i32.const 724615812)) - (i32.add (i32.const -1468034192)) - (i32.add (i32.const 472798435)) - (i32.add (i32.const 1285135442)) - (i32.add (i32.const -89793343)) - (i32.add (i32.const 44896148)) - (i32.add (i32.const -962016402)) - (i32.add (i32.const -802771091)) - (i32.add (i32.const -1781696323)) - (i32.add (i32.const 2112023099)) - (i32.add (i32.const -1000533546)) - (i32.add (i32.const -509908230)) - (i32.add (i32.const -466787285)) - (i32.add (i32.const 1857656915)) - (i32.add (i32.const 1329896512)) - (i32.add (i32.const 633655761)) - (i32.add (i32.const 1967666138)) - (i32.add (i32.const 1053545986)) - (i32.add (i32.const -1852426243)) - (i32.add (i32.const 1295552527)) - (i32.add (i32.const -2121728671)) - (i32.add (i32.const 1807753538)) - (i32.add (i32.const -130723166)) - (i32.add (i32.const 2056494413)) - (i32.add (i32.const -261663068)) - (i32.add (i32.const -434522490)) - (i32.add (i32.const 1608408763)) - (i32.add (i32.const -1680324997)) - (i32.add (i32.const -149614143)) - (i32.add (i32.const -54902290)) - (i32.add (i32.const -42812916)) - (i32.add (i32.const 1554660050)) - (i32.add (i32.const 1366814185)) - (i32.add (i32.const -166646280)) - (i32.add (i32.const 1666629974)) - (i32.add (i32.const 242269068)) - (i32.add (i32.const -1173168697)) - (i32.add (i32.const -667928556)) - (i32.add (i32.const -433891242)) - (i32.add (i32.const -947690696)) - (i32.add (i32.const 2002085545)) - (i32.add (i32.const 2017520068)) - (i32.add (i32.const 1586757346)) - (i32.add (i32.const 150234083)) - (i32.add (i32.const -932975302)) - (i32.add (i32.const -1310682298)) - (i32.add (i32.const -164773562)) - (i32.add (i32.const -1640196281)) - (i32.add (i32.const 1843225911)) - (i32.add (i32.const -1720760448)) - (i32.add (i32.const -1293094007)) - (i32.add (i32.const 1753268617)) - (i32.add (i32.const -394395886)) - (i32.add (i32.const 524341154)) - (i32.add (i32.const -811476990)) - (i32.add (i32.const 1760265215)) - (i32.add (i32.const -1275679280)) - (i32.add (i32.const 1432388236)) - (i32.add (i32.const -1978244949)) - (i32.add (i32.const -939658695)) - (i32.add (i32.const -1262192210)) - (i32.add (i32.const 1025903954)) - (i32.add (i32.const -525868717)) - (i32.add (i32.const -853711455)) - (i32.add (i32.const 1760062722)) - (i32.add (i32.const -385791741)) - (i32.add (i32.const 379644803)) - (i32.add (i32.const -230892591)) - (i32.add (i32.const -269043682)) - (i32.add (i32.const 435336670)) - (i32.add (i32.const -1496182560)) - (i32.add (i32.const -1669870853)) - (i32.add (i32.const -161378694)) - (i32.add (i32.const 1070401412)) - (i32.add (i32.const -1901214554)) - (i32.add (i32.const 543330130)) - (i32.add (i32.const -1298371111)) - (i32.add (i32.const 635361484)) - (i32.add (i32.const -864096609)) - (i32.add (i32.const -1180247804)) - (i32.add (i32.const -1815819523)) - (i32.add (i32.const 949225938)) - (i32.add (i32.const 93195399)) - (i32.add (i32.const -1355174717)) - (i32.add (i32.const 1310027901)) - (i32.add (i32.const -1973598273)) - (i32.add (i32.const -1563174360)) - (i32.add (i32.const 1844087805)) - (i32.add (i32.const -341232019)) - (i32.add (i32.const -955146253)) - (i32.add (i32.const -1814357459)) - (i32.add (i32.const 1141011725)) - (i32.add (i32.const -5596055)) - (i32.add (i32.const -1546735838)) - (i32.add (i32.const 1455995568)) - (i32.add (i32.const 968841317)) - (i32.add (i32.const -655124646)) - (i32.add (i32.const -574598519)) - (i32.add (i32.const -845947466)) - (i32.add (i32.const 1485748729)) - (i32.add (i32.const 507068774)) - (i32.add (i32.const 132131646)) - (i32.add (i32.const -1932722004)) - (i32.add (i32.const 1558232675)) - (i32.add (i32.const -592231938)) - (i32.add (i32.const 1590379239)) - (i32.add (i32.const 1138165641)) - (i32.add (i32.const 201840017)) - (i32.add (i32.const -781834923)) - (i32.add (i32.const 321215281)) - (i32.add (i32.const -580828465)) - (i32.add (i32.const 1199900453)) - (i32.add (i32.const -692635017)) - (i32.add (i32.const -1246395915)) - (i32.add (i32.const -2116734557)) - (i32.add (i32.const 905912928)) - (i32.add (i32.const -569221507)) - (i32.add (i32.const -1812816302)) - (i32.add (i32.const 1127748489)) - (i32.add (i32.const -134764537)) - (i32.add (i32.const -1079464556)) - (i32.add (i32.const 473793717)) - (i32.add (i32.const 1575991549)) - (i32.add (i32.const -166077252)) - (i32.add (i32.const 1822760084)) - (i32.add (i32.const -713270434)) - (i32.add (i32.const -458349325)) - (i32.add (i32.const 1042294337)) - (i32.add (i32.const -978654537)) - (i32.add (i32.const 956372251)) - (i32.add (i32.const -1935372761)) - (i32.add (i32.const -1865993582)) - (i32.add (i32.const -454613673)) - (i32.add (i32.const -1227264913)) - (i32.add (i32.const -817276846)) - (i32.add (i32.const 1278732924)) - (i32.add (i32.const -788163910)) - (i32.add (i32.const -1391683256)) - (i32.add (i32.const -364432919)) - (i32.add (i32.const -806066013)) - (i32.add (i32.const 1989786792)) - (i32.add (i32.const -2011531985)) - (i32.add (i32.const -779678971)) - (i32.add (i32.const 373951193)) - (i32.add (i32.const 675023408)) - (i32.add (i32.const 554262289)) - (i32.add (i32.const -1124666645)) - (i32.add (i32.const -252733399)) - (i32.add (i32.const -1652871587)) - (i32.add (i32.const -1958264503)) - (i32.add (i32.const 1084099789)) - (i32.add (i32.const 353443337)) - (i32.add (i32.const -144390063)) - (i32.add (i32.const -601343611)) - (i32.add (i32.const 1984651757)) - (i32.add (i32.const 421973730)) - (i32.add (i32.const 859713524)) - (i32.add (i32.const 1395194845)) - (i32.add (i32.const 1883628544)) - (i32.add (i32.const 918426443)) - (i32.add (i32.const -816857172)) - (i32.add (i32.const -311852056)) - (i32.add (i32.const -619058437)) - (i32.add (i32.const 1174666072)) - (i32.add (i32.const -1866486482)) - (i32.add (i32.const -1085835508)) - (i32.add (i32.const 1158567329)) - (i32.add (i32.const 1152122715)) - (i32.add (i32.const 1980980469)) - (i32.add (i32.const 1224704124)) - (i32.add (i32.const 30598099)) - (i32.add (i32.const 1680946577)) - (i32.add (i32.const 1662262692)) - (i32.add (i32.const 1062692708)) - (i32.add (i32.const 1247579331)) - (i32.add (i32.const 2021050577)) - (i32.add (i32.const -1660604249)) - (i32.add (i32.const -1593228948)) - (i32.add (i32.const 1786584033)) - (i32.add (i32.const -809238149)) - (i32.add (i32.const 1723389329)) - (i32.add (i32.const 1051104420)) - (i32.add (i32.const 1361185979)) - (i32.add (i32.const 247278046)) - (i32.add (i32.const -1434637836)) - (i32.add (i32.const -947565675)) - (i32.add (i32.const 2131611579)) - (i32.add (i32.const -1136444452)) - (i32.add (i32.const -1932235860)) - (i32.add (i32.const -824246771)) - (i32.add (i32.const -1937101994)) - (i32.add (i32.const 731696928)) - (i32.add (i32.const 1737867845)) - (i32.add (i32.const 197462588)) - (i32.add (i32.const -1649019954)) - (i32.add (i32.const 1142137040)) - (i32.add (i32.const -885531484)) - (i32.add (i32.const -1622835511)) - (i32.add (i32.const -513504997)) - (i32.add (i32.const 458422031)) - (i32.add (i32.const -236047723)) - (i32.add (i32.const -796527761)) - (i32.add (i32.const 129211921)) - (i32.add (i32.const -2116035388)) - (i32.add (i32.const -515060276)) - (i32.add (i32.const 251919271)) - (i32.add (i32.const 1364743950)) - (i32.add (i32.const 1334062595)) - (i32.add (i32.const -1664054181)) - (i32.add (i32.const 1072760557)) - (i32.add (i32.const 2141488085)) - (i32.add (i32.const 154407226)) - (i32.add (i32.const -736725653)) - (i32.add (i32.const 536833207)) - (i32.add (i32.const -1267316890)) - (i32.add (i32.const 1093506602)) - (i32.add (i32.const -926531567)) - (i32.add (i32.const 654759407)) - (i32.add (i32.const 1584255486)) - (i32.add (i32.const 278448889)) - (i32.add (i32.const 439935206)) - (i32.add (i32.const -1473185014)) - (i32.add (i32.const 1295313947)) - (i32.add (i32.const 795498698)) - (i32.add (i32.const -680652097)) - (i32.add (i32.const 101026688)) - (i32.add (i32.const 1939703321)) - (i32.add (i32.const -1297650029)) - (i32.add (i32.const 1806683901)) - (i32.add (i32.const -874766885)) - (i32.add (i32.const -1281524703)) - (i32.add (i32.const 135100725)) - (i32.add (i32.const 1578182797)) - (i32.add (i32.const 1796926312)) - (i32.add (i32.const -281091124)) - (i32.add (i32.const 1850217784)) - (i32.add (i32.const -74672528)) - (i32.add (i32.const 542115964)) - (i32.add (i32.const -162872131)) - (i32.add (i32.const 376286252)) - (i32.add (i32.const 1003629889)) - (i32.add (i32.const 1848614451)) - (i32.add (i32.const 63837038)) - (i32.add (i32.const -324984614)) - (i32.add (i32.const -877988630)) - (i32.add (i32.const 441637120)) - (i32.add (i32.const 220454867)) - (i32.add (i32.const -213543180)) - (i32.add (i32.const -889432178)) - (i32.add (i32.const -128886948)) - (i32.add (i32.const -1478281254)) - (i32.add (i32.const 1649809867)) - (i32.add (i32.const 1093131426)) - (i32.add (i32.const -2024292510)) - (i32.add (i32.const -778083948)) - (i32.add (i32.const 1166950680)) - (i32.add (i32.const 672065073)) - (i32.add (i32.const -37439100)) - (i32.add (i32.const 509646021)) - (i32.add (i32.const 1538158907)) - (i32.add (i32.const -772174966)) - (i32.add (i32.const 183218875)) - (i32.add (i32.const 1737614649)) - (i32.add (i32.const -1761407547)) - (i32.add (i32.const -1995054968)) - (i32.add (i32.const -31947118)) - (i32.add (i32.const 750942345)) - (i32.add (i32.const 195854533)) - (i32.add (i32.const 897520012)) - (i32.add (i32.const -1008748084)) - (i32.add (i32.const -1774305666)) - (i32.add (i32.const 752817822)) - (i32.add (i32.const 1153357841)) - (i32.add (i32.const 901423044)) - (i32.add (i32.const 736870531)) - (i32.add (i32.const -1907608830)) - (i32.add (i32.const 311081054)) - (i32.add (i32.const -890436792)) - (i32.add (i32.const -1483555769)) - (i32.add (i32.const 151493789)) - (i32.add (i32.const 532624342)) - (i32.add (i32.const -1248891960)) - (i32.add (i32.const -1413290381)) - (i32.add (i32.const -349937508)) - (i32.add (i32.const 559252209)) - (i32.add (i32.const 749812105)) - (i32.add (i32.const 1838229630)) - (i32.add (i32.const 450992840)) - (i32.add (i32.const -388920494)) - (i32.add (i32.const 1172986337)) - (i32.add (i32.const 1292797230)) - (i32.add (i32.const 315125650)) - (i32.add (i32.const -326651143)) - (i32.add (i32.const 53087841)) - (i32.add (i32.const -1505788039)) - (i32.add (i32.const -979953439)) - (i32.add (i32.const -1954264027)) - (i32.add (i32.const 806594027)) - (i32.add (i32.const 98123154)) - (i32.add (i32.const 1798188935)) - (i32.add (i32.const 679936746)) - (i32.add (i32.const 1969459008)) - (i32.add (i32.const -1704827272)) - (i32.add (i32.const -625841754)) - (i32.add (i32.const -1687149926)) - (i32.add (i32.const 21757336)) - (i32.add (i32.const 47636441)) - (i32.add (i32.const -741142900)) - (i32.add (i32.const 2048016719)) - (i32.add (i32.const 1196225550)) - (i32.add (i32.const 1530904952)) - (i32.add (i32.const -1591836460)) - (i32.add (i32.const -1962003268)) - (i32.add (i32.const 225914529)) - (i32.add (i32.const 746015404)) - (i32.add (i32.const -116451631)) - (i32.add (i32.const 1006550500)) - (i32.add (i32.const -790298323)) - (i32.add (i32.const 456302059)) - (i32.add (i32.const -1049206728)) - (i32.add (i32.const -545151236)) - (i32.add (i32.const 338311520)) - (i32.add (i32.const -1964564921)) - (i32.add (i32.const 318889598)) - (i32.add (i32.const -1487142535)) - (i32.add (i32.const -1615117820)) - (i32.add (i32.const -613378058)) - (i32.add (i32.const 1710468722)) - (i32.add (i32.const 1236754045)) - (i32.add (i32.const 670294833)) - (i32.add (i32.const -1526273542)) - (i32.add (i32.const -125813131)) - (i32.add (i32.const -1170395575)) - (i32.add (i32.const 2081678897)) - (i32.add (i32.const -701115931)) - (i32.add (i32.const 1470556244)) - (i32.add (i32.const 545489283)) - (i32.add (i32.const -1187136458)) - (i32.add (i32.const -16168794)) - (i32.add (i32.const 1697719308)) - (i32.add (i32.const 1876364020)) - (i32.add (i32.const -1372525341)) - (i32.add (i32.const 1096787540)) - (i32.add (i32.const -1944994129)) - (i32.add (i32.const 1295361985)) - (i32.add (i32.const -247735471)) - (i32.add (i32.const 1779993320)) - (i32.add (i32.const -938661916)) - (i32.add (i32.const 1200786349)) - (i32.add (i32.const -1288200971)) - (i32.add (i32.const 286047947)) - (i32.add (i32.const 168924360)) - (i32.add (i32.const -1152665300)) - (i32.add (i32.const -1384862055)) - (i32.add (i32.const -2121512438)) - (i32.add (i32.const -1045023884)) - (i32.add (i32.const -290843873)) - (i32.add (i32.const 1763601347)) - (i32.add (i32.const 985606096)) - (i32.add (i32.const -1239026317)) - (i32.add (i32.const 92266314)) - (i32.add (i32.const -1267621593)) - (i32.add (i32.const 184455683)) - (i32.add (i32.const 423217291)) - (i32.add (i32.const -1898628814)) - (i32.add (i32.const 1805716331)) - (i32.add (i32.const -1515088439)) - (i32.add (i32.const -1718356262)) - (i32.add (i32.const -1402543469)) - (i32.add (i32.const 99777255)) - (i32.add (i32.const 787197847)) - (i32.add (i32.const -1152812934)) - (i32.add (i32.const 2066076122)) - (i32.add (i32.const -1952640331)) - (i32.add (i32.const -518233136)) - (i32.add (i32.const 655945749)) - (i32.add (i32.const -680892515)) - (i32.add (i32.const 17517326)) - (i32.add (i32.const 1352760274)) - (i32.add (i32.const -2120046853)) - (i32.add (i32.const -721491565)) - (i32.add (i32.const -1727368507)) - (i32.add (i32.const 334812597)) - (i32.add (i32.const 1033370358)) - (i32.add (i32.const 1034697614)) - (i32.add (i32.const 1149118097)) - (i32.add (i32.const -653670037)) - (i32.add (i32.const 44274947)) - (i32.add (i32.const -149058469)) - (i32.add (i32.const -385602895)) - (i32.add (i32.const 250165411)) - (i32.add (i32.const -1232101564)) - (i32.add (i32.const -1952476669)) - (i32.add (i32.const -231520424)) - (i32.add (i32.const 1974235835)) - (i32.add (i32.const 1865637159)) - (i32.add (i32.const -1104745712)) - (i32.add (i32.const 1641936634)) - (i32.add (i32.const 1787230853)) - (i32.add (i32.const 1454172454)) - (i32.add (i32.const 982659962)) - (i32.add (i32.const -1486164328)) - (i32.add (i32.const 863663201)) - (i32.add (i32.const 673631231)) - (i32.add (i32.const -558201095)) - (i32.add (i32.const 208150445)) - (i32.add (i32.const -1761560013)) - (i32.add (i32.const -53180334)) - (i32.add (i32.const -1387989197)) - (i32.add (i32.const -1779644016)) - (i32.add (i32.const -963443090)) - (i32.add (i32.const 1602976433)) - (i32.add (i32.const 2033896023)) - (i32.add (i32.const 980578165)) - (i32.add (i32.const 197092020)) - (i32.add (i32.const 1945136067)) - (i32.add (i32.const 1470413858)) - (i32.add (i32.const 514311381)) - (i32.add (i32.const -719055064)) - (i32.add (i32.const -2129023653)) - (i32.add (i32.const -1282882115)) - (i32.add (i32.const -1188908713)) - (i32.add (i32.const -1688060994)) - (i32.add (i32.const 1729977299)) - (i32.add (i32.const 74269062)) - (i32.add (i32.const -2041043364)) - (i32.add (i32.const -1078489484)) - (i32.add (i32.const 1633521762)) - (i32.add (i32.const 432582013)) - (i32.add (i32.const -846031215)) - (i32.add (i32.const -546415278)) - (i32.add (i32.const 1613014046)) - (i32.add (i32.const 1673850550)) - (i32.add (i32.const 2038345249)) - (i32.add (i32.const 1200281442)) - (i32.add (i32.const -1228543055)) - (i32.add (i32.const 1929402160)) - (i32.add (i32.const 2109234413)) - (i32.add (i32.const -1289003268)) - (i32.add (i32.const 1542077546)) - (i32.add (i32.const -1520477706)) - (i32.add (i32.const -1029067131)) - (i32.add (i32.const 1367724208)) - (i32.add (i32.const 1948315576)) - (i32.add (i32.const -1974562544)) - (i32.add (i32.const -193708563)) - (i32.add (i32.const 965461576)) - (i32.add (i32.const 1009222998)) - (i32.add (i32.const -757387496)) - (i32.add (i32.const 1913767894)) - (i32.add (i32.const -149989561)) - (i32.add (i32.const 1439014852)) - (i32.add (i32.const 382017118)) - (i32.add (i32.const 1640521711)) - (i32.add (i32.const 984948191)) - (i32.add (i32.const -1358923064)) - (i32.add (i32.const 1686438323)) - (i32.add (i32.const 1664846172)) - (i32.add (i32.const -653153183)) - (i32.add (i32.const 207851411)) - (i32.add (i32.const 67461786)) - (i32.add (i32.const -1038363444)) - (i32.add (i32.const 296549892)) - (i32.add (i32.const 1464913076)) - (i32.add (i32.const 1573479221)) - (i32.add (i32.const -118132117)) - (i32.add (i32.const 1287803509)) - (i32.add (i32.const 1351171390)) - (i32.add (i32.const -58639099)) - (i32.add (i32.const 1054642839)) - (i32.add (i32.const -105864305)) - (i32.add (i32.const -1816551992)) - (i32.add (i32.const 2098650548)) - (i32.add (i32.const -270289869)) - (i32.add (i32.const -2105457983)) - (i32.add (i32.const 1910139802)) - (i32.add (i32.const -1477230645)) - (i32.add (i32.const 343471896)) - (i32.add (i32.const 871729632)) - (i32.add (i32.const -631368894)) - (i32.add (i32.const 1481648922)) - (i32.add (i32.const -1758697349)) - (i32.add (i32.const -781014878)) - (i32.add (i32.const -47950811)) - (i32.add (i32.const -1715844934)) - (i32.add (i32.const 1494699719)) - (i32.add (i32.const 571322541)) - (i32.add (i32.const -915900333)) - (i32.add (i32.const -440169389)) - (i32.add (i32.const 1377613361)) - (i32.add (i32.const -283774450)) - (i32.add (i32.const 990285070)) - (i32.add (i32.const 460223960)) - (i32.add (i32.const -1381101406)) - (i32.add (i32.const -1912677579)) - (i32.add (i32.const -651820632)) - (i32.add (i32.const -961474662)) - (i32.add (i32.const 197501104)) - (i32.add (i32.const -111613451)) - (i32.add (i32.const -1747119602)) - (i32.add (i32.const -430533175)) - (i32.add (i32.const -425136674)) - (i32.add (i32.const 1139962514)) - (i32.add (i32.const -2022191102)) - (i32.add (i32.const 1795673283)) - (i32.add (i32.const -2106273265)) - (i32.add (i32.const -63382454)) - (i32.add (i32.const 2011335508)) - (i32.add (i32.const -238063381)) - (i32.add (i32.const 1651476021)) - (i32.add (i32.const 75473345)) - (i32.add (i32.const -1221845615)) - (i32.add (i32.const 908387734)) - (i32.add (i32.const -351979877)) - (i32.add (i32.const -275609296)) - (i32.add (i32.const -532107271)) - (i32.add (i32.const -1529349080)) - (i32.add (i32.const -1205117172)) - (i32.add (i32.const -1503107875)) - (i32.add (i32.const -708274652)) - (i32.add (i32.const 868820752)) - (i32.add (i32.const 587056187)) - (i32.add (i32.const -616734018)) - (i32.add (i32.const 1721113028)) - (i32.add (i32.const 2065155422)) - (i32.add (i32.const -107726406)) - (i32.add (i32.const 968350706)) - (i32.add (i32.const 1971397102)) - (i32.add (i32.const -1829782688)) - (i32.add (i32.const -322524360)) - (i32.add (i32.const 1775373744)) - (i32.add (i32.const -478941882)) - (i32.add (i32.const -1004208287)) - (i32.add (i32.const -415686810)) - (i32.add (i32.const -298620031)) - (i32.add (i32.const -894917592)) - (i32.add (i32.const 353493195)) - (i32.add (i32.const 165394360)) - (i32.add (i32.const -487537664)) - (i32.add (i32.const 1744667641)) - (i32.add (i32.const 1642192823)) - (i32.add (i32.const 1601091912)) - (i32.add (i32.const -1170412320)) - (i32.add (i32.const -1506138294)) - (i32.add (i32.const -2051618405)) - (i32.add (i32.const -306601782)) - (i32.add (i32.const -180506564)) - (i32.add (i32.const 2000636701)) - (i32.add (i32.const 1231702862)) - (i32.add (i32.const 170843889)) - (i32.add (i32.const -1421988349)) - (i32.add (i32.const -98916806)) - (i32.add (i32.const -180435548)) - (i32.add (i32.const 1828212903)) - (i32.add (i32.const 1411999540)) - (i32.add (i32.const -1383187106)) - (i32.add (i32.const -1941633288)) - (i32.add (i32.const -1188512774)) - (i32.add (i32.const -1527189523)) - (i32.add (i32.const 329556938)) - (i32.add (i32.const 1762864189)) - (i32.add (i32.const 1070790085)) - (i32.add (i32.const 1129122048)) - (i32.add (i32.const -1198208378)) - (i32.add (i32.const 1781421786)) - (i32.add (i32.const 216694501)) - (i32.add (i32.const 955682427)) - (i32.add (i32.const -1718121974)) - (i32.add (i32.const 1057668827)) - (i32.add (i32.const -1727485197)) - (i32.add (i32.const -874209654)) - (i32.add (i32.const 1662121719)) - (i32.add (i32.const -606452250)) - (i32.add (i32.const 87934284)) - (i32.add (i32.const 692983707)) - (i32.add (i32.const -664688526)) - (i32.add (i32.const -186192400)) - (i32.add (i32.const -581984446)) - (i32.add (i32.const 784552441)) - (i32.add (i32.const 1360776258)) - (i32.add (i32.const -685200478)) - (i32.add (i32.const 1523835808)) - (i32.add (i32.const 1404472865)) - (i32.add (i32.const -707982316)) - (i32.add (i32.const -2107930000)) - (i32.add (i32.const 144803117)) - (i32.add (i32.const -2010931887)) - (i32.add (i32.const -1211313643)) - (i32.add (i32.const -2023787044)) - (i32.add (i32.const 371719223)) - (i32.add (i32.const -1151498860)) - (i32.add (i32.const -1512407092)) - (i32.add (i32.const -552386085)) - (i32.add (i32.const 1611745503)) - (i32.add (i32.const -112329078)) - (i32.add (i32.const 2033104818)) - (i32.add (i32.const -641992956)) - (i32.add (i32.const 166951019)) - (i32.add (i32.const 974119115)) - (i32.add (i32.const -268157011)) - (i32.add (i32.const -598378520)) - (i32.add (i32.const 99209877)) - (i32.add (i32.const 41092497)) - (i32.add (i32.const 1573103350)) - (i32.add (i32.const -1386436216)) - (i32.add (i32.const 1146796709)) - (i32.add (i32.const -2133319116)) - (i32.add (i32.const 1531416881)) - (i32.add (i32.const -2147047381)) - (i32.add (i32.const 930147996)) - (i32.add (i32.const 235440551)) - (i32.add (i32.const 2125343092)) - (i32.add (i32.const 257748301)) - (i32.add (i32.const -492178086)) - (i32.add (i32.const -1194293491)) - (i32.add (i32.const -1784575822)) - (i32.add (i32.const -1008980734)) - (i32.add (i32.const -868363160)) - (i32.add (i32.const 1670505912)) - (i32.add (i32.const 941957786)) - (i32.add (i32.const 1613960657)) - (i32.add (i32.const 1099564954)) - (i32.add (i32.const -923324299)) - (i32.add (i32.const 1180529258)) - (i32.add (i32.const 1048623829)) - (i32.add (i32.const 222846473)) - (i32.add (i32.const 1849305674)) - (i32.add (i32.const 1153943889)) - (i32.add (i32.const -1163696140)) - (i32.add (i32.const 287912460)) - (i32.add (i32.const -2069486556)) - (i32.add (i32.const 207416649)) - (i32.add (i32.const -1308291456)) - (i32.add (i32.const 298360009)) - (i32.add (i32.const 722924079)) - (i32.add (i32.const 291639089)) - (i32.add (i32.const -865162284)) - (i32.add (i32.const -1399204574)) - (i32.add (i32.const -381722864)) - (i32.add (i32.const -1636988558)) - (i32.add (i32.const -859628483)) - (i32.add (i32.const -65628854)) - (i32.add (i32.const 1749869103)) - (i32.add (i32.const -1560520122)) - (i32.add (i32.const -1109178826)) - (i32.add (i32.const -906834314)) - (i32.add (i32.const -550367807)) - (i32.add (i32.const -795761168)) - (i32.add (i32.const 994707139)) - (i32.add (i32.const 1046882461)) - (i32.add (i32.const -1944302182)) - (i32.add (i32.const 785426589)) - (i32.add (i32.const 251182164)) - (i32.add (i32.const 1088244845)) - (i32.add (i32.const 200207150)) - (i32.add (i32.const -206328145)) - (i32.add (i32.const -712503764)) - (i32.add (i32.const -42203131)) - (i32.add (i32.const -1799795135)) - (i32.add (i32.const 66813297)) - (i32.add (i32.const 111697670)) - (i32.add (i32.const 706196691)) - (i32.add (i32.const -1684251106)) - (i32.add (i32.const -1706290973)) - (i32.add (i32.const 127339136)) - (i32.add (i32.const 79341104)) - (i32.add (i32.const -396114347)) - (i32.add (i32.const 737811396)) - (i32.add (i32.const 1392059226)) - (i32.add (i32.const -473087134)) - (i32.add (i32.const 1964994730)) - (i32.add (i32.const 639758149)) - (i32.add (i32.const 1455688490)) - (i32.add (i32.const -75778566)) - (i32.add (i32.const -620343242)) - (i32.add (i32.const 493703081)) - (i32.add (i32.const 1336520732)) - (i32.add (i32.const -318161548)) - (i32.add (i32.const 255219297)) - (i32.add (i32.const -986222933)) - (i32.add (i32.const 810260778)) - (i32.add (i32.const 386203657)) - (i32.add (i32.const 127354431)) - (i32.add (i32.const -1845922841)) - (i32.add (i32.const -1694033017)) - (i32.add (i32.const 58703300)) - (i32.add (i32.const 1966592496)) - (i32.add (i32.const -1621106351)) - (i32.add (i32.const 511568900)) - (i32.add (i32.const -585827746)) - (i32.add (i32.const -919605084)) - (i32.add (i32.const -2090237776)) - (i32.add (i32.const -1530800302)) - (i32.add (i32.const 356999955)) - (i32.add (i32.const -1770903949)) - (i32.add (i32.const 815288097)) - (i32.add (i32.const 133855211)) - (i32.add (i32.const -257649935)) - (i32.add (i32.const -1582765662)) - (i32.add (i32.const 1741512353)) - (i32.add (i32.const 586175010)) - (i32.add (i32.const 31957929)) - (i32.add (i32.const 803791718)) - (i32.add (i32.const -232545695)) - (i32.add (i32.const 1412468657)) - (i32.add (i32.const 1259937598)) - (i32.add (i32.const -1783593944)) - (i32.add (i32.const -1893125497)) - (i32.add (i32.const -552335563)) - (i32.add (i32.const 1211253628)) - (i32.add (i32.const -337193462)) - (i32.add (i32.const -1208533276)) - (i32.add (i32.const 199417123)) - (i32.add (i32.const -174287531)) - (i32.add (i32.const -1171629767)) - (i32.add (i32.const 389158128)) - (i32.add (i32.const -166601968)) - (i32.add (i32.const -1278857545)) - (i32.add (i32.const -943607181)) - (i32.add (i32.const 1553012928)) - (i32.add (i32.const 1082191609)) - (i32.add (i32.const 1204960218)) - (i32.add (i32.const -15830722)) - (i32.add (i32.const -768327585)) - (i32.add (i32.const 552463516)) - (i32.add (i32.const -71478160)) - (i32.add (i32.const -460138135)) - (i32.add (i32.const 720162915)) - (i32.add (i32.const -2086706680)) - (i32.add (i32.const -1367612451)) - (i32.add (i32.const 1987603131)) - (i32.add (i32.const -1569386579)) - (i32.add (i32.const -1841412677)) - (i32.add (i32.const 1796322707)) - (i32.add (i32.const -1132929975)) - (i32.add (i32.const -541462496)) - (i32.add (i32.const -523329886)) - (i32.add (i32.const 1762631263)) - (i32.add (i32.const -1313442435)) - (i32.add (i32.const 1317734808)) - (i32.add (i32.const -1727096414)) - (i32.add (i32.const 388842497)) - (i32.add (i32.const -281012110)) - (i32.add (i32.const -543544335)) - (i32.add (i32.const 568210441)) - (i32.add (i32.const 1645183320)) - (i32.add (i32.const -1686920977)) - (i32.add (i32.const -106207781)) - (i32.add (i32.const -203318207)) - (i32.add (i32.const -409497798)) - (i32.add (i32.const 799613829)) - (i32.add (i32.const 1217918175)) - (i32.add (i32.const -1518068527)) - (i32.add (i32.const 1560106065)) - (i32.add (i32.const -112255532)) - (i32.add (i32.const 732740722)) - (i32.add (i32.const -1936601547)) - (i32.add (i32.const -450980981)) - (i32.add (i32.const -160690127)) - (i32.add (i32.const 1687601340)) - (i32.add (i32.const 1790663933)) - (i32.add (i32.const -747029000)) - (i32.add (i32.const -2040707683)) - (i32.add (i32.const 1428312893)) - (i32.add (i32.const 1261433969)) - (i32.add (i32.const 91823246)) - (i32.add (i32.const -2003934968)) - (i32.add (i32.const 1566635357)) - (i32.add (i32.const 499335448)) - (i32.add (i32.const 1265582545)) - (i32.add (i32.const -1120469113)) - (i32.add (i32.const 1838289943)) - (i32.add (i32.const -1561971815)) - (i32.add (i32.const -1141782207)) - (i32.add (i32.const -2027400201)) - (i32.add (i32.const 1816000997)) - (i32.add (i32.const -1143755819)) - (i32.add (i32.const 2059882336)) - (i32.add (i32.const -209349539)) - (i32.add (i32.const 584084676)) - (i32.add (i32.const 1856012234)) - (i32.add (i32.const -455810677)) - (i32.add (i32.const 847557582)) - (i32.add (i32.const 845551482)) - (i32.add (i32.const -732480777)) - (i32.add (i32.const -642382829)) - (i32.add (i32.const -588101782)) - (i32.add (i32.const -2030498326)) - (i32.add (i32.const 2021399558)) - (i32.add (i32.const -2001533464)) - (i32.add (i32.const -90142999)) - (i32.add (i32.const 1921324833)) - (i32.add (i32.const 1807021435)) - (i32.add (i32.const 67395792)) - (i32.add (i32.const 471984154)) - (i32.add (i32.const 1234606039)) - (i32.add (i32.const 1659250903)) - (i32.add (i32.const -1283874727)) - (i32.add (i32.const -1928298022)) - (i32.add (i32.const -1394150489)) - (i32.add (i32.const 1653137635)) - (i32.add (i32.const 1740634848)) - (i32.add (i32.const -2008277516)) - (i32.add (i32.const 682698168)) - (i32.add (i32.const 1709429229)) - (i32.add (i32.const -120085798)) - (i32.add (i32.const 425363392)) - (i32.add (i32.const 2111255494)) - (i32.add (i32.const 74180704)) - (i32.add (i32.const -752316056)) - (i32.add (i32.const 282361485)) - (i32.add (i32.const 981466664)) - (i32.add (i32.const -1873798587)) - (i32.add (i32.const 1969364605)) - (i32.add (i32.const -158075671)) - (i32.add (i32.const 557816433)) - (i32.add (i32.const -1090969280)) - (i32.add (i32.const 209180401)) - (i32.add (i32.const -979307763)) - (i32.add (i32.const 1252756545)) - (i32.add (i32.const -546113416)) - (i32.add (i32.const -143775056)) - (i32.add (i32.const 1399033466)) - (i32.add (i32.const 1247966895)) - (i32.add (i32.const 1496793955)) - (i32.add (i32.const 2035401456)) - (i32.add (i32.const 61709985)) - (i32.add (i32.const -890848517)) - (i32.add (i32.const 345121477)) - (i32.add (i32.const 1368128253)) - (i32.add (i32.const 1307700116)) - (i32.add (i32.const 1858485498)) - (i32.add (i32.const 167060817)) - (i32.add (i32.const -1701187351)) - (i32.add (i32.const -1898801583)) - (i32.add (i32.const -891585926)) - (i32.add (i32.const 1651653147)) - (i32.add (i32.const -894054590)) - (i32.add (i32.const -574250095)) - (i32.add (i32.const 23220262)) - (i32.add (i32.const -491027630)) - (i32.add (i32.const 2003048850)) - (i32.add (i32.const 486718678)) - (i32.add (i32.const 545502441)) - (i32.add (i32.const 609761893)) - (i32.add (i32.const -495907744)) - (i32.add (i32.const 434993089)) - (i32.add (i32.const 2073488332)) - (i32.add (i32.const 1766582720)) - (i32.add (i32.const 930753280)) - (i32.add (i32.const 191298806)) - (i32.add (i32.const 1707746518)) - (i32.add (i32.const 1364720245)) - (i32.add (i32.const 959444176)) - (i32.add (i32.const -42266183)) - (i32.add (i32.const 2051417217)) - (i32.add (i32.const -304893986)) - (i32.add (i32.const -93852933)) - (i32.add (i32.const 973692718)) - (i32.add (i32.const -1646657885)) - (i32.add (i32.const -1413275388)) - (i32.add (i32.const 91152320)) - (i32.add (i32.const 92334000)) - (i32.add (i32.const 534132123)) - (i32.add (i32.const -1969451882)) - (i32.add (i32.const 350897391)) - (i32.add (i32.const 1144361927)) - (i32.add (i32.const 1524389845)) - (i32.add (i32.const 199876430)) - (i32.add (i32.const 405750424)) - (i32.add (i32.const 1222886412)) - (i32.add (i32.const 1960478071)) - (i32.add (i32.const -800984771)) - (i32.add (i32.const 945958781)) - (i32.add (i32.const -1496813108)) - (i32.add (i32.const -944090802)) - (i32.add (i32.const 810644812)) - (i32.add (i32.const 964244665)) - (i32.add (i32.const 492357244)) - (i32.add (i32.const 515988263)) - (i32.add (i32.const -1470555736)) - (i32.add (i32.const -359820717)) - (i32.add (i32.const -235821095)) - (i32.add (i32.const 1429029929)) - (i32.add (i32.const 319853392)) - (i32.add (i32.const -841571234)) - (i32.add (i32.const -1002486341)) - (i32.add (i32.const 891283482)) - (i32.add (i32.const 561654848)) - (i32.add (i32.const -1798326822)) - (i32.add (i32.const -566130004)) - (i32.add (i32.const -1746272363)) - (i32.add (i32.const -689931914)) - (i32.add (i32.const -514552800)) - (i32.add (i32.const 1793636681)) - (i32.add (i32.const 1190750113)) - (i32.add (i32.const -1932516582)) - (i32.add (i32.const 1924025829)) - (i32.add (i32.const -865375233)) - (i32.add (i32.const -154254883)) - (i32.add (i32.const -100204074)) - (i32.add (i32.const 516789854)) - (i32.add (i32.const 1037600294)) - (i32.add (i32.const -1920003312)) - (i32.add (i32.const -850804243)) - (i32.add (i32.const 160055199)) - (i32.add (i32.const 204266604)) - (i32.add (i32.const -543984481)) - (i32.add (i32.const -99913638)) - (i32.add (i32.const 1633819488)) - (i32.add (i32.const 1261941723)) - (i32.add (i32.const 2022521774)) - (i32.add (i32.const -844170748)) - (i32.add (i32.const -1318727583)) - (i32.add (i32.const -403295614)) - (i32.add (i32.const 1663959960)) - (i32.add (i32.const 1292095352)) - (i32.add (i32.const -231038899)) - (i32.add (i32.const 1198287555)) - (i32.add (i32.const 36724956)) - (i32.add (i32.const 687362048)) - (i32.add (i32.const -158934398)) - (i32.add (i32.const 1553526292)) - (i32.add (i32.const -1711381645)) - (i32.add (i32.const 1260416035)) - (i32.add (i32.const -1983670157)) - (i32.add (i32.const -1465341899)) - (i32.add (i32.const 2021889671)) - (i32.add (i32.const -204367037)) - (i32.add (i32.const 2094778703)) - (i32.add (i32.const -194228855)) - (i32.add (i32.const -2068157972)) - (i32.add (i32.const -1936871143)) - (i32.add (i32.const 2003043274)) - (i32.add (i32.const 1053449042)) - (i32.add (i32.const -257269698)) - (i32.add (i32.const -522256326)) - (i32.add (i32.const 2004616197)) - (i32.add (i32.const -1599081196)) - (i32.add (i32.const 1215756203)) - (i32.add (i32.const -254689469)) - (i32.add (i32.const -195906532)) - (i32.add (i32.const -1167552017)) - (i32.add (i32.const 1454854148)) - (i32.add (i32.const 461709217)) - (i32.add (i32.const -228728856)) - (i32.add (i32.const -2069050142)) - (i32.add (i32.const -1895750112)) - (i32.add (i32.const -411936587)) - (i32.add (i32.const -28496735)) - (i32.add (i32.const 1698220152)) - (i32.add (i32.const 1667683520)) - (i32.add (i32.const 1915817285)) - (i32.add (i32.const 2020285451)) - (i32.add (i32.const 460714087)) - (i32.add (i32.const 1601153200)) - (i32.add (i32.const -614659480)) - (i32.add (i32.const 60275967)) - (i32.add (i32.const -1299129770)) - (i32.add (i32.const -1457325475)) - (i32.add (i32.const 655102511)) - (i32.add (i32.const -1666279977)) - (i32.add (i32.const -2007276003)) - (i32.add (i32.const 660803051)) - (i32.add (i32.const -1159587288)) - (i32.add (i32.const -1270254422)) - (i32.add (i32.const 1102556376)) - (i32.add (i32.const -1477648143)) - (i32.add (i32.const 1528953346)) - (i32.add (i32.const -240515470)) - (i32.add (i32.const 832369600)) - (i32.add (i32.const 411681705)) - (i32.add (i32.const 751399571)) - (i32.add (i32.const 752792004)) - (i32.add (i32.const 695156975)) - (i32.add (i32.const 1175769456)) - (i32.add (i32.const -526815908)) - (i32.add (i32.const 757951834)) - (i32.add (i32.const 1011101146)) - (i32.add (i32.const -1107448755)) - (i32.add (i32.const -1866161139)) - (i32.add (i32.const -1819899839)) - (i32.add (i32.const 662751543)) - (i32.add (i32.const -828285620)) - (i32.add (i32.const 1546891754)) - (i32.add (i32.const 827219116)) - (i32.add (i32.const 266349302)) - (i32.add (i32.const -283840140)) - (i32.add (i32.const -1977148673)) - (i32.add (i32.const 1537039249)) - (i32.add (i32.const -2081795273)) - (i32.add (i32.const -294462546)) - (i32.add (i32.const 1113573133)) - (i32.add (i32.const -206796608)) - (i32.add (i32.const -1525546083)) - (i32.add (i32.const 1591586643)) - (i32.add (i32.const 717973152)) - (i32.add (i32.const 1479766010)) - (i32.add (i32.const -452638454)) - (i32.add (i32.const -836548819)) - (i32.add (i32.const 1115842271)) - (i32.add (i32.const 1150015)) - (i32.add (i32.const 1584812997)) - (i32.add (i32.const -917729159)) - (i32.add (i32.const -1477315737)) - (i32.add (i32.const 1895679869)) - (i32.add (i32.const 1962358096)) - (i32.add (i32.const -1503231352)) - (i32.add (i32.const 582194835)) - (i32.add (i32.const -688094502)) - (i32.add (i32.const -1933948405)) - (i32.add (i32.const -1720127255)) - (i32.add (i32.const -1302661210)) - (i32.add (i32.const -578259838)) - (i32.add (i32.const -424775398)) - (i32.add (i32.const 1689328867)) - (i32.add (i32.const 812193121)) - (i32.add (i32.const 971132626)) - (i32.add (i32.const -617585569)) - (i32.add (i32.const 225986816)) - (i32.add (i32.const 925499965)) - (i32.add (i32.const -337022904)) - (i32.add (i32.const 1282802424)) - (i32.add (i32.const 1216182100)) - (i32.add (i32.const 342351409)) - (i32.add (i32.const 1375196359)) - (i32.add (i32.const 1670832281)) - (i32.add (i32.const 164880219)) - (i32.add (i32.const -1710558828)) - (i32.add (i32.const -1099736094)) - (i32.add (i32.const 570436656)) - (i32.add (i32.const -1329727376)) - (i32.add (i32.const 444112086)) - (i32.add (i32.const -1143390396)) - (i32.add (i32.const 375156266)) - (i32.add (i32.const -198807698)) - (i32.add (i32.const -1474178056)) - (i32.add (i32.const -22618072)) - (i32.add (i32.const -757498096)) - (i32.add (i32.const 542990094)) - (i32.add (i32.const -187478657)) - (i32.add (i32.const 937730160)) - (i32.add (i32.const -125307689)) - (i32.add (i32.const 1416996148)) - (i32.add (i32.const 1320138247)) - (i32.add (i32.const -993296070)) - (i32.add (i32.const -1386279817)) - (i32.add (i32.const -407747999)) - (i32.add (i32.const -134597180)) - (i32.add (i32.const -823584227)) - (i32.add (i32.const -1627215478)) - (i32.add (i32.const -1680321479)) - (i32.add (i32.const 991338276)) - (i32.add (i32.const -397938281)) - (i32.add (i32.const 1230573460)) - (i32.add (i32.const -838411719)) - (i32.add (i32.const 2062101742)) - (i32.add (i32.const -1712750572)) - (i32.add (i32.const 930375877)) - (i32.add (i32.const -1560627)) - (i32.add (i32.const -131935678)) - (i32.add (i32.const 187520753)) - (i32.add (i32.const 1333005490)) - (i32.add (i32.const 2061571076)) - (i32.add (i32.const -1855916289)) - (i32.add (i32.const 276273963)) - (i32.add (i32.const 2044342529)) - (i32.add (i32.const 787610940)) - (i32.add (i32.const -2093453950)) - (i32.add (i32.const 533905822)) - (i32.add (i32.const -28447374)) - (i32.add (i32.const -352061115)) - (i32.add (i32.const 1341107371)) - (i32.add (i32.const -677035073)) - (i32.add (i32.const 505149122)) - (i32.add (i32.const 637765689)) - (i32.add (i32.const -1164338272)) - (i32.add (i32.const -1188535579)) - (i32.add (i32.const -961995321)) - (i32.add (i32.const 32878974)) - (i32.add (i32.const -1039787264)) - (i32.add (i32.const 1826009806)) - (i32.add (i32.const 438978916)) - (i32.add (i32.const 798562438)) - (i32.add (i32.const 171465443)) - (i32.add (i32.const -146784999)) - (i32.add (i32.const 2009173514)) - (i32.add (i32.const 764014331)) - (i32.add (i32.const -750151274)) - (i32.add (i32.const 510556689)) - (i32.add (i32.const -1032864950)) - (i32.add (i32.const 1003020212)) - (i32.add (i32.const 116552520)) - (i32.add (i32.const 1201198478)) - (i32.add (i32.const -1188562758)) - (i32.add (i32.const 59374267)) - (i32.add (i32.const 1208348341)) - (i32.add (i32.const 907115509)) - (i32.add (i32.const -692108959)) - (i32.add (i32.const -1928705647)) - (i32.add (i32.const 1982979321)) - (i32.add (i32.const 295312406)) - (i32.add (i32.const 1430187010)) - (i32.add (i32.const 1388088986)) - (i32.add (i32.const -1933943488)) - (i32.add (i32.const -2025461253)) - (i32.add (i32.const 11628016)) - (i32.add (i32.const 1452077882)) - (i32.add (i32.const -1643858315)) - (i32.add (i32.const 1578009942)) - (i32.add (i32.const 1687970578)) - (i32.add (i32.const 546043587)) - (i32.add (i32.const 1601435758)) - (i32.add (i32.const 260854773)) - (i32.add (i32.const 293147160)) - (i32.add (i32.const 1891438128)) - (i32.add (i32.const 878281142)) - (i32.add (i32.const 1050883239)) - (i32.add (i32.const -1870704743)) - (i32.add (i32.const 36201293)) - (i32.add (i32.const 1404850980)) - (i32.add (i32.const -1167637927)) - (i32.add (i32.const -717910679)) - (i32.add (i32.const 224659015)) - (i32.add (i32.const 723222461)) - (i32.add (i32.const -698858534)) - (i32.add (i32.const -67461705)) - (i32.add (i32.const 2256612)) - (i32.add (i32.const -1494320518)) - (i32.add (i32.const -1007624561)) - (i32.add (i32.const -552985522)) - (i32.add (i32.const -1822355804)) - (i32.add (i32.const -849485349)) - (i32.add (i32.const 76862223)) - (i32.add (i32.const -527038951)) - (i32.add (i32.const 304876180)) - (i32.add (i32.const -746105035)) - (i32.add (i32.const 231646702)) - (i32.add (i32.const 136887534)) - (i32.add (i32.const -1614947086)) - (i32.add (i32.const -641698155)) - (i32.add (i32.const -1621395528)) - (i32.add (i32.const 513859884)) - (i32.add (i32.const -1273837980)) - (i32.add (i32.const 537138823)) - (i32.add (i32.const -1516861041)) - (i32.add (i32.const -2055872752)) - (i32.add (i32.const -1705281046)) - (i32.add (i32.const 606042885)) - (i32.add (i32.const 1632093139)) - (i32.add (i32.const 1213148563)) - (i32.add (i32.const -390179690)) - (i32.add (i32.const -1750625062)) - (i32.add (i32.const -1330117589)) - (i32.add (i32.const 205030482)) - (i32.add (i32.const -103671124)) - (i32.add (i32.const -249959794)) - (i32.add (i32.const 936850715)) - (i32.add (i32.const 1322420393)) - (i32.add (i32.const 1860514038)) - (i32.add (i32.const 1257913678)) - (i32.add (i32.const 1521736543)) - (i32.add (i32.const -1143012373)) - (i32.add (i32.const 439704037)) - (i32.add (i32.const -486269374)) - (i32.add (i32.const -429631701)) - (i32.add (i32.const -472909024)) - (i32.add (i32.const 611970658)) - (i32.add (i32.const 270809985)) - (i32.add (i32.const 1706425725)) - (i32.add (i32.const 1365262126)) - (i32.add (i32.const 739929776)) - (i32.add (i32.const 18559150)) - (i32.add (i32.const -1738244235)) - (i32.add (i32.const -440166780)) - (i32.add (i32.const 1948487855)) - (i32.add (i32.const 1489014117)) - (i32.add (i32.const -1066697437)) - (i32.add (i32.const 1891734532)) - (i32.add (i32.const -1232117174)) - (i32.add (i32.const 978151074)) - (i32.add (i32.const -1811891582)) - (i32.add (i32.const 1322960186)) - (i32.add (i32.const -1694462575)) - (i32.add (i32.const 127299451)) - (i32.add (i32.const -16443667)) - (i32.add (i32.const 467445958)) - (i32.add (i32.const -1634257211)) - (i32.add (i32.const 650847342)) - (i32.add (i32.const -837704605)) - (i32.add (i32.const -1859805505)) - (i32.add (i32.const 262502936)) - (i32.add (i32.const -11641102)) - (i32.add (i32.const 1780518438)) - (i32.add (i32.const 1701385850)) - (i32.add (i32.const 1217763252)) - (i32.add (i32.const 1106917317)) - (i32.add (i32.const -165121216)) - (i32.add (i32.const -1876385079)) - (i32.add (i32.const -446577939)) - (i32.add (i32.const 1929841739)) - (i32.add (i32.const 1627537098)) - (i32.add (i32.const 2057147759)) - (i32.add (i32.const -1310692564)) - (i32.add (i32.const -1402332024)) - (i32.add (i32.const -899787792)) - (i32.add (i32.const 2006731572)) - (i32.add (i32.const -2102920104)) - (i32.add (i32.const -1586290818)) - (i32.add (i32.const -1852729271)) - (i32.add (i32.const -505189698)) - (i32.add (i32.const 1668095906)) - (i32.add (i32.const -240791192)) - (i32.add (i32.const 1796943756)) - (i32.add (i32.const -1881497615)) - (i32.add (i32.const -1268850413)) - (i32.add (i32.const -1879492494)) - (i32.add (i32.const 900338798)) - (i32.add (i32.const 1811849240)) - (i32.add (i32.const 1467281866)) - (i32.add (i32.const -119048098)) - (i32.add (i32.const 438461355)) - (i32.add (i32.const -1522034548)) - (i32.add (i32.const -843025578)) - (i32.add (i32.const -1309946824)) - (i32.add (i32.const -1774901362)) - (i32.add (i32.const -1935040418)) - (i32.add (i32.const 883966451)) - (i32.add (i32.const -1554389255)) - (i32.add (i32.const 699737845)) - (i32.add (i32.const 577580738)) - (i32.add (i32.const -1961658350)) - (i32.add (i32.const -1796965557)) - (i32.add (i32.const -966439704)) - (i32.add (i32.const 1929061756)) - (i32.add (i32.const -116157997)) - (i32.add (i32.const 2026815811)) - (i32.add (i32.const -1925482348)) - (i32.add (i32.const 687868425)) - (i32.add (i32.const -1644896205)) - (i32.add (i32.const -1640057206)) - (i32.add (i32.const -1735197735)) - (i32.add (i32.const -1792850819)) - (i32.add (i32.const -1983725643)) - (i32.add (i32.const 151940952)) - (i32.add (i32.const -797424077)) - (i32.add (i32.const -1767545423)) - (i32.add (i32.const 1355335522)) - (i32.add (i32.const 1333441815)) - (i32.add (i32.const -24695184)) - (i32.add (i32.const 565088952)) - (i32.add (i32.const -1040585979)) - (i32.add (i32.const 1818487845)) - (i32.add (i32.const 1961296655)) - (i32.add (i32.const 641905585)) - (i32.add (i32.const 1202830224)) - (i32.add (i32.const -953940488)) - (i32.add (i32.const 464211802)) - (i32.add (i32.const -146820102)) - (i32.add (i32.const -880983745)) - (i32.add (i32.const -1693601704)) - (i32.add (i32.const -2115185776)) - (i32.add (i32.const 159655810)) - (i32.add (i32.const -1162836989)) - (i32.add (i32.const 120343070)) - (i32.add (i32.const 962822195)) - (i32.add (i32.const -201541386)) - (i32.add (i32.const 2024775345)) - (i32.add (i32.const -1319300401)) - (i32.add (i32.const 1609038585)) - (i32.add (i32.const -176582499)) - (i32.add (i32.const -1826997460)) - (i32.add (i32.const 81609615)) - (i32.add (i32.const 2022829531)) - (i32.add (i32.const -2062911140)) - (i32.add (i32.const -808572680)) - (i32.add (i32.const 764994353)) - (i32.add (i32.const 1920875142)) - (i32.add (i32.const 770038250)) - (i32.add (i32.const 1403792020)) - (i32.add (i32.const -1915236392)) - (i32.add (i32.const -186395806)) - (i32.add (i32.const -385778971)) - (i32.add (i32.const 401579315)) - (i32.add (i32.const 1544092108)) - (i32.add (i32.const -2085533698)) - (i32.add (i32.const -1887011921)) - (i32.add (i32.const 2053428921)) - (i32.add (i32.const -554372364)) - (i32.add (i32.const -1612938776)) - (i32.add (i32.const 229917615)) - (i32.add (i32.const -1286976462)) - (i32.add (i32.const 555892933)) - (i32.add (i32.const -1132399011)) - (i32.add (i32.const -597476666)) - (i32.add (i32.const 653872115)) - (i32.add (i32.const -537010496)) - (i32.add (i32.const -1508123257)) - (i32.add (i32.const 2045989796)) - (i32.add (i32.const 1291371975)) - (i32.add (i32.const 367612822)) - (i32.add (i32.const 1812629403)) - (i32.add (i32.const -572433949)) - (i32.add (i32.const -1432937532)) - (i32.add (i32.const 1123226825)) - (i32.add (i32.const 1146926856)) - (i32.add (i32.const 1940550480)) - (i32.add (i32.const 1217012223)) - (i32.add (i32.const 1032787296)) - (i32.add (i32.const -482271947)) - (i32.add (i32.const -2021983202)) - (i32.add (i32.const -161882657)) - (i32.add (i32.const 998164595)) - (i32.add (i32.const 1130878047)) - (i32.add (i32.const 2019545732)) - (i32.add (i32.const 2070595786)) - (i32.add (i32.const -655707984)) - (i32.add (i32.const -1117710383)) - (i32.add (i32.const 424711673)) - (i32.add (i32.const -431765642)) - (i32.add (i32.const -2003972592)) - (i32.add (i32.const 1666245830)) - (i32.add (i32.const 1173269893)) - (i32.add (i32.const -627589495)) - (i32.add (i32.const -363717357)) - (i32.add (i32.const 1214057634)) - (i32.add (i32.const 1872995969)) - (i32.add (i32.const -1702208318)) - (i32.add (i32.const -1221916596)) - (i32.add (i32.const 1443182800)) - (i32.add (i32.const -481558636)) - (i32.add (i32.const -1567412002)) - (i32.add (i32.const -1605190780)) - (i32.add (i32.const 2102945144)) - (i32.add (i32.const -818698750)) - (i32.add (i32.const -1676011615)) - (i32.add (i32.const 926347427)) - (i32.add (i32.const 696717579)) - (i32.add (i32.const -308929505)) - (i32.add (i32.const 164815021)) - (i32.add (i32.const -1519814858)) - (i32.add (i32.const -2062928999)) - (i32.add (i32.const -776388596)) - (i32.add (i32.const -1206160164)) - (i32.add (i32.const -3748538)) - (i32.add (i32.const 862474755)) - (i32.add (i32.const -338858207)) - (i32.add (i32.const 1699952673)) - (i32.add (i32.const 377679712)) - (i32.add (i32.const -1476971356)) - (i32.add (i32.const 793303138)) - (i32.add (i32.const 2046433019)) - (i32.add (i32.const 1573849472)) - (i32.add (i32.const 978779426)) - (i32.add (i32.const 1271639571)) - (i32.add (i32.const -80192232)) - (i32.add (i32.const 1376074441)) - (i32.add (i32.const -1466984668)) - (i32.add (i32.const 1150984171)) - (i32.add (i32.const -976693114)) - (i32.add (i32.const -612919078)) - (i32.add (i32.const 255383178)) - (i32.add (i32.const -435657186)) - (i32.add (i32.const 613097586)) - (i32.add (i32.const -402567635)) - (i32.add (i32.const 34259696)) - (i32.add (i32.const -850666830)) - (i32.add (i32.const 792838529)) - (i32.add (i32.const 179087227)) - (i32.add (i32.const -204649638)) - (i32.add (i32.const -1118786783)) - (i32.add (i32.const -1890607764)) - (i32.add (i32.const 1773016017)) - (i32.add (i32.const 95191283)) - (i32.add (i32.const 195143292)) - (i32.add (i32.const 1638751678)) - (i32.add (i32.const 119839586)) - (i32.add (i32.const -708029992)) - (i32.add (i32.const -1167759142)) - (i32.add (i32.const 858021405)) - (i32.add (i32.const -847800919)) - (i32.add (i32.const -387797289)) - (i32.add (i32.const 942444309)) - (i32.add (i32.const -1271096610)) - (i32.add (i32.const 1241045918)) - (i32.add (i32.const -86245040)) - (i32.add (i32.const -2103424967)) - (i32.add (i32.const -899963352)) - (i32.add (i32.const 529475458)) - (i32.add (i32.const 1379045443)) - (i32.add (i32.const 1739892210)) - (i32.add (i32.const 195541377)) - (i32.add (i32.const -574968922)) - (i32.add (i32.const 365927232)) - (i32.add (i32.const 1300632097)) - (i32.add (i32.const 2010977698)) - (i32.add (i32.const 1853809647)) - (i32.add (i32.const 1392719101)) - (i32.add (i32.const -1605592389)) - (i32.add (i32.const -1689137)) - (i32.add (i32.const -1649291379)) - (i32.add (i32.const 1227413880)) - (i32.add (i32.const 998306986)) - (i32.add (i32.const 481737367)) - (i32.add (i32.const 1312146753)) - (i32.add (i32.const -1688512699)) - (i32.add (i32.const -1232188446)) - (i32.add (i32.const -1668543803)) - (i32.add (i32.const -591769153)) - (i32.add (i32.const 1638650663)) - (i32.add (i32.const 1322802759)) - (i32.add (i32.const 1103674830)) - (i32.add (i32.const 1034332166)) - (i32.add (i32.const 1936859435)) - (i32.add (i32.const 214400033)) - (i32.add (i32.const 300236349)) - (i32.add (i32.const -985174830)) - (i32.add (i32.const 1477268023)) - (i32.add (i32.const 1231802030)) - (i32.add (i32.const 951442933)) - (i32.add (i32.const 772602377)) - (i32.add (i32.const -60356836)) - (i32.add (i32.const -181021649)) - (i32.add (i32.const 1797722985)) - (i32.add (i32.const 1315305589)) - (i32.add (i32.const -1120466198)) - (i32.add (i32.const -22847049)) - (i32.add (i32.const -179106078)) - (i32.add (i32.const -1636388878)) - (i32.add (i32.const 1727130910)) - (i32.add (i32.const -948898552)) - (i32.add (i32.const 165495292)) - (i32.add (i32.const 824150554)) - (i32.add (i32.const 2004484059)) - (i32.add (i32.const -845605569)) - (i32.add (i32.const 1181532773)) - (i32.add (i32.const -712608886)) - (i32.add (i32.const 893225794)) - (i32.add (i32.const -1586698826)) - (i32.add (i32.const -602538079)) - (i32.add (i32.const -1174244933)) - (i32.add (i32.const -313786443)) - (i32.add (i32.const -1485554868)) - (i32.add (i32.const -1218964621)) - (i32.add (i32.const -1716145767)) - (i32.add (i32.const -84568962)) - (i32.add (i32.const 486229732)) - (i32.add (i32.const -734687765)) - (i32.add (i32.const 1218733085)) - (i32.add (i32.const -1481120509)) - (i32.add (i32.const 1994430104)) - (i32.add (i32.const -278807921)) - (i32.add (i32.const -1273390873)) - (i32.add (i32.const -1811148187)) - (i32.add (i32.const 1024779266)) - (i32.add (i32.const 763499607)) - (i32.add (i32.const -2098493199)) - (i32.add (i32.const -1679607877)) - (i32.add (i32.const 211623558)) - (i32.add (i32.const -1854021616)) - (i32.add (i32.const 44510775)) - (i32.add (i32.const 2094840155)) - (i32.add (i32.const 1863016799)) - (i32.add (i32.const -384681034)) - (i32.add (i32.const 108194069)) - (i32.add (i32.const 993588098)) - (i32.add (i32.const 1051732443)) - (i32.add (i32.const -1324930522)) - (i32.add (i32.const 1780226289)) - (i32.add (i32.const -583193381)) - (i32.add (i32.const 1621683657)) - (i32.add (i32.const 1556666332)) - (i32.add (i32.const -2130919682)) - (i32.add (i32.const -300991625)) - (i32.add (i32.const 219926173)) - (i32.add (i32.const 334179123)) - (i32.add (i32.const -242867819)) - (i32.add (i32.const 2142987352)) - (i32.add (i32.const 1333992621)) - (i32.add (i32.const 1469437666)) - (i32.add (i32.const 1506456897)) - (i32.add (i32.const -2084297302)) - (i32.add (i32.const 1349873045)) - (i32.add (i32.const 1260804134)) - (i32.add (i32.const 516496621)) - (i32.add (i32.const -275393957)) - (i32.add (i32.const 1258623142)) - (i32.add (i32.const 2052269774)) - (i32.add (i32.const -335722458)) - (i32.add (i32.const 707012226)) - (i32.add (i32.const 128672599)) - (i32.add (i32.const -125926610)) - (i32.add (i32.const 547370698)) - (i32.add (i32.const 1848722143)) - (i32.add (i32.const 959717718)) - (i32.add (i32.const 1216354496)) - (i32.add (i32.const 2016399814)) - (i32.add (i32.const -718942479)) - (i32.add (i32.const 1229251315)) - (i32.add (i32.const -1116623472)) - (i32.add (i32.const -726967496)) - (i32.add (i32.const 628549217)) - (i32.add (i32.const 1979437681)) - (i32.add (i32.const 1024093641)) - (i32.add (i32.const 1527895733)) - (i32.add (i32.const -1213276483)) - (i32.add (i32.const 1848706835)) - (i32.add (i32.const 1485476212)) - (i32.add (i32.const 1313057990)) - (i32.add (i32.const 767696976)) - (i32.add (i32.const 1625385874)) - (i32.add (i32.const -154809522)) - (i32.add (i32.const 156362649)) - (i32.add (i32.const -1909048033)) - (i32.add (i32.const 1973026933)) - (i32.add (i32.const 1413448820)) - (i32.add (i32.const -272900805)) - (i32.add (i32.const 1637948746)) - (i32.add (i32.const 332510811)) - (i32.add (i32.const -699612869)) - (i32.add (i32.const -508517858)) - (i32.add (i32.const -177326452)) - (i32.add (i32.const 1718380563)) - (i32.add (i32.const -1873343933)) - (i32.add (i32.const -28155674)) - (i32.add (i32.const -1356869739)) - (i32.add (i32.const 1118663519)) - (i32.add (i32.const -942553707)) - (i32.add (i32.const 786623603)) - (i32.add (i32.const -486059834)) - (i32.add (i32.const 304864360)) - (i32.add (i32.const -2009259747)) - (i32.add (i32.const -741312847)) - (i32.add (i32.const -1174685207)) - (i32.add (i32.const 317687460)) - (i32.add (i32.const -349103645)) - (i32.add (i32.const 245749453)) - (i32.add (i32.const 1735219753)) - (i32.add (i32.const 635706888)) - (i32.add (i32.const 1900626336)) - (i32.add (i32.const 1412503779)) - (i32.add (i32.const -1726785665)) - (i32.add (i32.const 1110587645)) - (i32.add (i32.const 538168642)) - (i32.add (i32.const 156131263)) - (i32.add (i32.const 1650741129)) - (i32.add (i32.const -1278395421)) - (i32.add (i32.const -368376949)) - (i32.add (i32.const 27247898)) - (i32.add (i32.const 1095868004)) - (i32.add (i32.const 858540857)) - (i32.add (i32.const -1871916771)) - (i32.add (i32.const -1401407592)) - (i32.add (i32.const -1582204005)) - (i32.add (i32.const -1461515416)) - (i32.add (i32.const 55778269)) - (i32.add (i32.const 552302808)) - (i32.add (i32.const -39538689)) - (i32.add (i32.const 182102100)) - (i32.add (i32.const 794580643)) - (i32.add (i32.const 153213941)) - (i32.add (i32.const 1002809635)) - (i32.add (i32.const -812513457)) - (i32.add (i32.const 1319741163)) - (i32.add (i32.const -1465228894)) - (i32.add (i32.const -1491688704)) - (i32.add (i32.const -1622580856)) - (i32.add (i32.const 201468620)) - (i32.add (i32.const 1004193476)) - (i32.add (i32.const -787650590)) - (i32.add (i32.const -958390279)) - (i32.add (i32.const 2110526045)) - (i32.add (i32.const 1729152185)) - (i32.add (i32.const -295638224)) - (i32.add (i32.const -36208202)) - (i32.add (i32.const -1415880390)) - (i32.add (i32.const 473660082)) - (i32.add (i32.const -1725974739)) - (i32.add (i32.const -933712464)) - (i32.add (i32.const -72737880)) - (i32.add (i32.const -1718653669)) - (i32.add (i32.const 1388777955)) - (i32.add (i32.const -1293046296)) - (i32.add (i32.const -1189191038)) - (i32.add (i32.const -2001664783)) - (i32.add (i32.const -1876272432)) - (i32.add (i32.const 1402089452)) - (i32.add (i32.const -1804654298)) - (i32.add (i32.const 163723278)) - (i32.add (i32.const 1947575714)) - (i32.add (i32.const 1693599193)) - (i32.add (i32.const -1188727853)) - (i32.add (i32.const -876517169)) - (i32.add (i32.const 1075002678)) - (i32.add (i32.const 1818938058)) - (i32.add (i32.const 826270782)) - (i32.add (i32.const -1699505986)) - (i32.add (i32.const 582976418)) - (i32.add (i32.const -2030034407)) - (i32.add (i32.const 764660320)) - (i32.add (i32.const -333792067)) - (i32.add (i32.const -349192623)) - (i32.add (i32.const -140294653)) - (i32.add (i32.const -954759472)) - (i32.add (i32.const -1988134167)) - (i32.add (i32.const -1394662885)) - (i32.add (i32.const 2119005246)) - (i32.add (i32.const 757683988)) - (i32.add (i32.const -496293519)) - (i32.add (i32.const 1340467281)) - (i32.add (i32.const -675167971)) - (i32.add (i32.const -1291918679)) - (i32.add (i32.const -1669249459)) - (i32.add (i32.const 2081331118)) - (i32.add (i32.const -672665520)) - (i32.add (i32.const -89753430)) - (i32.add (i32.const -1020738840)) - (i32.add (i32.const -804840632)) - (i32.add (i32.const 1206182197)) - (i32.add (i32.const 1184975369)) - (i32.add (i32.const -1724774218)) - (i32.add (i32.const 1391170898)) - (i32.add (i32.const 33453473)) - (i32.add (i32.const -2080796536)) - (i32.add (i32.const -1747930303)) - (i32.add (i32.const 1898316004)) - (i32.add (i32.const -1588126555)) - (i32.add (i32.const 253802055)) - (i32.add (i32.const -1747472575)) - (i32.add (i32.const 1973129739)) - (i32.add (i32.const 873421024)) - (i32.add (i32.const -264127592)) - (i32.add (i32.const -542578416)) - (i32.add (i32.const 172656593)) - (i32.add (i32.const 1318119340)) - (i32.add (i32.const -2050502177)) - (i32.add (i32.const 721639655)) - (i32.add (i32.const 541935464)) - (i32.add (i32.const -1631497237)) - (i32.add (i32.const 303977192)) - (i32.add (i32.const 979610017)) - (i32.add (i32.const 1199196315)) - (i32.add (i32.const -1418028751)) - (i32.add (i32.const 2079105691)) - (i32.add (i32.const 503051886)) - (i32.add (i32.const -1332379163)) - (i32.add (i32.const -788164088)) - (i32.add (i32.const -1529933187)) - (i32.add (i32.const -687267722)) - (i32.add (i32.const 1443504815)) - (i32.add (i32.const -825372923)) - (i32.add (i32.const 465736108)) - (i32.add (i32.const -1161918379)) - (i32.add (i32.const 142940276)) - (i32.add (i32.const -629777928)) - (i32.add (i32.const -144299548)) - (i32.add (i32.const -408459294)) - (i32.add (i32.const -780561638)) - (i32.add (i32.const 1310628185)) - (i32.add (i32.const 1888243045)) - (i32.add (i32.const 1128177816)) - (i32.add (i32.const 1562969708)) - (i32.add (i32.const 1292518152)) - (i32.add (i32.const -1232544637)) - (i32.add (i32.const 1597556197)) - (i32.add (i32.const -2008773459)) - (i32.add (i32.const 992415188)) - (i32.add (i32.const -301058566)) - (i32.add (i32.const 19561647)) - (i32.add (i32.const 185894079)) - (i32.add (i32.const 600570951)) - (i32.add (i32.const -1607170869)) - (i32.add (i32.const -1501486473)) - (i32.add (i32.const -550399349)) - (i32.add (i32.const -1356454099)) - (i32.add (i32.const 1302253441)) - (i32.add (i32.const 1365186546)) - (i32.add (i32.const -789524672)) - (i32.add (i32.const 411913205)) - (i32.add (i32.const 825720452)) - (i32.add (i32.const -1796455556)) - (i32.add (i32.const 834974928)) - (i32.add (i32.const 952035733)) - (i32.add (i32.const 862099091)) - (i32.add (i32.const 307733959)) - (i32.add (i32.const 1540824717)) - (i32.add (i32.const 905727485)) - (i32.add (i32.const -1061581386)) - (i32.add (i32.const -1287220498)) - (i32.add (i32.const -378956695)) - (i32.add (i32.const 1695371406)) - (i32.add (i32.const -1499720925)) - (i32.add (i32.const -93957140)) - (i32.add (i32.const 2104841848)) - (i32.add (i32.const -1608388344)) - (i32.add (i32.const -371101288)) - (i32.add (i32.const 383700061)) - (i32.add (i32.const -561413233)) - (i32.add (i32.const -1716932564)) - (i32.add (i32.const -491479900)) - (i32.add (i32.const -847580623)) - (i32.add (i32.const 1648067823)) - (i32.add (i32.const -912381798)) - (i32.add (i32.const 1319970590)) - (i32.add (i32.const -1450441961)) - (i32.add (i32.const -214742297)) - (i32.add (i32.const -1100943641)) - (i32.add (i32.const -754065891)) - (i32.add (i32.const 984303548)) - (i32.add (i32.const 261458690)) - (i32.add (i32.const 623279130)) - (i32.add (i32.const 614658106)) - (i32.add (i32.const -1895288174)) - (i32.add (i32.const 1144429978)) - (i32.add (i32.const 706414747)) - (i32.add (i32.const -1210905429)) - (i32.add (i32.const -235895516)) - (i32.add (i32.const -645374634)) - (i32.add (i32.const -2014093532)) - (i32.add (i32.const -1170005622)) - (i32.add (i32.const -1317012598)) - (i32.add (i32.const 1092515951)) - (i32.add (i32.const 585936044)) - (i32.add (i32.const 1373299010)) - (i32.add (i32.const -539292201)) - (i32.add (i32.const 1753323027)) - (i32.add (i32.const 669625856)) - (i32.add (i32.const -2074825238)) - (i32.add (i32.const -49590664)) - (i32.add (i32.const -1699699698)) - (i32.add (i32.const 1446341234)) - (i32.add (i32.const 446843982)) - (i32.add (i32.const -1282099170)) - (i32.add (i32.const -530782719)) - (i32.add (i32.const -356189137)) - (i32.add (i32.const 617066671)) - (i32.add (i32.const -556979048)) - (i32.add (i32.const 33661399)) - (i32.add (i32.const 358866536)) - (i32.add (i32.const -1396760300)) - (i32.add (i32.const 1794749875)) - (i32.add (i32.const 1394658328)) - (i32.add (i32.const -2142729594)) - (i32.add (i32.const -960976853)) - (i32.add (i32.const 1976162730)) - (i32.add (i32.const 1003417187)) - (i32.add (i32.const -1896158683)) - (i32.add (i32.const 1768993403)) - (i32.add (i32.const -325243792)) - (i32.add (i32.const 388649110)) - (i32.add (i32.const 1714610227)) - (i32.add (i32.const -1936108512)) - (i32.add (i32.const 1171545819)) - (i32.add (i32.const -475671524)) - (i32.add (i32.const 1855798401)) - (i32.add (i32.const 1767297937)) - (i32.add (i32.const 518853181)) - (i32.add (i32.const 1771390550)) - (i32.add (i32.const -1215943106)) - (i32.add (i32.const 1430719761)) - (i32.add (i32.const -1312161171)) - (i32.add (i32.const 263867330)) - (i32.add (i32.const 2035221645)) - (i32.add (i32.const 1117072281)) - (i32.add (i32.const -1226088627)) - (i32.add (i32.const 80463092)) - (i32.add (i32.const 449527870)) - (i32.add (i32.const 1372846353)) - (i32.add (i32.const -2125998370)) - (i32.add (i32.const -1883886150)) - (i32.add (i32.const -3736848)) - (i32.add (i32.const 1458415937)) - (i32.add (i32.const 1961724564)) - (i32.add (i32.const -582640514)) - (i32.add (i32.const 1536721986)) - (i32.add (i32.const 984000669)) - (i32.add (i32.const -336323951)) - (i32.add (i32.const 613309585)) - (i32.add (i32.const 1497253084)) - (i32.add (i32.const 1279346707)) - (i32.add (i32.const -1746446371)) - (i32.add (i32.const -646370994)) - (i32.add (i32.const 1396992472)) - (i32.add (i32.const -513116639)) - (i32.add (i32.const -1052804190)) - (i32.add (i32.const 1401858089)) - (i32.add (i32.const 348648304)) - (i32.add (i32.const 916737125)) - (i32.add (i32.const -23309739)) - (i32.add (i32.const 1023920916)) - (i32.add (i32.const 1860433160)) - (i32.add (i32.const 268835361)) - (i32.add (i32.const -1199957269)) - (i32.add (i32.const 513578618)) - (i32.add (i32.const 120278446)) - (i32.add (i32.const 916160350)) - (i32.add (i32.const 1488917950)) - (i32.add (i32.const -211601170)) - (i32.add (i32.const 1711655000)) - (i32.add (i32.const -2032801326)) - (i32.add (i32.const 688830856)) - (i32.add (i32.const 2127446741)) - (i32.add (i32.const 1016982668)) - (i32.add (i32.const -1359361372)) - (i32.add (i32.const -1583465518)) - (i32.add (i32.const -372721929)) - (i32.add (i32.const -1925773341)) - (i32.add (i32.const 2059185850)) - (i32.add (i32.const -2087528565)) - (i32.add (i32.const -299427198)) - (i32.add (i32.const 1535044947)) - (i32.add (i32.const 1445351792)) - (i32.add (i32.const 249029674)) - (i32.add (i32.const -114750819)) - (i32.add (i32.const 1509158926)) - (i32.add (i32.const 568965733)) - (i32.add (i32.const 810938223)) - (i32.add (i32.const -79433280)) - (i32.add (i32.const -878988940)) - (i32.add (i32.const 1305637237)) - (i32.add (i32.const 1298348983)) - (i32.add (i32.const 138005750)) - (i32.add (i32.const -230193819)) - (i32.add (i32.const 319593263)) - (i32.add (i32.const -1998486647)) - (i32.add (i32.const 1415779044)) - (i32.add (i32.const -1076108210)) - (i32.add (i32.const 561604380)) - (i32.add (i32.const -1866679080)) - (i32.add (i32.const -1641004069)) - (i32.add (i32.const 1609871470)) - (i32.add (i32.const -926327584)) - (i32.add (i32.const -859205407)) - (i32.add (i32.const 1550849620)) - (i32.add (i32.const -487533839)) - (i32.add (i32.const 629366840)) - (i32.add (i32.const 645427603)) - (i32.add (i32.const -738999166)) - (i32.add (i32.const 284681046)) - (i32.add (i32.const 1063298142)) - (i32.add (i32.const -1748502870)) - (i32.add (i32.const 1336271218)) - (i32.add (i32.const -1261574273)) - (i32.add (i32.const 67203086)) - (i32.add (i32.const -694051126)) - (i32.add (i32.const -34031704)) - (i32.add (i32.const 1899582563)) - (i32.add (i32.const 482472338)) - (i32.add (i32.const 467843361)) - (i32.add (i32.const 403282088)) - (i32.add (i32.const 1021894559)) - (i32.add (i32.const 245430230)) - (i32.add (i32.const -1614286233)) - (i32.add (i32.const 125771916)) - (i32.add (i32.const -359075354)) - (i32.add (i32.const -2107375650)) - (i32.add (i32.const -1772529260)) - (i32.add (i32.const -1028965952)) - (i32.add (i32.const 1655949527)) - (i32.add (i32.const 2017998761)) - (i32.add (i32.const -579102627)) - (i32.add (i32.const -691665256)) - (i32.add (i32.const -312854804)) - (i32.add (i32.const 1017683913)) - (i32.add (i32.const 1594524808)) - (i32.add (i32.const -717928086)) - (i32.add (i32.const 1446718427)) - (i32.add (i32.const -171591215)) - (i32.add (i32.const 365532688)) - (i32.add (i32.const 1469938931)) - (i32.add (i32.const -1910700289)) - (i32.add (i32.const -1800913184)) - (i32.add (i32.const 1052645084)) - (i32.add (i32.const -466248255)) - (i32.add (i32.const 1198267163)) - (i32.add (i32.const 100368235)) - (i32.add (i32.const 348909085)) - (i32.add (i32.const -6922013)) - (i32.add (i32.const -1659737721)) - (i32.add (i32.const 1589246693)) - (i32.add (i32.const 1519198897)) - (i32.add (i32.const -899728648)) - (i32.add (i32.const -811474950)) - (i32.add (i32.const -741060878)) - (i32.add (i32.const -2072130912)) - (i32.add (i32.const 464060933)) - (i32.add (i32.const -1427848280)) - (i32.add (i32.const -1352393087)) - (i32.add (i32.const -1660020431)) - (i32.add (i32.const -82437007)) - (i32.add (i32.const -1645245566)) - (i32.add (i32.const 1907349706)) - (i32.add (i32.const 836253527)) - (i32.add (i32.const 60940666)) - (i32.add (i32.const -581398446)) - (i32.add (i32.const -1005389224)) - (i32.add (i32.const -912250429)) - (i32.add (i32.const 868975933)) - (i32.add (i32.const -531971475)) - (i32.add (i32.const -1281082077)) - (i32.add (i32.const -289771861)) - (i32.add (i32.const 1320387379)) - (i32.add (i32.const 1725470161)) - (i32.add (i32.const 954805292)) - (i32.add (i32.const -407528627)) - (i32.add (i32.const -1787190010)) - (i32.add (i32.const 564223641)) - (i32.add (i32.const -696842936)) - (i32.add (i32.const -710929795)) - (i32.add (i32.const 1203746292)) - (i32.add (i32.const 1835031310)) - (i32.add (i32.const -1596468519)) - (i32.add (i32.const -2033275477)) - (i32.add (i32.const -185572238)) - (i32.add (i32.const -144239927)) - (i32.add (i32.const -753232257)) - (i32.add (i32.const -1964111857)) - (i32.add (i32.const -1565797995)) - (i32.add (i32.const 360897898)) - (i32.add (i32.const -1865441010)) - (i32.add (i32.const -1573878507)) - (i32.add (i32.const 1381759532)) - (i32.add (i32.const -803845363)) - (i32.add (i32.const -105178320)) - (i32.add (i32.const -1807364406)) - (i32.add (i32.const 665837630)) - (i32.add (i32.const 117439692)) - (i32.add (i32.const -1914818990)) - (i32.add (i32.const 1987295933)) - (i32.add (i32.const -387520047)) - (i32.add (i32.const -281926061)) - (i32.add (i32.const 569811567)) - (i32.add (i32.const 259984127)) - (i32.add (i32.const 55682426)) - (i32.add (i32.const 801192726)) - (i32.add (i32.const 1804522704)) - (i32.add (i32.const 220814284)) - (i32.add (i32.const -2124610548)) - (i32.add (i32.const 569242427)) - (i32.add (i32.const 2028868240)) - (i32.add (i32.const 1686990891)) - (i32.add (i32.const 743038841)) - (i32.add (i32.const -620325595)) - (i32.add (i32.const 1545209570)) - (i32.add (i32.const -739434200)) - (i32.add (i32.const 1020871145)) - (i32.add (i32.const 522599146)) - (i32.add (i32.const 680712393)) - (i32.add (i32.const 1307458042)) - (i32.add (i32.const -113698946)) - (i32.add (i32.const 1476140499)) - (i32.add (i32.const -644098727)) - (i32.add (i32.const -1573058475)) - (i32.add (i32.const 1281724897)) - (i32.add (i32.const -322073021)) - (i32.add (i32.const 1700805904)) - (i32.add (i32.const -597148624)) - (i32.add (i32.const -432587710)) - (i32.add (i32.const 278050902)) - (i32.add (i32.const -2107921244)) - (i32.add (i32.const 768267787)) - (i32.add (i32.const 1807301545)) - (i32.add (i32.const -1020768455)) - (i32.add (i32.const 1690012533)) - (i32.add (i32.const 149365556)) - (i32.add (i32.const 358936533)) - (i32.add (i32.const -2069936591)) - (i32.add (i32.const 1153969412)) - (i32.add (i32.const -994358445)) - (i32.add (i32.const -1870524353)) - (i32.add (i32.const 1345054814)) - (i32.add (i32.const -1958365677)) - (i32.add (i32.const 74018804)) - (i32.add (i32.const 79343093)) - (i32.add (i32.const 1506602574)) - (i32.add (i32.const 1015459871)) - (i32.add (i32.const 1857521577)) - (i32.add (i32.const -1234068308)) - (i32.add (i32.const 235127692)) - (i32.add (i32.const -1043194685)) - (i32.add (i32.const 693968958)) - (i32.add (i32.const 1366470816)) - (i32.add (i32.const 1917123194)) - (i32.add (i32.const -1921921181)) - (i32.add (i32.const -309920051)) - (i32.add (i32.const 388587678)) - (i32.add (i32.const 963474845)) - (i32.add (i32.const -612600521)) - (i32.add (i32.const 725441336)) - (i32.add (i32.const 1836317577)) - (i32.add (i32.const 1073590276)) - (i32.add (i32.const -559877682)) - (i32.add (i32.const -2108051062)) - (i32.add (i32.const 1106588595)) - (i32.add (i32.const 206680595)) - (i32.add (i32.const 1020557298)) - (i32.add (i32.const -1461274566)) - (i32.add (i32.const -542582659)) - (i32.add (i32.const -1851513041)) - (i32.add (i32.const -147919258)) - (i32.add (i32.const 1614744302)) - (i32.add (i32.const 1609781749)) - (i32.add (i32.const 1483032889)) - (i32.add (i32.const 1346676814)) - (i32.add (i32.const -1115445620)) - (i32.add (i32.const 1740789073)) - (i32.add (i32.const -2117531798)) - (i32.add (i32.const -494483312)) - (i32.add (i32.const -99075369)) - (i32.add (i32.const 1221035518)) - (i32.add (i32.const -625736026)) - (i32.add (i32.const 1957132892)) - (i32.add (i32.const 1260932165)) - (i32.add (i32.const -1922171397)) - (i32.add (i32.const -932674589)) - (i32.add (i32.const 802936779)) - (i32.add (i32.const -1190314234)) - (i32.add (i32.const -33399874)) - (i32.add (i32.const 129170838)) - (i32.add (i32.const -10677274)) - (i32.add (i32.const 827444516)) - (i32.add (i32.const -2103857653)) - (i32.add (i32.const -557769655)) - (i32.add (i32.const -1955353326)) - (i32.add (i32.const 513167989)) - (i32.add (i32.const -608632129)) - (i32.add (i32.const 1719815958)) - (i32.add (i32.const 2085200326)) - (i32.add (i32.const 504661448)) - (i32.add (i32.const 1967214387)) - (i32.add (i32.const 1135867667)) - (i32.add (i32.const 2084294074)) - (i32.add (i32.const -1104738558)) - (i32.add (i32.const -1377290956)) - (i32.add (i32.const -163362708)) - (i32.add (i32.const -730197618)) - (i32.add (i32.const -2030522595)) - (i32.add (i32.const -461172372)) - (i32.add (i32.const 291803991)) - (i32.add (i32.const 1344727612)) - (i32.add (i32.const 1921825232)) - (i32.add (i32.const 1933437681)) - (i32.add (i32.const -121670728)) - (i32.add (i32.const 1743620613)) - (i32.add (i32.const -1037232213)) - (i32.add (i32.const -1323824322)) - (i32.add (i32.const -1146959483)) - (i32.add (i32.const 1957167154)) - (i32.add (i32.const 467245904)) - (i32.add (i32.const 156042646)) - (i32.add (i32.const 149299705)) - (i32.add (i32.const 40214773)) - (i32.add (i32.const 1146722426)) - (i32.add (i32.const 96529547)) - (i32.add (i32.const -1667353137)) - (i32.add (i32.const 114470724)) - (i32.add (i32.const -947464075)) - (i32.add (i32.const 178446468)) - (i32.add (i32.const -424257)) - (i32.add (i32.const -1176273934)) - (i32.add (i32.const 25061687)) - (i32.add (i32.const -692203193)) - (i32.add (i32.const -110530852)) - (i32.add (i32.const -878249573)) - (i32.add (i32.const 1035179881)) - (i32.add (i32.const -519730417)) - (i32.add (i32.const -1391527909)) - (i32.add (i32.const -2071608676)) - (i32.add (i32.const 1140155293)) - (i32.add (i32.const -1801058903)) - (i32.add (i32.const 399896343)) - (i32.add (i32.const -1792064445)) - (i32.add (i32.const 246682668)) - (i32.add (i32.const 1038779502)) - (i32.add (i32.const 1453101772)) - (i32.add (i32.const -987427462)) - (i32.add (i32.const 2143219902)) - (i32.add (i32.const 1165477516)) - (i32.add (i32.const 1780289776)) - (i32.add (i32.const -134383226)) - (i32.add (i32.const 1830803715)) - (i32.add (i32.const 1033062482)) - (i32.add (i32.const -707259545)) - (i32.add (i32.const 383104128)) - (i32.add (i32.const 1664267763)) - (i32.add (i32.const -1563363268)) - (i32.add (i32.const -1405438034)) - (i32.add (i32.const 1992600625)) - (i32.add (i32.const 1723658503)) - (i32.add (i32.const 852962577)) - (i32.add (i32.const 1402266939)) - (i32.add (i32.const 76669171)) - (i32.add (i32.const -1024547623)) - (i32.add (i32.const -408751561)) - (i32.add (i32.const -170213827)) - (i32.add (i32.const 483408624)) - (i32.add (i32.const 844170230)) - (i32.add (i32.const 2128402312)) - (i32.add (i32.const -493112133)) - (i32.add (i32.const -1828436501)) - (i32.add (i32.const -725667598)) - (i32.add (i32.const -1024507288)) - (i32.add (i32.const 1558790855)) - (i32.add (i32.const 1099666942)) - (i32.add (i32.const 1164129585)) - (i32.add (i32.const -1775017392)) - (i32.add (i32.const 797508994)) - (i32.add (i32.const -1875934322)) - (i32.add (i32.const 1280638554)) - (i32.add (i32.const -1303799881)) - (i32.add (i32.const 1290662536)) - (i32.add (i32.const -630403010)) - (i32.add (i32.const 2112598312)) - (i32.add (i32.const -2086057335)) - (i32.add (i32.const -1107288715)) - (i32.add (i32.const -651127061)) - (i32.add (i32.const 1575677380)) - (i32.add (i32.const 339569171)) - (i32.add (i32.const -955757223)) - (i32.add (i32.const -489299060)) - (i32.add (i32.const 1269934343)) - (i32.add (i32.const -728372471)) - (i32.add (i32.const -682380142)) - (i32.add (i32.const -1295136738)) - (i32.add (i32.const 1810726620)) - (i32.add (i32.const 1313888491)) - (i32.add (i32.const -1942239014)) - (i32.add (i32.const -1692735741)) - (i32.add (i32.const 422639114)) - (i32.add (i32.const -681724955)) - (i32.add (i32.const -13564749)) - (i32.add (i32.const -58157330)) - (i32.add (i32.const -546433307)) - (i32.add (i32.const 737520110)) - (i32.add (i32.const 1783200246)) - (i32.add (i32.const -1417394621)) - (i32.add (i32.const -1737535376)) - (i32.add (i32.const -1938915458)) - (i32.add (i32.const -2118871013)) - (i32.add (i32.const 594068887)) - (i32.add (i32.const -1951089694)) - (i32.add (i32.const 1351369140)) - (i32.add (i32.const 178316520)) - (i32.add (i32.const -1487980923)) - (i32.add (i32.const -215510240)) - (i32.add (i32.const 86379580)) - (i32.add (i32.const 1913285034)) - (i32.add (i32.const -335875567)) - (i32.add (i32.const 820687521)) - (i32.add (i32.const -440753266)) - (i32.add (i32.const 1374914434)) - (i32.add (i32.const -920621159)) - (i32.add (i32.const -21258542)) - (i32.add (i32.const -842977140)) - (i32.add (i32.const -1253001809)) - (i32.add (i32.const -1526581539)) - (i32.add (i32.const 1263856316)) - (i32.add (i32.const -1861660315)) - (i32.add (i32.const -1241565316)) - (i32.add (i32.const -523522262)) - (i32.add (i32.const -2137610436)) - (i32.add (i32.const -247095680)) - (i32.add (i32.const 1674747979)) - (i32.add (i32.const -505855996)) - (i32.add (i32.const 1981973646)) - (i32.add (i32.const 566069881)) - (i32.add (i32.const -1599553334)) - (i32.add (i32.const -1416590730)) - (i32.add (i32.const 689478736)) - (i32.add (i32.const 1328268183)) - (i32.add (i32.const 507775266)) - (i32.add (i32.const -1571874401)) - (i32.add (i32.const -1726503082)) - (i32.add (i32.const -853228836)) - (i32.add (i32.const -2144915164)) - (i32.add (i32.const -1968020673)) - (i32.add (i32.const 841086375)) - (i32.add (i32.const -1046638926)) - (i32.add (i32.const -1229631002)) - (i32.add (i32.const 539330538)) - (i32.add (i32.const 1502801846)) - (i32.add (i32.const -2055354613)) - (i32.add (i32.const -994194722)) - (i32.add (i32.const 2031798047)) - (i32.add (i32.const 1922685066)) - (i32.add (i32.const -991174852)) - (i32.add (i32.const 1113177477)) - (i32.add (i32.const -621320233)) - (i32.add (i32.const 980086518)) - (i32.add (i32.const 1403266399)) - (i32.add (i32.const 385588744)) - (i32.add (i32.const 1268705792)) - (i32.add (i32.const -2036577142)) - (i32.add (i32.const 1927442860)) - (i32.add (i32.const -607415659)) - (i32.add (i32.const 1804689810)) - (i32.add (i32.const 1851831820)) - (i32.add (i32.const -1383720545)) - (i32.add (i32.const -1583897538)) - (i32.add (i32.const -3145480)) - (i32.add (i32.const 130935114)) - (i32.add (i32.const 934373311)) - (i32.add (i32.const 1064626651)) - (i32.add (i32.const 282386998)) - (i32.add (i32.const 1252127098)) - (i32.add (i32.const 2078124961)) - (i32.add (i32.const 1999363455)) - (i32.add (i32.const 194061981)) - (i32.add (i32.const -1932801333)) - (i32.add (i32.const -1876018785)) - (i32.add (i32.const -1521229379)) - (i32.add (i32.const 1867716653)) - (i32.add (i32.const -1775366044)) - (i32.add (i32.const 1110143662)) - (i32.add (i32.const 941741255)) - (i32.add (i32.const -1865877755)) - (i32.add (i32.const -609045850)) - (i32.add (i32.const -823865302)) - (i32.add (i32.const -1127693520)) - (i32.add (i32.const 1504363147)) - (i32.add (i32.const 929104181)) - (i32.add (i32.const 422943890)) - (i32.add (i32.const 1587204275)) - (i32.add (i32.const 1040287723)) - (i32.add (i32.const 887611725)) - (i32.add (i32.const 1425616729)) - (i32.add (i32.const 991170431)) - (i32.add (i32.const -1859348169)) - (i32.add (i32.const -1146017586)) - (i32.add (i32.const 1564640299)) - (i32.add (i32.const -927544123)) - (i32.add (i32.const 1011008312)) - (i32.add (i32.const -1888609596)) - (i32.add (i32.const 2108494031)) - (i32.add (i32.const 740963240)) - (i32.add (i32.const -1064454933)) - (i32.add (i32.const 1251433841)) - (i32.add (i32.const -359360524)) - (i32.add (i32.const -641591301)) - (i32.add (i32.const 1999163397)) - (i32.add (i32.const -475419535)) - (i32.add (i32.const -529397068)) - (i32.add (i32.const 347419540)) - (i32.add (i32.const -1974409564)) - (i32.add (i32.const -1305789755)) - (i32.add (i32.const -647675565)) - (i32.add (i32.const -177576863)) - (i32.add (i32.const 2105410237)) - (i32.add (i32.const 801009297)) - (i32.add (i32.const 603503390)) - (i32.add (i32.const -94810223)) - (i32.add (i32.const -2121157624)) - (i32.add (i32.const 2063384005)) - (i32.add (i32.const -1468220322)) - (i32.add (i32.const -734887309)) - (i32.add (i32.const 1516196936)) - (i32.add (i32.const 410880547)) - (i32.add (i32.const -1532763900)) - (i32.add (i32.const -1996374147)) - (i32.add (i32.const 1597577186)) - (i32.add (i32.const -1316810633)) - (i32.add (i32.const 1553229224)) - (i32.add (i32.const 1729748742)) - (i32.add (i32.const -366606573)) - (i32.add (i32.const 1014057648)) - (i32.add (i32.const 1672812994)) - (i32.add (i32.const 1234477921)) - (i32.add (i32.const 1804000585)) - (i32.add (i32.const -282127022)) - (i32.add (i32.const 645108818)) - (i32.add (i32.const 764883776)) - (i32.add (i32.const 1585541935)) - (i32.add (i32.const -1416991916)) - (i32.add (i32.const -1720255280)) - (i32.add (i32.const -1003695709)) - (i32.add (i32.const -525670188)) - (i32.add (i32.const -1108468657)) - (i32.add (i32.const -1476524460)) - (i32.add (i32.const -1649997275)) - (i32.add (i32.const 757038967)) - (i32.add (i32.const 1198746001)) - (i32.add (i32.const 107087392)) - (i32.add (i32.const -1600265106)) - (i32.add (i32.const -959790678)) - (i32.add (i32.const 1319803671)) - (i32.add (i32.const 1165834468)) - (i32.add (i32.const 543034290)) - (i32.add (i32.const -2137534330)) - (i32.add (i32.const -1447606098)) - (i32.add (i32.const 37870119)) - (i32.add (i32.const -1744327378)) - (i32.add (i32.const 260685729)) - (i32.add (i32.const -1634869100)) - (i32.add (i32.const 1772985846)) - (i32.add (i32.const -775694366)) - (i32.add (i32.const 250209860)) - (i32.add (i32.const 9799627)) - (i32.add (i32.const -2138078754)) - (i32.add (i32.const 1229532786)) - (i32.add (i32.const -1765101784)) - (i32.add (i32.const 2130645154)) - (i32.add (i32.const 1445556998)) - (i32.add (i32.const 728584747)) - (i32.add (i32.const -1350553746)) - (i32.add (i32.const -673624499)) - (i32.add (i32.const 1039078717)) - (i32.add (i32.const -2035643376)) - (i32.add (i32.const -82150096)) - (i32.add (i32.const -1686176125)) - (i32.add (i32.const -926344101)) - (i32.add (i32.const -1350403869)) - (i32.add (i32.const -141162556)) - (i32.add (i32.const 906553420)) - (i32.add (i32.const 1722288504)) - (i32.add (i32.const -922834148)) - (i32.add (i32.const -99455315)) - (i32.add (i32.const -1199303837)) - (i32.add (i32.const 979686940)) - (i32.add (i32.const 130138873)) - (i32.add (i32.const 1681919907)) - (i32.add (i32.const -1336546521)) - (i32.add (i32.const -1345343301)) - (i32.add (i32.const 357388626)) - (i32.add (i32.const -722289103)) - (i32.add (i32.const -1321840769)) - (i32.add (i32.const -481097425)) - (i32.add (i32.const 318983241)) - (i32.add (i32.const -173728861)) - (i32.add (i32.const -1846893643)) - (i32.add (i32.const 557980499)) - (i32.add (i32.const 1839296692)) - (i32.add (i32.const 1770268113)) - (i32.add (i32.const -704615601)) - (i32.add (i32.const -283413836)) - (i32.add (i32.const -774792713)) - (i32.add (i32.const 1855276928)) - (i32.add (i32.const 1471773425)) - (i32.add (i32.const -1547911304)) - (i32.add (i32.const -1226071165)) - (i32.add (i32.const 947205042)) - (i32.add (i32.const -653397535)) - (i32.add (i32.const -1269278992)) - (i32.add (i32.const -1708158312)) - (i32.add (i32.const 1286992286)) - (i32.add (i32.const 1601605463)) - (i32.add (i32.const -593352216)) - (i32.add (i32.const -2061050251)) - (i32.add (i32.const 1265624964)) - (i32.add (i32.const -1775917203)) - (i32.add (i32.const -914591175)) - (i32.add (i32.const -2027838845)) - (i32.add (i32.const 2056485060)) - (i32.add (i32.const -1969844316)) - (i32.add (i32.const 1391725522)) - (i32.add (i32.const -1312433364)) - (i32.add (i32.const 475300332)) - (i32.add (i32.const 791207241)) - (i32.add (i32.const 816418843)) - (i32.add (i32.const 277646171)) - (i32.add (i32.const 1324673122)) - (i32.add (i32.const -224770167)) - (i32.add (i32.const 1104099525)) - (i32.add (i32.const 726982981)) - (i32.add (i32.const -458706907)) - (i32.add (i32.const 48421239)) - (i32.add (i32.const 1006147001)) - (i32.add (i32.const 1058512731)) - (i32.add (i32.const -1808232275)) - (i32.add (i32.const 1589546799)) - (i32.add (i32.const 2050366524)) - (i32.add (i32.const -574108041)) - (i32.add (i32.const -916543733)) - (i32.add (i32.const -432837333)) - (i32.add (i32.const 312805295)) - (i32.add (i32.const 390251652)) - (i32.add (i32.const -721848933)) - (i32.add (i32.const 1542197209)) - (i32.add (i32.const 1104561494)) - (i32.add (i32.const -1039843194)) - (i32.add (i32.const -360392960)) - (i32.add (i32.const -140680151)) - (i32.add (i32.const 540502923)) - (i32.add (i32.const -673996874)) - (i32.add (i32.const 740053611)) - (i32.add (i32.const -1283933740)) - (i32.add (i32.const 399931640)) - (i32.add (i32.const -984133505)) - (i32.add (i32.const -380980166)) - (i32.add (i32.const 157003206)) - (i32.add (i32.const -2086187941)) - (i32.add (i32.const -1013242627)) - (i32.add (i32.const 1951264346)) - (i32.add (i32.const -1498766940)) - (i32.add (i32.const -757965001)) - (i32.add (i32.const -1451828558)) - (i32.add (i32.const 2020200220)) - (i32.add (i32.const 1756368585)) - (i32.add (i32.const 998035611)) - (i32.add (i32.const 1923905911)) - (i32.add (i32.const 60814906)) - (i32.add (i32.const -333885444)) - (i32.add (i32.const -1562920117)) - (i32.add (i32.const 1444576127)) - (i32.add (i32.const 22633617)) - (i32.add (i32.const 1310614742)) - (i32.add (i32.const -797229061)) - (i32.add (i32.const -1114552162)) - (i32.add (i32.const 1010991002)) - (i32.add (i32.const -1232370985)) - (i32.add (i32.const -753481658)) - (i32.add (i32.const 1991634163)) - (i32.add (i32.const 1299065315)) - (i32.add (i32.const -1171047843)) - (i32.add (i32.const -170251330)) - (i32.add (i32.const 196094713)) - (i32.add (i32.const -565735348)) - (i32.add (i32.const 1069519115)) - (i32.add (i32.const 1560544691)) - (i32.add (i32.const -318514304)) - (i32.add (i32.const -515430523)) - (i32.add (i32.const -354704245)) - (i32.add (i32.const 1855856603)) - (i32.add (i32.const -1835917748)) - (i32.add (i32.const -319050990)) - (i32.add (i32.const 402985389)) - (i32.add (i32.const -1981653160)) - (i32.add (i32.const 674549530)) - (i32.add (i32.const -681060566)) - (i32.add (i32.const -953547525)) - (i32.add (i32.const -1060486883)) - (i32.add (i32.const 96415952)) - (i32.add (i32.const 601093814)) - (i32.add (i32.const -1903609739)) - (i32.add (i32.const 1421939617)) - (i32.add (i32.const -1898525736)) - (i32.add (i32.const -1610760334)) - (i32.add (i32.const 479447340)) - (i32.add (i32.const 1327022557)) - (i32.add (i32.const -185520118)) - (i32.add (i32.const 1354953202)) - (i32.add (i32.const 1160329475)) - (i32.add (i32.const -2097623402)) - (i32.add (i32.const 203675278)) - (i32.add (i32.const 930942272)) - (i32.add (i32.const -1235601544)) - (i32.add (i32.const 903050968)) - (i32.add (i32.const -1446700783)) - (i32.add (i32.const -895612623)) - (i32.add (i32.const 1353796058)) - (i32.add (i32.const -2099637479)) - (i32.add (i32.const 1964582083)) - (i32.add (i32.const -2116309410)) - (i32.add (i32.const -666340420)) - (i32.add (i32.const 1913671907)) - (i32.add (i32.const -836266908)) - (i32.add (i32.const 941045777)) - (i32.add (i32.const 629347766)) - (i32.add (i32.const -884470920)) - (i32.add (i32.const 957112554)) - (i32.add (i32.const 602754990)) - (i32.add (i32.const -303895936)) - (i32.add (i32.const 773740183)) - (i32.add (i32.const 606081326)) - (i32.add (i32.const 78520711)) - (i32.add (i32.const -1911988971)) - (i32.add (i32.const -437218912)) - (i32.add (i32.const 304808377)) - (i32.add (i32.const -1705096074)) - (i32.add (i32.const -213980426)) - (i32.add (i32.const 1677357275)) - (i32.add (i32.const -644371930)) - (i32.add (i32.const 2075680941)) - (i32.add (i32.const -1872125626)) - (i32.add (i32.const -1213541413)) - (i32.add (i32.const -2031034578)) - (i32.add (i32.const 1775954888)) - (i32.add (i32.const 1244179370)) - (i32.add (i32.const 262021171)) - (i32.add (i32.const 1865719961)) - (i32.add (i32.const -1288174033)) - (i32.add (i32.const 178480248)) - (i32.add (i32.const 970419676)) - (i32.add (i32.const 419388549)) - (i32.add (i32.const -794287412)) - (i32.add (i32.const -994855166)) - (i32.add (i32.const -300507698)) - (i32.add (i32.const 1175408621)) - (i32.add (i32.const -1518470486)) - (i32.add (i32.const 350035809)) - (i32.add (i32.const -1622619270)) - (i32.add (i32.const -207566928)) - (i32.add (i32.const 932258215)) - (i32.add (i32.const -276123960)) - (i32.add (i32.const -2080584624)) - (i32.add (i32.const 1784990244)) - (i32.add (i32.const 1942219689)) - (i32.add (i32.const -1985488937)) - (i32.add (i32.const -434670380)) - (i32.add (i32.const 801979221)) - (i32.add (i32.const 620054727)) - (i32.add (i32.const 62337587)) - (i32.add (i32.const -1671295569)) - (i32.add (i32.const -1231104871)) - (i32.add (i32.const 617691563)) - (i32.add (i32.const -2069338226)) - (i32.add (i32.const -58697494)) - (i32.add (i32.const -1196924507)) - (i32.add (i32.const 3707949)) - (i32.add (i32.const -821867325)) - (i32.add (i32.const -2092363939)) - (i32.add (i32.const 134896899)) - (i32.add (i32.const 2084871762)) - (i32.add (i32.const 210121211)) - (i32.add (i32.const 1640815132)) - (i32.add (i32.const -209246891)) - (i32.add (i32.const -1204903697)) - (i32.add (i32.const -2066092125)) - (i32.add (i32.const 1419626700)) - (i32.add (i32.const -815485338)) - (i32.add (i32.const 297801139)) - (i32.add (i32.const -813140778)) - (i32.add (i32.const 1202046266)) - (i32.add (i32.const 887154643)) - (i32.add (i32.const -497759913)) - (i32.add (i32.const 1103793907)) - (i32.add (i32.const 1256700751)) - (i32.add (i32.const 1492960353)) - (i32.add (i32.const -1270421336)) - (i32.add (i32.const 241565181)) - (i32.add (i32.const -2018184591)) - (i32.add (i32.const -875730777)) - (i32.add (i32.const -66704489)) - (i32.add (i32.const 353186164)) - (i32.add (i32.const 2008088531)) - (i32.add (i32.const -70567652)) - (i32.add (i32.const -1769191607)) - (i32.add (i32.const -1430676087)) - (i32.add (i32.const 1501378222)) - (i32.add (i32.const -307214256)) - (i32.add (i32.const 984650026)) - (i32.add (i32.const 2098158407)) - (i32.add (i32.const -205489881)) - (i32.add (i32.const -1485536932)) - (i32.add (i32.const -658862867)) - (i32.add (i32.const 1445908773)) - (i32.add (i32.const 652860568)) - (i32.add (i32.const -359310430)) - (i32.add (i32.const 482128704)) - (i32.add (i32.const -392551750)) - (i32.add (i32.const -156383438)) - (i32.add (i32.const -898508763)) - (i32.add (i32.const -1215805126)) - (i32.add (i32.const -138604304)) - (i32.add (i32.const -538869152)) - (i32.add (i32.const 1552645821)) - (i32.add (i32.const -570531060)) - (i32.add (i32.const -1284722811)) - (i32.add (i32.const 1985281274)) - (i32.add (i32.const 777231024)) - (i32.add (i32.const -820055029)) - (i32.add (i32.const -1467283961)) - (i32.add (i32.const -1291388044)) - (i32.add (i32.const 1140724488)) - (i32.add (i32.const 1901919269)) - (i32.add (i32.const -1002100487)) - (i32.add (i32.const -710907673)) - (i32.add (i32.const -1469095860)) - (i32.add (i32.const 344835381)) - (i32.add (i32.const -453104918)) - (i32.add (i32.const -1939519017)) - (i32.add (i32.const -1284873922)) - (i32.add (i32.const -730271486)) - (i32.add (i32.const -862503046)) - (i32.add (i32.const -828211060)) - (i32.add (i32.const -930283277)) - (i32.add (i32.const 1867527064)) - (i32.add (i32.const -1025768881)) - (i32.add (i32.const -1555199053)) - (i32.add (i32.const -542392739)) - (i32.add (i32.const -19550973)) - (i32.add (i32.const -1671614812)) - (i32.add (i32.const 1062145848)) - (i32.add (i32.const 1413563954)) - (i32.add (i32.const -1357322865)) - (i32.add (i32.const 164943488)) - (i32.add (i32.const 951748462)) - (i32.add (i32.const -969203675)) - (i32.add (i32.const -498908778)) - (i32.add (i32.const -122630003)) - (i32.add (i32.const -310772056)) - (i32.add (i32.const 802836634)) - (i32.add (i32.const 1944351418)) - (i32.add (i32.const -293817557)) - (i32.add (i32.const 1811274205)) - (i32.add (i32.const 1595687076)) - (i32.add (i32.const 924646566)) - (i32.add (i32.const -112750791)) - (i32.add (i32.const 1604406006)) - (i32.add (i32.const -1447431887)) - (i32.add (i32.const 290966416)) - (i32.add (i32.const 650221514)) - (i32.add (i32.const -475524805)) - (i32.add (i32.const 2015724702)) - (i32.add (i32.const 1952090085)) - (i32.add (i32.const 119920695)) - (i32.add (i32.const 1496873233)) - (i32.add (i32.const -1228205520)) - (i32.add (i32.const -619293941)) - (i32.add (i32.const -1886292864)) - (i32.add (i32.const 1401367477)) - (i32.add (i32.const 107614122)) - (i32.add (i32.const 1995017479)) - (i32.add (i32.const -1850836723)) - (i32.add (i32.const 1781493101)) - (i32.add (i32.const -1105669769)) - (i32.add (i32.const -1955212580)) - (i32.add (i32.const -1094428609)) - (i32.add (i32.const 499205234)) - (i32.add (i32.const -141638056)) - (i32.add (i32.const -1573233173)) - (i32.add (i32.const 1461593879)) - (i32.add (i32.const -1973597310)) - (i32.add (i32.const -1120679879)) - (i32.add (i32.const 2053836207)) - (i32.add (i32.const -1680363881)) - (i32.add (i32.const -406516358)) - (i32.add (i32.const -1636093345)) - (i32.add (i32.const -361792597)) - (i32.add (i32.const -1133581038)) - (i32.add (i32.const 1776163606)) - (i32.add (i32.const 229514637)) - (i32.add (i32.const -572326461)) - (i32.add (i32.const -1152082373)) - (i32.add (i32.const 1038944437)) - (i32.add (i32.const -1685749360)) - (i32.add (i32.const 1502671542)) - (i32.add (i32.const 586893318)) - (i32.add (i32.const 982290440)) - (i32.add (i32.const 1358046782)) - (i32.add (i32.const -1972682382)) - (i32.add (i32.const 1444190549)) - (i32.add (i32.const 618215436)) - (i32.add (i32.const 283023848)) - (i32.add (i32.const -1697256007)) - (i32.add (i32.const -1695074724)) - (i32.add (i32.const 405814181)) - (i32.add (i32.const -211771813)) - (i32.add (i32.const -239547658)) - (i32.add (i32.const -927943362)) - (i32.add (i32.const -988206936)) - (i32.add (i32.const -831623468)) - (i32.add (i32.const -1131618064)) - (i32.add (i32.const -1296186548)) - (i32.add (i32.const 78820228)) - (i32.add (i32.const -48980283)) - (i32.add (i32.const 357675787)) - (i32.add (i32.const 1987275868)) - (i32.add (i32.const -1022545200)) - (i32.add (i32.const -1430304819)) - (i32.add (i32.const 1414255163)) - (i32.add (i32.const 1849969031)) - (i32.add (i32.const 2094014836)) - (i32.add (i32.const 427918699)) - (i32.add (i32.const 1153789839)) - (i32.add (i32.const -1536223396)) - (i32.add (i32.const -504006089)) - (i32.add (i32.const 1931433286)) - (i32.add (i32.const -1002689559)) - (i32.add (i32.const -12391492)) - (i32.add (i32.const 1411764359)) - (i32.add (i32.const -66631392)) - (i32.add (i32.const 2104308654)) - (i32.add (i32.const -1945043959)) - (i32.add (i32.const -1381951350)) - (i32.add (i32.const 1083471813)) - (i32.add (i32.const 1671241122)) - (i32.add (i32.const 713512464)) - (i32.add (i32.const 129995293)) - (i32.add (i32.const 2140608433)) - (i32.add (i32.const 339204910)) - (i32.add (i32.const 2061879167)) - (i32.add (i32.const -407440979)) - (i32.add (i32.const 1161654281)) - (i32.add (i32.const 1693068480)) - (i32.add (i32.const 411966836)) - (i32.add (i32.const 1741130223)) - (i32.add (i32.const 293631026)) - (i32.add (i32.const 295456178)) - (i32.add (i32.const 208803954)) - (i32.add (i32.const -853333155)) - (i32.add (i32.const -625055699)) - (i32.add (i32.const -1050419755)) - (i32.add (i32.const -82446714)) - (i32.add (i32.const 1338051512)) - (i32.add (i32.const 346055339)) - (i32.add (i32.const 2041419617)) - (i32.add (i32.const 1223369182)) - (i32.add (i32.const 1064785218)) - (i32.add (i32.const -938276593)) - (i32.add (i32.const 861830385)) - (i32.add (i32.const 346762308)) - (i32.add (i32.const 653188260)) - (i32.add (i32.const -2117208815)) - (i32.add (i32.const -197518694)) - (i32.add (i32.const 979051870)) - (i32.add (i32.const 540625155)) - (i32.add (i32.const 822291102)) - (i32.add (i32.const -1696649206)) - (i32.add (i32.const 1894408979)) - (i32.add (i32.const -489112625)) - (i32.add (i32.const 1107014520)) - (i32.add (i32.const 832828697)) - (i32.add (i32.const 1494007878)) - (i32.add (i32.const 1695216475)) - (i32.add (i32.const 732381207)) - (i32.add (i32.const -1214806004)) - (i32.add (i32.const -906129241)) - (i32.add (i32.const 1698588907)) - (i32.add (i32.const -606329172)) - (i32.add (i32.const -770566508)) - (i32.add (i32.const -41512341)) - (i32.add (i32.const -1885660871)) - (i32.add (i32.const -1108132638)) - (i32.add (i32.const 257369675)) - (i32.add (i32.const 250983353)) - (i32.add (i32.const -18415317)) - (i32.add (i32.const -2067177044)) - (i32.add (i32.const -55789029)) - (i32.add (i32.const -669606008)) - (i32.add (i32.const -1915952401)) - (i32.add (i32.const 1696218467)) - (i32.add (i32.const -1737519140)) - (i32.add (i32.const -136142522)) - (i32.add (i32.const 184786719)) - (i32.add (i32.const -940673706)) - (i32.add (i32.const -1818703085)) - (i32.add (i32.const 1363280394)) - (i32.add (i32.const -1426856793)) - (i32.add (i32.const 860102554)) - (i32.add (i32.const 145439221)) - (i32.add (i32.const -1974640699)) - (i32.add (i32.const 1903254377)) - (i32.add (i32.const -427199184)) - (i32.add (i32.const -298753262)) - (i32.add (i32.const 1759798291)) - (i32.add (i32.const -430138330)) - (i32.add (i32.const 2001778422)) - (i32.add (i32.const -1508493198)) - (i32.add (i32.const -1899530501)) - (i32.add (i32.const 1165443016)) - (i32.add (i32.const 1476979510)) - (i32.add (i32.const -1849591606)) - (i32.add (i32.const 183366325)) - (i32.add (i32.const 797997223)) - (i32.add (i32.const -726063459)) - (i32.add (i32.const 2036130771)) - (i32.add (i32.const -1167844976)) - (i32.add (i32.const -1117324264)) - (i32.add (i32.const -1389223544)) - (i32.add (i32.const -1737401134)) - (i32.add (i32.const 265734031)) - (i32.add (i32.const 1458066329)) - (i32.add (i32.const -1330081647)) - (i32.add (i32.const -1062336277)) - (i32.add (i32.const 2053048001)) - (i32.add (i32.const 1310848270)) - (i32.add (i32.const -671229241)) - (i32.add (i32.const 714488975)) - (i32.add (i32.const -486319617)) - (i32.add (i32.const 1552286690)) - (i32.add (i32.const 786990702)) - (i32.add (i32.const -1533149631)) - (i32.add (i32.const 1131228266)) - (i32.add (i32.const 1073564037)) - (i32.add (i32.const 1480425655)) - (i32.add (i32.const -1600062364)) - (i32.add (i32.const 2051182409)) - (i32.add (i32.const 1999849283)) - (i32.add (i32.const 1865034935)) - (i32.add (i32.const 461506546)) - (i32.add (i32.const 333935097)) - (i32.add (i32.const -43855917)) - (i32.add (i32.const 430612966)) - (i32.add (i32.const 1550972783)) - (i32.add (i32.const -1419578090)) - (i32.add (i32.const 2084140966)) - (i32.add (i32.const 215728226)) - (i32.add (i32.const 888554590)) - (i32.add (i32.const 1769078297)) - (i32.add (i32.const 1876078416)) - (i32.add (i32.const -1229127612)) - (i32.add (i32.const -913010888)) - (i32.add (i32.const -1509471140)) - (i32.add (i32.const -1251930688)) - (i32.add (i32.const -1133977054)) - (i32.add (i32.const -1512071535)) - (i32.add (i32.const -468540448)) - (i32.add (i32.const 679433709)) - (i32.add (i32.const -1372437047)) - (i32.add (i32.const 1967926251)) - (i32.add (i32.const -1007534924)) - (i32.add (i32.const -1141214428)) - (i32.add (i32.const 466773004)) - (i32.add (i32.const -1029512186)) - (i32.add (i32.const -698897682)) - (i32.add (i32.const -2130227180)) - (i32.add (i32.const -269932942)) - (i32.add (i32.const 202959453)) - (i32.add (i32.const -1398249952)) - (i32.add (i32.const -1161463692)) - (i32.add (i32.const 672844960)) - (i32.add (i32.const 1549314718)) - (i32.add (i32.const 744985301)) - (i32.add (i32.const -417278883)) - (i32.add (i32.const -522977956)) - (i32.add (i32.const -1128792456)) - (i32.add (i32.const -520088965)) - (i32.add (i32.const 2069902137)) - (i32.add (i32.const -829235699)) - (i32.add (i32.const 1244893526)) - (i32.add (i32.const 458082254)) - (i32.add (i32.const 91047040)) - (i32.add (i32.const -301370109)) - (i32.add (i32.const -724765784)) - (i32.add (i32.const -665217590)) - (i32.add (i32.const 721917253)) - (i32.add (i32.const -410569558)) - (i32.add (i32.const -1738092592)) - (i32.add (i32.const 887738914)) - (i32.add (i32.const 1958047978)) - (i32.add (i32.const 1744227942)) - (i32.add (i32.const -319281150)) - (i32.add (i32.const -1517627801)) - (i32.add (i32.const -403250568)) - (i32.add (i32.const 1445015996)) - (i32.add (i32.const 718258185)) - (i32.add (i32.const 1213074015)) - (i32.add (i32.const 1476169047)) - (i32.add (i32.const -237512222)) - (i32.add (i32.const 1825945934)) - (i32.add (i32.const -556447681)) - (i32.add (i32.const 515812264)) - (i32.add (i32.const 1731180528)) - (i32.add (i32.const -1877397550)) - (i32.add (i32.const -1298184555)) - (i32.add (i32.const 1923626351)) - (i32.add (i32.const 1017882186)) - (i32.add (i32.const -646801578)) - (i32.add (i32.const -626898858)) - (i32.add (i32.const -216943921)) - (i32.add (i32.const 40982269)) - (i32.add (i32.const -1414409582)) - (i32.add (i32.const -285551713)) - (i32.add (i32.const 2035275693)) - (i32.add (i32.const 1359093033)) - (i32.add (i32.const 133803686)) - (i32.add (i32.const -1315325189)) - (i32.add (i32.const 1568895497)) - (i32.add (i32.const -1621080025)) - (i32.add (i32.const -1635155254)) - (i32.add (i32.const 504866199)) - (i32.add (i32.const -263268244)) - (i32.add (i32.const -1596166855)) - (i32.add (i32.const 746090725)) - (i32.add (i32.const -1202192691)) - (i32.add (i32.const 374061587)) - (i32.add (i32.const 819044828)) - (i32.add (i32.const -1768493790)) - (i32.add (i32.const -689993386)) - (i32.add (i32.const -1518845730)) - (i32.add (i32.const 941662787)) - (i32.add (i32.const -990140328)) - (i32.add (i32.const 1015415517)) - (i32.add (i32.const -1119558511)) - (i32.add (i32.const 1146975323)) - (i32.add (i32.const 1615637299)) - (i32.add (i32.const 1127749187)) - (i32.add (i32.const -917838449)) - (i32.add (i32.const -1302220)) - (i32.add (i32.const -398960025)) - (i32.add (i32.const 1992332355)) - (i32.add (i32.const -1510668272)) - (i32.add (i32.const 614404086)) - (i32.add (i32.const 943632319)) - (i32.add (i32.const -522935185)) - (i32.add (i32.const 1472070092)) - (i32.add (i32.const 1987321698)) - (i32.add (i32.const -639384389)) - (i32.add (i32.const -1416328944)) - (i32.add (i32.const -1089717182)) - (i32.add (i32.const 2003476785)) - (i32.add (i32.const 514509127)) - (i32.add (i32.const 830996861)) - (i32.add (i32.const -74835753)) - (i32.add (i32.const 1629321662)) - (i32.add (i32.const 489442173)) - (i32.add (i32.const -173139351)) - (i32.add (i32.const -284025581)) - (i32.add (i32.const 416854195)) - (i32.add (i32.const -837012044)) - (i32.add (i32.const 774995280)) - (i32.add (i32.const -1287226421)) - (i32.add (i32.const -955958223)) - (i32.add (i32.const 305994522)) - (i32.add (i32.const 401609004)) - (i32.add (i32.const -1081289564)) - (i32.add (i32.const 2026011384)) - (i32.add (i32.const -1497330840)) - (i32.add (i32.const -1006559754)) - (i32.add (i32.const 1096305842)) - (i32.add (i32.const 1401176830)) - (i32.add (i32.const -963266056)) - (i32.add (i32.const -1524770383)) - (i32.add (i32.const 1865455796)) - (i32.add (i32.const -1812654038)) - (i32.add (i32.const -413746376)) - (i32.add (i32.const -1267594817)) - (i32.add (i32.const -1200567669)) - (i32.add (i32.const 2124005641)) - (i32.add (i32.const 273466891)) - (i32.add (i32.const -779168052)) - (i32.add (i32.const -1281198684)) - (i32.add (i32.const -1168973860)) - (i32.add (i32.const 1090469377)) - (i32.add (i32.const -1386275987)) - (i32.add (i32.const -569323295)) - (i32.add (i32.const -1406812680)) - (i32.add (i32.const 308661234)) - (i32.add (i32.const 547673938)) - (i32.add (i32.const 23113954)) - (i32.add (i32.const -1449084412)) - (i32.add (i32.const 819983374)) - (i32.add (i32.const 665303339)) - (i32.add (i32.const 1785266982)) - (i32.add (i32.const 1636153535)) - (i32.add (i32.const 1773422591)) - (i32.add (i32.const -1715552120)) - (i32.add (i32.const -254316660)) - (i32.add (i32.const 121653959)) - (i32.add (i32.const 674601009)) - (i32.add (i32.const -339680013)) - (i32.add (i32.const 1862345469)) - (i32.add (i32.const 786028586)) - (i32.add (i32.const 2114402610)) - (i32.add (i32.const -227589811)) - (i32.add (i32.const -1224716796)) - (i32.add (i32.const -1365431723)) - (i32.add (i32.const 2094552602)) - (i32.add (i32.const -1219612158)) - (i32.add (i32.const 254807388)) - (i32.add (i32.const 1741756275)) - (i32.add (i32.const 1531319530)) - (i32.add (i32.const 1399692964)) - (i32.add (i32.const 2027480443)) - (i32.add (i32.const 760945487)) - (i32.add (i32.const 954446754)) - (i32.add (i32.const 1682677896)) - (i32.add (i32.const 1011758867)) - (i32.add (i32.const 410237901)) - (i32.add (i32.const 1391445564)) - (i32.add (i32.const 1685109070)) - (i32.add (i32.const -420552040)) - (i32.add (i32.const -63029573)) - (i32.add (i32.const 1632747263)) - (i32.add (i32.const -300394826)) - (i32.add (i32.const -924375230)) - (i32.add (i32.const 798134600)) - (i32.add (i32.const -1286796066)) - (i32.add (i32.const -471086168)) - (i32.add (i32.const -607573727)) - (i32.add (i32.const 250161812)) - (i32.add (i32.const 1581218226)) - (i32.add (i32.const -210679577)) - (i32.add (i32.const 1477195491)) - (i32.add (i32.const -1725915128)) - (i32.add (i32.const 187074575)) - (i32.add (i32.const -917134068)) - (i32.add (i32.const 523889817)) - (i32.add (i32.const -1922624151)) - (i32.add (i32.const 174027733)) - (i32.add (i32.const 225835258)) - (i32.add (i32.const 1906079796)) - (i32.add (i32.const -132244985)) - (i32.add (i32.const -1967983262)) - (i32.add (i32.const 734325951)) - (i32.add (i32.const 957607165)) - (i32.add (i32.const -1757927158)) - (i32.add (i32.const -2106184919)) - (i32.add (i32.const -497990665)) - (i32.add (i32.const -131880671)) - (i32.add (i32.const 1285588551)) - (i32.add (i32.const 1828364159)) - (i32.add (i32.const -507461811)) - (i32.add (i32.const 2110368712)) - (i32.add (i32.const -1101691830)) - (i32.add (i32.const -512186293)) - (i32.add (i32.const -511778774)) - (i32.add (i32.const -1970551828)) - (i32.add (i32.const 1588581213)) - (i32.add (i32.const 973439962)) - (i32.add (i32.const -234791985)) - (i32.add (i32.const -1026471609)) - (i32.add (i32.const 456386576)) - (i32.add (i32.const -1463922965)) - (i32.add (i32.const -433587503)) - (i32.add (i32.const -1426546825)) - (i32.add (i32.const -923254832)) - (i32.add (i32.const -1980766939)) - (i32.add (i32.const 1384315059)) - (i32.add (i32.const -648113885)) - (i32.add (i32.const -1035226768)) - (i32.add (i32.const 690352100)) - (i32.add (i32.const 355535108)) - (i32.add (i32.const 297689526)) - (i32.add (i32.const -533405016)) - (i32.add (i32.const -1857845368)) - (i32.add (i32.const -1426970342)) - (i32.add (i32.const 88623462)) - (i32.add (i32.const -1736217779)) - (i32.add (i32.const 300552285)) - (i32.add (i32.const 834901333)) - (i32.add (i32.const 2084549951)) - (i32.add (i32.const -1454519862)) - (i32.add (i32.const 1586629368)) - (i32.add (i32.const -687476841)) - (i32.add (i32.const 1935727759)) - (i32.add (i32.const -273269274)) - (i32.add (i32.const 1835516876)) - (i32.add (i32.const -221002158)) - (i32.add (i32.const -786440231)) - (i32.add (i32.const -1124301966)) - (i32.add (i32.const -1514530555)) - (i32.add (i32.const -1880199028)) - (i32.add (i32.const 261256214)) - (i32.add (i32.const 1174156215)) - (i32.add (i32.const 901027468)) - (i32.add (i32.const 98305689)) - (i32.add (i32.const -217443806)) - (i32.add (i32.const 1132014149)) - (i32.add (i32.const 844595851)) - (i32.add (i32.const -488607408)) - (i32.add (i32.const 601108588)) - (i32.add (i32.const 895839436)) - (i32.add (i32.const 1209637071)) - (i32.add (i32.const 587047103)) - (i32.add (i32.const 1875791753)) - (i32.add (i32.const 493652080)) - (i32.add (i32.const -348081571)) - (i32.add (i32.const 2039165814)) - (i32.add (i32.const -58530106)) - (i32.add (i32.const 520648575)) - (i32.add (i32.const 1539299251)) - (i32.add (i32.const -228210802)) - (i32.add (i32.const -449349712)) - (i32.add (i32.const 1641290202)) - (i32.add (i32.const 413523400)) - (i32.add (i32.const 671352082)) - (i32.add (i32.const -168887453)) - (i32.add (i32.const 1629665136)) - (i32.add (i32.const -528942844)) - (i32.add (i32.const -1232831153)) - (i32.add (i32.const 1765846905)) - (i32.add (i32.const -350358825)) - (i32.add (i32.const -151119636)) - (i32.add (i32.const 76345992)) - (i32.add (i32.const 1311137351)) - (i32.add (i32.const -2131828142)) - (i32.add (i32.const 894241941)) - (i32.add (i32.const 189630451)) - (i32.add (i32.const -1088804176)) - (i32.add (i32.const -1473304562)) - (i32.add (i32.const -13298114)) - (i32.add (i32.const 371300688)) - (i32.add (i32.const 1450194208)) - (i32.add (i32.const 502212480)) - (i32.add (i32.const -59302891)) - (i32.add (i32.const -1439788125)) - (i32.add (i32.const 1612804750)) - (i32.add (i32.const 1733487579)) - (i32.add (i32.const -1894817763)) - (i32.add (i32.const -1925278881)) - (i32.add (i32.const 1420980214)) - (i32.add (i32.const -26776947)) - (i32.add (i32.const 1855326364)) - (i32.add (i32.const 1732285574)) - (i32.add (i32.const 613422870)) - (i32.add (i32.const -1398781612)) - (i32.add (i32.const -1165722858)) - (i32.add (i32.const 561264313)) - (i32.add (i32.const 1630689287)) - (i32.add (i32.const -988620549)) - (i32.add (i32.const 1988786059)) - (i32.add (i32.const -373182007)) - (i32.add (i32.const 1700693469)) - (i32.add (i32.const 938176532)) - (i32.add (i32.const 1318651866)) - (i32.add (i32.const -236563455)) - (i32.add (i32.const -1415650556)) - (i32.add (i32.const -1380287194)) - (i32.add (i32.const -794147190)) - (i32.add (i32.const -47422548)) - (i32.add (i32.const -328903721)) - (i32.add (i32.const 1823064556)) - (i32.add (i32.const 1953111807)) - (i32.add (i32.const -400795597)) - (i32.add (i32.const -1832271886)) - (i32.add (i32.const 521904293)) - (i32.add (i32.const -1816665049)) - (i32.add (i32.const -867126668)) - (i32.add (i32.const 1458239368)) - (i32.add (i32.const 377214921)) - (i32.add (i32.const 1872358965)) - (i32.add (i32.const -1080902880)) - (i32.add (i32.const -1296712925)) - (i32.add (i32.const 157159015)) - (i32.add (i32.const -257808050)) - (i32.add (i32.const -1219099967)) - (i32.add (i32.const -1614654518)) - (i32.add (i32.const 371274857)) - (i32.add (i32.const -584526967)) - (i32.add (i32.const 219276905)) - (i32.add (i32.const 350371041)) - (i32.add (i32.const 2090168394)) - (i32.add (i32.const -1750585414)) - (i32.add (i32.const -676611861)) - (i32.add (i32.const 903630953)) - (i32.add (i32.const -1990978709)) - (i32.add (i32.const -1407196663)) - (i32.add (i32.const 820532728)) - (i32.add (i32.const 1143757233)) - (i32.add (i32.const 963504168)) - (i32.add (i32.const -172536916)) - (i32.add (i32.const 1832745141)) - (i32.add (i32.const -1287673437)) - (i32.add (i32.const 419587528)) - (i32.add (i32.const 1249338754)) - (i32.add (i32.const -1808560399)) - (i32.add (i32.const 620137892)) - (i32.add (i32.const -602897110)) - (i32.add (i32.const 918026918)) - (i32.add (i32.const 324469999)) - (i32.add (i32.const -1602336163)) - (i32.add (i32.const 402160770)) - (i32.add (i32.const 470020470)) - (i32.add (i32.const -147702877)) - (i32.add (i32.const -1941074630)) - (i32.add (i32.const -1788638418)) - (i32.add (i32.const 631173433)) - (i32.add (i32.const -1777673137)) - (i32.add (i32.const -904635658)) - (i32.add (i32.const -1140810048)) - (i32.add (i32.const -1405823162)) - (i32.add (i32.const 1423129387)) - (i32.add (i32.const 1098399657)) - (i32.add (i32.const -172994209)) - (i32.add (i32.const -373680813)) - (i32.add (i32.const -159595860)) - (i32.add (i32.const -935705153)) - (i32.add (i32.const 1940242816)) - (i32.add (i32.const 346256570)) - (i32.add (i32.const -726155664)) - (i32.add (i32.const 906739047)) - (i32.add (i32.const 320483180)) - (i32.add (i32.const -1750729981)) - (i32.add (i32.const 1465328832)) - (i32.add (i32.const -430632026)) - (i32.add (i32.const 1862040146)) - (i32.add (i32.const 1422223897)) - (i32.add (i32.const 202077194)) - (i32.add (i32.const -136556836)) - (i32.add (i32.const 2055914855)) - (i32.add (i32.const -731086147)) - (i32.add (i32.const -788396671)) - (i32.add (i32.const -644879283)) - (i32.add (i32.const -952549902)) - (i32.add (i32.const -353127625)) - (i32.add (i32.const 4675814)) - (i32.add (i32.const -1531304138)) - (i32.add (i32.const -1832684432)) - (i32.add (i32.const 648636504)) - (i32.add (i32.const 1178902300)) - (i32.add (i32.const -1615657377)) - (i32.add (i32.const 933777385)) - (i32.add (i32.const 438395134)) - (i32.add (i32.const -1742088034)) - (i32.add (i32.const 531357132)) - (i32.add (i32.const 1324320026)) - (i32.add (i32.const 1990737563)) - (i32.add (i32.const -467347936)) - (i32.add (i32.const 1671159568)) - (i32.add (i32.const -1423592698)) - (i32.add (i32.const -1721187709)) - (i32.add (i32.const -1417294809)) - (i32.add (i32.const 1486896323)) - (i32.add (i32.const -1117859613)) - (i32.add (i32.const -600087077)) - (i32.add (i32.const 1529670411)) - (i32.add (i32.const -414700018)) - (i32.add (i32.const 1449497025)) - (i32.add (i32.const 302807394)) - (i32.add (i32.const 963579173)) - (i32.add (i32.const -1045198967)) - (i32.add (i32.const -1904999167)) - (i32.add (i32.const 199368101)) - (i32.add (i32.const -793939462)) - (i32.add (i32.const 393839810)) - (i32.add (i32.const -535164490)) - (i32.add (i32.const -1563949029)) - (i32.add (i32.const 1852314019)) - (i32.add (i32.const -1238407982)) - (i32.add (i32.const -1904817739)) - (i32.add (i32.const -32731272)) - (i32.add (i32.const -1612899294)) - (i32.add (i32.const 609691853)) - (i32.add (i32.const 305271794)) - (i32.add (i32.const -1006038795)) - (i32.add (i32.const -392687557)) - (i32.add (i32.const -1034017805)) - (i32.add (i32.const 777803478)) - (i32.add (i32.const -1455538941)) - (i32.add (i32.const 1376486797)) - (i32.add (i32.const -2112611811)) - (i32.add (i32.const 699927155)) - (i32.add (i32.const 609568371)) - (i32.add (i32.const 2020653228)) - (i32.add (i32.const -1074479492)) - (i32.add (i32.const 1596233159)) - (i32.add (i32.const 56907922)) - (i32.add (i32.const 2002628947)) - (i32.add (i32.const -502279605)) - (i32.add (i32.const -271860838)) - (i32.add (i32.const -1584448777)) - (i32.add (i32.const -427206101)) - (i32.add (i32.const 1260901457)) - (i32.add (i32.const 1121518581)) - (i32.add (i32.const 865405722)) - (i32.add (i32.const -1374492371)) - (i32.add (i32.const 865512051)) - (i32.add (i32.const -1771546005)) - (i32.add (i32.const 435150005)) - (i32.add (i32.const -1645387160)) - (i32.add (i32.const 829339459)) - (i32.add (i32.const 311413430)) - (i32.add (i32.const -735688887)) - (i32.add (i32.const -1230297194)) - (i32.add (i32.const 1671607842)) - (i32.add (i32.const -1203928446)) - (i32.add (i32.const -533372522)) - (i32.add (i32.const -2109810673)) - (i32.add (i32.const 168307620)) - (i32.add (i32.const -315085194)) - (i32.add (i32.const 1897538249)) - (i32.add (i32.const 588671886)) - (i32.add (i32.const 2033983037)) - (i32.add (i32.const -182811542)) - (i32.add (i32.const 1675610636)) - (i32.add (i32.const 834795177)) - (i32.add (i32.const 1543883909)) - (i32.add (i32.const 1719405653)) - (i32.add (i32.const 1535922870)) - (i32.add (i32.const -371226716)) - (i32.add (i32.const 1794869467)) - (i32.add (i32.const -913318512)) - (i32.add (i32.const -1771324343)) - (i32.add (i32.const 571549696)) - (i32.add (i32.const -974107547)) - (i32.add (i32.const 58178214)) - (i32.add (i32.const 1362036963)) - (i32.add (i32.const 828352157)) - (i32.add (i32.const 1399442681)) - (i32.add (i32.const 2097066228)) - (i32.add (i32.const -1430603091)) - (i32.add (i32.const -147317327)) - (i32.add (i32.const -231117288)) - (i32.add (i32.const -95964552)) - (i32.add (i32.const 179931832)) - (i32.add (i32.const -1379601311)) - (i32.add (i32.const 730893172)) - (i32.add (i32.const 43842348)) - (i32.add (i32.const 272902774)) - (i32.add (i32.const -1251229324)) - (i32.add (i32.const -1651644931)) - (i32.add (i32.const 1747561527)) - (i32.add (i32.const -1676930837)) - (i32.add (i32.const 1070254252)) - (i32.add (i32.const -1185574233)) - (i32.add (i32.const -1626941020)) - (i32.add (i32.const 1765419192)) - (i32.add (i32.const -1476694190)) - (i32.add (i32.const -1144283728)) - (i32.add (i32.const -608689506)) - (i32.add (i32.const 658170793)) - (i32.add (i32.const 1357800336)) - (i32.add (i32.const 280256910)) - (i32.add (i32.const -245209919)) - (i32.add (i32.const -1285568399)) - (i32.add (i32.const -403822123)) - (i32.add (i32.const -523700606)) - (i32.add (i32.const -748614525)) - (i32.add (i32.const -295173895)) - (i32.add (i32.const -1279882751)) - (i32.add (i32.const -660019803)) - (i32.add (i32.const 758271441)) - (i32.add (i32.const -992871288)) - (i32.add (i32.const 1851067764)) - (i32.add (i32.const -4952740)) - (i32.add (i32.const -1703787089)) - (i32.add (i32.const 77609561)) - (i32.add (i32.const -1205493792)) - (i32.add (i32.const -735957074)) - (i32.add (i32.const 607245011)) - (i32.add (i32.const -1467952084)) - (i32.add (i32.const -1848652167)) - (i32.add (i32.const -1591770928)) - (i32.add (i32.const -409981511)) - (i32.add (i32.const -1430923871)) - (i32.add (i32.const 296845154)) - (i32.add (i32.const 545586901)) - (i32.add (i32.const 1703657610)) - (i32.add (i32.const -1562314133)) - (i32.add (i32.const -1502367491)) - (i32.add (i32.const 401516589)) - (i32.add (i32.const 501478606)) - (i32.add (i32.const -1573921843)) - (i32.add (i32.const 682350863)) - (i32.add (i32.const -2076881136)) - (i32.add (i32.const -898705346)) - (i32.add (i32.const 2022408885)) - (i32.add (i32.const -1518789469)) - (i32.add (i32.const -1222319294)) - (i32.add (i32.const -870578918)) - (i32.add (i32.const 280358177)) - (i32.add (i32.const -571536310)) - (i32.add (i32.const -791275144)) - (i32.add (i32.const 319414940)) - (i32.add (i32.const -961870652)) - (i32.add (i32.const -912692499)) - (i32.add (i32.const -1727177704)) - (i32.add (i32.const -1116833061)) - (i32.add (i32.const -1511481759)) - (i32.add (i32.const -1364101751)) - (i32.add (i32.const -44786537)) - (i32.add (i32.const -564847292)) - (i32.add (i32.const -2143249151)) - (i32.add (i32.const 354286435)) - (i32.add (i32.const -2095422801)) - (i32.add (i32.const -549313702)) - (i32.add (i32.const -934295558)) - (i32.add (i32.const -1590316590)) - (i32.add (i32.const 1996014991)) - (i32.add (i32.const 273626741)) - (i32.add (i32.const 287609530)) - (i32.add (i32.const -763655052)) - (i32.add (i32.const 1863615082)) - (i32.add (i32.const -1592176570)) - (i32.add (i32.const -759600423)) - (i32.add (i32.const 1690950745)) - (i32.add (i32.const 1497463471)) - (i32.add (i32.const -777822228)) - (i32.add (i32.const 185683028)) - (i32.add (i32.const -2030161869)) - (i32.add (i32.const -1342099421)) - (i32.add (i32.const 1033479247)) - (i32.add (i32.const -627020558)) - (i32.add (i32.const 692474955)) - (i32.add (i32.const 1357588203)) - (i32.add (i32.const 1927159442)) - (i32.add (i32.const -1156307445)) - (i32.add (i32.const -189954570)) - (i32.add (i32.const -962013445)) - (i32.add (i32.const -557980482)) - (i32.add (i32.const 179023079)) - (i32.add (i32.const 788302641)) - (i32.add (i32.const 666389079)) - (i32.add (i32.const -2111405620)) - (i32.add (i32.const -1091328465)) - (i32.add (i32.const 16632526)) - (i32.add (i32.const 1726352953)) - (i32.add (i32.const 2041316411)) - (i32.add (i32.const 742589844)) - (i32.add (i32.const 388673469)) - (i32.add (i32.const -1815188823)) - (i32.add (i32.const -473023206)) - (i32.add (i32.const 1613690814)) - (i32.add (i32.const -1584637677)) - (i32.add (i32.const -2083589222)) - (i32.add (i32.const 1834725535)) - (i32.add (i32.const -842528194)) - (i32.add (i32.const -1954259785)) - (i32.add (i32.const -492950555)) - (i32.add (i32.const -508800158)) - (i32.add (i32.const 2143538406)) - (i32.add (i32.const 1636921613)) - (i32.add (i32.const 343612265)) - (i32.add (i32.const 1786157903)) - (i32.add (i32.const -414585448)) - (i32.add (i32.const 1533432665)) - (i32.add (i32.const 1033596850)) - (i32.add (i32.const 1112905313)) - (i32.add (i32.const -1885655354)) - (i32.add (i32.const -308726473)) - (i32.add (i32.const 1786136284)) - (i32.add (i32.const 158014480)) - (i32.add (i32.const 703718103)) - (i32.add (i32.const -952469167)) - (i32.add (i32.const -1843535451)) - (i32.add (i32.const 901627995)) - (i32.add (i32.const -1381965641)) - (i32.add (i32.const -433124652)) - (i32.add (i32.const -265524407)) - (i32.add (i32.const -806271992)) - (i32.add (i32.const 609137023)) - (i32.add (i32.const 915753147)) - (i32.add (i32.const -1753840466)) - (i32.add (i32.const 984116673)) - (i32.add (i32.const -1317426716)) - (i32.add (i32.const -508993750)) - (i32.add (i32.const 1665688537)) - (i32.add (i32.const 1214254038)) - (i32.add (i32.const 840011601)) - (i32.add (i32.const -1921511669)) - (i32.add (i32.const -1542288658)) - (i32.add (i32.const 1586656317)) - (i32.add (i32.const -47781915)) - (i32.add (i32.const -306255724)) - (i32.add (i32.const -523540659)) - (i32.add (i32.const 2121150773)) - (i32.add (i32.const -1724443695)) - (i32.add (i32.const 1606340826)) - (i32.add (i32.const -1527710173)) - (i32.add (i32.const 1676260862)) - (i32.add (i32.const 1509925154)) - (i32.add (i32.const 680452641)) - (i32.add (i32.const -1850955243)) - (i32.add (i32.const 1807959971)) - (i32.add (i32.const -23261037)) - (i32.add (i32.const 1652015454)) - (i32.add (i32.const -522806319)) - (i32.add (i32.const -1830439729)) - (i32.add (i32.const -583713579)) - (i32.add (i32.const 58944660)) - (i32.add (i32.const -994634778)) - (i32.add (i32.const -1849345624)) - (i32.add (i32.const -1053694834)) - (i32.add (i32.const -1011394959)) - (i32.add (i32.const -751758106)) - (i32.add (i32.const 722003950)) - (i32.add (i32.const 422646077)) - (i32.add (i32.const 1850944256)) - (i32.add (i32.const -668370573)) - (i32.add (i32.const 620664503)) - (i32.add (i32.const 1987023167)) - (i32.add (i32.const 927136662)) - (i32.add (i32.const -1807405227)) - (i32.add (i32.const 2138506182)) - (i32.add (i32.const -839659699)) - (i32.add (i32.const -894557399)) - (i32.add (i32.const -1063733986)) - (i32.add (i32.const 1563405466)) - (i32.add (i32.const -2061267970)) - (i32.add (i32.const -2140464672)) - (i32.add (i32.const -1472624976)) - (i32.add (i32.const -977671912)) - (i32.add (i32.const -828590889)) - (i32.add (i32.const -821217729)) - (i32.add (i32.const 1587700858)) - (i32.add (i32.const 339211842)) - (i32.add (i32.const -680521841)) - (i32.add (i32.const 1992464151)) - (i32.add (i32.const -1872876630)) - (i32.add (i32.const -651370259)) - (i32.add (i32.const -1696671765)) - (i32.add (i32.const 326139603)) - (i32.add (i32.const 1145922707)) - (i32.add (i32.const -465591961)) - (i32.add (i32.const -963515200)) - (i32.add (i32.const -370575491)) - (i32.add (i32.const -855029821)) - (i32.add (i32.const 1129929063)) - (i32.add (i32.const -2039863549)) - (i32.add (i32.const -33234618)) - (i32.add (i32.const -102906593)) - (i32.add (i32.const -1249756601)) - (i32.add (i32.const -701755083)) - (i32.add (i32.const 1501884430)) - (i32.add (i32.const -1826676273)) - (i32.add (i32.const -877531305)) - (i32.add (i32.const -1948126505)) - (i32.add (i32.const -340581500)) - (i32.add (i32.const 573889067)) - (i32.add (i32.const -2011058314)) - (i32.add (i32.const 1230750273)) - (i32.add (i32.const -269628712)) - (i32.add (i32.const 439686572)) - (i32.add (i32.const -43799336)) - (i32.add (i32.const 1284884316)) - (i32.add (i32.const -2083898244)) - (i32.add (i32.const -1383259005)) - (i32.add (i32.const -1185342970)) - (i32.add (i32.const -965385291)) - (i32.add (i32.const -202889481)) - (i32.add (i32.const -247183148)) - (i32.add (i32.const -877534130)) - (i32.add (i32.const -1944426008)) - (i32.add (i32.const -311739380)) - (i32.add (i32.const -1704575619)) - (i32.add (i32.const 1726487456)) - (i32.add (i32.const -893304816)) - (i32.add (i32.const 1912048264)) - (i32.add (i32.const 278968414)) - (i32.add (i32.const 1484489962)) - (i32.add (i32.const 1262661188)) - (i32.add (i32.const -478958271)) - (i32.add (i32.const 1116659981)) - (i32.add (i32.const -102204278)) - (i32.add (i32.const -894869658)) - (i32.add (i32.const -1054787859)) - (i32.add (i32.const 184519752)) - (i32.add (i32.const -503413592)) - (i32.add (i32.const -525176133)) - (i32.add (i32.const 191141152)) - (i32.add (i32.const 1630747888)) - (i32.add (i32.const -238594269)) - (i32.add (i32.const -1019697185)) - (i32.add (i32.const 311169349)) - (i32.add (i32.const 932458333)) - (i32.add (i32.const -1054290801)) - (i32.add (i32.const 339040405)) - (i32.add (i32.const 1540470282)) - (i32.add (i32.const 52464903)) - (i32.add (i32.const -1864408445)) - (i32.add (i32.const -1300853002)) - (i32.add (i32.const 939067292)) - (i32.add (i32.const -691921398)) - (i32.add (i32.const -589469984)) - (i32.add (i32.const 678906149)) - (i32.add (i32.const -448993378)) - (i32.add (i32.const 1686399575)) - (i32.add (i32.const -1409396757)) - (i32.add (i32.const -1759841608)) - (i32.add (i32.const -1219624088)) - (i32.add (i32.const -927639633)) - (i32.add (i32.const 1076566600)) - (i32.add (i32.const -2039889213)) - (i32.add (i32.const -1698535674)) - (i32.add (i32.const -1699496232)) - (i32.add (i32.const 1562695157)) - (i32.add (i32.const -2014179030)) - (i32.add (i32.const -1553875800)) - (i32.add (i32.const 1902834508)) - (i32.add (i32.const -724822797)) - (i32.add (i32.const -2084462179)) - (i32.add (i32.const -1572460949)) - (i32.add (i32.const -2135432983)) - (i32.add (i32.const 159888112)) - (i32.add (i32.const 1351831418)) - (i32.add (i32.const -519619583)) - (i32.add (i32.const -1617370591)) - (i32.add (i32.const 1042981154)) - (i32.add (i32.const -1617014198)) - (i32.add (i32.const -1875537500)) - (i32.add (i32.const 2137521959)) - (i32.add (i32.const 621658988)) - (i32.add (i32.const -1536329876)) - (i32.add (i32.const -1491330028)) - (i32.add (i32.const 311672508)) - (i32.add (i32.const -1689788583)) - (i32.add (i32.const 419076555)) - (i32.add (i32.const 845320842)) - (i32.add (i32.const -744707188)) - (i32.add (i32.const 1752309220)) - (i32.add (i32.const 1964562971)) - (i32.add (i32.const -1926775417)) - (i32.add (i32.const 1178969637)) - (i32.add (i32.const -1006949918)) - (i32.add (i32.const -47901705)) - (i32.add (i32.const 1203287239)) - (i32.add (i32.const -1866074718)) - (i32.add (i32.const -1230382380)) - (i32.add (i32.const -1763074898)) - (i32.add (i32.const -901320691)) - (i32.add (i32.const 100269818)) - (i32.add (i32.const 453376891)) - (i32.add (i32.const -111638077)) - (i32.add (i32.const -695301571)) - (i32.add (i32.const -1204248089)) - (i32.add (i32.const -1949590859)) - (i32.add (i32.const 821300288)) - (i32.add (i32.const 749341607)) - (i32.add (i32.const -585881661)) - (i32.add (i32.const 1080834401)) - (i32.add (i32.const -1530409198)) - (i32.add (i32.const -678907165)) - (i32.add (i32.const -622012188)) - (i32.add (i32.const -1356698751)) - (i32.add (i32.const 457692759)) - (i32.add (i32.const -1050495642)) - (i32.add (i32.const 1992904199)) - (i32.add (i32.const 677915241)) - (i32.add (i32.const -1914588029)) - (i32.add (i32.const -1658054345)) - (i32.add (i32.const -697213477)) - (i32.add (i32.const 797983060)) - (i32.add (i32.const -2080522483)) - (i32.add (i32.const 407115021)) - (i32.add (i32.const 1564452691)) - (i32.add (i32.const -1649271584)) - (i32.add (i32.const 580604726)) - (i32.add (i32.const 545629455)) - (i32.add (i32.const -1324584616)) - (i32.add (i32.const 2054889386)) - (i32.add (i32.const 797942181)) - (i32.add (i32.const 1411290298)) - (i32.add (i32.const -1029419898)) - (i32.add (i32.const -1479410372)) - (i32.add (i32.const -818296136)) - (i32.add (i32.const -155567916)) - (i32.add (i32.const 1817160629)) - (i32.add (i32.const 1810661329)) - (i32.add (i32.const 539714973)) - (i32.add (i32.const -2108918360)) - (i32.add (i32.const 393640883)) - (i32.add (i32.const 1935959557)) - (i32.add (i32.const -614260205)) - (i32.add (i32.const -51886856)) - (i32.add (i32.const -2133309786)) - (i32.add (i32.const -2096506216)) - (i32.add (i32.const 816624446)) - (i32.add (i32.const -1150336294)) - (i32.add (i32.const -611701020)) - (i32.add (i32.const 1006285160)) - (i32.add (i32.const 76169130)) - (i32.add (i32.const 955514290)) - (i32.add (i32.const -380410)) - (i32.add (i32.const -19817035)) - (i32.add (i32.const 1660440607)) - (i32.add (i32.const 118073187)) - (i32.add (i32.const -1439160718)) - (i32.add (i32.const 726732315)) - (i32.add (i32.const -93700207)) - (i32.add (i32.const 1077884600)) - (i32.add (i32.const 336482804)) - (i32.add (i32.const -1614197322)) - (i32.add (i32.const 1588997454)) - (i32.add (i32.const 814849219)) - (i32.add (i32.const 1506966494)) - (i32.add (i32.const 1140456650)) - (i32.add (i32.const 2002109876)) - (i32.add (i32.const 598183436)) - (i32.add (i32.const -935935157)) - (i32.add (i32.const 232807304)) - (i32.add (i32.const 532484710)) - (i32.add (i32.const -825574478)) - (i32.add (i32.const -272208505)) - (i32.add (i32.const 328358336)) - (i32.add (i32.const 1975788872)) - (i32.add (i32.const 936900544)) - (i32.add (i32.const 1151510741)) - (i32.add (i32.const 477486919)) - (i32.add (i32.const 477744839)) - (i32.add (i32.const 2085760479)) - (i32.add (i32.const 1406103739)) - (i32.add (i32.const 1416731143)) - (i32.add (i32.const 1664610986)) - (i32.add (i32.const 1128765279)) - (i32.add (i32.const 1507645661)) - (i32.add (i32.const -1060868483)) - (i32.add (i32.const 955751401)) - (i32.add (i32.const -448688239)) - (i32.add (i32.const -1589262793)) - (i32.add (i32.const -1586234973)) - (i32.add (i32.const 1026222670)) - (i32.add (i32.const 1567694864)) - (i32.add (i32.const -127436414)) - (i32.add (i32.const -2094985984)) - (i32.add (i32.const -1898986184)) - (i32.add (i32.const 98842112)) - (i32.add (i32.const -570671380)) - (i32.add (i32.const 1419956303)) - (i32.add (i32.const -1995801776)) - (i32.add (i32.const 448341333)) - (i32.add (i32.const -1929352833)) - (i32.add (i32.const -219080332)) - (i32.add (i32.const -67018854)) - (i32.add (i32.const -510017843)) - (i32.add (i32.const -235378946)) - (i32.add (i32.const 1559651481)) - (i32.add (i32.const -2019170139)) - (i32.add (i32.const -907176196)) - (i32.add (i32.const -996961855)) - (i32.add (i32.const -1157237060)) - (i32.add (i32.const 1639428161)) - (i32.add (i32.const -319404180)) - (i32.add (i32.const -1124669145)) - (i32.add (i32.const 1748419365)) - (i32.add (i32.const -2100857675)) - (i32.add (i32.const -1467528795)) - (i32.add (i32.const -1864195986)) - (i32.add (i32.const -95940216)) - (i32.add (i32.const -1264740966)) - (i32.add (i32.const 114665874)) - (i32.add (i32.const 728197575)) - (i32.add (i32.const -2086063815)) - (i32.add (i32.const 863407884)) - (i32.add (i32.const 368291499)) - (i32.add (i32.const -437116502)) - (i32.add (i32.const -115801120)) - (i32.add (i32.const 1369378105)) - (i32.add (i32.const 558770181)) - (i32.add (i32.const -1457515238)) - (i32.add (i32.const 1440065385)) - (i32.add (i32.const -1451146310)) - (i32.add (i32.const -302757184)) - (i32.add (i32.const -1197733129)) - (i32.add (i32.const 173083445)) - (i32.add (i32.const 451548841)) - (i32.add (i32.const 1474934769)) - (i32.add (i32.const -270338490)) - (i32.add (i32.const -1063627216)) - (i32.add (i32.const -421614349)) - (i32.add (i32.const -1903966176)) - (i32.add (i32.const 824514647)) - (i32.add (i32.const -1938046912)) - (i32.add (i32.const -626520056)) - (i32.add (i32.const 1316053138)) - (i32.add (i32.const -199254313)) - (i32.add (i32.const 1036661774)) - (i32.add (i32.const 1857019550)) - (i32.add (i32.const 305192381)) - (i32.add (i32.const 527964314)) - (i32.add (i32.const -1557532820)) - (i32.add (i32.const -1543995947)) - (i32.add (i32.const 494376091)) - (i32.add (i32.const -1418366995)) - (i32.add (i32.const -1287727836)) - (i32.add (i32.const -1226381813)) - (i32.add (i32.const -1642757387)) - (i32.add (i32.const 685592614)) - (i32.add (i32.const -1554322858)) - (i32.add (i32.const 269677497)) - (i32.add (i32.const 1261829560)) - (i32.add (i32.const 83626672)) - (i32.add (i32.const 217120552)) - (i32.add (i32.const 104538474)) - (i32.add (i32.const -284714645)) - (i32.add (i32.const 1018982126)) - (i32.add (i32.const 531001857)) - (i32.add (i32.const 1226586438)) - (i32.add (i32.const -613449172)) - (i32.add (i32.const 198191127)) - (i32.add (i32.const 704871465)) - (i32.add (i32.const -592209378)) - (i32.add (i32.const -2089683733)) - (i32.add (i32.const -1057234154)) - (i32.add (i32.const 998275297)) - (i32.add (i32.const 94884032)) - (i32.add (i32.const -1794278915)) - (i32.add (i32.const -1394657616)) - (i32.add (i32.const 1392392075)) - (i32.add (i32.const 1030443413)) - (i32.add (i32.const -742056327)) - (i32.add (i32.const 767627322)) - (i32.add (i32.const -1586705267)) - (i32.add (i32.const 2051259127)) - (i32.add (i32.const -1299524881)) - (i32.add (i32.const -677794667)) - (i32.add (i32.const 357388758)) - (i32.add (i32.const 311183861)) - (i32.add (i32.const -1974198372)) - (i32.add (i32.const 1897808670)) - (i32.add (i32.const 608732624)) - (i32.add (i32.const -2098626182)) - (i32.add (i32.const -175099413)) - (i32.add (i32.const -1816485681)) - (i32.add (i32.const 1135379889)) - (i32.add (i32.const -1331367002)) - (i32.add (i32.const 1170371440)) - (i32.add (i32.const 1520215196)) - (i32.add (i32.const 1148430413)) - (i32.add (i32.const -1723294772)) - (i32.add (i32.const -1207654135)) - (i32.add (i32.const -244864206)) - (i32.add (i32.const 893869933)) - (i32.add (i32.const -1097044569)) - (i32.add (i32.const 1037690938)) - (i32.add (i32.const -1994501426)) - (i32.add (i32.const 2101049928)) - (i32.add (i32.const -859371552)) - (i32.add (i32.const -1114021039)) - (i32.add (i32.const -793117658)) - (i32.add (i32.const -1497410305)) - (i32.add (i32.const 1884856085)) - (i32.add (i32.const 1455377886)) - (i32.add (i32.const -913835979)) - (i32.add (i32.const -798179599)) - (i32.add (i32.const 1811228776)) - (i32.add (i32.const -1481363673)) - (i32.add (i32.const 1853413327)) - (i32.add (i32.const -951873583)) - (i32.add (i32.const 122194314)) - (i32.add (i32.const -778902217)) - (i32.add (i32.const 991392672)) - (i32.add (i32.const 839166226)) - (i32.add (i32.const 1702837603)) - (i32.add (i32.const 619691143)) - (i32.add (i32.const -802967684)) - (i32.add (i32.const 1215999652)) - (i32.add (i32.const -1327948737)) - (i32.add (i32.const 223750810)) - (i32.add (i32.const 2041435208)) - (i32.add (i32.const -509334704)) - (i32.add (i32.const 405043120)) - (i32.add (i32.const 1021347395)) - (i32.add (i32.const 991573134)) - (i32.add (i32.const 1857068405)) - (i32.add (i32.const -451041540)) - (i32.add (i32.const -194718988)) - (i32.add (i32.const 2069810958)) - (i32.add (i32.const -62412330)) - (i32.add (i32.const -160417670)) - (i32.add (i32.const 1216889517)) - (i32.add (i32.const -1484316929)) - (i32.add (i32.const 2067960622)) - (i32.add (i32.const 460921550)) - (i32.add (i32.const 1845175357)) - (i32.add (i32.const 784573870)) - (i32.add (i32.const -1924920590)) - (i32.add (i32.const 1153617646)) - (i32.add (i32.const -270067052)) - (i32.add (i32.const 1190225339)) - (i32.add (i32.const -1601871628)) - (i32.add (i32.const -1647619873)) - (i32.add (i32.const -10088007)) - (i32.add (i32.const 1605764768)) - (i32.add (i32.const 2122857671)) - (i32.add (i32.const 1338936638)) - (i32.add (i32.const -1651220448)) - (i32.add (i32.const -1737111895)) - (i32.add (i32.const -178209031)) - (i32.add (i32.const 496460430)) - (i32.add (i32.const 1777503110)) - (i32.add (i32.const 1703074712)) - (i32.add (i32.const 2098302786)) - (i32.add (i32.const 99305105)) - (i32.add (i32.const -602980752)) - (i32.add (i32.const -68463390)) - (i32.add (i32.const -1008234019)) - (i32.add (i32.const 1703817610)) - (i32.add (i32.const 909993279)) - (i32.add (i32.const -2110816117)) - (i32.add (i32.const 614585613)) - (i32.add (i32.const 1134104753)) - (i32.add (i32.const -1984312485)) - (i32.add (i32.const -2046111252)) - (i32.add (i32.const 284839587)) - (i32.add (i32.const -210694670)) - (i32.add (i32.const 726877142)) - (i32.add (i32.const -1719043291)) - (i32.add (i32.const 1985834699)) - (i32.add (i32.const -350838254)) - (i32.add (i32.const 1939740981)) - (i32.add (i32.const 531859821)) - (i32.add (i32.const -385417279)) - (i32.add (i32.const 1529509637)) - (i32.add (i32.const 246997589)) - (i32.add (i32.const -1025003574)) - (i32.add (i32.const 1011110653)) - (i32.add (i32.const -1591976554)) - (i32.add (i32.const -1678631797)) - (i32.add (i32.const 1656467987)) - (i32.add (i32.const -500843843)) - (i32.add (i32.const -1227618123)) - (i32.add (i32.const 1043552097)) - (i32.add (i32.const -1626129896)) - (i32.add (i32.const -13906154)) - (i32.add (i32.const -744947124)) - (i32.add (i32.const 279312343)) - (i32.add (i32.const 1979580923)) - (i32.add (i32.const -2043174064)) - (i32.add (i32.const -1458630163)) - (i32.add (i32.const 1016692305)) - (i32.add (i32.const -1691588493)) - (i32.add (i32.const -1489936915)) - (i32.add (i32.const 97462277)) - (i32.add (i32.const -1182821537)) - (i32.add (i32.const -833168938)) - (i32.add (i32.const 253003201)) - (i32.add (i32.const -382976115)) - (i32.add (i32.const 1949530044)) - (i32.add (i32.const -1338808461)) - (i32.add (i32.const -1495779615)) - (i32.add (i32.const 813072157)) - (i32.add (i32.const -15886459)) - (i32.add (i32.const -1715412469)) - (i32.add (i32.const 549454771)) - (i32.add (i32.const 1968093684)) - (i32.add (i32.const 1549988469)) - (i32.add (i32.const -668743209)) - (i32.add (i32.const -451153732)) - (i32.add (i32.const 136560352)) - (i32.add (i32.const 875627238)) - (i32.add (i32.const 2085903335)) - (i32.add (i32.const 1723238298)) - (i32.add (i32.const 302938228)) - (i32.add (i32.const 1257952008)) - (i32.add (i32.const -1848511281)) - (i32.add (i32.const -1957599269)) - (i32.add (i32.const 596553512)) - (i32.add (i32.const 1357007388)) - (i32.add (i32.const -802667954)) - (i32.add (i32.const 405607750)) - (i32.add (i32.const 1520960699)) - (i32.add (i32.const -924209104)) - (i32.add (i32.const -1688771288)) - (i32.add (i32.const 1954202912)) - (i32.add (i32.const -646949133)) - (i32.add (i32.const -516501813)) - (i32.add (i32.const 2010530220)) - (i32.add (i32.const -291565253)) - (i32.add (i32.const 2009373766)) - (i32.add (i32.const 211989000)) - (i32.add (i32.const 1642383302)) - (i32.add (i32.const 656334171)) - (i32.add (i32.const -1627585416)) - (i32.add (i32.const 1173259500)) - (i32.add (i32.const -1948811425)) - (i32.add (i32.const -1360190602)) - (i32.add (i32.const 884878324)) - (i32.add (i32.const -1600525175)) - (i32.add (i32.const 977358645)) - (i32.add (i32.const -1606324205)) - (i32.add (i32.const 1671203709)) - (i32.add (i32.const -429021190)) - (i32.add (i32.const 1694940504)) - (i32.add (i32.const 1367321593)) - (i32.add (i32.const 2089473018)) - (i32.add (i32.const -1940282906)) - (i32.add (i32.const -545414539)) - (i32.add (i32.const -1934920243)) - (i32.add (i32.const -1212452936)) - (i32.add (i32.const -929798780)) - (i32.add (i32.const -985340587)) - (i32.add (i32.const 22977811)) - (i32.add (i32.const 1402865202)) - (i32.add (i32.const 250971278)) - (i32.add (i32.const -1268267120)) - (i32.add (i32.const 103925701)) - (i32.add (i32.const 94054243)) - (i32.add (i32.const -1921406766)) - (i32.add (i32.const -1377252306)) - (i32.add (i32.const 879861442)) - (i32.add (i32.const 535692008)) - (i32.add (i32.const -426565115)) - (i32.add (i32.const -44277668)) - (i32.add (i32.const -1501922902)) - (i32.add (i32.const 221978630)) - (i32.add (i32.const 719691042)) - (i32.add (i32.const 428592922)) - (i32.add (i32.const -834320319)) - (i32.add (i32.const 1318135136)) - (i32.add (i32.const 1483620867)) - (i32.add (i32.const -1009020263)) - (i32.add (i32.const 1029077424)) - (i32.add (i32.const 2021754736)) - (i32.add (i32.const 1785215490)) - (i32.add (i32.const -1786887106)) - (i32.add (i32.const 653399923)) - (i32.add (i32.const 1566040469)) - (i32.add (i32.const 626427099)) - (i32.add (i32.const 2048547031)) - (i32.add (i32.const 2021094036)) - (i32.add (i32.const 1923411169)) - (i32.add (i32.const 1660188227)) - (i32.add (i32.const 372893705)) - (i32.add (i32.const -989744851)) - (i32.add (i32.const -122142977)) - (i32.add (i32.const -1836699615)) - (i32.add (i32.const 2060358006)) - (i32.add (i32.const -1108603040)) - (i32.add (i32.const -646424840)) - (i32.add (i32.const -550783920)) - (i32.add (i32.const -16031794)) - (i32.add (i32.const 1030510498)) - (i32.add (i32.const -1801547201)) - (i32.add (i32.const 702080697)) - (i32.add (i32.const -1945755822)) - (i32.add (i32.const 2118065381)) - (i32.add (i32.const -1401927782)) - (i32.add (i32.const -1354011859)) - (i32.add (i32.const -1438047989)) - (i32.add (i32.const 201231711)) - (i32.add (i32.const 1890059036)) - (i32.add (i32.const -1118100479)) - (i32.add (i32.const 1360262074)) - (i32.add (i32.const -1217557731)) - (i32.add (i32.const 109264151)) - (i32.add (i32.const -424280893)) - (i32.add (i32.const -1920680941)) - (i32.add (i32.const 1295094555)) - (i32.add (i32.const -1726489707)) - (i32.add (i32.const -1891271287)) - (i32.add (i32.const 1954026765)) - (i32.add (i32.const 1442557405)) - (i32.add (i32.const -1303834475)) - (i32.add (i32.const 69964416)) - (i32.add (i32.const 2110643886)) - (i32.add (i32.const -121037826)) - (i32.add (i32.const -390896478)) - (i32.add (i32.const -1657456390)) - (i32.add (i32.const 1824455150)) - (i32.add (i32.const 1799030378)) - (i32.add (i32.const -513473045)) - (i32.add (i32.const 1717137229)) - (i32.add (i32.const -71452853)) - (i32.add (i32.const 1641925618)) - (i32.add (i32.const 1797617225)) - (i32.add (i32.const -257893669)) - (i32.add (i32.const 799425874)) - (i32.add (i32.const -572673758)) - (i32.add (i32.const -1391865832)) - (i32.add (i32.const -2031357632)) - (i32.add (i32.const -1890870339)) - (i32.add (i32.const 899313316)) - (i32.add (i32.const 2145405972)) - (i32.add (i32.const 992919908)) - (i32.add (i32.const 287571034)) - (i32.add (i32.const -1148526068)) - (i32.add (i32.const -309705069)) - (i32.add (i32.const -1701706784)) - (i32.add (i32.const -124244763)) - (i32.add (i32.const 575744891)) - (i32.add (i32.const -1988128386)) - (i32.add (i32.const 678481080)) - (i32.add (i32.const -1141636829)) - (i32.add (i32.const 925747758)) - (i32.add (i32.const -957823390)) - (i32.add (i32.const -1927883573)) - (i32.add (i32.const -493982908)) - (i32.add (i32.const -1021228955)) - (i32.add (i32.const 1493969225)) - (i32.add (i32.const -1939080547)) - (i32.add (i32.const -2029503498)) - (i32.add (i32.const 530199723)) - (i32.add (i32.const -862686369)) - (i32.add (i32.const 277633810)) - (i32.add (i32.const 1870636443)) - (i32.add (i32.const -1675286040)) - (i32.add (i32.const 956852979)) - (i32.add (i32.const -2133434601)) - (i32.add (i32.const -732214572)) - (i32.add (i32.const -1800904323)) - (i32.add (i32.const -572418115)) - (i32.add (i32.const -2050665387)) - (i32.add (i32.const -1157228954)) - (i32.add (i32.const -1720002960)) - (i32.add (i32.const -1088052081)) - (i32.add (i32.const 1999312442)) - (i32.add (i32.const 866239351)) - (i32.add (i32.const 989308398)) - (i32.add (i32.const 842724967)) - (i32.add (i32.const 2010350630)) - (i32.add (i32.const 1713128998)) - (i32.add (i32.const 2022460792)) - (i32.add (i32.const 1704725086)) - (i32.add (i32.const -58157768)) - (i32.add (i32.const 1479959929)) - (i32.add (i32.const 1655988235)) - (i32.add (i32.const -961740114)) - (i32.add (i32.const 690565147)) - (i32.add (i32.const 1634864494)) - (i32.add (i32.const -116243336)) - (i32.add (i32.const -424334790)) - (i32.add (i32.const -1714813213)) - (i32.add (i32.const -1134527586)) - (i32.add (i32.const -1417089942)) - (i32.add (i32.const 1664747290)) - (i32.add (i32.const -1170637439)) - (i32.add (i32.const -1538396868)) - (i32.add (i32.const 99706065)) - (i32.add (i32.const 488964843)) - (i32.add (i32.const 727863049)) - (i32.add (i32.const 659257359)) - (i32.add (i32.const 1600004846)) - (i32.add (i32.const -1736620475)) - (i32.add (i32.const -142736199)) - (i32.add (i32.const -703461227)) - (i32.add (i32.const -432142675)) - (i32.add (i32.const 1544682512)) - (i32.add (i32.const -2042668487)) - (i32.add (i32.const 1506182170)) - (i32.add (i32.const -1504513185)) - (i32.add (i32.const -1624176557)) - (i32.add (i32.const 1483965399)) - (i32.add (i32.const -764507453)) - (i32.add (i32.const 276830329)) - (i32.add (i32.const -725866084)) - (i32.add (i32.const 180445491)) - (i32.add (i32.const 1278087342)) - (i32.add (i32.const -1706074766)) - (i32.add (i32.const 1297517881)) - (i32.add (i32.const 191530506)) - (i32.add (i32.const 160994003)) - (i32.add (i32.const 1728025438)) - (i32.add (i32.const 1285937143)) - (i32.add (i32.const -1988919294)) - (i32.add (i32.const 1871190872)) - (i32.add (i32.const 1183671687)) - (i32.add (i32.const 700750503)) - (i32.add (i32.const 2105866626)) - (i32.add (i32.const -804942632)) - (i32.add (i32.const -2044369860)) - (i32.add (i32.const 1865136765)) - (i32.add (i32.const 951372518)) - (i32.add (i32.const -755585975)) - (i32.add (i32.const 980077655)) - (i32.add (i32.const -1133666786)) - (i32.add (i32.const -1442211178)) - (i32.add (i32.const -1441866864)) - (i32.add (i32.const 1458642835)) - (i32.add (i32.const -46622947)) - (i32.add (i32.const 804457959)) - (i32.add (i32.const -2101125895)) - (i32.add (i32.const -4257781)) - (i32.add (i32.const 201206249)) - (i32.add (i32.const -1564902053)) - (i32.add (i32.const -101649915)) - (i32.add (i32.const -16281894)) - (i32.add (i32.const -779684665)) - (i32.add (i32.const 1134551308)) - (i32.add (i32.const -338826182)) - (i32.add (i32.const -449142288)) - (i32.add (i32.const 819796387)) - (i32.add (i32.const 229188817)) - (i32.add (i32.const -123885209)) - (i32.add (i32.const 2076159796)) - (i32.add (i32.const -1949933715)) - (i32.add (i32.const -1435726961)) - (i32.add (i32.const 1202623318)) - (i32.add (i32.const 365495234)) - (i32.add (i32.const 858857397)) - (i32.add (i32.const 1811442927)) - (i32.add (i32.const -94198360)) - (i32.add (i32.const -104989028)) - (i32.add (i32.const -1782002644)) - (i32.add (i32.const -1890664884)) - (i32.add (i32.const -1855450486)) - (i32.add (i32.const 1204627437)) - (i32.add (i32.const -587960359)) - (i32.add (i32.const -1842918425)) - (i32.add (i32.const 1578015249)) - (i32.add (i32.const 2013555328)) - (i32.add (i32.const 906990212)) - (i32.add (i32.const 197533971)) - (i32.add (i32.const 1616266994)) - (i32.add (i32.const -780133960)) - (i32.add (i32.const 1118065080)) - (i32.add (i32.const -1947479599)) - (i32.add (i32.const -1479475793)) - (i32.add (i32.const 693682597)) - (i32.add (i32.const 1532225205)) - (i32.add (i32.const 377589195)) - (i32.add (i32.const 862695319)) - (i32.add (i32.const 2088614515)) - (i32.add (i32.const 2023349849)) - (i32.add (i32.const -1604759492)) - (i32.add (i32.const -1694949091)) - (i32.add (i32.const -628939903)) - (i32.add (i32.const 306114244)) - (i32.add (i32.const -691614827)) - (i32.add (i32.const -147819582)) - (i32.add (i32.const 737309328)) - (i32.add (i32.const -278168548)) - (i32.add (i32.const 248056055)) - (i32.add (i32.const -248058356)) - (i32.add (i32.const 385966807)) - (i32.add (i32.const 1808366594)) - (i32.add (i32.const 1616969619)) - (i32.add (i32.const -1658919673)) - (i32.add (i32.const 1575489326)) - (i32.add (i32.const -349551752)) - (i32.add (i32.const 1022577837)) - (i32.add (i32.const -149400698)) - (i32.add (i32.const 337962444)) - (i32.add (i32.const -1617150247)) - (i32.add (i32.const -1232093766)) - (i32.add (i32.const 1665578807)) - (i32.add (i32.const -176927737)) - (i32.add (i32.const 1905523406)) - (i32.add (i32.const -584367396)) - (i32.add (i32.const -1224564874)) - (i32.add (i32.const -1246962065)) - (i32.add (i32.const -376510504)) - (i32.add (i32.const -2089320318)) - (i32.add (i32.const -1198276704)) - (i32.add (i32.const 206891533)) - (i32.add (i32.const -1165579421)) - (i32.add (i32.const 1999957422)) - (i32.add (i32.const -1559742351)) - (i32.add (i32.const 1402420362)) - (i32.add (i32.const -1817515895)) - (i32.add (i32.const 1877526835)) - (i32.add (i32.const 468123054)) - (i32.add (i32.const -209169009)) - (i32.add (i32.const 1136537495)) - (i32.add (i32.const 167132836)) - (i32.add (i32.const -998902011)) - (i32.add (i32.const 205967316)) - (i32.add (i32.const 432172886)) - (i32.add (i32.const 1621056550)) - (i32.add (i32.const 301870869)) - (i32.add (i32.const 854115033)) - (i32.add (i32.const 441301414)) - (i32.add (i32.const -851890410)) - (i32.add (i32.const 1187948802)) - (i32.add (i32.const -340618034)) - (i32.add (i32.const -583903116)) - (i32.add (i32.const -1206153053)) - (i32.add (i32.const 1261468016)) - (i32.add (i32.const 371284642)) - (i32.add (i32.const -2099722603)) - (i32.add (i32.const -504165026)) - (i32.add (i32.const -523247865)) - (i32.add (i32.const -370969963)) - (i32.add (i32.const -686464562)) - (i32.add (i32.const -8347761)) - (i32.add (i32.const 295481380)) - (i32.add (i32.const 831756134)) - (i32.add (i32.const 75696244)) - (i32.add (i32.const -1598875888)) - (i32.add (i32.const 1585409443)) - (i32.add (i32.const -537421124)) - (i32.add (i32.const -1301466062)) - (i32.add (i32.const -634184548)) - (i32.add (i32.const -7843240)) - (i32.add (i32.const -414971831)) - (i32.add (i32.const -959379381)) - (i32.add (i32.const -1544871783)) - (i32.add (i32.const 92815128)) - (i32.add (i32.const -97587170)) - (i32.add (i32.const -23948941)) - (i32.add (i32.const 604674550)) - (i32.add (i32.const 1609108815)) - (i32.add (i32.const 1163624155)) - (i32.add (i32.const -2061915740)) - (i32.add (i32.const 1210801821)) - (i32.add (i32.const 372699988)) - (i32.add (i32.const 1666179023)) - (i32.add (i32.const -1749369082)) - (i32.add (i32.const -1788164940)) - (i32.add (i32.const 1783241499)) - (i32.add (i32.const 924716384)) - (i32.add (i32.const 228211668)) - (i32.add (i32.const -177326068)) - (i32.add (i32.const 736941482)) - (i32.add (i32.const -1810905225)) - (i32.add (i32.const -1723440489)) - (i32.add (i32.const 2016885208)) - (i32.add (i32.const 755246440)) - (i32.add (i32.const -2020573994)) - (i32.add (i32.const 435874123)) - (i32.add (i32.const -840543214)) - (i32.add (i32.const 535139333)) - (i32.add (i32.const 1956982843)) - (i32.add (i32.const 1127084368)) - (i32.add (i32.const 1930826244)) - (i32.add (i32.const -262417172)) - (i32.add (i32.const -1440838051)) - (i32.add (i32.const -1498629580)) - (i32.add (i32.const -408289700)) - (i32.add (i32.const 1630856845)) - (i32.add (i32.const -1837547582)) - (i32.add (i32.const 1182931269)) - (i32.add (i32.const 489765493)) - (i32.add (i32.const 670330614)) - (i32.add (i32.const 528979000)) - (i32.add (i32.const 1988588299)) - (i32.add (i32.const 1490551744)) - (i32.add (i32.const -1864449485)) - (i32.add (i32.const 1771755242)) - (i32.add (i32.const -1309244892)) - (i32.add (i32.const 1856163874)) - (i32.add (i32.const 1710868290)) - (i32.add (i32.const 803681417)) - (i32.add (i32.const 282925431)) - (i32.add (i32.const -1259286439)) - (i32.add (i32.const -890857672)) - (i32.add (i32.const 1320689563)) - (i32.add (i32.const -1596995938)) - (i32.add (i32.const -39237472)) - (i32.add (i32.const -1462120519)) - (i32.add (i32.const -1009639588)) - (i32.add (i32.const 442843569)) - (i32.add (i32.const -1032847414)) - (i32.add (i32.const 915252426)) - (i32.add (i32.const 683431990)) - (i32.add (i32.const 1677181238)) - (i32.add (i32.const 1448079923)) - (i32.add (i32.const 903867719)) - (i32.add (i32.const 951956749)) - (i32.add (i32.const 1079898159)) - (i32.add (i32.const 910038692)) - (i32.add (i32.const 1597306331)) - (i32.add (i32.const 1377955769)) - (i32.add (i32.const -30288852)) - (i32.add (i32.const 1490343809)) - (i32.add (i32.const -1950483043)) - (i32.add (i32.const 810704728)) - (i32.add (i32.const -1188110735)) - (i32.add (i32.const -634165644)) - (i32.add (i32.const 2016439279)) - (i32.add (i32.const -502868035)) - (i32.add (i32.const -1234173995)) - (i32.add (i32.const -437792845)) - (i32.add (i32.const -470979761)) - (i32.add (i32.const 6635339)) - (i32.add (i32.const 1695258051)) - (i32.add (i32.const -1234882628)) - (i32.add (i32.const 2121291530)) - (i32.add (i32.const -757493038)) - (i32.add (i32.const 1600240125)) - (i32.add (i32.const -1208768469)) - (i32.add (i32.const 1891511128)) - (i32.add (i32.const -325878398)) - (i32.add (i32.const -1475924874)) - (i32.add (i32.const 301175817)) - (i32.add (i32.const -1312324450)) - (i32.add (i32.const 162937424)) - (i32.add (i32.const 273541731)) - (i32.add (i32.const -1082097491)) - (i32.add (i32.const 2007710448)) - (i32.add (i32.const -522040290)) - (i32.add (i32.const 384708037)) - (i32.add (i32.const -1983978644)) - (i32.add (i32.const -1063897857)) - (i32.add (i32.const -739709137)) - (i32.add (i32.const 1080758661)) - (i32.add (i32.const -1775357000)) - (i32.add (i32.const 1148359235)) - (i32.add (i32.const -1200384411)) - (i32.add (i32.const 500007965)) - (i32.add (i32.const -1208685393)) - (i32.add (i32.const 1491859377)) - (i32.add (i32.const -1038749487)) - (i32.add (i32.const -801124203)) - (i32.add (i32.const 1040400564)) - (i32.add (i32.const 1611678478)) - (i32.add (i32.const 1792331642)) - (i32.add (i32.const 760127248)) - (i32.add (i32.const -1164024255)) - (i32.add (i32.const 1932420040)) - (i32.add (i32.const -1650214172)) - (i32.add (i32.const 1743428893)) - (i32.add (i32.const -2041315156)) - (i32.add (i32.const 1549008605)) - (i32.add (i32.const 2086325934)) - (i32.add (i32.const -412619497)) - (i32.add (i32.const -171206950)) - (i32.add (i32.const 11500489)) - (i32.add (i32.const 1839501452)) - (i32.add (i32.const -1577783555)) - (i32.add (i32.const 440398017)) - (i32.add (i32.const 1184812438)) - (i32.add (i32.const 362317296)) - (i32.add (i32.const -151439366)) - (i32.add (i32.const -1288859425)) - (i32.add (i32.const -1888466827)) - (i32.add (i32.const 1522397097)) - (i32.add (i32.const 2026872165)) - (i32.add (i32.const -454441382)) - (i32.add (i32.const -1111192199)) - (i32.add (i32.const -387715362)) - (i32.add (i32.const -1452579080)) - (i32.add (i32.const 1332570231)) - (i32.add (i32.const -1289447580)) - (i32.add (i32.const 1272401590)) - (i32.add (i32.const -2013459265)) - (i32.add (i32.const -657312252)) - (i32.add (i32.const -2134530059)) - (i32.add (i32.const -1796550979)) - (i32.add (i32.const 1050339178)) - (i32.add (i32.const 883188262)) - (i32.add (i32.const -103543070)) - (i32.add (i32.const 2041607631)) - (i32.add (i32.const -1175422771)) - (i32.add (i32.const -1782223263)) - (i32.add (i32.const -960049550)) - (i32.add (i32.const -443889127)) - (i32.add (i32.const -1448322776)) - (i32.add (i32.const -896468927)) - (i32.add (i32.const -190472919)) - (i32.add (i32.const -321078513)) - (i32.add (i32.const -798759391)) - (i32.add (i32.const -1241170854)) - (i32.add (i32.const -2071857993)) - (i32.add (i32.const -954882584)) - (i32.add (i32.const 9734496)) - (i32.add (i32.const -745211664)) - (i32.add (i32.const 704252750)) - (i32.add (i32.const -963447735)) - (i32.add (i32.const 531589158)) - (i32.add (i32.const 2002538463)) - (i32.add (i32.const -1255375419)) - (i32.add (i32.const -1771894165)) - (i32.add (i32.const -867056524)) - (i32.add (i32.const 409372424)) - (i32.add (i32.const -1646654850)) - (i32.add (i32.const -235366498)) - (i32.add (i32.const -930717459)) - (i32.add (i32.const 1405856498)) - (i32.add (i32.const -973988534)) - (i32.add (i32.const 1407852860)) - (i32.add (i32.const 1660958607)) - (i32.add (i32.const -585957659)) - (i32.add (i32.const 1045587984)) - (i32.add (i32.const 13375962)) - (i32.add (i32.const -332342220)) - (i32.add (i32.const -226455408)) - (i32.add (i32.const 831547921)) - (i32.add (i32.const -1301464615)) - (i32.add (i32.const 969502619)) - (i32.add (i32.const 1176411072)) - (i32.add (i32.const -1916563175)) - (i32.add (i32.const -1283961334)) - (i32.add (i32.const 39599129)) - (i32.add (i32.const -564483460)) - (i32.add (i32.const -924378111)) - (i32.add (i32.const 779681933)) - (i32.add (i32.const -616683011)) - (i32.add (i32.const -59322090)) - (i32.add (i32.const -691427204)) - (i32.add (i32.const -617416499)) - (i32.add (i32.const 522974826)) - (i32.add (i32.const -2102017597)) - (i32.add (i32.const -573782852)) - (i32.add (i32.const -715580840)) - (i32.add (i32.const 1856797148)) - (i32.add (i32.const 994708112)) - (i32.add (i32.const -1298470075)) - (i32.add (i32.const 893223741)) - (i32.add (i32.const 690771786)) - (i32.add (i32.const 56556561)) - (i32.add (i32.const 660420109)) - (i32.add (i32.const 1438011349)) - (i32.add (i32.const -674623)) - (i32.add (i32.const 201294912)) - (i32.add (i32.const -2118509060)) - (i32.add (i32.const -101064414)) - (i32.add (i32.const 1836361024)) - (i32.add (i32.const -1784131261)) - (i32.add (i32.const -939409319)) - (i32.add (i32.const 533123433)) - (i32.add (i32.const -708904736)) - (i32.add (i32.const -1456099834)) - (i32.add (i32.const 30382780)) - (i32.add (i32.const -1710016744)) - (i32.add (i32.const -719049935)) - (i32.add (i32.const 308729305)) - (i32.add (i32.const -219997393)) - (i32.add (i32.const -266647898)) - (i32.add (i32.const -309486542)) - (i32.add (i32.const 2004132528)) - (i32.add (i32.const -2126302051)) - (i32.add (i32.const -609613013)) - (i32.add (i32.const 311374936)) - (i32.add (i32.const -1479467000)) - (i32.add (i32.const 1610406655)) - (i32.add (i32.const -939226556)) - (i32.add (i32.const -282429063)) - (i32.add (i32.const 1199408067)) - (i32.add (i32.const 1822717077)) - (i32.add (i32.const 959991011)) - (i32.add (i32.const 2012091349)) - (i32.add (i32.const 330571742)) - (i32.add (i32.const -832704954)) - (i32.add (i32.const -2037167717)) - (i32.add (i32.const 268611828)) - (i32.add (i32.const -347622238)) - (i32.add (i32.const 1083405434)) - (i32.add (i32.const -1672517546)) - (i32.add (i32.const -399642544)) - (i32.add (i32.const 1410315511)) - (i32.add (i32.const 636054530)) - (i32.add (i32.const -1740859616)) - (i32.add (i32.const 573985225)) - (i32.add (i32.const -696833445)) - (i32.add (i32.const -187928381)) - (i32.add (i32.const -201826810)) - (i32.add (i32.const -268232484)) - (i32.add (i32.const -482181518)) - (i32.add (i32.const -1182850350)) - (i32.add (i32.const 2145044545)) - (i32.add (i32.const 1501707863)) - (i32.add (i32.const -938894063)) - (i32.add (i32.const 100646949)) - (i32.add (i32.const -1124031761)) - (i32.add (i32.const -1395608176)) - (i32.add (i32.const -1341104061)) - (i32.add (i32.const 1723535840)) - (i32.add (i32.const -1794859093)) - (i32.add (i32.const 356336335)) - (i32.add (i32.const -1804017473)) - (i32.add (i32.const -2049970680)) - (i32.add (i32.const -710698328)) - (i32.add (i32.const -2042680722)) - (i32.add (i32.const -815560516)) - (i32.add (i32.const -1222691918)) - (i32.add (i32.const -105744993)) - (i32.add (i32.const 165807765)) - (i32.add (i32.const -1983536222)) - (i32.add (i32.const 22363958)) - (i32.add (i32.const -1144077493)) - (i32.add (i32.const -35905299)) - (i32.add (i32.const 1905423161)) - (i32.add (i32.const -102834957)) - (i32.add (i32.const -1437334678)) - (i32.add (i32.const -404634959)) - (i32.add (i32.const 1744118003)) - (i32.add (i32.const 1333525935)) - (i32.add (i32.const 375213396)) - (i32.add (i32.const 878470460)) - (i32.add (i32.const -126029669)) - (i32.add (i32.const 1814051033)) - (i32.add (i32.const -139460902)) - (i32.add (i32.const 408154937)) - (i32.add (i32.const 1227147989)) - (i32.add (i32.const 227250503)) - (i32.add (i32.const 1742837536)) - (i32.add (i32.const 1291233395)) - (i32.add (i32.const 848184797)) - (i32.add (i32.const 1217227592)) - (i32.add (i32.const 1232910381)) - (i32.add (i32.const -1134868846)) - (i32.add (i32.const 1538952850)) - (i32.add (i32.const 173641366)) - (i32.add (i32.const 1597228587)) - (i32.add (i32.const 394294081)) - (i32.add (i32.const -1736293365)) - (i32.add (i32.const 1503764341)) - (i32.add (i32.const 303956498)) - (i32.add (i32.const -1965891408)) - (i32.add (i32.const -850877732)) - (i32.add (i32.const 32038705)) - (i32.add (i32.const -1313944379)) - (i32.add (i32.const 876818088)) - (i32.add (i32.const -487201696)) - (i32.add (i32.const -1224955085)) - (i32.add (i32.const -796957211)) - (i32.add (i32.const 1016085688)) - (i32.add (i32.const -896188705)) - (i32.add (i32.const -504164619)) - (i32.add (i32.const 145619839)) - (i32.add (i32.const 804440604)) - (i32.add (i32.const 1828457688)) - (i32.add (i32.const 191528570)) - (i32.add (i32.const 1142069535)) - (i32.add (i32.const 2076969586)) - (i32.add (i32.const -1279479905)) - (i32.add (i32.const -972317275)) - (i32.add (i32.const 1272866579)) - (i32.add (i32.const 1221398442)) - (i32.add (i32.const 1719205935)) - (i32.add (i32.const 1171521065)) - (i32.add (i32.const -1632953503)) - (i32.add (i32.const -777684306)) - (i32.add (i32.const -44026620)) - (i32.add (i32.const 1157458339)) - (i32.add (i32.const 1456038584)) - (i32.add (i32.const 1081699797)) - (i32.add (i32.const -483766548)) - (i32.add (i32.const 1828344909)) - (i32.add (i32.const -981014050)) - (i32.add (i32.const 2055447848)) - (i32.add (i32.const -1109028597)) - (i32.add (i32.const -795398126)) - (i32.add (i32.const -1618034832)) - (i32.add (i32.const 347339511)) - (i32.add (i32.const -213256482)) - (i32.add (i32.const -2107295975)) - (i32.add (i32.const 661825464)) - (i32.add (i32.const -908514444)) - (i32.add (i32.const 1934318113)) - (i32.add (i32.const 1871820668)) - (i32.add (i32.const 85776890)) - (i32.add (i32.const 364802254)) - (i32.add (i32.const 422312713)) - (i32.add (i32.const 2000394747)) - (i32.add (i32.const 1668022310)) - (i32.add (i32.const -1621950630)) - (i32.add (i32.const 1382590254)) - (i32.add (i32.const -1736601976)) - (i32.add (i32.const -563840881)) - (i32.add (i32.const 856037806)) - (i32.add (i32.const -355259377)) - (i32.add (i32.const 614680778)) - (i32.add (i32.const -1660695054)) - (i32.add (i32.const -266809432)) - (i32.add (i32.const -210954270)) - (i32.add (i32.const -48285764)) - (i32.add (i32.const 1317185373)) - (i32.add (i32.const -956785074)) - (i32.add (i32.const -390068941)) - (i32.add (i32.const -190846746)) - (i32.add (i32.const -2035299751)) - (i32.add (i32.const 1107615815)) - (i32.add (i32.const -1106095835)) - (i32.add (i32.const -1759105898)) - (i32.add (i32.const -1426355487)) - (i32.add (i32.const 1290271258)) - (i32.add (i32.const -1516517771)) - (i32.add (i32.const 1825008849)) - (i32.add (i32.const 384052989)) - (i32.add (i32.const -1114380034)) - (i32.add (i32.const -77214942)) - (i32.add (i32.const 1521044137)) - (i32.add (i32.const 568317373)) - (i32.add (i32.const -720823966)) - (i32.add (i32.const -641061532)) - (i32.add (i32.const 1123425757)) - (i32.add (i32.const -2050469077)) - (i32.add (i32.const -1297383438)) - (i32.add (i32.const -1745112284)) - (i32.add (i32.const -96583801)) - (i32.add (i32.const 296613882)) - (i32.add (i32.const 538201832)) - (i32.add (i32.const 1398960219)) - (i32.add (i32.const -1975762508)) - (i32.add (i32.const 33347923)) - (i32.add (i32.const -344389966)) - (i32.add (i32.const -119190876)) - (i32.add (i32.const 993051139)) - (i32.add (i32.const 514454605)) - (i32.add (i32.const -2099370441)) - (i32.add (i32.const 1544987191)) - (i32.add (i32.const 723112161)) - (i32.add (i32.const 694620680)) - (i32.add (i32.const 1321661812)) - (i32.add (i32.const -800621227)) - (i32.add (i32.const 413356482)) - (i32.add (i32.const 1262127982)) - (i32.add (i32.const 6089876)) - (i32.add (i32.const 1570542173)) - (i32.add (i32.const -1743859148)) - (i32.add (i32.const -217501807)) - (i32.add (i32.const 275956856)) - (i32.add (i32.const 1588175318)) - (i32.add (i32.const 1017815671)) - (i32.add (i32.const 1176281527)) - (i32.add (i32.const 1837615103)) - (i32.add (i32.const -526584074)) - (i32.add (i32.const -1779595132)) - (i32.add (i32.const -2058904841)) - (i32.add (i32.const -1996299935)) - (i32.add (i32.const 1787033044)) - (i32.add (i32.const 570754658)) - (i32.add (i32.const 491279464)) - (i32.add (i32.const 1352872786)) - (i32.add (i32.const -1317855116)) - (i32.add (i32.const 1256493218)) - (i32.add (i32.const -1979614361)) - (i32.add (i32.const 111783425)) - (i32.add (i32.const -2060694177)) - (i32.add (i32.const 1692725784)) - (i32.add (i32.const -1717081728)) - (i32.add (i32.const -543643916)) - (i32.add (i32.const 711706312)) - (i32.add (i32.const -1980576875)) - (i32.add (i32.const -114705930)) - (i32.add (i32.const -1372220570)) - (i32.add (i32.const 897451678)) - (i32.add (i32.const 2110037631)) - (i32.add (i32.const -1543510537)) - (i32.add (i32.const 818654772)) - (i32.add (i32.const -492500185)) - (i32.add (i32.const 1918445482)) - (i32.add (i32.const 1763427575)) - (i32.add (i32.const 1570273085)) - (i32.add (i32.const -35285578)) - (i32.add (i32.const 852126425)) - (i32.add (i32.const -1066419166)) - (i32.add (i32.const 1640593245)) - (i32.add (i32.const -1942365682)) - (i32.add (i32.const -347217992)) - (i32.add (i32.const -940314276)) - (i32.add (i32.const -1171182089)) - (i32.add (i32.const 1703354622)) - (i32.add (i32.const -276802503)) - (i32.add (i32.const -1143502496)) - (i32.add (i32.const -621795783)) - (i32.add (i32.const -374364050)) - (i32.add (i32.const -1145938353)) - (i32.add (i32.const 502109012)) - (i32.add (i32.const 1419584375)) - (i32.add (i32.const -1418552408)) - (i32.add (i32.const -1607835340)) - (i32.add (i32.const -1856820653)) - (i32.add (i32.const 1816698103)) - (i32.add (i32.const 1159038935)) - (i32.add (i32.const -57677600)) - (i32.add (i32.const 1138120912)) - (i32.add (i32.const -590086005)) - (i32.add (i32.const -2132458617)) - (i32.add (i32.const -1859638179)) - (i32.add (i32.const 666377517)) - (i32.add (i32.const 1185787254)) - (i32.add (i32.const 1286106854)) - (i32.add (i32.const -896554672)) - (i32.add (i32.const 519724786)) - (i32.add (i32.const -576854045)) - (i32.add (i32.const -1278666673)) - (i32.add (i32.const 621277313)) - (i32.add (i32.const 292605637)) - (i32.add (i32.const -841081605)) - (i32.add (i32.const 295843720)) - (i32.add (i32.const 2131526969)) - (i32.add (i32.const 1228164596)) - (i32.add (i32.const -1164943921)) - (i32.add (i32.const 142586711)) - (i32.add (i32.const -52701069)) - (i32.add (i32.const 523008516)) - (i32.add (i32.const -1010148457)) - (i32.add (i32.const 1344120857)) - (i32.add (i32.const 1260688225)) - (i32.add (i32.const 1158085133)) - (i32.add (i32.const 444301499)) - (i32.add (i32.const 214518335)) - (i32.add (i32.const 110902396)) - (i32.add (i32.const -1669343443)) - (i32.add (i32.const 1480101823)) - (i32.add (i32.const -1988592625)) - (i32.add (i32.const 1897293970)) - (i32.add (i32.const -1672958900)) - (i32.add (i32.const -298714073)) - (i32.add (i32.const -1473299168)) - (i32.add (i32.const -804095584)) - (i32.add (i32.const -349618743)) - (i32.add (i32.const 460900509)) - (i32.add (i32.const -1509450119)) - (i32.add (i32.const 1589684513)) - (i32.add (i32.const -1457178792)) - (i32.add (i32.const 773887815)) - (i32.add (i32.const 1809067697)) - (i32.add (i32.const -1936507462)) - (i32.add (i32.const 981873226)) - (i32.add (i32.const 320238530)) - (i32.add (i32.const -360470150)) - (i32.add (i32.const 757388646)) - (i32.add (i32.const -555262086)) - (i32.add (i32.const 870952336)) - (i32.add (i32.const 1193843721)) - (i32.add (i32.const 1910155856)) - (i32.add (i32.const 14639556)) - (i32.add (i32.const -1278854635)) - (i32.add (i32.const -782859634)) - (i32.add (i32.const 110828723)) - (i32.add (i32.const 135989938)) - (i32.add (i32.const 1966640897)) - (i32.add (i32.const 2106384781)) - (i32.add (i32.const 1243886612)) - (i32.add (i32.const 2143568289)) - (i32.add (i32.const -41378239)) - (i32.add (i32.const -881169401)) - (i32.add (i32.const -1504616109)) - (i32.add (i32.const 668991129)) - (i32.add (i32.const -5608139)) - (i32.add (i32.const 1696840381)) - (i32.add (i32.const 532530946)) - (i32.add (i32.const -1715526654)) - (i32.add (i32.const 1085142561)) - (i32.add (i32.const 867012764)) - (i32.add (i32.const -324224449)) - (i32.add (i32.const 1289016758)) - (i32.add (i32.const 870119649)) - (i32.add (i32.const 1369096772)) - (i32.add (i32.const -383284409)) - (i32.add (i32.const -965820369)) - (i32.add (i32.const -802156737)) - (i32.add (i32.const -255990026)) - (i32.add (i32.const -55022663)) - (i32.add (i32.const -2062876537)) - (i32.add (i32.const -1949935019)) - (i32.add (i32.const -1019245384)) - (i32.add (i32.const 1219095795)) - (i32.add (i32.const -1204031022)) - (i32.add (i32.const -1278816356)) - (i32.add (i32.const -1732911622)) - (i32.add (i32.const 1604632056)) - (i32.add (i32.const 1781804198)) - (i32.add (i32.const 897915134)) - (i32.add (i32.const -847537463)) - (i32.add (i32.const 1298685776)) - (i32.add (i32.const 1915226874)) - (i32.add (i32.const -295298648)) - (i32.add (i32.const 376739847)) - (i32.add (i32.const -2006823202)) - (i32.add (i32.const -800603669)) - (i32.add (i32.const 385517522)) - (i32.add (i32.const 531910488)) - (i32.add (i32.const 1718742989)) - (i32.add (i32.const -776310562)) - (i32.add (i32.const -1486484221)) - (i32.add (i32.const -1853777332)) - (i32.add (i32.const 2144433952)) - (i32.add (i32.const 1208488928)) - (i32.add (i32.const 767834625)) - (i32.add (i32.const 414456567)) - (i32.add (i32.const -151097029)) - (i32.add (i32.const -66126655)) - (i32.add (i32.const 679144497)) - (i32.add (i32.const 283132002)) - (i32.add (i32.const -2114313118)) - (i32.add (i32.const -389751239)) - (i32.add (i32.const -308611738)) - (i32.add (i32.const -700445227)) - (i32.add (i32.const -1687421123)) - (i32.add (i32.const 770919902)) - (i32.add (i32.const -1801258353)) - (i32.add (i32.const 103774443)) - (i32.add (i32.const 1494793156)) - (i32.add (i32.const 381849213)) - (i32.add (i32.const 904953558)) - (i32.add (i32.const 1721315023)) - (i32.add (i32.const -131463752)) - (i32.add (i32.const -1735062999)) - (i32.add (i32.const 741349992)) - (i32.add (i32.const -645887307)) - (i32.add (i32.const 1883141350)) - (i32.add (i32.const -568452813)) - (i32.add (i32.const -648309310)) - (i32.add (i32.const 1314086457)) - (i32.add (i32.const 1571151175)) - (i32.add (i32.const -268046008)) - (i32.add (i32.const -2003341846)) - (i32.add (i32.const 1107529177)) - (i32.add (i32.const 1947569765)) - (i32.add (i32.const -1477015502)) - (i32.add (i32.const -1270129289)) - (i32.add (i32.const -170866476)) - (i32.add (i32.const -808503347)) - (i32.add (i32.const 2033642373)) - (i32.add (i32.const -1911989177)) - (i32.add (i32.const -543620945)) - (i32.add (i32.const 1484433421)) - (i32.add (i32.const -1143751446)) - (i32.add (i32.const 1733313312)) - (i32.add (i32.const 2011590958)) - (i32.add (i32.const 1651065755)) - (i32.add (i32.const 2049651345)) - (i32.add (i32.const -1304472043)) - (i32.add (i32.const 2105544462)) - (i32.add (i32.const -93079292)) - (i32.add (i32.const 1238352786)) - (i32.add (i32.const 1455659756)) - (i32.add (i32.const -906805955)) - (i32.add (i32.const 1757306744)) - (i32.add (i32.const -1483917218)) - (i32.add (i32.const -412546053)) - (i32.add (i32.const 607862252)) - (i32.add (i32.const -1660771420)) - (i32.add (i32.const -1874971503)) - (i32.add (i32.const -1442896874)) - (i32.add (i32.const -1609769358)) - (i32.add (i32.const -1262178180)) - (i32.add (i32.const -827124593)) - (i32.add (i32.const -545790868)) - (i32.add (i32.const 355300528)) - (i32.add (i32.const 111553876)) - (i32.add (i32.const -635010182)) - (i32.add (i32.const 142123193)) - (i32.add (i32.const 1041615003)) - (i32.add (i32.const -1372183939)) - (i32.add (i32.const -1365219803)) - (i32.add (i32.const 744767560)) - (i32.add (i32.const -386349576)) - (i32.add (i32.const -1703994878)) - (i32.add (i32.const -1491837998)) - (i32.add (i32.const -1988543637)) - (i32.add (i32.const 1462334062)) - (i32.add (i32.const 1406304498)) - (i32.add (i32.const -715074929)) - (i32.add (i32.const 1368696557)) - (i32.add (i32.const -1762345873)) - (i32.add (i32.const -1918505445)) - (i32.add (i32.const 185006403)) - (i32.add (i32.const 460956393)) - (i32.add (i32.const -2113904980)) - (i32.add (i32.const -442531156)) - (i32.add (i32.const -65300350)) - (i32.add (i32.const -1468015077)) - (i32.add (i32.const 913027027)) - (i32.add (i32.const -1221266632)) - (i32.add (i32.const -1829228080)) - (i32.add (i32.const -1375309573)) - (i32.add (i32.const -1346644650)) - (i32.add (i32.const 240206995)) - (i32.add (i32.const 2114280765)) - (i32.add (i32.const -476760197)) - (i32.add (i32.const -1634349289)) - (i32.add (i32.const -588941352)) - (i32.add (i32.const -11153255)) - (i32.add (i32.const 1945838395)) - (i32.add (i32.const 909804839)) - (i32.add (i32.const -1517410000)) - (i32.add (i32.const 1041086289)) - (i32.add (i32.const -1114129092)) - (i32.add (i32.const 1018150863)) - (i32.add (i32.const 873065195)) - (i32.add (i32.const 572752294)) - (i32.add (i32.const -1745968238)) - (i32.add (i32.const 306925303)) - (i32.add (i32.const -1837316328)) - (i32.add (i32.const 1150926834)) - (i32.add (i32.const -50234923)) - (i32.add (i32.const -2077498322)) - (i32.add (i32.const -1746448553)) - (i32.add (i32.const -1296620175)) - (i32.add (i32.const -1223624003)) - (i32.add (i32.const -1128162514)) - (i32.add (i32.const 58563544)) - (i32.add (i32.const -232187843)) - (i32.add (i32.const 1583901298)) - (i32.add (i32.const -250131121)) - (i32.add (i32.const -1493338318)) - (i32.add (i32.const 1164482371)) - (i32.add (i32.const -2029781437)) - (i32.add (i32.const -819479618)) - (i32.add (i32.const -1211244306)) - (i32.add (i32.const 522391284)) - (i32.add (i32.const 506104079)) - (i32.add (i32.const 726602141)) - (i32.add (i32.const 1866007715)) - (i32.add (i32.const 866742894)) - (i32.add (i32.const -1905011783)) - (i32.add (i32.const 243330922)) - (i32.add (i32.const 1391291365)) - (i32.add (i32.const 1224112979)) - (i32.add (i32.const -1201841519)) - (i32.add (i32.const -1357560090)) - (i32.add (i32.const -1156923769)) - (i32.add (i32.const -1987296975)) - (i32.add (i32.const -370523519)) - (i32.add (i32.const -704383282)) - (i32.add (i32.const 725389411)) - (i32.add (i32.const -1023954881)) - (i32.add (i32.const 1112727606)) - (i32.add (i32.const -727821180)) - (i32.add (i32.const 2036821713)) - (i32.add (i32.const -1230170153)) - (i32.add (i32.const -1494872742)) - (i32.add (i32.const -1303442692)) - (i32.add (i32.const 320787721)) - (i32.add (i32.const -102499988)) - (i32.add (i32.const 1179851373)) - (i32.add (i32.const 1484488799)) - (i32.add (i32.const 1177917859)) - (i32.add (i32.const 1991312742)) - (i32.add (i32.const -1762240586)) - (i32.add (i32.const 261713854)) - (i32.add (i32.const -1492503307)) - (i32.add (i32.const 1053943136)) - (i32.add (i32.const -2014026556)) - (i32.add (i32.const 1576565432)) - (i32.add (i32.const 2123240233)) - (i32.add (i32.const 258746083)) - (i32.add (i32.const -1926044319)) - (i32.add (i32.const -2094500744)) - (i32.add (i32.const 722192219)) - (i32.add (i32.const -90389681)) - (i32.add (i32.const -1023831728)) - (i32.add (i32.const 702345105)) - (i32.add (i32.const 2122529667)) - (i32.add (i32.const -1112601817)) - (i32.add (i32.const 430898344)) - (i32.add (i32.const -1506860866)) - (i32.add (i32.const -461544612)) - (i32.add (i32.const -661811492)) - (i32.add (i32.const -706590958)) - (i32.add (i32.const -1763693865)) - (i32.add (i32.const 933830206)) - (i32.add (i32.const -1460757756)) - (i32.add (i32.const 674788211)) - (i32.add (i32.const -740493720)) - (i32.add (i32.const 1493873166)) - (i32.add (i32.const -2098390911)) - (i32.add (i32.const -785882820)) - (i32.add (i32.const 636463635)) - (i32.add (i32.const 1199555647)) - (i32.add (i32.const -53501347)) - (i32.add (i32.const -1903468824)) - (i32.add (i32.const -1850405701)) - (i32.add (i32.const -84723002)) - (i32.add (i32.const -345023894)) - (i32.add (i32.const -1292350584)) - (i32.add (i32.const 125709105)) - (i32.add (i32.const -2194373)) - (i32.add (i32.const -2049774046)) - (i32.add (i32.const -577775969)) - (i32.add (i32.const -358268316)) - (i32.add (i32.const 1037841496)) - (i32.add (i32.const -2014749431)) - (i32.add (i32.const 1040972964)) - (i32.add (i32.const 1585238187)) - (i32.add (i32.const -476315628)) - (i32.add (i32.const -1385588391)) - (i32.add (i32.const 312585986)) - (i32.add (i32.const -1249099375)) - (i32.add (i32.const -181583895)) - (i32.add (i32.const -756074575)) - (i32.add (i32.const -704243340)) - (i32.add (i32.const 2025369317)) - (i32.add (i32.const 1008382815)) - (i32.add (i32.const 11268695)) - (i32.add (i32.const 734414839)) - (i32.add (i32.const -1048073075)) - (i32.add (i32.const -1613967838)) - (i32.add (i32.const 773146665)) - (i32.add (i32.const -1220959343)) - (i32.add (i32.const -2107578848)) - (i32.add (i32.const -1305671076)) - (i32.add (i32.const -595623247)) - (i32.add (i32.const 921044290)) - (i32.add (i32.const -1004491837)) - (i32.add (i32.const -1196027843)) - (i32.add (i32.const 840730900)) - (i32.add (i32.const -705206108)) - (i32.add (i32.const 69918847)) - (i32.add (i32.const -200003339)) - (i32.add (i32.const 1166367788)) - (i32.add (i32.const -1150290386)) - (i32.add (i32.const 457063358)) - (i32.add (i32.const -423399795)) - (i32.add (i32.const -706804355)) - (i32.add (i32.const 1142212446)) - (i32.add (i32.const -1321183487)) - (i32.add (i32.const -306143667)) - (i32.add (i32.const -1580979495)) - (i32.add (i32.const 1315852972)) - (i32.add (i32.const -629818056)) - (i32.add (i32.const -1111230586)) - (i32.add (i32.const 1576676229)) - (i32.add (i32.const 1450129830)) - (i32.add (i32.const -1269179879)) - (i32.add (i32.const -74609040)) - (i32.add (i32.const -1853395324)) - (i32.add (i32.const 516838298)) - (i32.add (i32.const 1448735031)) - (i32.add (i32.const -1084351266)) - (i32.add (i32.const -1790987719)) - (i32.add (i32.const 1137941334)) - (i32.add (i32.const 713350880)) - (i32.add (i32.const -624221986)) - (i32.add (i32.const -1877270803)) - (i32.add (i32.const 1714648250)) - (i32.add (i32.const -873751324)) - (i32.add (i32.const -1105261742)) - (i32.add (i32.const -701793678)) - (i32.add (i32.const 171846417)) - (i32.add (i32.const 610766622)) - (i32.add (i32.const 1892575124)) - (i32.add (i32.const -463072297)) - (i32.add (i32.const -1506180771)) - (i32.add (i32.const 192703089)) - (i32.add (i32.const -1650300340)) - (i32.add (i32.const -1026770780)) - (i32.add (i32.const 1476631972)) - (i32.add (i32.const -1264949693)) - (i32.add (i32.const -1280504423)) - (i32.add (i32.const -1881656649)) - (i32.add (i32.const 1695129865)) - (i32.add (i32.const -944680552)) - (i32.add (i32.const -1462088807)) - (i32.add (i32.const 1737243599)) - (i32.add (i32.const 1010214124)) - (i32.add (i32.const -2122933291)) - (i32.add (i32.const -956251492)) - (i32.add (i32.const -247130457)) - (i32.add (i32.const -552465361)) - (i32.add (i32.const 81873887)) - (i32.add (i32.const 883977012)) - (i32.add (i32.const 543206926)) - (i32.add (i32.const 1993672437)) - (i32.add (i32.const 890700032)) - (i32.add (i32.const 280194885)) - (i32.add (i32.const -414819528)) - (i32.add (i32.const -1549406132)) - (i32.add (i32.const 1684324681)) - (i32.add (i32.const 1992977507)) - (i32.add (i32.const 1083970228)) - (i32.add (i32.const 485623535)) - (i32.add (i32.const -1300905632)) - (i32.add (i32.const -1593404628)) - (i32.add (i32.const 751293244)) - (i32.add (i32.const -723635329)) - (i32.add (i32.const 402620999)) - (i32.add (i32.const -171792925)) - (i32.add (i32.const -1352689676)) - (i32.add (i32.const -281524781)) - (i32.add (i32.const 994974869)) - (i32.add (i32.const -286003605)) - (i32.add (i32.const 794634462)) - (i32.add (i32.const -776810651)) - (i32.add (i32.const -596116433)) - (i32.add (i32.const -633740052)) - (i32.add (i32.const -763018125)) - (i32.add (i32.const 2103001194)) - (i32.add (i32.const -684856496)) - (i32.add (i32.const -1540501943)) - (i32.add (i32.const 401966215)) - (i32.add (i32.const 1115921480)) - (i32.add (i32.const -907911978)) - (i32.add (i32.const 150320406)) - (i32.add (i32.const 1731350969)) - (i32.add (i32.const 1782377810)) - (i32.add (i32.const 1272959083)) - (i32.add (i32.const -1423279644)) - (i32.add (i32.const 1339981408)) - (i32.add (i32.const -808479258)) - (i32.add (i32.const 1921329225)) - (i32.add (i32.const 119149773)) - (i32.add (i32.const 1038984139)) - (i32.add (i32.const 1883402407)) - (i32.add (i32.const -1987929151)) - (i32.add (i32.const -1342899284)) - (i32.add (i32.const -1185732526)) - (i32.add (i32.const -1125528730)) - (i32.add (i32.const 566615106)) - (i32.add (i32.const 1001817998)) - (i32.add (i32.const -84714063)) - (i32.add (i32.const -77965426)) - (i32.add (i32.const 1102755442)) - (i32.add (i32.const 1146036909)) - (i32.add (i32.const 1722768040)) - (i32.add (i32.const 222098901)) - (i32.add (i32.const -68120997)) - (i32.add (i32.const -248277635)) - (i32.add (i32.const -413389816)) - (i32.add (i32.const 1526160476)) - (i32.add (i32.const 239507543)) - (i32.add (i32.const 1297898605)) - (i32.add (i32.const -659144651)) - (i32.add (i32.const -2118192563)) - (i32.add (i32.const 1297766097)) - (i32.add (i32.const -874644038)) - (i32.add (i32.const -357228946)) - (i32.add (i32.const -1298039498)) - (i32.add (i32.const 1641631234)) - (i32.add (i32.const -2117680814)) - (i32.add (i32.const 1801197506)) - (i32.add (i32.const 640978729)) - (i32.add (i32.const 9869328)) - (i32.add (i32.const 1578095249)) - (i32.add (i32.const -728819744)) - (i32.add (i32.const -1283817467)) - (i32.add (i32.const 1713753928)) - (i32.add (i32.const -101271233)) - (i32.add (i32.const 1869420097)) - (i32.add (i32.const -1121390534)) - (i32.add (i32.const 1975265589)) - (i32.add (i32.const -1246039912)) - (i32.add (i32.const -504585793)) - (i32.add (i32.const 492584231)) - (i32.add (i32.const 518932363)) - (i32.add (i32.const -1111731898)) - (i32.add (i32.const 1557462434)) - (i32.add (i32.const 1049486585)) - (i32.add (i32.const 1720537044)) - (i32.add (i32.const 419345670)) - (i32.add (i32.const -936314542)) - (i32.add (i32.const -1441708243)) - (i32.add (i32.const 59124159)) - (i32.add (i32.const 639944940)) - (i32.add (i32.const -335702704)) - (i32.add (i32.const -533062492)) - (i32.add (i32.const 491014201)) - (i32.add (i32.const -1431001445)) - (i32.add (i32.const 1731613638)) - (i32.add (i32.const 568386822)) - (i32.add (i32.const -294115530)) - (i32.add (i32.const 731402281)) - (i32.add (i32.const 471308731)) - (i32.add (i32.const 490678044)) - (i32.add (i32.const -1829208928)) - (i32.add (i32.const -831960369)) - (i32.add (i32.const 1509025427)) - (i32.add (i32.const 1230837481)) - (i32.add (i32.const -2136927099)) - (i32.add (i32.const 1656091198)) - (i32.add (i32.const -1095318730)) - (i32.add (i32.const 1781860934)) - (i32.add (i32.const -1867799388)) - (i32.add (i32.const 824804571)) - (i32.add (i32.const -465437308)) - (i32.add (i32.const 996058476)) - (i32.add (i32.const -153257187)) - (i32.add (i32.const -1602683066)) - (i32.add (i32.const 1953661472)) - (i32.add (i32.const -1410565817)) - (i32.add (i32.const -1935435046)) - (i32.add (i32.const 1851574405)) - (i32.add (i32.const 2032974099)) - (i32.add (i32.const -344486373)) - (i32.add (i32.const 100579662)) - (i32.add (i32.const -1293880521)) - (i32.add (i32.const -330746075)) - (i32.add (i32.const 930128313)) - (i32.add (i32.const -252987099)) - (i32.add (i32.const 937560848)) - (i32.add (i32.const -403256012)) - (i32.add (i32.const -1027650702)) - (i32.add (i32.const -2081951495)) - (i32.add (i32.const 793317316)) - (i32.add (i32.const 1391212562)) - (i32.add (i32.const -795213752)) - (i32.add (i32.const -1931069015)) - (i32.add (i32.const 939619888)) - (i32.add (i32.const 1260623375)) - (i32.add (i32.const -399744962)) - (i32.add (i32.const 2060931771)) - (i32.add (i32.const 139296537)) - (i32.add (i32.const 2004543448)) - (i32.add (i32.const -1606508847)) - (i32.add (i32.const -1686801176)) - (i32.add (i32.const -1351321916)) - (i32.add (i32.const 89077211)) - (i32.add (i32.const -1279785195)) - (i32.add (i32.const -2141509163)) - (i32.add (i32.const 2031489691)) - (i32.add (i32.const 1027975229)) - (i32.add (i32.const 849121718)) - (i32.add (i32.const 836787137)) - (i32.add (i32.const -1476467911)) - (i32.add (i32.const -1342409239)) - (i32.add (i32.const 360184922)) - (i32.add (i32.const 942182911)) - (i32.add (i32.const -118778278)) - (i32.add (i32.const 1544240663)) - (i32.add (i32.const 461429799)) - (i32.add (i32.const 1194993406)) - (i32.add (i32.const 1730337458)) - (i32.add (i32.const -1237458776)) - (i32.add (i32.const 502543032)) - (i32.add (i32.const -751789400)) - (i32.add (i32.const 2021383366)) - (i32.add (i32.const 958482279)) - (i32.add (i32.const -1975862675)) - (i32.add (i32.const 1661418100)) - (i32.add (i32.const -522889312)) - (i32.add (i32.const 830771819)) - (i32.add (i32.const 1149153254)) - (i32.add (i32.const -657425713)) - (i32.add (i32.const 279418187)) - (i32.add (i32.const 970839453)) - (i32.add (i32.const -1854980212)) - (i32.add (i32.const 2118038711)) - (i32.add (i32.const 464580350)) - (i32.add (i32.const 1128096023)) - (i32.add (i32.const 38362775)) - (i32.add (i32.const 548170300)) - (i32.add (i32.const 68192363)) - (i32.add (i32.const 90302796)) - (i32.add (i32.const -2135724679)) - (i32.add (i32.const -655805291)) - (i32.add (i32.const 209454711)) - (i32.add (i32.const -915246743)) - (i32.add (i32.const 731068112)) - (i32.add (i32.const -1640117871)) - (i32.add (i32.const 1960294461)) - (i32.add (i32.const -1802556785)) - (i32.add (i32.const -1228556881)) - (i32.add (i32.const -1606126099)) - (i32.add (i32.const 1818364131)) - (i32.add (i32.const 857426341)) - (i32.add (i32.const 1756103489)) - (i32.add (i32.const -79669063)) - (i32.add (i32.const 464993660)) - (i32.add (i32.const 664896757)) - (i32.add (i32.const 135677958)) - (i32.add (i32.const 1330130477)) - (i32.add (i32.const 400437469)) - (i32.add (i32.const -1518773776)) - (i32.add (i32.const -1830887066)) - (i32.add (i32.const 423979479)) - (i32.add (i32.const -1266384630)) - (i32.add (i32.const -167368971)) - (i32.add (i32.const 73229364)) - (i32.add (i32.const -584516989)) - (i32.add (i32.const 1838885297)) - (i32.add (i32.const -1044115326)) - (i32.add (i32.const -1364715450)) - (i32.add (i32.const -1791147326)) - (i32.add (i32.const 1560475228)) - (i32.add (i32.const -1929046878)) - (i32.add (i32.const 1724280467)) - (i32.add (i32.const -1554934622)) - (i32.add (i32.const 1035195853)) - (i32.add (i32.const -1542666400)) - (i32.add (i32.const 600765030)) - (i32.add (i32.const -113435639)) - (i32.add (i32.const -882492665)) - (i32.add (i32.const -443059656)) - (i32.add (i32.const 637876982)) - (i32.add (i32.const 1561299732)) - (i32.add (i32.const 762903310)) - (i32.add (i32.const 1263068806)) - (i32.add (i32.const -1270611588)) - (i32.add (i32.const -1237912398)) - (i32.add (i32.const -1958152668)) - (i32.add (i32.const -467560879)) - (i32.add (i32.const 726893904)) - (i32.add (i32.const 914920372)) - (i32.add (i32.const 1294210362)) - (i32.add (i32.const -302345583)) - (i32.add (i32.const 950359292)) - (i32.add (i32.const -608732742)) - (i32.add (i32.const 1399419391)) - (i32.add (i32.const 1327495377)) - (i32.add (i32.const 1844618188)) - (i32.add (i32.const -1270512471)) - (i32.add (i32.const -297240498)) - (i32.add (i32.const -166490751)) - (i32.add (i32.const 1714589126)) - (i32.add (i32.const -843880360)) - (i32.add (i32.const -1860999845)) - (i32.add (i32.const -1607268524)) - (i32.add (i32.const -445451093)) - (i32.add (i32.const 2051347741)) - (i32.add (i32.const -1803653707)) - (i32.add (i32.const -635902812)) - (i32.add (i32.const -1314227650)) - (i32.add (i32.const 1013800483)) - (i32.add (i32.const 860059937)) - (i32.add (i32.const 1095204012)) - (i32.add (i32.const 83870297)) - (i32.add (i32.const -433712244)) - (i32.add (i32.const -938467111)) - (i32.add (i32.const 1199955172)) - (i32.add (i32.const -177751962)) - (i32.add (i32.const 418878275)) - (i32.add (i32.const -593751014)) - (i32.add (i32.const -1783392796)) - (i32.add (i32.const 1890856347)) - (i32.add (i32.const -1019737087)) - (i32.add (i32.const -1706743230)) - (i32.add (i32.const -1775296737)) - (i32.add (i32.const -1795874782)) - (i32.add (i32.const 731036305)) - (i32.add (i32.const -1235124333)) - (i32.add (i32.const 863867416)) - (i32.add (i32.const -2018608033)) - (i32.add (i32.const -1464537490)) - (i32.add (i32.const 217608447)) - (i32.add (i32.const 1747359857)) - (i32.add (i32.const 723539479)) - (i32.add (i32.const 913747253)) - (i32.add (i32.const 23909273)) - (i32.add (i32.const -1161894891)) - (i32.add (i32.const -1800443486)) - (i32.add (i32.const -393956009)) - (i32.add (i32.const 1722753199)) - (i32.add (i32.const -150741270)) - (i32.add (i32.const 487390592)) - (i32.add (i32.const 2131306475)) - (i32.add (i32.const -870627565)) - (i32.add (i32.const -610161943)) - (i32.add (i32.const -400319263)) - (i32.add (i32.const -1126890450)) - (i32.add (i32.const -2057208419)) - (i32.add (i32.const -1752748247)) - (i32.add (i32.const -1106999205)) - (i32.add (i32.const 2093568286)) - (i32.add (i32.const 1161931688)) - (i32.add (i32.const 1008886476)) - (i32.add (i32.const -1304068922)) - (i32.add (i32.const -60894493)) - (i32.add (i32.const -1876659757)) - (i32.add (i32.const 1908324003)) - (i32.add (i32.const 1300998792)) - (i32.add (i32.const 2131459563)) - (i32.add (i32.const -904286341)) - (i32.add (i32.const -912867138)) - (i32.add (i32.const -1776801317)) - (i32.add (i32.const -203264017)) - (i32.add (i32.const -1890626874)) - (i32.add (i32.const 697629690)) - (i32.add (i32.const 1649231166)) - (i32.add (i32.const -1744790838)) - (i32.add (i32.const 571581458)) - (i32.add (i32.const -113928699)) - (i32.add (i32.const -393534175)) - (i32.add (i32.const 1504386845)) - (i32.add (i32.const -1074347429)) - (i32.add (i32.const -1966165576)) - (i32.add (i32.const -419020006)) - (i32.add (i32.const 2136615889)) - (i32.add (i32.const -496694726)) - (i32.add (i32.const -703426394)) - (i32.add (i32.const -1633759164)) - (i32.add (i32.const -581034930)) - (i32.add (i32.const -1668487662)) - (i32.add (i32.const 2094698391)) - (i32.add (i32.const 18392059)) - (i32.add (i32.const 522445453)) - (i32.add (i32.const -1443185236)) - (i32.add (i32.const -142557477)) - (i32.add (i32.const 20165393)) - (i32.add (i32.const 1072393546)) - (i32.add (i32.const -1715620988)) - (i32.add (i32.const 1145079213)) - (i32.add (i32.const -2062486527)) - (i32.add (i32.const -464653146)) - (i32.add (i32.const 41112017)) - (i32.add (i32.const -2140645893)) - (i32.add (i32.const -1410253981)) - (i32.add (i32.const -1334614968)) - (i32.add (i32.const 698401124)) - (i32.add (i32.const -1406167328)) - (i32.add (i32.const 396670004)) - (i32.add (i32.const 425525010)) - (i32.add (i32.const -1166249464)) - (i32.add (i32.const -221989522)) - (i32.add (i32.const -1388015697)) - (i32.add (i32.const 1876999277)) - (i32.add (i32.const 774034358)) - (i32.add (i32.const -28131685)) - (i32.add (i32.const 300853633)) - (i32.add (i32.const 2064400787)) - (i32.add (i32.const 1471660451)) - (i32.add (i32.const 558730382)) - (i32.add (i32.const -1034013520)) - (i32.add (i32.const -268686294)) - (i32.add (i32.const 362947191)) - (i32.add (i32.const 183376619)) - (i32.add (i32.const 1735035827)) - (i32.add (i32.const 1972014937)) - (i32.add (i32.const 1218415613)) - (i32.add (i32.const 1299195155)) - (i32.add (i32.const -322189501)) - (i32.add (i32.const -1030493950)) - (i32.add (i32.const 728517957)) - (i32.add (i32.const -1859528930)) - (i32.add (i32.const 729719730)) - (i32.add (i32.const -1093544889)) - (i32.add (i32.const 26311282)) - (i32.add (i32.const 1273886484)) - (i32.add (i32.const 1907852703)) - (i32.add (i32.const -521802424)) - (i32.add (i32.const 587805861)) - (i32.add (i32.const -1489727643)) - (i32.add (i32.const 2021885663)) - (i32.add (i32.const 1457504866)) - (i32.add (i32.const -678624385)) - (i32.add (i32.const 2109654033)) - (i32.add (i32.const 1320311029)) - (i32.add (i32.const 759813716)) - (i32.add (i32.const -84970050)) - (i32.add (i32.const 718731494)) - (i32.add (i32.const -2141071862)) - (i32.add (i32.const 1566362010)) - (i32.add (i32.const 416776029)) - (i32.add (i32.const 1493712604)) - (i32.add (i32.const 326527863)) - (i32.add (i32.const -524054312)) - (i32.add (i32.const 1087408626)) - (i32.add (i32.const -672741452)) - (i32.add (i32.const -688860814)) - (i32.add (i32.const -222250959)) - (i32.add (i32.const 1508360265)) - (i32.add (i32.const 519153743)) - (i32.add (i32.const 2078146941)) - (i32.add (i32.const -1306029013)) - (i32.add (i32.const -1326490203)) - (i32.add (i32.const 1810856530)) - (i32.add (i32.const -396172167)) - (i32.add (i32.const 1955490559)) - (i32.add (i32.const 230964646)) - (i32.add (i32.const 1678481153)) - (i32.add (i32.const -375945963)) - (i32.add (i32.const -676665274)) - (i32.add (i32.const -1632896932)) - (i32.add (i32.const -289957007)) - (i32.add (i32.const 835029665)) - (i32.add (i32.const -2128576657)) - (i32.add (i32.const 2037725205)) - (i32.add (i32.const -2072037888)) - (i32.add (i32.const -720060615)) - (i32.add (i32.const -1236330913)) - (i32.add (i32.const -785064647)) - (i32.add (i32.const 506863673)) - (i32.add (i32.const -688146549)) - (i32.add (i32.const -1294059253)) - (i32.add (i32.const 2029652666)) - (i32.add (i32.const 560261911)) - (i32.add (i32.const -1319430599)) - (i32.add (i32.const 1879206776)) - (i32.add (i32.const -2099928514)) - (i32.add (i32.const -78984412)) - (i32.add (i32.const -1613597650)) - (i32.add (i32.const -1713488033)) - (i32.add (i32.const 1964221621)) - (i32.add (i32.const -216376968)) - (i32.add (i32.const -1216774188)) - (i32.add (i32.const 307838593)) - (i32.add (i32.const 1227455844)) - (i32.add (i32.const 163478092)) - (i32.add (i32.const 644191295)) - (i32.add (i32.const -1228947471)) - (i32.add (i32.const 145766034)) - (i32.add (i32.const -1646442694)) - (i32.add (i32.const 2065122502)) - (i32.add (i32.const 1942778268)) - (i32.add (i32.const 1334709447)) - (i32.add (i32.const 1037536668)) - (i32.add (i32.const -1211723616)) - (i32.add (i32.const -2072791588)) - (i32.add (i32.const 36940418)) - (i32.add (i32.const -1416548363)) - (i32.add (i32.const 137844392)) - (i32.add (i32.const -268818858)) - (i32.add (i32.const 848479332)) - (i32.add (i32.const -1201666690)) - (i32.add (i32.const -130491619)) - (i32.add (i32.const -953384789)) - (i32.add (i32.const -280020691)) - (i32.add (i32.const 688759064)) - (i32.add (i32.const 1414885046)) - (i32.add (i32.const -868581713)) - (i32.add (i32.const 1680528162)) - (i32.add (i32.const -1956330325)) - (i32.add (i32.const -534441552)) - (i32.add (i32.const -792366683)) - (i32.add (i32.const -1777212762)) - (i32.add (i32.const -2118953280)) - (i32.add (i32.const -1609275093)) - (i32.add (i32.const 1304645729)) - (i32.add (i32.const 1002769739)) - (i32.add (i32.const -1590636058)) - (i32.add (i32.const 1015951331)) - (i32.add (i32.const 1142366368)) - (i32.add (i32.const -1112271065)) - (i32.add (i32.const -1395723959)) - (i32.add (i32.const 1057024677)) - (i32.add (i32.const 22772915)) - (i32.add (i32.const 815180360)) - (i32.add (i32.const -878166947)) - (i32.add (i32.const -947290206)) - (i32.add (i32.const -673150311)) - (i32.add (i32.const 1752363358)) - (i32.add (i32.const 1767994693)) - (i32.add (i32.const -1664375570)) - (i32.add (i32.const 754045620)) - (i32.add (i32.const 2127832897)) - (i32.add (i32.const 1614852802)) - (i32.add (i32.const -2038261213)) - (i32.add (i32.const -357141171)) - (i32.add (i32.const 711646773)) - (i32.add (i32.const -1853706190)) - (i32.add (i32.const 1998474864)) - (i32.add (i32.const -1436448786)) - (i32.add (i32.const -166505584)) - (i32.add (i32.const 732556064)) - (i32.add (i32.const -1024075555)) - (i32.add (i32.const -1305862012)) - (i32.add (i32.const -76161419)) - (i32.add (i32.const 266289079)) - (i32.add (i32.const -1046370950)) - (i32.add (i32.const 1762084042)) - (i32.add (i32.const 747530119)) - (i32.add (i32.const 1454236604)) - (i32.add (i32.const -1308364578)) - (i32.add (i32.const -698405538)) - (i32.add (i32.const -1099419526)) - (i32.add (i32.const 139224961)) - (i32.add (i32.const -206398144)) - (i32.add (i32.const -1297562327)) - (i32.add (i32.const 1173099027)) - (i32.add (i32.const 196218438)) - (i32.add (i32.const 1938962948)) - (i32.add (i32.const -1408722837)) - (i32.add (i32.const -937317934)) - (i32.add (i32.const -1492953028)) - (i32.add (i32.const -295638389)) - (i32.add (i32.const -1163203444)) - (i32.add (i32.const -1886808991)) - (i32.add (i32.const -1684196708)) - (i32.add (i32.const 1136492712)) - (i32.add (i32.const -970758593)) - (i32.add (i32.const 2048940174)) - (i32.add (i32.const -1004172296)) - (i32.add (i32.const 156908094)) - (i32.add (i32.const -1092030014)) - (i32.add (i32.const 881472798)) - (i32.add (i32.const -1208500447)) - (i32.add (i32.const -242255243)) - (i32.add (i32.const 792775131)) - (i32.add (i32.const -1655280745)) - (i32.add (i32.const -2138266117)) - (i32.add (i32.const 2045501621)) - (i32.add (i32.const 769692386)) - (i32.add (i32.const 189997647)) - (i32.add (i32.const 2056182626)) - (i32.add (i32.const -1834545529)) - (i32.add (i32.const 226456603)) - (i32.add (i32.const 316253999)) - (i32.add (i32.const 1464722373)) - (i32.add (i32.const 1396540096)) - (i32.add (i32.const -896944610)) - (i32.add (i32.const 648214732)) - (i32.add (i32.const -1351548663)) - (i32.add (i32.const 287227837)) - (i32.add (i32.const 1707495209)) - (i32.add (i32.const 371321678)) - (i32.add (i32.const -1141623554)) - (i32.add (i32.const 1896780998)) - (i32.add (i32.const -241907870)) - (i32.add (i32.const 823701154)) - (i32.add (i32.const -362412272)) - (i32.add (i32.const 1937247282)) - (i32.add (i32.const -390508788)) - (i32.add (i32.const -1538363370)) - (i32.add (i32.const 1882961055)) - (i32.add (i32.const -1786962123)) - (i32.add (i32.const 123410763)) - (i32.add (i32.const -931615853)) - (i32.add (i32.const 1685676185)) - (i32.add (i32.const -824641810)) - (i32.add (i32.const -1278095319)) - (i32.add (i32.const -569646453)) - (i32.add (i32.const -247733069)) - (i32.add (i32.const -855838178)) - (i32.add (i32.const 620082195)) - (i32.add (i32.const 1625551158)) - (i32.add (i32.const -51200701)) - (i32.add (i32.const -715470113)) - (i32.add (i32.const 1619873115)) - (i32.add (i32.const -981265286)) - (i32.add (i32.const -1292562405)) - (i32.add (i32.const -1653634919)) - (i32.add (i32.const -1357790027)) - (i32.add (i32.const -109503667)) - (i32.add (i32.const 1030592652)) - (i32.add (i32.const 1347515477)) - (i32.add (i32.const 435295584)) - (i32.add (i32.const 1034514037)) - (i32.add (i32.const -1225059497)) - (i32.add (i32.const -1044739589)) - (i32.add (i32.const 1642465620)) - (i32.add (i32.const 662977697)) - (i32.add (i32.const 1588922031)) - (i32.add (i32.const 84328881)) - (i32.add (i32.const -1943446044)) - (i32.add (i32.const 1469292829)) - (i32.add (i32.const -1642206874)) - (i32.add (i32.const 1801863550)) - (i32.add (i32.const 103688359)) - (i32.add (i32.const -658115861)) - (i32.add (i32.const -970438655)) - (i32.add (i32.const 895087072)) - (i32.add (i32.const 1907124746)) - (i32.add (i32.const 1154142427)) - (i32.add (i32.const -759024276)) - (i32.add (i32.const -1020283871)) - (i32.add (i32.const -401953922)) - (i32.add (i32.const 2045140652)) - (i32.add (i32.const 1380939675)) - (i32.add (i32.const -919365274)) - (i32.add (i32.const -461763518)) - (i32.add (i32.const -2096310770)) - (i32.add (i32.const -1099692079)) - (i32.add (i32.const -1539969768)) - (i32.add (i32.const -1826130167)) - (i32.add (i32.const 461924280)) - (i32.add (i32.const 91294261)) - (i32.add (i32.const -334016000)) - (i32.add (i32.const 811281422)) - (i32.add (i32.const 1435446272)) - (i32.add (i32.const 1211108137)) - (i32.add (i32.const -980150647)) - (i32.add (i32.const -104625453)) - (i32.add (i32.const 1229744584)) - (i32.add (i32.const -920250648)) - (i32.add (i32.const 1723391008)) - (i32.add (i32.const -542490193)) - (i32.add (i32.const 789974790)) - (i32.add (i32.const -2060491065)) - (i32.add (i32.const -2051967185)) - (i32.add (i32.const 1638982192)) - (i32.add (i32.const -826403809)) - (i32.add (i32.const 1142389052)) - (i32.add (i32.const -1332225038)) - (i32.add (i32.const 1401920028)) - (i32.add (i32.const -1614759620)) - (i32.add (i32.const 182770034)) - (i32.add (i32.const 209528583)) - (i32.add (i32.const 1071017003)) - (i32.add (i32.const 593642603)) - (i32.add (i32.const 1329425924)) - (i32.add (i32.const -287591885)) - (i32.add (i32.const 39992987)) - (i32.add (i32.const -130837213)) - (i32.add (i32.const 1156522852)) - (i32.add (i32.const 1054036682)) - (i32.add (i32.const -443269944)) - (i32.add (i32.const -1622857384)) - (i32.add (i32.const -1892574041)) - (i32.add (i32.const 206378034)) - (i32.add (i32.const -1139200321)) - (i32.add (i32.const -2010138137)) - (i32.add (i32.const -515031790)) - (i32.add (i32.const 287256946)) - (i32.add (i32.const 357663226)) - (i32.add (i32.const -1150665942)) - (i32.add (i32.const -928245268)) - (i32.add (i32.const 1871928978)) - (i32.add (i32.const -87485163)) - (i32.add (i32.const -822371607)) - (i32.add (i32.const 71371027)) - (i32.add (i32.const 1196582260)) - (i32.add (i32.const 662429285)) - (i32.add (i32.const -699704305)) - (i32.add (i32.const 1823922694)) - (i32.add (i32.const -2004970205)) - (i32.add (i32.const -1250954562)) - (i32.add (i32.const -1990668673)) - (i32.add (i32.const -128741529)) - (i32.add (i32.const 296146741)) - (i32.add (i32.const -1091037295)) - (i32.add (i32.const -1243153462)) - (i32.add (i32.const -1491693968)) - (i32.add (i32.const 275556482)) - (i32.add (i32.const -851730483)) - (i32.add (i32.const 688432434)) - (i32.add (i32.const 1194661016)) - (i32.add (i32.const 1314497771)) - (i32.add (i32.const 463600951)) - (i32.add (i32.const 1474849256)) - (i32.add (i32.const 1551522980)) - (i32.add (i32.const -374082700)) - (i32.add (i32.const -2102383093)) - (i32.add (i32.const 551062563)) - (i32.add (i32.const 498964746)) - (i32.add (i32.const 2060626128)) - (i32.add (i32.const -810627826)) - (i32.add (i32.const 844598910)) - (i32.add (i32.const -2063271883)) - (i32.add (i32.const -1827064818)) - (i32.add (i32.const 651018880)) - (i32.add (i32.const 1397578964)) - (i32.add (i32.const -98283814)) - (i32.add (i32.const 1009305976)) - (i32.add (i32.const 895786543)) - (i32.add (i32.const 477530916)) - (i32.add (i32.const -2118335060)) - (i32.add (i32.const -1944918440)) - (i32.add (i32.const 854996931)) - (i32.add (i32.const -46255560)) - (i32.add (i32.const -2077853301)) - (i32.add (i32.const 899645925)) - (i32.add (i32.const 1905292387)) - (i32.add (i32.const -1655445957)) - (i32.add (i32.const 272025929)) - (i32.add (i32.const 370841907)) - (i32.add (i32.const 2051814394)) - (i32.add (i32.const 200531223)) - (i32.add (i32.const 1261896444)) - (i32.add (i32.const -488251942)) - (i32.add (i32.const -1443448755)) - (i32.add (i32.const -231822783)) - (i32.add (i32.const 1537582203)) - (i32.add (i32.const -1200858718)) - (i32.add (i32.const 78004780)) - (i32.add (i32.const -468922531)) - (i32.add (i32.const 262273890)) - (i32.add (i32.const 1728340632)) - (i32.add (i32.const 1456531252)) - (i32.add (i32.const -629894328)) - (i32.add (i32.const 565051379)) - (i32.add (i32.const 1354259718)) - (i32.add (i32.const 2015259269)) - (i32.add (i32.const 1183067399)) - (i32.add (i32.const 270517288)) - (i32.add (i32.const 1463236008)) - (i32.add (i32.const -135939337)) - (i32.add (i32.const 1509481956)) - (i32.add (i32.const -1604241895)) - (i32.add (i32.const 434770187)) - (i32.add (i32.const 1194702718)) - (i32.add (i32.const 1947590985)) - (i32.add (i32.const 2145771171)) - (i32.add (i32.const -963502829)) - (i32.add (i32.const -1414505245)) - (i32.add (i32.const 920033866)) - (i32.add (i32.const 1213739557)) - (i32.add (i32.const -471233634)) - (i32.add (i32.const -1170122188)) - (i32.add (i32.const -331057055)) - (i32.add (i32.const -1396281203)) - (i32.add (i32.const -1932355065)) - (i32.add (i32.const 248013856)) - (i32.add (i32.const -990232993)) - (i32.add (i32.const 973172284)) - (i32.add (i32.const -1305580688)) - (i32.add (i32.const 1801309872)) - (i32.add (i32.const -283601304)) - (i32.add (i32.const -1607974474)) - (i32.add (i32.const -1908042420)) - (i32.add (i32.const -825012743)) - (i32.add (i32.const -1926261037)) - (i32.add (i32.const -1923133412)) - (i32.add (i32.const 1327102864)) - (i32.add (i32.const 680182840)) - (i32.add (i32.const 1555684396)) - (i32.add (i32.const -1872478627)) - (i32.add (i32.const -1466469788)) - (i32.add (i32.const -817664791)) - (i32.add (i32.const -1996371375)) - (i32.add (i32.const 174888984)) - (i32.add (i32.const -894600601)) - (i32.add (i32.const -1501046337)) - (i32.add (i32.const 1416654924)) - (i32.add (i32.const -1318167684)) - (i32.add (i32.const -836412856)) - (i32.add (i32.const -1554030052)) - (i32.add (i32.const -341027630)) - (i32.add (i32.const 771840300)) - (i32.add (i32.const 976016490)) - (i32.add (i32.const -763954777)) - (i32.add (i32.const 659968298)) - (i32.add (i32.const 787701014)) - (i32.add (i32.const 1333534421)) - (i32.add (i32.const 645771713)) - (i32.add (i32.const -683459418)) - (i32.add (i32.const 1736350739)) - (i32.add (i32.const 1471923536)) - (i32.add (i32.const -152505420)) - (i32.add (i32.const -2051556489)) - (i32.add (i32.const -1007190794)) - (i32.add (i32.const 1106928231)) - (i32.add (i32.const -1288900833)) - (i32.add (i32.const -1577941005)) - (i32.add (i32.const 882476120)) - (i32.add (i32.const -731908047)) - (i32.add (i32.const -1004851801)) - (i32.add (i32.const -1309403246)) - (i32.add (i32.const -163863045)) - (i32.add (i32.const -1943578190)) - (i32.add (i32.const 1093506873)) - (i32.add (i32.const 916063159)) - (i32.add (i32.const 418881167)) - (i32.add (i32.const 1136555289)) - (i32.add (i32.const -2133190872)) - (i32.add (i32.const -1261550614)) - (i32.add (i32.const 1498249401)) - (i32.add (i32.const 1963940951)) - (i32.add (i32.const 114894282)) - (i32.add (i32.const 1430414811)) - (i32.add (i32.const -1024334200)) - (i32.add (i32.const 1891153078)) - (i32.add (i32.const 1275265179)) - (i32.add (i32.const 1719139848)) - (i32.add (i32.const -1474383954)) - (i32.add (i32.const -1158999953)) - (i32.add (i32.const -1542605994)) - (i32.add (i32.const 893851305)) - (i32.add (i32.const 596499550)) - (i32.add (i32.const -1832003864)) - (i32.add (i32.const 1722296803)) - (i32.add (i32.const -1069634253)) - (i32.add (i32.const -1054837957)) - (i32.add (i32.const 677622418)) - (i32.add (i32.const 1115555091)) - (i32.add (i32.const -293371837)) - (i32.add (i32.const -918517760)) - (i32.add (i32.const -1623848215)) - (i32.add (i32.const -1726049160)) - (i32.add (i32.const 1518987491)) - (i32.add (i32.const 1896791698)) - (i32.add (i32.const 1913156066)) - (i32.add (i32.const 211654653)) - (i32.add (i32.const 938254506)) - (i32.add (i32.const -105792589)) - (i32.add (i32.const -555908599)) - (i32.add (i32.const -1099124070)) - (i32.add (i32.const -2133026988)) - (i32.add (i32.const -921659724)) - (i32.add (i32.const 747668787)) - (i32.add (i32.const 1706257467)) - (i32.add (i32.const 1086799158)) - (i32.add (i32.const 330094363)) - (i32.add (i32.const -1697311821)) - (i32.add (i32.const -1359289414)) - (i32.add (i32.const -1827799745)) - (i32.add (i32.const 96376449)) - (i32.add (i32.const -164219375)) - (i32.add (i32.const 1440145116)) - (i32.add (i32.const -801514853)) - (i32.add (i32.const 370499830)) - (i32.add (i32.const 2105787481)) - (i32.add (i32.const -391816011)) - (i32.add (i32.const -704903641)) - (i32.add (i32.const 1863061289)) - (i32.add (i32.const 667187604)) - (i32.add (i32.const -1748350570)) - (i32.add (i32.const -1997685907)) - (i32.add (i32.const 622570725)) - (i32.add (i32.const -1442898008)) - (i32.add (i32.const 1969705446)) - (i32.add (i32.const -1110222103)) - (i32.add (i32.const 1421901500)) - (i32.add (i32.const 1059988849)) - (i32.add (i32.const 281426937)) - (i32.add (i32.const 1353077054)) - (i32.add (i32.const -1894684770)) - (i32.add (i32.const -1385056506)) - (i32.add (i32.const -10769548)) - (i32.add (i32.const 37778681)) - (i32.add (i32.const -1653124476)) - (i32.add (i32.const -1690068036)) - (i32.add (i32.const 1386400246)) - (i32.add (i32.const 1725713823)) - (i32.add (i32.const -126502379)) - (i32.add (i32.const -291957206)) - (i32.add (i32.const -1336625502)) - (i32.add (i32.const -1611420107)) - (i32.add (i32.const 1496241847)) - (i32.add (i32.const 1928000831)) - (i32.add (i32.const 1880152999)) - (i32.add (i32.const -888243511)) - (i32.add (i32.const 442894015)) - (i32.add (i32.const 624433172)) - (i32.add (i32.const -518677982)) - (i32.add (i32.const -19171011)) - (i32.add (i32.const 1656777887)) - (i32.add (i32.const 1272430323)) - (i32.add (i32.const 28137365)) - (i32.add (i32.const -1737302743)) - (i32.add (i32.const 1482089696)) - (i32.add (i32.const -2095019904)) - (i32.add (i32.const -756551456)) - (i32.add (i32.const -1758210745)) - (i32.add (i32.const 1547740270)) - (i32.add (i32.const -1692679319)) - (i32.add (i32.const -2069712162)) - (i32.add (i32.const 1147442438)) - (i32.add (i32.const -217535571)) - (i32.add (i32.const -1025240416)) - (i32.add (i32.const -1349733808)) - (i32.add (i32.const 1999167989)) - (i32.add (i32.const 717562706)) - (i32.add (i32.const 1771360221)) - (i32.add (i32.const 1442175874)) - (i32.add (i32.const 1746070886)) - (i32.add (i32.const 1836511017)) - (i32.add (i32.const -1821028883)) - (i32.add (i32.const 766804225)) - (i32.add (i32.const -1436904208)) - (i32.add (i32.const -55772192)) - (i32.add (i32.const -1990501685)) - (i32.add (i32.const 1909622078)) - (i32.add (i32.const -238858046)) - (i32.add (i32.const -212056212)) - (i32.add (i32.const -204869392)) - (i32.add (i32.const 1743975507)) - (i32.add (i32.const -181997173)) - (i32.add (i32.const 1559366572)) - (i32.add (i32.const -1923637730)) - (i32.add (i32.const 1369560813)) - (i32.add (i32.const 2034568756)) - (i32.add (i32.const 1862669263)) - (i32.add (i32.const 778850471)) - (i32.add (i32.const 615986446)) - (i32.add (i32.const 1320920805)) - (i32.add (i32.const 1985263572)) - (i32.add (i32.const 1396508025)) - (i32.add (i32.const -1474762868)) - (i32.add (i32.const 317873935)) - (i32.add (i32.const 1608417828)) - (i32.add (i32.const -2094804973)) - (i32.add (i32.const -398758329)) - (i32.add (i32.const 130327593)) - (i32.add (i32.const -2063481784)) - (i32.add (i32.const 858478890)) - (i32.add (i32.const -513442428)) - (i32.add (i32.const 1336226789)) - (i32.add (i32.const 1893200004)) - (i32.add (i32.const 954921130)) - (i32.add (i32.const -1619192087)) - (i32.add (i32.const 309952332)) - (i32.add (i32.const 1532627086)) - (i32.add (i32.const -252483519)) - (i32.add (i32.const 168384295)) - (i32.add (i32.const -1988660201)) - (i32.add (i32.const 1219052688)) - (i32.add (i32.const 2108563032)) - (i32.add (i32.const 345367434)) - (i32.add (i32.const -62189958)) - (i32.add (i32.const 1476108229)) - (i32.add (i32.const -1482983246)) - (i32.add (i32.const -230554105)) - (i32.add (i32.const -1884187526)) - (i32.add (i32.const -1298227809)) - (i32.add (i32.const -1833955109)) - (i32.add (i32.const -2100319358)) - (i32.add (i32.const 379855812)) - (i32.add (i32.const 1777058852)) - (i32.add (i32.const -1792680830)) - (i32.add (i32.const -425855009)) - (i32.add (i32.const 21071800)) - (i32.add (i32.const 751909097)) - (i32.add (i32.const -1479767492)) - (i32.add (i32.const -106439643)) - (i32.add (i32.const -226100777)) - (i32.add (i32.const -1815515380)) - (i32.add (i32.const 1606949729)) - (i32.add (i32.const -164930924)) - (i32.add (i32.const -417983089)) - (i32.add (i32.const 15437207)) - (i32.add (i32.const 1324570587)) - (i32.add (i32.const -932528886)) - (i32.add (i32.const 1488040450)) - (i32.add (i32.const -1394750763)) - (i32.add (i32.const 261973578)) - (i32.add (i32.const -1241612962)) - (i32.add (i32.const 1275815580)) - (i32.add (i32.const -1068390327)) - (i32.add (i32.const -1033169222)) - (i32.add (i32.const -688861379)) - (i32.add (i32.const 2055147920)) - (i32.add (i32.const 29951956)) - (i32.add (i32.const -1813232677)) - (i32.add (i32.const -360626067)) - (i32.add (i32.const -1161327367)) - (i32.add (i32.const 121530239)) - (i32.add (i32.const -1984123269)) - (i32.add (i32.const -1293461901)) - (i32.add (i32.const -1666375623)) - (i32.add (i32.const -1803813223)) - (i32.add (i32.const 1826484048)) - (i32.add (i32.const 1352495458)) - (i32.add (i32.const 1293302783)) - (i32.add (i32.const 1738141800)) - (i32.add (i32.const 1290746733)) - (i32.add (i32.const 1254691862)) - (i32.add (i32.const -327101060)) - (i32.add (i32.const 990336740)) - (i32.add (i32.const 2084692687)) - (i32.add (i32.const -960327464)) - (i32.add (i32.const -1101373475)) - (i32.add (i32.const -766168893)) - (i32.add (i32.const -1324407873)) - (i32.add (i32.const -1706393768)) - (i32.add (i32.const 1791646542)) - (i32.add (i32.const -1165864732)) - (i32.add (i32.const 1816954909)) - (i32.add (i32.const -1772888623)) - (i32.add (i32.const -1144433762)) - (i32.add (i32.const -1133171875)) - (i32.add (i32.const 108996190)) - (i32.add (i32.const -485699051)) - (i32.add (i32.const 1554400033)) - (i32.add (i32.const 1505085643)) - (i32.add (i32.const 1183615500)) - (i32.add (i32.const 226292121)) - (i32.add (i32.const 1443951589)) - (i32.add (i32.const -1957513882)) - (i32.add (i32.const -418567144)) - (i32.add (i32.const -263096184)) - (i32.add (i32.const -1330044181)) - (i32.add (i32.const 1112564438)) - (i32.add (i32.const 1115249741)) - (i32.add (i32.const -1165607986)) - (i32.add (i32.const -1555526669)) - (i32.add (i32.const 1411498691)) - (i32.add (i32.const 351446150)) - (i32.add (i32.const 158168263)) - (i32.add (i32.const -1897355302)) - (i32.add (i32.const -390755732)) - (i32.add (i32.const -353148271)) - (i32.add (i32.const -651343834)) - (i32.add (i32.const 1409047278)) - (i32.add (i32.const -627158756)) - (i32.add (i32.const 1428860743)) - (i32.add (i32.const 915281329)) - (i32.add (i32.const 354935292)) - (i32.add (i32.const -1454566607)) - (i32.add (i32.const 152362935)) - (i32.add (i32.const 814229172)) - (i32.add (i32.const 783651975)) - (i32.add (i32.const 359092163)) - (i32.add (i32.const -2134128210)) - (i32.add (i32.const 988216220)) - (i32.add (i32.const -1716158774)) - (i32.add (i32.const 1220098965)) - (i32.add (i32.const 246221937)) - (i32.add (i32.const -959140607)) - (i32.add (i32.const -975804964)) - (i32.add (i32.const -1659379317)) - (i32.add (i32.const -821330342)) - (i32.add (i32.const 1170347573)) - (i32.add (i32.const -130880317)) - (i32.add (i32.const 1520145943)) - (i32.add (i32.const -649682182)) - (i32.add (i32.const -2024049278)) - (i32.add (i32.const -942838584)) - (i32.add (i32.const 1483287477)) - (i32.add (i32.const 1450255942)) - (i32.add (i32.const -298373922)) - (i32.add (i32.const 1239053109)) - (i32.add (i32.const -608694862)) - (i32.add (i32.const -240735654)) - (i32.add (i32.const -539996126)) - (i32.add (i32.const -1701193449)) - (i32.add (i32.const -143804226)) - (i32.add (i32.const 873528092)) - (i32.add (i32.const -675151345)) - (i32.add (i32.const 926194244)) - (i32.add (i32.const -973309184)) - (i32.add (i32.const -1823464382)) - (i32.add (i32.const 1473874262)) - (i32.add (i32.const -1712406388)) - (i32.add (i32.const 1721955165)) - (i32.add (i32.const 1861216718)) - (i32.add (i32.const -1645136321)) - (i32.add (i32.const -351029023)) - (i32.add (i32.const -855252477)) - (i32.add (i32.const 1611299107)) - (i32.add (i32.const -1201170263)) - (i32.add (i32.const 1046500834)) - (i32.add (i32.const -384949807)) - (i32.add (i32.const -1241990943)) - (i32.add (i32.const 1768911446)) - (i32.add (i32.const 1326336673)) - (i32.add (i32.const -1000298618)) - (i32.add (i32.const -183002397)) - (i32.add (i32.const 1926040039)) - (i32.add (i32.const -554502978)) - (i32.add (i32.const 388740428)) - (i32.add (i32.const 1029330343)) - (i32.add (i32.const 420448567)) - (i32.add (i32.const -1588961530)) - (i32.add (i32.const 1620673226)) - (i32.add (i32.const -1847180482)) - (i32.add (i32.const 708242432)) - (i32.add (i32.const -1679629483)) - (i32.add (i32.const 125030054)) - (i32.add (i32.const 1213010401)) - (i32.add (i32.const -1797671638)) - (i32.add (i32.const 748770726)) - (i32.add (i32.const 1638423946)) - (i32.add (i32.const 1620286938)) - (i32.add (i32.const -1224124328)) - (i32.add (i32.const -1247891751)) - (i32.add (i32.const 545982676)) - (i32.add (i32.const -400508340)) - (i32.add (i32.const 2095232473)) - (i32.add (i32.const 1361645689)) - (i32.add (i32.const -394673731)) - (i32.add (i32.const 1587008012)) - (i32.add (i32.const 2047599587)) - (i32.add (i32.const 1622558809)) - (i32.add (i32.const 1109310810)) - (i32.add (i32.const 1739855144)) - (i32.add (i32.const -1136097803)) - (i32.add (i32.const 1397749689)) - (i32.add (i32.const 519219058)) - (i32.add (i32.const 241048013)) - (i32.add (i32.const -1196889098)) - (i32.add (i32.const -1010395242)) - (i32.add (i32.const -1459750919)) - (i32.add (i32.const 1766298983)) - (i32.add (i32.const -1029097101)) - (i32.add (i32.const -13961521)) - (i32.add (i32.const 739546380)) - (i32.add (i32.const 1117244904)) - (i32.add (i32.const 1741746889)) - (i32.add (i32.const -826352976)) - (i32.add (i32.const 48814898)) - (i32.add (i32.const 1743604637)) - (i32.add (i32.const 478651853)) - (i32.add (i32.const 151278871)) - (i32.add (i32.const -1231293083)) - (i32.add (i32.const -484442822)) - (i32.add (i32.const -638912237)) - (i32.add (i32.const -1973978075)) - (i32.add (i32.const -374440766)) - (i32.add (i32.const -1869167516)) - (i32.add (i32.const 793824507)) - (i32.add (i32.const -719205653)) - (i32.add (i32.const -2036212348)) - (i32.add (i32.const -199927608)) - (i32.add (i32.const -843825396)) - (i32.add (i32.const 1904401443)) - (i32.add (i32.const -658571399)) - (i32.add (i32.const -1471221077)) - (i32.add (i32.const -2091628381)) - (i32.add (i32.const 761091453)) - (i32.add (i32.const 707848934)) - (i32.add (i32.const -80119729)) - (i32.add (i32.const -862673248)) - (i32.add (i32.const -1162672)) - (i32.add (i32.const 570354902)) - (i32.add (i32.const 45932322)) - (i32.add (i32.const -637221599)) - (i32.add (i32.const 1193592997)) - (i32.add (i32.const -1885315850)) - (i32.add (i32.const 1439906251)) - (i32.add (i32.const 113771263)) - (i32.add (i32.const 1187298377)) - (i32.add (i32.const -1508612315)) - (i32.add (i32.const 1142349180)) - (i32.add (i32.const 1856922149)) - (i32.add (i32.const 1583593311)) - (i32.add (i32.const 1868992712)) - (i32.add (i32.const 652002250)) - (i32.add (i32.const 174382801)) - (i32.add (i32.const 665945263)) - (i32.add (i32.const 728263653)) - (i32.add (i32.const -230174390)) - (i32.add (i32.const 1703389759)) - (i32.add (i32.const -1856768080)) - (i32.add (i32.const -1482093146)) - (i32.add (i32.const 894251524)) - (i32.add (i32.const -1848380355)) - (i32.add (i32.const -1413820531)) - (i32.add (i32.const -70787669)) - (i32.add (i32.const -585302719)) - (i32.add (i32.const -978993561)) - (i32.add (i32.const 136483554)) - (i32.add (i32.const 425931803)) - (i32.add (i32.const -1073057548)) - (i32.add (i32.const 457852499)) - (i32.add (i32.const 1940189519)) - (i32.add (i32.const -667689440)) - (i32.add (i32.const 1671290101)) - (i32.add (i32.const 411326292)) - (i32.add (i32.const 1097600164)) - (i32.add (i32.const -1259389349)) - (i32.add (i32.const -976088328)) - (i32.add (i32.const 2840169)) - (i32.add (i32.const 2136411398)) - (i32.add (i32.const -1576854382)) - (i32.add (i32.const 1592577856)) - (i32.add (i32.const 444616355)) - (i32.add (i32.const -1009265999)) - (i32.add (i32.const 184824135)) - (i32.add (i32.const 608510129)) - (i32.add (i32.const -2060146024)) - (i32.add (i32.const 1665078055)) - (i32.add (i32.const 783651411)) - (i32.add (i32.const -612896660)) - (i32.add (i32.const -2096190486)) - (i32.add (i32.const 1849292815)) - (i32.add (i32.const 716559908)) - (i32.add (i32.const -563487101)) - (i32.add (i32.const 1050680163)) - (i32.add (i32.const -1660912715)) - (i32.add (i32.const -224485872)) - (i32.add (i32.const 1582978878)) - (i32.add (i32.const -1982324533)) - (i32.add (i32.const 249669457)) - (i32.add (i32.const -2003046217)) - (i32.add (i32.const 1251639784)) - (i32.add (i32.const 583143535)) - (i32.add (i32.const 760516083)) - (i32.add (i32.const 1631724762)) - (i32.add (i32.const 187384023)) - (i32.add (i32.const -1178629212)) - (i32.add (i32.const -92783757)) - (i32.add (i32.const 572348696)) - (i32.add (i32.const 425036232)) - (i32.add (i32.const 1900403732)) - (i32.add (i32.const 1100204334)) - (i32.add (i32.const 10837926)) - (i32.add (i32.const 1648831734)) - (i32.add (i32.const 415070293)) - (i32.add (i32.const -1728247196)) - (i32.add (i32.const 894948934)) - (i32.add (i32.const 1185950328)) - (i32.add (i32.const -1197141805)) - (i32.add (i32.const -107441928)) - (i32.add (i32.const 567252661)) - (i32.add (i32.const -429039289)) - (i32.add (i32.const -953057592)) - (i32.add (i32.const -109551987)) - (i32.add (i32.const -2131587879)) - (i32.add (i32.const 1604749315)) - (i32.add (i32.const -1633922073)) - (i32.add (i32.const -930186703)) - (i32.add (i32.const -818517725)) - (i32.add (i32.const -1510039683)) - (i32.add (i32.const -532790517)) - (i32.add (i32.const 1797577159)) - (i32.add (i32.const -63717143)) - (i32.add (i32.const 715981820)) - (i32.add (i32.const 1637539126)) - (i32.add (i32.const -2023266006)) - (i32.add (i32.const -2114677804)) - (i32.add (i32.const -1713928639)) - (i32.add (i32.const -693328205)) - (i32.add (i32.const -1573182612)) - (i32.add (i32.const -722171997)) - (i32.add (i32.const -519995360)) - (i32.add (i32.const -2076479670)) - (i32.add (i32.const -1278296448)) - (i32.add (i32.const 1737048532)) - (i32.add (i32.const 1176371411)) - (i32.add (i32.const 1639041060)) - (i32.add (i32.const 597507076)) - (i32.add (i32.const 375227531)) - (i32.add (i32.const 847889332)) - (i32.add (i32.const 692020007)) - (i32.add (i32.const 611825858)) - (i32.add (i32.const 1882568323)) - (i32.add (i32.const -1534856737)) - (i32.add (i32.const -962240930)) - (i32.add (i32.const -890513327)) - (i32.add (i32.const 392187737)) - (i32.add (i32.const 1982123171)) - (i32.add (i32.const -2072591907)) - (i32.add (i32.const -1552216663)) - (i32.add (i32.const 175835220)) - (i32.add (i32.const 766198991)) - (i32.add (i32.const 794399496)) - (i32.add (i32.const -1137367003)) - (i32.add (i32.const 386621082)) - (i32.add (i32.const -685042565)) - (i32.add (i32.const -241076991)) - (i32.add (i32.const 12681276)) - (i32.add (i32.const -304529950)) - (i32.add (i32.const -799007465)) - (i32.add (i32.const 1660845913)) - (i32.add (i32.const 1392635833)) - (i32.add (i32.const 1901924530)) - (i32.add (i32.const 1062341424)) - (i32.add (i32.const 202682305)) - (i32.add (i32.const -685838330)) - (i32.add (i32.const -757058567)) - (i32.add (i32.const -1868977264)) - (i32.add (i32.const -773278236)) - (i32.add (i32.const 1888136509)) - (i32.add (i32.const -280096690)) - (i32.add (i32.const 107475283)) - (i32.add (i32.const 1829389765)) - (i32.add (i32.const -1531395582)) - (i32.add (i32.const 28216525)) - (i32.add (i32.const -1286454338)) - (i32.add (i32.const 2023676559)) - (i32.add (i32.const -1826822759)) - (i32.add (i32.const 1421734355)) - (i32.add (i32.const 1428240558)) - (i32.add (i32.const 1066962991)) - (i32.add (i32.const 524305119)) - (i32.add (i32.const 2089317348)) - (i32.add (i32.const -1550144360)) - (i32.add (i32.const -1966609941)) - (i32.add (i32.const -527746576)) - (i32.add (i32.const -1426771707)) - (i32.add (i32.const 349975914)) - (i32.add (i32.const -1668353620)) - (i32.add (i32.const 1061289121)) - (i32.add (i32.const 639023624)) - (i32.add (i32.const 1317004305)) - (i32.add (i32.const -1973088410)) - (i32.add (i32.const -1104317832)) - (i32.add (i32.const -306216217)) - (i32.add (i32.const 935622330)) - (i32.add (i32.const 125669678)) - (i32.add (i32.const 604680641)) - (i32.add (i32.const 1370961606)) - (i32.add (i32.const 1930396884)) - (i32.add (i32.const -1343974608)) - (i32.add (i32.const 257848145)) - (i32.add (i32.const 1181663997)) - (i32.add (i32.const 2129323167)) - (i32.add (i32.const -1925822310)) - (i32.add (i32.const -1887358206)) - (i32.add (i32.const 664415805)) - (i32.add (i32.const 2138802739)) - (i32.add (i32.const 990336710)) - (i32.add (i32.const -1357524334)) - (i32.add (i32.const 197509803)) - (i32.add (i32.const -1387025565)) - (i32.add (i32.const 55186890)) - (i32.add (i32.const 893608204)) - (i32.add (i32.const 343963711)) - (i32.add (i32.const -2142309764)) - (i32.add (i32.const -1171632053)) - (i32.add (i32.const 2006422994)) - (i32.add (i32.const 675961235)) - (i32.add (i32.const 722615435)) - (i32.add (i32.const 728508537)) - (i32.add (i32.const -1434203477)) - (i32.add (i32.const -613900358)) - (i32.add (i32.const -1712314543)) - (i32.add (i32.const 717311807)) - (i32.add (i32.const -1017283035)) - (i32.add (i32.const 156440692)) - (i32.add (i32.const -132648806)) - (i32.add (i32.const -2098811493)) - (i32.add (i32.const 385264750)) - (i32.add (i32.const 177868819)) - (i32.add (i32.const -1728742963)) - (i32.add (i32.const 1505983955)) - (i32.add (i32.const 1197926080)) - (i32.add (i32.const -1202118341)) - (i32.add (i32.const 1964081623)) - (i32.add (i32.const -499060886)) - (i32.add (i32.const -1865907707)) - (i32.add (i32.const -185354447)) - (i32.add (i32.const -866043259)) - (i32.add (i32.const -263863196)) - (i32.add (i32.const 574451809)) - (i32.add (i32.const 1245191032)) - (i32.add (i32.const -2026324719)) - (i32.add (i32.const -587018960)) - (i32.add (i32.const 2134165914)) - (i32.add (i32.const -601847310)) - (i32.add (i32.const -1752515931)) - (i32.add (i32.const -1064588808)) - (i32.add (i32.const 1498096937)) - (i32.add (i32.const -714937319)) - (i32.add (i32.const -1638772348)) - (i32.add (i32.const -1967082038)) - (i32.add (i32.const 417777097)) - (i32.add (i32.const -1645927546)) - (i32.add (i32.const 1017945112)) - (i32.add (i32.const 1737833791)) - (i32.add (i32.const 1978741808)) - (i32.add (i32.const -2138383853)) - (i32.add (i32.const -740414642)) - (i32.add (i32.const 1525949290)) - (i32.add (i32.const 1933693728)) - (i32.add (i32.const -604979333)) - (i32.add (i32.const 1641546840)) - (i32.add (i32.const 473701019)) - (i32.add (i32.const 1312642523)) - (i32.add (i32.const 812223828)) - (i32.add (i32.const 131173133)) - (i32.add (i32.const -647509547)) - (i32.add (i32.const 1599900502)) - (i32.add (i32.const 567864223)) - (i32.add (i32.const -474777595)) - (i32.add (i32.const 999067293)) - (i32.add (i32.const 1757396303)) - (i32.add (i32.const 390447019)) - (i32.add (i32.const 1791345304)) - (i32.add (i32.const 1214650596)) - (i32.add (i32.const 1943341809)) - (i32.add (i32.const -1037079476)) - (i32.add (i32.const 1878415060)) - (i32.add (i32.const -1626488617)) - (i32.add (i32.const -1369529880)) - (i32.add (i32.const -392768141)) - (i32.add (i32.const 76565141)) - (i32.add (i32.const -574982108)) - (i32.add (i32.const 1088788825)) - (i32.add (i32.const 1264950084)) - (i32.add (i32.const 579291635)) - (i32.add (i32.const -2144766118)) - (i32.add (i32.const -1473964737)) - (i32.add (i32.const -1617127707)) - (i32.add (i32.const -576390135)) - (i32.add (i32.const 1346147252)) - (i32.add (i32.const -999105376)) - (i32.add (i32.const 300354643)) - (i32.add (i32.const 2070067188)) - (i32.add (i32.const -2096662924)) - (i32.add (i32.const 884657414)) - (i32.add (i32.const -238257408)) - (i32.add (i32.const -1969193059)) - (i32.add (i32.const 555909352)) - (i32.add (i32.const 957853544)) - (i32.add (i32.const 2013949670)) - (i32.add (i32.const 510638493)) - (i32.add (i32.const -526984780)) - (i32.add (i32.const 412017683)) - (i32.add (i32.const 1460266387)) - (i32.add (i32.const -1934955046)) - (i32.add (i32.const 50363568)) - (i32.add (i32.const -510514185)) - (i32.add (i32.const 1505322219)) - (i32.add (i32.const 1786897134)) - (i32.add (i32.const -1267207231)) - (i32.add (i32.const -1191737671)) - (i32.add (i32.const -721442797)) - (i32.add (i32.const -515909213)) - (i32.add (i32.const 1768324367)) - (i32.add (i32.const 554798435)) - (i32.add (i32.const -1623145695)) - (i32.add (i32.const 891799301)) - (i32.add (i32.const -1654594819)) - (i32.add (i32.const 1824806832)) - (i32.add (i32.const 1655004070)) - (i32.add (i32.const 823649694)) - (i32.add (i32.const 1938951104)) - (i32.add (i32.const -971137514)) - (i32.add (i32.const 1786807537)) - (i32.add (i32.const -1010674988)) - (i32.add (i32.const -1815816270)) - (i32.add (i32.const -1846352031)) - (i32.add (i32.const 228861092)) - (i32.add (i32.const -1165997006)) - (i32.add (i32.const -356287716)) - (i32.add (i32.const -664979031)) - (i32.add (i32.const -2083099623)) - (i32.add (i32.const 693990250)) - (i32.add (i32.const -622453789)) - (i32.add (i32.const 319306200)) - (i32.add (i32.const 1863201953)) - (i32.add (i32.const 555177269)) - (i32.add (i32.const 2012649955)) - (i32.add (i32.const -523970236)) - (i32.add (i32.const -1276126446)) - (i32.add (i32.const 2007513034)) - (i32.add (i32.const -1456787654)) - (i32.add (i32.const -1430369367)) - (i32.add (i32.const -980794528)) - (i32.add (i32.const 312508904)) - (i32.add (i32.const -1428071161)) - (i32.add (i32.const -2122193187)) - (i32.add (i32.const 76876084)) - (i32.add (i32.const 16308966)) - (i32.add (i32.const -1129988148)) - (i32.add (i32.const -1796267786)) - (i32.add (i32.const 1099602120)) - (i32.add (i32.const 1560275987)) - (i32.add (i32.const 970458250)) - (i32.add (i32.const -791889448)) - (i32.add (i32.const 634205092)) - (i32.add (i32.const -444659627)) - (i32.add (i32.const -867716181)) - (i32.add (i32.const -663226559)) - (i32.add (i32.const 151419947)) - (i32.add (i32.const -2105678631)) - (i32.add (i32.const -547100134)) - (i32.add (i32.const 917167094)) - (i32.add (i32.const -1067870491)) - (i32.add (i32.const 558863649)) - (i32.add (i32.const 131229859)) - (i32.add (i32.const -916917607)) - (i32.add (i32.const 871176453)) - (i32.add (i32.const 1044688767)) - (i32.add (i32.const -630324579)) - (i32.add (i32.const 1038826450)) - (i32.add (i32.const 1089790780)) - (i32.add (i32.const -685783758)) - (i32.add (i32.const 1607060577)) - (i32.add (i32.const 963679640)) - (i32.add (i32.const -535460314)) - (i32.add (i32.const 248246756)) - (i32.add (i32.const 892990789)) - (i32.add (i32.const -580268238)) - (i32.add (i32.const -768750962)) - (i32.add (i32.const 1253672982)) - (i32.add (i32.const 1258906646)) - (i32.add (i32.const 764240402)) - (i32.add (i32.const 1854010062)) - (i32.add (i32.const 1177870554)) - (i32.add (i32.const -1799368193)) - (i32.add (i32.const -1733183890)) - (i32.add (i32.const 267002599)) - (i32.add (i32.const -250829671)) - (i32.add (i32.const -1958758618)) - (i32.add (i32.const -582219746)) - (i32.add (i32.const -463893277)) - (i32.add (i32.const 1000363744)) - (i32.add (i32.const 1497428533)) - (i32.add (i32.const 21818240)) - (i32.add (i32.const -1473986363)) - (i32.add (i32.const -1728414297)) - (i32.add (i32.const 1082871671)) - (i32.add (i32.const 1795907626)) - (i32.add (i32.const 1214666686)) - (i32.add (i32.const -964584947)) - (i32.add (i32.const 142819651)) - (i32.add (i32.const -1136893009)) - (i32.add (i32.const -806375951)) - (i32.add (i32.const -986421724)) - (i32.add (i32.const 1188152467)) - (i32.add (i32.const -2138466128)) - (i32.add (i32.const -1006130623)) - (i32.add (i32.const -1389929825)) - (i32.add (i32.const -1905613880)) - (i32.add (i32.const -1764606000)) - (i32.add (i32.const 2112342354)) - (i32.add (i32.const 148800006)) - (i32.add (i32.const -715901143)) - (i32.add (i32.const 687525882)) - (i32.add (i32.const -342128267)) - (i32.add (i32.const -1816858457)) - (i32.add (i32.const 216236238)) - (i32.add (i32.const -1394820263)) - (i32.add (i32.const -1951302182)) - (i32.add (i32.const -1014523538)) - (i32.add (i32.const 1390221798)) - (i32.add (i32.const -1644972306)) - (i32.add (i32.const -1758672516)) - (i32.add (i32.const -1656156970)) - (i32.add (i32.const -1485508981)) - (i32.add (i32.const 1209191016)) - (i32.add (i32.const 1018439900)) - (i32.add (i32.const 1684578324)) - (i32.add (i32.const 157506207)) - (i32.add (i32.const 1271965188)) - (i32.add (i32.const 2032532669)) - (i32.add (i32.const -279999017)) - (i32.add (i32.const -1330905737)) - (i32.add (i32.const -401575311)) - (i32.add (i32.const 781577465)) - (i32.add (i32.const -829721889)) - (i32.add (i32.const -1009457122)) - (i32.add (i32.const 497374301)) - (i32.add (i32.const -1621041379)) - (i32.add (i32.const 1649148212)) - (i32.add (i32.const 244051017)) - (i32.add (i32.const -495233245)) - (i32.add (i32.const -75001227)) - (i32.add (i32.const -1556503395)) - (i32.add (i32.const 1115515389)) - (i32.add (i32.const -547737474)) - (i32.add (i32.const -1219788770)) - (i32.add (i32.const -50470602)) - (i32.add (i32.const 704068441)) - (i32.add (i32.const -731818420)) - (i32.add (i32.const -1128449296)) - (i32.add (i32.const -1280054419)) - (i32.add (i32.const -1700549817)) - (i32.add (i32.const -1055223838)) - (i32.add (i32.const -1654625755)) - (i32.add (i32.const -1494408281)) - (i32.add (i32.const -1424698181)) - (i32.add (i32.const -127803321)) - (i32.add (i32.const -1551897329)) - (i32.add (i32.const -1861041186)) - (i32.add (i32.const -1242785264)) - (i32.add (i32.const -1655806612)) - (i32.add (i32.const 1600571750)) - (i32.add (i32.const -854468138)) - (i32.add (i32.const -1966982130)) - (i32.add (i32.const 1457443796)) - (i32.add (i32.const 1473590416)) - (i32.add (i32.const 510072276)) - (i32.add (i32.const 1828908444)) - (i32.add (i32.const -1498608808)) - (i32.add (i32.const -2059532463)) - (i32.add (i32.const -628831959)) - (i32.add (i32.const -2101333507)) - (i32.add (i32.const 1139714721)) - (i32.add (i32.const 1560690518)) - (i32.add (i32.const -51291444)) - (i32.add (i32.const -514190952)) - (i32.add (i32.const -202143448)) - (i32.add (i32.const 1944652901)) - (i32.add (i32.const -2022057848)) - (i32.add (i32.const -882063735)) - (i32.add (i32.const -742143816)) - (i32.add (i32.const 105465022)) - (i32.add (i32.const -1547195746)) - (i32.add (i32.const -1053345801)) - (i32.add (i32.const 438507561)) - (i32.add (i32.const 1548171080)) - (i32.add (i32.const 1298052603)) - (i32.add (i32.const 756016423)) - (i32.add (i32.const 1228881097)) - (i32.add (i32.const -716625311)) - (i32.add (i32.const -1641681309)) - (i32.add (i32.const 669609646)) - (i32.add (i32.const 1272722139)) - (i32.add (i32.const -1857275894)) - (i32.add (i32.const -1642678282)) - (i32.add (i32.const -2122337566)) - (i32.add (i32.const 1280482903)) - (i32.add (i32.const 598879422)) - (i32.add (i32.const 2055308287)) - (i32.add (i32.const -642295001)) - (i32.add (i32.const 2098931732)) - (i32.add (i32.const -1775117739)) - (i32.add (i32.const 906943683)) - (i32.add (i32.const 1531695620)) - (i32.add (i32.const 398614169)) - (i32.add (i32.const -2074050023)) - (i32.add (i32.const 267758386)) - (i32.add (i32.const -175738283)) - (i32.add (i32.const -708051802)) - (i32.add (i32.const -177733606)) - (i32.add (i32.const -1153386412)) - (i32.add (i32.const 478622507)) - (i32.add (i32.const 2123959059)) - (i32.add (i32.const 1945387171)) - (i32.add (i32.const 87863875)) - (i32.add (i32.const -945163189)) - (i32.add (i32.const 1107142341)) - (i32.add (i32.const 1263590065)) - (i32.add (i32.const -273180797)) - (i32.add (i32.const -1086269258)) - (i32.add (i32.const 221327220)) - (i32.add (i32.const -747292539)) - (i32.add (i32.const 790728411)) - (i32.add (i32.const 1912904210)) - (i32.add (i32.const -1032699008)) - (i32.add (i32.const 859070554)) - (i32.add (i32.const 55651317)) - (i32.add (i32.const 371925664)) - (i32.add (i32.const 999078735)) - (i32.add (i32.const -1151490665)) - (i32.add (i32.const 848090292)) - (i32.add (i32.const 1093641418)) - (i32.add (i32.const -549832980)) - (i32.add (i32.const -1951924678)) - (i32.add (i32.const -551848546)) - (i32.add (i32.const -1504326694)) - (i32.add (i32.const -1012793527)) - (i32.add (i32.const -834005169)) - (i32.add (i32.const -734858286)) - (i32.add (i32.const 2098353666)) - (i32.add (i32.const 504390853)) - (i32.add (i32.const -2087387429)) - (i32.add (i32.const 181948089)) - (i32.add (i32.const -1042878466)) - (i32.add (i32.const 249533456)) - (i32.add (i32.const 47931703)) - (i32.add (i32.const -190682485)) - (i32.add (i32.const -1144430387)) - (i32.add (i32.const 1502539699)) - (i32.add (i32.const 345795015)) - (i32.add (i32.const 476634603)) - (i32.add (i32.const 1662938469)) - (i32.add (i32.const 1519233384)) - (i32.add (i32.const -587943010)) - (i32.add (i32.const 240254047)) - (i32.add (i32.const 2126814322)) - (i32.add (i32.const -1440282536)) - (i32.add (i32.const -392441638)) - (i32.add (i32.const -120676443)) - (i32.add (i32.const 1266794872)) - (i32.add (i32.const -814694160)) - (i32.add (i32.const -1351409946)) - (i32.add (i32.const 1192377858)) - (i32.add (i32.const -356656121)) - (i32.add (i32.const 217305535)) - (i32.add (i32.const 1694413553)) - (i32.add (i32.const 1261824406)) - (i32.add (i32.const 371455722)) - (i32.add (i32.const -666411229)) - (i32.add (i32.const 737965160)) - (i32.add (i32.const 370784467)) - (i32.add (i32.const 1620178807)) - (i32.add (i32.const 1594062834)) - (i32.add (i32.const -286018581)) - (i32.add (i32.const 879369487)) - (i32.add (i32.const 176635472)) - (i32.add (i32.const -443192476)) - (i32.add (i32.const 2069260182)) - (i32.add (i32.const 1019587375)) - (i32.add (i32.const 813893193)) - (i32.add (i32.const 1157255830)) - (i32.add (i32.const 1336319321)) - (i32.add (i32.const -630511652)) - (i32.add (i32.const 1339313802)) - (i32.add (i32.const 16227842)) - (i32.add (i32.const -1732652677)) - (i32.add (i32.const -1681988512)) - (i32.add (i32.const -1807150084)) - (i32.add (i32.const -1203205840)) - (i32.add (i32.const -1022279173)) - (i32.add (i32.const -2053412437)) - (i32.add (i32.const 2029083921)) - (i32.add (i32.const 1490847167)) - (i32.add (i32.const 1488885157)) - (i32.add (i32.const 1570962127)) - (i32.add (i32.const 976074456)) - (i32.add (i32.const 1130753078)) - (i32.add (i32.const 986530982)) - (i32.add (i32.const 159756932)) - (i32.add (i32.const 544168817)) - (i32.add (i32.const -1939499190)) - (i32.add (i32.const -1094320236)) - (i32.add (i32.const 249845858)) - (i32.add (i32.const -742386684)) - (i32.add (i32.const 1566372352)) - (i32.add (i32.const 969961633)) - (i32.add (i32.const 1387193938)) - (i32.add (i32.const -866894346)) - (i32.add (i32.const 1494790677)) - (i32.add (i32.const -370800977)) - (i32.add (i32.const 221100354)) - (i32.add (i32.const 990155863)) - (i32.add (i32.const 1619428594)) - (i32.add (i32.const -1061513495)) - (i32.add (i32.const 1471176779)) - (i32.add (i32.const -1528879671)) - (i32.add (i32.const -189554319)) - (i32.add (i32.const -970542647)) - (i32.add (i32.const 123191681)) - (i32.add (i32.const 409788226)) - (i32.add (i32.const -1890993957)) - (i32.add (i32.const -446759674)) - (i32.add (i32.const 1447761641)) - (i32.add (i32.const 1881867271)) - (i32.add (i32.const 2113456733)) - (i32.add (i32.const 1022038433)) - (i32.add (i32.const 2132841650)) - (i32.add (i32.const 692696231)) - (i32.add (i32.const -1958343939)) - (i32.add (i32.const -1553348696)) - (i32.add (i32.const 1018354267)) - (i32.add (i32.const 1184491424)) - (i32.add (i32.const 394154599)) - (i32.add (i32.const 729832983)) - (i32.add (i32.const -758858302)) - (i32.add (i32.const 924013408)) - (i32.add (i32.const -2075676815)) - (i32.add (i32.const 252643112)) - (i32.add (i32.const -491469506)) - (i32.add (i32.const -436894014)) - (i32.add (i32.const -245845873)) - (i32.add (i32.const -1116213076)) - (i32.add (i32.const 1112109751)) - (i32.add (i32.const 267697822)) - (i32.add (i32.const 1376150589)) - (i32.add (i32.const -1188954833)) - (i32.add (i32.const -1542600183)) - (i32.add (i32.const -1437440817)) - (i32.add (i32.const 2101484173)) - (i32.add (i32.const -1441505207)) - (i32.add (i32.const 1657389515)) - (i32.add (i32.const 1919008590)) - (i32.add (i32.const 1354232026)) - (i32.add (i32.const 271419575)) - (i32.add (i32.const 12885618)) - (i32.add (i32.const 967407976)) - (i32.add (i32.const -1803761404)) - (i32.add (i32.const 470546477)) - (i32.add (i32.const 1911702311)) - (i32.add (i32.const -1923409107)) - (i32.add (i32.const 1310912856)) - (i32.add (i32.const 1182298773)) - (i32.add (i32.const -1456182919)) - (i32.add (i32.const -742155008)) - (i32.add (i32.const 1245920890)) - (i32.add (i32.const 868591571)) - (i32.add (i32.const 836568397)) - (i32.add (i32.const 1543948224)) - (i32.add (i32.const -974879272)) - (i32.add (i32.const 430553081)) - (i32.add (i32.const -163924336)) - (i32.add (i32.const -1168300605)) - (i32.add (i32.const 857747688)) - (i32.add (i32.const -1655975508)) - (i32.add (i32.const 307384725)) - (i32.add (i32.const -1668141072)) - (i32.add (i32.const 1230779623)) - (i32.add (i32.const 1217482990)) - (i32.add (i32.const 802457155)) - (i32.add (i32.const 779949208)) - (i32.add (i32.const -1273373878)) - (i32.add (i32.const -127189408)) - (i32.add (i32.const 121712493)) - (i32.add (i32.const -704579672)) - (i32.add (i32.const -293142822)) - (i32.add (i32.const 1421848463)) - (i32.add (i32.const -484998059)) - (i32.add (i32.const 1037128805)) - (i32.add (i32.const 2093534931)) - (i32.add (i32.const -866286560)) - (i32.add (i32.const -2019096902)) - (i32.add (i32.const -1095984885)) - (i32.add (i32.const 1868610680)) - (i32.add (i32.const 2116844175)) - (i32.add (i32.const -320312403)) - (i32.add (i32.const 928374490)) - (i32.add (i32.const 1209836879)) - (i32.add (i32.const 1079807913)) - (i32.add (i32.const 375140994)) - (i32.add (i32.const -253081277)) - (i32.add (i32.const 1628094432)) - (i32.add (i32.const -1177657007)) - (i32.add (i32.const 1324847795)) - (i32.add (i32.const -621966317)) - (i32.add (i32.const -1117343565)) - (i32.add (i32.const -195442287)) - (i32.add (i32.const 136694319)) - (i32.add (i32.const 1949028534)) - (i32.add (i32.const -39493450)) - (i32.add (i32.const -443534708)) - (i32.add (i32.const -118143955)) - (i32.add (i32.const -2059230563)) - (i32.add (i32.const 1086778008)) - (i32.add (i32.const -31029721)) - (i32.add (i32.const -1372911995)) - (i32.add (i32.const -1255755312)) - (i32.add (i32.const -84538076)) - (i32.add (i32.const 1906229968)) - (i32.add (i32.const 1334671157)) - (i32.add (i32.const -383259388)) - (i32.add (i32.const -249872012)) - (i32.add (i32.const -1429512193)) - (i32.add (i32.const -667648472)) - (i32.add (i32.const -518666232)) - (i32.add (i32.const -663867552)) - (i32.add (i32.const 1007308671)) - (i32.add (i32.const -173940137)) - (i32.add (i32.const -658197379)) - (i32.add (i32.const 477863072)) - (i32.add (i32.const -1392093367)) - (i32.add (i32.const -1079466863)) - (i32.add (i32.const -904394245)) - (i32.add (i32.const -685328278)) - (i32.add (i32.const -895027666)) - (i32.add (i32.const -1385849717)) - (i32.add (i32.const -1636982109)) - (i32.add (i32.const -1189690568)) - (i32.add (i32.const 545844741)) - (i32.add (i32.const -938176211)) - (i32.add (i32.const -1777236651)) - (i32.add (i32.const 526371463)) - (i32.add (i32.const -1965070219)) - (i32.add (i32.const 1893788935)) - (i32.add (i32.const -322861528)) - (i32.add (i32.const 1522266068)) - (i32.add (i32.const 634952306)) - (i32.add (i32.const -1742595825)) - (i32.add (i32.const 862985848)) - (i32.add (i32.const -1848383573)) - (i32.add (i32.const 1765007322)) - (i32.add (i32.const 771230650)) - (i32.add (i32.const -1948310248)) - (i32.add (i32.const -1831905950)) - (i32.add (i32.const -1425114643)) - (i32.add (i32.const 404541819)) - (i32.add (i32.const 288062222)) - (i32.add (i32.const -403239554)) - (i32.add (i32.const 2046708764)) - (i32.add (i32.const -133603238)) - (i32.add (i32.const 781445787)) - (i32.add (i32.const -1194142955)) - (i32.add (i32.const 1204332860)) - (i32.add (i32.const 1868633847)) - (i32.add (i32.const -252406440)) - (i32.add (i32.const 704475004)) - (i32.add (i32.const -1480618790)) - (i32.add (i32.const -390081824)) - (i32.add (i32.const -1116341906)) - (i32.add (i32.const -532792425)) - (i32.add (i32.const -1187688250)) - (i32.add (i32.const -1242278665)) - (i32.add (i32.const -681274552)) - (i32.add (i32.const 335029194)) - (i32.add (i32.const -1462712035)) - (i32.add (i32.const -2128209933)) - (i32.add (i32.const 591850844)) - (i32.add (i32.const 494594829)) - (i32.add (i32.const 1658800644)) - (i32.add (i32.const 57861845)) - (i32.add (i32.const -1255969632)) - (i32.add (i32.const 691564169)) - (i32.add (i32.const 1864164866)) - (i32.add (i32.const -1081035384)) - (i32.add (i32.const 1436122501)) - (i32.add (i32.const 1095403600)) - (i32.add (i32.const 91506380)) - (i32.add (i32.const -2067436452)) - (i32.add (i32.const -276699371)) - (i32.add (i32.const 767387932)) - (i32.add (i32.const 73220981)) - (i32.add (i32.const -529179745)) - (i32.add (i32.const -657847188)) - (i32.add (i32.const -473278230)) - (i32.add (i32.const 2043944043)) - (i32.add (i32.const 1125093256)) - (i32.add (i32.const -1408761522)) - (i32.add (i32.const -1908948977)) - (i32.add (i32.const 1611045266)) - (i32.add (i32.const 2102191886)) - (i32.add (i32.const -914134744)) - (i32.add (i32.const -1081165698)) - (i32.add (i32.const 1924634411)) - (i32.add (i32.const -862029694)) - (i32.add (i32.const 1620282027)) - (i32.add (i32.const -1081236500)) - (i32.add (i32.const -929480051)) - (i32.add (i32.const -1499228968)) - (i32.add (i32.const -1692876554)) - (i32.add (i32.const -1954715820)) - (i32.add (i32.const 2102363484)) - (i32.add (i32.const 1400884529)) - (i32.add (i32.const 75240632)) - (i32.add (i32.const 1316188568)) - (i32.add (i32.const 1815760283)) - (i32.add (i32.const -1185667492)) - (i32.add (i32.const -144123619)) - (i32.add (i32.const 837871912)) - (i32.add (i32.const 1226723333)) - (i32.add (i32.const 1254675838)) - (i32.add (i32.const 964571301)) - (i32.add (i32.const 779208226)) - (i32.add (i32.const -1759513232)) - (i32.add (i32.const -165605814)) - (i32.add (i32.const -1797321804)) - (i32.add (i32.const 202857953)) - (i32.add (i32.const -1421907932)) - (i32.add (i32.const 1749781546)) - (i32.add (i32.const 844545725)) - (i32.add (i32.const -288472051)) - (i32.add (i32.const 1734289376)) - (i32.add (i32.const 2132397176)) - (i32.add (i32.const -346233057)) - (i32.add (i32.const -1934179054)) - (i32.add (i32.const -1258468356)) - (i32.add (i32.const 970868029)) - (i32.add (i32.const -1544014982)) - (i32.add (i32.const -1266704659)) - (i32.add (i32.const -640543547)) - (i32.add (i32.const -762898070)) - (i32.add (i32.const 1122654294)) - (i32.add (i32.const -1354667864)) - (i32.add (i32.const -1767329406)) - (i32.add (i32.const 1161458897)) - (i32.add (i32.const -544249373)) - (i32.add (i32.const -1627426477)) - (i32.add (i32.const -1815465001)) - (i32.add (i32.const -1412004700)) - (i32.add (i32.const -1231523870)) - (i32.add (i32.const -958483775)) - (i32.add (i32.const -1439933878)) - (i32.add (i32.const 988983645)) - (i32.add (i32.const 483595001)) - (i32.add (i32.const 718125502)) - (i32.add (i32.const -1474320314)) - (i32.add (i32.const 900260509)) - (i32.add (i32.const 1342571107)) - (i32.add (i32.const 291343874)) - (i32.add (i32.const 1885787288)) - (i32.add (i32.const -162749745)) - (i32.add (i32.const -1939762621)) - (i32.add (i32.const -1854004628)) - (i32.add (i32.const -1542615486)) - (i32.add (i32.const 1013916743)) - (i32.add (i32.const -1330519048)) - (i32.add (i32.const -1623833036)) - (i32.add (i32.const 1924432416)) - (i32.add (i32.const -1219155550)) - (i32.add (i32.const -1806876338)) - (i32.add (i32.const -1580499321)) - (i32.add (i32.const -1430454219)) - (i32.add (i32.const 1181294503)) - (i32.add (i32.const -942670376)) - (i32.add (i32.const -211797027)) - (i32.add (i32.const 1319960135)) - (i32.add (i32.const 1036991699)) - (i32.add (i32.const -311561215)) - (i32.add (i32.const -1912048630)) - (i32.add (i32.const 1013408781)) - (i32.add (i32.const -289528410)) - (i32.add (i32.const 274514503)) - (i32.add (i32.const -1928766002)) - (i32.add (i32.const 1595041240)) - (i32.add (i32.const -1577156854)) - (i32.add (i32.const -400728014)) - (i32.add (i32.const 501127354)) - (i32.add (i32.const 563654817)) - (i32.add (i32.const 1726427541)) - (i32.add (i32.const 1213109234)) - (i32.add (i32.const -753594990)) - (i32.add (i32.const 1787584241)) - (i32.add (i32.const -1656783261)) - (i32.add (i32.const -2018980919)) - (i32.add (i32.const 933441794)) - (i32.add (i32.const 364103937)) - (i32.add (i32.const -697370193)) - (i32.add (i32.const -1482613541)) - (i32.add (i32.const -839741673)) - (i32.add (i32.const 72371078)) - (i32.add (i32.const 1722342876)) - (i32.add (i32.const -1353008235)) - (i32.add (i32.const -772826274)) - (i32.add (i32.const 1307418026)) - (i32.add (i32.const 1758397943)) - (i32.add (i32.const 1693784207)) - (i32.add (i32.const 796368255)) - (i32.add (i32.const -324015244)) - (i32.add (i32.const -668853010)) - (i32.add (i32.const -940898101)) - (i32.add (i32.const -1116662391)) - (i32.add (i32.const -195733743)) - (i32.add (i32.const 434068432)) - (i32.add (i32.const -513791071)) - (i32.add (i32.const -1330155678)) - (i32.add (i32.const -1504203849)) - (i32.add (i32.const -31606399)) - (i32.add (i32.const -2062098630)) - (i32.add (i32.const -1534480343)) - (i32.add (i32.const -2061376118)) - (i32.add (i32.const -1708690207)) - (i32.add (i32.const -925068816)) - (i32.add (i32.const -2063884950)) - (i32.add (i32.const 1175203612)) - (i32.add (i32.const 1463137143)) - (i32.add (i32.const 1328445748)) - (i32.add (i32.const -926373346)) - (i32.add (i32.const 955674755)) - (i32.add (i32.const -1740089054)) - (i32.add (i32.const -1669802481)) - (i32.add (i32.const -821560534)) - (i32.add (i32.const -772609867)) - (i32.add (i32.const -2116643815)) - (i32.add (i32.const 1311803641)) - (i32.add (i32.const -1168522045)) - (i32.add (i32.const 766123259)) - (i32.add (i32.const 1720613523)) - (i32.add (i32.const 528153638)) - (i32.add (i32.const 85403996)) - (i32.add (i32.const -2077198104)) - (i32.add (i32.const 314267804)) - (i32.add (i32.const 588509703)) - (i32.add (i32.const -590754238)) - (i32.add (i32.const 1089355715)) - (i32.add (i32.const 661997544)) - (i32.add (i32.const 421758089)) - (i32.add (i32.const 1361474211)) - (i32.add (i32.const -686143737)) - (i32.add (i32.const 1210018877)) - (i32.add (i32.const -1703684921)) - (i32.add (i32.const 1075568753)) - (i32.add (i32.const -779465813)) - (i32.add (i32.const 1592326499)) - (i32.add (i32.const 1971739823)) - (i32.add (i32.const 1870173742)) - (i32.add (i32.const -1303024991)) - (i32.add (i32.const -1052548811)) - (i32.add (i32.const 1909866057)) - (i32.add (i32.const -1479658972)) - (i32.add (i32.const 1773872788)) - (i32.add (i32.const -632157658)) - (i32.add (i32.const -1375939684)) - (i32.add (i32.const -1797877804)) - (i32.add (i32.const 1099632450)) - (i32.add (i32.const 977725173)) - (i32.add (i32.const -309126689)) - (i32.add (i32.const -130270964)) - (i32.add (i32.const 1895186191)) - (i32.add (i32.const 2084424952)) - (i32.add (i32.const -1041341795)) - (i32.add (i32.const -1738864977)) - (i32.add (i32.const -183790823)) - (i32.add (i32.const -1363994490)) - (i32.add (i32.const -933417895)) - (i32.add (i32.const 466659913)) - (i32.add (i32.const -1631394364)) - (i32.add (i32.const 1490719252)) - (i32.add (i32.const 1713333106)) - (i32.add (i32.const -961714507)) - (i32.add (i32.const 1712286053)) - (i32.add (i32.const -2051933146)) - (i32.add (i32.const -1892750850)) - (i32.add (i32.const -1556370560)) - (i32.add (i32.const 134195871)) - (i32.add (i32.const 529241285)) - (i32.add (i32.const 1538448027)) - (i32.add (i32.const -1202538668)) - (i32.add (i32.const 1034210602)) - (i32.add (i32.const -544463362)) - (i32.add (i32.const 1302598901)) - (i32.add (i32.const -161833362)) - (i32.add (i32.const -1079776242)) - (i32.add (i32.const -998320352)) - (i32.add (i32.const 25891743)) - (i32.add (i32.const 638351053)) - (i32.add (i32.const -240498535)) - (i32.add (i32.const 1572664408)) - (i32.add (i32.const 585501132)) - (i32.add (i32.const -2011413103)) - (i32.add (i32.const -578852954)) - (i32.add (i32.const 423331369)) - (i32.add (i32.const -1868505966)) - (i32.add (i32.const -35760675)) - (i32.add (i32.const -172814240)) - (i32.add (i32.const -194910462)) - (i32.add (i32.const 678949880)) - (i32.add (i32.const -1844662369)) - (i32.add (i32.const -2067152676)) - (i32.add (i32.const -1709455991)) - (i32.add (i32.const 298910379)) - (i32.add (i32.const -679738095)) - (i32.add (i32.const 1609021556)) - (i32.add (i32.const 641760780)) - (i32.add (i32.const 853824483)) - (i32.add (i32.const 1633661709)) - (i32.add (i32.const -1811383563)) - (i32.add (i32.const 858395754)) - (i32.add (i32.const 1231058769)) - (i32.add (i32.const 1519333795)) - (i32.add (i32.const 274512890)) - (i32.add (i32.const -504817823)) - (i32.add (i32.const -1542210793)) - (i32.add (i32.const 852584628)) - (i32.add (i32.const 1928267810)) - (i32.add (i32.const -355237913)) - (i32.add (i32.const 1167578374)) - (i32.add (i32.const -1598632736)) - (i32.add (i32.const -688416214)) - (i32.add (i32.const 1744569170)) - (i32.add (i32.const -651582993)) - (i32.add (i32.const -882350221)) - (i32.add (i32.const -235166777)) - (i32.add (i32.const -1761434400)) - (i32.add (i32.const 1417541470)) - (i32.add (i32.const -1746640190)) - (i32.add (i32.const -1493623051)) - (i32.add (i32.const 1688045781)) - (i32.add (i32.const 1621415000)) - (i32.add (i32.const -1139976228)) - (i32.add (i32.const 1350417436)) - (i32.add (i32.const 724740310)) - (i32.add (i32.const -376897569)) - (i32.add (i32.const -1778806504)) - (i32.add (i32.const -1331424058)) - (i32.add (i32.const 1880116853)) - (i32.add (i32.const -38630100)) - (i32.add (i32.const 1491411348)) - (i32.add (i32.const -1867715327)) - (i32.add (i32.const -1975388870)) - (i32.add (i32.const 1260444490)) - (i32.add (i32.const -54229029)) - (i32.add (i32.const -333341104)) - (i32.add (i32.const 348189184)) - (i32.add (i32.const 1697666956)) - (i32.add (i32.const 1636845751)) - (i32.add (i32.const 240900715)) - (i32.add (i32.const 866875993)) - (i32.add (i32.const 1469159827)) - (i32.add (i32.const 723848541)) - (i32.add (i32.const -855767494)) - (i32.add (i32.const 1342166062)) - (i32.add (i32.const 258991600)) - (i32.add (i32.const -2006867807)) - (i32.add (i32.const 524303896)) - (i32.add (i32.const -414986657)) - (i32.add (i32.const -2119209259)) - (i32.add (i32.const 784359207)) - (i32.add (i32.const 879467684)) - (i32.add (i32.const 565731895)) - (i32.add (i32.const 269384308)) - (i32.add (i32.const -322557018)) - (i32.add (i32.const -733245227)) - (i32.add (i32.const -1267605034)) - (i32.add (i32.const 395960239)) - (i32.add (i32.const 685859876)) - (i32.add (i32.const -1625113460)) - (i32.add (i32.const -884869856)) - (i32.add (i32.const 1344310491)) - (i32.add (i32.const 7812902)) - (i32.add (i32.const -1442144105)) - (i32.add (i32.const 1199777056)) - (i32.add (i32.const -1585697269)) - (i32.add (i32.const 1820447839)) - (i32.add (i32.const 1590813659)) - (i32.add (i32.const -1420266400)) - (i32.add (i32.const -690093118)) - (i32.add (i32.const 1635663981)) - (i32.add (i32.const 1058146950)) - (i32.add (i32.const -1389892767)) - (i32.add (i32.const -209413219)) - (i32.add (i32.const -791687878)) - (i32.add (i32.const -697368422)) - (i32.add (i32.const 1848695684)) - (i32.add (i32.const -1825271411)) - (i32.add (i32.const 670364125)) - (i32.add (i32.const -246064578)) - (i32.add (i32.const 1417197107)) - (i32.add (i32.const -1539885359)) - (i32.add (i32.const -817285391)) - (i32.add (i32.const -1089417444)) - (i32.add (i32.const 461669025)) - (i32.add (i32.const 1174053935)) - (i32.add (i32.const -1784194396)) - (i32.add (i32.const -1695209190)) - (i32.add (i32.const -1145346505)) - (i32.add (i32.const -63938568)) - (i32.add (i32.const -1394120091)) - (i32.add (i32.const -958376971)) - (i32.add (i32.const -1255848883)) - (i32.add (i32.const 339490151)) - (i32.add (i32.const 1202027218)) - (i32.add (i32.const 1799967907)) - (i32.add (i32.const -1656489103)) - (i32.add (i32.const 1640615311)) - (i32.add (i32.const 756087467)) - (i32.add (i32.const -1129797515)) - (i32.add (i32.const -376800298)) - (i32.add (i32.const 62009441)) - (i32.add (i32.const -290284868)) - (i32.add (i32.const -600278204)) - (i32.add (i32.const 193645522)) - (i32.add (i32.const 501974687)) - (i32.add (i32.const -1415097000)) - (i32.add (i32.const 327699514)) - (i32.add (i32.const 205597589)) - (i32.add (i32.const -358057003)) - (i32.add (i32.const 589883098)) - (i32.add (i32.const -1428465912)) - (i32.add (i32.const -47326076)) - (i32.add (i32.const -419581510)) - (i32.add (i32.const 1349162354)) - (i32.add (i32.const 1830230448)) - (i32.add (i32.const -1865063084)) - (i32.add (i32.const -1105860943)) - (i32.add (i32.const 597640461)) - (i32.add (i32.const -831370816)) - (i32.add (i32.const 88057485)) - (i32.add (i32.const -1984027798)) - (i32.add (i32.const -401206555)) - (i32.add (i32.const -93105259)) - (i32.add (i32.const 1932464389)) - (i32.add (i32.const 714940613)) - (i32.add (i32.const -1810211376)) - (i32.add (i32.const -1925034286)) - (i32.add (i32.const 1028812831)) - (i32.add (i32.const 680354350)) - (i32.add (i32.const 1588608164)) - (i32.add (i32.const -1521643997)) - (i32.add (i32.const 144112451)) - (i32.add (i32.const -144539890)) - (i32.add (i32.const 1447357208)) - (i32.add (i32.const -592425747)) - (i32.add (i32.const 1660058901)) - (i32.add (i32.const 1804494649)) - (i32.add (i32.const -129339651)) - (i32.add (i32.const -514057993)) - (i32.add (i32.const 892834382)) - (i32.add (i32.const 1968346506)) - (i32.add (i32.const 742656887)) - (i32.add (i32.const 1159668409)) - (i32.add (i32.const -260678959)) - (i32.add (i32.const -2105173157)) - (i32.add (i32.const -1812240619)) - (i32.add (i32.const 1751560530)) - (i32.add (i32.const 1366235458)) - (i32.add (i32.const -225892584)) - (i32.add (i32.const -1741400217)) - (i32.add (i32.const -1411581087)) - (i32.add (i32.const -1094427759)) - (i32.add (i32.const -496477965)) - (i32.add (i32.const -1589970947)) - (i32.add (i32.const -1636012962)) - (i32.add (i32.const -602016892)) - (i32.add (i32.const -503388384)) - (i32.add (i32.const 975903688)) - (i32.add (i32.const 1800608528)) - (i32.add (i32.const -643789829)) - (i32.add (i32.const 1798995387)) - (i32.add (i32.const -1378510831)) - (i32.add (i32.const 1807790313)) - (i32.add (i32.const 14867219)) - (i32.add (i32.const -55034767)) - (i32.add (i32.const 64946019)) - (i32.add (i32.const 431997449)) - (i32.add (i32.const 1482226700)) - (i32.add (i32.const 111941056)) - (i32.add (i32.const -42118636)) - (i32.add (i32.const 117448077)) - (i32.add (i32.const -367481418)) - (i32.add (i32.const 1377878485)) - (i32.add (i32.const 85514578)) - (i32.add (i32.const 39925796)) - (i32.add (i32.const -711981910)) - (i32.add (i32.const -1967790428)) - (i32.add (i32.const -911054872)) - (i32.add (i32.const -921494579)) - (i32.add (i32.const 1880563952)) - (i32.add (i32.const -1946090124)) - (i32.add (i32.const -649247186)) - (i32.add (i32.const 1421375825)) - (i32.add (i32.const -439839094)) - (i32.add (i32.const 234129025)) - (i32.add (i32.const -723683743)) - (i32.add (i32.const -824793063)) - (i32.add (i32.const 1217302894)) - (i32.add (i32.const -745582714)) - (i32.add (i32.const -363773710)) - (i32.add (i32.const 416941782)) - (i32.add (i32.const -1179889037)) - (i32.add (i32.const 1697755658)) - (i32.add (i32.const 1110479190)) - (i32.add (i32.const -2055754808)) - (i32.add (i32.const -264661625)) - (i32.add (i32.const 2099652062)) - (i32.add (i32.const -1085763955)) - (i32.add (i32.const -1565650626)) - (i32.add (i32.const -1878616505)) - (i32.add (i32.const 1683718486)) - (i32.add (i32.const 1465426547)) - (i32.add (i32.const 748654156)) - (i32.add (i32.const 472040605)) - (i32.add (i32.const -1231156242)) - (i32.add (i32.const -2024308482)) - (i32.add (i32.const -285944578)) - (i32.add (i32.const -823788032)) - (i32.add (i32.const -617686325)) - (i32.add (i32.const -1008755086)) - (i32.add (i32.const 220078209)) - (i32.add (i32.const 2119109824)) - (i32.add (i32.const -15692792)) - (i32.add (i32.const -439067933)) - (i32.add (i32.const -920127853)) - (i32.add (i32.const 271077530)) - (i32.add (i32.const -516815375)) - (i32.add (i32.const -774771522)) - (i32.add (i32.const 726219426)) - (i32.add (i32.const -1572914837)) - (i32.add (i32.const -1412229880)) - (i32.add (i32.const 205540491)) - (i32.add (i32.const -2130794402)) - (i32.add (i32.const -372786929)) - (i32.add (i32.const 615898611)) - (i32.add (i32.const -800603095)) - (i32.add (i32.const -1738018624)) - (i32.add (i32.const 99283910)) - (i32.add (i32.const 975891219)) - (i32.add (i32.const 1969617006)) - (i32.add (i32.const 1389975071)) - (i32.add (i32.const 829040500)) - (i32.add (i32.const -586785412)) - (i32.add (i32.const -1669258140)) - (i32.add (i32.const -1819976745)) - (i32.add (i32.const -491536406)) - (i32.add (i32.const -2095762145)) - (i32.add (i32.const 828183092)) - (i32.add (i32.const 1899576520)) - (i32.add (i32.const 308988772)) - (i32.add (i32.const 1239497731)) - (i32.add (i32.const 1303506281)) - (i32.add (i32.const -846414421)) - (i32.add (i32.const -1012134647)) - (i32.add (i32.const 1711354107)) - (i32.add (i32.const 762796296)) - (i32.add (i32.const 748113837)) - (i32.add (i32.const 1804413201)) - (i32.add (i32.const -1332617300)) - (i32.add (i32.const -1454980288)) - (i32.add (i32.const 244436587)) - (i32.add (i32.const -1418495170)) - (i32.add (i32.const 621412259)) - (i32.add (i32.const -660663880)) - (i32.add (i32.const -315071411)) - (i32.add (i32.const -992468255)) - (i32.add (i32.const 1222436558)) - (i32.add (i32.const 694097506)) - (i32.add (i32.const 1046692356)) - (i32.add (i32.const -2078188189)) - (i32.add (i32.const 1088640431)) - (i32.add (i32.const -597870073)) - (i32.add (i32.const 360415647)) - (i32.add (i32.const 375671945)) - (i32.add (i32.const 878651576)) - (i32.add (i32.const 951732119)) - (i32.add (i32.const 448083278)) - (i32.add (i32.const -1789107017)) - (i32.add (i32.const 2102111802)) - (i32.add (i32.const -337619883)) - (i32.add (i32.const -1989404298)) - (i32.add (i32.const -945099544)) - (i32.add (i32.const -1275604246)) - (i32.add (i32.const 1893363298)) - (i32.add (i32.const 1078040077)) - (i32.add (i32.const 228923873)) - (i32.add (i32.const 1771927937)) - (i32.add (i32.const 774888891)) - (i32.add (i32.const -1071923937)) - (i32.add (i32.const 49078464)) - (i32.add (i32.const 1614408163)) - (i32.add (i32.const 1029189099)) - (i32.add (i32.const -2052343404)) - (i32.add (i32.const 626520885)) - (i32.add (i32.const 1911684594)) - (i32.add (i32.const -1304743019)) - (i32.add (i32.const 2029573937)) - (i32.add (i32.const -1583750326)) - (i32.add (i32.const -1388951859)) - (i32.add (i32.const -2116733089)) - (i32.add (i32.const 1046892225)) - (i32.add (i32.const -1122289922)) - (i32.add (i32.const -1797134885)) - (i32.add (i32.const 1574010794)) - (i32.add (i32.const 1544905621)) - (i32.add (i32.const 1347065235)) - (i32.add (i32.const -1218167830)) - (i32.add (i32.const 1662243374)) - (i32.add (i32.const -1877158628)) - (i32.add (i32.const -1546868310)) - (i32.add (i32.const 910418207)) - (i32.add (i32.const 1303668709)) - (i32.add (i32.const 70583126)) - (i32.add (i32.const -2132355724)) - (i32.add (i32.const 1939275894)) - (i32.add (i32.const -1018619487)) - (i32.add (i32.const 1092318582)) - (i32.add (i32.const -1461983812)) - (i32.add (i32.const 761682207)) - (i32.add (i32.const 1774295939)) - (i32.add (i32.const 1740315567)) - (i32.add (i32.const -1516659698)) - (i32.add (i32.const 631754605)) - (i32.add (i32.const 1496053138)) - (i32.add (i32.const 1128679885)) - (i32.add (i32.const -70720167)) - (i32.add (i32.const -1079612427)) - (i32.add (i32.const 2108717209)) - (i32.add (i32.const -66561597)) - (i32.add (i32.const 1148320085)) - (i32.add (i32.const 2085072112)) - (i32.add (i32.const -99531242)) - (i32.add (i32.const -172830966)) - (i32.add (i32.const -1144880823)) - (i32.add (i32.const -1541854805)) - (i32.add (i32.const -1901926987)) - (i32.add (i32.const -172025298)) - (i32.add (i32.const -1125737813)) - (i32.add (i32.const -1245053550)) - (i32.add (i32.const -2014652305)) - (i32.add (i32.const -1477704263)) - (i32.add (i32.const -95665224)) - (i32.add (i32.const 1583216717)) - (i32.add (i32.const 877562219)) - (i32.add (i32.const 1730150527)) - (i32.add (i32.const 1171320857)) - (i32.add (i32.const 2087416772)) - (i32.add (i32.const 1566332500)) - (i32.add (i32.const -1119208721)) - (i32.add (i32.const 1463881423)) - (i32.add (i32.const -409582349)) - (i32.add (i32.const 1422732031)) - (i32.add (i32.const -725091948)) - (i32.add (i32.const -164945252)) - (i32.add (i32.const -815734604)) - (i32.add (i32.const -528787353)) - (i32.add (i32.const 497190674)) - (i32.add (i32.const 915284411)) - (i32.add (i32.const -1925240161)) - (i32.add (i32.const -1669384817)) - (i32.add (i32.const -1659107716)) - (i32.add (i32.const -557418173)) - (i32.add (i32.const 1647093281)) - (i32.add (i32.const -1052176969)) - (i32.add (i32.const -1783608548)) - (i32.add (i32.const -1569949841)) - (i32.add (i32.const 714260406)) - (i32.add (i32.const -1501842640)) - (i32.add (i32.const -981414462)) - (i32.add (i32.const -85430108)) - (i32.add (i32.const -1172617854)) - (i32.add (i32.const -1509282421)) - (i32.add (i32.const 1423283428)) - (i32.add (i32.const -1905215827)) - (i32.add (i32.const 664740483)) - (i32.add (i32.const -972562212)) - (i32.add (i32.const -2106873259)) - (i32.add (i32.const -1175788567)) - (i32.add (i32.const -1612232964)) - (i32.add (i32.const 586916828)) - (i32.add (i32.const -1411299471)) - (i32.add (i32.const -643023237)) - (i32.add (i32.const 1769531712)) - (i32.add (i32.const -432079621)) - (i32.add (i32.const 861636888)) - (i32.add (i32.const 965627612)) - (i32.add (i32.const 451303734)) - (i32.add (i32.const 1061813970)) - (i32.add (i32.const 715832836)) - (i32.add (i32.const -579821193)) - (i32.add (i32.const 750750558)) - (i32.add (i32.const -1518965037)) - (i32.add (i32.const 442233301)) - (i32.add (i32.const -633116837)) - (i32.add (i32.const 2110640816)) - (i32.add (i32.const -143226139)) - (i32.add (i32.const -67877236)) - (i32.add (i32.const -203181999)) - (i32.add (i32.const 193056498)) - (i32.add (i32.const 1673286781)) - (i32.add (i32.const 269171952)) - (i32.add (i32.const 2012973)) - (i32.add (i32.const 2096226498)) - (i32.add (i32.const 1263940788)) - (i32.add (i32.const -1708412724)) - (i32.add (i32.const 1724605897)) - (i32.add (i32.const -1364877488)) - (i32.add (i32.const 1244742198)) - (i32.add (i32.const -2133880347)) - (i32.add (i32.const -1049275084)) - (i32.add (i32.const -884183499)) - (i32.add (i32.const -765407428)) - (i32.add (i32.const -429720744)) - (i32.add (i32.const -629890326)) - (i32.add (i32.const -1384753975)) - (i32.add (i32.const -1132715684)) - (i32.add (i32.const -322347939)) - (i32.add (i32.const 1475255558)) - (i32.add (i32.const 370951814)) - (i32.add (i32.const 231992146)) - (i32.add (i32.const -44221169)) - (i32.add (i32.const 148308373)) - (i32.add (i32.const -912406753)) - (i32.add (i32.const -163616293)) - (i32.add (i32.const 571578549)) - (i32.add (i32.const -1794560405)) - (i32.add (i32.const -1328713098)) - (i32.add (i32.const 313497647)) - (i32.add (i32.const 73275395)) - (i32.add (i32.const 243301267)) - (i32.add (i32.const -1490428770)) - (i32.add (i32.const -1792553088)) - (i32.add (i32.const 1566292512)) - (i32.add (i32.const 1732467524)) - (i32.add (i32.const 818306365)) - (i32.add (i32.const 1820903897)) - (i32.add (i32.const 396681363)) - (i32.add (i32.const -1598988942)) - (i32.add (i32.const -1590699606)) - (i32.add (i32.const 733143851)) - (i32.add (i32.const -1163133241)) - (i32.add (i32.const -1087377038)) - (i32.add (i32.const 1245259500)) - (i32.add (i32.const -1180929104)) - (i32.add (i32.const 833439365)) - (i32.add (i32.const 1584803071)) - (i32.add (i32.const 730650430)) - (i32.add (i32.const -922607901)) - (i32.add (i32.const -877558605)) - (i32.add (i32.const 1772598859)) - (i32.add (i32.const -710881073)) - (i32.add (i32.const 208005842)) - (i32.add (i32.const -1402431924)) - (i32.add (i32.const -191772131)) - (i32.add (i32.const -538810235)) - (i32.add (i32.const 1100565571)) - (i32.add (i32.const 1899609272)) - (i32.add (i32.const 1073010041)) - (i32.add (i32.const 1378662022)) - (i32.add (i32.const 427713358)) - (i32.add (i32.const 1904982818)) - (i32.add (i32.const 948351827)) - (i32.add (i32.const 607648357)) - (i32.add (i32.const -1611776670)) - (i32.add (i32.const -887865590)) - (i32.add (i32.const -430983624)) - (i32.add (i32.const -1588876309)) - (i32.add (i32.const 765740897)) - (i32.add (i32.const 1143848419)) - (i32.add (i32.const 1890796155)) - (i32.add (i32.const 744112025)) - (i32.add (i32.const 667073033)) - (i32.add (i32.const 1104206686)) - (i32.add (i32.const 485084684)) - (i32.add (i32.const -866733571)) - (i32.add (i32.const 1842144626)) - (i32.add (i32.const -1536393014)) - (i32.add (i32.const -1843210766)) - (i32.add (i32.const 1273768829)) - (i32.add (i32.const -996845198)) - (i32.add (i32.const 1066276752)) - (i32.add (i32.const 997660682)) - (i32.add (i32.const 365892467)) - (i32.add (i32.const 894592544)) - (i32.add (i32.const -1189089931)) - (i32.add (i32.const 1349040116)) - (i32.add (i32.const -1210587488)) - (i32.add (i32.const -1938777075)) - (i32.add (i32.const 2044474175)) - (i32.add (i32.const -1667005353)) - (i32.add (i32.const -377044036)) - (i32.add (i32.const 1940576374)) - (i32.add (i32.const 1445432092)) - (i32.add (i32.const -1523955784)) - (i32.add (i32.const -1380034732)) - (i32.add (i32.const 1998426026)) - (i32.add (i32.const -973418676)) - (i32.add (i32.const 1508178270)) - (i32.add (i32.const 1224326720)) - (i32.add (i32.const -1705819667)) - (i32.add (i32.const -1744501790)) - (i32.add (i32.const -1113793705)) - (i32.add (i32.const 997074277)) - (i32.add (i32.const 276951643)) - (i32.add (i32.const -255380013)) - (i32.add (i32.const -619951202)) - (i32.add (i32.const -1465772271)) - (i32.add (i32.const 1484878201)) - (i32.add (i32.const 575178209)) - (i32.add (i32.const 1045033312)) - (i32.add (i32.const 348266090)) - (i32.add (i32.const 685357428)) - (i32.add (i32.const -1687698397)) - (i32.add (i32.const -1736355837)) - (i32.add (i32.const -908305060)) - (i32.add (i32.const -729790243)) - (i32.add (i32.const -882640109)) - (i32.add (i32.const 1249695067)) - (i32.add (i32.const 1980027241)) - (i32.add (i32.const -1588167945)) - (i32.add (i32.const -1494835763)) - (i32.add (i32.const 927867003)) - (i32.add (i32.const -1193207007)) - (i32.add (i32.const 583741367)) - (i32.add (i32.const 1836112084)) - (i32.add (i32.const 1648065863)) - (i32.add (i32.const 1670043231)) - (i32.add (i32.const -2005058184)) - (i32.add (i32.const 509580175)) - (i32.add (i32.const -934869640)) - (i32.add (i32.const 838894487)) - (i32.add (i32.const 289694867)) - (i32.add (i32.const -124571843)) - (i32.add (i32.const 1937557818)) - (i32.add (i32.const 2118833180)) - (i32.add (i32.const 466750029)) - (i32.add (i32.const 189942514)) - (i32.add (i32.const -1666615729)) - (i32.add (i32.const 2116249392)) - (i32.add (i32.const 319718010)) - (i32.add (i32.const 576346792)) - (i32.add (i32.const 2071069028)) - (i32.add (i32.const 1585940493)) - (i32.add (i32.const 947367032)) - (i32.add (i32.const 389041263)) - (i32.add (i32.const -977328474)) - (i32.add (i32.const -766551502)) - (i32.add (i32.const -1054990463)) - (i32.add (i32.const 931033686)) - (i32.add (i32.const -1083838939)) - (i32.add (i32.const 736376895)) - (i32.add (i32.const 338878687)) - (i32.add (i32.const -1930022830)) - (i32.add (i32.const 1904777031)) - (i32.add (i32.const 224196061)) - (i32.add (i32.const 1802731401)) - (i32.add (i32.const -1021030730)) - (i32.add (i32.const 257501205)) - (i32.add (i32.const 1658897726)) - (i32.add (i32.const 1797217045)) - (i32.add (i32.const -880846159)) - (i32.add (i32.const -492389147)) - (i32.add (i32.const 1688426827)) - (i32.add (i32.const 1116682067)) - (i32.add (i32.const 1744488188)) - (i32.add (i32.const 852158437)) - (i32.add (i32.const -6677835)) - (i32.add (i32.const 1052012853)) - (i32.add (i32.const -272336702)) - (i32.add (i32.const -563154003)) - (i32.add (i32.const -1656931580)) - (i32.add (i32.const 97759175)) - (i32.add (i32.const 218797327)) - (i32.add (i32.const -2145202780)) - (i32.add (i32.const -1142585783)) - (i32.add (i32.const 1836361261)) - (i32.add (i32.const 811933217)) - (i32.add (i32.const 1726663148)) - (i32.add (i32.const -1814817974)) - (i32.add (i32.const -360699632)) - (i32.add (i32.const 1751453821)) - (i32.add (i32.const -580573355)) - (i32.add (i32.const 364105995)) - (i32.add (i32.const -1953439191)) - (i32.add (i32.const -718674446)) - (i32.add (i32.const -1845512186)) - (i32.add (i32.const 145106020)) - (i32.add (i32.const 153004718)) - (i32.add (i32.const 651869125)) - (i32.add (i32.const 1106432012)) - (i32.add (i32.const 660657107)) - (i32.add (i32.const -690362971)) - (i32.add (i32.const 395586992)) - (i32.add (i32.const -776293015)) - (i32.add (i32.const 1285535880)) - (i32.add (i32.const 1851170384)) - (i32.add (i32.const 103943516)) - (i32.add (i32.const 890504330)) - (i32.add (i32.const -702180519)) - (i32.add (i32.const 1319278947)) - (i32.add (i32.const -1997770370)) - (i32.add (i32.const 2077767223)) - (i32.add (i32.const -1694792995)) - (i32.add (i32.const -606515273)) - (i32.add (i32.const 2106458154)) - (i32.add (i32.const 1782940945)) - (i32.add (i32.const 1816340808)) - (i32.add (i32.const -56763958)) - (i32.add (i32.const 1510997322)) - (i32.add (i32.const 1895748289)) - (i32.add (i32.const 1856149335)) - (i32.add (i32.const 544687500)) - (i32.add (i32.const 2139337326)) - (i32.add (i32.const 754864537)) - (i32.add (i32.const 173336939)) - (i32.add (i32.const -1204744542)) - (i32.add (i32.const 245882434)) - (i32.add (i32.const -1919701315)) - (i32.add (i32.const 124176836)) - (i32.add (i32.const 242296736)) - (i32.add (i32.const -1735230583)) - (i32.add (i32.const -1593256122)) - (i32.add (i32.const 336359328)) - (i32.add (i32.const 348375703)) - (i32.add (i32.const 48674066)) - (i32.add (i32.const -97965803)) - (i32.add (i32.const -754112943)) - (i32.add (i32.const -2109274530)) - (i32.add (i32.const 1414875480)) - (i32.add (i32.const 880771984)) - (i32.add (i32.const 1535766655)) - (i32.add (i32.const -420480145)) - (i32.add (i32.const 1183048674)) - (i32.add (i32.const -401735511)) - (i32.add (i32.const 1791495486)) - (i32.add (i32.const 812592158)) - (i32.add (i32.const 162070541)) - (i32.add (i32.const 1184032229)) - (i32.add (i32.const -1098232459)) - (i32.add (i32.const 382854919)) - (i32.add (i32.const 472035656)) - (i32.add (i32.const -625533829)) - (i32.add (i32.const -718573990)) - (i32.add (i32.const -806527472)) - (i32.add (i32.const 1180829365)) - (i32.add (i32.const 1374308863)) - (i32.add (i32.const -49797831)) - (i32.add (i32.const 697732990)) - (i32.add (i32.const -1372525799)) - (i32.add (i32.const -1110234913)) - (i32.add (i32.const 501689513)) - (i32.add (i32.const -2120522868)) - (i32.add (i32.const -193061397)) - (i32.add (i32.const 2030437076)) - (i32.add (i32.const -602614008)) - (i32.add (i32.const 1383600488)) - (i32.add (i32.const -1166172777)) - (i32.add (i32.const -788847576)) - (i32.add (i32.const 480064632)) - (i32.add (i32.const 101289984)) - (i32.add (i32.const -1481789762)) - (i32.add (i32.const 539128989)) - (i32.add (i32.const 522990603)) - (i32.add (i32.const -726333442)) - (i32.add (i32.const -734704314)) - (i32.add (i32.const -397477096)) - (i32.add (i32.const -391773299)) - (i32.add (i32.const -1779191270)) - (i32.add (i32.const -1960950868)) - (i32.add (i32.const 478980676)) - (i32.add (i32.const 162448528)) - (i32.add (i32.const -1616669898)) - (i32.add (i32.const -831523581)) - (i32.add (i32.const 1772277216)) - (i32.add (i32.const -1930332267)) - (i32.add (i32.const 434832735)) - (i32.add (i32.const -558750555)) - (i32.add (i32.const -373617034)) - (i32.add (i32.const -2050452095)) - (i32.add (i32.const -55810262)) - (i32.add (i32.const 1092520591)) - (i32.add (i32.const 58906901)) - (i32.add (i32.const -1332496900)) - (i32.add (i32.const -1606091582)) - (i32.add (i32.const -1766647845)) - (i32.add (i32.const -1179278718)) - (i32.add (i32.const 2060266854)) - (i32.add (i32.const -1736126896)) - (i32.add (i32.const -1184443793)) - (i32.add (i32.const 74850728)) - (i32.add (i32.const -1720950153)) - (i32.add (i32.const 1666926292)) - (i32.add (i32.const 290127802)) - (i32.add (i32.const 1735351196)) - (i32.add (i32.const -920898831)) - (i32.add (i32.const -399591378)) - (i32.add (i32.const -25134927)) - (i32.add (i32.const -1077577364)) - (i32.add (i32.const -690792157)) - (i32.add (i32.const 2046220887)) - (i32.add (i32.const -1328129630)) - (i32.add (i32.const -728658596)) - (i32.add (i32.const 1137963961)) - (i32.add (i32.const -1408312596)) - (i32.add (i32.const -1216105871)) - (i32.add (i32.const 1204876223)) - (i32.add (i32.const -1433649608)) - (i32.add (i32.const -1960788728)) - (i32.add (i32.const 1219667746)) - (i32.add (i32.const -3232609)) - (i32.add (i32.const 118900943)) - (i32.add (i32.const 83768430)) - (i32.add (i32.const 335204686)) - (i32.add (i32.const 624530148)) - (i32.add (i32.const 1972530253)) - (i32.add (i32.const -1246618544)) - (i32.add (i32.const 902575835)) - (i32.add (i32.const 1959438332)) - (i32.add (i32.const 1049770884)) - (i32.add (i32.const 2141964340)) - (i32.add (i32.const 11329989)) - (i32.add (i32.const -428997343)) - (i32.add (i32.const 204123247)) - (i32.add (i32.const -1572039553)) - (i32.add (i32.const 1971363741)) - (i32.add (i32.const -1871274537)) - (i32.add (i32.const -1148905670)) - (i32.add (i32.const -1512083634)) - (i32.add (i32.const -693004147)) - (i32.add (i32.const -1150365136)) - (i32.add (i32.const 405583658)) - (i32.add (i32.const -1644547793)) - (i32.add (i32.const -105679374)) - (i32.add (i32.const 662091263)) - (i32.add (i32.const -1900375503)) - (i32.add (i32.const -527024857)) - (i32.add (i32.const 1839058265)) - (i32.add (i32.const 1474974108)) - (i32.add (i32.const 415803969)) - (i32.add (i32.const 1165958575)) - (i32.add (i32.const -383549538)) - (i32.add (i32.const 312878303)) - (i32.add (i32.const 1278593841)) - (i32.add (i32.const 1926554229)) - (i32.add (i32.const -1216535882)) - (i32.add (i32.const 1813596252)) - (i32.add (i32.const 1125328482)) - (i32.add (i32.const -41757154)) - (i32.add (i32.const -452144278)) - (i32.add (i32.const 282250137)) - (i32.add (i32.const 2135543546)) - (i32.add (i32.const -314039886)) - (i32.add (i32.const 1143254887)) - (i32.add (i32.const 1201982093)) - (i32.add (i32.const 1926260200)) - (i32.add (i32.const -1644054406)) - (i32.add (i32.const -1479866954)) - (i32.add (i32.const -2104827360)) - (i32.add (i32.const -488265176)) - (i32.add (i32.const -428376185)) - (i32.add (i32.const 697565994)) - (i32.add (i32.const -733779747)) - (i32.add (i32.const 1177878844)) - (i32.add (i32.const -1944640604)) - (i32.add (i32.const -466986724)) - (i32.add (i32.const -973608700)) - (i32.add (i32.const -892789655)) - (i32.add (i32.const -1589529843)) - (i32.add (i32.const 1774325612)) - (i32.add (i32.const -365889000)) - (i32.add (i32.const 110795671)) - (i32.add (i32.const -1067118767)) - (i32.add (i32.const -1993554112)) - (i32.add (i32.const -581485227)) - (i32.add (i32.const -1222170040)) - (i32.add (i32.const 1698208001)) - (i32.add (i32.const -581579049)) - (i32.add (i32.const 552457525)) - (i32.add (i32.const 1999135029)) - (i32.add (i32.const -396044704)) - (i32.add (i32.const -1967611765)) - (i32.add (i32.const 1403411948)) - (i32.add (i32.const -896994919)) - (i32.add (i32.const -482321058)) - (i32.add (i32.const 917331512)) - (i32.add (i32.const 166811307)) - (i32.add (i32.const -1913752607)) - (i32.add (i32.const 1921652890)) - (i32.add (i32.const -1859985898)) - (i32.add (i32.const 166225737)) - (i32.add (i32.const 2123571505)) - (i32.add (i32.const 1541736730)) - (i32.add (i32.const 2039770993)) - (i32.add (i32.const 1923953715)) - (i32.add (i32.const -375082112)) - (i32.add (i32.const 2052596090)) - (i32.add (i32.const 1168198828)) - (i32.add (i32.const 14875716)) - (i32.add (i32.const -2079447658)) - (i32.add (i32.const 2031243262)) - (i32.add (i32.const 427926143)) - (i32.add (i32.const 1789677913)) - (i32.add (i32.const 1448637075)) - (i32.add (i32.const 1095028019)) - (i32.add (i32.const -1478342054)) - (i32.add (i32.const 1116058486)) - (i32.add (i32.const -2085501765)) - (i32.add (i32.const 390940530)) - (i32.add (i32.const 934262039)) - (i32.add (i32.const 1473434889)) - (i32.add (i32.const 1430392634)) - (i32.add (i32.const -1403107113)) - (i32.add (i32.const 1222289029)) - (i32.add (i32.const -1084742547)) - (i32.add (i32.const -50821836)) - (i32.add (i32.const -637734383)) - (i32.add (i32.const -1936247352)) - (i32.add (i32.const -925240596)) - (i32.add (i32.const 1917973658)) - (i32.add (i32.const 1911172713)) - (i32.add (i32.const 2021060929)) - (i32.add (i32.const 181671990)) - (i32.add (i32.const -728108080)) - (i32.add (i32.const -1609646929)) - (i32.add (i32.const -1969502515)) - (i32.add (i32.const 8804102)) - (i32.add (i32.const -1827875657)) - (i32.add (i32.const -1742448967)) - (i32.add (i32.const 782495212)) - (i32.add (i32.const -1540200505)) - (i32.add (i32.const -154169814)) - (i32.add (i32.const -395094951)) - (i32.add (i32.const 765034558)) - (i32.add (i32.const 1636094913)) - (i32.add (i32.const -980279067)) - (i32.add (i32.const -1153344760)) - (i32.add (i32.const -1164904311)) - (i32.add (i32.const -876111242)) - (i32.add (i32.const -2071351532)) - (i32.add (i32.const -1432822578)) - (i32.add (i32.const -324330918)) - (i32.add (i32.const -1274384044)) - (i32.add (i32.const -1466103459)) - (i32.add (i32.const -537117818)) - (i32.add (i32.const 1077578324)) - (i32.add (i32.const -173540089)) - (i32.add (i32.const 500594243)) - (i32.add (i32.const -1802434893)) - (i32.add (i32.const 1356222759)) - (i32.add (i32.const -2018345227)) - (i32.add (i32.const 1028955372)) - (i32.add (i32.const -1786045988)) - (i32.add (i32.const 289788316)) - (i32.add (i32.const -785010036)) - (i32.add (i32.const 1371370416)) - (i32.add (i32.const 1153530974)) - (i32.add (i32.const 2063570465)) - (i32.add (i32.const 1155525046)) - (i32.add (i32.const -1856652750)) - (i32.add (i32.const -1551625625)) - (i32.add (i32.const -793885834)) - (i32.add (i32.const 76843028)) - (i32.add (i32.const -1966435378)) - (i32.add (i32.const 1079516240)) - (i32.add (i32.const 1564529547)) - (i32.add (i32.const -1338365004)) - (i32.add (i32.const -715989365)) - (i32.add (i32.const -517175154)) - (i32.add (i32.const -201654920)) - (i32.add (i32.const 995011698)) - (i32.add (i32.const -1321695886)) - (i32.add (i32.const 2072664305)) - (i32.add (i32.const -1742768594)) - (i32.add (i32.const -174011860)) - (i32.add (i32.const 1851737900)) - (i32.add (i32.const -680759427)) - (i32.add (i32.const -1727955308)) - (i32.add (i32.const -1962640538)) - (i32.add (i32.const -873957601)) - (i32.add (i32.const 1524936535)) - (i32.add (i32.const 1968332144)) - (i32.add (i32.const -1064390128)) - (i32.add (i32.const 1599421520)) - (i32.add (i32.const -115464182)) - (i32.add (i32.const -1513755537)) - (i32.add (i32.const 1374139689)) - (i32.add (i32.const 1088637755)) - (i32.add (i32.const 12344418)) - (i32.add (i32.const 125889885)) - (i32.add (i32.const 1849239823)) - (i32.add (i32.const 1052227848)) - (i32.add (i32.const 1543034464)) - (i32.add (i32.const -2135395687)) - (i32.add (i32.const -1374608695)) - (i32.add (i32.const -399637246)) - (i32.add (i32.const -115033354)) - (i32.add (i32.const -967929697)) - (i32.add (i32.const 1285230908)) - (i32.add (i32.const 109681743)) - (i32.add (i32.const 640074177)) - (i32.add (i32.const 1791473078)) - (i32.add (i32.const -1048227564)) - (i32.add (i32.const 1436288883)) - (i32.add (i32.const 112857429)) - (i32.add (i32.const 473292050)) - (i32.add (i32.const -986276259)) - (i32.add (i32.const 1801724845)) - (i32.add (i32.const 1997224455)) - (i32.add (i32.const 1018147162)) - (i32.add (i32.const -1618727729)) - (i32.add (i32.const 400010140)) - (i32.add (i32.const 8466051)) - (i32.add (i32.const -1221016216)) - (i32.add (i32.const -1965834732)) - (i32.add (i32.const 1673458879)) - (i32.add (i32.const -202593336)) - (i32.add (i32.const 196430193)) - (i32.add (i32.const 39449277)) - (i32.add (i32.const -280762830)) - (i32.add (i32.const 1396861797)) - (i32.add (i32.const 1670644910)) - (i32.add (i32.const -223115371)) - (i32.add (i32.const 1022748046)) - (i32.add (i32.const 1698929013)) - (i32.add (i32.const 26364265)) - (i32.add (i32.const 1264900524)) - (i32.add (i32.const -907632063)) - (i32.add (i32.const -1263460399)) - (i32.add (i32.const 1127886664)) - (i32.add (i32.const -1320553870)) - (i32.add (i32.const -1706133423)) - (i32.add (i32.const -1584080478)) - (i32.add (i32.const 1141506233)) - (i32.add (i32.const 386763555)) - (i32.add (i32.const 304240408)) - (i32.add (i32.const 2065057026)) - (i32.add (i32.const -737807016)) - (i32.add (i32.const 1499441546)) - (i32.add (i32.const -1988323871)) - (i32.add (i32.const -530099972)) - (i32.add (i32.const 980134113)) - (i32.add (i32.const -489283355)) - (i32.add (i32.const 88938628)) - (i32.add (i32.const -760534082)) - (i32.add (i32.const 1669044507)) - (i32.add (i32.const 674079874)) - (i32.add (i32.const -467997951)) - (i32.add (i32.const -899560032)) - (i32.add (i32.const 120404452)) - (i32.add (i32.const 315697410)) - (i32.add (i32.const -1194498895)) - (i32.add (i32.const -1515813940)) - (i32.add (i32.const 412812932)) - (i32.add (i32.const 190511407)) - (i32.add (i32.const -1386742042)) - (i32.add (i32.const -489566955)) - (i32.add (i32.const 1338281768)) - (i32.add (i32.const 365265744)) - (i32.add (i32.const -2007783253)) - (i32.add (i32.const 2020031750)) - (i32.add (i32.const -1149133178)) - (i32.add (i32.const 1296646568)) - (i32.add (i32.const -310719212)) - (i32.add (i32.const -60423004)) - (i32.add (i32.const -1428550769)) - (i32.add (i32.const -1509088228)) - (i32.add (i32.const -975885330)) - (i32.add (i32.const 417408856)) - (i32.add (i32.const -31118448)) - (i32.add (i32.const -441406268)) - (i32.add (i32.const 1058313932)) - (i32.add (i32.const -1717558174)) - (i32.add (i32.const -674721281)) - (i32.add (i32.const 604723086)) - (i32.add (i32.const 635695526)) - (i32.add (i32.const -1493839297)) - (i32.add (i32.const -337539163)) - (i32.add (i32.const -381225256)) - (i32.add (i32.const 491846331)) - (i32.add (i32.const -1741206039)) - (i32.add (i32.const 261264784)) - (i32.add (i32.const -1340970247)) - (i32.add (i32.const -1672025368)) - (i32.add (i32.const 271833173)) - (i32.add (i32.const 982519672)) - (i32.add (i32.const 2049732674)) - (i32.add (i32.const 223517501)) - (i32.add (i32.const -1438603381)) - (i32.add (i32.const 1981271341)) - (i32.add (i32.const -1582098822)) - (i32.add (i32.const 1955765592)) - (i32.add (i32.const 409913698)) - (i32.add (i32.const -1997242837)) - (i32.add (i32.const 2143906166)) - (i32.add (i32.const -472406071)) - (i32.add (i32.const 331043847)) - (i32.add (i32.const -2092565637)) - (i32.add (i32.const -1614020125)) - (i32.add (i32.const 457718310)) - (i32.add (i32.const -408818255)) - (i32.add (i32.const 209118261)) - (i32.add (i32.const -1451453396)) - (i32.add (i32.const 1531145963)) - (i32.add (i32.const -1842616346)) - (i32.add (i32.const -2061214507)) - (i32.add (i32.const -1052812166)) - (i32.add (i32.const -716387176)) - (i32.add (i32.const -1654877195)) - (i32.add (i32.const -763508075)) - (i32.add (i32.const -1516675157)) - (i32.add (i32.const -2102314847)) - (i32.add (i32.const -797624322)) - (i32.add (i32.const -1574241567)) - (i32.add (i32.const 1879062074)) - (i32.add (i32.const -520139589)) - (i32.add (i32.const 1264460482)) - (i32.add (i32.const -1630741615)) - (i32.add (i32.const 2010885182)) - (i32.add (i32.const -506759077)) - (i32.add (i32.const 1965834420)) - (i32.add (i32.const -742535617)) - (i32.add (i32.const -710637870)) - (i32.add (i32.const 989126515)) - (i32.add (i32.const -1763751829)) - (i32.add (i32.const -1989563941)) - (i32.add (i32.const 634123957)) - (i32.add (i32.const 1686443173)) - (i32.add (i32.const 430741727)) - (i32.add (i32.const -402183131)) - (i32.add (i32.const 170060210)) - (i32.add (i32.const 1644904162)) - (i32.add (i32.const -1104341202)) - (i32.add (i32.const 1248911152)) - (i32.add (i32.const -1755373147)) - (i32.add (i32.const -1068661130)) - (i32.add (i32.const 937023107)) - (i32.add (i32.const 1823274301)) - (i32.add (i32.const -724893900)) - (i32.add (i32.const -1634453628)) - (i32.add (i32.const -57816049)) - (i32.add (i32.const 1151483157)) - (i32.add (i32.const -441357559)) - (i32.add (i32.const -1917566329)) - (i32.add (i32.const -2030593633)) - (i32.add (i32.const -382586223)) - (i32.add (i32.const -332093042)) - (i32.add (i32.const -199979820)) - (i32.add (i32.const 1144981911)) - (i32.add (i32.const 160974427)) - (i32.add (i32.const 1708628093)) - (i32.add (i32.const 242635455)) - (i32.add (i32.const 1013542230)) - (i32.add (i32.const 1159135121)) - (i32.add (i32.const -1527414158)) - (i32.add (i32.const 1504129870)) - (i32.add (i32.const -409385342)) - (i32.add (i32.const 147946587)) - (i32.add (i32.const -407880564)) - (i32.add (i32.const -1446105315)) - (i32.add (i32.const -735369484)) - (i32.add (i32.const -1586364316)) - (i32.add (i32.const -1398776362)) - (i32.add (i32.const -651968793)) - (i32.add (i32.const 972678020)) - (i32.add (i32.const -1711038208)) - (i32.add (i32.const -1444543320)) - (i32.add (i32.const 239681554)) - (i32.add (i32.const -87956487)) - (i32.add (i32.const -857648686)) - (i32.add (i32.const -583442137)) - (i32.add (i32.const 840227499)) - (i32.add (i32.const 1503668582)) - (i32.add (i32.const 269912046)) - (i32.add (i32.const -1728845105)) - (i32.add (i32.const -1317683956)) - (i32.add (i32.const 1100694636)) - (i32.add (i32.const 1960187160)) - (i32.add (i32.const -1766744928)) - (i32.add (i32.const -2005994615)) - (i32.add (i32.const -483307546)) - (i32.add (i32.const 1356617785)) - (i32.add (i32.const -1703781467)) - (i32.add (i32.const 116432876)) - (i32.add (i32.const -1445101287)) - (i32.add (i32.const 1841163070)) - (i32.add (i32.const 907244667)) - (i32.add (i32.const 732807757)) - (i32.add (i32.const -767147011)) - (i32.add (i32.const -976894355)) - (i32.add (i32.const 682093695)) - (i32.add (i32.const 1793171212)) - (i32.add (i32.const -1982366921)) - (i32.add (i32.const 1723603311)) - (i32.add (i32.const -1086492408)) - (i32.add (i32.const 2085218656)) - (i32.add (i32.const 1411123386)) - (i32.add (i32.const -96525290)) - (i32.add (i32.const -2078822156)) - (i32.add (i32.const -1871121985)) - (i32.add (i32.const 604299729)) - (i32.add (i32.const -273312088)) - (i32.add (i32.const 171602892)) - (i32.add (i32.const 1183522176)) - (i32.add (i32.const 1715717241)) - (i32.add (i32.const -1536022102)) - (i32.add (i32.const -783064024)) - (i32.add (i32.const 656076541)) - (i32.add (i32.const 1196043288)) - (i32.add (i32.const -1095238255)) - (i32.add (i32.const 552471032)) - (i32.add (i32.const -332826272)) - (i32.add (i32.const 390939866)) - (i32.add (i32.const 975208670)) - (i32.add (i32.const 1905400308)) - (i32.add (i32.const 1771190258)) - (i32.add (i32.const -1967310570)) - (i32.add (i32.const 154546143)) - (i32.add (i32.const -134480784)) - (i32.add (i32.const -506702648)) - (i32.add (i32.const -880541159)) - (i32.add (i32.const -966044189)) - (i32.add (i32.const 86958132)) - (i32.add (i32.const 2074608012)) - (i32.add (i32.const -722242716)) - (i32.add (i32.const 1462613220)) - (i32.add (i32.const -1519632190)) - (i32.add (i32.const 1907002745)) - (i32.add (i32.const 1756755404)) - (i32.add (i32.const 46133035)) - (i32.add (i32.const 1491519452)) - (i32.add (i32.const -723703164)) - (i32.add (i32.const 1076942529)) - (i32.add (i32.const -1624560301)) - (i32.add (i32.const -1652681001)) - (i32.add (i32.const -636728464)) - (i32.add (i32.const 255809742)) - (i32.add (i32.const -1070776670)) - (i32.add (i32.const 1783709164)) - (i32.add (i32.const -864222266)) - (i32.add (i32.const 2055321471)) - (i32.add (i32.const 1000884360)) - (i32.add (i32.const 459256648)) - (i32.add (i32.const -273754300)) - (i32.add (i32.const -504487233)) - (i32.add (i32.const -351198037)) - (i32.add (i32.const -1976624914)) - (i32.add (i32.const 253812740)) - (i32.add (i32.const 444438078)) - (i32.add (i32.const 459535004)) - (i32.add (i32.const -1798278903)) - (i32.add (i32.const -1256874843)) - (i32.add (i32.const 614994666)) - (i32.add (i32.const -410597383)) - (i32.add (i32.const -422494892)) - (i32.add (i32.const 734461249)) - (i32.add (i32.const -1472904484)) - (i32.add (i32.const 804763270)) - (i32.add (i32.const -1086357532)) - (i32.add (i32.const -1942447401)) - (i32.add (i32.const 1002505034)) - (i32.add (i32.const -1928887361)) - (i32.add (i32.const 1238578461)) - (i32.add (i32.const -12491066)) - (i32.add (i32.const 1066805428)) - (i32.add (i32.const 889168773)) - (i32.add (i32.const -2117021323)) - (i32.add (i32.const -133335767)) - (i32.add (i32.const 203438334)) - (i32.add (i32.const -1181354222)) - (i32.add (i32.const 1067068226)) - (i32.add (i32.const -1339236348)) - (i32.add (i32.const 1303893367)) - (i32.add (i32.const 346107668)) - (i32.add (i32.const 1563729258)) - (i32.add (i32.const 237839334)) - (i32.add (i32.const 1058045581)) - (i32.add (i32.const -1159207838)) - (i32.add (i32.const -2079986938)) - (i32.add (i32.const -532289192)) - (i32.add (i32.const -700909485)) - (i32.add (i32.const 1497674569)) - (i32.add (i32.const -1764451858)) - (i32.add (i32.const -968301505)) - (i32.add (i32.const 1948751104)) - (i32.add (i32.const 157617028)) - (i32.add (i32.const -56234373)) - (i32.add (i32.const -1599076089)) - (i32.add (i32.const 571553023)) - (i32.add (i32.const 378944987)) - (i32.add (i32.const 1428739263)) - (i32.add (i32.const 897797463)) - (i32.add (i32.const -871120939)) - (i32.add (i32.const -457217316)) - (i32.add (i32.const -509257784)) - (i32.add (i32.const 2024774710)) - (i32.add (i32.const -1990751650)) - (i32.add (i32.const 1833626693)) - (i32.add (i32.const -1287047)) - (i32.add (i32.const -1145013014)) - (i32.add (i32.const 1622604051)) - (i32.add (i32.const -216182879)) - (i32.add (i32.const -670853501)) - (i32.add (i32.const 62562792)) - (i32.add (i32.const -1214974696)) - (i32.add (i32.const 1397210585)) - (i32.add (i32.const 1348654682)) - (i32.add (i32.const 1681081745)) - (i32.add (i32.const -1330937129)) - (i32.add (i32.const -1453409309)) - (i32.add (i32.const -491602537)) - (i32.add (i32.const 679356740)) - (i32.add (i32.const 763615863)) - (i32.add (i32.const -2022436174)) - (i32.add (i32.const 1712221440)) - (i32.add (i32.const 991487527)) - (i32.add (i32.const -1977011997)) - (i32.add (i32.const 469636056)) - (i32.add (i32.const -130261367)) - (i32.add (i32.const -957642800)) - (i32.add (i32.const 1518098185)) - (i32.add (i32.const -150083905)) - (i32.add (i32.const -24301299)) - (i32.add (i32.const 1704005703)) - (i32.add (i32.const 636667669)) - (i32.add (i32.const -1529646048)) - (i32.add (i32.const 1937725879)) - (i32.add (i32.const 158156898)) - (i32.add (i32.const 985469968)) - (i32.add (i32.const -1470276415)) - (i32.add (i32.const -1972513044)) - (i32.add (i32.const 1708115893)) - (i32.add (i32.const -193088697)) - (i32.add (i32.const -1860306128)) - (i32.add (i32.const -19137738)) - (i32.add (i32.const -742905232)) - (i32.add (i32.const -860921704)) - (i32.add (i32.const 441539384)) - (i32.add (i32.const -48504909)) - (i32.add (i32.const -775977230)) - (i32.add (i32.const -406849251)) - (i32.add (i32.const 1308782070)) - (i32.add (i32.const 1828611030)) - (i32.add (i32.const 420038234)) - (i32.add (i32.const -266749269)) - (i32.add (i32.const 893076781)) - (i32.add (i32.const -1407998359)) - (i32.add (i32.const 2102493208)) - (i32.add (i32.const -1547661700)) - (i32.add (i32.const -1487444336)) - (i32.add (i32.const -53897098)) - (i32.add (i32.const 765905866)) - (i32.add (i32.const -27020405)) - (i32.add (i32.const 614548236)) - (i32.add (i32.const -82925577)) - (i32.add (i32.const 365218491)) - (i32.add (i32.const 646943547)) - (i32.add (i32.const 1418628249)) - (i32.add (i32.const 735710520)) - (i32.add (i32.const 312531581)) - (i32.add (i32.const 479064118)) - (i32.add (i32.const 1348031301)) - (i32.add (i32.const 565669556)) - (i32.add (i32.const 1060456619)) - (i32.add (i32.const 2020402639)) - (i32.add (i32.const -289644799)) - (i32.add (i32.const 1316852851)) - (i32.add (i32.const -859057535)) - (i32.add (i32.const -1636818435)) - (i32.add (i32.const 350461494)) - (i32.add (i32.const -1443062719)) - (i32.add (i32.const -1804369304)) - (i32.add (i32.const 953627080)) - (i32.add (i32.const -2062561059)) - (i32.add (i32.const -36361190)) - (i32.add (i32.const 1918362826)) - (i32.add (i32.const -1126990760)) - (i32.add (i32.const -1525886843)) - (i32.add (i32.const 118330199)) - (i32.add (i32.const 514301132)) - (i32.add (i32.const -31776406)) - (i32.add (i32.const -2090708763)) - (i32.add (i32.const -161895789)) - (i32.add (i32.const -2101560265)) - (i32.add (i32.const 23640211)) - (i32.add (i32.const 152252938)) - (i32.add (i32.const 1651121012)) - (i32.add (i32.const 1261519089)) - (i32.add (i32.const -207421608)) - (i32.add (i32.const 1608584841)) - (i32.add (i32.const -1184158841)) - (i32.add (i32.const 496985806)) - (i32.add (i32.const 2132978210)) - (i32.add (i32.const -1267306815)) - (i32.add (i32.const -688660602)) - (i32.add (i32.const 1452950411)) - (i32.add (i32.const -1727323864)) - (i32.add (i32.const -1840512536)) - (i32.add (i32.const -1095603700)) - (i32.add (i32.const -1542735196)) - (i32.add (i32.const 2010909095)) - (i32.add (i32.const 1038025239)) - (i32.add (i32.const -1837265665)) - (i32.add (i32.const -215849222)) - (i32.add (i32.const 150937095)) - (i32.add (i32.const -478291835)) - (i32.add (i32.const 571344254)) - (i32.add (i32.const 115764516)) - (i32.add (i32.const 164499897)) - (i32.add (i32.const -1560299894)) - (i32.add (i32.const -69606045)) - (i32.add (i32.const -1674240404)) - (i32.add (i32.const -1739606117)) - (i32.add (i32.const -1749512409)) - (i32.add (i32.const 1649837136)) - (i32.add (i32.const 1164190935)) - (i32.add (i32.const 2066966937)) - (i32.add (i32.const -304379872)) - (i32.add (i32.const -816830775)) - (i32.add (i32.const 1116184642)) - (i32.add (i32.const -459800754)) - (i32.add (i32.const 1810805660)) - (i32.add (i32.const 398504965)) - (i32.add (i32.const -467839174)) - (i32.add (i32.const -1086154838)) - (i32.add (i32.const 2123035)) - (i32.add (i32.const 1983267688)) - (i32.add (i32.const 472458995)) - (i32.add (i32.const -1009552394)) - (i32.add (i32.const -1573006414)) - (i32.add (i32.const 1908168222)) - (i32.add (i32.const -1818090619)) - (i32.add (i32.const 775629710)) - (i32.add (i32.const 1613428971)) - (i32.add (i32.const -769027813)) - (i32.add (i32.const -259372027)) - (i32.add (i32.const -1611658463)) - (i32.add (i32.const 1970546240)) - (i32.add (i32.const -714499628)) - (i32.add (i32.const 1690715097)) - (i32.add (i32.const -28124357)) - (i32.add (i32.const -883217850)) - (i32.add (i32.const 1620455226)) - (i32.add (i32.const 1876837153)) - (i32.add (i32.const 2120808389)) - (i32.add (i32.const -436698135)) - (i32.add (i32.const -1227178293)) - (i32.add (i32.const 1339208402)) - (i32.add (i32.const -948662813)) - (i32.add (i32.const 120934293)) - (i32.add (i32.const -621553351)) - (i32.add (i32.const 339305868)) - (i32.add (i32.const -572367002)) - (i32.add (i32.const 1438938304)) - (i32.add (i32.const -1032618783)) - (i32.add (i32.const -249864045)) - (i32.add (i32.const -1728669317)) - (i32.add (i32.const -892032568)) - (i32.add (i32.const 1495328064)) - (i32.add (i32.const -2083450687)) - (i32.add (i32.const -145726761)) - (i32.add (i32.const 882459538)) - (i32.add (i32.const -852705769)) - (i32.add (i32.const -370085956)) - (i32.add (i32.const -1689618750)) - (i32.add (i32.const 63388207)) - (i32.add (i32.const 791958680)) - (i32.add (i32.const 556263732)) - (i32.add (i32.const 205594364)) - (i32.add (i32.const 2097523650)) - (i32.add (i32.const -506104893)) - (i32.add (i32.const -803716198)) - (i32.add (i32.const -866070842)) - (i32.add (i32.const -1682788266)) - (i32.add (i32.const -1366247714)) - (i32.add (i32.const -758232770)) - (i32.add (i32.const -766384589)) - (i32.add (i32.const 1678050071)) - (i32.add (i32.const 561211817)) - (i32.add (i32.const 2142739179)) - (i32.add (i32.const -581257171)) - (i32.add (i32.const -1970298519)) - (i32.add (i32.const 923007304)) - (i32.add (i32.const -653331748)) - (i32.add (i32.const 1525750236)) - (i32.add (i32.const 796955539)) - (i32.add (i32.const 1755547620)) - (i32.add (i32.const 1452376230)) - (i32.add (i32.const 888552016)) - (i32.add (i32.const -1813334895)) - (i32.add (i32.const 1911767009)) - (i32.add (i32.const -2104226276)) - (i32.add (i32.const -1056927014)) - (i32.add (i32.const -1185744088)) - (i32.add (i32.const -1898547750)) - (i32.add (i32.const -699760408)) - (i32.add (i32.const -1012673944)) - (i32.add (i32.const -1579888913)) - (i32.add (i32.const 970719038)) - (i32.add (i32.const -975890846)) - (i32.add (i32.const -864261790)) - (i32.add (i32.const -1656706075)) - (i32.add (i32.const 1274294820)) - (i32.add (i32.const -907566528)) - (i32.add (i32.const 1497670530)) - (i32.add (i32.const -1775758044)) - (i32.add (i32.const 483906231)) - (i32.add (i32.const 1196567205)) - (i32.add (i32.const 208587183)) - (i32.add (i32.const -1482159909)) - (i32.add (i32.const 1494770022)) - (i32.add (i32.const -485062630)) - (i32.add (i32.const -1280163569)) - (i32.add (i32.const -618857889)) - (i32.add (i32.const 1595341106)) - (i32.add (i32.const -258164289)) - (i32.add (i32.const 505899428)) - (i32.add (i32.const -1489806665)) - (i32.add (i32.const 1395890824)) - (i32.add (i32.const -863419859)) - (i32.add (i32.const -973792435)) - (i32.add (i32.const 1114989242)) - (i32.add (i32.const 1261236431)) - (i32.add (i32.const 138410849)) - (i32.add (i32.const -1036861035)) - (i32.add (i32.const 69440000)) - (i32.add (i32.const 224267067)) - (i32.add (i32.const -419000434)) - (i32.add (i32.const 138677450)) - (i32.add (i32.const -1299850799)) - (i32.add (i32.const 47273542)) - (i32.add (i32.const 1658191506)) - (i32.add (i32.const 1331217751)) - (i32.add (i32.const 2033189185)) - (i32.add (i32.const 2056900764)) - (i32.add (i32.const -1739275612)) - (i32.add (i32.const 200368596)) - (i32.add (i32.const -9386255)) - (i32.add (i32.const 1580964680)) - (i32.add (i32.const 311179073)) - (i32.add (i32.const -795837220)) - (i32.add (i32.const -2111055571)) - (i32.add (i32.const -1406097326)) - (i32.add (i32.const 1316873610)) - (i32.add (i32.const 2066897892)) - (i32.add (i32.const 710042171)) - (i32.add (i32.const -1464545790)) - (i32.add (i32.const 1029401433)) - (i32.add (i32.const -1552408079)) - (i32.add (i32.const -1795234518)) - (i32.add (i32.const 980503056)) - (i32.add (i32.const -306277427)) - (i32.add (i32.const 1105302661)) - (i32.add (i32.const -24374670)) - (i32.add (i32.const -226766388)) - (i32.add (i32.const -422439779)) - (i32.add (i32.const 706462952)) - (i32.add (i32.const 75359872)) - (i32.add (i32.const -683908108)) - (i32.add (i32.const 1202342585)) - (i32.add (i32.const 1646220011)) - (i32.add (i32.const -533539871)) - (i32.add (i32.const -1189013880)) - (i32.add (i32.const 1962287557)) - (i32.add (i32.const 1682082463)) - (i32.add (i32.const 31026700)) - (i32.add (i32.const -1729025916)) - (i32.add (i32.const 900673450)) - (i32.add (i32.const -839867838)) - (i32.add (i32.const 1003821827)) - (i32.add (i32.const -1185503127)) - (i32.add (i32.const -551594322)) - (i32.add (i32.const 1468247779)) - (i32.add (i32.const -2016719606)) - (i32.add (i32.const -477167260)) - (i32.add (i32.const -900835036)) - (i32.add (i32.const 490815415)) - (i32.add (i32.const 236056118)) - (i32.add (i32.const -729343681)) - (i32.add (i32.const 1993969871)) - (i32.add (i32.const -556493569)) - (i32.add (i32.const 20079511)) - (i32.add (i32.const 1893747897)) - (i32.add (i32.const 1678586034)) - (i32.add (i32.const 178816380)) - (i32.add (i32.const 126459463)) - (i32.add (i32.const 476501363)) - (i32.add (i32.const 523968930)) - (i32.add (i32.const -1890218054)) - (i32.add (i32.const 1341590769)) - (i32.add (i32.const -1496294674)) - (i32.add (i32.const -442797589)) - (i32.add (i32.const 716842)) - (i32.add (i32.const 233699726)) - (i32.add (i32.const 606851801)) - (i32.add (i32.const 101168814)) - (i32.add (i32.const 863540008)) - (i32.add (i32.const -1313369227)) - (i32.add (i32.const -1832466587)) - (i32.add (i32.const 1756636625)) - (i32.add (i32.const -1462827575)) - (i32.add (i32.const -1267174647)) - (i32.add (i32.const -1017233279)) - (i32.add (i32.const -1489524411)) - (i32.add (i32.const -709113493)) - (i32.add (i32.const 674518702)) - (i32.add (i32.const 824726957)) - (i32.add (i32.const -1787953778)) - (i32.add (i32.const 2058926009)) - (i32.add (i32.const -861315244)) - (i32.add (i32.const -1694500436)) - (i32.add (i32.const -1025235312)) - (i32.add (i32.const 1113465388)) - (i32.add (i32.const -1709947680)) - (i32.add (i32.const -325116023)) - (i32.add (i32.const -1252732047)) - (i32.add (i32.const 689214115)) - (i32.add (i32.const 607609548)) - (i32.add (i32.const 1871352496)) - (i32.add (i32.const 75520798)) - (i32.add (i32.const 437830109)) - (i32.add (i32.const -1620202848)) - (i32.add (i32.const -2100951396)) - (i32.add (i32.const -491538617)) - (i32.add (i32.const -1377381613)) - (i32.add (i32.const -824311390)) - (i32.add (i32.const -430483447)) - (i32.add (i32.const -146295740)) - (i32.add (i32.const 1111390306)) - (i32.add (i32.const -98740794)) - (i32.add (i32.const 1559545683)) - (i32.add (i32.const -1615925332)) - (i32.add (i32.const -56972511)) - (i32.add (i32.const 25260206)) - (i32.add (i32.const -1697039047)) - (i32.add (i32.const 227199727)) - (i32.add (i32.const 1213021708)) - (i32.add (i32.const 2089166213)) - (i32.add (i32.const -558863915)) - (i32.add (i32.const -1883558054)) - (i32.add (i32.const 588433727)) - (i32.add (i32.const -1386203344)) - (i32.add (i32.const -1662436940)) - (i32.add (i32.const -1626428999)) - (i32.add (i32.const 554670099)) - (i32.add (i32.const -1806364619)) - (i32.add (i32.const -744116734)) - (i32.add (i32.const 664646617)) - (i32.add (i32.const -965655345)) - (i32.add (i32.const -653090050)) - (i32.add (i32.const -707130837)) - (i32.add (i32.const 2097603549)) - (i32.add (i32.const -1079261395)) - (i32.add (i32.const -170747913)) - (i32.add (i32.const -814948230)) - (i32.add (i32.const -977310041)) - (i32.add (i32.const 66794862)) - (i32.add (i32.const 1647558793)) - (i32.add (i32.const -485136782)) - (i32.add (i32.const 2051193717)) - (i32.add (i32.const -1958610116)) - (i32.add (i32.const 1554729958)) - (i32.add (i32.const -1905718668)) - (i32.add (i32.const -199978911)) - (i32.add (i32.const 475445466)) - (i32.add (i32.const 455614883)) - (i32.add (i32.const -914328337)) - (i32.add (i32.const -90571459)) - (i32.add (i32.const 253785028)) - (i32.add (i32.const 1893432588)) - (i32.add (i32.const -2047214744)) - (i32.add (i32.const 166224903)) - (i32.add (i32.const 670063160)) - (i32.add (i32.const -524109149)) - (i32.add (i32.const -303398422)) - (i32.add (i32.const 1919806028)) - (i32.add (i32.const 950065151)) - (i32.add (i32.const 370964348)) - (i32.add (i32.const 794081814)) - (i32.add (i32.const 910504737)) - (i32.add (i32.const -1528628307)) - (i32.add (i32.const -1122397306)) - (i32.add (i32.const -873277204)) - (i32.add (i32.const 1072337723)) - (i32.add (i32.const -425108082)) - (i32.add (i32.const 1808094170)) - (i32.add (i32.const -100676515)) - (i32.add (i32.const 1702872922)) - (i32.add (i32.const 312667027)) - (i32.add (i32.const 1857659925)) - (i32.add (i32.const -419403852)) - (i32.add (i32.const -1672455506)) - (i32.add (i32.const -1539057761)) - (i32.add (i32.const -677222902)) - (i32.add (i32.const -466894553)) - (i32.add (i32.const 1878887358)) - (i32.add (i32.const 1496674214)) - (i32.add (i32.const 2118108303)) - (i32.add (i32.const 1783024207)) - (i32.add (i32.const 1145902731)) - (i32.add (i32.const -597254308)) - (i32.add (i32.const -1123224215)) - (i32.add (i32.const -1605967537)) - (i32.add (i32.const 381431449)) - (i32.add (i32.const 2074792741)) - (i32.add (i32.const 1599382134)) - (i32.add (i32.const 1780054758)) - (i32.add (i32.const 838526325)) - (i32.add (i32.const 1676612118)) - (i32.add (i32.const 951811636)) - (i32.add (i32.const -506300007)) - (i32.add (i32.const -474641329)) - (i32.add (i32.const 167439438)) - (i32.add (i32.const -297483005)) - (i32.add (i32.const -1764765159)) - (i32.add (i32.const -418505275)) - (i32.add (i32.const 161633035)) - (i32.add (i32.const -1060590407)) - (i32.add (i32.const 491854834)) - (i32.add (i32.const -253545447)) - (i32.add (i32.const 1511826795)) - (i32.add (i32.const -1072474179)) - (i32.add (i32.const -1571474747)) - (i32.add (i32.const 184455249)) - (i32.add (i32.const 2045754395)) - (i32.add (i32.const 1120754844)) - (i32.add (i32.const -393619498)) - (i32.add (i32.const 904789701)) - (i32.add (i32.const 1196343073)) - (i32.add (i32.const -1927073293)) - (i32.add (i32.const -1292263533)) - (i32.add (i32.const -1516135586)) - (i32.add (i32.const -325532848)) - (i32.add (i32.const 1313502772)) - (i32.add (i32.const -818756692)) - (i32.add (i32.const 265997675)) - (i32.add (i32.const 2036311312)) - (i32.add (i32.const -127541114)) - (i32.add (i32.const -1177377947)) - (i32.add (i32.const -1440922182)) - (i32.add (i32.const -1442196203)) - (i32.add (i32.const -1124416180)) - (i32.add (i32.const -525763953)) - (i32.add (i32.const -876377516)) - (i32.add (i32.const 2087387362)) - (i32.add (i32.const 1440333889)) - (i32.add (i32.const -645249406)) - (i32.add (i32.const -188445105)) - (i32.add (i32.const -1782940024)) - (i32.add (i32.const -2007055878)) - (i32.add (i32.const 455401408)) - (i32.add (i32.const -1310993743)) - (i32.add (i32.const 1885553470)) - (i32.add (i32.const -2022326935)) - (i32.add (i32.const 1038358194)) - (i32.add (i32.const -1331893305)) - (i32.add (i32.const 261440412)) - (i32.add (i32.const 602250813)) - (i32.add (i32.const 17777563)) - (i32.add (i32.const -128077233)) - (i32.add (i32.const -1750371837)) - (i32.add (i32.const 1695709474)) - (i32.add (i32.const -836842452)) - (i32.add (i32.const 995620503)) - (i32.add (i32.const 492943596)) - (i32.add (i32.const -729440216)) - (i32.add (i32.const -2060395423)) - (i32.add (i32.const 1430186420)) - (i32.add (i32.const 539748809)) - (i32.add (i32.const -1582319285)) - (i32.add (i32.const 1685424990)) - (i32.add (i32.const 268536177)) - (i32.add (i32.const -1662319469)) - (i32.add (i32.const -266088111)) - (i32.add (i32.const 330063519)) - (i32.add (i32.const 1065799129)) - (i32.add (i32.const -972346943)) - (i32.add (i32.const 1609172140)) - (i32.add (i32.const 2014069642)) - (i32.add (i32.const -1821307414)) - (i32.add (i32.const -1260525519)) - (i32.add (i32.const -610149888)) - (i32.add (i32.const -1548189130)) - (i32.add (i32.const 764214247)) - (i32.add (i32.const 1351158007)) - (i32.add (i32.const 845133644)) - (i32.add (i32.const 301410755)) - (i32.add (i32.const -1047353559)) - (i32.add (i32.const 781736781)) - (i32.add (i32.const -1172543372)) - (i32.add (i32.const -406188769)) - (i32.add (i32.const 1562697705)) - (i32.add (i32.const -927699296)) - (i32.add (i32.const 1115684415)) - (i32.add (i32.const -103393733)) - (i32.add (i32.const -729090944)) - (i32.add (i32.const -1677876572)) - (i32.add (i32.const 1481308737)) - (i32.add (i32.const -932555658)) - (i32.add (i32.const -1373151506)) - (i32.add (i32.const 36864980)) - (i32.add (i32.const 1469028068)) - (i32.add (i32.const -888768229)) - (i32.add (i32.const -535015148)) - (i32.add (i32.const 826440723)) - (i32.add (i32.const -1635071746)) - (i32.add (i32.const -1402420784)) - (i32.add (i32.const 1885383268)) - (i32.add (i32.const -774245418)) - (i32.add (i32.const 1332981381)) - (i32.add (i32.const -1568689139)) - (i32.add (i32.const 2125760969)) - (i32.add (i32.const 1340673653)) - (i32.add (i32.const 588217093)) - (i32.add (i32.const 117801715)) - (i32.add (i32.const -820218398)) - (i32.add (i32.const -381432578)) - (i32.add (i32.const -1946008451)) - (i32.add (i32.const -582086489)) - (i32.add (i32.const -1349732768)) - (i32.add (i32.const -1490696645)) - (i32.add (i32.const 162283483)) - (i32.add (i32.const -840622213)) - (i32.add (i32.const -478866812)) - (i32.add (i32.const 1161102569)) - (i32.add (i32.const 1278327093)) - (i32.add (i32.const -905678720)) - (i32.add (i32.const 1750614623)) - (i32.add (i32.const 1902440277)) - (i32.add (i32.const 1553486349)) - (i32.add (i32.const -1106147463)) - (i32.add (i32.const -1808554925)) - (i32.add (i32.const 1601847806)) - (i32.add (i32.const -513360479)) - (i32.add (i32.const -2080490003)) - (i32.add (i32.const 447889151)) - (i32.add (i32.const 1985634044)) - (i32.add (i32.const 1027369940)) - (i32.add (i32.const -64942544)) - (i32.add (i32.const -1127865587)) - (i32.add (i32.const -437459184)) - (i32.add (i32.const -907918883)) - (i32.add (i32.const -21460725)) - (i32.add (i32.const -1130402586)) - (i32.add (i32.const -1468791365)) - (i32.add (i32.const -107137589)) - (i32.add (i32.const -131755140)) - (i32.add (i32.const -43711217)) - (i32.add (i32.const -945421145)) - (i32.add (i32.const -1008162953)) - (i32.add (i32.const -1672218959)) - (i32.add (i32.const -609231425)) - (i32.add (i32.const 2045178369)) - (i32.add (i32.const 1084940902)) - (i32.add (i32.const -254953975)) - (i32.add (i32.const 792149965)) - (i32.add (i32.const -629656040)) - (i32.add (i32.const 1510339208)) - (i32.add (i32.const 1687749917)) - (i32.add (i32.const 122734954)) - (i32.add (i32.const -1443983783)) - (i32.add (i32.const -661033813)) - (i32.add (i32.const -503084589)) - (i32.add (i32.const 1568085581)) - (i32.add (i32.const 1785052290)) - (i32.add (i32.const -432304469)) - (i32.add (i32.const -172275960)) - (i32.add (i32.const -190638676)) - (i32.add (i32.const -600688750)) - (i32.add (i32.const -1426341189)) - (i32.add (i32.const 17499632)) - (i32.add (i32.const -1129840480)) - (i32.add (i32.const 256039429)) - (i32.add (i32.const -868428211)) - (i32.add (i32.const 1705758294)) - (i32.add (i32.const -1197359934)) - (i32.add (i32.const -528333647)) - (i32.add (i32.const 1651979962)) - (i32.add (i32.const 676308761)) - (i32.add (i32.const -592137263)) - (i32.add (i32.const -1331571332)) - (i32.add (i32.const 1852491068)) - (i32.add (i32.const 534337866)) - (i32.add (i32.const -2134044373)) - (i32.add (i32.const -950901744)) - (i32.add (i32.const 1262467476)) - (i32.add (i32.const 455441683)) - (i32.add (i32.const -2051269958)) - (i32.add (i32.const 1372490017)) - (i32.add (i32.const 1846747414)) - (i32.add (i32.const 1429001355)) - (i32.add (i32.const 1327576065)) - (i32.add (i32.const 645207108)) - (i32.add (i32.const 1051212023)) - (i32.add (i32.const -1620432970)) - (i32.add (i32.const 284531021)) - (i32.add (i32.const -1846024034)) - (i32.add (i32.const -855337249)) - (i32.add (i32.const -309059345)) - (i32.add (i32.const 2140275247)) - (i32.add (i32.const 1129118192)) - (i32.add (i32.const 1660404308)) - (i32.add (i32.const 1627122361)) - (i32.add (i32.const 1064714045)) - (i32.add (i32.const 891274348)) - (i32.add (i32.const -23954275)) - (i32.add (i32.const -484429652)) - (i32.add (i32.const -2103998013)) - (i32.add (i32.const 1013060196)) - (i32.add (i32.const -1064106053)) - (i32.add (i32.const 2091544006)) - (i32.add (i32.const 744168637)) - (i32.add (i32.const 2096565898)) - (i32.add (i32.const 7109113)) - (i32.add (i32.const 664285882)) - (i32.add (i32.const 1718419149)) - (i32.add (i32.const -1867977691)) - (i32.add (i32.const -1985722199)) - (i32.add (i32.const -1980149995)) - (i32.add (i32.const 1132652472)) - (i32.add (i32.const 1628138510)) - (i32.add (i32.const 1076389768)) - (i32.add (i32.const 488579593)) - (i32.add (i32.const 481599559)) - (i32.add (i32.const -687717053)) - (i32.add (i32.const -471516972)) - (i32.add (i32.const -1817092735)) - (i32.add (i32.const 1188681205)) - (i32.add (i32.const 1833413845)) - (i32.add (i32.const 1502198086)) - (i32.add (i32.const 764167424)) - (i32.add (i32.const 302628189)) - (i32.add (i32.const 1374194474)) - (i32.add (i32.const -1239991239)) - (i32.add (i32.const 1732270485)) - (i32.add (i32.const -574213901)) - (i32.add (i32.const 1646379777)) - (i32.add (i32.const -1296135737)) - (i32.add (i32.const 2048204005)) - (i32.add (i32.const -1592235488)) - (i32.add (i32.const 2047438679)) - (i32.add (i32.const 891601724)) - (i32.add (i32.const -1555936544)) - (i32.add (i32.const -1115954962)) - (i32.add (i32.const -2053663143)) - (i32.add (i32.const -1394818742)) - (i32.add (i32.const 1660952996)) - (i32.add (i32.const -1071951751)) - (i32.add (i32.const 1092351885)) - (i32.add (i32.const 549154408)) - (i32.add (i32.const 1383152628)) - (i32.add (i32.const -875341154)) - (i32.add (i32.const 2054128070)) - (i32.add (i32.const 392491169)) - (i32.add (i32.const 157367007)) - (i32.add (i32.const 1706669352)) - (i32.add (i32.const -894275511)) - (i32.add (i32.const -1127795288)) - (i32.add (i32.const 598276035)) - (i32.add (i32.const 1527429062)) - (i32.add (i32.const 1673347673)) - (i32.add (i32.const -1420977840)) - (i32.add (i32.const 891478488)) - (i32.add (i32.const -568784133)) - (i32.add (i32.const -1102183156)) - (i32.add (i32.const -1021531921)) - (i32.add (i32.const 752878007)) - (i32.add (i32.const 1476770663)) - (i32.add (i32.const 1147702232)) - (i32.add (i32.const 110171381)) - (i32.add (i32.const 519532321)) - (i32.add (i32.const 1424738250)) - (i32.add (i32.const 80146405)) - (i32.add (i32.const -1851761720)) - (i32.add (i32.const -1405196606)) - (i32.add (i32.const 817844702)) - (i32.add (i32.const 1285715467)) - (i32.add (i32.const 968918798)) - (i32.add (i32.const -1530690147)) - (i32.add (i32.const -2062793272)) - (i32.add (i32.const 1934809265)) - (i32.add (i32.const 1590072838)) - (i32.add (i32.const -1954137913)) - (i32.add (i32.const 1538011443)) - (i32.add (i32.const 1498179707)) - (i32.add (i32.const 718624898)) - (i32.add (i32.const 1030569130)) - (i32.add (i32.const -1721459636)) - (i32.add (i32.const -2130073259)) - (i32.add (i32.const -200778007)) - (i32.add (i32.const 1259772317)) - (i32.add (i32.const -213254016)) - (i32.add (i32.const -1738943802)) - (i32.add (i32.const 1442609215)) - (i32.add (i32.const 958661534)) - (i32.add (i32.const -2112831309)) - (i32.add (i32.const 1636466628)) - (i32.add (i32.const 13568168)) - (i32.add (i32.const -866812754)) - (i32.add (i32.const -1638780269)) - (i32.add (i32.const -1048187903)) - (i32.add (i32.const -2024688725)) - (i32.add (i32.const 1529978856)) - (i32.add (i32.const 1062134114)) - (i32.add (i32.const 1374255708)) - (i32.add (i32.const -1443427358)) - (i32.add (i32.const -1356370844)) - (i32.add (i32.const 1443877504)) - (i32.add (i32.const -1329812836)) - (i32.add (i32.const -291375259)) - (i32.add (i32.const 1798221874)) - (i32.add (i32.const 786502660)) - (i32.add (i32.const -196591051)) - (i32.add (i32.const 657829402)) - (i32.add (i32.const 1089674059)) - (i32.add (i32.const -570830897)) - (i32.add (i32.const -1509793384)) - (i32.add (i32.const 1197322575)) - (i32.add (i32.const 509337064)) - (i32.add (i32.const 1909012062)) - (i32.add (i32.const -1545724277)) - (i32.add (i32.const 1925973029)) - (i32.add (i32.const 1299262008)) - (i32.add (i32.const -930938255)) - (i32.add (i32.const -2067439492)) - (i32.add (i32.const -658436765)) - (i32.add (i32.const 2006349185)) - (i32.add (i32.const 896380597)) - (i32.add (i32.const 2015351955)) - (i32.add (i32.const -286463547)) - (i32.add (i32.const -526727870)) - (i32.add (i32.const 1156311090)) - (i32.add (i32.const -1594856376)) - (i32.add (i32.const -6357356)) - (i32.add (i32.const -229192725)) - (i32.add (i32.const 2115557395)) - (i32.add (i32.const -1838598646)) - (i32.add (i32.const -922866823)) - (i32.add (i32.const -2107878782)) - (i32.add (i32.const 2075867151)) - (i32.add (i32.const -344327182)) - (i32.add (i32.const -2146215541)) - (i32.add (i32.const -583222202)) - (i32.add (i32.const 1096172413)) - (i32.add (i32.const -1806591814)) - (i32.add (i32.const 1536165679)) - (i32.add (i32.const -912216868)) - (i32.add (i32.const -406776431)) - (i32.add (i32.const -670050979)) - (i32.add (i32.const 318534917)) - (i32.add (i32.const 613032123)) - (i32.add (i32.const 1811789385)) - (i32.add (i32.const -713407029)) - (i32.add (i32.const -42075708)) - (i32.add (i32.const -666806413)) - (i32.add (i32.const -1898824327)) - (i32.add (i32.const -755748510)) - (i32.add (i32.const 566865651)) - (i32.add (i32.const 901003814)) - (i32.add (i32.const -1296980174)) - (i32.add (i32.const -1060893981)) - (i32.add (i32.const 1701735594)) - (i32.add (i32.const 1234494608)) - (i32.add (i32.const -1904219027)) - (i32.add (i32.const -2074208179)) - (i32.add (i32.const -103727736)) - (i32.add (i32.const 52627124)) - (i32.add (i32.const -2097221176)) - (i32.add (i32.const 809956909)) - (i32.add (i32.const -512273995)) - (i32.add (i32.const -907876897)) - (i32.add (i32.const -217897401)) - (i32.add (i32.const 115424770)) - (i32.add (i32.const 1463546062)) - (i32.add (i32.const 761771788)) - (i32.add (i32.const -1415347071)) - (i32.add (i32.const 504659090)) - (i32.add (i32.const -1328288275)) - (i32.add (i32.const 917399547)) - (i32.add (i32.const -1413524610)) - (i32.add (i32.const -1961605134)) - (i32.add (i32.const -471067801)) - (i32.add (i32.const 1784290695)) - (i32.add (i32.const 1100726633)) - (i32.add (i32.const 1418575125)) - (i32.add (i32.const 206334073)) - (i32.add (i32.const 822023231)) - (i32.add (i32.const 1326945805)) - (i32.add (i32.const -671168121)) - (i32.add (i32.const -352715340)) - (i32.add (i32.const 1133060222)) - (i32.add (i32.const 247391636)) - (i32.add (i32.const 2141216026)) - (i32.add (i32.const -1216426213)) - (i32.add (i32.const -1742155558)) - (i32.add (i32.const 891584556)) - (i32.add (i32.const 1874320253)) - (i32.add (i32.const 14765934)) - (i32.add (i32.const 1355931139)) - (i32.add (i32.const 416484665)) - (i32.add (i32.const -1590992214)) - (i32.add (i32.const 1615755943)) - (i32.add (i32.const 1429191879)) - (i32.add (i32.const 1902925890)) - (i32.add (i32.const 673083321)) - (i32.add (i32.const -706640179)) - (i32.add (i32.const -338877405)) - (i32.add (i32.const -655777894)) - (i32.add (i32.const 989351015)) - (i32.add (i32.const -2029917819)) - (i32.add (i32.const 937565901)) - (i32.add (i32.const -258846565)) - (i32.add (i32.const -1841325504)) - (i32.add (i32.const 1308090874)) - (i32.add (i32.const 1236368272)) - (i32.add (i32.const -1605330712)) - (i32.add (i32.const -98503656)) - (i32.add (i32.const 4542997)) - (i32.add (i32.const 1584032013)) - (i32.add (i32.const -751885613)) - (i32.add (i32.const -1898412804)) - (i32.add (i32.const -1875413565)) - (i32.add (i32.const -788059595)) - (i32.add (i32.const -957618818)) - (i32.add (i32.const 1213024681)) - (i32.add (i32.const 838988591)) - (i32.add (i32.const 1544574024)) - (i32.add (i32.const 321878716)) - (i32.add (i32.const 1562483625)) - (i32.add (i32.const -742356454)) - (i32.add (i32.const 2014572928)) - (i32.add (i32.const -1979147234)) - (i32.add (i32.const -542525352)) - (i32.add (i32.const -1404179632)) - (i32.add (i32.const -1774689235)) - (i32.add (i32.const 688636721)) - (i32.add (i32.const 530719741)) - (i32.add (i32.const 551237628)) - (i32.add (i32.const 499795904)) - (i32.add (i32.const 762768124)) - (i32.add (i32.const 11173027)) - (i32.add (i32.const -597392552)) - (i32.add (i32.const -233204281)) - (i32.add (i32.const 1679848621)) - (i32.add (i32.const 314582531)) - (i32.add (i32.const 198442577)) - (i32.add (i32.const -1846647142)) - (i32.add (i32.const -286388764)) - (i32.add (i32.const -642284897)) - (i32.add (i32.const -681071111)) - (i32.add (i32.const -1347903555)) - (i32.add (i32.const -1267234449)) - (i32.add (i32.const 1114820245)) - (i32.add (i32.const 1461008798)) - (i32.add (i32.const 791842627)) - (i32.add (i32.const -704697242)) - (i32.add (i32.const 1025384695)) - (i32.add (i32.const 1495783694)) - (i32.add (i32.const -1099641124)) - (i32.add (i32.const 51883939)) - (i32.add (i32.const -1497418612)) - (i32.add (i32.const -289500896)) - (i32.add (i32.const 1150890505)) - (i32.add (i32.const -1904561989)) - (i32.add (i32.const -305059685)) - (i32.add (i32.const -353545701)) - (i32.add (i32.const -1654046774)) - (i32.add (i32.const -498294672)) - (i32.add (i32.const 427918392)) - (i32.add (i32.const -1570038595)) - (i32.add (i32.const 1761528087)) - (i32.add (i32.const 1937519249)) - (i32.add (i32.const 319531675)) - (i32.add (i32.const 698755870)) - (i32.add (i32.const -1782374147)) - (i32.add (i32.const -1579318011)) - (i32.add (i32.const -2013082339)) - (i32.add (i32.const -772214569)) - (i32.add (i32.const 432572970)) - (i32.add (i32.const 456523832)) - (i32.add (i32.const 433466090)) - (i32.add (i32.const 1883591620)) - (i32.add (i32.const -1396784901)) - (i32.add (i32.const -760424031)) - (i32.add (i32.const 26414890)) - (i32.add (i32.const 1272345405)) - (i32.add (i32.const 117782259)) - (i32.add (i32.const -498115990)) - (i32.add (i32.const 2094048489)) - (i32.add (i32.const 2081916110)) - (i32.add (i32.const -723885610)) - (i32.add (i32.const 115555421)) - (i32.add (i32.const 1833223226)) - (i32.add (i32.const -1380455133)) - (i32.add (i32.const 1615904912)) - (i32.add (i32.const 1259501336)) - (i32.add (i32.const 320012264)) - (i32.add (i32.const 662004667)) - (i32.add (i32.const 76686155)) - (i32.add (i32.const -1459923636)) - (i32.add (i32.const 122782350)) - (i32.add (i32.const -1754486929)) - (i32.add (i32.const -843790342)) - (i32.add (i32.const 2132351479)) - (i32.add (i32.const -910393143)) - (i32.add (i32.const -1477571983)) - (i32.add (i32.const -2145011939)) - (i32.add (i32.const -110442410)) - (i32.add (i32.const -916981067)) - (i32.add (i32.const -1465834627)) - (i32.add (i32.const 1863434715)) - (i32.add (i32.const 1883552046)) - (i32.add (i32.const 1508451699)) - (i32.add (i32.const -758776523)) - (i32.add (i32.const -1635063334)) - (i32.add (i32.const 201903549)) - (i32.add (i32.const 1344592925)) - (i32.add (i32.const 697810023)) - (i32.add (i32.const -727661006)) - (i32.add (i32.const 1864638969)) - (i32.add (i32.const 784672004)) - (i32.add (i32.const -1487812580)) - (i32.add (i32.const -374835112)) - (i32.add (i32.const -1733280434)) - (i32.add (i32.const 1608088765)) - (i32.add (i32.const -541570688)) - (i32.add (i32.const -2072357204)) - (i32.add (i32.const -2034982275)) - (i32.add (i32.const 924066425)) - (i32.add (i32.const -1893264735)) - (i32.add (i32.const 81180113)) - (i32.add (i32.const 848207961)) - (i32.add (i32.const -129461196)) - (i32.add (i32.const -544672353)) - (i32.add (i32.const 366550092)) - (i32.add (i32.const 1007724694)) - (i32.add (i32.const -1574433097)) - (i32.add (i32.const 1542731386)) - (i32.add (i32.const 385391919)) - (i32.add (i32.const 301413571)) - (i32.add (i32.const -363960537)) - (i32.add (i32.const -842475052)) - (i32.add (i32.const -1855954689)) - (i32.add (i32.const 1706829265)) - (i32.add (i32.const -546315867)) - (i32.add (i32.const 1887147054)) - (i32.add (i32.const -1040821747)) - (i32.add (i32.const 1247933037)) - (i32.add (i32.const 995271097)) - (i32.add (i32.const 1591736146)) - (i32.add (i32.const 248668443)) - (i32.add (i32.const 1519748445)) - (i32.add (i32.const 1157982987)) - (i32.add (i32.const -452499237)) - (i32.add (i32.const -34038197)) - (i32.add (i32.const -2067632111)) - (i32.add (i32.const -952650961)) - (i32.add (i32.const 1962659414)) - (i32.add (i32.const -1124158009)) - (i32.add (i32.const -1336409789)) - (i32.add (i32.const -1139255725)) - (i32.add (i32.const 284356888)) - (i32.add (i32.const 429996113)) - (i32.add (i32.const -882462510)) - (i32.add (i32.const -1691321874)) - (i32.add (i32.const 983235553)) - (i32.add (i32.const -1100902898)) - (i32.add (i32.const 607570755)) - (i32.add (i32.const 82767972)) - (i32.add (i32.const 1007829366)) - (i32.add (i32.const 1892420772)) - (i32.add (i32.const -1020185698)) - (i32.add (i32.const 2108161951)) - (i32.add (i32.const -1281178239)) - (i32.add (i32.const 260216117)) - (i32.add (i32.const 470030397)) - (i32.add (i32.const -1155777847)) - (i32.add (i32.const 1405783265)) - (i32.add (i32.const -1260368889)) - (i32.add (i32.const -1914219552)) - (i32.add (i32.const -1353050151)) - (i32.add (i32.const 1831236115)) - (i32.add (i32.const -87461917)) - (i32.add (i32.const 1269877356)) - (i32.add (i32.const 1641889643)) - (i32.add (i32.const 690398861)) - (i32.add (i32.const -1999293567)) - (i32.add (i32.const -1709724671)) - (i32.add (i32.const 1846158473)) - (i32.add (i32.const 736128169)) - (i32.add (i32.const 518609180)) - (i32.add (i32.const 1111661837)) - (i32.add (i32.const -684700650)) - (i32.add (i32.const 398826418)) - (i32.add (i32.const -111349885)) - (i32.add (i32.const -950120744)) - (i32.add (i32.const 171349496)) - (i32.add (i32.const 349029856)) - (i32.add (i32.const -1029283220)) - (i32.add (i32.const 220463495)) - (i32.add (i32.const 1511679363)) - (i32.add (i32.const 356536100)) - (i32.add (i32.const 355610128)) - (i32.add (i32.const -1553442001)) - (i32.add (i32.const 659784102)) - (i32.add (i32.const -61305865)) - (i32.add (i32.const 599206676)) - (i32.add (i32.const -206855195)) - (i32.add (i32.const -1128208132)) - (i32.add (i32.const -1596465613)) - (i32.add (i32.const 16716181)) - (i32.add (i32.const -129398040)) - (i32.add (i32.const -281340628)) - (i32.add (i32.const 1526270916)) - (i32.add (i32.const 1577368282)) - (i32.add (i32.const 419058655)) - (i32.add (i32.const 952686898)) - (i32.add (i32.const -1634994238)) - (i32.add (i32.const -1460640974)) - (i32.add (i32.const -184500754)) - (i32.add (i32.const -503529931)) - (i32.add (i32.const 1246622569)) - (i32.add (i32.const 656933582)) - (i32.add (i32.const -1993343497)) - (i32.add (i32.const 119351240)) - (i32.add (i32.const 1335977373)) - (i32.add (i32.const 1788325116)) - (i32.add (i32.const -1345804303)) - (i32.add (i32.const -1131893881)) - (i32.add (i32.const -374613945)) - (i32.add (i32.const -294400184)) - (i32.add (i32.const 789368195)) - (i32.add (i32.const -1585107513)) - (i32.add (i32.const -25747768)) - (i32.add (i32.const -5642696)) - (i32.add (i32.const 1445421491)) - (i32.add (i32.const -489595085)) - (i32.add (i32.const -1686075932)) - (i32.add (i32.const -1164278237)) - (i32.add (i32.const -1762845883)) - (i32.add (i32.const -437753725)) - (i32.add (i32.const 926074461)) - (i32.add (i32.const 808041911)) - (i32.add (i32.const -1353533719)) - (i32.add (i32.const 596186388)) - (i32.add (i32.const -2588162)) - (i32.add (i32.const 1370374787)) - (i32.add (i32.const -1505373640)) - (i32.add (i32.const 1942925545)) - (i32.add (i32.const 1034207661)) - (i32.add (i32.const -165372265)) - (i32.add (i32.const -1213531699)) - (i32.add (i32.const -1240511598)) - (i32.add (i32.const -848197744)) - (i32.add (i32.const -1714020209)) - (i32.add (i32.const 1947120699)) - (i32.add (i32.const 1758602021)) - (i32.add (i32.const -1918260767)) - (i32.add (i32.const 998938396)) - (i32.add (i32.const 1254589974)) - (i32.add (i32.const -178952500)) - (i32.add (i32.const 316397779)) - (i32.add (i32.const -1692453264)) - (i32.add (i32.const 977715746)) - (i32.add (i32.const -452323403)) - (i32.add (i32.const -839583440)) - (i32.add (i32.const 1321863530)) - (i32.add (i32.const 1225360060)) - (i32.add (i32.const -1903812193)) - (i32.add (i32.const -419143627)) - (i32.add (i32.const -67094479)) - (i32.add (i32.const 825705523)) - (i32.add (i32.const 1964044922)) - (i32.add (i32.const -628750322)) - (i32.add (i32.const 182918661)) - (i32.add (i32.const 688470569)) - (i32.add (i32.const -1937443881)) - (i32.add (i32.const -1023298390)) - (i32.add (i32.const 268387768)) - (i32.add (i32.const -968104398)) - (i32.add (i32.const 1260751238)) - (i32.add (i32.const 1364388880)) - (i32.add (i32.const 2068855580)) - (i32.add (i32.const -86496943)) - (i32.add (i32.const 690734787)) - (i32.add (i32.const -1292477431)) - (i32.add (i32.const -47123037)) - (i32.add (i32.const 1051242195)) - (i32.add (i32.const 2116079431)) - (i32.add (i32.const 362106953)) - (i32.add (i32.const -655288251)) - (i32.add (i32.const -19859192)) - (i32.add (i32.const 1672788396)) - (i32.add (i32.const -658678033)) - (i32.add (i32.const -1760121620)) - (i32.add (i32.const 2003760423)) - (i32.add (i32.const 561435710)) - (i32.add (i32.const -1656040294)) - (i32.add (i32.const 745130404)) - (i32.add (i32.const 1356704034)) - (i32.add (i32.const -1332519612)) - (i32.add (i32.const -178418001)) - (i32.add (i32.const -1219127954)) - (i32.add (i32.const -1820512308)) - (i32.add (i32.const -611388758)) - (i32.add (i32.const 1081934621)) - (i32.add (i32.const 185373836)) - (i32.add (i32.const 1807905736)) - (i32.add (i32.const 1630292363)) - (i32.add (i32.const 1639615244)) - (i32.add (i32.const -1992213874)) - (i32.add (i32.const -451344425)) - (i32.add (i32.const 1214668584)) - (i32.add (i32.const 647319908)) - (i32.add (i32.const -127115834)) - (i32.add (i32.const 925856220)) - (i32.add (i32.const -1484266910)) - (i32.add (i32.const -150381923)) - (i32.add (i32.const 1336022571)) - (i32.add (i32.const -1438181547)) - (i32.add (i32.const -1598817135)) - (i32.add (i32.const -1634358335)) - (i32.add (i32.const 257781661)) - (i32.add (i32.const 1311953282)) - (i32.add (i32.const 872460883)) - (i32.add (i32.const 658999241)) - (i32.add (i32.const 806933974)) - (i32.add (i32.const 798023055)) - (i32.add (i32.const 966032325)) - (i32.add (i32.const -37982609)) - (i32.add (i32.const -1766173383)) - (i32.add (i32.const -215468286)) - (i32.add (i32.const 335543428)) - (i32.add (i32.const -1279624437)) - (i32.add (i32.const 24202546)) - (i32.add (i32.const 172831433)) - (i32.add (i32.const 15921299)) - (i32.add (i32.const -896284097)) - (i32.add (i32.const -1692094522)) - (i32.add (i32.const 1092561399)) - (i32.add (i32.const -825556796)) - (i32.add (i32.const 1095790497)) - (i32.add (i32.const 349955026)) - (i32.add (i32.const 228780543)) - (i32.add (i32.const 877446305)) - (i32.add (i32.const -871271251)) - (i32.add (i32.const -2067781751)) - (i32.add (i32.const 1147596063)) - (i32.add (i32.const -2044096815)) - (i32.add (i32.const 10709674)) - (i32.add (i32.const -454023666)) - (i32.add (i32.const -1582726851)) - (i32.add (i32.const -387243279)) - (i32.add (i32.const -1019886953)) - (i32.add (i32.const 417507569)) - (i32.add (i32.const 1452112578)) - (i32.add (i32.const 732174867)) - (i32.add (i32.const -1444326685)) - (i32.add (i32.const -92393387)) - (i32.add (i32.const 2082146897)) - (i32.add (i32.const -15649456)) - (i32.add (i32.const 962808477)) - (i32.add (i32.const -380703316)) - (i32.add (i32.const 1327891786)) - (i32.add (i32.const -765670363)) - (i32.add (i32.const -851454620)) - (i32.add (i32.const 1741990045)) - (i32.add (i32.const 1723135481)) - (i32.add (i32.const -278196467)) - (i32.add (i32.const -409079590)) - (i32.add (i32.const -1817833536)) - (i32.add (i32.const -2121993015)) - (i32.add (i32.const 2036219079)) - (i32.add (i32.const 651047322)) - (i32.add (i32.const 279590688)) - (i32.add (i32.const 1451205050)) - (i32.add (i32.const -1728943017)) - (i32.add (i32.const 1727265525)) - (i32.add (i32.const 17819991)) - (i32.add (i32.const -341845990)) - (i32.add (i32.const -1786728038)) - (i32.add (i32.const -1785449044)) - (i32.add (i32.const -1164572310)) - (i32.add (i32.const -1145684288)) - (i32.add (i32.const -902265314)) - (i32.add (i32.const -1538026195)) - (i32.add (i32.const 1077173950)) - (i32.add (i32.const 1595249584)) - (i32.add (i32.const 507740432)) - (i32.add (i32.const -683623477)) - (i32.add (i32.const -632394702)) - (i32.add (i32.const -1889441628)) - (i32.add (i32.const -1416183897)) - (i32.add (i32.const 1874549888)) - (i32.add (i32.const 1202929408)) - (i32.add (i32.const -1905477819)) - (i32.add (i32.const -1002423584)) - (i32.add (i32.const 1786809853)) - (i32.add (i32.const -1053833188)) - (i32.add (i32.const -1655797922)) - (i32.add (i32.const 899360231)) - (i32.add (i32.const -1881568073)) - (i32.add (i32.const -1656437212)) - (i32.add (i32.const -1767978879)) - (i32.add (i32.const 2002199271)) - (i32.add (i32.const -908792936)) - (i32.add (i32.const -1791175367)) - (i32.add (i32.const 1700588196)) - (i32.add (i32.const -1807165200)) - (i32.add (i32.const 1308707473)) - (i32.add (i32.const 570072538)) - (i32.add (i32.const -220988691)) - (i32.add (i32.const 1666643115)) - (i32.add (i32.const -438318658)) - (i32.add (i32.const 1450048650)) - (i32.add (i32.const -1414142237)) - (i32.add (i32.const -1775407164)) - (i32.add (i32.const -1862900775)) - (i32.add (i32.const 1648502972)) - (i32.add (i32.const 39693334)) - (i32.add (i32.const 207145779)) - (i32.add (i32.const -2077158155)) - (i32.add (i32.const 1298589111)) - (i32.add (i32.const 560277224)) - (i32.add (i32.const 49467565)) - (i32.add (i32.const 1365441390)) - (i32.add (i32.const 1207497531)) - (i32.add (i32.const -1368257758)) - (i32.add (i32.const -1784615344)) - (i32.add (i32.const -1431159916)) - (i32.add (i32.const -327128926)) - (i32.add (i32.const -1248246229)) - (i32.add (i32.const -1956687848)) - (i32.add (i32.const -1477373391)) - (i32.add (i32.const 413197749)) - (i32.add (i32.const 1695771121)) - (i32.add (i32.const 1429569283)) - (i32.add (i32.const 1760063735)) - (i32.add (i32.const 77026107)) - (i32.add (i32.const 2021727632)) - (i32.add (i32.const -622628722)) - (i32.add (i32.const 14415033)) - (i32.add (i32.const 1931151479)) - (i32.add (i32.const 531627426)) - (i32.add (i32.const -1998421703)) - (i32.add (i32.const -1264373354)) - (i32.add (i32.const 119159534)) - (i32.add (i32.const -1937733521)) - (i32.add (i32.const -718399379)) - (i32.add (i32.const 342407213)) - (i32.add (i32.const 822753769)) - (i32.add (i32.const -1485248108)) - (i32.add (i32.const 1671672761)) - (i32.add (i32.const 372130365)) - (i32.add (i32.const -1744288753)) - (i32.add (i32.const 1785831939)) - (i32.add (i32.const 1745688159)) - (i32.add (i32.const -1938252766)) - (i32.add (i32.const 1846217906)) - (i32.add (i32.const 574975117)) - (i32.add (i32.const 1859273020)) - (i32.add (i32.const 82621895)) - (i32.add (i32.const 25517618)) - (i32.add (i32.const -1772067109)) - (i32.add (i32.const 1721035080)) - (i32.add (i32.const 616700356)) - (i32.add (i32.const -287353625)) - (i32.add (i32.const -327748053)) - (i32.add (i32.const -1426438834)) - (i32.add (i32.const -1027010842)) - (i32.add (i32.const -1389503736)) - (i32.add (i32.const -870056466)) - (i32.add (i32.const 82431507)) - (i32.add (i32.const 472164027)) - (i32.add (i32.const -1498520625)) - (i32.add (i32.const 1439127561)) - (i32.add (i32.const -1135846378)) - (i32.add (i32.const -873188852)) - (i32.add (i32.const 223578458)) - (i32.add (i32.const 32125290)) - (i32.add (i32.const -887175985)) - (i32.add (i32.const 1738084786)) - (i32.add (i32.const -1948516403)) - (i32.add (i32.const 305531536)) - (i32.add (i32.const -471861659)) - (i32.add (i32.const 1157133642)) - (i32.add (i32.const 1640004327)) - (i32.add (i32.const -319721567)) - (i32.add (i32.const 753669383)) - (i32.add (i32.const 945633095)) - (i32.add (i32.const 1842136037)) - (i32.add (i32.const -2141693102)) - (i32.add (i32.const -2109007389)) - (i32.add (i32.const -1359155899)) - (i32.add (i32.const 1394057730)) - (i32.add (i32.const -327169853)) - (i32.add (i32.const 1978061091)) - (i32.add (i32.const -1658041182)) - (i32.add (i32.const 1617622630)) - (i32.add (i32.const 915416649)) - (i32.add (i32.const 1780683115)) - (i32.add (i32.const 1172158322)) - (i32.add (i32.const -220234436)) - (i32.add (i32.const -2096524918)) - (i32.add (i32.const -459398093)) - (i32.add (i32.const 260147416)) - (i32.add (i32.const -304580379)) - (i32.add (i32.const -335211052)) - (i32.add (i32.const -507030601)) - (i32.add (i32.const 1841385146)) - (i32.add (i32.const 546134701)) - (i32.add (i32.const -1547951174)) - (i32.add (i32.const 1623249873)) - (i32.add (i32.const 1526307067)) - (i32.add (i32.const 100886524)) - (i32.add (i32.const -1904269911)) - (i32.add (i32.const -434383857)) - (i32.add (i32.const 108679089)) - (i32.add (i32.const 243646473)) - (i32.add (i32.const 185223042)) - (i32.add (i32.const -1362763877)) - (i32.add (i32.const 701705407)) - (i32.add (i32.const -152838334)) - (i32.add (i32.const 26238271)) - (i32.add (i32.const 1702661505)) - (i32.add (i32.const 1023600422)) - (i32.add (i32.const -1805991737)) - (i32.add (i32.const -591835595)) - (i32.add (i32.const 357394723)) - (i32.add (i32.const -59646481)) - (i32.add (i32.const 1585526406)) - (i32.add (i32.const -354246788)) - (i32.add (i32.const -1828647388)) - (i32.add (i32.const -1941122304)) - (i32.add (i32.const -1641199759)) - (i32.add (i32.const -1705027950)) - (i32.add (i32.const 1982069573)) - (i32.add (i32.const -760676431)) - (i32.add (i32.const -272702592)) - (i32.add (i32.const -548514477)) - (i32.add (i32.const -4518930)) - (i32.add (i32.const 1109914716)) - (i32.add (i32.const -974922908)) - (i32.add (i32.const 1505786882)) - (i32.add (i32.const 1108560631)) - (i32.add (i32.const -1498023092)) - (i32.add (i32.const 1216257370)) - (i32.add (i32.const -2035348868)) - (i32.add (i32.const -743093797)) - (i32.add (i32.const -2107661597)) - (i32.add (i32.const -886109868)) - (i32.add (i32.const -1790484613)) - (i32.add (i32.const 834041307)) - (i32.add (i32.const 875698229)) - (i32.add (i32.const -1659670014)) - (i32.add (i32.const 851037913)) - (i32.add (i32.const 260215662)) - (i32.add (i32.const -1632318271)) - (i32.add (i32.const -2036419041)) - (i32.add (i32.const -1982271611)) - (i32.add (i32.const -507509131)) - (i32.add (i32.const 1209283531)) - (i32.add (i32.const 358700374)) - (i32.add (i32.const -1101137184)) - (i32.add (i32.const -310604401)) - (i32.add (i32.const -128599801)) - (i32.add (i32.const 969683248)) - (i32.add (i32.const -551764626)) - (i32.add (i32.const -313672705)) - (i32.add (i32.const 401834688)) - (i32.add (i32.const -528686071)) - (i32.add (i32.const 625601226)) - (i32.add (i32.const -1063887977)) - (i32.add (i32.const -1009584081)) - (i32.add (i32.const 1364029345)) - (i32.add (i32.const -282120613)) - (i32.add (i32.const -302458038)) - (i32.add (i32.const -1973523868)) - (i32.add (i32.const 180192584)) - (i32.add (i32.const 1833369190)) - (i32.add (i32.const -1961334217)) - (i32.add (i32.const 741774906)) - (i32.add (i32.const -635684206)) - (i32.add (i32.const 333656429)) - (i32.add (i32.const -1252510899)) - (i32.add (i32.const -521088233)) - (i32.add (i32.const 194662626)) - (i32.add (i32.const 787651521)) - (i32.add (i32.const -1261951869)) - (i32.add (i32.const -673302248)) - (i32.add (i32.const 181281248)) - (i32.add (i32.const 149033311)) - (i32.add (i32.const 1304219505)) - (i32.add (i32.const -1592498505)) - (i32.add (i32.const -1240312370)) - (i32.add (i32.const -194219960)) - (i32.add (i32.const 253940153)) - (i32.add (i32.const 774010771)) - (i32.add (i32.const -1492190218)) - (i32.add (i32.const 307408181)) - (i32.add (i32.const -1680295495)) - (i32.add (i32.const -1860467381)) - (i32.add (i32.const 677838309)) - (i32.add (i32.const -2016393334)) - (i32.add (i32.const 374678173)) - (i32.add (i32.const 2096365412)) - (i32.add (i32.const -1474147821)) - (i32.add (i32.const -503012733)) - (i32.add (i32.const 1274047547)) - (i32.add (i32.const 1086276867)) - (i32.add (i32.const -2092943674)) - (i32.add (i32.const 127271547)) - (i32.add (i32.const -739236973)) - (i32.add (i32.const 965458873)) - (i32.add (i32.const 1935175004)) - (i32.add (i32.const -1729397075)) - (i32.add (i32.const 130958717)) - (i32.add (i32.const -624101866)) - (i32.add (i32.const 627669981)) - (i32.add (i32.const -691085463)) - (i32.add (i32.const -1808860016)) - (i32.add (i32.const 2140151832)) - (i32.add (i32.const 1479860564)) - (i32.add (i32.const 1060519004)) - (i32.add (i32.const 1173943471)) - (i32.add (i32.const -839017366)) - (i32.add (i32.const -1761508419)) - (i32.add (i32.const -1496260796)) - (i32.add (i32.const -2118538127)) - (i32.add (i32.const 770383753)) - (i32.add (i32.const 330529552)) - (i32.add (i32.const -1240589899)) - (i32.add (i32.const -127992247)) - (i32.add (i32.const 1432331973)) - (i32.add (i32.const 1982892411)) - (i32.add (i32.const -466454687)) - (i32.add (i32.const -692253343)) - (i32.add (i32.const -1994314362)) - (i32.add (i32.const 259072249)) - (i32.add (i32.const 850677126)) - (i32.add (i32.const 904153334)) - (i32.add (i32.const -323882820)) - (i32.add (i32.const -316678684)) - (i32.add (i32.const -1735258705)) - (i32.add (i32.const -1420705680)) - (i32.add (i32.const -31930325)) - (i32.add (i32.const -863952553)) - (i32.add (i32.const 210588198)) - (i32.add (i32.const 2118864465)) - (i32.add (i32.const 852705014)) - (i32.add (i32.const -741849938)) - (i32.add (i32.const -2042979518)) - (i32.add (i32.const -2042850226)) - (i32.add (i32.const -211783957)) - (i32.add (i32.const 837669846)) - (i32.add (i32.const 851856436)) - (i32.add (i32.const 952901111)) - (i32.add (i32.const 1980727302)) - (i32.add (i32.const -913166139)) - (i32.add (i32.const -75907039)) - (i32.add (i32.const -1223274395)) - (i32.add (i32.const -250728685)) - (i32.add (i32.const 1053839969)) - (i32.add (i32.const 1374345541)) - (i32.add (i32.const -1314789689)) - (i32.add (i32.const -2137328322)) - (i32.add (i32.const 646047554)) - (i32.add (i32.const 1716402660)) - (i32.add (i32.const 860804420)) - (i32.add (i32.const -1025348226)) - (i32.add (i32.const -1696745797)) - (i32.add (i32.const -1301075541)) - (i32.add (i32.const -587764838)) - (i32.add (i32.const -1199210284)) - (i32.add (i32.const 1928966429)) - (i32.add (i32.const -1947179642)) - (i32.add (i32.const -391324291)) - (i32.add (i32.const 1991003491)) - (i32.add (i32.const -1328328191)) - (i32.add (i32.const 1385640575)) - (i32.add (i32.const 1516183769)) - (i32.add (i32.const -63776633)) - (i32.add (i32.const -1521941404)) - (i32.add (i32.const 1024131)) - (i32.add (i32.const -1310957476)) - (i32.add (i32.const -799005311)) - (i32.add (i32.const -2013562273)) - (i32.add (i32.const 48832989)) - (i32.add (i32.const 1338643416)) - (i32.add (i32.const 622153067)) - (i32.add (i32.const -270429667)) - (i32.add (i32.const 1072633596)) - (i32.add (i32.const -464090434)) - (i32.add (i32.const 2003869582)) - (i32.add (i32.const 1189746855)) - (i32.add (i32.const -1284101530)) - (i32.add (i32.const -1652400805)) - (i32.add (i32.const -943307104)) - (i32.add (i32.const 977729477)) - (i32.add (i32.const -1644019622)) - (i32.add (i32.const -68677483)) - (i32.add (i32.const -96658108)) - (i32.add (i32.const -1148074770)) - (i32.add (i32.const -1819440358)) - (i32.add (i32.const 1691894120)) - (i32.add (i32.const -1943036800)) - (i32.add (i32.const 344508826)) - (i32.add (i32.const -1160155328)) - (i32.add (i32.const 521159606)) - (i32.add (i32.const 991361398)) - (i32.add (i32.const -632968006)) - (i32.add (i32.const -272363661)) - (i32.add (i32.const -44532684)) - (i32.add (i32.const 1331525764)) - (i32.add (i32.const 273788055)) - (i32.add (i32.const 839034787)) - (i32.add (i32.const -822685506)) - (i32.add (i32.const 708700850)) - (i32.add (i32.const -713263022)) - (i32.add (i32.const 1472671044)) - (i32.add (i32.const -740988351)) - (i32.add (i32.const -1346796697)) - (i32.add (i32.const -379250856)) - (i32.add (i32.const -1413202647)) - (i32.add (i32.const -517355259)) - (i32.add (i32.const -387415500)) - (i32.add (i32.const 22440603)) - (i32.add (i32.const -334098642)) - (i32.add (i32.const -1784278301)) - (i32.add (i32.const -2038055253)) - (i32.add (i32.const 1167350803)) - (i32.add (i32.const -1462855265)) - (i32.add (i32.const -51647464)) - (i32.add (i32.const 350312150)) - (i32.add (i32.const 846783150)) - (i32.add (i32.const -1319553530)) - (i32.add (i32.const 1435808487)) - (i32.add (i32.const 347101260)) - (i32.add (i32.const 1476226038)) - (i32.add (i32.const -932959529)) - (i32.add (i32.const -1265021909)) - (i32.add (i32.const 1753215820)) - (i32.add (i32.const -1108359127)) - (i32.add (i32.const 957444608)) - (i32.add (i32.const 2082745382)) - (i32.add (i32.const -33152470)) - (i32.add (i32.const -794881610)) - (i32.add (i32.const 2020165698)) - (i32.add (i32.const 446882110)) - (i32.add (i32.const -1337874948)) - (i32.add (i32.const 1031189914)) - (i32.add (i32.const -1312774511)) - (i32.add (i32.const -167402315)) - (i32.add (i32.const 875970755)) - (i32.add (i32.const 236089901)) - (i32.add (i32.const 1184209848)) - (i32.add (i32.const 575775839)) - (i32.add (i32.const 681624634)) - (i32.add (i32.const 107420048)) - (i32.add (i32.const -112317290)) - (i32.add (i32.const 1953333875)) - (i32.add (i32.const 1553705844)) - (i32.add (i32.const -795691864)) - (i32.add (i32.const -2073440233)) - (i32.add (i32.const 2116205406)) - (i32.add (i32.const 2002824195)) - (i32.add (i32.const 1140892791)) - (i32.add (i32.const 950331645)) - (i32.add (i32.const 734981286)) - (i32.add (i32.const -1245313383)) - (i32.add (i32.const 576075434)) - (i32.add (i32.const 1621329580)) - (i32.add (i32.const -1945034449)) - (i32.add (i32.const 1242120049)) - (i32.add (i32.const -1222337830)) - (i32.add (i32.const -1404805516)) - (i32.add (i32.const -150763173)) - (i32.add (i32.const 1516746139)) - (i32.add (i32.const -526728547)) - (i32.add (i32.const 98153135)) - (i32.add (i32.const -484284326)) - (i32.add (i32.const -621962018)) - (i32.add (i32.const -759453136)) - (i32.add (i32.const -423149592)) - (i32.add (i32.const -878298145)) - (i32.add (i32.const -2063572260)) - (i32.add (i32.const 2083629406)) - (i32.add (i32.const 312353947)) - (i32.add (i32.const -179821939)) - (i32.add (i32.const -322580170)) - (i32.add (i32.const 633270576)) - (i32.add (i32.const -450206594)) - (i32.add (i32.const 1647733678)) - (i32.add (i32.const 1803176784)) - (i32.add (i32.const -1397353530)) - (i32.add (i32.const 318779089)) - (i32.add (i32.const 1344697636)) - (i32.add (i32.const -873695685)) - (i32.add (i32.const -1540112117)) - (i32.add (i32.const 918546175)) - (i32.add (i32.const -660482778)) - (i32.add (i32.const 571705634)) - (i32.add (i32.const -1159975723)) - (i32.add (i32.const -1018331392)) - (i32.add (i32.const -396889417)) - (i32.add (i32.const 1573024142)) - (i32.add (i32.const 703436244)) - (i32.add (i32.const 380671607)) - (i32.add (i32.const -197911900)) - (i32.add (i32.const -2107606417)) - (i32.add (i32.const 193689135)) - (i32.add (i32.const 1773322793)) - (i32.add (i32.const 1950870128)) - (i32.add (i32.const 2120232315)) - (i32.add (i32.const 1295735799)) - (i32.add (i32.const -1345491759)) - (i32.add (i32.const 1249810474)) - (i32.add (i32.const -1167086487)) - (i32.add (i32.const 558054839)) - (i32.add (i32.const 3637668)) - (i32.add (i32.const -1184772362)) - (i32.add (i32.const -894072950)) - (i32.add (i32.const -1802174915)) - (i32.add (i32.const 1122422975)) - (i32.add (i32.const 1106203218)) - (i32.add (i32.const 1756004609)) - (i32.add (i32.const 1474819706)) - (i32.add (i32.const -672631642)) - (i32.add (i32.const 658398106)) - (i32.add (i32.const 361879339)) - (i32.add (i32.const 1170690155)) - (i32.add (i32.const -1879981220)) - (i32.add (i32.const -1723103242)) - (i32.add (i32.const 1489454533)) - (i32.add (i32.const -989914784)) - (i32.add (i32.const 370861475)) - (i32.add (i32.const -1400801948)) - (i32.add (i32.const 1930964815)) - (i32.add (i32.const 1905140601)) - (i32.add (i32.const 1826662854)) - (i32.add (i32.const -28186165)) - (i32.add (i32.const -1788398720)) - (i32.add (i32.const 317190441)) - (i32.add (i32.const 425360288)) - (i32.add (i32.const -1758435509)) - (i32.add (i32.const -1367923479)) - (i32.add (i32.const 1900328463)) - (i32.add (i32.const 1744698423)) - (i32.add (i32.const -1705201612)) - (i32.add (i32.const 32366414)) - (i32.add (i32.const 1958155929)) - (i32.add (i32.const -1593957305)) - (i32.add (i32.const 1336236705)) - (i32.add (i32.const -1105392428)) - (i32.add (i32.const 1626009680)) - (i32.add (i32.const 292989183)) - (i32.add (i32.const -1508957922)) - (i32.add (i32.const -1456777772)) - (i32.add (i32.const -1210667870)) - (i32.add (i32.const -1224921306)) - (i32.add (i32.const -846252865)) - (i32.add (i32.const -305605086)) - (i32.add (i32.const 900435286)) - (i32.add (i32.const -1981520411)) - (i32.add (i32.const -1562336247)) - (i32.add (i32.const -1058740826)) - (i32.add (i32.const 1599322459)) - (i32.add (i32.const 761795411)) - (i32.add (i32.const 1762400650)) - (i32.add (i32.const -594273741)) - (i32.add (i32.const 641931361)) - (i32.add (i32.const 11719496)) - (i32.add (i32.const 431488170)) - (i32.add (i32.const 76259338)) - (i32.add (i32.const -2037653489)) - (i32.add (i32.const 1686070150)) - (i32.add (i32.const 2075441649)) - (i32.add (i32.const -1096603677)) - (i32.add (i32.const 705813546)) - (i32.add (i32.const 600868438)) - (i32.add (i32.const -646413007)) - (i32.add (i32.const 1439133870)) - (i32.add (i32.const 503611795)) - (i32.add (i32.const 1998922769)) - (i32.add (i32.const 801565619)) - (i32.add (i32.const -1451270383)) - (i32.add (i32.const -1296151427)) - (i32.add (i32.const 1874545574)) - (i32.add (i32.const -1586924464)) - (i32.add (i32.const -148727981)) - (i32.add (i32.const 1038224525)) - (i32.add (i32.const -926366157)) - (i32.add (i32.const 1473815505)) - (i32.add (i32.const -1371192192)) - (i32.add (i32.const -481998316)) - (i32.add (i32.const -784795580)) - (i32.add (i32.const -1008170358)) - (i32.add (i32.const -892404993)) - (i32.add (i32.const 1075953779)) - (i32.add (i32.const 505372771)) - (i32.add (i32.const -345073793)) - (i32.add (i32.const -1620183644)) - (i32.add (i32.const -1757817973)) - (i32.add (i32.const -1657059672)) - (i32.add (i32.const 62447466)) - (i32.add (i32.const -219970502)) - (i32.add (i32.const 1084317516)) - (i32.add (i32.const -1354399788)) - (i32.add (i32.const -728999437)) - (i32.add (i32.const -1768593586)) - (i32.add (i32.const -1252933472)) - (i32.add (i32.const 350962569)) - (i32.add (i32.const -822350921)) - (i32.add (i32.const 1852980108)) - (i32.add (i32.const -1105614562)) - (i32.add (i32.const 415806346)) - (i32.add (i32.const 65954670)) - (i32.add (i32.const 623592797)) - (i32.add (i32.const -1242078962)) - (i32.add (i32.const -810321391)) - (i32.add (i32.const -1702906210)) - (i32.add (i32.const 543277282)) - (i32.add (i32.const 2140864357)) - (i32.add (i32.const -1258290834)) - (i32.add (i32.const 669931319)) - (i32.add (i32.const -1038026892)) - (i32.add (i32.const 206763418)) - (i32.add (i32.const 606617860)) - (i32.add (i32.const -2145048165)) - (i32.add (i32.const -2058319766)) - (i32.add (i32.const -1335527828)) - (i32.add (i32.const -2091818699)) - (i32.add (i32.const 1824247592)) - (i32.add (i32.const 522306148)) - (i32.add (i32.const 1333614088)) - (i32.add (i32.const -90505018)) - (i32.add (i32.const 1970066342)) - (i32.add (i32.const -307068148)) - (i32.add (i32.const 1025943552)) - (i32.add (i32.const -238867050)) - (i32.add (i32.const -1085137314)) - (i32.add (i32.const -221907113)) - (i32.add (i32.const 2080130313)) - (i32.add (i32.const -260519961)) - (i32.add (i32.const -1148132819)) - (i32.add (i32.const -643711523)) - (i32.add (i32.const -791571286)) - (i32.add (i32.const -2086170140)) - (i32.add (i32.const 1311931148)) - (i32.add (i32.const -1203176953)) - (i32.add (i32.const -1083168661)) - (i32.add (i32.const -1945942299)) - (i32.add (i32.const -1573200114)) - (i32.add (i32.const -1277355404)) - (i32.add (i32.const -1884670113)) - (i32.add (i32.const 1610609177)) - (i32.add (i32.const 1141985713)) - (i32.add (i32.const -1920859272)) - (i32.add (i32.const 1370270414)) - (i32.add (i32.const 1132292096)) - (i32.add (i32.const -1451383636)) - (i32.add (i32.const 525448986)) - (i32.add (i32.const 200903660)) - (i32.add (i32.const -1626388747)) - (i32.add (i32.const -1756244526)) - (i32.add (i32.const -186696337)) - (i32.add (i32.const 919516285)) - (i32.add (i32.const -199848839)) - (i32.add (i32.const -945923045)) - (i32.add (i32.const 85521598)) - (i32.add (i32.const -638987285)) - (i32.add (i32.const 334823679)) - (i32.add (i32.const -147432773)) - (i32.add (i32.const 1221975654)) - (i32.add (i32.const -380441593)) - (i32.add (i32.const 221019372)) - (i32.add (i32.const -1432079395)) - (i32.add (i32.const 1030003638)) - (i32.add (i32.const 1643236066)) - (i32.add (i32.const -266936667)) - (i32.add (i32.const 796861171)) - (i32.add (i32.const 2014149688)) - (i32.add (i32.const 1383908792)) - (i32.add (i32.const -337505508)) - (i32.add (i32.const 477731697)) - (i32.add (i32.const -422505178)) - (i32.add (i32.const 1123111612)) - (i32.add (i32.const -951943624)) - (i32.add (i32.const -1727905505)) - (i32.add (i32.const -256727428)) - (i32.add (i32.const 193808175)) - (i32.add (i32.const 643339491)) - (i32.add (i32.const 400438161)) - (i32.add (i32.const -2068462368)) - (i32.add (i32.const -757152582)) - (i32.add (i32.const 1537220480)) - (i32.add (i32.const -1227795756)) - (i32.add (i32.const 1868495229)) - (i32.add (i32.const -2024814425)) - (i32.add (i32.const -1116869061)) - (i32.add (i32.const 1165152398)) - (i32.add (i32.const 170403421)) - (i32.add (i32.const -1629795317)) - (i32.add (i32.const 1851460825)) - (i32.add (i32.const 1750675141)) - (i32.add (i32.const -1849405708)) - (i32.add (i32.const 1702968535)) - (i32.add (i32.const 1658350716)) - (i32.add (i32.const 1832900520)) - (i32.add (i32.const 1281981005)) - (i32.add (i32.const 1654085783)) - (i32.add (i32.const 433792331)) - (i32.add (i32.const -183420223)) - (i32.add (i32.const -1351877655)) - (i32.add (i32.const 322517123)) - (i32.add (i32.const -1090659590)) - (i32.add (i32.const -1834308390)) - (i32.add (i32.const -672816755)) - (i32.add (i32.const -109727822)) - (i32.add (i32.const 752201506)) - (i32.add (i32.const 296077614)) - (i32.add (i32.const 1748975065)) - (i32.add (i32.const 609203131)) - (i32.add (i32.const 1069530594)) - (i32.add (i32.const -1333011319)) - (i32.add (i32.const -2075233930)) - (i32.add (i32.const 950303567)) - (i32.add (i32.const 17849284)) - (i32.add (i32.const -485659021)) - (i32.add (i32.const -215812599)) - (i32.add (i32.const -420749026)) - (i32.add (i32.const 1930468575)) - (i32.add (i32.const -2021313455)) - (i32.add (i32.const 1913830876)) - (i32.add (i32.const 2064265192)) - (i32.add (i32.const -107387796)) - (i32.add (i32.const -1079157772)) - (i32.add (i32.const 1469596876)) - (i32.add (i32.const 2079933989)) - (i32.add (i32.const -624849431)) - (i32.add (i32.const -2106105929)) - (i32.add (i32.const -625844283)) - (i32.add (i32.const -1821691204)) - (i32.add (i32.const 1923179761)) - (i32.add (i32.const 1612941855)) - (i32.add (i32.const 1991199721)) - (i32.add (i32.const 729276909)) - (i32.add (i32.const -2056399722)) - (i32.add (i32.const 500109033)) - (i32.add (i32.const -1911248620)) - (i32.add (i32.const 464145003)) - (i32.add (i32.const -430371157)) - (i32.add (i32.const -1783376014)) - (i32.add (i32.const -1702511216)) - (i32.add (i32.const 2005656569)) - (i32.add (i32.const 494587587)) - (i32.add (i32.const 1478147502)) - (i32.add (i32.const 495574630)) - (i32.add (i32.const -964091613)) - (i32.add (i32.const -1826453948)) - (i32.add (i32.const -1135173934)) - (i32.add (i32.const 1865753955)) - (i32.add (i32.const -1534001601)) - (i32.add (i32.const 14360917)) - (i32.add (i32.const -1554644109)) - (i32.add (i32.const -1949022422)) - (i32.add (i32.const -1734862850)) - (i32.add (i32.const 165322097)) - (i32.add (i32.const 1509713981)) - (i32.add (i32.const 1736035045)) - (i32.add (i32.const 1748416964)) - (i32.add (i32.const 823768863)) - (i32.add (i32.const -599008433)) - (i32.add (i32.const -1839332726)) - (i32.add (i32.const 1962007933)) - (i32.add (i32.const 204495938)) - (i32.add (i32.const 423204432)) - (i32.add (i32.const -1162959581)) - (i32.add (i32.const 1859440358)) - (i32.add (i32.const 2103719024)) - (i32.add (i32.const 1362457541)) - (i32.add (i32.const 2108292394)) - (i32.add (i32.const -1059503171)) - (i32.add (i32.const 523086086)) - (i32.add (i32.const -1766573176)) - (i32.add (i32.const -1473390046)) - (i32.add (i32.const 104835375)) - (i32.add (i32.const 946615972)) - (i32.add (i32.const 2064271237)) - (i32.add (i32.const -452520800)) - (i32.add (i32.const 1849741018)) - (i32.add (i32.const 1728380957)) - (i32.add (i32.const 160272220)) - (i32.add (i32.const 411293591)) - (i32.add (i32.const -236641643)) - (i32.add (i32.const -2087717717)) - (i32.add (i32.const 456744024)) - (i32.add (i32.const -1295957912)) - (i32.add (i32.const -1668240534)) - (i32.add (i32.const -708913315)) - (i32.add (i32.const 1411691394)) - (i32.add (i32.const 1604941166)) - (i32.add (i32.const -1985039137)) - (i32.add (i32.const 1504875102)) - (i32.add (i32.const -1455850301)) - (i32.add (i32.const 350886535)) - (i32.add (i32.const -283017005)) - (i32.add (i32.const -1219117342)) - (i32.add (i32.const -1210199410)) - (i32.add (i32.const -451912842)) - (i32.add (i32.const 574329801)) - (i32.add (i32.const -946519887)) - (i32.add (i32.const -185861327)) - (i32.add (i32.const 1712335271)) - (i32.add (i32.const 971117939)) - (i32.add (i32.const 120847530)) - (i32.add (i32.const -324472474)) - (i32.add (i32.const 471494612)) - (i32.add (i32.const -309528803)) - (i32.add (i32.const 31861514)) - (i32.add (i32.const -1454710580)) - (i32.add (i32.const 74671575)) - (i32.add (i32.const 1670572926)) - (i32.add (i32.const -1791591415)) - (i32.add (i32.const -1512939419)) - (i32.add (i32.const -1409266090)) - (i32.add (i32.const -923353478)) - (i32.add (i32.const -1194569673)) - (i32.add (i32.const -659205973)) - (i32.add (i32.const 1259002725)) - (i32.add (i32.const -1724750858)) - (i32.add (i32.const 1100627592)) - (i32.add (i32.const -889655603)) - (i32.add (i32.const 1530063317)) - (i32.add (i32.const 2045363228)) - (i32.add (i32.const -354535638)) - (i32.add (i32.const 1103362057)) - (i32.add (i32.const 1510947286)) - (i32.add (i32.const -1300502702)) - (i32.add (i32.const -1626801426)) - (i32.add (i32.const -895736901)) - (i32.add (i32.const 606065209)) - (i32.add (i32.const 1372733966)) - (i32.add (i32.const 1024435731)) - (i32.add (i32.const 445956815)) - (i32.add (i32.const 1298274268)) - (i32.add (i32.const 592279790)) - (i32.add (i32.const -21959165)) - (i32.add (i32.const 247300219)) - (i32.add (i32.const 531790084)) - (i32.add (i32.const -51475098)) - (i32.add (i32.const 1579856939)) - (i32.add (i32.const -1972970675)) - (i32.add (i32.const -1589735540)) - (i32.add (i32.const -1326433950)) - (i32.add (i32.const 1901015332)) - (i32.add (i32.const -370553766)) - (i32.add (i32.const -918499690)) - (i32.add (i32.const -1030963484)) - (i32.add (i32.const 1225410391)) - (i32.add (i32.const 1647076844)) - (i32.add (i32.const 538717949)) - (i32.add (i32.const 48350576)) - (i32.add (i32.const -1179201809)) - (i32.add (i32.const 479334187)) - (i32.add (i32.const 1018385749)) - (i32.add (i32.const 985549036)) - (i32.add (i32.const -1224395543)) - (i32.add (i32.const -2134522482)) - (i32.add (i32.const 248344968)) - (i32.add (i32.const 53777821)) - (i32.add (i32.const 2009409005)) - (i32.add (i32.const -1839601322)) - (i32.add (i32.const 1523167040)) - (i32.add (i32.const 1156648985)) - (i32.add (i32.const 1729081433)) - (i32.add (i32.const -1319004936)) - (i32.add (i32.const 502737318)) - (i32.add (i32.const 2027614142)) - (i32.add (i32.const -1248877142)) - (i32.add (i32.const -2044773010)) - (i32.add (i32.const 210173448)) - (i32.add (i32.const -2131554470)) - (i32.add (i32.const -1815107723)) - (i32.add (i32.const 772532612)) - (i32.add (i32.const -1947643047)) - (i32.add (i32.const -605614864)) - (i32.add (i32.const 834720996)) - (i32.add (i32.const 1710775345)) - (i32.add (i32.const -1022246707)) - (i32.add (i32.const 1152317617)) - (i32.add (i32.const -2102732245)) - (i32.add (i32.const 757325737)) - (i32.add (i32.const 1821890184)) - (i32.add (i32.const 1915369409)) - (i32.add (i32.const 1082228659)) - (i32.add (i32.const -520923106)) - (i32.add (i32.const -1112541048)) - (i32.add (i32.const 1115560261)) - (i32.add (i32.const -1891439244)) - (i32.add (i32.const 539684416)) - (i32.add (i32.const -669046976)) - (i32.add (i32.const -153380155)) - (i32.add (i32.const -1293898954)) - (i32.add (i32.const -100319253)) - (i32.add (i32.const -407044147)) - (i32.add (i32.const -474034584)) - (i32.add (i32.const 51266435)) - (i32.add (i32.const 1744845279)) - (i32.add (i32.const -1916139753)) - (i32.add (i32.const -2084680819)) - (i32.add (i32.const 715089019)) - (i32.add (i32.const -1040219198)) - (i32.add (i32.const 1152162106)) - (i32.add (i32.const -684079989)) - (i32.add (i32.const -838034672)) - (i32.add (i32.const -1709336778)) - (i32.add (i32.const -2133636851)) - (i32.add (i32.const -562592676)) - (i32.add (i32.const -1449047076)) - (i32.add (i32.const -1434740517)) - (i32.add (i32.const -1541789217)) - (i32.add (i32.const -1363841488)) - (i32.add (i32.const 382866571)) - (i32.add (i32.const -437030461)) - (i32.add (i32.const 1532323189)) - (i32.add (i32.const -942741499)) - (i32.add (i32.const 297739813)) - (i32.add (i32.const 2075409955)) - (i32.add (i32.const -33348676)) - (i32.add (i32.const -907618023)) - (i32.add (i32.const 855285734)) - (i32.add (i32.const 1251935503)) - (i32.add (i32.const 913354300)) - (i32.add (i32.const 489289462)) - (i32.add (i32.const 964292251)) - (i32.add (i32.const -1445225083)) - (i32.add (i32.const -1708128069)) - (i32.add (i32.const 1549995649)) - (i32.add (i32.const -2035441775)) - (i32.add (i32.const 449177396)) - (i32.add (i32.const 573755880)) - (i32.add (i32.const 1263329735)) - (i32.add (i32.const -1053781384)) - (i32.add (i32.const 170759863)) - (i32.add (i32.const 1591451661)) - (i32.add (i32.const -108572652)) - (i32.add (i32.const 1371872609)) - (i32.add (i32.const -1895472674)) - (i32.add (i32.const 132589214)) - (i32.add (i32.const -1291011087)) - (i32.add (i32.const 446721801)) - (i32.add (i32.const -92386837)) - (i32.add (i32.const 934744765)) - (i32.add (i32.const 2146019298)) - (i32.add (i32.const -1862266643)) - (i32.add (i32.const 1173690918)) - (i32.add (i32.const -1799386516)) - (i32.add (i32.const -1057591708)) - (i32.add (i32.const 1663147151)) - (i32.add (i32.const -1730304356)) - (i32.add (i32.const 1350299770)) - (i32.add (i32.const 656624282)) - (i32.add (i32.const 951061921)) - (i32.add (i32.const -1928672379)) - (i32.add (i32.const -1533447691)) - (i32.add (i32.const 104122649)) - (i32.add (i32.const 264085380)) - (i32.add (i32.const 1278378748)) - (i32.add (i32.const -448470985)) - (i32.add (i32.const 410396717)) - (i32.add (i32.const 1411969437)) - (i32.add (i32.const 708194563)) - (i32.add (i32.const -599642140)) - (i32.add (i32.const -1434940298)) - (i32.add (i32.const -1122511986)) - (i32.add (i32.const -515071022)) - (i32.add (i32.const -602891373)) - (i32.add (i32.const 234580790)) - (i32.add (i32.const -1215010089)) - (i32.add (i32.const 1806425540)) - (i32.add (i32.const 1416505388)) - (i32.add (i32.const -1303865110)) - (i32.add (i32.const -577726039)) - (i32.add (i32.const 1596385752)) - (i32.add (i32.const -1346394939)) - (i32.add (i32.const 1994653780)) - (i32.add (i32.const -936103214)) - (i32.add (i32.const -1329306102)) - (i32.add (i32.const -13098456)) - (i32.add (i32.const -416773420)) - (i32.add (i32.const -940853930)) - (i32.add (i32.const -1010546328)) - (i32.add (i32.const 1981108133)) - (i32.add (i32.const -624984252)) - (i32.add (i32.const -2015182246)) - (i32.add (i32.const 258153241)) - (i32.add (i32.const -1343226871)) - (i32.add (i32.const 1643020377)) - (i32.add (i32.const -563468486)) - (i32.add (i32.const -666930560)) - (i32.add (i32.const -1675830900)) - (i32.add (i32.const -1988305193)) - (i32.add (i32.const 273841519)) - (i32.add (i32.const -1446059451)) - (i32.add (i32.const 6067094)) - (i32.add (i32.const 192078356)) - (i32.add (i32.const 463772951)) - (i32.add (i32.const -1352556194)) - (i32.add (i32.const -2112661763)) - (i32.add (i32.const -666264828)) - (i32.add (i32.const 2098401886)) - (i32.add (i32.const 996724807)) - (i32.add (i32.const -1701675591)) - (i32.add (i32.const -551145886)) - (i32.add (i32.const 375824730)) - (i32.add (i32.const 1733077995)) - (i32.add (i32.const 1579133792)) - (i32.add (i32.const 584218957)) - (i32.add (i32.const -840716164)) - (i32.add (i32.const 347487890)) - (i32.add (i32.const 1196935581)) - (i32.add (i32.const -1408696359)) - (i32.add (i32.const -1646992942)) - (i32.add (i32.const -1810022763)) - (i32.add (i32.const 150139919)) - (i32.add (i32.const -917668304)) - (i32.add (i32.const 1202876082)) - (i32.add (i32.const -691073117)) - (i32.add (i32.const 1855526517)) - (i32.add (i32.const -215455021)) - (i32.add (i32.const -1787274045)) - (i32.add (i32.const -5671520)) - (i32.add (i32.const -519103894)) - (i32.add (i32.const 283351463)) - (i32.add (i32.const -1105054766)) - (i32.add (i32.const 2021952561)) - (i32.add (i32.const 286416647)) - (i32.add (i32.const -1926719129)) - (i32.add (i32.const 2114181280)) - (i32.add (i32.const 2122443213)) - (i32.add (i32.const -204870568)) - (i32.add (i32.const -1788654414)) - (i32.add (i32.const 1918853115)) - (i32.add (i32.const 1837273260)) - (i32.add (i32.const -1534711362)) - (i32.add (i32.const -231518552)) - (i32.add (i32.const -1355080150)) - (i32.add (i32.const -1707368220)) - (i32.add (i32.const 681508606)) - (i32.add (i32.const 569930245)) - (i32.add (i32.const -1016646184)) - (i32.add (i32.const -1127219339)) - (i32.add (i32.const -274434907)) - (i32.add (i32.const 2002933711)) - (i32.add (i32.const 1943286151)) - (i32.add (i32.const 1585899174)) - (i32.add (i32.const 1896972412)) - (i32.add (i32.const -156128757)) - (i32.add (i32.const -1497462660)) - (i32.add (i32.const 615821767)) - (i32.add (i32.const -899231510)) - (i32.add (i32.const -876252006)) - (i32.add (i32.const -750502036)) - (i32.add (i32.const -778983260)) - (i32.add (i32.const -1049068547)) - (i32.add (i32.const -2062863709)) - (i32.add (i32.const 484610483)) - (i32.add (i32.const 238665373)) - (i32.add (i32.const -2957387)) - (i32.add (i32.const 1554787126)) - (i32.add (i32.const 2083704881)) - (i32.add (i32.const -1365369134)) - (i32.add (i32.const -677098661)) - (i32.add (i32.const 1561601830)) - (i32.add (i32.const -1394840835)) - (i32.add (i32.const -360040081)) - (i32.add (i32.const 11375964)) - (i32.add (i32.const -991562976)) - (i32.add (i32.const 901236202)) - (i32.add (i32.const 1920701306)) - (i32.add (i32.const -1577774568)) - (i32.add (i32.const 1071212575)) - (i32.add (i32.const 396421120)) - (i32.add (i32.const 1401128271)) - (i32.add (i32.const -1646693098)) - (i32.add (i32.const -1954197011)) - (i32.add (i32.const 1256238652)) - (i32.add (i32.const 305574163)) - (i32.add (i32.const 1580649630)) - (i32.add (i32.const 796074484)) - (i32.add (i32.const -1991996560)) - (i32.add (i32.const -138207737)) - (i32.add (i32.const 2071667616)) - (i32.add (i32.const -1332047247)) - (i32.add (i32.const 658174558)) - (i32.add (i32.const 1058290461)) - (i32.add (i32.const -261188236)) - (i32.add (i32.const -374504275)) - (i32.add (i32.const -870927161)) - (i32.add (i32.const -859881486)) - (i32.add (i32.const 1252460032)) - (i32.add (i32.const -944654298)) - (i32.add (i32.const 1179577409)) - (i32.add (i32.const -139066222)) - (i32.add (i32.const 65033775)) - (i32.add (i32.const 1616498288)) - (i32.add (i32.const 1038078300)) - (i32.add (i32.const -138473101)) - (i32.add (i32.const 1695181133)) - (i32.add (i32.const 1725952458)) - (i32.add (i32.const -57044662)) - (i32.add (i32.const 482647039)) - (i32.add (i32.const 840124724)) - (i32.add (i32.const 300787615)) - (i32.add (i32.const 1247909371)) - (i32.add (i32.const -1251032420)) - (i32.add (i32.const 873871266)) - (i32.add (i32.const 181771820)) - (i32.add (i32.const -1219130371)) - (i32.add (i32.const -1229619212)) - (i32.add (i32.const 61271713)) - (i32.add (i32.const -1052414267)) - (i32.add (i32.const 934205992)) - (i32.add (i32.const -1201756993)) - (i32.add (i32.const -1101809504)) - (i32.add (i32.const 685739986)) - (i32.add (i32.const -406405394)) - (i32.add (i32.const -583424705)) - (i32.add (i32.const -1968640968)) - (i32.add (i32.const 889635723)) - (i32.add (i32.const -1845596152)) - (i32.add (i32.const 1147837233)) - (i32.add (i32.const 630797266)) - (i32.add (i32.const -65104244)) - (i32.add (i32.const -216055436)) - (i32.add (i32.const 1935182990)) - (i32.add (i32.const -1831706843)) - (i32.add (i32.const 48550989)) - (i32.add (i32.const 223354702)) - (i32.add (i32.const 2134095371)) - (i32.add (i32.const -785927229)) - (i32.add (i32.const 797171880)) - (i32.add (i32.const -1760731894)) - (i32.add (i32.const -155881044)) - (i32.add (i32.const 128042495)) - (i32.add (i32.const -605115625)) - (i32.add (i32.const 1521482062)) - (i32.add (i32.const 899238669)) - (i32.add (i32.const -826719661)) - (i32.add (i32.const 1079760628)) - (i32.add (i32.const -1253644126)) - (i32.add (i32.const 490529184)) - (i32.add (i32.const -2143429464)) - (i32.add (i32.const -1308119715)) - (i32.add (i32.const 1619594466)) - (i32.add (i32.const -1868787148)) - (i32.add (i32.const -1915907681)) - (i32.add (i32.const -2017160619)) - (i32.add (i32.const 1261129774)) - (i32.add (i32.const 649926258)) - (i32.add (i32.const 69576653)) - (i32.add (i32.const 1832738191)) - (i32.add (i32.const -898969505)) - (i32.add (i32.const 1941966958)) - (i32.add (i32.const -1441644228)) - (i32.add (i32.const 1184367395)) - (i32.add (i32.const 1462555953)) - (i32.add (i32.const -920916174)) - (i32.add (i32.const -1141308005)) - (i32.add (i32.const 1500685398)) - (i32.add (i32.const -1683175036)) - (i32.add (i32.const 780292978)) - (i32.add (i32.const -1221607128)) - (i32.add (i32.const 1625832194)) - (i32.add (i32.const -331456339)) - (i32.add (i32.const -430481886)) - (i32.add (i32.const 1333000922)) - (i32.add (i32.const 1749626268)) - (i32.add (i32.const 1656619896)) - (i32.add (i32.const -1568580709)) - (i32.add (i32.const 1184278367)) - (i32.add (i32.const -1512271082)) - (i32.add (i32.const 948666615)) - (i32.add (i32.const -1044833950)) - (i32.add (i32.const -1137248858)) - (i32.add (i32.const 1123730289)) - (i32.add (i32.const 1166432438)) - (i32.add (i32.const -1103615479)) - (i32.add (i32.const -1128762671)) - (i32.add (i32.const 2052123442)) - (i32.add (i32.const -1904637968)) - (i32.add (i32.const -1296068669)) - (i32.add (i32.const 1478949231)) - (i32.add (i32.const -865985161)) - (i32.add (i32.const 998226578)) - (i32.add (i32.const 110142194)) - (i32.add (i32.const -46672406)) - (i32.add (i32.const 199110902)) - (i32.add (i32.const 1756570804)) - (i32.add (i32.const -423116363)) - (i32.add (i32.const 2110652095)) - (i32.add (i32.const 325194548)) - (i32.add (i32.const 1332112162)) - (i32.add (i32.const 133340472)) - (i32.add (i32.const -124454362)) - (i32.add (i32.const 2057510062)) - (i32.add (i32.const -988986109)) - (i32.add (i32.const 1603500113)) - (i32.add (i32.const -1846657280)) - (i32.add (i32.const 876985589)) - (i32.add (i32.const -2059790899)) - (i32.add (i32.const -930595774)) - (i32.add (i32.const -2047248864)) - (i32.add (i32.const 1331545434)) - (i32.add (i32.const 95829084)) - (i32.add (i32.const -739923580)) - (i32.add (i32.const -1701696849)) - (i32.add (i32.const 1038378593)) - (i32.add (i32.const -473885297)) - (i32.add (i32.const 1082849131)) - (i32.add (i32.const -225245806)) - (i32.add (i32.const 400231598)) - (i32.add (i32.const 1806311845)) - (i32.add (i32.const 1558491812)) - (i32.add (i32.const -1640418404)) - (i32.add (i32.const -2105523631)) - (i32.add (i32.const -1321217003)) - (i32.add (i32.const -1219901894)) - (i32.add (i32.const -931777529)) - (i32.add (i32.const 12555081)) - (i32.add (i32.const 1464184732)) - (i32.add (i32.const -1695517505)) - (i32.add (i32.const -855743140)) - (i32.add (i32.const 1886661199)) - (i32.add (i32.const 678259856)) - (i32.add (i32.const 671751447)) - (i32.add (i32.const -1927354675)) - (i32.add (i32.const 474406264)) - (i32.add (i32.const 937839601)) - (i32.add (i32.const -1097417380)) - (i32.add (i32.const 1825190693)) - (i32.add (i32.const 655086929)) - (i32.add (i32.const -312006777)) - (i32.add (i32.const 1624802059)) - (i32.add (i32.const 1860610825)) - (i32.add (i32.const 1207206496)) - (i32.add (i32.const 1320240970)) - (i32.add (i32.const 704660311)) - (i32.add (i32.const 1947187836)) - (i32.add (i32.const -1112541208)) - (i32.add (i32.const -394801754)) - (i32.add (i32.const 376591434)) - (i32.add (i32.const 1579483796)) - (i32.add (i32.const -148965934)) - (i32.add (i32.const 49424718)) - (i32.add (i32.const -656918028)) - (i32.add (i32.const 866841790)) - (i32.add (i32.const 1971826057)) - (i32.add (i32.const 48136287)) - (i32.add (i32.const -1035051067)) - (i32.add (i32.const 1879531515)) - (i32.add (i32.const -1956023282)) - (i32.add (i32.const -710546136)) - (i32.add (i32.const -258359241)) - (i32.add (i32.const 1225429060)) - (i32.add (i32.const 1818133223)) - (i32.add (i32.const 1948519412)) - (i32.add (i32.const 1423950772)) - (i32.add (i32.const 1653979274)) - (i32.add (i32.const -1822358224)) - (i32.add (i32.const -2470034)) - (i32.add (i32.const 788920495)) - (i32.add (i32.const -1538405895)) - (i32.add (i32.const -1185746363)) - (i32.add (i32.const -799903121)) - (i32.add (i32.const -730064375)) - (i32.add (i32.const 853433145)) - (i32.add (i32.const -406089597)) - (i32.add (i32.const -1577168945)) - (i32.add (i32.const 1969385472)) - (i32.add (i32.const 1190463219)) - (i32.add (i32.const -1695066130)) - (i32.add (i32.const -1681416969)) - (i32.add (i32.const 778791849)) - (i32.add (i32.const -695912730)) - (i32.add (i32.const -577778630)) - (i32.add (i32.const -1155505847)) - (i32.add (i32.const -45862561)) - (i32.add (i32.const 1351592274)) - (i32.add (i32.const -1781290640)) - (i32.add (i32.const 932566145)) - (i32.add (i32.const 848127849)) - (i32.add (i32.const 1450669660)) - (i32.add (i32.const 449936123)) - (i32.add (i32.const -118187628)) - (i32.add (i32.const 1120527942)) - (i32.add (i32.const 1048782423)) - (i32.add (i32.const 1645312668)) - (i32.add (i32.const 779726212)) - (i32.add (i32.const -1261583232)) - (i32.add (i32.const -1340941988)) - (i32.add (i32.const 406265504)) - (i32.add (i32.const 262985171)) - (i32.add (i32.const 1204228463)) - (i32.add (i32.const 896098481)) - (i32.add (i32.const -47697429)) - (i32.add (i32.const -195809447)) - (i32.add (i32.const -291004746)) - (i32.add (i32.const -565057315)) - (i32.add (i32.const 1707868338)) - (i32.add (i32.const -441920371)) - (i32.add (i32.const 1294138715)) - (i32.add (i32.const -1781696733)) - (i32.add (i32.const 2024804131)) - (i32.add (i32.const -1316093541)) - (i32.add (i32.const 754436451)) - (i32.add (i32.const 862643301)) - (i32.add (i32.const 1210774178)) - (i32.add (i32.const 89243555)) - (i32.add (i32.const -1793250285)) - (i32.add (i32.const 58754186)) - (i32.add (i32.const -994632225)) - (i32.add (i32.const -1428828001)) - (i32.add (i32.const -1117987167)) - (i32.add (i32.const -726708211)) - (i32.add (i32.const -248034440)) - (i32.add (i32.const -1225718286)) - (i32.add (i32.const 1903940039)) - (i32.add (i32.const 1198390406)) - (i32.add (i32.const 200461955)) - (i32.add (i32.const 53916754)) - (i32.add (i32.const 495900435)) - (i32.add (i32.const 1376967829)) - (i32.add (i32.const 1549474140)) - (i32.add (i32.const -1341779636)) - (i32.add (i32.const -926191720)) - (i32.add (i32.const -995443548)) - (i32.add (i32.const 1691199173)) - (i32.add (i32.const 851813204)) - (i32.add (i32.const -2049514989)) - (i32.add (i32.const -1894357037)) - (i32.add (i32.const 1230185807)) - (i32.add (i32.const 1881918406)) - (i32.add (i32.const 1451226673)) - (i32.add (i32.const 1241157269)) - (i32.add (i32.const -897070653)) - (i32.add (i32.const -1279497276)) - (i32.add (i32.const 1159887556)) - (i32.add (i32.const 1857821018)) - (i32.add (i32.const -1078597039)) - (i32.add (i32.const -104648483)) - (i32.add (i32.const -793294215)) - (i32.add (i32.const 551287528)) - (i32.add (i32.const 1993844248)) - (i32.add (i32.const 493963162)) - (i32.add (i32.const 687590297)) - (i32.add (i32.const -537574160)) - (i32.add (i32.const -18287881)) - (i32.add (i32.const 1581227097)) - (i32.add (i32.const 1180444070)) - (i32.add (i32.const 75064010)) - (i32.add (i32.const 17727605)) - (i32.add (i32.const -469394903)) - (i32.add (i32.const 260532185)) - (i32.add (i32.const 1808686699)) - (i32.add (i32.const 244853134)) - (i32.add (i32.const 113059743)) - (i32.add (i32.const -883253715)) - (i32.add (i32.const -1991681380)) - (i32.add (i32.const 1519432663)) - (i32.add (i32.const 1246925495)) - (i32.add (i32.const 1164332522)) - (i32.add (i32.const -1681998620)) - (i32.add (i32.const -641794959)) - (i32.add (i32.const 1498546199)) - (i32.add (i32.const 1852301713)) - (i32.add (i32.const -659144157)) - (i32.add (i32.const 1265558172)) - (i32.add (i32.const -1971943226)) - (i32.add (i32.const 2062091290)) - (i32.add (i32.const 1434337820)) - (i32.add (i32.const 1591733036)) - (i32.add (i32.const 1030536499)) - (i32.add (i32.const 1623391103)) - (i32.add (i32.const 1584094870)) - (i32.add (i32.const 1679563407)) - (i32.add (i32.const -1218366178)) - (i32.add (i32.const -1210889952)) - (i32.add (i32.const 136773499)) - (i32.add (i32.const 1059461142)) - (i32.add (i32.const 1473176335)) - (i32.add (i32.const 1783998240)) - (i32.add (i32.const 1177649519)) - (i32.add (i32.const -322526204)) - (i32.add (i32.const 764501185)) - (i32.add (i32.const 314206278)) - (i32.add (i32.const -998978225)) - (i32.add (i32.const 1291838586)) - (i32.add (i32.const -962966587)) - (i32.add (i32.const -355760517)) - (i32.add (i32.const -1937601034)) - (i32.add (i32.const -22821074)) - (i32.add (i32.const 1402627072)) - (i32.add (i32.const 2074705287)) - (i32.add (i32.const 989029770)) - (i32.add (i32.const -815647491)) - (i32.add (i32.const 774662731)) - (i32.add (i32.const -788445715)) - (i32.add (i32.const -1492833659)) - (i32.add (i32.const -744666776)) - (i32.add (i32.const 688062084)) - (i32.add (i32.const -1935283551)) - (i32.add (i32.const -526110848)) - (i32.add (i32.const 1650824588)) - (i32.add (i32.const 98165902)) - (i32.add (i32.const 96346569)) - (i32.add (i32.const 702914055)) - (i32.add (i32.const 303847121)) - (i32.add (i32.const 601791187)) - (i32.add (i32.const -345945260)) - (i32.add (i32.const 1409266648)) - (i32.add (i32.const 1478373159)) - (i32.add (i32.const -480011793)) - (i32.add (i32.const -2128157284)) - (i32.add (i32.const -259013234)) - (i32.add (i32.const 482855771)) - (i32.add (i32.const -1760255404)) - (i32.add (i32.const 2107924039)) - (i32.add (i32.const 260994301)) - (i32.add (i32.const -594473276)) - (i32.add (i32.const 1090340576)) - (i32.add (i32.const -1022240192)) - (i32.add (i32.const 1433652199)) - (i32.add (i32.const 1618260766)) - (i32.add (i32.const 53149359)) - (i32.add (i32.const 761856346)) - (i32.add (i32.const -1737421334)) - (i32.add (i32.const 883240996)) - (i32.add (i32.const -1540287869)) - (i32.add (i32.const -522274878)) - (i32.add (i32.const 834821205)) - (i32.add (i32.const -618364748)) - (i32.add (i32.const -1753024143)) - (i32.add (i32.const 2007441135)) - (i32.add (i32.const -1076489584)) - (i32.add (i32.const -1207205307)) - (i32.add (i32.const -1271514411)) - (i32.add (i32.const -297272480)) - (i32.add (i32.const 1185541629)) - (i32.add (i32.const -1721180072)) - (i32.add (i32.const -1462243980)) - (i32.add (i32.const 1661451380)) - (i32.add (i32.const -76287825)) - (i32.add (i32.const 818611078)) - (i32.add (i32.const 1423919200)) - (i32.add (i32.const -800368523)) - (i32.add (i32.const 1518088520)) - (i32.add (i32.const -1388334091)) - (i32.add (i32.const 61396886)) - (i32.add (i32.const -956664962)) - (i32.add (i32.const 738990262)) - (i32.add (i32.const 455954033)) - (i32.add (i32.const 260399126)) - (i32.add (i32.const 1976034598)) - (i32.add (i32.const -1944288575)) - (i32.add (i32.const 1310302981)) - (i32.add (i32.const 435363313)) - (i32.add (i32.const -878353261)) - (i32.add (i32.const 1174140612)) - (i32.add (i32.const -900077894)) - (i32.add (i32.const 1825235465)) - (i32.add (i32.const -1280956657)) - (i32.add (i32.const -2038450508)) - (i32.add (i32.const -841802116)) - (i32.add (i32.const 1583604704)) - (i32.add (i32.const -954972846)) - (i32.add (i32.const -1343794999)) - (i32.add (i32.const 1901421517)) - (i32.add (i32.const 1160117992)) - (i32.add (i32.const -1120908896)) - (i32.add (i32.const -74837596)) - (i32.add (i32.const 57333292)) - (i32.add (i32.const -1651472797)) - (i32.add (i32.const -346198114)) - (i32.add (i32.const 1131150250)) - (i32.add (i32.const -93813559)) - (i32.add (i32.const 1607446085)) - (i32.add (i32.const 1697384989)) - (i32.add (i32.const -107838361)) - (i32.add (i32.const -502443288)) - (i32.add (i32.const 1442604116)) - (i32.add (i32.const 1417690319)) - (i32.add (i32.const 11536338)) - (i32.add (i32.const -1466544063)) - (i32.add (i32.const 182012892)) - (i32.add (i32.const 1088641828)) - (i32.add (i32.const 930079621)) - (i32.add (i32.const 1089473239)) - (i32.add (i32.const 486628599)) - (i32.add (i32.const -1984679812)) - (i32.add (i32.const -989290623)) - (i32.add (i32.const -506423731)) - (i32.add (i32.const -278885392)) - (i32.add (i32.const 1395987003)) - (i32.add (i32.const 1399776761)) - (i32.add (i32.const -506322535)) - (i32.add (i32.const 757049983)) - (i32.add (i32.const 1601358700)) - (i32.add (i32.const -1453653852)) - (i32.add (i32.const 1199570593)) - (i32.add (i32.const 478464562)) - (i32.add (i32.const -974088220)) - (i32.add (i32.const 1646148538)) - (i32.add (i32.const -1434926391)) - (i32.add (i32.const 797714757)) - (i32.add (i32.const 740165679)) - (i32.add (i32.const 1799703863)) - (i32.add (i32.const 133959780)) - (i32.add (i32.const -418089331)) - (i32.add (i32.const 539993646)) - (i32.add (i32.const -84100698)) - (i32.add (i32.const 1054411443)) - (i32.add (i32.const -1015023179)) - (i32.add (i32.const -1911288050)) - (i32.add (i32.const 1026293723)) - (i32.add (i32.const -2084272457)) - (i32.add (i32.const 687404754)) - (i32.add (i32.const -52819156)) - (i32.add (i32.const 55567568)) - (i32.add (i32.const 1666117747)) - (i32.add (i32.const 309595147)) - (i32.add (i32.const 140745517)) - (i32.add (i32.const 310787619)) - (i32.add (i32.const -1474830741)) - (i32.add (i32.const 1223702117)) - (i32.add (i32.const 1670179282)) - (i32.add (i32.const -2133935334)) - (i32.add (i32.const -1452810978)) - (i32.add (i32.const 1213322001)) - (i32.add (i32.const -1912143243)) - (i32.add (i32.const 1603315282)) - (i32.add (i32.const 1814095775)) - (i32.add (i32.const 1929742787)) - (i32.add (i32.const -1037783982)) - (i32.add (i32.const -714031643)) - (i32.add (i32.const 645762552)) - (i32.add (i32.const -202231195)) - (i32.add (i32.const 265707803)) - (i32.add (i32.const -283012993)) - (i32.add (i32.const 2002135300)) - (i32.add (i32.const 1219855309)) - (i32.add (i32.const -308225646)) - (i32.add (i32.const 558099472)) - (i32.add (i32.const 799607608)) - (i32.add (i32.const 306321422)) - (i32.add (i32.const 1217929435)) - (i32.add (i32.const 1084498948)) - (i32.add (i32.const 881375328)) - (i32.add (i32.const 1639060162)) - (i32.add (i32.const -882082875)) - (i32.add (i32.const -394815259)) - (i32.add (i32.const -2135209699)) - (i32.add (i32.const -1834689412)) - (i32.add (i32.const 544012965)) - (i32.add (i32.const 1557681081)) - (i32.add (i32.const 954742828)) - (i32.add (i32.const -1404797742)) - (i32.add (i32.const 947643107)) - (i32.add (i32.const 140128831)) - (i32.add (i32.const 603706495)) - (i32.add (i32.const -602758516)) - (i32.add (i32.const -1309127081)) - (i32.add (i32.const 1231616094)) - (i32.add (i32.const 310918179)) - (i32.add (i32.const -105840379)) - (i32.add (i32.const 1669166799)) - (i32.add (i32.const 471170704)) - (i32.add (i32.const 1942478741)) - (i32.add (i32.const 89771980)) - (i32.add (i32.const 380009191)) - (i32.add (i32.const 964892445)) - (i32.add (i32.const 1919139396)) - (i32.add (i32.const 2074584874)) - (i32.add (i32.const -812220635)) - (i32.add (i32.const 2021086519)) - (i32.add (i32.const 1869074533)) - (i32.add (i32.const 153369650)) - (i32.add (i32.const -1600868403)) - (i32.add (i32.const -1825114199)) - (i32.add (i32.const 1545744963)) - (i32.add (i32.const 1456117663)) - (i32.add (i32.const -1746772382)) - (i32.add (i32.const -1072512897)) - (i32.add (i32.const -1996265967)) - (i32.add (i32.const -1927294041)) - (i32.add (i32.const 567253248)) - (i32.add (i32.const -1354854146)) - (i32.add (i32.const 325269513)) - (i32.add (i32.const -878775092)) - (i32.add (i32.const -678020514)) - (i32.add (i32.const -923117083)) - (i32.add (i32.const 482980500)) - (i32.add (i32.const 1866804702)) - (i32.add (i32.const 1270791841)) - (i32.add (i32.const 918860029)) - (i32.add (i32.const -1706853165)) - (i32.add (i32.const 37366057)) - (i32.add (i32.const 1466951972)) - (i32.add (i32.const 1579449908)) - (i32.add (i32.const 1372049573)) - (i32.add (i32.const 876735596)) - (i32.add (i32.const -141417256)) - (i32.add (i32.const -1038065143)) - (i32.add (i32.const 1849439814)) - (i32.add (i32.const 1091932916)) - (i32.add (i32.const -74641425)) - (i32.add (i32.const 694413752)) - (i32.add (i32.const 395323386)) - (i32.add (i32.const 1000694369)) - (i32.add (i32.const -86856256)) - (i32.add (i32.const 992032974)) - (i32.add (i32.const 690025726)) - (i32.add (i32.const 1771120900)) - (i32.add (i32.const 98259495)) - (i32.add (i32.const -1727892956)) - (i32.add (i32.const -436623125)) - (i32.add (i32.const -331445917)) - (i32.add (i32.const -658868636)) - (i32.add (i32.const -373550987)) - (i32.add (i32.const -1529735965)) - (i32.add (i32.const -850622729)) - (i32.add (i32.const -1497398181)) - (i32.add (i32.const 659069096)) - (i32.add (i32.const 1363803114)) - (i32.add (i32.const -1101807628)) - (i32.add (i32.const -1339039200)) - (i32.add (i32.const 2026632352)) - (i32.add (i32.const -1891169422)) - (i32.add (i32.const 870520513)) - (i32.add (i32.const -1960630286)) - (i32.add (i32.const 411741687)) - (i32.add (i32.const -58375833)) - (i32.add (i32.const 1541456503)) - (i32.add (i32.const -557989205)) - (i32.add (i32.const -980361073)) - (i32.add (i32.const 706513131)) - (i32.add (i32.const -2093460016)) - (i32.add (i32.const 120675976)) - (i32.add (i32.const -866337663)) - (i32.add (i32.const -587944252)) - (i32.add (i32.const -1016396707)) - (i32.add (i32.const 2019226602)) - (i32.add (i32.const 1299732869)) - (i32.add (i32.const 1350449041)) - (i32.add (i32.const 1076370464)) - (i32.add (i32.const 2135209690)) - (i32.add (i32.const -1767855828)) - (i32.add (i32.const 209871856)) - (i32.add (i32.const -464456096)) - (i32.add (i32.const 857200426)) - (i32.add (i32.const -603373807)) - (i32.add (i32.const 1166762669)) - (i32.add (i32.const -28275057)) - (i32.add (i32.const 131536902)) - (i32.add (i32.const 922883859)) - (i32.add (i32.const 1642859210)) - (i32.add (i32.const 403222445)) - (i32.add (i32.const -2098578902)) - (i32.add (i32.const -482145069)) - (i32.add (i32.const -856269911)) - (i32.add (i32.const -727401640)) - (i32.add (i32.const 1944331715)) - (i32.add (i32.const 1412777928)) - (i32.add (i32.const -1474125042)) - (i32.add (i32.const 1046407104)) - (i32.add (i32.const 1972857012)) - (i32.add (i32.const 1781838147)) - (i32.add (i32.const 853964375)) - (i32.add (i32.const 431942441)) - (i32.add (i32.const -710853334)) - (i32.add (i32.const -381093478)) - (i32.add (i32.const 404739729)) - (i32.add (i32.const -1801487556)) - (i32.add (i32.const 1166047764)) - (i32.add (i32.const -1591874079)) - (i32.add (i32.const -26024010)) - (i32.add (i32.const -1562384974)) - (i32.add (i32.const -1027356038)) - (i32.add (i32.const -359205959)) - (i32.add (i32.const -63072761)) - (i32.add (i32.const 2040895504)) - (i32.add (i32.const -311355716)) - (i32.add (i32.const 362307615)) - (i32.add (i32.const -802466788)) - (i32.add (i32.const -1292720991)) - (i32.add (i32.const 2001976920)) - (i32.add (i32.const 451685649)) - (i32.add (i32.const 1155904571)) - (i32.add (i32.const -1609699542)) - (i32.add (i32.const -401922706)) - (i32.add (i32.const -1954565444)) - (i32.add (i32.const -2100470302)) - (i32.add (i32.const 755031545)) - (i32.add (i32.const 1354804049)) - (i32.add (i32.const -1410749182)) - (i32.add (i32.const 1508721230)) - (i32.add (i32.const 970516181)) - (i32.add (i32.const -203527598)) - (i32.add (i32.const 82461854)) - (i32.add (i32.const 444077018)) - (i32.add (i32.const 875681428)) - (i32.add (i32.const -979190334)) - (i32.add (i32.const 641574670)) - (i32.add (i32.const 10933356)) - (i32.add (i32.const -530286663)) - (i32.add (i32.const 1586523554)) - (i32.add (i32.const -683987399)) - (i32.add (i32.const 1317120893)) - (i32.add (i32.const 375810227)) - (i32.add (i32.const -2026233678)) - (i32.add (i32.const -875376125)) - (i32.add (i32.const -790768884)) - (i32.add (i32.const 1577842157)) - (i32.add (i32.const -444273877)) - (i32.add (i32.const -2110713354)) - (i32.add (i32.const -1886239819)) - (i32.add (i32.const -1367207177)) - (i32.add (i32.const -1125947760)) - (i32.add (i32.const 2123308474)) - (i32.add (i32.const -735220149)) - (i32.add (i32.const 1056224580)) - (i32.add (i32.const -1568172492)) - (i32.add (i32.const -1584354137)) - (i32.add (i32.const 4207088)) - (i32.add (i32.const 951892314)) - (i32.add (i32.const -59144154)) - (i32.add (i32.const 974843424)) - (i32.add (i32.const -1952409109)) - (i32.add (i32.const -1193147290)) - (i32.add (i32.const 469073692)) - (i32.add (i32.const 161726620)) - (i32.add (i32.const 846742629)) - (i32.add (i32.const 820984656)) - (i32.add (i32.const -1119522864)) - (i32.add (i32.const -627513672)) - (i32.add (i32.const 411957975)) - (i32.add (i32.const 1407628542)) - (i32.add (i32.const 427696518)) - (i32.add (i32.const 1341692359)) - (i32.add (i32.const -1495717402)) - (i32.add (i32.const 617165290)) - (i32.add (i32.const 2136140358)) - (i32.add (i32.const -171618198)) - (i32.add (i32.const 1330639253)) - (i32.add (i32.const -1641881865)) - (i32.add (i32.const 2011971177)) - (i32.add (i32.const 1692711442)) - (i32.add (i32.const 1573486376)) - (i32.add (i32.const 1988491124)) - (i32.add (i32.const 1412276665)) - (i32.add (i32.const -1293469296)) - (i32.add (i32.const -441067151)) - (i32.add (i32.const -1458963016)) - (i32.add (i32.const -122904545)) - (i32.add (i32.const 2003579105)) - (i32.add (i32.const 382988528)) - (i32.add (i32.const -2103722942)) - (i32.add (i32.const 768734672)) - (i32.add (i32.const 1444963746)) - (i32.add (i32.const 403265980)) - (i32.add (i32.const 1735690602)) - (i32.add (i32.const -569415387)) - (i32.add (i32.const 1137156236)) - (i32.add (i32.const -466761711)) - (i32.add (i32.const 128314894)) - (i32.add (i32.const -924930104)) - (i32.add (i32.const 446123072)) - (i32.add (i32.const -2035728666)) - (i32.add (i32.const 1177307754)) - (i32.add (i32.const -1856663638)) - (i32.add (i32.const 1623678716)) - (i32.add (i32.const 1424312850)) - (i32.add (i32.const -1870598072)) - (i32.add (i32.const 985982003)) - (i32.add (i32.const -38528338)) - (i32.add (i32.const 1873792570)) - (i32.add (i32.const -1660283228)) - (i32.add (i32.const -494936147)) - (i32.add (i32.const 1692067025)) - (i32.add (i32.const 506028467)) - (i32.add (i32.const 1803734093)) - (i32.add (i32.const -1379009901)) - (i32.add (i32.const -73452669)) - (i32.add (i32.const -1315802783)) - (i32.add (i32.const 420773327)) - (i32.add (i32.const 1665805394)) - (i32.add (i32.const 1099796343)) - (i32.add (i32.const 744958529)) - (i32.add (i32.const 344370034)) - (i32.add (i32.const 1687213339)) - (i32.add (i32.const -911870739)) - (i32.add (i32.const 84759382)) - (i32.add (i32.const -1298494081)) - (i32.add (i32.const -970433891)) - (i32.add (i32.const -1691571798)) - (i32.add (i32.const 985459895)) - (i32.add (i32.const 336708601)) - (i32.add (i32.const 1302957075)) - (i32.add (i32.const 1279561360)) - (i32.add (i32.const 1611710936)) - (i32.add (i32.const 206563984)) - (i32.add (i32.const 263520144)) - (i32.add (i32.const 814719660)) - (i32.add (i32.const -1949223025)) - (i32.add (i32.const 453236276)) - (i32.add (i32.const 803428606)) - (i32.add (i32.const -247682649)) - (i32.add (i32.const -1489849073)) - (i32.add (i32.const 98402240)) - (i32.add (i32.const -1810329908)) - (i32.add (i32.const 1655821557)) - (i32.add (i32.const 465385534)) - (i32.add (i32.const -2137005455)) - (i32.add (i32.const -1813884327)) - (i32.add (i32.const -998772212)) - (i32.add (i32.const 254423328)) - (i32.add (i32.const 1745666300)) - (i32.add (i32.const 1422922310)) - (i32.add (i32.const 693980361)) - (i32.add (i32.const -753932131)) - (i32.add (i32.const -2005967002)) - (i32.add (i32.const -1042795173)) - (i32.add (i32.const 2058039959)) - (i32.add (i32.const -1927044804)) - (i32.add (i32.const -1291386419)) - (i32.add (i32.const -1616150525)) - (i32.add (i32.const 652086884)) - (i32.add (i32.const -180578101)) - (i32.add (i32.const -1777951363)) - (i32.add (i32.const -841657056)) - (i32.add (i32.const 522388643)) - (i32.add (i32.const 1696415005)) - (i32.add (i32.const -1124675161)) - (i32.add (i32.const -1455701769)) - (i32.add (i32.const -779315401)) - (i32.add (i32.const 1191580668)) - (i32.add (i32.const -1602701608)) - (i32.add (i32.const 1573348429)) - (i32.add (i32.const 271576070)) - (i32.add (i32.const 1126292180)) - (i32.add (i32.const 466506990)) - (i32.add (i32.const -124662383)) - (i32.add (i32.const -924898803)) - (i32.add (i32.const 1935561524)) - (i32.add (i32.const -2102086763)) - (i32.add (i32.const 1871204888)) - (i32.add (i32.const -1465652924)) - (i32.add (i32.const -481130516)) - (i32.add (i32.const -229443404)) - (i32.add (i32.const 74719843)) - (i32.add (i32.const 1760518578)) - (i32.add (i32.const -266883653)) - (i32.add (i32.const -1253931829)) - (i32.add (i32.const 689712331)) - (i32.add (i32.const 606455276)) - (i32.add (i32.const -83451099)) - (i32.add (i32.const -201600176)) - (i32.add (i32.const -436652554)) - (i32.add (i32.const 267883566)) - (i32.add (i32.const 1278329417)) - (i32.add (i32.const -859465483)) - (i32.add (i32.const -279807153)) - (i32.add (i32.const 1604739875)) - (i32.add (i32.const -855272858)) - (i32.add (i32.const -1612810812)) - (i32.add (i32.const -731242585)) - (i32.add (i32.const 437853487)) - (i32.add (i32.const 1564050776)) - (i32.add (i32.const -306702261)) - (i32.add (i32.const 403633067)) - (i32.add (i32.const 291999627)) - (i32.add (i32.const -19082238)) - (i32.add (i32.const -1567034866)) - (i32.add (i32.const -1473179778)) - (i32.add (i32.const -439333248)) - (i32.add (i32.const 1974725357)) - (i32.add (i32.const 1527676266)) - (i32.add (i32.const -692105389)) - (i32.add (i32.const -1989456493)) - (i32.add (i32.const 581196027)) - (i32.add (i32.const -441413825)) - (i32.add (i32.const -96370324)) - (i32.add (i32.const 482728396)) - (i32.add (i32.const -494439836)) - (i32.add (i32.const 377135398)) - (i32.add (i32.const -408182646)) - (i32.add (i32.const 1712910994)) - (i32.add (i32.const 417202088)) - (i32.add (i32.const 2059086531)) - (i32.add (i32.const -1968916747)) - (i32.add (i32.const -1556118549)) - (i32.add (i32.const 1785089660)) - (i32.add (i32.const 301412190)) - (i32.add (i32.const -28479132)) - (i32.add (i32.const 1635360851)) - (i32.add (i32.const 1801247349)) - (i32.add (i32.const 509526404)) - (i32.add (i32.const 1120173871)) - (i32.add (i32.const -689608097)) - (i32.add (i32.const -299849773)) - (i32.add (i32.const 1106135176)) - (i32.add (i32.const 1797398740)) - (i32.add (i32.const 110862638)) - (i32.add (i32.const -1906643078)) - (i32.add (i32.const -1211596579)) - (i32.add (i32.const -1136546137)) - (i32.add (i32.const -575579382)) - (i32.add (i32.const 196731115)) - (i32.add (i32.const -235825598)) - (i32.add (i32.const 740916370)) - (i32.add (i32.const -1027778890)) - (i32.add (i32.const -558748290)) - (i32.add (i32.const -933588472)) - (i32.add (i32.const -625117483)) - (i32.add (i32.const -925346406)) - (i32.add (i32.const -1724353107)) - (i32.add (i32.const 1137849686)) - (i32.add (i32.const 546485867)) - (i32.add (i32.const -1352615832)) - (i32.add (i32.const -691992314)) - (i32.add (i32.const -1357864534)) - (i32.add (i32.const -1984052981)) - (i32.add (i32.const -1526922648)) - (i32.add (i32.const -776944305)) - (i32.add (i32.const 2121554422)) - (i32.add (i32.const -2064107474)) - (i32.add (i32.const 2015997997)) - (i32.add (i32.const -1999973088)) - (i32.add (i32.const -611192134)) - (i32.add (i32.const 1665288786)) - (i32.add (i32.const 67680844)) - (i32.add (i32.const -600713433)) - (i32.add (i32.const -479855244)) - (i32.add (i32.const 787290501)) - (i32.add (i32.const -2020646886)) - (i32.add (i32.const -2093963377)) - (i32.add (i32.const -2058931087)) - (i32.add (i32.const -1687081715)) - (i32.add (i32.const 329714575)) - (i32.add (i32.const 1875129128)) - (i32.add (i32.const 459281465)) - (i32.add (i32.const -1903090155)) - (i32.add (i32.const -441913864)) - (i32.add (i32.const -2072990849)) - (i32.add (i32.const -2081503127)) - (i32.add (i32.const -1440635328)) - (i32.add (i32.const -1859314189)) - (i32.add (i32.const -935315553)) - (i32.add (i32.const 1518118150)) - (i32.add (i32.const 358642682)) - (i32.add (i32.const 400294947)) - (i32.add (i32.const -936592897)) - (i32.add (i32.const 463040058)) - (i32.add (i32.const 433092491)) - (i32.add (i32.const -2026867216)) - (i32.add (i32.const -883641289)) - (i32.add (i32.const -1220251731)) - (i32.add (i32.const -1012174907)) - (i32.add (i32.const 1964463646)) - (i32.add (i32.const -662557450)) - (i32.add (i32.const -539333345)) - (i32.add (i32.const -198870613)) - (i32.add (i32.const -764373375)) - (i32.add (i32.const -701393363)) - (i32.add (i32.const 1594544626)) - (i32.add (i32.const 1881101955)) - (i32.add (i32.const -1245777437)) - (i32.add (i32.const -905043291)) - (i32.add (i32.const -635651363)) - (i32.add (i32.const 780407501)) - (i32.add (i32.const -1057141033)) - (i32.add (i32.const 561271220)) - (i32.add (i32.const 1932233250)) - (i32.add (i32.const 376975154)) - (i32.add (i32.const -1622832766)) - (i32.add (i32.const -841142477)) - (i32.add (i32.const 964908965)) - (i32.add (i32.const -246450529)) - (i32.add (i32.const -721950107)) - (i32.add (i32.const 1148155718)) - (i32.add (i32.const 1820929595)) - (i32.add (i32.const -130980980)) - (i32.add (i32.const -209602122)) - (i32.add (i32.const 441061808)) - (i32.add (i32.const 822884862)) - (i32.add (i32.const -1101492631)) - (i32.add (i32.const 225764028)) - (i32.add (i32.const 1903524846)) - (i32.add (i32.const 1977175480)) - (i32.add (i32.const 733062643)) - (i32.add (i32.const 938069064)) - (i32.add (i32.const -623910603)) - (i32.add (i32.const -930461953)) - (i32.add (i32.const -1986785580)) - (i32.add (i32.const 1024100240)) - (i32.add (i32.const -2092992747)) - (i32.add (i32.const 159650923)) - (i32.add (i32.const 697763683)) - (i32.add (i32.const 1449133316)) - (i32.add (i32.const 1167222512)) - (i32.add (i32.const -1143725622)) - (i32.add (i32.const 663779920)) - (i32.add (i32.const 392109847)) - (i32.add (i32.const 351204806)) - (i32.add (i32.const 1808559669)) - (i32.add (i32.const 175825648)) - (i32.add (i32.const 1782056269)) - (i32.add (i32.const 1826398006)) - (i32.add (i32.const 1326521425)) - (i32.add (i32.const -2018018458)) - (i32.add (i32.const -1816250130)) - (i32.add (i32.const 2075277984)) - (i32.add (i32.const -739557783)) - (i32.add (i32.const 1438098552)) - (i32.add (i32.const 479040548)) - (i32.add (i32.const -532464679)) - (i32.add (i32.const 421489504)) - (i32.add (i32.const 876861504)) - (i32.add (i32.const 863606152)) - (i32.add (i32.const -262880866)) - (i32.add (i32.const -2145317325)) - (i32.add (i32.const -2097188179)) - (i32.add (i32.const 2111339153)) - (i32.add (i32.const 2095367168)) - (i32.add (i32.const -1149612242)) - (i32.add (i32.const -1876667351)) - (i32.add (i32.const -1473466923)) - (i32.add (i32.const -2115081511)) - (i32.add (i32.const 57512991)) - (i32.add (i32.const 1543846648)) - (i32.add (i32.const -2009264518)) - (i32.add (i32.const -1416237005)) - (i32.add (i32.const 475617634)) - (i32.add (i32.const -1816050563)) - (i32.add (i32.const 1902560476)) - (i32.add (i32.const -1985858838)) - (i32.add (i32.const 373694110)) - (i32.add (i32.const 334356710)) - (i32.add (i32.const 141582919)) - (i32.add (i32.const 1407041436)) - (i32.add (i32.const -537710479)) - (i32.add (i32.const 503197391)) - (i32.add (i32.const 800321487)) - (i32.add (i32.const -1840953690)) - (i32.add (i32.const 1464863705)) - (i32.add (i32.const 25023865)) - (i32.add (i32.const 1608016999)) - (i32.add (i32.const 1671205731)) - (i32.add (i32.const -919936868)) - (i32.add (i32.const 1015448424)) - (i32.add (i32.const 1419797695)) - (i32.add (i32.const 1813400056)) - (i32.add (i32.const -1503442598)) - (i32.add (i32.const 1274752985)) - (i32.add (i32.const -847580427)) - (i32.add (i32.const -540496451)) - (i32.add (i32.const 116849736)) - (i32.add (i32.const 410864100)) - (i32.add (i32.const 1139824893)) - (i32.add (i32.const -1467433124)) - (i32.add (i32.const -1407228299)) - (i32.add (i32.const 1594365570)) - (i32.add (i32.const 470054401)) - (i32.add (i32.const -1801427440)) - (i32.add (i32.const -365284032)) - (i32.add (i32.const 1200435444)) - (i32.add (i32.const 861037674)) - (i32.add (i32.const -1710779858)) - (i32.add (i32.const 1786642107)) - (i32.add (i32.const -776298786)) - (i32.add (i32.const -165646885)) - (i32.add (i32.const 1710504571)) - (i32.add (i32.const 1181927358)) - (i32.add (i32.const -1118970310)) - (i32.add (i32.const -1484923835)) - (i32.add (i32.const -462504094)) - (i32.add (i32.const 292668440)) - (i32.add (i32.const 1678809524)) - (i32.add (i32.const -511639391)) - (i32.add (i32.const -1329357463)) - (i32.add (i32.const 1861077219)) - (i32.add (i32.const -1323654427)) - (i32.add (i32.const -270968534)) - (i32.add (i32.const 1630428310)) - (i32.add (i32.const -745332098)) - (i32.add (i32.const 440187859)) - (i32.add (i32.const 343752875)) - (i32.add (i32.const 353772596)) - (i32.add (i32.const 467878837)) - (i32.add (i32.const -514006184)) - (i32.add (i32.const 2071362043)) - (i32.add (i32.const 1767196396)) - (i32.add (i32.const 384149838)) - (i32.add (i32.const 1399254891)) - (i32.add (i32.const 538882107)) - (i32.add (i32.const -455750113)) - (i32.add (i32.const 1688697153)) - (i32.add (i32.const -141173596)) - (i32.add (i32.const -2073392115)) - (i32.add (i32.const 915824957)) - (i32.add (i32.const 1263074064)) - (i32.add (i32.const -1189604177)) - (i32.add (i32.const 1520698845)) - (i32.add (i32.const 633566536)) - (i32.add (i32.const -967981234)) - (i32.add (i32.const -1357992355)) - (i32.add (i32.const 1991408925)) - (i32.add (i32.const 262404610)) - (i32.add (i32.const 2113489446)) - (i32.add (i32.const 1708702223)) - (i32.add (i32.const -589025101)) - (i32.add (i32.const -102316474)) - (i32.add (i32.const 110020064)) - (i32.add (i32.const -893275968)) - (i32.add (i32.const 1585735666)) - (i32.add (i32.const -867953501)) - (i32.add (i32.const 801445726)) - (i32.add (i32.const -2130349129)) - (i32.add (i32.const -1009702387)) - (i32.add (i32.const 630120150)) - (i32.add (i32.const 252961903)) - (i32.add (i32.const -1619619706)) - (i32.add (i32.const -674009895)) - (i32.add (i32.const 1804866513)) - (i32.add (i32.const -1929544708)) - (i32.add (i32.const -1735574937)) - (i32.add (i32.const 1160322905)) - (i32.add (i32.const 1228261511)) - (i32.add (i32.const 1707052147)) - (i32.add (i32.const -942759364)) - (i32.add (i32.const 36230423)) - (i32.add (i32.const -1733771452)) - (i32.add (i32.const 264326174)) - (i32.add (i32.const -705515537)) - (i32.add (i32.const -886537320)) - (i32.add (i32.const 840229900)) - (i32.add (i32.const 2040939374)) - (i32.add (i32.const 932314459)) - (i32.add (i32.const 1569207374)) - (i32.add (i32.const -1205724685)) - (i32.add (i32.const -265893283)) - (i32.add (i32.const -1286318381)) - (i32.add (i32.const 261181617)) - (i32.add (i32.const -2130472227)) - (i32.add (i32.const 1218269419)) - (i32.add (i32.const -1662652700)) - (i32.add (i32.const -1643998678)) - (i32.add (i32.const -1112856454)) - (i32.add (i32.const -67289879)) - (i32.add (i32.const 1647100564)) - (i32.add (i32.const -420889642)) - (i32.add (i32.const 92468128)) - (i32.add (i32.const -1459340563)) - (i32.add (i32.const -813488772)) - (i32.add (i32.const 1313569749)) - (i32.add (i32.const 440257271)) - (i32.add (i32.const 143894344)) - (i32.add (i32.const -82092372)) - (i32.add (i32.const -1896278944)) - (i32.add (i32.const 1176788979)) - (i32.add (i32.const -387810582)) - (i32.add (i32.const 1189013703)) - (i32.add (i32.const -300685445)) - (i32.add (i32.const -487928809)) - (i32.add (i32.const 122249751)) - (i32.add (i32.const 2095867184)) - (i32.add (i32.const -450872694)) - (i32.add (i32.const 349518840)) - (i32.add (i32.const -617449577)) - (i32.add (i32.const -1815923438)) - (i32.add (i32.const 427355047)) - (i32.add (i32.const 858142384)) - (i32.add (i32.const 1007242954)) - (i32.add (i32.const 708693612)) - (i32.add (i32.const 766137148)) - (i32.add (i32.const -707283196)) - (i32.add (i32.const 912993285)) - (i32.add (i32.const -752964051)) - (i32.add (i32.const -1498131484)) - (i32.add (i32.const 948676305)) - (i32.add (i32.const 479347175)) - (i32.add (i32.const -916996859)) - (i32.add (i32.const -1898601931)) - (i32.add (i32.const 1754208637)) - (i32.add (i32.const -1337277345)) - (i32.add (i32.const -70595515)) - (i32.add (i32.const 1526357388)) - (i32.add (i32.const -2085172269)) - (i32.add (i32.const -1773208624)) - (i32.add (i32.const -1720792504)) - (i32.add (i32.const -1475233456)) - (i32.add (i32.const 1743793358)) - (i32.add (i32.const 494995520)) - (i32.add (i32.const 1245443007)) - (i32.add (i32.const -2089576351)) - (i32.add (i32.const 1415928394)) - (i32.add (i32.const -1453187501)) - (i32.add (i32.const -788729557)) - (i32.add (i32.const 1200886181)) - (i32.add (i32.const 142306124)) - (i32.add (i32.const -1724539698)) - (i32.add (i32.const 445974060)) - (i32.add (i32.const 1577324562)) - (i32.add (i32.const -12737106)) - (i32.add (i32.const 862270905)) - (i32.add (i32.const -736102702)) - (i32.add (i32.const -1259699910)) - (i32.add (i32.const -1527875333)) - (i32.add (i32.const -723328101)) - (i32.add (i32.const -1547723849)) - (i32.add (i32.const 1721508521)) - (i32.add (i32.const 445484225)) - (i32.add (i32.const 372251269)) - (i32.add (i32.const -1075607651)) - (i32.add (i32.const -943772261)) - (i32.add (i32.const -1543231430)) - (i32.add (i32.const 908107640)) - (i32.add (i32.const -1928321531)) - (i32.add (i32.const 320965444)) - (i32.add (i32.const 89482077)) - (i32.add (i32.const -5925759)) - (i32.add (i32.const -674013783)) - (i32.add (i32.const -2122314720)) - (i32.add (i32.const 1685558865)) - (i32.add (i32.const -624605741)) - (i32.add (i32.const 444171942)) - (i32.add (i32.const 396325310)) - (i32.add (i32.const -2024296225)) - (i32.add (i32.const -451576528)) - (i32.add (i32.const 473073978)) - (i32.add (i32.const -283060218)) - (i32.add (i32.const -275601967)) - (i32.add (i32.const -185451840)) - (i32.add (i32.const -1676962167)) - (i32.add (i32.const 231088234)) - (i32.add (i32.const -783131680)) - (i32.add (i32.const -1273190838)) - (i32.add (i32.const -1914721666)) - (i32.add (i32.const 1996910667)) - (i32.add (i32.const -1182513208)) - (i32.add (i32.const -1760307010)) - (i32.add (i32.const -1064692768)) - (i32.add (i32.const 452512074)) - (i32.add (i32.const -781819993)) - (i32.add (i32.const -867326756)) - (i32.add (i32.const 1834036313)) - (i32.add (i32.const -316996508)) - (i32.add (i32.const -1965832254)) - (i32.add (i32.const 1544787222)) - (i32.add (i32.const -29864050)) - (i32.add (i32.const -40365685)) - (i32.add (i32.const -627440590)) - (i32.add (i32.const 1234779215)) - (i32.add (i32.const 880579717)) - (i32.add (i32.const -173449438)) - (i32.add (i32.const -2119553799)) - (i32.add (i32.const 1151957897)) - (i32.add (i32.const 742163714)) - (i32.add (i32.const -1226593374)) - (i32.add (i32.const -1565001140)) - (i32.add (i32.const -2147452765)) - (i32.add (i32.const -1285251993)) - (i32.add (i32.const -1630042518)) - (i32.add (i32.const -151296325)) - (i32.add (i32.const 1449512887)) - (i32.add (i32.const 922269133)) - (i32.add (i32.const -610253746)) - (i32.add (i32.const -1368538873)) - (i32.add (i32.const 801034792)) - (i32.add (i32.const 247985800)) - (i32.add (i32.const -1813605118)) - (i32.add (i32.const 1205811666)) - (i32.add (i32.const -2098027380)) - (i32.add (i32.const 1506846543)) - (i32.add (i32.const -1355966690)) - (i32.add (i32.const 392676538)) - (i32.add (i32.const -966711246)) - (i32.add (i32.const -820637580)) - (i32.add (i32.const -891885352)) - (i32.add (i32.const -1207612485)) - (i32.add (i32.const 1012316661)) - (i32.add (i32.const -2082209324)) - (i32.add (i32.const 349984713)) - (i32.add (i32.const -755932439)) - (i32.add (i32.const -206959810)) - (i32.add (i32.const 35108277)) - (i32.add (i32.const -755314114)) - (i32.add (i32.const -1435355990)) - (i32.add (i32.const -377632342)) - (i32.add (i32.const 2138778525)) - (i32.add (i32.const -1568025658)) - (i32.add (i32.const -1564240220)) - (i32.add (i32.const -1899896580)) - (i32.add (i32.const 614288126)) - (i32.add (i32.const 272282181)) - (i32.add (i32.const -738567445)) - (i32.add (i32.const -942221239)) - (i32.add (i32.const 987966754)) - (i32.add (i32.const 1840845174)) - (i32.add (i32.const -1812589321)) - (i32.add (i32.const -245158089)) - (i32.add (i32.const 1279968061)) - (i32.add (i32.const -1368190637)) - (i32.add (i32.const 1693759770)) - (i32.add (i32.const 1416965932)) - (i32.add (i32.const 1828885342)) - (i32.add (i32.const 1541075398)) - (i32.add (i32.const 1199601555)) - (i32.add (i32.const 1749298322)) - (i32.add (i32.const -712635440)) - (i32.add (i32.const 2019640577)) - (i32.add (i32.const -1446452863)) - (i32.add (i32.const -1319671066)) - (i32.add (i32.const 1778423693)) - (i32.add (i32.const -1361275224)) - (i32.add (i32.const 797486423)) - (i32.add (i32.const 2003242130)) - (i32.add (i32.const -125496625)) - (i32.add (i32.const 1038874411)) - (i32.add (i32.const -768821167)) - (i32.add (i32.const -498779808)) - (i32.add (i32.const 1851396073)) - (i32.add (i32.const -660831356)) - (i32.add (i32.const 80144863)) - (i32.add (i32.const -539636688)) - (i32.add (i32.const 725352483)) - (i32.add (i32.const 1874465567)) - (i32.add (i32.const 278358309)) - (i32.add (i32.const 2077096100)) - (i32.add (i32.const -1763094256)) - (i32.add (i32.const -890055434)) - (i32.add (i32.const 162286278)) - (i32.add (i32.const -1863602088)) - (i32.add (i32.const 465807685)) - (i32.add (i32.const 2000269291)) - (i32.add (i32.const -74283116)) - (i32.add (i32.const -1373353098)) - (i32.add (i32.const 243374021)) - (i32.add (i32.const -837193118)) - (i32.add (i32.const -1039787283)) - (i32.add (i32.const 1258742104)) - (i32.add (i32.const -788916971)) - (i32.add (i32.const -1902140579)) - (i32.add (i32.const 202933440)) - (i32.add (i32.const 840074687)) - (i32.add (i32.const 1497775914)) - (i32.add (i32.const -748769967)) - (i32.add (i32.const 1188863109)) - (i32.add (i32.const -1770683681)) - (i32.add (i32.const -1817772432)) - (i32.add (i32.const 1060620843)) - (i32.add (i32.const -50470620)) - (i32.add (i32.const 2132727154)) - (i32.add (i32.const -1850518509)) - (i32.add (i32.const 1750539560)) - (i32.add (i32.const 1252230486)) - (i32.add (i32.const -1858001640)) - (i32.add (i32.const 1130500706)) - (i32.add (i32.const 1534875593)) - (i32.add (i32.const -1170975512)) - (i32.add (i32.const 2012460811)) - (i32.add (i32.const 2089057595)) - (i32.add (i32.const -1406007721)) - (i32.add (i32.const 1885420849)) - (i32.add (i32.const 492668846)) - (i32.add (i32.const -1204318922)) - (i32.add (i32.const -1280829169)) - (i32.add (i32.const -1368170935)) - (i32.add (i32.const -1152960454)) - (i32.add (i32.const 454677440)) - (i32.add (i32.const 1498348736)) - (i32.add (i32.const -551658967)) - (i32.add (i32.const -1244075811)) - (i32.add (i32.const -483990614)) - (i32.add (i32.const 775929222)) - (i32.add (i32.const -1365501062)) - (i32.add (i32.const 777309565)) - (i32.add (i32.const 526670748)) - (i32.add (i32.const -1807347785)) - (i32.add (i32.const 1453730356)) - (i32.add (i32.const 73117625)) - (i32.add (i32.const -1892442646)) - (i32.add (i32.const 2078284911)) - (i32.add (i32.const 779210614)) - (i32.add (i32.const -1351637095)) - (i32.add (i32.const -514531665)) - (i32.add (i32.const -1632506683)) - (i32.add (i32.const -1295236991)) - (i32.add (i32.const 148173146)) - (i32.add (i32.const -468718480)) - (i32.add (i32.const -25697295)) - (i32.add (i32.const -738321649)) - (i32.add (i32.const 1035693600)) - (i32.add (i32.const -952719999)) - (i32.add (i32.const -176034997)) - (i32.add (i32.const 1555795138)) - (i32.add (i32.const -2083227393)) - (i32.add (i32.const -2042995224)) - (i32.add (i32.const 2081701667)) - (i32.add (i32.const -2051005120)) - (i32.add (i32.const -105963469)) - (i32.add (i32.const -454975933)) - (i32.add (i32.const -2140409234)) - (i32.add (i32.const -1314602516)) - (i32.add (i32.const 1840948607)) - (i32.add (i32.const -1782275329)) - (i32.add (i32.const -636840235)) - (i32.add (i32.const -1661009469)) - (i32.add (i32.const 1632089483)) - (i32.add (i32.const -1852026344)) - (i32.add (i32.const 1618298123)) - (i32.add (i32.const -1471254540)) - (i32.add (i32.const -1443959465)) - (i32.add (i32.const -1832619382)) - (i32.add (i32.const -1332414117)) - (i32.add (i32.const 1854747478)) - (i32.add (i32.const -1097581412)) - (i32.add (i32.const 1586578865)) - (i32.add (i32.const 1250827460)) - (i32.add (i32.const 1417057287)) - (i32.add (i32.const -167564478)) - (i32.add (i32.const 1144183721)) - (i32.add (i32.const -162055327)) - (i32.add (i32.const 500133395)) - (i32.add (i32.const 1056437325)) - (i32.add (i32.const 268648104)) - (i32.add (i32.const 255725297)) - (i32.add (i32.const 1243870227)) - (i32.add (i32.const 1303346319)) - (i32.add (i32.const -1432846190)) - (i32.add (i32.const 666185510)) - (i32.add (i32.const -732178646)) - (i32.add (i32.const -1380479858)) - (i32.add (i32.const 1403470683)) - (i32.add (i32.const 673689712)) - (i32.add (i32.const -1483585308)) - (i32.add (i32.const -1049363757)) - (i32.add (i32.const -89618412)) - (i32.add (i32.const 684394296)) - (i32.add (i32.const -242089799)) - (i32.add (i32.const -1110323216)) - (i32.add (i32.const 1448007630)) - (i32.add (i32.const 783046077)) - (i32.add (i32.const -889443053)) - (i32.add (i32.const 958354404)) - (i32.add (i32.const 1276133294)) - (i32.add (i32.const 67107086)) - (i32.add (i32.const -480312870)) - (i32.add (i32.const -2140176536)) - (i32.add (i32.const -785955354)) - (i32.add (i32.const -276489963)) - (i32.add (i32.const 987327387)) - (i32.add (i32.const 1089734944)) - (i32.add (i32.const 254217225)) - (i32.add (i32.const -641436052)) - (i32.add (i32.const 78093325)) - (i32.add (i32.const -1579384622)) - (i32.add (i32.const -1849158243)) - (i32.add (i32.const 1109330541)) - (i32.add (i32.const 1553606511)) - (i32.add (i32.const 214164744)) - (i32.add (i32.const -1136335144)) - (i32.add (i32.const 1634724735)) - (i32.add (i32.const -800651985)) - (i32.add (i32.const 170757691)) - (i32.add (i32.const 1442182290)) - (i32.add (i32.const 2010960227)) - (i32.add (i32.const -1484049971)) - (i32.add (i32.const 339062345)) - (i32.add (i32.const 624345855)) - (i32.add (i32.const -1925923930)) - (i32.add (i32.const -1451119090)) - (i32.add (i32.const 1012972435)) - (i32.add (i32.const -1685748875)) - (i32.add (i32.const 991037141)) - (i32.add (i32.const -141102761)) - (i32.add (i32.const 490439366)) - (i32.add (i32.const 319457686)) - (i32.add (i32.const -463737027)) - (i32.add (i32.const 514185678)) - (i32.add (i32.const -303322925)) - (i32.add (i32.const -904095306)) - (i32.add (i32.const 122371947)) - (i32.add (i32.const -1899033804)) - (i32.add (i32.const 1028643373)) - (i32.add (i32.const 1629401334)) - (i32.add (i32.const -614335219)) - (i32.add (i32.const 974659929)) - (i32.add (i32.const 1941024491)) - (i32.add (i32.const 1530942168)) - (i32.add (i32.const -2108807869)) - (i32.add (i32.const -129997388)) - (i32.add (i32.const 1229736730)) - (i32.add (i32.const 2061524558)) - (i32.add (i32.const -981688570)) - (i32.add (i32.const -1770910043)) - (i32.add (i32.const 1279499620)) - (i32.add (i32.const 1195432211)) - (i32.add (i32.const 1760560045)) - (i32.add (i32.const -774404824)) - (i32.add (i32.const -1829185152)) - (i32.add (i32.const 975005213)) - (i32.add (i32.const -393951915)) - (i32.add (i32.const 628114912)) - (i32.add (i32.const -186292168)) - (i32.add (i32.const 545868486)) - (i32.add (i32.const 1230060651)) - (i32.add (i32.const 136826203)) - (i32.add (i32.const 1781939884)) - (i32.add (i32.const -1231701065)) - (i32.add (i32.const 347710298)) - (i32.add (i32.const 40291807)) - (i32.add (i32.const -1617629659)) - (i32.add (i32.const -1197851658)) - (i32.add (i32.const -1807986883)) - (i32.add (i32.const -1572963623)) - (i32.add (i32.const -241561118)) - (i32.add (i32.const -1452571753)) - (i32.add (i32.const -167851762)) - (i32.add (i32.const 1933688641)) - (i32.add (i32.const -650963543)) - (i32.add (i32.const 301740135)) - (i32.add (i32.const -999616819)) - (i32.add (i32.const 198219344)) - (i32.add (i32.const 543660194)) - (i32.add (i32.const -714873015)) - (i32.add (i32.const -1072004216)) - (i32.add (i32.const -935876942)) - (i32.add (i32.const -1123006815)) - (i32.add (i32.const -2123271546)) - (i32.add (i32.const -598669326)) - (i32.add (i32.const -112082503)) - (i32.add (i32.const -1997896711)) - (i32.add (i32.const -1784050157)) - (i32.add (i32.const 785721264)) - (i32.add (i32.const -1849633002)) - (i32.add (i32.const 1238914069)) - (i32.add (i32.const -1880700305)) - (i32.add (i32.const -2091362778)) - (i32.add (i32.const 325461969)) - (i32.add (i32.const -525823246)) - (i32.add (i32.const -2083355201)) - (i32.add (i32.const 118718392)) - (i32.add (i32.const 166207089)) - (i32.add (i32.const -866955022)) - (i32.add (i32.const -860106465)) - (i32.add (i32.const -615537820)) - (i32.add (i32.const -1589430030)) - (i32.add (i32.const -1522682457)) - (i32.add (i32.const 1664430228)) - (i32.add (i32.const -1579982148)) - (i32.add (i32.const 1658090273)) - (i32.add (i32.const -1505713703)) - (i32.add (i32.const 628926190)) - (i32.add (i32.const -43518230)) - (i32.add (i32.const -364584572)) - (i32.add (i32.const -1674796282)) - (i32.add (i32.const 143298797)) - (i32.add (i32.const -1126501411)) - (i32.add (i32.const 1337607554)) - (i32.add (i32.const 136885807)) - (i32.add (i32.const -1483980324)) - (i32.add (i32.const 1862175432)) - (i32.add (i32.const -424838064)) - (i32.add (i32.const -1878545051)) - (i32.add (i32.const -1137456413)) - (i32.add (i32.const 1610302524)) - (i32.add (i32.const 1463536253)) - (i32.add (i32.const -1889805677)) - (i32.add (i32.const -1854687400)) - (i32.add (i32.const 1092495914)) - (i32.add (i32.const 1569767272)) - (i32.add (i32.const -1402201644)) - (i32.add (i32.const -1819746522)) - (i32.add (i32.const -2141283419)) - (i32.add (i32.const 2138977032)) - (i32.add (i32.const -1865691268)) - (i32.add (i32.const -1475003569)) - (i32.add (i32.const 1125732062)) - (i32.add (i32.const -2079560337)) - (i32.add (i32.const -407814499)) - (i32.add (i32.const 348224835)) - (i32.add (i32.const -720636159)) - (i32.add (i32.const 1011551340)) - (i32.add (i32.const -183819664)) - (i32.add (i32.const 540855251)) - (i32.add (i32.const 1707070799)) - (i32.add (i32.const -871284359)) - (i32.add (i32.const -961693838)) - (i32.add (i32.const 203619107)) - (i32.add (i32.const -1572167301)) - (i32.add (i32.const 1135890473)) - (i32.add (i32.const 1773996002)) - (i32.add (i32.const 489625228)) - (i32.add (i32.const -48172100)) - (i32.add (i32.const 2024267845)) - (i32.add (i32.const -1085396947)) - (i32.add (i32.const -52873883)) - (i32.add (i32.const -1030427087)) - (i32.add (i32.const 1415242030)) - (i32.add (i32.const 1817357167)) - (i32.add (i32.const 1521486301)) - (i32.add (i32.const 111211400)) - (i32.add (i32.const 1911127448)) - (i32.add (i32.const 777031650)) - (i32.add (i32.const 23478759)) - (i32.add (i32.const 2019758746)) - (i32.add (i32.const -1578991701)) - (i32.add (i32.const 2010278149)) - (i32.add (i32.const -2081792177)) - (i32.add (i32.const 1402776487)) - (i32.add (i32.const 1651180434)) - (i32.add (i32.const -1944557550)) - (i32.add (i32.const -1208964402)) - (i32.add (i32.const -958832985)) - (i32.add (i32.const -717339808)) - (i32.add (i32.const 1451394693)) - (i32.add (i32.const 2088637449)) - (i32.add (i32.const 1261367300)) - (i32.add (i32.const 1266342485)) - (i32.add (i32.const 991642833)) - (i32.add (i32.const 1785426905)) - (i32.add (i32.const -967964076)) - (i32.add (i32.const -2061319045)) - (i32.add (i32.const 942368018)) - (i32.add (i32.const 30719810)) - (i32.add (i32.const -1102035843)) - (i32.add (i32.const 794067791)) - (i32.add (i32.const 943938994)) - (i32.add (i32.const -932962462)) - (i32.add (i32.const -1861093337)) - (i32.add (i32.const -567281279)) - (i32.add (i32.const 151702258)) - (i32.add (i32.const -215425432)) - (i32.add (i32.const 853275764)) - (i32.add (i32.const 2106825138)) - (i32.add (i32.const 409052630)) - (i32.add (i32.const -1129013939)) - (i32.add (i32.const 2050331790)) - (i32.add (i32.const -835316343)) - (i32.add (i32.const 418110822)) - (i32.add (i32.const 561277486)) - (i32.add (i32.const -149267856)) - (i32.add (i32.const 1004026352)) - (i32.add (i32.const -97506590)) - (i32.add (i32.const -1699441725)) - (i32.add (i32.const -1092110195)) - (i32.add (i32.const -165595700)) - (i32.add (i32.const -2061632724)) - (i32.add (i32.const 154802630)) - (i32.add (i32.const 585826873)) - (i32.add (i32.const -1429855914)) - (i32.add (i32.const -548240585)) - (i32.add (i32.const 69556349)) - (i32.add (i32.const 816094010)) - (i32.add (i32.const -671155374)) - (i32.add (i32.const -930265817)) - (i32.add (i32.const 1333685712)) - (i32.add (i32.const 571514001)) - (i32.add (i32.const -1086885478)) - (i32.add (i32.const -1951305310)) - (i32.add (i32.const -1647723558)) - (i32.add (i32.const 37066802)) - (i32.add (i32.const -693690070)) - (i32.add (i32.const -217836513)) - (i32.add (i32.const 642039800)) - (i32.add (i32.const -959600686)) - (i32.add (i32.const 1265078245)) - (i32.add (i32.const 407939464)) - (i32.add (i32.const -957674846)) - (i32.add (i32.const -8218854)) - (i32.add (i32.const -1284471839)) - (i32.add (i32.const 1165924131)) - (i32.add (i32.const 1032806502)) - (i32.add (i32.const -2071659821)) - (i32.add (i32.const -1732104353)) - (i32.add (i32.const 888449491)) - (i32.add (i32.const 1009169372)) - (i32.add (i32.const 758632514)) - (i32.add (i32.const -270034343)) - (i32.add (i32.const 611308548)) - (i32.add (i32.const 2047184324)) - (i32.add (i32.const -1974460886)) - (i32.add (i32.const -1825604696)) - (i32.add (i32.const -1450147791)) - (i32.add (i32.const 1051591088)) - (i32.add (i32.const 1120540086)) - (i32.add (i32.const 577313419)) - (i32.add (i32.const -125560761)) - (i32.add (i32.const 2125100439)) - (i32.add (i32.const 1632483768)) - (i32.add (i32.const -892921323)) - (i32.add (i32.const -527479213)) - (i32.add (i32.const 451639049)) - (i32.add (i32.const 322655670)) - (i32.add (i32.const 514013445)) - (i32.add (i32.const -611774786)) - (i32.add (i32.const 2137291226)) - (i32.add (i32.const -88412821)) - (i32.add (i32.const -470667369)) - (i32.add (i32.const 1232426923)) - (i32.add (i32.const -1424027198)) - (i32.add (i32.const 437355443)) - (i32.add (i32.const 1487684997)) - (i32.add (i32.const 215395376)) - (i32.add (i32.const -1732679866)) - (i32.add (i32.const 250426430)) - (i32.add (i32.const -1400416699)) - (i32.add (i32.const -2000650772)) - (i32.add (i32.const -1566075240)) - (i32.add (i32.const 1155102288)) - (i32.add (i32.const 1388266821)) - (i32.add (i32.const -33655338)) - (i32.add (i32.const 1400563525)) - (i32.add (i32.const -615030758)) - (i32.add (i32.const -2129899516)) - (i32.add (i32.const 1125969878)) - (i32.add (i32.const -617561958)) - (i32.add (i32.const -798832184)) - (i32.add (i32.const 358454910)) - (i32.add (i32.const 1937563539)) - (i32.add (i32.const 2010262194)) - (i32.add (i32.const 84774146)) - (i32.add (i32.const 920229131)) - (i32.add (i32.const 1065273754)) - (i32.add (i32.const -459333178)) - (i32.add (i32.const 233539532)) - (i32.add (i32.const -960171424)) - (i32.add (i32.const -27468573)) - (i32.add (i32.const -802982827)) - (i32.add (i32.const -1321040567)) - (i32.add (i32.const -2044071519)) - (i32.add (i32.const -1600844197)) - (i32.add (i32.const -21629764)) - (i32.add (i32.const -751126211)) - (i32.add (i32.const -434577382)) - (i32.add (i32.const 2103727646)) - (i32.add (i32.const 1279341677)) - (i32.add (i32.const 1220029617)) - (i32.add (i32.const 1301006240)) - (i32.add (i32.const 1754163228)) - (i32.add (i32.const 1267097804)) - (i32.add (i32.const 741168114)) - (i32.add (i32.const 996397075)) - (i32.add (i32.const 1205093089)) - (i32.add (i32.const 1485874875)) - (i32.add (i32.const -679457671)) - (i32.add (i32.const -147841567)) - (i32.add (i32.const -937151368)) - (i32.add (i32.const 440710447)) - (i32.add (i32.const -356990438)) - (i32.add (i32.const -654078147)) - (i32.add (i32.const -528525050)) - (i32.add (i32.const 1158168328)) - (i32.add (i32.const -555523418)) - (i32.add (i32.const -1259194156)) - (i32.add (i32.const 1083335522)) - (i32.add (i32.const 556255230)) - (i32.add (i32.const 476993640)) - (i32.add (i32.const -1510722969)) - (i32.add (i32.const -1964635307)) - (i32.add (i32.const 1733672651)) - (i32.add (i32.const -1607037116)) - (i32.add (i32.const 450600198)) - (i32.add (i32.const 1004113248)) - (i32.add (i32.const 1262257518)) - (i32.add (i32.const -1973729122)) - (i32.add (i32.const -50518216)) - (i32.add (i32.const -712238512)) - (i32.add (i32.const -1644988517)) - (i32.add (i32.const 1864607963)) - (i32.add (i32.const -2021699426)) - (i32.add (i32.const 1630659727)) - (i32.add (i32.const 1054006373)) - (i32.add (i32.const -1921372295)) - (i32.add (i32.const -1662654797)) - (i32.add (i32.const 1187211709)) - (i32.add (i32.const -571058302)) - (i32.add (i32.const -867088908)) - (i32.add (i32.const -102450236)) - (i32.add (i32.const -382398268)) - (i32.add (i32.const 1406267170)) - (i32.add (i32.const -651515232)) - (i32.add (i32.const -1063105837)) - (i32.add (i32.const -47589391)) - (i32.add (i32.const -2120015367)) - (i32.add (i32.const 251872266)) - (i32.add (i32.const -1347732058)) - (i32.add (i32.const 588495499)) - (i32.add (i32.const -439131159)) - (i32.add (i32.const 997034355)) - (i32.add (i32.const 1466284199)) - (i32.add (i32.const -1151587438)) - (i32.add (i32.const 2142810602)) - (i32.add (i32.const -275442475)) - (i32.add (i32.const 536400790)) - (i32.add (i32.const -871707416)) - (i32.add (i32.const -1236255378)) - (i32.add (i32.const -529513567)) - (i32.add (i32.const -192497442)) - (i32.add (i32.const -2109712812)) - (i32.add (i32.const 832126226)) - (i32.add (i32.const 1469210419)) - (i32.add (i32.const 733930774)) - (i32.add (i32.const -195538817)) - (i32.add (i32.const 1260820626)) - (i32.add (i32.const -1367539993)) - (i32.add (i32.const -2103455504)) - (i32.add (i32.const -106487418)) - (i32.add (i32.const 1725365081)) - (i32.add (i32.const 1246331467)) - (i32.add (i32.const -1652157955)) - (i32.add (i32.const 1985865474)) - (i32.add (i32.const 843098467)) - (i32.add (i32.const 600106124)) - (i32.add (i32.const 142174537)) - (i32.add (i32.const 1126403476)) - (i32.add (i32.const -1221908992)) - (i32.add (i32.const -1105316798)) - (i32.add (i32.const 2062380861)) - (i32.add (i32.const -833001821)) - (i32.add (i32.const -383400258)) - (i32.add (i32.const 2093078859)) - (i32.add (i32.const -1305149220)) - (i32.add (i32.const -144319820)) - (i32.add (i32.const 906020175)) - (i32.add (i32.const 693270796)) - (i32.add (i32.const -1783990773)) - (i32.add (i32.const 1635842533)) - (i32.add (i32.const -490698543)) - (i32.add (i32.const -2043505071)) - (i32.add (i32.const 1220789093)) - (i32.add (i32.const 1595552366)) - (i32.add (i32.const -18950205)) - (i32.add (i32.const -1016808135)) - (i32.add (i32.const 1057844393)) - (i32.add (i32.const -128553816)) - (i32.add (i32.const -602700215)) - (i32.add (i32.const -1783524079)) - (i32.add (i32.const 1525186824)) - (i32.add (i32.const 2112864784)) - (i32.add (i32.const 1487904311)) - (i32.add (i32.const 1023642927)) - (i32.add (i32.const 1437066319)) - (i32.add (i32.const -574476070)) - (i32.add (i32.const 1246112102)) - (i32.add (i32.const 1098799967)) - (i32.add (i32.const 983306075)) - (i32.add (i32.const -60492078)) - (i32.add (i32.const 19994846)) - (i32.add (i32.const 1188158820)) - (i32.add (i32.const 273835739)) - (i32.add (i32.const 1054286063)) - (i32.add (i32.const -163655286)) - (i32.add (i32.const 1668504346)) - (i32.add (i32.const 1446954044)) - (i32.add (i32.const 9454387)) - (i32.add (i32.const 1150452227)) - (i32.add (i32.const 2116953388)) - (i32.add (i32.const -942704097)) - (i32.add (i32.const -1381375045)) - (i32.add (i32.const -236206190)) - (i32.add (i32.const -749004125)) - (i32.add (i32.const -679788362)) - (i32.add (i32.const 1610045078)) - (i32.add (i32.const -57327738)) - (i32.add (i32.const 1768576988)) - (i32.add (i32.const 531038302)) - (i32.add (i32.const 550714915)) - (i32.add (i32.const -943148889)) - (i32.add (i32.const 1958738268)) - (i32.add (i32.const 937336015)) - (i32.add (i32.const 1771151729)) - (i32.add (i32.const -193266803)) - (i32.add (i32.const -59140722)) - (i32.add (i32.const 1368181587)) - (i32.add (i32.const 1433849639)) - (i32.add (i32.const 661288934)) - (i32.add (i32.const 1921442929)) - (i32.add (i32.const 2025382893)) - (i32.add (i32.const -1406769860)) - (i32.add (i32.const -1903218805)) - (i32.add (i32.const -204952949)) - (i32.add (i32.const -1638932771)) - (i32.add (i32.const -697562846)) - (i32.add (i32.const 2040682403)) - (i32.add (i32.const 1508648745)) - (i32.add (i32.const -816784141)) - (i32.add (i32.const 1446070803)) - (i32.add (i32.const 1756363931)) - (i32.add (i32.const -401476430)) - (i32.add (i32.const -437652623)) - (i32.add (i32.const -1481171861)) - (i32.add (i32.const 1872955750)) - (i32.add (i32.const -204157746)) - (i32.add (i32.const -2143740966)) - (i32.add (i32.const 1616459030)) - (i32.add (i32.const 279092430)) - (i32.add (i32.const 1463425938)) - (i32.add (i32.const 1298368488)) - (i32.add (i32.const -1420343617)) - (i32.add (i32.const -1425384897)) - (i32.add (i32.const 1262711686)) - (i32.add (i32.const -1593781436)) - (i32.add (i32.const -1138124272)) - (i32.add (i32.const 1196207843)) - (i32.add (i32.const -658833774)) - (i32.add (i32.const -2142959855)) - (i32.add (i32.const -624356132)) - (i32.add (i32.const 1015377345)) - (i32.add (i32.const 2037037956)) - (i32.add (i32.const -217748690)) - (i32.add (i32.const -1449949823)) - (i32.add (i32.const 2109180699)) - (i32.add (i32.const -101313720)) - (i32.add (i32.const 2129389358)) - (i32.add (i32.const 1605487285)) - (i32.add (i32.const 1505827761)) - (i32.add (i32.const -1722479590)) - (i32.add (i32.const -325973559)) - (i32.add (i32.const -223254640)) - (i32.add (i32.const -1757153822)) - (i32.add (i32.const -652336550)) - (i32.add (i32.const -1641787005)) - (i32.add (i32.const -1992910348)) - (i32.add (i32.const 645386629)) - (i32.add (i32.const -1778438402)) - (i32.add (i32.const 546860555)) - (i32.add (i32.const -1475761117)) - (i32.add (i32.const 14606047)) - (i32.add (i32.const -498462008)) - (i32.add (i32.const -1620850424)) - (i32.add (i32.const 1426306586)) - (i32.add (i32.const -1912782952)) - (i32.add (i32.const -723091520)) - (i32.add (i32.const 326602639)) - (i32.add (i32.const 1592406297)) - (i32.add (i32.const -262674701)) - (i32.add (i32.const -923468120)) - (i32.add (i32.const -1191551338)) - (i32.add (i32.const -1589571792)) - (i32.add (i32.const 1133670176)) - (i32.add (i32.const 119346390)) - (i32.add (i32.const 1652567245)) - (i32.add (i32.const -460706444)) - (i32.add (i32.const 860035691)) - (i32.add (i32.const -639158696)) - (i32.add (i32.const -2064542259)) - (i32.add (i32.const 862364470)) - (i32.add (i32.const 1262514361)) - (i32.add (i32.const -1169249426)) - (i32.add (i32.const 903692635)) - (i32.add (i32.const 1547504600)) - (i32.add (i32.const 1730099793)) - (i32.add (i32.const 2014666108)) - (i32.add (i32.const 208023998)) - (i32.add (i32.const 1080369891)) - (i32.add (i32.const 898202989)) - (i32.add (i32.const -944575966)) - (i32.add (i32.const -215980614)) - (i32.add (i32.const 1585534179)) - (i32.add (i32.const 1914341618)) - (i32.add (i32.const -1223466413)) - (i32.add (i32.const -1759555684)) - (i32.add (i32.const -1789359349)) - (i32.add (i32.const 1932507430)) - (i32.add (i32.const 1878507324)) - (i32.add (i32.const -645663224)) - (i32.add (i32.const 2041406152)) - (i32.add (i32.const 1403615065)) - (i32.add (i32.const -15225842)) - (i32.add (i32.const -1800346331)) - (i32.add (i32.const -1647248829)) - (i32.add (i32.const 1512214272)) - (i32.add (i32.const -447423870)) - (i32.add (i32.const 1329356111)) - (i32.add (i32.const 1268008503)) - (i32.add (i32.const -391860154)) - (i32.add (i32.const 1049449081)) - (i32.add (i32.const 1107168675)) - (i32.add (i32.const -1142838868)) - (i32.add (i32.const -1197983538)) - (i32.add (i32.const -547998279)) - (i32.add (i32.const -1501776317)) - (i32.add (i32.const 949271870)) - (i32.add (i32.const -920877708)) - (i32.add (i32.const 633320919)) - (i32.add (i32.const -1428844840)) - (i32.add (i32.const -103471994)) - (i32.add (i32.const -1144087817)) - (i32.add (i32.const -1742573408)) - (i32.add (i32.const -1300800564)) - (i32.add (i32.const 1216003037)) - (i32.add (i32.const 95688595)) - (i32.add (i32.const 1972858687)) - (i32.add (i32.const -1262845391)) - (i32.add (i32.const 1851504288)) - (i32.add (i32.const -1716147384)) - (i32.add (i32.const -572066553)) - (i32.add (i32.const 1533114444)) - (i32.add (i32.const -1716252416)) - (i32.add (i32.const -792370414)) - (i32.add (i32.const 2134822916)) - (i32.add (i32.const -1358994226)) - (i32.add (i32.const -698538409)) - (i32.add (i32.const -1233092466)) - (i32.add (i32.const 1311262818)) - (i32.add (i32.const 626572055)) - (i32.add (i32.const -1642332384)) - (i32.add (i32.const 616238297)) - (i32.add (i32.const -171789976)) - (i32.add (i32.const -451070297)) - (i32.add (i32.const 1285333685)) - (i32.add (i32.const 129628791)) - (i32.add (i32.const -421566701)) - (i32.add (i32.const 1650287396)) - (i32.add (i32.const 501577864)) - (i32.add (i32.const -1078152577)) - (i32.add (i32.const -554261507)) - (i32.add (i32.const -1893365939)) - (i32.add (i32.const -1884366498)) - (i32.add (i32.const -347911858)) - (i32.add (i32.const 568668404)) - (i32.add (i32.const -148029987)) - (i32.add (i32.const 177987340)) - (i32.add (i32.const 1624499554)) - (i32.add (i32.const -57593201)) - (i32.add (i32.const -11077468)) - (i32.add (i32.const -722434191)) - (i32.add (i32.const -1733698183)) - (i32.add (i32.const 118367759)) - (i32.add (i32.const 169046305)) - (i32.add (i32.const -1006017386)) - (i32.add (i32.const 1083112248)) - (i32.add (i32.const -1950892664)) - (i32.add (i32.const -638024480)) - (i32.add (i32.const -1308894707)) - (i32.add (i32.const 1347042130)) - (i32.add (i32.const 1836567580)) - (i32.add (i32.const 1512426416)) - (i32.add (i32.const -1970164818)) - (i32.add (i32.const -1408131879)) - (i32.add (i32.const -1092081034)) - (i32.add (i32.const -113653732)) - (i32.add (i32.const -512590048)) - (i32.add (i32.const 1292654839)) - (i32.add (i32.const -1656819921)) - (i32.add (i32.const -1913436136)) - (i32.add (i32.const -1806447995)) - (i32.add (i32.const -396038603)) - (i32.add (i32.const 1250312741)) - (i32.add (i32.const -707987206)) - (i32.add (i32.const -770470187)) - (i32.add (i32.const -1670471155)) - (i32.add (i32.const 776978535)) - (i32.add (i32.const -1417271964)) - (i32.add (i32.const -1214054285)) - (i32.add (i32.const -520840136)) - (i32.add (i32.const 149456999)) - (i32.add (i32.const 451892376)) - (i32.add (i32.const -1950703071)) - (i32.add (i32.const 107702080)) - (i32.add (i32.const 2124217957)) - (i32.add (i32.const -593803816)) - (i32.add (i32.const -293570745)) - (i32.add (i32.const 1054089280)) - (i32.add (i32.const -1569358540)) - (i32.add (i32.const -244428843)) - (i32.add (i32.const 1353189947)) - (i32.add (i32.const -813660435)) - (i32.add (i32.const 681341573)) - (i32.add (i32.const -613531720)) - (i32.add (i32.const 697509556)) - (i32.add (i32.const 733022488)) - (i32.add (i32.const 778332285)) - (i32.add (i32.const -1751614110)) - (i32.add (i32.const -1367631330)) - (i32.add (i32.const -293533136)) - (i32.add (i32.const 1661537554)) - (i32.add (i32.const 1676174148)) - (i32.add (i32.const 975226650)) - (i32.add (i32.const -1841172602)) - (i32.add (i32.const -1496018510)) - (i32.add (i32.const 2097279039)) - (i32.add (i32.const -1144620964)) - (i32.add (i32.const 769479619)) - (i32.add (i32.const -869347964)) - (i32.add (i32.const -1697472237)) - (i32.add (i32.const 2040705829)) - (i32.add (i32.const -1254268871)) - (i32.add (i32.const 1594905103)) - (i32.add (i32.const 888402392)) - (i32.add (i32.const -796528466)) - (i32.add (i32.const 545150775)) - (i32.add (i32.const -481243780)) - (i32.add (i32.const -1698258126)) - (i32.add (i32.const 1413049585)) - (i32.add (i32.const -1100986060)) - (i32.add (i32.const 1763857171)) - (i32.add (i32.const 1647426029)) - (i32.add (i32.const 1453015082)) - (i32.add (i32.const 1745015825)) - (i32.add (i32.const -1457830955)) - (i32.add (i32.const 167383193)) - (i32.add (i32.const 1752527498)) - (i32.add (i32.const -916924005)) - (i32.add (i32.const 76860709)) - (i32.add (i32.const -1295429284)) - (i32.add (i32.const -1404150752)) - (i32.add (i32.const 7624267)) - (i32.add (i32.const 809205419)) - (i32.add (i32.const 2033037809)) - (i32.add (i32.const 1473408782)) - (i32.add (i32.const 1121726490)) - (i32.add (i32.const -1554456704)) - (i32.add (i32.const -17910108)) - (i32.add (i32.const 470970433)) - (i32.add (i32.const -1259591975)) - (i32.add (i32.const 83127047)) - (i32.add (i32.const 955610870)) - (i32.add (i32.const -1566806749)) - (i32.add (i32.const -1149348663)) - (i32.add (i32.const 984771729)) - (i32.add (i32.const -1804959290)) - (i32.add (i32.const -1626575886)) - (i32.add (i32.const -1243125184)) - (i32.add (i32.const 312842325)) - (i32.add (i32.const -1270056892)) - (i32.add (i32.const 481532528)) - (i32.add (i32.const -364341520)) - (i32.add (i32.const 1539022430)) - (i32.add (i32.const 75499539)) - (i32.add (i32.const -1728032396)) - (i32.add (i32.const 72882137)) - (i32.add (i32.const -331150333)) - (i32.add (i32.const 1595392952)) - (i32.add (i32.const -1276865719)) - (i32.add (i32.const -1161975238)) - (i32.add (i32.const -748906568)) - (i32.add (i32.const 1787876377)) - (i32.add (i32.const 106841548)) - (i32.add (i32.const -1961548643)) - (i32.add (i32.const -2080960906)) - (i32.add (i32.const 2144017966)) - (i32.add (i32.const -534845501)) - (i32.add (i32.const 1648305167)) - (i32.add (i32.const 1056290315)) - (i32.add (i32.const -975731245)) - (i32.add (i32.const 96212892)) - (i32.add (i32.const -433741923)) - (i32.add (i32.const 681302321)) - (i32.add (i32.const 1398412257)) - (i32.add (i32.const -1682757487)) - (i32.add (i32.const 1060782070)) - (i32.add (i32.const 1210286868)) - (i32.add (i32.const -3086704)) - (i32.add (i32.const 1397503928)) - (i32.add (i32.const 222372335)) - (i32.add (i32.const -1157366227)) - (i32.add (i32.const -2114460184)) - (i32.add (i32.const -831874447)) - (i32.add (i32.const 1136380054)) - (i32.add (i32.const 405329998)) - (i32.add (i32.const 1442184697)) - (i32.add (i32.const 254433043)) - (i32.add (i32.const 58717647)) - (i32.add (i32.const -1290415869)) - (i32.add (i32.const -453368389)) - (i32.add (i32.const -424012371)) - (i32.add (i32.const -363355315)) - (i32.add (i32.const 179004265)) - (i32.add (i32.const 2134201970)) - (i32.add (i32.const 1572046475)) - (i32.add (i32.const 1377731009)) - (i32.add (i32.const 250559425)) - (i32.add (i32.const -495395813)) - (i32.add (i32.const -1726714602)) - (i32.add (i32.const 729181859)) - (i32.add (i32.const -1226847541)) - (i32.add (i32.const -573085723)) - (i32.add (i32.const -1265969246)) - (i32.add (i32.const 1411688286)) - (i32.add (i32.const -186191526)) - (i32.add (i32.const 847793864)) - (i32.add (i32.const -2041420753)) - (i32.add (i32.const 713366979)) - (i32.add (i32.const 42056701)) - (i32.add (i32.const 1215891722)) - (i32.add (i32.const -1217910303)) - (i32.add (i32.const -1715010490)) - (i32.add (i32.const 598306429)) - (i32.add (i32.const 691031278)) - (i32.add (i32.const -888675276)) - (i32.add (i32.const 107073549)) - (i32.add (i32.const 1511625231)) - (i32.add (i32.const 180028959)) - (i32.add (i32.const 1234786142)) - (i32.add (i32.const 1458832443)) - (i32.add (i32.const 1038907638)) - (i32.add (i32.const -1293268031)) - (i32.add (i32.const 1950503773)) - (i32.add (i32.const -1528997687)) - (i32.add (i32.const 465787940)) - (i32.add (i32.const -825784890)) - (i32.add (i32.const -1151163963)) - (i32.add (i32.const -1127541467)) - (i32.add (i32.const -1925872601)) - (i32.add (i32.const 2106283631)) - (i32.add (i32.const -1435184619)) - (i32.add (i32.const -377963737)) - (i32.add (i32.const 844613379)) - (i32.add (i32.const -436074093)) - (i32.add (i32.const -719636645)) - (i32.add (i32.const -504224451)) - (i32.add (i32.const 830846825)) - (i32.add (i32.const -1984784243)) - (i32.add (i32.const 1627733568)) - (i32.add (i32.const 721991970)) - (i32.add (i32.const -65480099)) - (i32.add (i32.const 1791434985)) - (i32.add (i32.const -1415736653)) - (i32.add (i32.const 1973204392)) - (i32.add (i32.const -581338540)) - (i32.add (i32.const 480411340)) - (i32.add (i32.const -1474052936)) - (i32.add (i32.const 1525080056)) - (i32.add (i32.const 1023036514)) - (i32.add (i32.const -443525680)) - (i32.add (i32.const 720003563)) - (i32.add (i32.const 1968569359)) - (i32.add (i32.const 314385426)) - (i32.add (i32.const 1427388194)) - (i32.add (i32.const 481630927)) - (i32.add (i32.const 1736299529)) - (i32.add (i32.const -83012060)) - (i32.add (i32.const 101657457)) - (i32.add (i32.const 1849652407)) - (i32.add (i32.const 725144156)) - (i32.add (i32.const 1439671506)) - (i32.add (i32.const -1057149053)) - (i32.add (i32.const 2051361361)) - (i32.add (i32.const 103647920)) - (i32.add (i32.const -1587915846)) - (i32.add (i32.const -1936435492)) - (i32.add (i32.const 1276079734)) - (i32.add (i32.const -1144114869)) - (i32.add (i32.const -2049029492)) - (i32.add (i32.const 850192979)) - (i32.add (i32.const -1253113009)) - (i32.add (i32.const 1247042977)) - (i32.add (i32.const 1074583340)) - (i32.add (i32.const -242025271)) - (i32.add (i32.const 1122866686)) - (i32.add (i32.const -2099012404)) - (i32.add (i32.const 1942014986)) - (i32.add (i32.const 1235166641)) - (i32.add (i32.const 1322414870)) - (i32.add (i32.const -1926611697)) - (i32.add (i32.const -671707529)) - (i32.add (i32.const 529022533)) - (i32.add (i32.const 1774584021)) - (i32.add (i32.const -2045362266)) - (i32.add (i32.const -555467094)) - (i32.add (i32.const -1408420360)) - (i32.add (i32.const -1499800883)) - (i32.add (i32.const 1793844565)) - (i32.add (i32.const 32459243)) - (i32.add (i32.const -89961872)) - (i32.add (i32.const 153145073)) - (i32.add (i32.const 97539940)) - (i32.add (i32.const 1028062079)) - (i32.add (i32.const 364744002)) - (i32.add (i32.const -1674667655)) - (i32.add (i32.const 1260395575)) - (i32.add (i32.const 1213907544)) - (i32.add (i32.const 687910231)) - (i32.add (i32.const 1505706316)) - (i32.add (i32.const 1237198250)) - (i32.add (i32.const 1703568513)) - (i32.add (i32.const 252709164)) - (i32.add (i32.const -1000289986)) - (i32.add (i32.const -973517371)) - (i32.add (i32.const -1710447588)) - (i32.add (i32.const 735585105)) - (i32.add (i32.const 50449455)) - (i32.add (i32.const -807048849)) - (i32.add (i32.const -1048103196)) - (i32.add (i32.const 668111079)) - (i32.add (i32.const -257371042)) - (i32.add (i32.const 1576014864)) - (i32.add (i32.const -835558239)) - (i32.add (i32.const -616555966)) - (i32.add (i32.const -142991344)) - (i32.add (i32.const -1069070516)) - (i32.add (i32.const -569391977)) - (i32.add (i32.const -159642680)) - (i32.add (i32.const -687421744)) - (i32.add (i32.const 1383249142)) - (i32.add (i32.const -285097159)) - (i32.add (i32.const 1781957356)) - (i32.add (i32.const -579502895)) - (i32.add (i32.const 1083590630)) - (i32.add (i32.const 1783413162)) - (i32.add (i32.const -2082371462)) - (i32.add (i32.const -2040701749)) - (i32.add (i32.const -1639757821)) - (i32.add (i32.const 1135465307)) - (i32.add (i32.const -675058904)) - (i32.add (i32.const -1413541976)) - (i32.add (i32.const -843260565)) - (i32.add (i32.const -486071615)) - (i32.add (i32.const 1074345952)) - (i32.add (i32.const -1938123162)) - (i32.add (i32.const 1552356144)) - (i32.add (i32.const -816772020)) - (i32.add (i32.const 1882685317)) - (i32.add (i32.const 1108402017)) - (i32.add (i32.const -953004579)) - (i32.add (i32.const 1620753160)) - (i32.add (i32.const -1985784187)) - (i32.add (i32.const 1312299384)) - (i32.add (i32.const 1119155527)) - (i32.add (i32.const -1359218969)) - (i32.add (i32.const 849063904)) - (i32.add (i32.const -1474886838)) - (i32.add (i32.const 1204303988)) - (i32.add (i32.const -330889338)) - (i32.add (i32.const -1962595241)) - (i32.add (i32.const -1432049526)) - (i32.add (i32.const -845629449)) - (i32.add (i32.const -1476365347)) - (i32.add (i32.const 840555475)) - (i32.add (i32.const -1563548539)) - (i32.add (i32.const -1814496486)) - (i32.add (i32.const 1792380075)) - (i32.add (i32.const -1887554052)) - (i32.add (i32.const 140394221)) - (i32.add (i32.const -1213611349)) - (i32.add (i32.const 1577099192)) - (i32.add (i32.const 805502730)) - (i32.add (i32.const 1063289582)) - (i32.add (i32.const -19921938)) - (i32.add (i32.const 342096960)) - (i32.add (i32.const 641991969)) - (i32.add (i32.const 1003988965)) - (i32.add (i32.const 1516744522)) - (i32.add (i32.const -1155555525)) - (i32.add (i32.const -1533340161)) - (i32.add (i32.const -1207289399)) - (i32.add (i32.const 634276724)) - (i32.add (i32.const -1323232399)) - (i32.add (i32.const 564588544)) - (i32.add (i32.const -2033450404)) - (i32.add (i32.const -559071325)) - (i32.add (i32.const -1485722477)) - (i32.add (i32.const -700331765)) - (i32.add (i32.const 1928427098)) - (i32.add (i32.const -973195970)) - (i32.add (i32.const -2001227812)) - (i32.add (i32.const -198506047)) - (i32.add (i32.const -963662032)) - (i32.add (i32.const -1038433018)) - (i32.add (i32.const 920102320)) - (i32.add (i32.const 688034186)) - (i32.add (i32.const 1390826766)) - (i32.add (i32.const 2066014855)) - (i32.add (i32.const 1915037480)) - (i32.add (i32.const 693780220)) - (i32.add (i32.const 1927368145)) - (i32.add (i32.const 1378433370)) - (i32.add (i32.const 1211481565)) - (i32.add (i32.const 658185239)) - (i32.add (i32.const -1309979799)) - (i32.add (i32.const -113656328)) - (i32.add (i32.const -1697345378)) - (i32.add (i32.const -353263625)) - (i32.add (i32.const -2055294744)) - (i32.add (i32.const 1149424810)) - (i32.add (i32.const 360252798)) - (i32.add (i32.const -1758815389)) - (i32.add (i32.const 1067770607)) - (i32.add (i32.const -807262393)) - (i32.add (i32.const 717447676)) - (i32.add (i32.const -1480603084)) - (i32.add (i32.const 701404676)) - (i32.add (i32.const 1661294972)) - (i32.add (i32.const 489366319)) - (i32.add (i32.const 784006692)) - (i32.add (i32.const 1275804091)) - (i32.add (i32.const -2090458553)) - (i32.add (i32.const 812026847)) - (i32.add (i32.const 1626935205)) - (i32.add (i32.const 1726154795)) - (i32.add (i32.const -1826488197)) - (i32.add (i32.const -319024997)) - (i32.add (i32.const 559752021)) - (i32.add (i32.const -1591574541)) - (i32.add (i32.const -893375365)) - (i32.add (i32.const 22247971)) - (i32.add (i32.const 103545760)) - (i32.add (i32.const 514124850)) - (i32.add (i32.const 1560952254)) - (i32.add (i32.const 1645329525)) - (i32.add (i32.const 609207737)) - (i32.add (i32.const 901241190)) - (i32.add (i32.const -630935917)) - (i32.add (i32.const -1763785848)) - (i32.add (i32.const 1809626248)) - (i32.add (i32.const -1383297458)) - (i32.add (i32.const -327228787)) - (i32.add (i32.const 432646753)) - (i32.add (i32.const 280548119)) - (i32.add (i32.const -16969591)) - (i32.add (i32.const 1784165205)) - (i32.add (i32.const -1858195400)) - (i32.add (i32.const -353417340)) - (i32.add (i32.const 1300038402)) - (i32.add (i32.const 443081712)) - (i32.add (i32.const -771411739)) - (i32.add (i32.const 1999639452)) - (i32.add (i32.const 759486670)) - (i32.add (i32.const 293439296)) - (i32.add (i32.const -422881060)) - (i32.add (i32.const -1896315014)) - (i32.add (i32.const -29692315)) - (i32.add (i32.const -182895964)) - (i32.add (i32.const -771232289)) - (i32.add (i32.const 1267463582)) - (i32.add (i32.const 653474867)) - (i32.add (i32.const -1698421028)) - (i32.add (i32.const 838825498)) - (i32.add (i32.const -1384748966)) - (i32.add (i32.const -2081895895)) - (i32.add (i32.const 163071634)) - (i32.add (i32.const -181231798)) - (i32.add (i32.const -2006674074)) - (i32.add (i32.const 1537985472)) - (i32.add (i32.const -928863095)) - (i32.add (i32.const -40890730)) - (i32.add (i32.const -1363098597)) - (i32.add (i32.const 17751719)) - (i32.add (i32.const -1744704782)) - (i32.add (i32.const -207102604)) - (i32.add (i32.const -1161943958)) - (i32.add (i32.const -342451858)) - (i32.add (i32.const 912375885)) - (i32.add (i32.const -928635042)) - (i32.add (i32.const 352468783)) - (i32.add (i32.const -1526655665)) - (i32.add (i32.const 294828076)) - (i32.add (i32.const 2141922184)) - (i32.add (i32.const -836555102)) - (i32.add (i32.const -673739406)) - (i32.add (i32.const 455545577)) - (i32.add (i32.const 1649841247)) - (i32.add (i32.const -1475144990)) - (i32.add (i32.const 1770112405)) - (i32.add (i32.const -345541824)) - (i32.add (i32.const 1425690356)) - (i32.add (i32.const 1484593085)) - (i32.add (i32.const -1528577284)) - (i32.add (i32.const 1184638818)) - (i32.add (i32.const 918200453)) - (i32.add (i32.const -886231570)) - (i32.add (i32.const 2075455788)) - (i32.add (i32.const -453400633)) - (i32.add (i32.const 1390156778)) - (i32.add (i32.const 89861807)) - (i32.add (i32.const -1798919655)) - (i32.add (i32.const 1469591224)) - (i32.add (i32.const 737463946)) - (i32.add (i32.const 1476308019)) - (i32.add (i32.const -206474738)) - (i32.add (i32.const 302116648)) - (i32.add (i32.const 1831237030)) - (i32.add (i32.const 604549112)) - (i32.add (i32.const 262344545)) - (i32.add (i32.const 1897479332)) - (i32.add (i32.const -392030145)) - (i32.add (i32.const -2040303541)) - (i32.add (i32.const -801579523)) - (i32.add (i32.const -1447846485)) - (i32.add (i32.const 333946625)) - (i32.add (i32.const 403699643)) - (i32.add (i32.const 1090165367)) - (i32.add (i32.const 239360073)) - (i32.add (i32.const -693883451)) - (i32.add (i32.const -1573544760)) - (i32.add (i32.const 415508919)) - (i32.add (i32.const -1309442118)) - (i32.add (i32.const 1358274738)) - (i32.add (i32.const -1553218409)) - (i32.add (i32.const -1510298422)) - (i32.add (i32.const -248206027)) - (i32.add (i32.const -1638893585)) - (i32.add (i32.const -433603536)) - (i32.add (i32.const -1771444530)) - (i32.add (i32.const 833847637)) - (i32.add (i32.const -1099892923)) - (i32.add (i32.const -1914095044)) - (i32.add (i32.const -1428137452)) - (i32.add (i32.const 444570809)) - (i32.add (i32.const -1867013719)) - (i32.add (i32.const -123296996)) - (i32.add (i32.const -1729336713)) - (i32.add (i32.const 359713024)) - (i32.add (i32.const -1483140774)) - (i32.add (i32.const -1547654896)) - (i32.add (i32.const -1801947876)) - (i32.add (i32.const -891401121)) - (i32.add (i32.const -1849410045)) - (i32.add (i32.const -419376594)) - (i32.add (i32.const 104648487)) - (i32.add (i32.const -1033842137)) - (i32.add (i32.const -1613237936)) - (i32.add (i32.const 929954812)) - (i32.add (i32.const -156798517)) - (i32.add (i32.const -964768862)) - (i32.add (i32.const -435664150)) - (i32.add (i32.const -6597752)) - (i32.add (i32.const -121905932)) - (i32.add (i32.const -1056537468)) - (i32.add (i32.const -402793310)) - (i32.add (i32.const 425130340)) - (i32.add (i32.const 654591497)) - (i32.add (i32.const 1428691089)) - (i32.add (i32.const -888264722)) - (i32.add (i32.const 805604676)) - (i32.add (i32.const 234117670)) - (i32.add (i32.const -989211505)) - (i32.add (i32.const -641959880)) - (i32.add (i32.const 2555780)) - (i32.add (i32.const 1176069085)) - (i32.add (i32.const 1466740711)) - (i32.add (i32.const 1950914882)) - (i32.add (i32.const 1946289980)) - (i32.add (i32.const -396878681)) - (i32.add (i32.const 952010276)) - (i32.add (i32.const 402337959)) - (i32.add (i32.const -33257465)) - (i32.add (i32.const 348354678)) - (i32.add (i32.const -1091232842)) - (i32.add (i32.const 505504817)) - (i32.add (i32.const 1805506084)) - (i32.add (i32.const 741103414)) - (i32.add (i32.const 453160048)) - (i32.add (i32.const 1471273746)) - (i32.add (i32.const 1558843684)) - (i32.add (i32.const -375170712)) - (i32.add (i32.const -1892493601)) - (i32.add (i32.const -528689912)) - (i32.add (i32.const 1098130035)) - (i32.add (i32.const -1538951204)) - (i32.add (i32.const -1843063752)) - (i32.add (i32.const -853057519)) - (i32.add (i32.const 250060159)) - (i32.add (i32.const 1363126822)) - (i32.add (i32.const -1086434538)) - (i32.add (i32.const 700897791)) - (i32.add (i32.const 1518007121)) - (i32.add (i32.const 1251413420)) - (i32.add (i32.const 852107114)) - (i32.add (i32.const 2123710895)) - (i32.add (i32.const 700696961)) - (i32.add (i32.const -511406366)) - (i32.add (i32.const -716555498)) - (i32.add (i32.const 1824697091)) - (i32.add (i32.const -798457836)) - (i32.add (i32.const -42080325)) - (i32.add (i32.const -233547050)) - (i32.add (i32.const -401771022)) - (i32.add (i32.const -1262877354)) - (i32.add (i32.const 1408135022)) - (i32.add (i32.const -533434264)) - (i32.add (i32.const -246491962)) - (i32.add (i32.const -401265497)) - (i32.add (i32.const -2086370274)) - (i32.add (i32.const -1186269682)) - (i32.add (i32.const -980121687)) - (i32.add (i32.const -553963732)) - (i32.add (i32.const 506665374)) - (i32.add (i32.const 1925272914)) - (i32.add (i32.const -842126199)) - (i32.add (i32.const 1867410625)) - (i32.add (i32.const 1867628203)) - (i32.add (i32.const 1856903927)) - (i32.add (i32.const -1277050094)) - (i32.add (i32.const -367018628)) - (i32.add (i32.const -376303762)) - (i32.add (i32.const 976023770)) - (i32.add (i32.const -2064069036)) - (i32.add (i32.const -1445774425)) - (i32.add (i32.const 1918504651)) - (i32.add (i32.const 1036630928)) - (i32.add (i32.const -542533790)) - (i32.add (i32.const -692955062)) - (i32.add (i32.const 2044084428)) - (i32.add (i32.const -845782020)) - (i32.add (i32.const 1560928038)) - (i32.add (i32.const 342305192)) - (i32.add (i32.const 78167578)) - (i32.add (i32.const 561239827)) - (i32.add (i32.const 255135363)) - (i32.add (i32.const 1144530757)) - (i32.add (i32.const -1751665412)) - (i32.add (i32.const 423302755)) - (i32.add (i32.const -356635928)) - (i32.add (i32.const -279862160)) - (i32.add (i32.const -1287050430)) - (i32.add (i32.const -1364877653)) - (i32.add (i32.const 1884772368)) - (i32.add (i32.const 444801351)) - (i32.add (i32.const 685519463)) - (i32.add (i32.const 2057074196)) - (i32.add (i32.const -618955899)) - (i32.add (i32.const 1396267669)) - (i32.add (i32.const -918487732)) - (i32.add (i32.const 772635059)) - (i32.add (i32.const -1263005402)) - (i32.add (i32.const -355877152)) - (i32.add (i32.const 1623341722)) - (i32.add (i32.const 237555984)) - (i32.add (i32.const 1304324257)) - (i32.add (i32.const -1712623855)) - (i32.add (i32.const -1423928988)) - (i32.add (i32.const -684356930)) - (i32.add (i32.const -1919240824)) - (i32.add (i32.const -1348081493)) - (i32.add (i32.const 874901738)) - (i32.add (i32.const -1469197418)) - (i32.add (i32.const -618109805)) - (i32.add (i32.const -1498235727)) - (i32.add (i32.const 924100966)) - (i32.add (i32.const 1539079310)) - (i32.add (i32.const 96421230)) - (i32.add (i32.const 969712448)) - (i32.add (i32.const -1934095758)) - (i32.add (i32.const 498494197)) - (i32.add (i32.const 885117793)) - (i32.add (i32.const 1729354376)) - (i32.add (i32.const 186251678)) - (i32.add (i32.const -1833101188)) - (i32.add (i32.const 517153511)) - (i32.add (i32.const 1505800489)) - (i32.add (i32.const -2136080453)) - (i32.add (i32.const 289729974)) - (i32.add (i32.const 1954700104)) - (i32.add (i32.const -488614333)) - (i32.add (i32.const -542465976)) - (i32.add (i32.const -620006902)) - (i32.add (i32.const 185820327)) - (i32.add (i32.const 504754426)) - (i32.add (i32.const 886906953)) - (i32.add (i32.const 1060418018)) - (i32.add (i32.const -1409511616)) - (i32.add (i32.const 1022919210)) - (i32.add (i32.const 1724716423)) - (i32.add (i32.const 571411461)) - (i32.add (i32.const -1141121378)) - (i32.add (i32.const 812428418)) - (i32.add (i32.const 1244664953)) - (i32.add (i32.const -2132590325)) - (i32.add (i32.const 1745334697)) - (i32.add (i32.const -1077093708)) - (i32.add (i32.const 1485615253)) - (i32.add (i32.const -1709112042)) - (i32.add (i32.const -1527531488)) - (i32.add (i32.const 1417496369)) - (i32.add (i32.const 477786351)) - (i32.add (i32.const -1462677913)) - (i32.add (i32.const -1090948288)) - (i32.add (i32.const -70039370)) - (i32.add (i32.const 2060028052)) - (i32.add (i32.const 1934394833)) - (i32.add (i32.const 18321502)) - (i32.add (i32.const 1805951038)) - (i32.add (i32.const 83006496)) - (i32.add (i32.const 1897764800)) - (i32.add (i32.const -2002643443)) - (i32.add (i32.const -175607535)) - (i32.add (i32.const -2007163440)) - (i32.add (i32.const 2113431805)) - (i32.add (i32.const -1110518339)) - (i32.add (i32.const 356303952)) - (i32.add (i32.const 1958780996)) - (i32.add (i32.const -1927970132)) - (i32.add (i32.const -1713768518)) - (i32.add (i32.const 58509245)) - (i32.add (i32.const -458820336)) - (i32.add (i32.const 420901528)) - (i32.add (i32.const 27414098)) - (i32.add (i32.const -1600143020)) - (i32.add (i32.const -953153622)) - (i32.add (i32.const 1259049648)) - (i32.add (i32.const -14387354)) - (i32.add (i32.const -1391983475)) - (i32.add (i32.const -2137439705)) - (i32.add (i32.const -1865723861)) - (i32.add (i32.const 883833153)) - (i32.add (i32.const 549841586)) - (i32.add (i32.const -580096280)) - (i32.add (i32.const -2065713282)) - (i32.add (i32.const -1499805579)) - (i32.add (i32.const 1782686193)) - (i32.add (i32.const -1295809905)) - (i32.add (i32.const -1536609898)) - (i32.add (i32.const 1202117847)) - (i32.add (i32.const -1462637576)) - (i32.add (i32.const -969441052)) - (i32.add (i32.const -657685530)) - (i32.add (i32.const -41943428)) - (i32.add (i32.const -1897476854)) - (i32.add (i32.const -1792925699)) - (i32.add (i32.const -104593331)) - (i32.add (i32.const 1771789989)) - (i32.add (i32.const 574025187)) - (i32.add (i32.const -129123218)) - (i32.add (i32.const 1881072416)) - (i32.add (i32.const -234636199)) - (i32.add (i32.const 419872099)) - (i32.add (i32.const 636990609)) - (i32.add (i32.const 497103246)) - (i32.add (i32.const 306163913)) - (i32.add (i32.const 762206440)) - (i32.add (i32.const 1646344440)) - (i32.add (i32.const -975376125)) - (i32.add (i32.const -1654185809)) - (i32.add (i32.const 1736177901)) - (i32.add (i32.const -1283515100)) - (i32.add (i32.const 422615677)) - (i32.add (i32.const -338060867)) - (i32.add (i32.const 717980509)) - (i32.add (i32.const 1343226892)) - (i32.add (i32.const 489712745)) - (i32.add (i32.const -1919353203)) - (i32.add (i32.const -856499370)) - (i32.add (i32.const 393509281)) - (i32.add (i32.const -1123248307)) - (i32.add (i32.const 2079086036)) - (i32.add (i32.const -387593272)) - (i32.add (i32.const 921291658)) - (i32.add (i32.const -1473342370)) - (i32.add (i32.const -11164816)) - (i32.add (i32.const -330215493)) - (i32.add (i32.const 1828385926)) - (i32.add (i32.const 738672735)) - (i32.add (i32.const -993464271)) - (i32.add (i32.const 1645246409)) - (i32.add (i32.const -1687414741)) - (i32.add (i32.const 439112695)) - (i32.add (i32.const -1343460207)) - (i32.add (i32.const -988987281)) - (i32.add (i32.const -93247124)) - (i32.add (i32.const -737241610)) - (i32.add (i32.const -1311414153)) - (i32.add (i32.const -2103678026)) - (i32.add (i32.const 872844051)) - (i32.add (i32.const 859083040)) - (i32.add (i32.const 1609261692)) - (i32.add (i32.const 788636129)) - (i32.add (i32.const 737939773)) - (i32.add (i32.const 1221256589)) - (i32.add (i32.const 1975864153)) - (i32.add (i32.const -358866282)) - (i32.add (i32.const -1853942646)) - (i32.add (i32.const -1671222392)) - (i32.add (i32.const -773350848)) - (i32.add (i32.const -549746639)) - (i32.add (i32.const 513360565)) - (i32.add (i32.const 1127945380)) - (i32.add (i32.const 1197331866)) - (i32.add (i32.const 1611973671)) - (i32.add (i32.const -1731203907)) - (i32.add (i32.const -1523474588)) - (i32.add (i32.const 955596358)) - (i32.add (i32.const -808461718)) - (i32.add (i32.const -1491503332)) - (i32.add (i32.const 1858080578)) - (i32.add (i32.const -217846456)) - (i32.add (i32.const -1335246360)) - (i32.add (i32.const -1231767563)) - (i32.add (i32.const 1125415624)) - (i32.add (i32.const -1129748110)) - (i32.add (i32.const 1150401697)) - (i32.add (i32.const -646122653)) - (i32.add (i32.const 1130858606)) - (i32.add (i32.const -956782076)) - (i32.add (i32.const -1157176531)) - (i32.add (i32.const 251528441)) - (i32.add (i32.const -1327475303)) - (i32.add (i32.const -520612458)) - (i32.add (i32.const 23088508)) - (i32.add (i32.const -918349454)) - (i32.add (i32.const 787919976)) - (i32.add (i32.const 67046424)) - (i32.add (i32.const -199972201)) - (i32.add (i32.const 1408190625)) - (i32.add (i32.const -1354427395)) - (i32.add (i32.const 2092051944)) - (i32.add (i32.const 1059063921)) - (i32.add (i32.const -392717106)) - (i32.add (i32.const 380419230)) - (i32.add (i32.const -1391196833)) - (i32.add (i32.const -388648021)) - (i32.add (i32.const 1966608974)) - (i32.add (i32.const 126976071)) - (i32.add (i32.const -813590871)) - (i32.add (i32.const 93042873)) - (i32.add (i32.const -489980882)) - (i32.add (i32.const -334029012)) - (i32.add (i32.const -1482959040)) - (i32.add (i32.const 163771153)) - (i32.add (i32.const 794896084)) - (i32.add (i32.const 1762607653)) - (i32.add (i32.const 1329456755)) - (i32.add (i32.const -432544352)) - (i32.add (i32.const -478822723)) - (i32.add (i32.const -1356326862)) - (i32.add (i32.const -1802087626)) - (i32.add (i32.const -1544263899)) - (i32.add (i32.const 627263821)) - (i32.add (i32.const 2034943791)) - (i32.add (i32.const -1944191391)) - (i32.add (i32.const -1675063173)) - (i32.add (i32.const 1627757942)) - (i32.add (i32.const 1302399500)) - (i32.add (i32.const -940359840)) - (i32.add (i32.const 315188747)) - (i32.add (i32.const -1970914095)) - (i32.add (i32.const 1663587814)) - (i32.add (i32.const 374355911)) - (i32.add (i32.const 1772201508)) - (i32.add (i32.const 2088951382)) - (i32.add (i32.const 293616194)) - (i32.add (i32.const 1233671245)) - (i32.add (i32.const 868218842)) - (i32.add (i32.const 1326543494)) - (i32.add (i32.const -1628240648)) - (i32.add (i32.const 1330205160)) - (i32.add (i32.const 175282506)) - (i32.add (i32.const -66680057)) - (i32.add (i32.const 1662040869)) - (i32.add (i32.const 316563265)) - (i32.add (i32.const -1763136563)) - (i32.add (i32.const 1215875736)) - (i32.add (i32.const -86682617)) - (i32.add (i32.const -873675741)) - (i32.add (i32.const 861968187)) - (i32.add (i32.const 1139489651)) - (i32.add (i32.const 1959509741)) - (i32.add (i32.const -188813101)) - (i32.add (i32.const -156553667)) - (i32.add (i32.const -1798361343)) - (i32.add (i32.const 1060957556)) - (i32.add (i32.const 1953945323)) - (i32.add (i32.const 434717918)) - (i32.add (i32.const 672651114)) - (i32.add (i32.const 131924507)) - (i32.add (i32.const -851184856)) - (i32.add (i32.const -2079037077)) - (i32.add (i32.const -506309636)) - (i32.add (i32.const -640377076)) - (i32.add (i32.const 193401783)) - (i32.add (i32.const -1029164980)) - (i32.add (i32.const -451553816)) - (i32.add (i32.const 1186489946)) - (i32.add (i32.const -1589005657)) - (i32.add (i32.const 496474282)) - (i32.add (i32.const -71619591)) - (i32.add (i32.const -1899383072)) - (i32.add (i32.const 1380077363)) - (i32.add (i32.const -2003070569)) - (i32.add (i32.const -397445643)) - (i32.add (i32.const -1271872044)) - (i32.add (i32.const 891998866)) - (i32.add (i32.const -1881014885)) - (i32.add (i32.const -371627474)) - (i32.add (i32.const 2073397987)) - (i32.add (i32.const 502324487)) - (i32.add (i32.const 2135175745)) - (i32.add (i32.const -1942444503)) - (i32.add (i32.const -1994458297)) - (i32.add (i32.const 1483879275)) - (i32.add (i32.const -1190036984)) - (i32.add (i32.const 1246675572)) - (i32.add (i32.const 781107778)) - (i32.add (i32.const 402036181)) - (i32.add (i32.const 945417242)) - (i32.add (i32.const -1734258006)) - (i32.add (i32.const 178071919)) - (i32.add (i32.const 44533654)) - (i32.add (i32.const -949080789)) - (i32.add (i32.const 1333595978)) - (i32.add (i32.const -1759882316)) - (i32.add (i32.const -1102313514)) - (i32.add (i32.const 1642084607)) - (i32.add (i32.const -582468533)) - (i32.add (i32.const -1301912688)) - (i32.add (i32.const -35350831)) - (i32.add (i32.const -1333890940)) - (i32.add (i32.const 948850936)) - (i32.add (i32.const 222786296)) - (i32.add (i32.const 352028838)) - (i32.add (i32.const -1861573922)) - (i32.add (i32.const 999396817)) - (i32.add (i32.const 987430966)) - (i32.add (i32.const 1171174977)) - (i32.add (i32.const 885872927)) - (i32.add (i32.const -1873618039)) - (i32.add (i32.const -1414525864)) - (i32.add (i32.const 375915710)) - (i32.add (i32.const 1758667722)) - (i32.add (i32.const -210759056)) - (i32.add (i32.const -1542199920)) - (i32.add (i32.const -940258507)) - (i32.add (i32.const 353199431)) - (i32.add (i32.const 569295880)) - (i32.add (i32.const -1472608331)) - (i32.add (i32.const 326541950)) - (i32.add (i32.const 55198613)) - (i32.add (i32.const 534299561)) - (i32.add (i32.const 1654536183)) - (i32.add (i32.const 1316535502)) - (i32.add (i32.const -1943175701)) - (i32.add (i32.const -1168926517)) - (i32.add (i32.const -326490038)) - (i32.add (i32.const -1972655575)) - (i32.add (i32.const -957577507)) - (i32.add (i32.const -594915243)) - (i32.add (i32.const -1716104662)) - (i32.add (i32.const 1889678829)) - (i32.add (i32.const 129635677)) - (i32.add (i32.const 1035258608)) - (i32.add (i32.const 300931604)) - (i32.add (i32.const 2083216201)) - (i32.add (i32.const 446691044)) - (i32.add (i32.const 1683224706)) - (i32.add (i32.const -1479796075)) - (i32.add (i32.const 178780935)) - (i32.add (i32.const 821190765)) - (i32.add (i32.const -529645486)) - (i32.add (i32.const 1205388688)) - (i32.add (i32.const -1669538391)) - (i32.add (i32.const 119309446)) - (i32.add (i32.const 1137630419)) - (i32.add (i32.const 1253522248)) - (i32.add (i32.const 1515736759)) - (i32.add (i32.const 1479333158)) - (i32.add (i32.const 1153245476)) - (i32.add (i32.const -700006647)) - (i32.add (i32.const 905594646)) - (i32.add (i32.const 671141641)) - (i32.add (i32.const -827985345)) - (i32.add (i32.const 955830279)) - (i32.add (i32.const 633153013)) - (i32.add (i32.const -1018102070)) - (i32.add (i32.const -858683639)) - (i32.add (i32.const -1866036334)) - (i32.add (i32.const -2134985907)) - (i32.add (i32.const 748794095)) - (i32.add (i32.const 1958227991)) - (i32.add (i32.const -1149903436)) - (i32.add (i32.const -1396190860)) - (i32.add (i32.const 2048105393)) - (i32.add (i32.const -1288315031)) - (i32.add (i32.const 268623089)) - (i32.add (i32.const -1837970224)) - (i32.add (i32.const 811513168)) - (i32.add (i32.const -1518395658)) - (i32.add (i32.const 1380908156)) - (i32.add (i32.const 1949385803)) - (i32.add (i32.const 1869863830)) - (i32.add (i32.const -376971400)) - (i32.add (i32.const -2118999083)) - (i32.add (i32.const -6562954)) - (i32.add (i32.const 1960451706)) - (i32.add (i32.const 739642458)) - (i32.add (i32.const -841031503)) - (i32.add (i32.const -659861669)) - (i32.add (i32.const -1870063767)) - (i32.add (i32.const -97634816)) - (i32.add (i32.const 1016088185)) - (i32.add (i32.const 2004630997)) - (i32.add (i32.const 1220807882)) - (i32.add (i32.const 169999653)) - (i32.add (i32.const 2056226157)) - (i32.add (i32.const 1154716761)) - (i32.add (i32.const -2120433857)) - (i32.add (i32.const 181557577)) - (i32.add (i32.const -962212266)) - (i32.add (i32.const 1163207244)) - (i32.add (i32.const 505602351)) - (i32.add (i32.const -47953883)) - (i32.add (i32.const -1926672143)) - (i32.add (i32.const -1229500194)) - (i32.add (i32.const 1773950741)) - (i32.add (i32.const -2051739062)) - (i32.add (i32.const -1557186418)) - (i32.add (i32.const -1629779139)) - (i32.add (i32.const -2132808213)) - (i32.add (i32.const -718453908)) - (i32.add (i32.const 1978447362)) - (i32.add (i32.const -369472732)) - (i32.add (i32.const 1117900406)) - (i32.add (i32.const 1381542729)) - (i32.add (i32.const -2069192666)) - (i32.add (i32.const 1725519787)) - (i32.add (i32.const -1426325430)) - (i32.add (i32.const 1355131982)) - (i32.add (i32.const -1174423933)) - (i32.add (i32.const 707677592)) - (i32.add (i32.const 523072233)) - (i32.add (i32.const 379287263)) - (i32.add (i32.const -1596754284)) - (i32.add (i32.const 181973338)) - (i32.add (i32.const 1085647032)) - (i32.add (i32.const 1184098171)) - (i32.add (i32.const 1664060731)) - (i32.add (i32.const 423400191)) - (i32.add (i32.const -1239367581)) - (i32.add (i32.const 777691312)) - (i32.add (i32.const 690515220)) - (i32.add (i32.const 773340486)) - (i32.add (i32.const 452256349)) - (i32.add (i32.const -1276171436)) - (i32.add (i32.const 1720236510)) - (i32.add (i32.const 1665571568)) - (i32.add (i32.const 1295704319)) - (i32.add (i32.const 673773484)) - (i32.add (i32.const 438283028)) - (i32.add (i32.const -1638504258)) - (i32.add (i32.const 338268232)) - (i32.add (i32.const -1205016110)) - (i32.add (i32.const 430946510)) - (i32.add (i32.const 1907598369)) - (i32.add (i32.const 1112967630)) - (i32.add (i32.const -1477097161)) - (i32.add (i32.const -1969953010)) - (i32.add (i32.const 370294215)) - (i32.add (i32.const 536225889)) - (i32.add (i32.const -1278280848)) - (i32.add (i32.const -1906656666)) - (i32.add (i32.const 268398048)) - (i32.add (i32.const 769444069)) - (i32.add (i32.const -1195082088)) - (i32.add (i32.const -1013484689)) - (i32.add (i32.const -1290614625)) - (i32.add (i32.const -1170037217)) - (i32.add (i32.const 1212605565)) - (i32.add (i32.const -1177975628)) - (i32.add (i32.const 1253078907)) - (i32.add (i32.const 1638626859)) - (i32.add (i32.const 1602291195)) - (i32.add (i32.const -994405637)) - (i32.add (i32.const 1878707149)) - (i32.add (i32.const 267769827)) - (i32.add (i32.const 1590010200)) - (i32.add (i32.const -1118928060)) - (i32.add (i32.const -1817332500)) - (i32.add (i32.const -1097253646)) - (i32.add (i32.const 564860599)) - (i32.add (i32.const 1817002373)) - (i32.add (i32.const 1407369167)) - (i32.add (i32.const -1811044063)) - (i32.add (i32.const 1912674785)) - (i32.add (i32.const -1128047547)) - (i32.add (i32.const -1218146456)) - (i32.add (i32.const 709131193)) - (i32.add (i32.const 417688762)) - (i32.add (i32.const 925204648)) - (i32.add (i32.const 451665708)) - (i32.add (i32.const -1809192130)) - (i32.add (i32.const -1672903130)) - (i32.add (i32.const 1344716324)) - (i32.add (i32.const -913948940)) - (i32.add (i32.const 1227431344)) - (i32.add (i32.const -22720940)) - (i32.add (i32.const -1714385196)) - (i32.add (i32.const -418390786)) - (i32.add (i32.const -1752087331)) - (i32.add (i32.const -1553634360)) - (i32.add (i32.const -80734532)) - (i32.add (i32.const 722839690)) - (i32.add (i32.const 1196459477)) - (i32.add (i32.const 764176142)) - (i32.add (i32.const 1182812565)) - (i32.add (i32.const 1521715564)) - (i32.add (i32.const 1471202952)) - (i32.add (i32.const -1947262451)) - (i32.add (i32.const 1831036028)) - (i32.add (i32.const 1900302342)) - (i32.add (i32.const 1967620106)) - (i32.add (i32.const -1730376771)) - (i32.add (i32.const -1202618574)) - (i32.add (i32.const -1102921940)) - (i32.add (i32.const -748157002)) - (i32.add (i32.const 1639378948)) - (i32.add (i32.const 1727298494)) - (i32.add (i32.const 229513041)) - (i32.add (i32.const -1905947456)) - (i32.add (i32.const -1853340307)) - (i32.add (i32.const 1141290047)) - (i32.add (i32.const 310472475)) - (i32.add (i32.const -385394543)) - (i32.add (i32.const 931370187)) - (i32.add (i32.const 86744666)) - (i32.add (i32.const -1442739927)) - (i32.add (i32.const -610761111)) - (i32.add (i32.const 692428302)) - (i32.add (i32.const -45408941)) - (i32.add (i32.const -376816031)) - (i32.add (i32.const -262749291)) - (i32.add (i32.const -320310773)) - (i32.add (i32.const -1964446822)) - (i32.add (i32.const -1688159984)) - (i32.add (i32.const -496707488)) - (i32.add (i32.const 1404163952)) - (i32.add (i32.const 769946017)) - (i32.add (i32.const 839481982)) - (i32.add (i32.const 1178104375)) - (i32.add (i32.const 2046448103)) - (i32.add (i32.const -741838383)) - (i32.add (i32.const 574062409)) - (i32.add (i32.const 70129390)) - (i32.add (i32.const 1771654617)) - (i32.add (i32.const 715014779)) - (i32.add (i32.const 95160643)) - (i32.add (i32.const 1892894999)) - (i32.add (i32.const 769858450)) - (i32.add (i32.const 342196853)) - (i32.add (i32.const -1204153331)) - (i32.add (i32.const -1587518702)) - (i32.add (i32.const 40237874)) - (i32.add (i32.const 839906412)) - (i32.add (i32.const -827263004)) - (i32.add (i32.const 1488790751)) - (i32.add (i32.const -631666398)) - (i32.add (i32.const 436358197)) - (i32.add (i32.const -142496193)) - (i32.add (i32.const 1061258000)) - (i32.add (i32.const -699433972)) - (i32.add (i32.const 1600874811)) - (i32.add (i32.const 662201186)) - (i32.add (i32.const -206906981)) - (i32.add (i32.const -621016493)) - (i32.add (i32.const -1253923337)) - (i32.add (i32.const 1983132167)) - (i32.add (i32.const -1379191694)) - (i32.add (i32.const -1795756888)) - (i32.add (i32.const 64861092)) - (i32.add (i32.const -663961417)) - (i32.add (i32.const 45682670)) - (i32.add (i32.const -77241337)) - (i32.add (i32.const -1214580434)) - (i32.add (i32.const -2081042806)) - (i32.add (i32.const 240831311)) - (i32.add (i32.const 897672440)) - (i32.add (i32.const -849490394)) - (i32.add (i32.const -537445305)) - (i32.add (i32.const 1154343422)) - (i32.add (i32.const 2035000050)) - (i32.add (i32.const -951280891)) - (i32.add (i32.const 12520498)) - (i32.add (i32.const 1214291384)) - (i32.add (i32.const 1399169035)) - (i32.add (i32.const 171926755)) - (i32.add (i32.const -1151806889)) - (i32.add (i32.const 944895778)) - (i32.add (i32.const 584900613)) - (i32.add (i32.const 1423451146)) - (i32.add (i32.const -1033672025)) - (i32.add (i32.const 1744313076)) - (i32.add (i32.const 1095873195)) - (i32.add (i32.const 1428201065)) - (i32.add (i32.const -478045053)) - (i32.add (i32.const 998447169)) - (i32.add (i32.const 1159612392)) - (i32.add (i32.const 1996567965)) - (i32.add (i32.const -1817601072)) - (i32.add (i32.const 1884268098)) - (i32.add (i32.const -1308935280)) - (i32.add (i32.const 1270110596)) - (i32.add (i32.const 1397414051)) - (i32.add (i32.const 1036834883)) - (i32.add (i32.const 1566317016)) - (i32.add (i32.const -1675674453)) - (i32.add (i32.const 446287553)) - (i32.add (i32.const -130516662)) - (i32.add (i32.const 1134232028)) - (i32.add (i32.const -1413458450)) - (i32.add (i32.const 82218662)) - (i32.add (i32.const -310019734)) - (i32.add (i32.const 1959201210)) - (i32.add (i32.const 210593029)) - (i32.add (i32.const -638851293)) - (i32.add (i32.const 520431411)) - (i32.add (i32.const -2136226840)) - (i32.add (i32.const -434208705)) - (i32.add (i32.const -987776749)) - (i32.add (i32.const 501600616)) - (i32.add (i32.const -220049517)) - (i32.add (i32.const 1390119971)) - (i32.add (i32.const 429783630)) - (i32.add (i32.const 2060568518)) - (i32.add (i32.const 1632190990)) - (i32.add (i32.const -899371536)) - (i32.add (i32.const -666961902)) - (i32.add (i32.const -1007366490)) - (i32.add (i32.const 235961734)) - (i32.add (i32.const -489587668)) - (i32.add (i32.const 1928233051)) - (i32.add (i32.const -413496566)) - (i32.add (i32.const 470934385)) - (i32.add (i32.const -2114673004)) - (i32.add (i32.const -2046035790)) - (i32.add (i32.const 326477442)) - (i32.add (i32.const 635528684)) - (i32.add (i32.const 1391107236)) - (i32.add (i32.const -1071964955)) - (i32.add (i32.const 1262660830)) - (i32.add (i32.const -1316780266)) - (i32.add (i32.const 1220231906)) - (i32.add (i32.const -497892010)) - (i32.add (i32.const -9962315)) - (i32.add (i32.const 1750743040)) - (i32.add (i32.const -852145146)) - (i32.add (i32.const -1380364795)) - (i32.add (i32.const 1340634533)) - (i32.add (i32.const -1860941350)) - (i32.add (i32.const 1336893892)) - (i32.add (i32.const -112016430)) - (i32.add (i32.const 2084155169)) - (i32.add (i32.const -1691400296)) - (i32.add (i32.const -1010147146)) - (i32.add (i32.const -1057105456)) - (i32.add (i32.const 2057166239)) - (i32.add (i32.const -1693027314)) - (i32.add (i32.const -1918060269)) - (i32.add (i32.const 514754142)) - (i32.add (i32.const -1982596096)) - (i32.add (i32.const -712394505)) - (i32.add (i32.const -1151725834)) - (i32.add (i32.const -906765929)) - (i32.add (i32.const -1620111336)) - (i32.add (i32.const 650402120)) - (i32.add (i32.const -477798813)) - (i32.add (i32.const -1105184382)) - (i32.add (i32.const 1498414785)) - (i32.add (i32.const -874266581)) - (i32.add (i32.const -278095816)) - (i32.add (i32.const -1807309404)) - (i32.add (i32.const -873929137)) - (i32.add (i32.const -1304164026)) - (i32.add (i32.const 1198298675)) - (i32.add (i32.const -892370590)) - (i32.add (i32.const -358080448)) - (i32.add (i32.const -1661037127)) - (i32.add (i32.const -1910011692)) - (i32.add (i32.const -215135365)) - (i32.add (i32.const -38426962)) - (i32.add (i32.const 788000685)) - (i32.add (i32.const 1087149191)) - (i32.add (i32.const 1329033580)) - (i32.add (i32.const 1737607046)) - (i32.add (i32.const -1122369513)) - (i32.add (i32.const 1235445444)) - (i32.add (i32.const -285046043)) - (i32.add (i32.const -1011408333)) - (i32.add (i32.const 5302038)) - (i32.add (i32.const -1523188314)) - (i32.add (i32.const 1151650133)) - (i32.add (i32.const 813581534)) - (i32.add (i32.const 788273894)) - (i32.add (i32.const -869156256)) - (i32.add (i32.const 940489660)) - (i32.add (i32.const 83086319)) - (i32.add (i32.const 1717180379)) - (i32.add (i32.const 1574407559)) - (i32.add (i32.const -610455236)) - (i32.add (i32.const 1702419078)) - (i32.add (i32.const -767057110)) - (i32.add (i32.const -1915558882)) - (i32.add (i32.const -51552680)) - (i32.add (i32.const 1357500220)) - (i32.add (i32.const 1288785913)) - (i32.add (i32.const 463399198)) - (i32.add (i32.const -1146164591)) - (i32.add (i32.const 1149035546)) - (i32.add (i32.const -756215892)) - (i32.add (i32.const -564228667)) - (i32.add (i32.const -147485989)) - (i32.add (i32.const 53235922)) - (i32.add (i32.const 487418246)) - (i32.add (i32.const 3675598)) - (i32.add (i32.const -1199190387)) - (i32.add (i32.const -1276389964)) - (i32.add (i32.const -1605923188)) - (i32.add (i32.const -1847833983)) - (i32.add (i32.const -1448130836)) - (i32.add (i32.const -1201989720)) - (i32.add (i32.const 1654404546)) - (i32.add (i32.const 1536218670)) - (i32.add (i32.const 135630556)) - (i32.add (i32.const 1245584845)) - (i32.add (i32.const -1222487160)) - (i32.add (i32.const 2070957497)) - (i32.add (i32.const -1687840759)) - (i32.add (i32.const -689031066)) - (i32.add (i32.const 893875649)) - (i32.add (i32.const 687667788)) - (i32.add (i32.const -2035644152)) - (i32.add (i32.const 207059547)) - (i32.add (i32.const -570755081)) - (i32.add (i32.const 396392098)) - (i32.add (i32.const 601938304)) - (i32.add (i32.const 2108928465)) - (i32.add (i32.const 639706741)) - (i32.add (i32.const -2114092560)) - (i32.add (i32.const -121468414)) - (i32.add (i32.const -1130756200)) - (i32.add (i32.const -1829829463)) - (i32.add (i32.const -880114379)) - (i32.add (i32.const 2062187156)) - (i32.add (i32.const -504413587)) - (i32.add (i32.const -552641882)) - (i32.add (i32.const -109755066)) - (i32.add (i32.const 80563414)) - (i32.add (i32.const 1016314675)) - (i32.add (i32.const -1749946110)) - (i32.add (i32.const -698999147)) - (i32.add (i32.const -1678361030)) - (i32.add (i32.const -1504978338)) - (i32.add (i32.const -487449044)) - (i32.add (i32.const 773568879)) - (i32.add (i32.const 78452877)) - (i32.add (i32.const -1778305851)) - (i32.add (i32.const -174198992)) - (i32.add (i32.const -957564216)) - (i32.add (i32.const 2113339856)) - (i32.add (i32.const 1462889570)) - (i32.add (i32.const 8208306)) - (i32.add (i32.const 1725141268)) - (i32.add (i32.const -1727037613)) - (i32.add (i32.const 2007535284)) - (i32.add (i32.const 1355935785)) - (i32.add (i32.const 156797722)) - (i32.add (i32.const -599323787)) - (i32.add (i32.const 422499204)) - (i32.add (i32.const -1121268349)) - (i32.add (i32.const -1549207774)) - (i32.add (i32.const -664219336)) - (i32.add (i32.const 1086795099)) - (i32.add (i32.const -1196551354)) - (i32.add (i32.const 997562955)) - (i32.add (i32.const 1389273817)) - (i32.add (i32.const -21615935)) - (i32.add (i32.const -16880046)) - (i32.add (i32.const 1676323167)) - (i32.add (i32.const -920965385)) - (i32.add (i32.const 225363527)) - (i32.add (i32.const -1523446443)) - (i32.add (i32.const -867810062)) - (i32.add (i32.const -903566613)) - (i32.add (i32.const -2144615878)) - (i32.add (i32.const -1472491091)) - (i32.add (i32.const 1032911445)) - (i32.add (i32.const 979210739)) - (i32.add (i32.const -717975247)) - (i32.add (i32.const -8968210)) - (i32.add (i32.const -1623705605)) - (i32.add (i32.const 566986987)) - (i32.add (i32.const 1273260488)) - (i32.add (i32.const 1160758691)) - (i32.add (i32.const 146397923)) - (i32.add (i32.const -153502398)) - (i32.add (i32.const -1856135423)) - (i32.add (i32.const 130063555)) - (i32.add (i32.const 1474148041)) - (i32.add (i32.const -1170681654)) - (i32.add (i32.const 434692946)) - (i32.add (i32.const 67009431)) - (i32.add (i32.const -700107041)) - (i32.add (i32.const 1926009248)) - (i32.add (i32.const -970512)) - (i32.add (i32.const 1918717122)) - (i32.add (i32.const -787089328)) - (i32.add (i32.const 1296859621)) - (i32.add (i32.const -678693348)) - (i32.add (i32.const -541355260)) - (i32.add (i32.const -870247455)) - (i32.add (i32.const -298364177)) - (i32.add (i32.const 518528751)) - (i32.add (i32.const 2624508)) - (i32.add (i32.const 1786979660)) - (i32.add (i32.const 1969506893)) - (i32.add (i32.const -783859155)) - (i32.add (i32.const -1055592856)) - (i32.add (i32.const -861213834)) - (i32.add (i32.const -2140467964)) - (i32.add (i32.const 946396220)) - (i32.add (i32.const 160775435)) - (i32.add (i32.const 2041813326)) - (i32.add (i32.const 2046481705)) - (i32.add (i32.const 2024572610)) - (i32.add (i32.const -1180725263)) - (i32.add (i32.const 882328837)) - (i32.add (i32.const -730459050)) - (i32.add (i32.const 1968150505)) - (i32.add (i32.const -120374791)) - (i32.add (i32.const 1688788729)) - (i32.add (i32.const 272758223)) - (i32.add (i32.const -1782955390)) - (i32.add (i32.const -1176722748)) - (i32.add (i32.const 1220146147)) - (i32.add (i32.const 1119872488)) - (i32.add (i32.const -2106507586)) - (i32.add (i32.const 1660991795)) - (i32.add (i32.const 1975041559)) - (i32.add (i32.const 1627362863)) - (i32.add (i32.const -322440401)) - (i32.add (i32.const 2051784226)) - (i32.add (i32.const -1437663754)) - (i32.add (i32.const -1132540308)) - (i32.add (i32.const 2068283586)) - (i32.add (i32.const 1199398913)) - (i32.add (i32.const 612285799)) - (i32.add (i32.const 2065026072)) - (i32.add (i32.const 1574188701)) - (i32.add (i32.const 1193160894)) - (i32.add (i32.const 1546593830)) - (i32.add (i32.const -1677768432)) - (i32.add (i32.const 1778367815)) - (i32.add (i32.const 579050124)) - (i32.add (i32.const 812065787)) - (i32.add (i32.const 1166418041)) - (i32.add (i32.const -390441657)) - (i32.add (i32.const 657350679)) - (i32.add (i32.const -26302662)) - (i32.add (i32.const -860581963)) - (i32.add (i32.const -374738311)) - (i32.add (i32.const -1735339621)) - (i32.add (i32.const -1813687902)) - (i32.add (i32.const -905795252)) - (i32.add (i32.const 1678254155)) - (i32.add (i32.const 2055814249)) - (i32.add (i32.const 1868123442)) - (i32.add (i32.const -1793203085)) - (i32.add (i32.const 1007011883)) - (i32.add (i32.const -1752227607)) - (i32.add (i32.const 671849031)) - (i32.add (i32.const 1974502121)) - (i32.add (i32.const 1711139560)) - (i32.add (i32.const 1957372394)) - (i32.add (i32.const 1910473755)) - (i32.add (i32.const 284074645)) - (i32.add (i32.const -900508489)) - (i32.add (i32.const -682687222)) - (i32.add (i32.const -122876630)) - (i32.add (i32.const 997154156)) - (i32.add (i32.const 975326101)) - (i32.add (i32.const 1791450269)) - (i32.add (i32.const 1164459385)) - (i32.add (i32.const 507133867)) - (i32.add (i32.const -831658294)) - (i32.add (i32.const -79786612)) - (i32.add (i32.const 1361959071)) - (i32.add (i32.const 1093500309)) - (i32.add (i32.const -1478346503)) - (i32.add (i32.const 839646296)) - (i32.add (i32.const -381969190)) - (i32.add (i32.const 1589358026)) - (i32.add (i32.const 1321347672)) - (i32.add (i32.const 296356375)) - (i32.add (i32.const -1958120505)) - (i32.add (i32.const -1438887740)) - (i32.add (i32.const -1006653533)) - (i32.add (i32.const -1307930229)) - (i32.add (i32.const -1904456872)) - (i32.add (i32.const 523047383)) - (i32.add (i32.const -1499871185)) - (i32.add (i32.const 1424854268)) - (i32.add (i32.const -1298511318)) - (i32.add (i32.const 996536281)) - (i32.add (i32.const 1972676253)) - (i32.add (i32.const -773287107)) - (i32.add (i32.const -938697379)) - (i32.add (i32.const 1699018956)) - (i32.add (i32.const 1685049157)) - (i32.add (i32.const 907297644)) - (i32.add (i32.const -1719616415)) - (i32.add (i32.const 1407205777)) - (i32.add (i32.const 928782812)) - (i32.add (i32.const -1651331581)) - (i32.add (i32.const -2061264611)) - (i32.add (i32.const -1463167556)) - (i32.add (i32.const -1201649076)) - (i32.add (i32.const -795800767)) - (i32.add (i32.const 1364116374)) - (i32.add (i32.const 1518529016)) - (i32.add (i32.const 798615209)) - (i32.add (i32.const 604736228)) - (i32.add (i32.const -1671205099)) - (i32.add (i32.const 1693648533)) - (i32.add (i32.const 1321917849)) - (i32.add (i32.const -64812692)) - (i32.add (i32.const -290124539)) - (i32.add (i32.const 908892401)) - (i32.add (i32.const 1025094373)) - (i32.add (i32.const 528581585)) - (i32.add (i32.const -1300721960)) - (i32.add (i32.const 1518225324)) - (i32.add (i32.const -449037628)) - (i32.add (i32.const -2042105369)) - (i32.add (i32.const -174736557)) - (i32.add (i32.const 1005860390)) - (i32.add (i32.const 1136913416)) - (i32.add (i32.const 1740834747)) - (i32.add (i32.const 1831454827)) - (i32.add (i32.const -1573690478)) - (i32.add (i32.const -1674748405)) - (i32.add (i32.const -1913080253)) - (i32.add (i32.const -1716906781)) - (i32.add (i32.const -191363169)) - (i32.add (i32.const -1898202364)) - (i32.add (i32.const 2092514175)) - (i32.add (i32.const -998165687)) - (i32.add (i32.const -1354487401)) - (i32.add (i32.const -861360347)) - (i32.add (i32.const 582434226)) - (i32.add (i32.const -2104432950)) - (i32.add (i32.const 1737622722)) - (i32.add (i32.const -1563505491)) - (i32.add (i32.const 1194734089)) - (i32.add (i32.const -830886706)) - (i32.add (i32.const 1131965906)) - (i32.add (i32.const 343673128)) - (i32.add (i32.const -2037308148)) - (i32.add (i32.const 558411680)) - (i32.add (i32.const -1253183812)) - (i32.add (i32.const -1989316567)) - (i32.add (i32.const 1314573875)) - (i32.add (i32.const 1999821263)) - (i32.add (i32.const 1420586367)) - (i32.add (i32.const -231918892)) - (i32.add (i32.const -1919417635)) - (i32.add (i32.const -1317830685)) - (i32.add (i32.const 713651413)) - (i32.add (i32.const 1793597408)) - (i32.add (i32.const 1143598365)) - (i32.add (i32.const -966168948)) - (i32.add (i32.const 1295585480)) - (i32.add (i32.const 1757953821)) - (i32.add (i32.const 570047816)) - (i32.add (i32.const -1239166191)) - (i32.add (i32.const -859225761)) - (i32.add (i32.const -1260565282)) - (i32.add (i32.const -662514812)) - (i32.add (i32.const -1279016042)) - (i32.add (i32.const 410663680)) - (i32.add (i32.const -1659784598)) - (i32.add (i32.const -973192435)) - (i32.add (i32.const 1352056236)) - (i32.add (i32.const -2096340577)) - (i32.add (i32.const 1802723665)) - (i32.add (i32.const 336148255)) - (i32.add (i32.const 985579151)) - (i32.add (i32.const 1509271908)) - (i32.add (i32.const -1332107975)) - (i32.add (i32.const 1597626434)) - (i32.add (i32.const -1547493963)) - (i32.add (i32.const -459816946)) - (i32.add (i32.const -418913540)) - (i32.add (i32.const 1749328903)) - (i32.add (i32.const -226479805)) - (i32.add (i32.const -795386462)) - (i32.add (i32.const 725649527)) - (i32.add (i32.const -461713723)) - (i32.add (i32.const -1821252496)) - (i32.add (i32.const -1096628218)) - (i32.add (i32.const -1262487996)) - (i32.add (i32.const -642663014)) - (i32.add (i32.const 518250920)) - (i32.add (i32.const 234469275)) - (i32.add (i32.const -1901053798)) - (i32.add (i32.const 1487592053)) - (i32.add (i32.const 994337306)) - (i32.add (i32.const 1158880913)) - (i32.add (i32.const 2095762975)) - (i32.add (i32.const -692562002)) - (i32.add (i32.const 1756609028)) - (i32.add (i32.const -1886830278)) - (i32.add (i32.const 163822933)) - (i32.add (i32.const 812562591)) - (i32.add (i32.const -1860382349)) - (i32.add (i32.const 521941588)) - (i32.add (i32.const -1188843663)) - (i32.add (i32.const -2030321009)) - (i32.add (i32.const -1909874179)) - (i32.add (i32.const 1928060830)) - (i32.add (i32.const 1148595776)) - (i32.add (i32.const 1803353730)) - (i32.add (i32.const -1244682772)) - (i32.add (i32.const 417978728)) - (i32.add (i32.const -116168720)) - (i32.add (i32.const 1441296061)) - (i32.add (i32.const 1785861905)) - (i32.add (i32.const -1664971203)) - (i32.add (i32.const 1867785885)) - (i32.add (i32.const -139865476)) - (i32.add (i32.const 109850937)) - (i32.add (i32.const 1652372942)) - (i32.add (i32.const 1476116627)) - (i32.add (i32.const 395726013)) - (i32.add (i32.const -935114525)) - (i32.add (i32.const -825675868)) - (i32.add (i32.const 372381584)) - (i32.add (i32.const 1521276160)) - (i32.add (i32.const -415945553)) - (i32.add (i32.const 1215985194)) - (i32.add (i32.const 993156223)) - (i32.add (i32.const -1425262526)) - (i32.add (i32.const -522171236)) - (i32.add (i32.const -302848342)) - (i32.add (i32.const 1070890918)) - (i32.add (i32.const 306452691)) - (i32.add (i32.const -1871990348)) - (i32.add (i32.const -1350586334)) - (i32.add (i32.const -596867409)) - (i32.add (i32.const -1954938353)) - (i32.add (i32.const 1554896751)) - (i32.add (i32.const -62902120)) - (i32.add (i32.const -1000971962)) - (i32.add (i32.const -1254878504)) - (i32.add (i32.const -1418689707)) - (i32.add (i32.const 100698268)) - (i32.add (i32.const 473966633)) - (i32.add (i32.const 2747069)) - (i32.add (i32.const -1585889659)) - (i32.add (i32.const 563110787)) - (i32.add (i32.const 179761312)) - (i32.add (i32.const -1695516981)) - (i32.add (i32.const 1188748013)) - (i32.add (i32.const -1760776071)) - (i32.add (i32.const -141219795)) - (i32.add (i32.const 1794645355)) - (i32.add (i32.const 2124843861)) - (i32.add (i32.const 1013340191)) - (i32.add (i32.const 119295878)) - (i32.add (i32.const -1867895098)) - (i32.add (i32.const 1065471320)) - (i32.add (i32.const -1025977296)) - (i32.add (i32.const 496775324)) - (i32.add (i32.const 565033728)) - (i32.add (i32.const -1238756236)) - (i32.add (i32.const -1577953268)) - (i32.add (i32.const -2020726685)) - (i32.add (i32.const 955288806)) - (i32.add (i32.const -1895387569)) - (i32.add (i32.const -512821838)) - (i32.add (i32.const 329964677)) - (i32.add (i32.const 1035123896)) - (i32.add (i32.const 1257971099)) - (i32.add (i32.const -1879531535)) - (i32.add (i32.const 398207572)) - (i32.add (i32.const -1680588386)) - (i32.add (i32.const -197700329)) - (i32.add (i32.const 1626960857)) - (i32.add (i32.const 1993114936)) - (i32.add (i32.const -1601096745)) - (i32.add (i32.const -403100786)) - (i32.add (i32.const -1958670115)) - (i32.add (i32.const -2086033200)) - (i32.add (i32.const 869086454)) - (i32.add (i32.const 1168199235)) - (i32.add (i32.const -1757160018)) - (i32.add (i32.const 611870705)) - (i32.add (i32.const 1232046114)) - (i32.add (i32.const -1640694969)) - (i32.add (i32.const -1349402069)) - (i32.add (i32.const -1120570963)) - (i32.add (i32.const -1704479577)) - (i32.add (i32.const -481727412)) - (i32.add (i32.const 1024823241)) - (i32.add (i32.const 131832842)) - (i32.add (i32.const -1843754319)) - (i32.add (i32.const 829864674)) - (i32.add (i32.const 1198048552)) - (i32.add (i32.const -1339939223)) - (i32.add (i32.const -834679458)) - (i32.add (i32.const -2026556520)) - (i32.add (i32.const 1718710379)) - (i32.add (i32.const -1123843926)) - (i32.add (i32.const -648520103)) - (i32.add (i32.const 369757826)) - (i32.add (i32.const -1292742910)) - (i32.add (i32.const 1610378654)) - (i32.add (i32.const -27545011)) - (i32.add (i32.const -350131022)) - (i32.add (i32.const 834318889)) - (i32.add (i32.const 1684957163)) - (i32.add (i32.const 1657250078)) - (i32.add (i32.const -1785127318)) - (i32.add (i32.const 1679021679)) - (i32.add (i32.const 1164974791)) - (i32.add (i32.const 795222396)) - (i32.add (i32.const 2062068598)) - (i32.add (i32.const 964002365)) - (i32.add (i32.const -1307837889)) - (i32.add (i32.const 1357719106)) - (i32.add (i32.const -1812716475)) - (i32.add (i32.const 124559872)) - (i32.add (i32.const 1627744125)) - (i32.add (i32.const 2073044817)) - (i32.add (i32.const 554682895)) - (i32.add (i32.const -1763645173)) - (i32.add (i32.const 826786400)) - (i32.add (i32.const 1974274012)) - (i32.add (i32.const 1253178001)) - (i32.add (i32.const 544921263)) - (i32.add (i32.const -1214724132)) - (i32.add (i32.const -1444134054)) - (i32.add (i32.const 302041881)) - (i32.add (i32.const -1321619923)) - (i32.add (i32.const 804800096)) - (i32.add (i32.const 14106316)) - (i32.add (i32.const 655075701)) - (i32.add (i32.const 1284086831)) - (i32.add (i32.const 901908722)) - (i32.add (i32.const 1094850485)) - (i32.add (i32.const 2073038007)) - (i32.add (i32.const -1911671040)) - (i32.add (i32.const -1682868371)) - (i32.add (i32.const 389479416)) - (i32.add (i32.const -63212782)) - (i32.add (i32.const -610123784)) - (i32.add (i32.const 1369884391)) - (i32.add (i32.const -889999951)) - (i32.add (i32.const 447660537)) - (i32.add (i32.const -588458249)) - (i32.add (i32.const 115441233)) - (i32.add (i32.const 685085144)) - (i32.add (i32.const 1516718534)) - (i32.add (i32.const 52916933)) - (i32.add (i32.const -208101563)) - (i32.add (i32.const 1313892749)) - (i32.add (i32.const -1411009792)) - (i32.add (i32.const -987459767)) - (i32.add (i32.const 2022392546)) - (i32.add (i32.const -2116557732)) - (i32.add (i32.const -18494708)) - (i32.add (i32.const 561756373)) - (i32.add (i32.const 1416708970)) - (i32.add (i32.const 1856227540)) - (i32.add (i32.const 2141183233)) - (i32.add (i32.const 1756786952)) - (i32.add (i32.const 2084227704)) - (i32.add (i32.const 686573058)) - (i32.add (i32.const 241230566)) - (i32.add (i32.const -290271541)) - (i32.add (i32.const 894460459)) - (i32.add (i32.const -1653310016)) - (i32.add (i32.const 319320353)) - (i32.add (i32.const 1644732812)) - (i32.add (i32.const 294343872)) - (i32.add (i32.const 442646505)) - (i32.add (i32.const 1023227550)) - (i32.add (i32.const -316587515)) - (i32.add (i32.const 924072634)) - (i32.add (i32.const -812941807)) - (i32.add (i32.const -1194304817)) - (i32.add (i32.const -1689796783)) - (i32.add (i32.const 1424157478)) - (i32.add (i32.const -918066169)) - (i32.add (i32.const 1734148503)) - (i32.add (i32.const -1899193417)) - (i32.add (i32.const 1822732037)) - (i32.add (i32.const 82634361)) - (i32.add (i32.const -1651955887)) - (i32.add (i32.const 649090181)) - (i32.add (i32.const -454271930)) - (i32.add (i32.const -1230271103)) - (i32.add (i32.const -2144463191)) - (i32.add (i32.const -1872129613)) - (i32.add (i32.const -669286269)) - (i32.add (i32.const 1737315292)) - (i32.add (i32.const -1627778750)) - (i32.add (i32.const 1229426053)) - (i32.add (i32.const 40756748)) - (i32.add (i32.const 1930952082)) - (i32.add (i32.const 1273862306)) - (i32.add (i32.const -77773321)) - (i32.add (i32.const 290906868)) - (i32.add (i32.const 1026775976)) - (i32.add (i32.const 2013009432)) - (i32.add (i32.const -126236783)) - (i32.add (i32.const -1714775419)) - (i32.add (i32.const -885891569)) - (i32.add (i32.const 669054625)) - (i32.add (i32.const -814755346)) - (i32.add (i32.const -1786386332)) - (i32.add (i32.const 1127061643)) - (i32.add (i32.const 544232064)) - (i32.add (i32.const 1227210541)) - (i32.add (i32.const 400474002)) - (i32.add (i32.const -529784170)) - (i32.add (i32.const -84717058)) - (i32.add (i32.const 2042220618)) - (i32.add (i32.const -680218980)) - (i32.add (i32.const 831290804)) - (i32.add (i32.const 1221017465)) - (i32.add (i32.const 580312375)) - (i32.add (i32.const 362770962)) - (i32.add (i32.const 571122118)) - (i32.add (i32.const -1631485688)) - (i32.add (i32.const 1827027234)) - (i32.add (i32.const 490577629)) - (i32.add (i32.const 1119757690)) - (i32.add (i32.const -1405841389)) - (i32.add (i32.const -1422358940)) - (i32.add (i32.const 823348183)) - (i32.add (i32.const 806075379)) - (i32.add (i32.const 1726356526)) - (i32.add (i32.const -2010004402)) - (i32.add (i32.const -23279709)) - (i32.add (i32.const 1953528473)) - (i32.add (i32.const 1210184106)) - (i32.add (i32.const 809929500)) - (i32.add (i32.const -716052254)) - (i32.add (i32.const -1296204997)) - (i32.add (i32.const -672642129)) - (i32.add (i32.const 1380845633)) - (i32.add (i32.const 1415117796)) - (i32.add (i32.const -1286880819)) - (i32.add (i32.const -760912608)) - (i32.add (i32.const -784031789)) - (i32.add (i32.const 2145455598)) - (i32.add (i32.const 1660127246)) - (i32.add (i32.const 1968046761)) - (i32.add (i32.const -279186986)) - (i32.add (i32.const 2122653010)) - (i32.add (i32.const -771481682)) - (i32.add (i32.const 1893281873)) - (i32.add (i32.const 112263825)) - (i32.add (i32.const -166260658)) - (i32.add (i32.const -1807985025)) - (i32.add (i32.const -1324586582)) - (i32.add (i32.const 1884711617)) - (i32.add (i32.const 1676864432)) - (i32.add (i32.const 843136648)) - (i32.add (i32.const 950938091)) - (i32.add (i32.const -516473569)) - (i32.add (i32.const 1671997106)) - (i32.add (i32.const 265219463)) - (i32.add (i32.const 2044251391)) - (i32.add (i32.const 1054190445)) - (i32.add (i32.const 1472844216)) - (i32.add (i32.const -659566032)) - (i32.add (i32.const -324216889)) - (i32.add (i32.const -820449762)) - (i32.add (i32.const 2073910709)) - (i32.add (i32.const 1102524676)) - (i32.add (i32.const -651317227)) - (i32.add (i32.const -1331450159)) - (i32.add (i32.const -1833884057)) - (i32.add (i32.const -680312413)) - (i32.add (i32.const 1717292138)) - (i32.add (i32.const 834127334)) - (i32.add (i32.const -2114759305)) - (i32.add (i32.const 430441889)) - (i32.add (i32.const -1433702103)) - (i32.add (i32.const 402401506)) - (i32.add (i32.const -1117928182)) - (i32.add (i32.const -396904187)) - (i32.add (i32.const -301273908)) - (i32.add (i32.const -1145153132)) - (i32.add (i32.const -235445163)) - (i32.add (i32.const 746277875)) - (i32.add (i32.const -1859407992)) - (i32.add (i32.const -2093531797)) - (i32.add (i32.const 1445666271)) - (i32.add (i32.const 458871318)) - (i32.add (i32.const 342376635)) - (i32.add (i32.const -2029192552)) - (i32.add (i32.const 47988230)) - (i32.add (i32.const 2108573799)) - (i32.add (i32.const 395186282)) - (i32.add (i32.const 1132698818)) - (i32.add (i32.const -1220861293)) - (i32.add (i32.const -30581980)) - (i32.add (i32.const 1129464357)) - (i32.add (i32.const 12724817)) - (i32.add (i32.const -283464662)) - (i32.add (i32.const -1681110916)) - (i32.add (i32.const 1265753539)) - (i32.add (i32.const -696279904)) - (i32.add (i32.const 391976334)) - (i32.add (i32.const 1797784041)) - (i32.add (i32.const 1644294033)) - (i32.add (i32.const -1455333771)) - (i32.add (i32.const -1979912527)) - (i32.add (i32.const -861958410)) - (i32.add (i32.const -622014423)) - (i32.add (i32.const 2127672849)) - (i32.add (i32.const -866291615)) - (i32.add (i32.const 1912634654)) - (i32.add (i32.const 221090653)) - (i32.add (i32.const -1598287229)) - (i32.add (i32.const -110928471)) - (i32.add (i32.const -978701067)) - (i32.add (i32.const -611402823)) - (i32.add (i32.const 1883072612)) - (i32.add (i32.const 597092262)) - (i32.add (i32.const -2068936350)) - (i32.add (i32.const -767375956)) - (i32.add (i32.const 21967955)) - (i32.add (i32.const 397767086)) - (i32.add (i32.const 1252286348)) - (i32.add (i32.const 1490464765)) - (i32.add (i32.const -870653944)) - (i32.add (i32.const -1942769166)) - (i32.add (i32.const 2074433851)) - (i32.add (i32.const -1235879985)) - (i32.add (i32.const 235354099)) - (i32.add (i32.const -1792892729)) - (i32.add (i32.const -1782252676)) - (i32.add (i32.const 2059403216)) - (i32.add (i32.const 470887808)) - (i32.add (i32.const -907916617)) - (i32.add (i32.const 1563998936)) - (i32.add (i32.const 195175642)) - (i32.add (i32.const -1639622355)) - (i32.add (i32.const 1234520671)) - (i32.add (i32.const -740765056)) - (i32.add (i32.const 2002784357)) - (i32.add (i32.const -2005460459)) - (i32.add (i32.const -960272638)) - (i32.add (i32.const -1300792180)) - (i32.add (i32.const 1163800615)) - (i32.add (i32.const -1996950970)) - (i32.add (i32.const -768162607)) - (i32.add (i32.const -1812247662)) - (i32.add (i32.const 2058997973)) - (i32.add (i32.const -516913982)) - (i32.add (i32.const -1573716886)) - (i32.add (i32.const -1553759397)) - (i32.add (i32.const -1131770127)) - (i32.add (i32.const -249175715)) - (i32.add (i32.const 138439609)) - (i32.add (i32.const -368399721)) - (i32.add (i32.const -2105621168)) - (i32.add (i32.const 780209873)) - (i32.add (i32.const 1877727443)) - (i32.add (i32.const 514429106)) - (i32.add (i32.const -576785114)) - (i32.add (i32.const -1482546163)) - (i32.add (i32.const -1055875348)) - (i32.add (i32.const 1786216903)) - (i32.add (i32.const 75250856)) - (i32.add (i32.const 1950030636)) - (i32.add (i32.const 1735786112)) - (i32.add (i32.const -104358777)) - (i32.add (i32.const 961197059)) - (i32.add (i32.const 836088007)) - (i32.add (i32.const 848415601)) - (i32.add (i32.const -1681755182)) - (i32.add (i32.const -1821069518)) - (i32.add (i32.const 1455444699)) - (i32.add (i32.const 1924473574)) - (i32.add (i32.const -1075425545)) - (i32.add (i32.const 1444074183)) - (i32.add (i32.const 1508339819)) - (i32.add (i32.const -2069515351)) - (i32.add (i32.const -1300936091)) - (i32.add (i32.const 1000319758)) - (i32.add (i32.const -1254943830)) - (i32.add (i32.const -1869018620)) - (i32.add (i32.const 371904114)) - (i32.add (i32.const 1135233360)) - (i32.add (i32.const -1025853337)) - (i32.add (i32.const 56616683)) - (i32.add (i32.const -1007716695)) - (i32.add (i32.const -643531108)) - (i32.add (i32.const -1335399127)) - (i32.add (i32.const 1731690413)) - (i32.add (i32.const 655534953)) - (i32.add (i32.const -1095984257)) - (i32.add (i32.const -1445287340)) - (i32.add (i32.const 1904307659)) - (i32.add (i32.const 408849904)) - (i32.add (i32.const -1441720695)) - (i32.add (i32.const -1449603262)) - (i32.add (i32.const -739047645)) - (i32.add (i32.const 1157745633)) - (i32.add (i32.const -633598063)) - (i32.add (i32.const 364961546)) - (i32.add (i32.const -154769269)) - (i32.add (i32.const -734389759)) - (i32.add (i32.const 1645156230)) - (i32.add (i32.const -1789078936)) - (i32.add (i32.const 1633498529)) - (i32.add (i32.const 1575334533)) - (i32.add (i32.const 1391113639)) - (i32.add (i32.const 104502351)) - (i32.add (i32.const 2113011909)) - (i32.add (i32.const 1167404635)) - (i32.add (i32.const 1239047249)) - (i32.add (i32.const 2097006454)) - (i32.add (i32.const -1442757801)) - (i32.add (i32.const -951190523)) - (i32.add (i32.const -242289960)) - (i32.add (i32.const -1144995342)) - (i32.add (i32.const -536422556)) - (i32.add (i32.const 1577804355)) - (i32.add (i32.const -457033797)) - (i32.add (i32.const 102370103)) - (i32.add (i32.const 1979791355)) - (i32.add (i32.const -1894823152)) - (i32.add (i32.const -447932036)) - (i32.add (i32.const 1810615068)) - (i32.add (i32.const -2045689563)) - (i32.add (i32.const -107688065)) - (i32.add (i32.const -415515813)) - (i32.add (i32.const -2017585997)) - (i32.add (i32.const 1468580056)) - (i32.add (i32.const 1158678853)) - (i32.add (i32.const 1062770043)) - (i32.add (i32.const 570512344)) - (i32.add (i32.const -1567178813)) - (i32.add (i32.const 1448809998)) - (i32.add (i32.const 1632732685)) - (i32.add (i32.const 1224143231)) - (i32.add (i32.const -959173521)) - (i32.add (i32.const 303733140)) - (i32.add (i32.const -1446596411)) - (i32.add (i32.const -541977168)) - (i32.add (i32.const 1950276558)) - (i32.add (i32.const 167925820)) - (i32.add (i32.const -991584140)) - (i32.add (i32.const -1598133045)) - (i32.add (i32.const 1954911842)) - (i32.add (i32.const -2100470639)) - (i32.add (i32.const 2024142548)) - (i32.add (i32.const 1897944651)) - (i32.add (i32.const -199183818)) - (i32.add (i32.const -1400923527)) - (i32.add (i32.const -1943250352)) - (i32.add (i32.const -279274868)) - (i32.add (i32.const -1385991456)) - (i32.add (i32.const -29108978)) - (i32.add (i32.const 503361310)) - (i32.add (i32.const 1124323495)) - (i32.add (i32.const 1931085477)) - (i32.add (i32.const -552800142)) - (i32.add (i32.const 29118768)) - (i32.add (i32.const 896425381)) - (i32.add (i32.const -270846239)) - (i32.add (i32.const 893576722)) - (i32.add (i32.const 1136887012)) - (i32.add (i32.const -1083786872)) - (i32.add (i32.const -1171693131)) - (i32.add (i32.const 552839628)) - (i32.add (i32.const 1687896842)) - (i32.add (i32.const -1651969631)) - (i32.add (i32.const -532180665)) - (i32.add (i32.const -1958088103)) - (i32.add (i32.const 1108678135)) - (i32.add (i32.const -1028754384)) - (i32.add (i32.const 2090485808)) - (i32.add (i32.const -613875979)) - (i32.add (i32.const 1917589244)) - (i32.add (i32.const 2008596979)) - (i32.add (i32.const 1919479891)) - (i32.add (i32.const 575306972)) - (i32.add (i32.const 674938213)) - (i32.add (i32.const -645023791)) - (i32.add (i32.const 1176509538)) - (i32.add (i32.const -596073446)) - (i32.add (i32.const 1932432803)) - (i32.add (i32.const -310982223)) - (i32.add (i32.const -660898549)) - (i32.add (i32.const -425176370)) - (i32.add (i32.const 1630319711)) - (i32.add (i32.const -1204813980)) - (i32.add (i32.const -1795438315)) - (i32.add (i32.const 1447603895)) - (i32.add (i32.const 248299899)) - (i32.add (i32.const -1486721944)) - (i32.add (i32.const -344529282)) - (i32.add (i32.const -1954548037)) - (i32.add (i32.const 1575307145)) - (i32.add (i32.const 1956595278)) - (i32.add (i32.const 1676698157)) - (i32.add (i32.const -211049093)) - (i32.add (i32.const 1687296099)) - (i32.add (i32.const 1427365960)) - (i32.add (i32.const -1291938371)) - (i32.add (i32.const -716444629)) - (i32.add (i32.const 1184299445)) - (i32.add (i32.const -1972453235)) - (i32.add (i32.const -916020005)) - (i32.add (i32.const 1417250833)) - (i32.add (i32.const 686179862)) - (i32.add (i32.const 749141342)) - (i32.add (i32.const -413084987)) - (i32.add (i32.const -120918649)) - (i32.add (i32.const -15394345)) - (i32.add (i32.const 119768128)) - (i32.add (i32.const -502055279)) - (i32.add (i32.const 1567268989)) - (i32.add (i32.const 2070826535)) - (i32.add (i32.const 1499971822)) - (i32.add (i32.const 1036975818)) - (i32.add (i32.const -1118110444)) - (i32.add (i32.const -800560232)) - (i32.add (i32.const -1795622255)) - (i32.add (i32.const -1327760444)) - (i32.add (i32.const -1108103603)) - (i32.add (i32.const -575458914)) - (i32.add (i32.const 877010616)) - (i32.add (i32.const 686980972)) - (i32.add (i32.const 1995819342)) - (i32.add (i32.const 1840255511)) - (i32.add (i32.const 431334034)) - (i32.add (i32.const -1082473031)) - (i32.add (i32.const 1931217557)) - (i32.add (i32.const -63548645)) - (i32.add (i32.const 1111144272)) - (i32.add (i32.const -730191943)) - (i32.add (i32.const 1382384468)) - (i32.add (i32.const 629853427)) - (i32.add (i32.const 327504849)) - (i32.add (i32.const -1088079629)) - (i32.add (i32.const 539177556)) - (i32.add (i32.const 566731519)) - (i32.add (i32.const -59565840)) - (i32.add (i32.const -668127949)) - (i32.add (i32.const -204052610)) - (i32.add (i32.const -6962864)) - (i32.add (i32.const 1599114266)) - (i32.add (i32.const 1651043648)) - (i32.add (i32.const 584665060)) - (i32.add (i32.const 622868085)) - (i32.add (i32.const 561498541)) - (i32.add (i32.const 1187876299)) - (i32.add (i32.const -1017441419)) - (i32.add (i32.const 2102016304)) - (i32.add (i32.const 2086972497)) - (i32.add (i32.const -617670550)) - (i32.add (i32.const -1484509442)) - (i32.add (i32.const -748673208)) - (i32.add (i32.const 1246318333)) - (i32.add (i32.const 1099172063)) - (i32.add (i32.const 970031771)) - (i32.add (i32.const -1197877434)) - (i32.add (i32.const 291541392)) - (i32.add (i32.const -889645093)) - (i32.add (i32.const 1479189642)) - (i32.add (i32.const -1102537271)) - (i32.add (i32.const 2007557517)) - (i32.add (i32.const 226290360)) - (i32.add (i32.const -2131993141)) - (i32.add (i32.const 1727844973)) - (i32.add (i32.const -118520745)) - (i32.add (i32.const 1422164279)) - (i32.add (i32.const 2016161529)) - (i32.add (i32.const -1391318622)) - (i32.add (i32.const -385314104)) - (i32.add (i32.const 720565763)) - (i32.add (i32.const -1378777380)) - (i32.add (i32.const 1517047884)) - (i32.add (i32.const -564569658)) - (i32.add (i32.const -391144864)) - (i32.add (i32.const -873747706)) - (i32.add (i32.const -37011082)) - (i32.add (i32.const -932147282)) - (i32.add (i32.const 1700916448)) - (i32.add (i32.const -523481046)) - (i32.add (i32.const 325946609)) - (i32.add (i32.const -511881402)) - (i32.add (i32.const -287880380)) - (i32.add (i32.const -1419381278)) - (i32.add (i32.const -678016872)) - (i32.add (i32.const 964060287)) - (i32.add (i32.const -531538916)) - (i32.add (i32.const -317465606)) - (i32.add (i32.const -537093155)) - (i32.add (i32.const -1815898062)) - (i32.add (i32.const -368946117)) - (i32.add (i32.const -630097340)) - (i32.add (i32.const -2034233878)) - (i32.add (i32.const 481386117)) - (i32.add (i32.const 1128562872)) - (i32.add (i32.const -523263655)) - (i32.add (i32.const 595300160)) - (i32.add (i32.const -648041866)) - (i32.add (i32.const 1304977093)) - (i32.add (i32.const -718114067)) - (i32.add (i32.const 675900273)) - (i32.add (i32.const -865431514)) - (i32.add (i32.const -1027736543)) - (i32.add (i32.const 775644071)) - (i32.add (i32.const 805555046)) - (i32.add (i32.const -1764696743)) - (i32.add (i32.const -184197517)) - (i32.add (i32.const 175804503)) - (i32.add (i32.const -1912425632)) - (i32.add (i32.const -1030458343)) - (i32.add (i32.const 787750928)) - (i32.add (i32.const 845014094)) - (i32.add (i32.const 707077234)) - (i32.add (i32.const -648606000)) - (i32.add (i32.const -1885717867)) - (i32.add (i32.const -714199777)) - (i32.add (i32.const 996072257)) - (i32.add (i32.const 644223760)) - (i32.add (i32.const -910650091)) - (i32.add (i32.const -1462771908)) - (i32.add (i32.const 1145120141)) - (i32.add (i32.const -1022097132)) - (i32.add (i32.const 639837088)) - (i32.add (i32.const 688554311)) - (i32.add (i32.const 42013661)) - (i32.add (i32.const -250653734)) - (i32.add (i32.const -292230445)) - (i32.add (i32.const -1842411000)) - (i32.add (i32.const -1830390773)) - (i32.add (i32.const -1476368546)) - (i32.add (i32.const 650792096)) - (i32.add (i32.const -2031496999)) - (i32.add (i32.const 145878776)) - (i32.add (i32.const 666081170)) - (i32.add (i32.const 366881541)) - (i32.add (i32.const 1513602447)) - (i32.add (i32.const -2047225603)) - (i32.add (i32.const 1065895029)) - (i32.add (i32.const -2034990115)) - (i32.add (i32.const -165853475)) - (i32.add (i32.const -1166016726)) - (i32.add (i32.const -1149693700)) - (i32.add (i32.const 916628856)) - (i32.add (i32.const 356592582)) - (i32.add (i32.const 864246546)) - (i32.add (i32.const 1527919016)) - (i32.add (i32.const -1038003990)) - (i32.add (i32.const -1274681780)) - (i32.add (i32.const 1423604872)) - (i32.add (i32.const 1789322395)) - (i32.add (i32.const -793326585)) - (i32.add (i32.const 1279415651)) - (i32.add (i32.const -113857457)) - (i32.add (i32.const -1506455264)) - (i32.add (i32.const 223162193)) - (i32.add (i32.const 1306597343)) - (i32.add (i32.const -1510852746)) - (i32.add (i32.const -2117938174)) - (i32.add (i32.const -1369681843)) - (i32.add (i32.const -751617107)) - (i32.add (i32.const 1724365798)) - (i32.add (i32.const 1103219924)) - (i32.add (i32.const -757717103)) - (i32.add (i32.const -542916664)) - (i32.add (i32.const 829238981)) - (i32.add (i32.const -40502833)) - (i32.add (i32.const -1491310442)) - (i32.add (i32.const -425942201)) - (i32.add (i32.const 2043554323)) - (i32.add (i32.const -1232933641)) - (i32.add (i32.const -1252034419)) - (i32.add (i32.const -1293740361)) - (i32.add (i32.const 1264949153)) - (i32.add (i32.const -10244596)) - (i32.add (i32.const 584852572)) - (i32.add (i32.const 1995061861)) - (i32.add (i32.const 2025930302)) - (i32.add (i32.const -1499251071)) - (i32.add (i32.const -548919025)) - (i32.add (i32.const 629579813)) - (i32.add (i32.const 158615950)) - (i32.add (i32.const 1572256401)) - (i32.add (i32.const 778206818)) - (i32.add (i32.const -1489729453)) - (i32.add (i32.const -672135654)) - (i32.add (i32.const 941395894)) - (i32.add (i32.const -1263431866)) - (i32.add (i32.const -1731284530)) - (i32.add (i32.const 114155189)) - (i32.add (i32.const 808642501)) - (i32.add (i32.const -1800169516)) - (i32.add (i32.const 68506818)) - (i32.add (i32.const 1586294607)) - (i32.add (i32.const 1607066012)) - (i32.add (i32.const -2080431609)) - (i32.add (i32.const 817979351)) - (i32.add (i32.const 1449224143)) - (i32.add (i32.const 601461118)) - (i32.add (i32.const 1904989365)) - (i32.add (i32.const -1690417461)) - (i32.add (i32.const -857574226)) - (i32.add (i32.const 442338357)) - (i32.add (i32.const -224302917)) - (i32.add (i32.const 367581408)) - (i32.add (i32.const -2021660941)) - (i32.add (i32.const 1582271938)) - (i32.add (i32.const -1780556802)) - (i32.add (i32.const -162315210)) - (i32.add (i32.const -455392922)) - (i32.add (i32.const -330566360)) - (i32.add (i32.const 1135906753)) - (i32.add (i32.const -1517375669)) - (i32.add (i32.const 1954076329)) - (i32.add (i32.const 1814613433)) - (i32.add (i32.const -681153091)) - (i32.add (i32.const -510191695)) - (i32.add (i32.const -1926022764)) - (i32.add (i32.const -1590463567)) - (i32.add (i32.const 675700982)) - (i32.add (i32.const 1838711787)) - (i32.add (i32.const 577471484)) - (i32.add (i32.const 1975290900)) - (i32.add (i32.const -398712602)) - (i32.add (i32.const -572009895)) - (i32.add (i32.const 26968127)) - (i32.add (i32.const -1068649243)) - (i32.add (i32.const 1219818716)) - (i32.add (i32.const -134379806)) - (i32.add (i32.const -429786080)) - (i32.add (i32.const 76338208)) - (i32.add (i32.const 1555640052)) - (i32.add (i32.const -739272267)) - (i32.add (i32.const -391251082)) - (i32.add (i32.const -919063903)) - (i32.add (i32.const 873941684)) - (i32.add (i32.const -688186400)) - (i32.add (i32.const -2069034595)) - (i32.add (i32.const -736582122)) - (i32.add (i32.const -133075114)) - (i32.add (i32.const -1321156945)) - (i32.add (i32.const 891871922)) - (i32.add (i32.const 1993478944)) - (i32.add (i32.const 730871911)) - (i32.add (i32.const -557937640)) - (i32.add (i32.const -2143970481)) - (i32.add (i32.const -1256605065)) - (i32.add (i32.const 2091023681)) - (i32.add (i32.const 647713125)) - (i32.add (i32.const 162796781)) - (i32.add (i32.const 218480689)) - (i32.add (i32.const 1069912838)) - (i32.add (i32.const -1404309428)) - (i32.add (i32.const 1672372438)) - (i32.add (i32.const -1505279092)) - (i32.add (i32.const 2122251388)) - (i32.add (i32.const 2135980219)) - (i32.add (i32.const -1084946297)) - (i32.add (i32.const 812640079)) - (i32.add (i32.const 1276940157)) - (i32.add (i32.const -609602309)) - (i32.add (i32.const -126979396)) - (i32.add (i32.const 1535018877)) - (i32.add (i32.const 191624370)) - (i32.add (i32.const 298680340)) - (i32.add (i32.const 838482010)) - (i32.add (i32.const -1666843073)) - (i32.add (i32.const 1791682261)) - (i32.add (i32.const 1585556176)) - (i32.add (i32.const 1307981568)) - (i32.add (i32.const -1143387302)) - (i32.add (i32.const 1719219065)) - (i32.add (i32.const 1994194798)) - (i32.add (i32.const 696173380)) - (i32.add (i32.const -1025002433)) - (i32.add (i32.const -1416625348)) - (i32.add (i32.const -1660400947)) - (i32.add (i32.const 98460993)) - (i32.add (i32.const 800043471)) - (i32.add (i32.const 1784602379)) - (i32.add (i32.const 1311761256)) - (i32.add (i32.const -879987989)) - (i32.add (i32.const 1019231109)) - (i32.add (i32.const 772701258)) - (i32.add (i32.const 1475688211)) - (i32.add (i32.const -1132979507)) - (i32.add (i32.const 817074012)) - (i32.add (i32.const 2010709853)) - (i32.add (i32.const 1538961533)) - (i32.add (i32.const 1169700299)) - (i32.add (i32.const 1881827608)) - (i32.add (i32.const -207318563)) - (i32.add (i32.const -108162655)) - (i32.add (i32.const -1431160182)) - (i32.add (i32.const 168529715)) - (i32.add (i32.const 907642195)) - (i32.add (i32.const -1158359651)) - (i32.add (i32.const 1604256487)) - (i32.add (i32.const -1398946118)) - (i32.add (i32.const -26153004)) - (i32.add (i32.const -1410300420)) - (i32.add (i32.const -402178034)) - (i32.add (i32.const -920686491)) - (i32.add (i32.const -715312083)) - (i32.add (i32.const -1077895230)) - (i32.add (i32.const -456325108)) - (i32.add (i32.const -952781347)) - (i32.add (i32.const -1948818540)) - (i32.add (i32.const -772048723)) - (i32.add (i32.const 374920778)) - (i32.add (i32.const 739258068)) - (i32.add (i32.const -1248977693)) - (i32.add (i32.const 1005962315)) - (i32.add (i32.const -1109627642)) - (i32.add (i32.const 35145306)) - (i32.add (i32.const -1025134556)) - (i32.add (i32.const -76707708)) - (i32.add (i32.const -937298018)) - (i32.add (i32.const 1799433771)) - (i32.add (i32.const -721353271)) - (i32.add (i32.const -1135432787)) - (i32.add (i32.const 2051016595)) - (i32.add (i32.const 933560612)) - (i32.add (i32.const -1479789502)) - (i32.add (i32.const 342893880)) - (i32.add (i32.const 1150410834)) - (i32.add (i32.const -882302243)) - (i32.add (i32.const 671147023)) - (i32.add (i32.const 1259627103)) - (i32.add (i32.const 1569029510)) - (i32.add (i32.const 796202589)) - (i32.add (i32.const -1586729215)) - (i32.add (i32.const -1064938675)) - (i32.add (i32.const 815910775)) - (i32.add (i32.const 17606424)) - (i32.add (i32.const -1600281961)) - (i32.add (i32.const 391033076)) - (i32.add (i32.const 979854159)) - (i32.add (i32.const 652733498)) - (i32.add (i32.const -357477083)) - (i32.add (i32.const -885177929)) - (i32.add (i32.const -830525146)) - (i32.add (i32.const -1896932911)) - (i32.add (i32.const -359459188)) - (i32.add (i32.const 1383422866)) - (i32.add (i32.const 1696527586)) - (i32.add (i32.const -1605087522)) - (i32.add (i32.const 1462384891)) - (i32.add (i32.const 86509783)) - (i32.add (i32.const 63834094)) - (i32.add (i32.const -443375418)) - (i32.add (i32.const -723584183)) - (i32.add (i32.const 446956109)) - (i32.add (i32.const -400505128)) - (i32.add (i32.const -1406301331)) - (i32.add (i32.const -2109245733)) - (i32.add (i32.const 546080947)) - (i32.add (i32.const 1648013905)) - (i32.add (i32.const -575868111)) - (i32.add (i32.const -864259634)) - (i32.add (i32.const -595726265)) - (i32.add (i32.const -1636341639)) - (i32.add (i32.const -632412181)) - (i32.add (i32.const -659637917)) - (i32.add (i32.const -125719918)) - (i32.add (i32.const -1129078974)) - (i32.add (i32.const 1702704475)) - (i32.add (i32.const 95686403)) - (i32.add (i32.const -375220777)) - (i32.add (i32.const 2074709068)) - (i32.add (i32.const -243340048)) - (i32.add (i32.const 2138080596)) - (i32.add (i32.const -798222181)) - (i32.add (i32.const -445419277)) - (i32.add (i32.const -145917061)) - (i32.add (i32.const -2127012195)) - (i32.add (i32.const -886843663)) - (i32.add (i32.const 1293095310)) - (i32.add (i32.const 1086219026)) - (i32.add (i32.const 294235913)) - (i32.add (i32.const -1481745764)) - (i32.add (i32.const 417311007)) - (i32.add (i32.const 1532793234)) - (i32.add (i32.const 1094410496)) - (i32.add (i32.const -603498058)) - (i32.add (i32.const -1269656843)) - (i32.add (i32.const 112208449)) - (i32.add (i32.const -2100452399)) - (i32.add (i32.const 60640508)) - (i32.add (i32.const 576708360)) - (i32.add (i32.const -716995741)) - (i32.add (i32.const -260782828)) - (i32.add (i32.const 434023036)) - (i32.add (i32.const -1609908504)) - (i32.add (i32.const 1438811570)) - (i32.add (i32.const 775014390)) - (i32.add (i32.const -1013567766)) - (i32.add (i32.const 160997337)) - (i32.add (i32.const -2002924401)) - (i32.add (i32.const -484311520)) - (i32.add (i32.const 344871259)) - (i32.add (i32.const -1767446200)) - (i32.add (i32.const -768064540)) - (i32.add (i32.const 367380089)) - (i32.add (i32.const -743623074)) - (i32.add (i32.const 185733251)) - (i32.add (i32.const 2138595838)) - (i32.add (i32.const -1495209817)) - (i32.add (i32.const 2039212284)) - (i32.add (i32.const -477965089)) - (i32.add (i32.const 864635494)) - (i32.add (i32.const -1723024441)) - (i32.add (i32.const 650421200)) - (i32.add (i32.const -1913487790)) - (i32.add (i32.const -647683857)) - (i32.add (i32.const 1370020140)) - (i32.add (i32.const 1130129450)) - (i32.add (i32.const 298749455)) - (i32.add (i32.const -1349429467)) - (i32.add (i32.const 1376251756)) - (i32.add (i32.const -616554803)) - (i32.add (i32.const -50505112)) - (i32.add (i32.const 617961454)) - (i32.add (i32.const -1580215604)) - (i32.add (i32.const -1077463272)) - (i32.add (i32.const -1404395760)) - (i32.add (i32.const 664518990)) - (i32.add (i32.const 1041605792)) - (i32.add (i32.const 924072114)) - (i32.add (i32.const -325576996)) - (i32.add (i32.const -1176130791)) - (i32.add (i32.const 1257967292)) - (i32.add (i32.const 1683617036)) - (i32.add (i32.const 402440834)) - (i32.add (i32.const -1732126938)) - (i32.add (i32.const -879305409)) - (i32.add (i32.const -668892983)) - (i32.add (i32.const 267371926)) - (i32.add (i32.const -773466960)) - (i32.add (i32.const -1965375913)) - (i32.add (i32.const -1389166889)) - (i32.add (i32.const 2052701974)) - (i32.add (i32.const 1657186270)) - (i32.add (i32.const 67571589)) - (i32.add (i32.const 449392511)) - (i32.add (i32.const 765853946)) - (i32.add (i32.const -731768736)) - (i32.add (i32.const -765085074)) - (i32.add (i32.const -914884854)) - (i32.add (i32.const -986524625)) - (i32.add (i32.const 1444216612)) - (i32.add (i32.const -1492642947)) - (i32.add (i32.const -19711259)) - (i32.add (i32.const 126290484)) - (i32.add (i32.const -155040715)) - (i32.add (i32.const -384737228)) - (i32.add (i32.const 2141696472)) - (i32.add (i32.const -1628120109)) - (i32.add (i32.const -1160710487)) - (i32.add (i32.const 328805765)) - (i32.add (i32.const -2001363757)) - (i32.add (i32.const 1090688358)) - (i32.add (i32.const 826850235)) - (i32.add (i32.const 1853972200)) - (i32.add (i32.const -894739362)) - (i32.add (i32.const -1250407103)) - (i32.add (i32.const 1177615134)) - (i32.add (i32.const -1163798165)) - (i32.add (i32.const -785098874)) - (i32.add (i32.const -1355372311)) - (i32.add (i32.const -1902201672)) - (i32.add (i32.const -571222866)) - (i32.add (i32.const -1447971663)) - (i32.add (i32.const -276966537)) - (i32.add (i32.const 1228527508)) - (i32.add (i32.const 1931396954)) - (i32.add (i32.const -615086668)) - (i32.add (i32.const -174634339)) - (i32.add (i32.const -1634346579)) - (i32.add (i32.const 366454441)) - (i32.add (i32.const -812948961)) - (i32.add (i32.const 1143651927)) - (i32.add (i32.const 143961194)) - (i32.add (i32.const 1720057173)) - (i32.add (i32.const -1632411632)) - (i32.add (i32.const -55656623)) - (i32.add (i32.const 1937175450)) - (i32.add (i32.const -135182917)) - (i32.add (i32.const -1431677780)) - (i32.add (i32.const -1306780980)) - (i32.add (i32.const -1965319972)) - (i32.add (i32.const -6464247)) - (i32.add (i32.const 1267962844)) - (i32.add (i32.const -1026623882)) - (i32.add (i32.const -192457096)) - (i32.add (i32.const 786011463)) - (i32.add (i32.const -1102008244)) - (i32.add (i32.const 546848636)) - (i32.add (i32.const -988728189)) - (i32.add (i32.const -1409114054)) - (i32.add (i32.const 1651758425)) - (i32.add (i32.const -1885145439)) - (i32.add (i32.const -982362649)) - (i32.add (i32.const -459944170)) - (i32.add (i32.const 460745150)) - (i32.add (i32.const -658543654)) - (i32.add (i32.const -118825378)) - (i32.add (i32.const -761527449)) - (i32.add (i32.const 759694955)) - (i32.add (i32.const -1144424937)) - (i32.add (i32.const -637980420)) - (i32.add (i32.const 144170031)) - (i32.add (i32.const 1205243278)) - (i32.add (i32.const 1105416543)) - (i32.add (i32.const 1448713317)) - (i32.add (i32.const 1316029763)) - (i32.add (i32.const 2124151070)) - (i32.add (i32.const 486873743)) - (i32.add (i32.const 2018270741)) - (i32.add (i32.const -741973592)) - (i32.add (i32.const 1080539246)) - (i32.add (i32.const 1771307780)) - (i32.add (i32.const -1340032689)) - (i32.add (i32.const -1762005212)) - (i32.add (i32.const 641957376)) - (i32.add (i32.const -1438528532)) - (i32.add (i32.const -806885847)) - (i32.add (i32.const -1998321569)) - (i32.add (i32.const -1265271093)) - (i32.add (i32.const -248412391)) - (i32.add (i32.const -692613058)) - (i32.add (i32.const -1127860879)) - (i32.add (i32.const -1846024329)) - (i32.add (i32.const -286293329)) - (i32.add (i32.const 1293181940)) - (i32.add (i32.const 390353333)) - (i32.add (i32.const -1193883115)) - (i32.add (i32.const 1649098237)) - (i32.add (i32.const -847740552)) - (i32.add (i32.const 893060950)) - (i32.add (i32.const -996598618)) - (i32.add (i32.const -586708228)) - (i32.add (i32.const 518603195)) - (i32.add (i32.const -1780949175)) - (i32.add (i32.const -905456102)) - (i32.add (i32.const 1298443377)) - (i32.add (i32.const 1276815735)) - (i32.add (i32.const -2110623191)) - (i32.add (i32.const 2022063613)) - (i32.add (i32.const -1398124848)) - (i32.add (i32.const -1075567827)) - (i32.add (i32.const 322151633)) - (i32.add (i32.const 1800908287)) - (i32.add (i32.const 1383757149)) - (i32.add (i32.const 1966879212)) - (i32.add (i32.const 1069687950)) - (i32.add (i32.const -1254037665)) - (i32.add (i32.const 1203074508)) - (i32.add (i32.const 1920119330)) - (i32.add (i32.const 875345821)) - (i32.add (i32.const 1938724657)) - (i32.add (i32.const -1565464943)) - (i32.add (i32.const 290851461)) - (i32.add (i32.const -549755632)) - (i32.add (i32.const 1442837756)) - (i32.add (i32.const 255357437)) - (i32.add (i32.const -1162144908)) - (i32.add (i32.const 427381625)) - (i32.add (i32.const -281464381)) - (i32.add (i32.const 555947996)) - (i32.add (i32.const -334691566)) - (i32.add (i32.const 1033987143)) - (i32.add (i32.const -752439018)) - (i32.add (i32.const 1963245021)) - (i32.add (i32.const -1451275815)) - (i32.add (i32.const 1340923933)) - (i32.add (i32.const 411041799)) - (i32.add (i32.const 2145478953)) - (i32.add (i32.const 1955840737)) - (i32.add (i32.const -657702706)) - (i32.add (i32.const 1979900698)) - (i32.add (i32.const -208104069)) - (i32.add (i32.const -664662290)) - (i32.add (i32.const 710929989)) - (i32.add (i32.const -414858173)) - (i32.add (i32.const -1627991885)) - (i32.add (i32.const -1931046972)) - (i32.add (i32.const -427871737)) - (i32.add (i32.const -1190532199)) - (i32.add (i32.const 647808686)) - (i32.add (i32.const 1287372386)) - (i32.add (i32.const -1079638267)) - (i32.add (i32.const -116183754)) - (i32.add (i32.const -1655580655)) - (i32.add (i32.const 252797955)) - (i32.add (i32.const 1572584529)) - (i32.add (i32.const 943081185)) - (i32.add (i32.const -767742863)) - (i32.add (i32.const -2003029420)) - (i32.add (i32.const 1241176130)) - (i32.add (i32.const -1943093629)) - (i32.add (i32.const -1313259251)) - (i32.add (i32.const 1196618863)) - (i32.add (i32.const -258818283)) - (i32.add (i32.const -1891408814)) - (i32.add (i32.const 1653080869)) - (i32.add (i32.const -1845468201)) - (i32.add (i32.const -986839468)) - (i32.add (i32.const -1699987691)) - (i32.add (i32.const 2101920684)) - (i32.add (i32.const -914672314)) - (i32.add (i32.const -198209958)) - (i32.add (i32.const 1519018962)) - (i32.add (i32.const 1037881091)) - (i32.add (i32.const -1087950919)) - (i32.add (i32.const 2097790631)) - (i32.add (i32.const -828377130)) - (i32.add (i32.const -304938874)) - (i32.add (i32.const -1076991201)) - (i32.add (i32.const -414807584)) - (i32.add (i32.const 1152738256)) - (i32.add (i32.const -1171653009)) - (i32.add (i32.const 357402557)) - (i32.add (i32.const 1797342896)) - (i32.add (i32.const 1329591938)) - (i32.add (i32.const 1588834764)) - (i32.add (i32.const -1959683436)) - (i32.add (i32.const 1249902974)) - (i32.add (i32.const -1744147251)) - (i32.add (i32.const -1328810109)) - (i32.add (i32.const -1163470604)) - (i32.add (i32.const 361134101)) - (i32.add (i32.const -79599584)) - (i32.add (i32.const 1048880455)) - (i32.add (i32.const -214788940)) - (i32.add (i32.const 539964521)) - (i32.add (i32.const -192690553)) - (i32.add (i32.const -1095834040)) - (i32.add (i32.const 1473985057)) - (i32.add (i32.const -1579359850)) - (i32.add (i32.const -1454230863)) - (i32.add (i32.const 2027878113)) - (i32.add (i32.const -171034110)) - (i32.add (i32.const 2065666301)) - (i32.add (i32.const -1293298921)) - (i32.add (i32.const 1118298797)) - (i32.add (i32.const 675745853)) - (i32.add (i32.const 889496484)) - (i32.add (i32.const -1461509279)) - (i32.add (i32.const 803451217)) - (i32.add (i32.const -2037853141)) - (i32.add (i32.const 903904741)) - (i32.add (i32.const -395687354)) - (i32.add (i32.const 1857659136)) - (i32.add (i32.const 1854438376)) - (i32.add (i32.const 2120820870)) - (i32.add (i32.const 708223004)) - (i32.add (i32.const -1792475401)) - (i32.add (i32.const 68995133)) - (i32.add (i32.const 1299776153)) - (i32.add (i32.const -1938748369)) - (i32.add (i32.const -1776408473)) - (i32.add (i32.const 1944285711)) - (i32.add (i32.const -1596533663)) - (i32.add (i32.const -1940007584)) - (i32.add (i32.const 1269393371)) - (i32.add (i32.const -1242463342)) - (i32.add (i32.const 1260944846)) - (i32.add (i32.const -1930871124)) - (i32.add (i32.const -171080885)) - (i32.add (i32.const -473321849)) - (i32.add (i32.const -1340080190)) - (i32.add (i32.const -1808428944)) - (i32.add (i32.const 1236699922)) - (i32.add (i32.const -1437932489)) - (i32.add (i32.const -1263377586)) - (i32.add (i32.const 1740650802)) - (i32.add (i32.const 1185490727)) - (i32.add (i32.const 196945776)) - (i32.add (i32.const -612155984)) - (i32.add (i32.const -743247102)) - (i32.add (i32.const 1173524004)) - (i32.add (i32.const 187374339)) - (i32.add (i32.const 585805608)) - (i32.add (i32.const 1351441439)) - (i32.add (i32.const 1587485081)) - (i32.add (i32.const 1737691836)) - (i32.add (i32.const -472378124)) - (i32.add (i32.const -284377346)) - (i32.add (i32.const 756881372)) - (i32.add (i32.const -447116857)) - (i32.add (i32.const 1469233535)) - (i32.add (i32.const -1541055713)) - (i32.add (i32.const -79406490)) - (i32.add (i32.const -376333270)) - (i32.add (i32.const 2127157278)) - (i32.add (i32.const 1734865054)) - (i32.add (i32.const -729195661)) - (i32.add (i32.const 625318936)) - (i32.add (i32.const -554516628)) - (i32.add (i32.const -1857208770)) - (i32.add (i32.const -709404707)) - (i32.add (i32.const 1917409135)) - (i32.add (i32.const 896146225)) - (i32.add (i32.const -693072167)) - (i32.add (i32.const -1843027245)) - (i32.add (i32.const -1066144441)) - (i32.add (i32.const 1484299260)) - (i32.add (i32.const -1781470202)) - (i32.add (i32.const -236657496)) - (i32.add (i32.const -1236719921)) - (i32.add (i32.const 1508300136)) - (i32.add (i32.const -1485514665)) - (i32.add (i32.const 545527207)) - (i32.add (i32.const 548466075)) - (i32.add (i32.const 1218856223)) - (i32.add (i32.const 1543299284)) - (i32.add (i32.const 262087894)) - (i32.add (i32.const 758958406)) - (i32.add (i32.const -465329876)) - (i32.add (i32.const -1260549651)) - (i32.add (i32.const -1577934616)) - (i32.add (i32.const 777074037)) - (i32.add (i32.const -1339414591)) - (i32.add (i32.const -1695802236)) - (i32.add (i32.const 222055326)) - (i32.add (i32.const 534198889)) - (i32.add (i32.const -1459546758)) - (i32.add (i32.const 1551631076)) - (i32.add (i32.const -165709330)) - (i32.add (i32.const 253821342)) - (i32.add (i32.const 455934604)) - (i32.add (i32.const -1130454641)) - (i32.add (i32.const 1338610543)) - (i32.add (i32.const 1214043001)) - (i32.add (i32.const 1758747696)) - (i32.add (i32.const -402317355)) - (i32.add (i32.const -1824593789)) - (i32.add (i32.const 2095532873)) - (i32.add (i32.const 1712113443)) - (i32.add (i32.const 1809450248)) - (i32.add (i32.const 1160618290)) - (i32.add (i32.const -687704930)) - (i32.add (i32.const -1290550089)) - (i32.add (i32.const 2030019060)) - (i32.add (i32.const -1702154429)) - (i32.add (i32.const 1104429703)) - (i32.add (i32.const 384927665)) - (i32.add (i32.const -1341762091)) - (i32.add (i32.const 1821756973)) - (i32.add (i32.const 926322883)) - (i32.add (i32.const -2146692437)) - (i32.add (i32.const -1105976974)) - (i32.add (i32.const -1133667666)) - (i32.add (i32.const 2110578964)) - (i32.add (i32.const -211898823)) - (i32.add (i32.const 2103903058)) - (i32.add (i32.const 1754401263)) - (i32.add (i32.const 1809812821)) - (i32.add (i32.const 484939169)) - (i32.add (i32.const 1256718728)) - (i32.add (i32.const 1277708923)) - (i32.add (i32.const 396813282)) - (i32.add (i32.const -1361727502)) - (i32.add (i32.const -948584249)) - (i32.add (i32.const 1508754842)) - (i32.add (i32.const 403077657)) - (i32.add (i32.const -1735087233)) - (i32.add (i32.const -1415594020)) - (i32.add (i32.const -1958470909)) - (i32.add (i32.const -2094913706)) - (i32.add (i32.const -2093124342)) - (i32.add (i32.const 211524716)) - (i32.add (i32.const 87199189)) - (i32.add (i32.const 2041892402)) - (i32.add (i32.const -1471543678)) - (i32.add (i32.const -2081467281)) - (i32.add (i32.const 1573455809)) - (i32.add (i32.const 191683085)) - (i32.add (i32.const -1146300569)) - (i32.add (i32.const 954660845)) - (i32.add (i32.const -1784484424)) - (i32.add (i32.const -637563660)) - (i32.add (i32.const 2124577401)) - (i32.add (i32.const 2016476345)) - (i32.add (i32.const -1030743977)) - (i32.add (i32.const 1269864593)) - (i32.add (i32.const 1463568421)) - (i32.add (i32.const 2056917616)) - (i32.add (i32.const 612656355)) - (i32.add (i32.const 318435997)) - (i32.add (i32.const 1392909850)) - (i32.add (i32.const -1172445536)) - (i32.add (i32.const -588773059)) - (i32.add (i32.const 935025922)) - (i32.add (i32.const 1759980224)) - (i32.add (i32.const 649085316)) - (i32.add (i32.const 128388714)) - (i32.add (i32.const -1731692691)) - (i32.add (i32.const -1600558457)) - (i32.add (i32.const -1612371242)) - (i32.add (i32.const 1328651135)) - (i32.add (i32.const 1234656977)) - (i32.add (i32.const 343058612)) - (i32.add (i32.const 1976770755)) - (i32.add (i32.const -1566774255)) - (i32.add (i32.const 413299165)) - (i32.add (i32.const -1044989040)) - (i32.add (i32.const -1501759659)) - (i32.add (i32.const -1507732014)) - (i32.add (i32.const 1661097308)) - (i32.add (i32.const -1905606827)) - (i32.add (i32.const -844217824)) - (i32.add (i32.const 1067853144)) - (i32.add (i32.const -1587187646)) - (i32.add (i32.const 1762725671)) - (i32.add (i32.const 150652178)) - (i32.add (i32.const -859259934)) - (i32.add (i32.const 1491749082)) - (i32.add (i32.const 632281554)) - (i32.add (i32.const -1118102895)) - (i32.add (i32.const 819792391)) - (i32.add (i32.const 230376872)) - (i32.add (i32.const 1597256377)) - (i32.add (i32.const -608196186)) - (i32.add (i32.const -727698570)) - (i32.add (i32.const -729323419)) - (i32.add (i32.const 1592532079)) - (i32.add (i32.const -1198848383)) - (i32.add (i32.const -1544728724)) - (i32.add (i32.const -1081270045)) - (i32.add (i32.const -653200706)) - (i32.add (i32.const 1227058999)) - (i32.add (i32.const -431546742)) - (i32.add (i32.const 1584480178)) - (i32.add (i32.const 1057864118)) - (i32.add (i32.const -1419623092)) - (i32.add (i32.const -304427716)) - (i32.add (i32.const 1004583663)) - (i32.add (i32.const -893085268)) - (i32.add (i32.const -683799839)) - (i32.add (i32.const 298446409)) - (i32.add (i32.const -1641028627)) - (i32.add (i32.const 1874857261)) - (i32.add (i32.const -657424222)) - (i32.add (i32.const 969584282)) - (i32.add (i32.const 856060029)) - (i32.add (i32.const 1868311493)) - (i32.add (i32.const 1755384221)) - (i32.add (i32.const 1896072754)) - (i32.add (i32.const 298517318)) - (i32.add (i32.const 1327323416)) - (i32.add (i32.const 2095791866)) - (i32.add (i32.const -436905602)) - (i32.add (i32.const -1111447462)) - (i32.add (i32.const -938809528)) - (i32.add (i32.const -1170263507)) - (i32.add (i32.const 1940653755)) - (i32.add (i32.const -1160526760)) - (i32.add (i32.const 1193065463)) - (i32.add (i32.const -498035803)) - (i32.add (i32.const 1287923230)) - (i32.add (i32.const -1775094135)) - (i32.add (i32.const 1118093003)) - (i32.add (i32.const 357302809)) - (i32.add (i32.const -1761130045)) - (i32.add (i32.const 1070962270)) - (i32.add (i32.const -152133832)) - (i32.add (i32.const -924184297)) - (i32.add (i32.const 1689065098)) - (i32.add (i32.const -530160641)) - (i32.add (i32.const -273028711)) - (i32.add (i32.const 1277168164)) - (i32.add (i32.const -1532266863)) - (i32.add (i32.const -930191394)) - (i32.add (i32.const -1659444071)) - (i32.add (i32.const -1129900225)) - (i32.add (i32.const -1300687659)) - (i32.add (i32.const 370885372)) - (i32.add (i32.const 762867154)) - (i32.add (i32.const 583950594)) - (i32.add (i32.const -936078357)) - (i32.add (i32.const 1605147045)) - (i32.add (i32.const -249821555)) - (i32.add (i32.const 248073742)) - (i32.add (i32.const -1396406796)) - (i32.add (i32.const -1204285210)) - (i32.add (i32.const 315731134)) - (i32.add (i32.const -1989082074)) - (i32.add (i32.const 40084525)) - (i32.add (i32.const -1096758449)) - (i32.add (i32.const 180601364)) - (i32.add (i32.const -1318001732)) - (i32.add (i32.const -1919425078)) - (i32.add (i32.const 441845447)) - (i32.add (i32.const 624521842)) - (i32.add (i32.const 1044909578)) - (i32.add (i32.const 2127905187)) - (i32.add (i32.const 1266230895)) - (i32.add (i32.const 1551880593)) - (i32.add (i32.const 2034975455)) - (i32.add (i32.const 309486068)) - (i32.add (i32.const -522681912)) - (i32.add (i32.const 858043444)) - (i32.add (i32.const -136592397)) - (i32.add (i32.const -304584548)) - (i32.add (i32.const -20038989)) - (i32.add (i32.const -1601656260)) - (i32.add (i32.const -1747340851)) - (i32.add (i32.const 357478557)) - (i32.add (i32.const -762530420)) - (i32.add (i32.const 593051772)) - (i32.add (i32.const -1435504514)) - (i32.add (i32.const 1429945082)) - (i32.add (i32.const -1842446686)) - (i32.add (i32.const 1082767249)) - (i32.add (i32.const 1165061795)) - (i32.add (i32.const 1691267972)) - (i32.add (i32.const 921965181)) - (i32.add (i32.const 212929431)) - (i32.add (i32.const 6028028)) - (i32.add (i32.const -1051415406)) - (i32.add (i32.const -966085833)) - (i32.add (i32.const 937931528)) - (i32.add (i32.const 644050108)) - (i32.add (i32.const -180213357)) - (i32.add (i32.const 1800124977)) - (i32.add (i32.const 674862327)) - (i32.add (i32.const -338588429)) - (i32.add (i32.const -1435978301)) - (i32.add (i32.const -1388277849)) - (i32.add (i32.const -1152298992)) - (i32.add (i32.const -1785302235)) - (i32.add (i32.const -144468095)) - (i32.add (i32.const -506565641)) - (i32.add (i32.const -177157330)) - (i32.add (i32.const -334566242)) - (i32.add (i32.const 302428669)) - (i32.add (i32.const -1284639572)) - (i32.add (i32.const -2146120146)) - (i32.add (i32.const 1913711741)) - (i32.add (i32.const -1223695111)) - (i32.add (i32.const -1231225749)) - (i32.add (i32.const 87111970)) - (i32.add (i32.const 1041388615)) - (i32.add (i32.const 1303630803)) - (i32.add (i32.const -1963328314)) - (i32.add (i32.const 590449911)) - (i32.add (i32.const -1266382585)) - (i32.add (i32.const -1271213157)) - (i32.add (i32.const 1823953250)) - (i32.add (i32.const 1202606716)) - (i32.add (i32.const -1807586242)) - (i32.add (i32.const 1713846374)) - (i32.add (i32.const -1008802650)) - (i32.add (i32.const 1663906089)) - (i32.add (i32.const -746350901)) - (i32.add (i32.const -402456542)) - (i32.add (i32.const -37069351)) - (i32.add (i32.const 570095681)) - (i32.add (i32.const 1318602621)) - (i32.add (i32.const -843578732)) - (i32.add (i32.const -266827780)) - (i32.add (i32.const 1912213154)) - (i32.add (i32.const 1441475116)) - (i32.add (i32.const 1307295639)) - (i32.add (i32.const -509845874)) - (i32.add (i32.const 1689006394)) - (i32.add (i32.const -1691529038)) - (i32.add (i32.const -1670268704)) - (i32.add (i32.const -1713922497)) - (i32.add (i32.const 1088882743)) - (i32.add (i32.const -1234162460)) - (i32.add (i32.const -1947167762)) - (i32.add (i32.const -1621449795)) - (i32.add (i32.const 1650840356)) - (i32.add (i32.const 750983332)) - (i32.add (i32.const -156583775)) - (i32.add (i32.const 2007666481)) - (i32.add (i32.const 399145455)) - (i32.add (i32.const 1955674157)) - (i32.add (i32.const -8780691)) - (i32.add (i32.const 213674844)) - (i32.add (i32.const 1796663693)) - (i32.add (i32.const 413656139)) - (i32.add (i32.const -1105778601)) - (i32.add (i32.const 1200061237)) - (i32.add (i32.const 1714171316)) - (i32.add (i32.const 90573030)) - (i32.add (i32.const -1813652239)) - (i32.add (i32.const -2130918568)) - (i32.add (i32.const 1126179717)) - (i32.add (i32.const 1547574117)) - (i32.add (i32.const -1251540829)) - (i32.add (i32.const -213786350)) - (i32.add (i32.const 1994976075)) - (i32.add (i32.const 2010702189)) - (i32.add (i32.const 4473883)) - (i32.add (i32.const 1979426636)) - (i32.add (i32.const 1517418881)) - (i32.add (i32.const 690547218)) - (i32.add (i32.const 2017525015)) - (i32.add (i32.const -1700797907)) - (i32.add (i32.const 1553314307)) - (i32.add (i32.const 1957086650)) - (i32.add (i32.const -1318889811)) - (i32.add (i32.const 589313195)) - (i32.add (i32.const 1806714756)) - (i32.add (i32.const 794678305)) - (i32.add (i32.const -254280751)) - (i32.add (i32.const 1325479695)) - (i32.add (i32.const -725171175)) - (i32.add (i32.const 312426771)) - (i32.add (i32.const 540184213)) - (i32.add (i32.const 1856259825)) - (i32.add (i32.const -2100409377)) - (i32.add (i32.const -280661988)) - (i32.add (i32.const -1572830796)) - (i32.add (i32.const 261733666)) - (i32.add (i32.const -1581383375)) - (i32.add (i32.const -1096395150)) - (i32.add (i32.const 1226290044)) - (i32.add (i32.const 674841217)) - (i32.add (i32.const -1649969546)) - (i32.add (i32.const 2118305116)) - (i32.add (i32.const -317895803)) - (i32.add (i32.const 1680799185)) - (i32.add (i32.const -752901144)) - (i32.add (i32.const -1185382413)) - (i32.add (i32.const 1150451033)) - (i32.add (i32.const -449393346)) - (i32.add (i32.const 267055208)) - (i32.add (i32.const 863661189)) - (i32.add (i32.const -69755569)) - (i32.add (i32.const -1818062052)) - (i32.add (i32.const 1695732115)) - (i32.add (i32.const -313785963)) - (i32.add (i32.const -327987186)) - (i32.add (i32.const 1843786874)) - (i32.add (i32.const 1187598166)) - (i32.add (i32.const 158368031)) - (i32.add (i32.const -2127915963)) - (i32.add (i32.const 1529994176)) - (i32.add (i32.const 359400206)) - (i32.add (i32.const 1173661995)) - (i32.add (i32.const -233170457)) - (i32.add (i32.const -2030485484)) - (i32.add (i32.const -1840765780)) - (i32.add (i32.const -1976668014)) - (i32.add (i32.const -683408709)) - (i32.add (i32.const -1202317978)) - (i32.add (i32.const -2093339729)) - (i32.add (i32.const 110953729)) - (i32.add (i32.const -304278581)) - (i32.add (i32.const -1814355803)) - (i32.add (i32.const 2086539133)) - (i32.add (i32.const 1677299226)) - (i32.add (i32.const -1992611841)) - (i32.add (i32.const 1647984153)) - (i32.add (i32.const -1488800322)) - (i32.add (i32.const 8962999)) - (i32.add (i32.const -776057212)) - (i32.add (i32.const 1724403201)) - (i32.add (i32.const 871905323)) - (i32.add (i32.const 1556089014)) - (i32.add (i32.const 324475765)) - (i32.add (i32.const -1569486304)) - (i32.add (i32.const -1053672379)) - (i32.add (i32.const 902608208)) - (i32.add (i32.const -1301744976)) - (i32.add (i32.const 705757197)) - (i32.add (i32.const 320799404)) - (i32.add (i32.const 292262638)) - (i32.add (i32.const 538021544)) - (i32.add (i32.const -359448129)) - (i32.add (i32.const -1037326026)) - (i32.add (i32.const -976868123)) - (i32.add (i32.const -879197483)) - (i32.add (i32.const 1611197738)) - (i32.add (i32.const -537816306)) - (i32.add (i32.const -341624158)) - (i32.add (i32.const -1583041732)) - (i32.add (i32.const -325409924)) - (i32.add (i32.const -1260738082)) - (i32.add (i32.const 1815008546)) - (i32.add (i32.const -167166147)) - (i32.add (i32.const 1687581785)) - (i32.add (i32.const 1076453334)) - (i32.add (i32.const 2085150498)) - (i32.add (i32.const -1006888042)) - (i32.add (i32.const 2034793030)) - (i32.add (i32.const 3187976)) - (i32.add (i32.const 1358908856)) - (i32.add (i32.const 325302134)) - (i32.add (i32.const -250852504)) - (i32.add (i32.const -1478275033)) - (i32.add (i32.const 1597137938)) - (i32.add (i32.const -1314114731)) - (i32.add (i32.const 347021344)) - (i32.add (i32.const -1628223229)) - (i32.add (i32.const -1035971515)) - (i32.add (i32.const -939591493)) - (i32.add (i32.const 982988376)) - (i32.add (i32.const -522907735)) - (i32.add (i32.const 1334610212)) - (i32.add (i32.const 835451388)) - (i32.add (i32.const -783333332)) - (i32.add (i32.const 626279900)) - (i32.add (i32.const -776509638)) - (i32.add (i32.const -1699988515)) - (i32.add (i32.const 110684771)) - (i32.add (i32.const -2103364918)) - (i32.add (i32.const 135467861)) - (i32.add (i32.const -2133196647)) - (i32.add (i32.const 543418195)) - (i32.add (i32.const -103757064)) - (i32.add (i32.const -397302319)) - (i32.add (i32.const -1985520109)) - (i32.add (i32.const 620325922)) - (i32.add (i32.const 824384411)) - (i32.add (i32.const -675850942)) - (i32.add (i32.const 1378894521)) - (i32.add (i32.const 669410534)) - (i32.add (i32.const -1854289204)) - (i32.add (i32.const 993894792)) - (i32.add (i32.const -119512496)) - (i32.add (i32.const 513398127)) - (i32.add (i32.const 1470480154)) - (i32.add (i32.const -1929702030)) - (i32.add (i32.const 2068031137)) - (i32.add (i32.const 290598502)) - (i32.add (i32.const 1930679408)) - (i32.add (i32.const -1628624224)) - (i32.add (i32.const 916621121)) - (i32.add (i32.const -876045425)) - (i32.add (i32.const -2015624434)) - (i32.add (i32.const 1430588740)) - (i32.add (i32.const 2060748315)) - (i32.add (i32.const -317299835)) - (i32.add (i32.const 584649886)) - (i32.add (i32.const 1140655297)) - (i32.add (i32.const -1250289264)) - (i32.add (i32.const -1942263869)) - (i32.add (i32.const 2126869150)) - (i32.add (i32.const -2112505592)) - (i32.add (i32.const -1775248204)) - (i32.add (i32.const -94263803)) - (i32.add (i32.const -881127541)) - (i32.add (i32.const -425810549)) - (i32.add (i32.const 447859000)) - (i32.add (i32.const -1944666529)) - (i32.add (i32.const 1854095667)) - (i32.add (i32.const 1237376840)) - (i32.add (i32.const 2105777282)) - (i32.add (i32.const 921647182)) - (i32.add (i32.const 561168297)) - (i32.add (i32.const -489964275)) - (i32.add (i32.const -1495469987)) - (i32.add (i32.const -1811677061)) - (i32.add (i32.const -1938289846)) - (i32.add (i32.const 639916964)) - (i32.add (i32.const -56970372)) - (i32.add (i32.const -510342836)) - (i32.add (i32.const -1376344314)) - (i32.add (i32.const -1037004930)) - (i32.add (i32.const -803931100)) - (i32.add (i32.const -1829830840)) - (i32.add (i32.const 1746618170)) - (i32.add (i32.const -140462641)) - (i32.add (i32.const 2013392191)) - (i32.add (i32.const -1295962039)) - (i32.add (i32.const -1869992829)) - (i32.add (i32.const 951883572)) - (i32.add (i32.const -94941401)) - (i32.add (i32.const -297782893)) - (i32.add (i32.const -416546745)) - (i32.add (i32.const 159438790)) - (i32.add (i32.const -1128592625)) - (i32.add (i32.const -851631460)) - (i32.add (i32.const -469418518)) - (i32.add (i32.const -1501047913)) - (i32.add (i32.const 1269255980)) - (i32.add (i32.const -1142156205)) - (i32.add (i32.const -1784111962)) - (i32.add (i32.const 1187297725)) - (i32.add (i32.const 603516846)) - (i32.add (i32.const -770207346)) - (i32.add (i32.const 124415671)) - (i32.add (i32.const 198926905)) - (i32.add (i32.const 1076446722)) - (i32.add (i32.const -1406149353)) - (i32.add (i32.const -813623453)) - (i32.add (i32.const -1452243081)) - (i32.add (i32.const 91585926)) - (i32.add (i32.const 1486086358)) - (i32.add (i32.const -314083273)) - (i32.add (i32.const -555020584)) - (i32.add (i32.const -1450357041)) - (i32.add (i32.const 323502827)) - (i32.add (i32.const 1295905286)) - (i32.add (i32.const 1922048170)) - (i32.add (i32.const 415692732)) - (i32.add (i32.const -33143008)) - (i32.add (i32.const -796417743)) - (i32.add (i32.const 919776566)) - (i32.add (i32.const 2066193051)) - (i32.add (i32.const 231742859)) - (i32.add (i32.const -1538997850)) - (i32.add (i32.const -1598337224)) - (i32.add (i32.const 237801691)) - (i32.add (i32.const -409564081)) - (i32.add (i32.const 489893434)) - (i32.add (i32.const 1441449341)) - (i32.add (i32.const 1384383666)) - (i32.add (i32.const -1280988160)) - (i32.add (i32.const -812027785)) - (i32.add (i32.const 261611024)) - (i32.add (i32.const 991419064)) - (i32.add (i32.const -2035755980)) - (i32.add (i32.const -1188105052)) - (i32.add (i32.const -1255504128)) - (i32.add (i32.const -1310289657)) - (i32.add (i32.const 1541227004)) - (i32.add (i32.const -651236554)) - (i32.add (i32.const 795403558)) - (i32.add (i32.const -1029044468)) - (i32.add (i32.const 496341940)) - (i32.add (i32.const 1462360800)) - (i32.add (i32.const -1118677435)) - (i32.add (i32.const -1324863038)) - (i32.add (i32.const -465636045)) - (i32.add (i32.const 351025833)) - (i32.add (i32.const 1559105233)) - (i32.add (i32.const 1392244698)) - (i32.add (i32.const 2058073867)) - (i32.add (i32.const 1154170585)) - (i32.add (i32.const 822942338)) - (i32.add (i32.const 464191317)) - (i32.add (i32.const -1346826186)) - (i32.add (i32.const -1070962447)) - (i32.add (i32.const -1570625932)) - (i32.add (i32.const 397568657)) - (i32.add (i32.const 1789442841)) - (i32.add (i32.const 664998932)) - (i32.add (i32.const -927150354)) - (i32.add (i32.const 573034083)) - (i32.add (i32.const -1316174772)) - (i32.add (i32.const -1352418185)) - (i32.add (i32.const -1302308727)) - (i32.add (i32.const -1256231630)) - (i32.add (i32.const -437416733)) - (i32.add (i32.const 2074112425)) - (i32.add (i32.const 1096666337)) - (i32.add (i32.const -2044962563)) - (i32.add (i32.const 661289604)) - (i32.add (i32.const -1855103840)) - (i32.add (i32.const -1374636783)) - (i32.add (i32.const 1311003347)) - (i32.add (i32.const -603676138)) - (i32.add (i32.const 1191088351)) - (i32.add (i32.const -30050443)) - (i32.add (i32.const 22469264)) - (i32.add (i32.const 1840730911)) - (i32.add (i32.const 926182003)) - (i32.add (i32.const 114890493)) - (i32.add (i32.const -667803311)) - (i32.add (i32.const 968879236)) - (i32.add (i32.const -903279356)) - (i32.add (i32.const 682902959)) - (i32.add (i32.const -43866341)) - (i32.add (i32.const 1157874799)) - (i32.add (i32.const 1371773238)) - (i32.add (i32.const -424278502)) - (i32.add (i32.const -267524472)) - (i32.add (i32.const -374380)) - (i32.add (i32.const 265677902)) - (i32.add (i32.const -61006730)) - (i32.add (i32.const 38441682)) - (i32.add (i32.const -1470607083)) - (i32.add (i32.const 714166590)) - (i32.add (i32.const -1886076176)) - (i32.add (i32.const -1011014106)) - (i32.add (i32.const 6364560)) - (i32.add (i32.const 620670818)) - (i32.add (i32.const -1910613263)) - (i32.add (i32.const 1422318558)) - (i32.add (i32.const -399151664)) - (i32.add (i32.const -965956236)) - (i32.add (i32.const -87831760)) - (i32.add (i32.const 832480880)) - (i32.add (i32.const -1354415943)) - (i32.add (i32.const 1181820320)) - (i32.add (i32.const 1751131834)) - (i32.add (i32.const -1479895340)) - (i32.add (i32.const -762300218)) - (i32.add (i32.const -1795198372)) - (i32.add (i32.const -915425357)) - (i32.add (i32.const -811166472)) - (i32.add (i32.const 476899898)) - (i32.add (i32.const -885655775)) - (i32.add (i32.const -884780390)) - (i32.add (i32.const 397734321)) - (i32.add (i32.const 884738469)) - (i32.add (i32.const -1324586305)) - (i32.add (i32.const -1929028233)) - (i32.add (i32.const 1948209440)) - (i32.add (i32.const 1663510739)) - (i32.add (i32.const 682798897)) - (i32.add (i32.const -112386422)) - (i32.add (i32.const -1921716798)) - (i32.add (i32.const 967350610)) - (i32.add (i32.const -1169960852)) - (i32.add (i32.const -190638904)) - (i32.add (i32.const 793122756)) - (i32.add (i32.const -1767448737)) - (i32.add (i32.const 1572854706)) - (i32.add (i32.const -1968719812)) - (i32.add (i32.const -1740150225)) - (i32.add (i32.const -154121176)) - (i32.add (i32.const 162102822)) - (i32.add (i32.const -675045545)) - (i32.add (i32.const 1229773459)) - (i32.add (i32.const 1620256684)) - (i32.add (i32.const 237114701)) - (i32.add (i32.const 111260225)) - (i32.add (i32.const 476721687)) - (i32.add (i32.const 373235035)) - (i32.add (i32.const -956285325)) - (i32.add (i32.const -289893318)) - (i32.add (i32.const 1296854829)) - (i32.add (i32.const -1697862517)) - (i32.add (i32.const 647826473)) - (i32.add (i32.const -974944816)) - (i32.add (i32.const 1420538611)) - (i32.add (i32.const -838450360)) - (i32.add (i32.const -813116100)) - (i32.add (i32.const -1264968157)) - (i32.add (i32.const 737523443)) - (i32.add (i32.const -1519310315)) - (i32.add (i32.const -696559869)) - (i32.add (i32.const -765915488)) - (i32.add (i32.const -132138852)) - (i32.add (i32.const 1830768464)) - (i32.add (i32.const 2080479488)) - (i32.add (i32.const -2059391237)) - (i32.add (i32.const -1367205862)) - (i32.add (i32.const -1488409437)) - (i32.add (i32.const -1535746016)) - (i32.add (i32.const 1233396490)) - (i32.add (i32.const 2086539697)) - (i32.add (i32.const 873890422)) - (i32.add (i32.const 1397742487)) - (i32.add (i32.const -1305187694)) - (i32.add (i32.const 1976910781)) - (i32.add (i32.const 1285154763)) - (i32.add (i32.const 1818919711)) - (i32.add (i32.const 1142619058)) - (i32.add (i32.const 1696505783)) - (i32.add (i32.const 426007277)) - (i32.add (i32.const 422691504)) - (i32.add (i32.const 1388505414)) - (i32.add (i32.const -1008271403)) - (i32.add (i32.const -1459429714)) - (i32.add (i32.const 1813354696)) - (i32.add (i32.const -1832024852)) - (i32.add (i32.const 433231742)) - (i32.add (i32.const 2114992050)) - (i32.add (i32.const 1747730402)) - (i32.add (i32.const -807497781)) - (i32.add (i32.const 413386158)) - (i32.add (i32.const 1398451293)) - (i32.add (i32.const -468214005)) - (i32.add (i32.const -18444080)) - (i32.add (i32.const -2015569874)) - (i32.add (i32.const -1809193983)) - (i32.add (i32.const 1194508682)) - (i32.add (i32.const -477605776)) - (i32.add (i32.const -1091611600)) - (i32.add (i32.const -2011201336)) - (i32.add (i32.const 433891494)) - (i32.add (i32.const -2101595680)) - (i32.add (i32.const 1704729437)) - (i32.add (i32.const 357031960)) - (i32.add (i32.const 1340768236)) - (i32.add (i32.const 73394031)) - (i32.add (i32.const -2009428061)) - (i32.add (i32.const -286768291)) - (i32.add (i32.const 1114977315)) - (i32.add (i32.const 1328643019)) - (i32.add (i32.const -1101487387)) - (i32.add (i32.const -1956124591)) - (i32.add (i32.const -931218544)) - (i32.add (i32.const 631629629)) - (i32.add (i32.const -2142589302)) - (i32.add (i32.const -1760503854)) - (i32.add (i32.const 406114467)) - (i32.add (i32.const 933881569)) - (i32.add (i32.const -1487770102)) - (i32.add (i32.const -2128846315)) - (i32.add (i32.const 523132114)) - (i32.add (i32.const -300455399)) - (i32.add (i32.const -574813806)) - (i32.add (i32.const -1517336509)) - (i32.add (i32.const 64680751)) - (i32.add (i32.const -101151165)) - (i32.add (i32.const 1698986682)) - (i32.add (i32.const 752384335)) - (i32.add (i32.const 824551109)) - (i32.add (i32.const -1718596023)) - (i32.add (i32.const -1965296428)) - (i32.add (i32.const 1138577450)) - (i32.add (i32.const -876903335)) - (i32.add (i32.const 1548012042)) - (i32.add (i32.const -606245867)) - (i32.add (i32.const 72342710)) - (i32.add (i32.const 72885641)) - (i32.add (i32.const -224077711)) - (i32.add (i32.const -801731853)) - (i32.add (i32.const 2110947035)) - (i32.add (i32.const 1724061221)) - (i32.add (i32.const 520827580)) - (i32.add (i32.const 1304338706)) - (i32.add (i32.const -571263109)) - (i32.add (i32.const -2065889189)) - (i32.add (i32.const 1362212392)) - (i32.add (i32.const -1118636770)) - (i32.add (i32.const 803302574)) - (i32.add (i32.const 176128395)) - (i32.add (i32.const 409587613)) - (i32.add (i32.const -615159696)) - (i32.add (i32.const 1432822631)) - (i32.add (i32.const -2027892582)) - (i32.add (i32.const 1521745824)) - (i32.add (i32.const -1889710683)) - (i32.add (i32.const 1003933543)) - (i32.add (i32.const 1415325136)) - (i32.add (i32.const 1218221290)) - (i32.add (i32.const -129142263)) - (i32.add (i32.const 1221735081)) - (i32.add (i32.const 1750459037)) - (i32.add (i32.const -2052947227)) - (i32.add (i32.const 1048629932)) - (i32.add (i32.const 729508170)) - (i32.add (i32.const -1545846317)) - (i32.add (i32.const -804137662)) - (i32.add (i32.const 438676787)) - (i32.add (i32.const 993278154)) - (i32.add (i32.const -399355858)) - (i32.add (i32.const -801043986)) - (i32.add (i32.const 792176581)) - (i32.add (i32.const 1354063747)) - (i32.add (i32.const 821901480)) - (i32.add (i32.const -1436652338)) - (i32.add (i32.const 2118612568)) - (i32.add (i32.const 1973796139)) - (i32.add (i32.const -937823564)) - (i32.add (i32.const 1070144638)) - (i32.add (i32.const -236320811)) - (i32.add (i32.const -1158617637)) - (i32.add (i32.const -1707011984)) - (i32.add (i32.const 1089874805)) - (i32.add (i32.const -71781338)) - (i32.add (i32.const 553662022)) - (i32.add (i32.const -1544781516)) - (i32.add (i32.const 1348446424)) - (i32.add (i32.const 1070344102)) - (i32.add (i32.const -1495700805)) - (i32.add (i32.const -383623978)) - (i32.add (i32.const -58413132)) - (i32.add (i32.const -691478608)) - (i32.add (i32.const -1171736995)) - (i32.add (i32.const -1352132877)) - (i32.add (i32.const -963466331)) - (i32.add (i32.const -625624650)) - (i32.add (i32.const 1948732012)) - (i32.add (i32.const 1949493837)) - (i32.add (i32.const 1758186640)) - (i32.add (i32.const -430320869)) - (i32.add (i32.const -830128750)) - (i32.add (i32.const 1244549134)) - (i32.add (i32.const 1178509387)) - (i32.add (i32.const -1094127105)) - (i32.add (i32.const 1040367743)) - (i32.add (i32.const -1436493923)) - (i32.add (i32.const 325796155)) - (i32.add (i32.const -151466073)) - (i32.add (i32.const 1432908528)) - (i32.add (i32.const 2041729894)) - (i32.add (i32.const 1392405582)) - (i32.add (i32.const -1055463609)) - (i32.add (i32.const -295369545)) - (i32.add (i32.const -260756717)) - (i32.add (i32.const -1087786962)) - (i32.add (i32.const -643577951)) - (i32.add (i32.const -801260848)) - (i32.add (i32.const -1669642396)) - (i32.add (i32.const -802414133)) - (i32.add (i32.const 1615406883)) - (i32.add (i32.const 1970369025)) - (i32.add (i32.const 249136308)) - (i32.add (i32.const 578862944)) - (i32.add (i32.const -695822636)) - (i32.add (i32.const 1711975494)) - (i32.add (i32.const -680371239)) - (i32.add (i32.const -590575311)) - (i32.add (i32.const 1025453658)) - (i32.add (i32.const -1093706593)) - (i32.add (i32.const -627812445)) - (i32.add (i32.const 743775821)) - (i32.add (i32.const 1639849267)) - (i32.add (i32.const -1515573901)) - (i32.add (i32.const 1726811187)) - (i32.add (i32.const -651102028)) - (i32.add (i32.const -1796955482)) - (i32.add (i32.const -1599154398)) - (i32.add (i32.const -1468954299)) - (i32.add (i32.const -294432925)) - (i32.add (i32.const 1877342763)) - (i32.add (i32.const 1367941251)) - (i32.add (i32.const -652533988)) - (i32.add (i32.const -507511175)) - (i32.add (i32.const -11842452)) - (i32.add (i32.const 1773881113)) - (i32.add (i32.const 786772749)) - (i32.add (i32.const 630416714)) - (i32.add (i32.const -158957500)) - (i32.add (i32.const -2125215169)) - (i32.add (i32.const -332888875)) - (i32.add (i32.const 1592055286)) - (i32.add (i32.const -344404200)) - (i32.add (i32.const -128352958)) - (i32.add (i32.const 1197037172)) - (i32.add (i32.const -352520347)) - (i32.add (i32.const -311009132)) - (i32.add (i32.const -1620518134)) - (i32.add (i32.const 1979456174)) - (i32.add (i32.const 1656904072)) - (i32.add (i32.const 1498194172)) - (i32.add (i32.const -273373589)) - (i32.add (i32.const -1804957279)) - (i32.add (i32.const 568638569)) - (i32.add (i32.const -1821461226)) - (i32.add (i32.const 578565086)) - (i32.add (i32.const 1201059968)) - (i32.add (i32.const 795310813)) - (i32.add (i32.const 2033928973)) - (i32.add (i32.const 1949683375)) - (i32.add (i32.const 482168048)) - (i32.add (i32.const -1085303150)) - (i32.add (i32.const -1975406608)) - (i32.add (i32.const -1484429491)) - (i32.add (i32.const -332588074)) - (i32.add (i32.const -2134304123)) - (i32.add (i32.const -559731063)) - (i32.add (i32.const -1454908568)) - (i32.add (i32.const -21231031)) - (i32.add (i32.const -1496190344)) - (i32.add (i32.const -425820988)) - (i32.add (i32.const 1173573979)) - (i32.add (i32.const 1711601649)) - (i32.add (i32.const 26674080)) - (i32.add (i32.const 967440404)) - (i32.add (i32.const -931556673)) - (i32.add (i32.const 44070031)) - (i32.add (i32.const -1394519334)) - (i32.add (i32.const 553338633)) - (i32.add (i32.const 535158087)) - (i32.add (i32.const 1020089763)) - (i32.add (i32.const -1463736698)) - (i32.add (i32.const 1069109932)) - (i32.add (i32.const -794003972)) - (i32.add (i32.const -1442216252)) - (i32.add (i32.const 376226741)) - (i32.add (i32.const -1508122946)) - (i32.add (i32.const 144038898)) - (i32.add (i32.const -2085911864)) - (i32.add (i32.const -999940311)) - (i32.add (i32.const -168502805)) - (i32.add (i32.const -833001476)) - (i32.add (i32.const -48696977)) - (i32.add (i32.const 1922851367)) - (i32.add (i32.const 1284347668)) - (i32.add (i32.const -763300981)) - (i32.add (i32.const 621808648)) - (i32.add (i32.const -1239783003)) - (i32.add (i32.const 1575143362)) - (i32.add (i32.const -1302706837)) - (i32.add (i32.const -1192836502)) - (i32.add (i32.const -779299561)) - (i32.add (i32.const -491368671)) - (i32.add (i32.const -1768587214)) - (i32.add (i32.const -175718420)) - (i32.add (i32.const -2058891909)) - (i32.add (i32.const 1201449025)) - (i32.add (i32.const -576545944)) - (i32.add (i32.const 10309885)) - (i32.add (i32.const 2134549864)) - (i32.add (i32.const -1765719955)) - (i32.add (i32.const -413154475)) - (i32.add (i32.const 1546794886)) - (i32.add (i32.const 541804399)) - (i32.add (i32.const 1222489759)) - (i32.add (i32.const -98781630)) - (i32.add (i32.const -527097699)) - (i32.add (i32.const -1395812232)) - (i32.add (i32.const -1537165528)) - (i32.add (i32.const 1005992257)) - (i32.add (i32.const -2125987544)) - (i32.add (i32.const 1818519331)) - (i32.add (i32.const 432892795)) - (i32.add (i32.const -620751749)) - (i32.add (i32.const -989312004)) - (i32.add (i32.const -2004442259)) - (i32.add (i32.const 594715701)) - (i32.add (i32.const -2139251288)) - (i32.add (i32.const -1292933224)) - (i32.add (i32.const 924257397)) - (i32.add (i32.const -1862429227)) - (i32.add (i32.const -531795943)) - (i32.add (i32.const -1047384737)) - (i32.add (i32.const 204404296)) - (i32.add (i32.const 552239171)) - (i32.add (i32.const 2053168411)) - (i32.add (i32.const 141687091)) - (i32.add (i32.const 127255115)) - (i32.add (i32.const -504019658)) - (i32.add (i32.const 920470026)) - (i32.add (i32.const -193448070)) - (i32.add (i32.const -345082864)) - (i32.add (i32.const 1257274667)) - (i32.add (i32.const -406390720)) - (i32.add (i32.const 1014101282)) - (i32.add (i32.const -39010405)) - (i32.add (i32.const 408894415)) - (i32.add (i32.const 646408232)) - (i32.add (i32.const 244914057)) - (i32.add (i32.const 32593339)) - (i32.add (i32.const -706257572)) - (i32.add (i32.const -1759729081)) - (i32.add (i32.const -1790369892)) - (i32.add (i32.const -1902973877)) - (i32.add (i32.const -1423405803)) - (i32.add (i32.const 798694198)) - (i32.add (i32.const -1660723122)) - (i32.add (i32.const -1230313051)) - (i32.add (i32.const 1301294171)) - (i32.add (i32.const 960539627)) - (i32.add (i32.const 981391441)) - (i32.add (i32.const -796078507)) - (i32.add (i32.const 1985238535)) - (i32.add (i32.const 986418115)) - (i32.add (i32.const 2007739172)) - (i32.add (i32.const -2060116041)) - (i32.add (i32.const -1444622795)) - (i32.add (i32.const -1527660582)) - (i32.add (i32.const 234626768)) - (i32.add (i32.const -2117595898)) - (i32.add (i32.const -1251304062)) - (i32.add (i32.const 262031598)) - (i32.add (i32.const -2432248)) - (i32.add (i32.const 1183545796)) - (i32.add (i32.const 681810023)) - (i32.add (i32.const -1491826225)) - (i32.add (i32.const 1523884946)) - (i32.add (i32.const 2105048984)) - (i32.add (i32.const 403374054)) - (i32.add (i32.const -142819866)) - (i32.add (i32.const 296200334)) - (i32.add (i32.const -1315677624)) - (i32.add (i32.const 385371289)) - (i32.add (i32.const 1959365086)) - (i32.add (i32.const -1423419052)) - (i32.add (i32.const -1604141696)) - (i32.add (i32.const -2086984583)) - (i32.add (i32.const -2147132077)) - (i32.add (i32.const -1304059068)) - (i32.add (i32.const 1745558372)) - (i32.add (i32.const -1460004441)) - (i32.add (i32.const 326607602)) - (i32.add (i32.const 454961629)) - (i32.add (i32.const -276360924)) - (i32.add (i32.const -359557785)) - (i32.add (i32.const 790193224)) - (i32.add (i32.const -1102973933)) - (i32.add (i32.const -1545163017)) - (i32.add (i32.const 535724767)) - (i32.add (i32.const 946747867)) - (i32.add (i32.const 72977924)) - (i32.add (i32.const -427839351)) - (i32.add (i32.const 422020025)) - (i32.add (i32.const -1173520442)) - (i32.add (i32.const -183343721)) - (i32.add (i32.const 1465140004)) - (i32.add (i32.const -1565309544)) - (i32.add (i32.const -250757266)) - (i32.add (i32.const 779698915)) - (i32.add (i32.const 1283572379)) - (i32.add (i32.const -1797832254)) - (i32.add (i32.const -40758432)) - (i32.add (i32.const -1884223037)) - (i32.add (i32.const 785021721)) - (i32.add (i32.const -1707811642)) - (i32.add (i32.const -2055186646)) - (i32.add (i32.const 1571743989)) - (i32.add (i32.const 237758809)) - (i32.add (i32.const 454040278)) - (i32.add (i32.const 461609920)) - (i32.add (i32.const -1752247706)) - (i32.add (i32.const 2023447964)) - (i32.add (i32.const -838537938)) - (i32.add (i32.const 2131901313)) - (i32.add (i32.const 1244557770)) - (i32.add (i32.const 21845655)) - (i32.add (i32.const -1185235036)) - (i32.add (i32.const 547178884)) - (i32.add (i32.const 511416436)) - (i32.add (i32.const 1273141727)) - (i32.add (i32.const 665441571)) - (i32.add (i32.const -2039425588)) - (i32.add (i32.const 242648940)) - (i32.add (i32.const 141872265)) - (i32.add (i32.const 802902788)) - (i32.add (i32.const -265737396)) - (i32.add (i32.const -1732624865)) - (i32.add (i32.const -737983413)) - (i32.add (i32.const -924088094)) - (i32.add (i32.const 350282087)) - (i32.add (i32.const 695080431)) - (i32.add (i32.const -355920600)) - (i32.add (i32.const 109804616)) - (i32.add (i32.const 43888887)) - (i32.add (i32.const -1081018529)) - (i32.add (i32.const 608720528)) - (i32.add (i32.const 1787707811)) - (i32.add (i32.const 966518449)) - (i32.add (i32.const -701284333)) - (i32.add (i32.const -846498207)) - (i32.add (i32.const 200054068)) - (i32.add (i32.const -1268304729)) - (i32.add (i32.const -98106530)) - (i32.add (i32.const -2144077301)) - (i32.add (i32.const -1232375845)) - (i32.add (i32.const 1388957127)) - (i32.add (i32.const -1453165792)) - (i32.add (i32.const -878967061)) - (i32.add (i32.const -1056118352)) - (i32.add (i32.const 963086613)) - (i32.add (i32.const 1423834668)) - (i32.add (i32.const 1498169824)) - (i32.add (i32.const -1679764959)) - (i32.add (i32.const 684936092)) - (i32.add (i32.const 201910592)) - (i32.add (i32.const -407091829)) - (i32.add (i32.const 1558900110)) - (i32.add (i32.const 224222741)) - (i32.add (i32.const -214834145)) - (i32.add (i32.const -534307292)) - (i32.add (i32.const -1958457599)) - (i32.add (i32.const 95602710)) - (i32.add (i32.const 1377755452)) - (i32.add (i32.const 1087358758)) - (i32.add (i32.const -1366850258)) - (i32.add (i32.const -1249827187)) - (i32.add (i32.const -199503056)) - (i32.add (i32.const -2050061454)) - (i32.add (i32.const -1183122579)) - (i32.add (i32.const 1358444304)) - (i32.add (i32.const -1444758395)) - (i32.add (i32.const 493142775)) - (i32.add (i32.const -1649329057)) - (i32.add (i32.const -909924246)) - (i32.add (i32.const -605871429)) - (i32.add (i32.const -584053849)) - (i32.add (i32.const -925541361)) - (i32.add (i32.const 368106787)) - (i32.add (i32.const -1320037507)) - (i32.add (i32.const -1705551375)) - (i32.add (i32.const -502844742)) - (i32.add (i32.const -1747287752)) - (i32.add (i32.const 1058944966)) - (i32.add (i32.const 2093805275)) - (i32.add (i32.const 1558093212)) - (i32.add (i32.const -406885153)) - (i32.add (i32.const -47805975)) - (i32.add (i32.const 1159882225)) - (i32.add (i32.const -1687137692)) - (i32.add (i32.const -503342315)) - (i32.add (i32.const 1412935169)) - (i32.add (i32.const 1433824963)) - (i32.add (i32.const 460412817)) - (i32.add (i32.const -1999724813)) - (i32.add (i32.const -2119267721)) - (i32.add (i32.const -516834837)) - (i32.add (i32.const -80708157)) - (i32.add (i32.const -76005725)) - (i32.add (i32.const -1492374623)) - (i32.add (i32.const 931242285)) - (i32.add (i32.const 1048330828)) - (i32.add (i32.const -1569166309)) - (i32.add (i32.const -1380080340)) - (i32.add (i32.const -852403160)) - (i32.add (i32.const -1505292771)) - (i32.add (i32.const -834799530)) - (i32.add (i32.const -211000742)) - (i32.add (i32.const 1776582816)) - (i32.add (i32.const 1545364857)) - (i32.add (i32.const -1812142606)) - (i32.add (i32.const 1384509256)) - (i32.add (i32.const -1470661395)) - (i32.add (i32.const -1722893420)) - (i32.add (i32.const 164482923)) - (i32.add (i32.const 77796101)) - (i32.add (i32.const 764388749)) - (i32.add (i32.const 1804692689)) - (i32.add (i32.const 1165518699)) - (i32.add (i32.const 1478129839)) - (i32.add (i32.const 1333315867)) - (i32.add (i32.const -811640088)) - (i32.add (i32.const 949016033)) - (i32.add (i32.const 312159387)) - (i32.add (i32.const 785711918)) - (i32.add (i32.const -2989869)) - (i32.add (i32.const 1221498935)) - (i32.add (i32.const -849241627)) - (i32.add (i32.const 1300998053)) - (i32.add (i32.const 868428273)) - (i32.add (i32.const 1323266702)) - (i32.add (i32.const 1379562248)) - (i32.add (i32.const -1858743063)) - (i32.add (i32.const -14778475)) - (i32.add (i32.const -1763734059)) - (i32.add (i32.const -1154055437)) - (i32.add (i32.const -1282483888)) - (i32.add (i32.const 1242898737)) - (i32.add (i32.const 1783460488)) - (i32.add (i32.const 204335134)) - (i32.add (i32.const 1756168549)) - (i32.add (i32.const 1580476886)) - (i32.add (i32.const 111620402)) - (i32.add (i32.const 2052301033)) - (i32.add (i32.const 1945344729)) - (i32.add (i32.const -2070830694)) - (i32.add (i32.const -1308331299)) - (i32.add (i32.const 1298933848)) - (i32.add (i32.const 482811789)) - (i32.add (i32.const -451467003)) - (i32.add (i32.const 559366771)) - (i32.add (i32.const -561161115)) - (i32.add (i32.const 438219174)) - (i32.add (i32.const 283938645)) - (i32.add (i32.const -874267069)) - (i32.add (i32.const 902111045)) - (i32.add (i32.const -53352829)) - (i32.add (i32.const 1556543469)) - (i32.add (i32.const 204177714)) - (i32.add (i32.const -793061269)) - (i32.add (i32.const 1347859778)) - (i32.add (i32.const -1174681174)) - (i32.add (i32.const -1194558960)) - (i32.add (i32.const -270554925)) - (i32.add (i32.const 975218406)) - (i32.add (i32.const 1518799489)) - (i32.add (i32.const 164868627)) - (i32.add (i32.const 2144870031)) - (i32.add (i32.const -543920936)) - (i32.add (i32.const -1841707630)) - (i32.add (i32.const -2142239851)) - (i32.add (i32.const 1757716528)) - (i32.add (i32.const 1419179879)) - (i32.add (i32.const 468455157)) - (i32.add (i32.const -803234117)) - (i32.add (i32.const -2129427466)) - (i32.add (i32.const 580354589)) - (i32.add (i32.const -394288898)) - (i32.add (i32.const -1334389559)) - (i32.add (i32.const 1102666624)) - (i32.add (i32.const 1817433417)) - (i32.add (i32.const -1852283532)) - (i32.add (i32.const 1992725390)) - (i32.add (i32.const 1790226331)) - (i32.add (i32.const -1107109154)) - (i32.add (i32.const 1260760440)) - (i32.add (i32.const 1021138996)) - (i32.add (i32.const 1179050636)) - (i32.add (i32.const -1054398949)) - (i32.add (i32.const -1192756258)) - (i32.add (i32.const 1736714234)) - (i32.add (i32.const 2117727240)) - (i32.add (i32.const -360234923)) - (i32.add (i32.const 1080912405)) - (i32.add (i32.const -785716037)) - (i32.add (i32.const -1118182436)) - (i32.add (i32.const -1183892557)) - (i32.add (i32.const 1688673155)) - (i32.add (i32.const 213282929)) - (i32.add (i32.const -2080115106)) - (i32.add (i32.const -1730514810)) - (i32.add (i32.const -1094198426)) - (i32.add (i32.const 1461303800)) - (i32.add (i32.const -1220504769)) - (i32.add (i32.const 6210449)) - (i32.add (i32.const -1805798385)) - (i32.add (i32.const -2098582208)) - (i32.add (i32.const 1658281519)) - (i32.add (i32.const 323918398)) - (i32.add (i32.const 18723028)) - (i32.add (i32.const 2114873082)) - (i32.add (i32.const 969842084)) - (i32.add (i32.const -1073855511)) - (i32.add (i32.const 1911015495)) - (i32.add (i32.const -7072349)) - (i32.add (i32.const 1431575471)) - (i32.add (i32.const 930648946)) - (i32.add (i32.const -310111896)) - (i32.add (i32.const 1675928935)) - (i32.add (i32.const 1943574704)) - (i32.add (i32.const 1120437968)) - (i32.add (i32.const 1029126013)) - (i32.add (i32.const -706016460)) - (i32.add (i32.const -1427456736)) - (i32.add (i32.const 179903447)) - (i32.add (i32.const -1359863675)) - (i32.add (i32.const 1506925994)) - (i32.add (i32.const -97850290)) - (i32.add (i32.const 603445282)) - (i32.add (i32.const 723800247)) - (i32.add (i32.const 1817519218)) - (i32.add (i32.const -206324852)) - (i32.add (i32.const 140131062)) - (i32.add (i32.const -52503198)) - (i32.add (i32.const -1675432560)) - (i32.add (i32.const 103542907)) - (i32.add (i32.const 503404860)) - (i32.add (i32.const 1277125675)) - (i32.add (i32.const 1069946593)) - (i32.add (i32.const 1548531683)) - (i32.add (i32.const 1634897085)) - (i32.add (i32.const 875190942)) - (i32.add (i32.const 1676118825)) - (i32.add (i32.const -580644450)) - (i32.add (i32.const -2090473882)) - (i32.add (i32.const 798940480)) - (i32.add (i32.const -1718065789)) - (i32.add (i32.const -1494421360)) - (i32.add (i32.const -398070203)) - (i32.add (i32.const 1669451758)) - (i32.add (i32.const -905362380)) - (i32.add (i32.const 122015144)) - (i32.add (i32.const 1139554530)) - (i32.add (i32.const 1233363683)) - (i32.add (i32.const 1357594413)) - (i32.add (i32.const 2039702226)) - (i32.add (i32.const 1564448983)) - (i32.add (i32.const 894246147)) - (i32.add (i32.const 943684233)) - (i32.add (i32.const 1606091296)) - (i32.add (i32.const -901629378)) - (i32.add (i32.const 106759623)) - (i32.add (i32.const -496141788)) - (i32.add (i32.const -1968168879)) - (i32.add (i32.const -569465819)) - (i32.add (i32.const -181623996)) - (i32.add (i32.const 1602030395)) - (i32.add (i32.const 444252705)) - (i32.add (i32.const -2018750531)) - (i32.add (i32.const 1945530825)) - (i32.add (i32.const 518823313)) - (i32.add (i32.const -1103910711)) - (i32.add (i32.const -1739448827)) - (i32.add (i32.const -92752487)) - (i32.add (i32.const -1912016909)) - (i32.add (i32.const -1312186485)) - (i32.add (i32.const 1540916702)) - (i32.add (i32.const -77129042)) - (i32.add (i32.const -1267348099)) - (i32.add (i32.const 740241478)) - (i32.add (i32.const 233271015)) - (i32.add (i32.const 1182193643)) - (i32.add (i32.const 1632234794)) - (i32.add (i32.const 126912753)) - (i32.add (i32.const 1730771588)) - (i32.add (i32.const 1658114610)) - (i32.add (i32.const -1933052959)) - (i32.add (i32.const 1556344101)) - (i32.add (i32.const 2014201433)) - (i32.add (i32.const -581510908)) - (i32.add (i32.const 1759608046)) - (i32.add (i32.const 1278798770)) - (i32.add (i32.const 1822395490)) - (i32.add (i32.const 1922474323)) - (i32.add (i32.const 73941758)) - (i32.add (i32.const -217337152)) - (i32.add (i32.const 368152449)) - (i32.add (i32.const -1755301471)) - (i32.add (i32.const -870625704)) - (i32.add (i32.const 1773599513)) - (i32.add (i32.const 556494766)) - (i32.add (i32.const 1879953871)) - (i32.add (i32.const 358977849)) - (i32.add (i32.const 958721338)) - (i32.add (i32.const -882046278)) - (i32.add (i32.const 651572558)) - (i32.add (i32.const -1143949998)) - (i32.add (i32.const 1529511004)) - (i32.add (i32.const 774869937)) - (i32.add (i32.const 2140615327)) - (i32.add (i32.const -2053410094)) - (i32.add (i32.const 678029173)) - (i32.add (i32.const 1444201954)) - (i32.add (i32.const -1297296500)) - (i32.add (i32.const 392785008)) - (i32.add (i32.const -2035311398)) - (i32.add (i32.const -842344753)) - (i32.add (i32.const -340746107)) - (i32.add (i32.const 1351154072)) - (i32.add (i32.const 28127745)) - (i32.add (i32.const 954787664)) - (i32.add (i32.const 313552281)) - (i32.add (i32.const -1690838073)) - (i32.add (i32.const 528898367)) - (i32.add (i32.const 1964830952)) - (i32.add (i32.const -1979825903)) - (i32.add (i32.const 84312902)) - (i32.add (i32.const -1673212195)) - (i32.add (i32.const -290485206)) - (i32.add (i32.const 1372123712)) - (i32.add (i32.const -223367538)) - (i32.add (i32.const -1777425478)) - (i32.add (i32.const 795138971)) - (i32.add (i32.const -116921167)) - (i32.add (i32.const -1182940391)) - (i32.add (i32.const 1765960219)) - (i32.add (i32.const -857291177)) - (i32.add (i32.const 188539755)) - (i32.add (i32.const -1796759119)) - (i32.add (i32.const -1110362462)) - (i32.add (i32.const 213764141)) - (i32.add (i32.const 1944919227)) - (i32.add (i32.const -1258579206)) - (i32.add (i32.const -468453021)) - (i32.add (i32.const 910131079)) - (i32.add (i32.const 1028986711)) - (i32.add (i32.const -871126695)) - (i32.add (i32.const -1986633182)) - (i32.add (i32.const 754118873)) - (i32.add (i32.const 5798026)) - (i32.add (i32.const 333753147)) - (i32.add (i32.const -706662192)) - (i32.add (i32.const -1276785904)) - (i32.add (i32.const -1945486933)) - (i32.add (i32.const -1816490547)) - (i32.add (i32.const -2109742277)) - (i32.add (i32.const -1703588188)) - (i32.add (i32.const 1335803791)) - (i32.add (i32.const 1112853743)) - (i32.add (i32.const 1648797649)) - (i32.add (i32.const 493265011)) - (i32.add (i32.const 992274181)) - (i32.add (i32.const -1817762216)) - (i32.add (i32.const -1445469337)) - (i32.add (i32.const 161804034)) - (i32.add (i32.const -939909029)) - (i32.add (i32.const -2111755750)) - (i32.add (i32.const 672651363)) - (i32.add (i32.const -70184095)) - (i32.add (i32.const -897277026)) - (i32.add (i32.const 459575241)) - (i32.add (i32.const 1394025166)) - (i32.add (i32.const 158642604)) - (i32.add (i32.const 1920702849)) - (i32.add (i32.const -460744251)) - (i32.add (i32.const 2099715300)) - (i32.add (i32.const 304020246)) - (i32.add (i32.const -1052796045)) - (i32.add (i32.const -1574767515)) - (i32.add (i32.const -1484295285)) - (i32.add (i32.const 1330479416)) - (i32.add (i32.const 273802931)) - (i32.add (i32.const 2015029340)) - (i32.add (i32.const -2128097202)) - (i32.add (i32.const 547563465)) - (i32.add (i32.const 244080835)) - (i32.add (i32.const 1239916860)) - (i32.add (i32.const 186197816)) - (i32.add (i32.const -1625452604)) - (i32.add (i32.const -79246995)) - (i32.add (i32.const 1536643448)) - (i32.add (i32.const -432921731)) - (i32.add (i32.const -186029970)) - (i32.add (i32.const 1343472530)) - (i32.add (i32.const -1579042554)) - (i32.add (i32.const -1707109053)) - (i32.add (i32.const 140787035)) - (i32.add (i32.const -1834452291)) - (i32.add (i32.const -136763237)) - (i32.add (i32.const 623462467)) - (i32.add (i32.const 1639348249)) - (i32.add (i32.const -1281755949)) - (i32.add (i32.const -1631045017)) - (i32.add (i32.const 1254000467)) - (i32.add (i32.const 1483153539)) - (i32.add (i32.const 73974910)) - (i32.add (i32.const -1810466618)) - (i32.add (i32.const 1838223472)) - (i32.add (i32.const -344840722)) - (i32.add (i32.const 765209150)) - (i32.add (i32.const -1256689455)) - (i32.add (i32.const -598052965)) - (i32.add (i32.const -1877068122)) - (i32.add (i32.const -1719813721)) - (i32.add (i32.const -1125603083)) - (i32.add (i32.const -816600225)) - (i32.add (i32.const 1133723329)) - (i32.add (i32.const 288927168)) - (i32.add (i32.const 288087573)) - (i32.add (i32.const -802791230)) - (i32.add (i32.const -777431213)) - (i32.add (i32.const 761107582)) - (i32.add (i32.const 1816954775)) - (i32.add (i32.const 483818756)) - (i32.add (i32.const -497138613)) - (i32.add (i32.const -1332209804)) - (i32.add (i32.const 623646230)) - (i32.add (i32.const 1116563711)) - (i32.add (i32.const -1524676886)) - (i32.add (i32.const -331844400)) - (i32.add (i32.const 1078067455)) - (i32.add (i32.const -18191764)) - (i32.add (i32.const -566365887)) - (i32.add (i32.const -377057871)) - (i32.add (i32.const 563346612)) - (i32.add (i32.const 953693501)) - (i32.add (i32.const 2025695793)) - (i32.add (i32.const -371401379)) - (i32.add (i32.const -1871607798)) - (i32.add (i32.const -1635895197)) - (i32.add (i32.const 243126451)) - (i32.add (i32.const -927205115)) - (i32.add (i32.const 1427300692)) - (i32.add (i32.const 2004075084)) - (i32.add (i32.const -786091380)) - (i32.add (i32.const -1726272226)) - (i32.add (i32.const -1763828732)) - (i32.add (i32.const -1125495058)) - (i32.add (i32.const -118075854)) - (i32.add (i32.const -438071682)) - (i32.add (i32.const -1644422420)) - (i32.add (i32.const -183090773)) - (i32.add (i32.const 231174411)) - (i32.add (i32.const 1163555715)) - (i32.add (i32.const 477458528)) - (i32.add (i32.const 9561183)) - (i32.add (i32.const 291268423)) - (i32.add (i32.const -476807560)) - (i32.add (i32.const -2069498632)) - (i32.add (i32.const -418023269)) - (i32.add (i32.const -1651859051)) - (i32.add (i32.const -642827582)) - (i32.add (i32.const 526699243)) - (i32.add (i32.const 252065277)) - (i32.add (i32.const -1838777704)) - (i32.add (i32.const 982962452)) - (i32.add (i32.const 360696562)) - (i32.add (i32.const -608068939)) - (i32.add (i32.const -1499891962)) - (i32.add (i32.const -877901474)) - (i32.add (i32.const -665180055)) - (i32.add (i32.const 1742424833)) - (i32.add (i32.const 1940510108)) - (i32.add (i32.const -1157157185)) - (i32.add (i32.const -477509814)) - (i32.add (i32.const 982710076)) - (i32.add (i32.const -159051439)) - (i32.add (i32.const -991732832)) - (i32.add (i32.const 1072883082)) - (i32.add (i32.const -20963585)) - (i32.add (i32.const 665112343)) - (i32.add (i32.const -723937108)) - (i32.add (i32.const -600374628)) - (i32.add (i32.const -936946810)) - (i32.add (i32.const 464874018)) - (i32.add (i32.const -1970078024)) - (i32.add (i32.const -1434304605)) - (i32.add (i32.const -1338320698)) - (i32.add (i32.const 1877875443)) - (i32.add (i32.const -1194988136)) - (i32.add (i32.const -1380102134)) - (i32.add (i32.const -234905235)) - (i32.add (i32.const 3974488)) - (i32.add (i32.const 1371436072)) - (i32.add (i32.const -454599979)) - (i32.add (i32.const -1275896026)) - (i32.add (i32.const -434869530)) - (i32.add (i32.const 1680209322)) - (i32.add (i32.const -565448822)) - (i32.add (i32.const -369936496)) - (i32.add (i32.const 1030494715)) - (i32.add (i32.const 397633966)) - (i32.add (i32.const 843395005)) - (i32.add (i32.const 20756286)) - (i32.add (i32.const 78042980)) - (i32.add (i32.const 1982077579)) - (i32.add (i32.const 1430115992)) - (i32.add (i32.const 467850819)) - (i32.add (i32.const -1657991586)) - (i32.add (i32.const -551721805)) - (i32.add (i32.const 131640498)) - (i32.add (i32.const 1313474594)) - (i32.add (i32.const 1399857503)) - (i32.add (i32.const 720423262)) - (i32.add (i32.const 374449064)) - (i32.add (i32.const -859452704)) - (i32.add (i32.const 114617302)) - (i32.add (i32.const -2121980010)) - (i32.add (i32.const 305087366)) - (i32.add (i32.const 718799879)) - (i32.add (i32.const 263249137)) - (i32.add (i32.const 503937365)) - (i32.add (i32.const -1055086151)) - (i32.add (i32.const -1207181511)) - (i32.add (i32.const 121956978)) - (i32.add (i32.const 899241647)) - (i32.add (i32.const -1716522259)) - (i32.add (i32.const 716149862)) - (i32.add (i32.const -1332629255)) - (i32.add (i32.const -1149220370)) - (i32.add (i32.const 749939004)) - (i32.add (i32.const -1226599991)) - (i32.add (i32.const -2101121142)) - (i32.add (i32.const 897059285)) - (i32.add (i32.const 1229099196)) - (i32.add (i32.const 385896713)) - (i32.add (i32.const 95668984)) - (i32.add (i32.const 1601125386)) - (i32.add (i32.const -1812135543)) - (i32.add (i32.const 7198367)) - (i32.add (i32.const -1023661689)) - (i32.add (i32.const -381111650)) - (i32.add (i32.const -1966506305)) - (i32.add (i32.const 1904096930)) - (i32.add (i32.const 1886152839)) - (i32.add (i32.const -1198702139)) - (i32.add (i32.const -479520246)) - (i32.add (i32.const -356272223)) - (i32.add (i32.const 1386168444)) - (i32.add (i32.const -844541557)) - (i32.add (i32.const 297183988)) - (i32.add (i32.const -257345456)) - (i32.add (i32.const 186577359)) - (i32.add (i32.const 2125965275)) - (i32.add (i32.const 467742006)) - (i32.add (i32.const -1338882800)) - (i32.add (i32.const -842724931)) - (i32.add (i32.const -1870698092)) - (i32.add (i32.const -79704584)) - (i32.add (i32.const 598705858)) - (i32.add (i32.const 399651637)) - (i32.add (i32.const -2011190355)) - (i32.add (i32.const -1612513592)) - (i32.add (i32.const 551578053)) - (i32.add (i32.const -122056985)) - (i32.add (i32.const 1838090666)) - (i32.add (i32.const -1025441914)) - (i32.add (i32.const -1828378930)) - (i32.add (i32.const -1638486311)) - (i32.add (i32.const 1116857641)) - (i32.add (i32.const 371235912)) - (i32.add (i32.const 363468131)) - (i32.add (i32.const -2044532338)) - (i32.add (i32.const -124192236)) - (i32.add (i32.const 1122268313)) - (i32.add (i32.const 2106732186)) - (i32.add (i32.const -1807015533)) - (i32.add (i32.const 1281514733)) - (i32.add (i32.const 1871473593)) - (i32.add (i32.const 1509194578)) - (i32.add (i32.const -1319196549)) - (i32.add (i32.const 1230253562)) - (i32.add (i32.const 2058367873)) - (i32.add (i32.const 263000329)) - (i32.add (i32.const 947488310)) - (i32.add (i32.const 224780726)) - (i32.add (i32.const 1963341083)) - (i32.add (i32.const 1557878103)) - (i32.add (i32.const 1915273459)) - (i32.add (i32.const 1282485689)) - (i32.add (i32.const -733218051)) - (i32.add (i32.const -1415014252)) - (i32.add (i32.const 192002077)) - (i32.add (i32.const 1656630675)) - (i32.add (i32.const -567661690)) - (i32.add (i32.const -1913102251)) - (i32.add (i32.const -2038090349)) - (i32.add (i32.const 1677958509)) - (i32.add (i32.const -1428397164)) - (i32.add (i32.const -1433738805)) - (i32.add (i32.const -449596753)) - (i32.add (i32.const -687069369)) - (i32.add (i32.const 1405156586)) - (i32.add (i32.const 1992894575)) - (i32.add (i32.const -1819779896)) - (i32.add (i32.const 321195521)) - (i32.add (i32.const -574671838)) - (i32.add (i32.const -559520744)) - (i32.add (i32.const 1917194423)) - (i32.add (i32.const -559504171)) - (i32.add (i32.const 2000005598)) - (i32.add (i32.const -276396902)) - (i32.add (i32.const 721907780)) - (i32.add (i32.const 5967264)) - (i32.add (i32.const -1317803386)) - (i32.add (i32.const 1005388740)) - (i32.add (i32.const 355254822)) - (i32.add (i32.const 595906922)) - (i32.add (i32.const -666780023)) - (i32.add (i32.const -956505583)) - (i32.add (i32.const -1838889975)) - (i32.add (i32.const 785982863)) - (i32.add (i32.const -1228680439)) - (i32.add (i32.const -462460234)) - (i32.add (i32.const 1218463762)) - (i32.add (i32.const -262118085)) - (i32.add (i32.const 524939396)) - (i32.add (i32.const -899537641)) - (i32.add (i32.const -160116219)) - (i32.add (i32.const -624979756)) - (i32.add (i32.const -1529611003)) - (i32.add (i32.const 215652311)) - (i32.add (i32.const 1592025055)) - (i32.add (i32.const -621964666)) - (i32.add (i32.const 1566079858)) - (i32.add (i32.const -2051979948)) - (i32.add (i32.const -1159208793)) - (i32.add (i32.const -923594346)) - (i32.add (i32.const -1645270405)) - (i32.add (i32.const -941407514)) - (i32.add (i32.const -1112813384)) - (i32.add (i32.const -1153125294)) - (i32.add (i32.const -166304719)) - (i32.add (i32.const -705172809)) - (i32.add (i32.const -691935833)) - (i32.add (i32.const 1202877570)) - (i32.add (i32.const -937055743)) - (i32.add (i32.const 1960804738)) - (i32.add (i32.const 2146436852)) - (i32.add (i32.const -1301117628)) - (i32.add (i32.const 1509670234)) - (i32.add (i32.const 1499451087)) - (i32.add (i32.const 1752144644)) - (i32.add (i32.const -714369917)) - (i32.add (i32.const -106488578)) - (i32.add (i32.const 1695228976)) - (i32.add (i32.const -783007083)) - (i32.add (i32.const 22342545)) - (i32.add (i32.const -1320320025)) - (i32.add (i32.const 1521364707)) - (i32.add (i32.const -1085714943)) - (i32.add (i32.const -1782207538)) - (i32.add (i32.const 570938827)) - (i32.add (i32.const 794756257)) - (i32.add (i32.const 896648740)) - (i32.add (i32.const -1308086155)) - (i32.add (i32.const 1426286711)) - (i32.add (i32.const -49477059)) - (i32.add (i32.const 654649605)) - (i32.add (i32.const 159984937)) - (i32.add (i32.const -1188697874)) - (i32.add (i32.const 1493664928)) - (i32.add (i32.const -1874174758)) - (i32.add (i32.const 1511237190)) - (i32.add (i32.const -567315768)) - (i32.add (i32.const -1488073018)) - (i32.add (i32.const 8678843)) - (i32.add (i32.const 1455280067)) - (i32.add (i32.const -706387147)) - (i32.add (i32.const -269798525)) - (i32.add (i32.const -2033727027)) - (i32.add (i32.const -7198865)) - (i32.add (i32.const 1747161792)) - (i32.add (i32.const -1702846936)) - (i32.add (i32.const -206903996)) - (i32.add (i32.const -2018572050)) - (i32.add (i32.const 576871112)) - (i32.add (i32.const -804727276)) - (i32.add (i32.const 970645488)) - (i32.add (i32.const 1781097617)) - (i32.add (i32.const 1521807227)) - (i32.add (i32.const -1029549069)) - (i32.add (i32.const 836736282)) - (i32.add (i32.const 265596080)) - (i32.add (i32.const 1965862196)) - (i32.add (i32.const 38546020)) - (i32.add (i32.const -1333591032)) - (i32.add (i32.const 1932006921)) - (i32.add (i32.const -1464313849)) - (i32.add (i32.const 639418837)) - (i32.add (i32.const -1967326992)) - (i32.add (i32.const 1024841244)) - (i32.add (i32.const 402468608)) - (i32.add (i32.const -343793405)) - (i32.add (i32.const -1718779005)) - (i32.add (i32.const -2142932704)) - (i32.add (i32.const -800473128)) - (i32.add (i32.const -1057368446)) - (i32.add (i32.const -900956747)) - (i32.add (i32.const -2146155147)) - (i32.add (i32.const -163273818)) - (i32.add (i32.const 1483277263)) - (i32.add (i32.const -1711715199)) - (i32.add (i32.const 1638798022)) - (i32.add (i32.const -781849086)) - (i32.add (i32.const 1125460178)) - (i32.add (i32.const -560796936)) - (i32.add (i32.const -173875265)) - (i32.add (i32.const 1272785476)) - (i32.add (i32.const -692720124)) - (i32.add (i32.const 1773687501)) - (i32.add (i32.const 578861041)) - (i32.add (i32.const -1061823952)) - (i32.add (i32.const 1627328738)) - (i32.add (i32.const 1902401138)) - (i32.add (i32.const -630585294)) - (i32.add (i32.const 1263215056)) - (i32.add (i32.const -242227950)) - (i32.add (i32.const -1569303233)) - (i32.add (i32.const 839202734)) - (i32.add (i32.const 1418569398)) - (i32.add (i32.const 192647449)) - (i32.add (i32.const -872890121)) - (i32.add (i32.const 1001878676)) - (i32.add (i32.const 1529591785)) - (i32.add (i32.const -1574272421)) - (i32.add (i32.const -352730382)) - (i32.add (i32.const 8588907)) - (i32.add (i32.const -268861608)) - (i32.add (i32.const 743579226)) - (i32.add (i32.const 1861727953)) - (i32.add (i32.const -291177582)) - (i32.add (i32.const -2099924155)) - (i32.add (i32.const -1138586184)) - (i32.add (i32.const 128296164)) - (i32.add (i32.const 925965818)) - (i32.add (i32.const 1597412309)) - (i32.add (i32.const 986855851)) - (i32.add (i32.const -1602542209)) - (i32.add (i32.const 942188977)) - (i32.add (i32.const -2018390448)) - (i32.add (i32.const 1162345236)) - (i32.add (i32.const 393084008)) - (i32.add (i32.const -2100080101)) - (i32.add (i32.const 801160361)) - (i32.add (i32.const 571838287)) - (i32.add (i32.const 1812304752)) - (i32.add (i32.const -1746529969)) - (i32.add (i32.const -1133616410)) - (i32.add (i32.const -2117886865)) - (i32.add (i32.const -2142962049)) - (i32.add (i32.const 954573596)) - (i32.add (i32.const -1020516926)) - (i32.add (i32.const 274199980)) - (i32.add (i32.const 1073945059)) - (i32.add (i32.const -1327854704)) - (i32.add (i32.const -1094226747)) - (i32.add (i32.const -1371508228)) - (i32.add (i32.const -1022200159)) - (i32.add (i32.const -1498385751)) - (i32.add (i32.const 2134839157)) - (i32.add (i32.const 1296419006)) - (i32.add (i32.const -492733451)) - (i32.add (i32.const -1365740958)) - (i32.add (i32.const -569435149)) - (i32.add (i32.const 716543868)) - (i32.add (i32.const 845359321)) - (i32.add (i32.const -125207386)) - (i32.add (i32.const 1145515580)) - (i32.add (i32.const 1178716384)) - (i32.add (i32.const -922514607)) - (i32.add (i32.const -1506597043)) - (i32.add (i32.const -550969467)) - (i32.add (i32.const -394462732)) - (i32.add (i32.const -988966334)) - (i32.add (i32.const 1925822556)) - (i32.add (i32.const -1217809290)) - (i32.add (i32.const 911157723)) - (i32.add (i32.const 638233141)) - (i32.add (i32.const 1045634853)) - (i32.add (i32.const -420083420)) - (i32.add (i32.const 245693310)) - (i32.add (i32.const -1353280357)) - (i32.add (i32.const 1245590387)) - (i32.add (i32.const -1553993286)) - (i32.add (i32.const 621247174)) - (i32.add (i32.const -872134053)) - (i32.add (i32.const -840866318)) - (i32.add (i32.const 1547681629)) - (i32.add (i32.const -2074342344)) - (i32.add (i32.const -568946016)) - (i32.add (i32.const -1289519681)) - (i32.add (i32.const -1662513387)) - (i32.add (i32.const 334208664)) - (i32.add (i32.const -1471939480)) - (i32.add (i32.const 367258821)) - (i32.add (i32.const -1821157057)) - (i32.add (i32.const 1112536803)) - (i32.add (i32.const -1426905672)) - (i32.add (i32.const -261835121)) - (i32.add (i32.const 936612299)) - (i32.add (i32.const 1301298173)) - (i32.add (i32.const -1521245032)) - (i32.add (i32.const -775172127)) - (i32.add (i32.const -510642592)) - (i32.add (i32.const -923744855)) - (i32.add (i32.const 1493292123)) - (i32.add (i32.const 604084289)) - (i32.add (i32.const 1427620323)) - (i32.add (i32.const -1357843991)) - (i32.add (i32.const 634514046)) - (i32.add (i32.const 788534370)) - (i32.add (i32.const 139182425)) - (i32.add (i32.const 1888355983)) - (i32.add (i32.const 311290688)) - (i32.add (i32.const 593619444)) - (i32.add (i32.const -616332073)) - (i32.add (i32.const -331967724)) - (i32.add (i32.const 1534326686)) - (i32.add (i32.const -1882355782)) - (i32.add (i32.const 825227067)) - (i32.add (i32.const 654105077)) - (i32.add (i32.const 961303449)) - (i32.add (i32.const 1994223892)) - (i32.add (i32.const 960771823)) - (i32.add (i32.const 1979283650)) - (i32.add (i32.const 899073485)) - (i32.add (i32.const 944839609)) - (i32.add (i32.const 524124964)) - (i32.add (i32.const 841681118)) - (i32.add (i32.const 776646332)) - (i32.add (i32.const -1374222542)) - (i32.add (i32.const 14686227)) - (i32.add (i32.const -530338638)) - (i32.add (i32.const -1874416482)) - (i32.add (i32.const -1469969897)) - (i32.add (i32.const -3297023)) - (i32.add (i32.const 717121238)) - (i32.add (i32.const 1900327592)) - (i32.add (i32.const 1887279163)) - (i32.add (i32.const 982535579)) - (i32.add (i32.const 446927202)) - (i32.add (i32.const 1470880794)) - (i32.add (i32.const -219923496)) - (i32.add (i32.const 1636485625)) - (i32.add (i32.const -1543758553)) - (i32.add (i32.const -1067613757)) - (i32.add (i32.const -459425496)) - (i32.add (i32.const -20586395)) - (i32.add (i32.const -1266035085)) - (i32.add (i32.const -1363066222)) - (i32.add (i32.const 406453943)) - (i32.add (i32.const -591420370)) - (i32.add (i32.const 1013286628)) - (i32.add (i32.const 1349518481)) - (i32.add (i32.const -1656611176)) - (i32.add (i32.const -1199235714)) - (i32.add (i32.const 593280752)) - (i32.add (i32.const 1434954729)) - (i32.add (i32.const 2142947608)) - (i32.add (i32.const -918246459)) - (i32.add (i32.const 1248071258)) - (i32.add (i32.const -675347594)) - (i32.add (i32.const -412297828)) - (i32.add (i32.const 976453485)) - (i32.add (i32.const 344243498)) - (i32.add (i32.const -1516160749)) - (i32.add (i32.const -1320369751)) - (i32.add (i32.const 1907527918)) - (i32.add (i32.const 1795862983)) - (i32.add (i32.const 1734325487)) - (i32.add (i32.const 1117974499)) - (i32.add (i32.const 2012141301)) - (i32.add (i32.const 229195593)) - (i32.add (i32.const -2071766043)) - (i32.add (i32.const 1982207752)) - (i32.add (i32.const -1164757254)) - (i32.add (i32.const -837818739)) - (i32.add (i32.const -1583471856)) - (i32.add (i32.const 1715891518)) - (i32.add (i32.const -714220171)) - (i32.add (i32.const -1963640669)) - (i32.add (i32.const 41435189)) - (i32.add (i32.const 988084420)) - (i32.add (i32.const -1613294609)) - (i32.add (i32.const 779684729)) - (i32.add (i32.const 1499769835)) - (i32.add (i32.const 1776104652)) - (i32.add (i32.const 1983536083)) - (i32.add (i32.const -297119467)) - (i32.add (i32.const 819995776)) - (i32.add (i32.const 1625885705)) - (i32.add (i32.const 75133866)) - (i32.add (i32.const 161628801)) - (i32.add (i32.const -369416126)) - (i32.add (i32.const -913447592)) - (i32.add (i32.const 1297129503)) - (i32.add (i32.const -386427154)) - (i32.add (i32.const -1015536065)) - (i32.add (i32.const -1005103239)) - (i32.add (i32.const -132618797)) - (i32.add (i32.const -2131104964)) - (i32.add (i32.const -1480326747)) - (i32.add (i32.const 1419635690)) - (i32.add (i32.const -706351787)) - (i32.add (i32.const 160784118)) - (i32.add (i32.const 335118307)) - (i32.add (i32.const 442229116)) - (i32.add (i32.const 377991972)) - (i32.add (i32.const 1732460866)) - (i32.add (i32.const 967155280)) - (i32.add (i32.const -609484522)) - (i32.add (i32.const 1859874279)) - (i32.add (i32.const 1939813805)) - (i32.add (i32.const -349124129)) - (i32.add (i32.const 536889032)) - (i32.add (i32.const 609467213)) - (i32.add (i32.const 699148695)) - (i32.add (i32.const -223698857)) - (i32.add (i32.const -1491703894)) - (i32.add (i32.const -1104333118)) - (i32.add (i32.const 1887379561)) - (i32.add (i32.const -311852374)) - (i32.add (i32.const 86190369)) - (i32.add (i32.const 1636533375)) - (i32.add (i32.const 1570727094)) - (i32.add (i32.const 1282018911)) - (i32.add (i32.const 1643657929)) - (i32.add (i32.const 1508163824)) - (i32.add (i32.const 1668742643)) - (i32.add (i32.const -1157792001)) - (i32.add (i32.const 572475912)) - (i32.add (i32.const 1281357513)) - (i32.add (i32.const -162888090)) - (i32.add (i32.const -1703173737)) - (i32.add (i32.const -588145493)) - (i32.add (i32.const -1067987344)) - (i32.add (i32.const 1469065455)) - (i32.add (i32.const -1165986121)) - (i32.add (i32.const -1536994170)) - (i32.add (i32.const 2060012160)) - (i32.add (i32.const 1380521639)) - (i32.add (i32.const 1100575601)) - (i32.add (i32.const 163570289)) - (i32.add (i32.const -1456144447)) - (i32.add (i32.const 1888641199)) - (i32.add (i32.const -544409523)) - (i32.add (i32.const -1676871361)) - (i32.add (i32.const -2044213522)) - (i32.add (i32.const -2039525463)) - (i32.add (i32.const -54128814)) - (i32.add (i32.const -1365115134)) - (i32.add (i32.const -479018062)) - (i32.add (i32.const -904756433)) - (i32.add (i32.const 629266008)) - (i32.add (i32.const -2012620760)) - (i32.add (i32.const -401484760)) - (i32.add (i32.const 15888200)) - (i32.add (i32.const -486293942)) - (i32.add (i32.const 1329917854)) - (i32.add (i32.const -1766343020)) - (i32.add (i32.const 1234169363)) - (i32.add (i32.const -1988820764)) - (i32.add (i32.const 135639340)) - (i32.add (i32.const 275928888)) - (i32.add (i32.const 2075389145)) - (i32.add (i32.const -543466007)) - (i32.add (i32.const 560561968)) - (i32.add (i32.const -1000214068)) - (i32.add (i32.const 87415218)) - (i32.add (i32.const 1046497771)) - (i32.add (i32.const 207696740)) - (i32.add (i32.const -1397546992)) - (i32.add (i32.const 1802003757)) - (i32.add (i32.const -2070092735)) - (i32.add (i32.const 569468541)) - (i32.add (i32.const 1297893128)) - (i32.add (i32.const -521364800)) - (i32.add (i32.const 2066501234)) - (i32.add (i32.const 36248647)) - (i32.add (i32.const -881605942)) - (i32.add (i32.const 798144725)) - (i32.add (i32.const -365913520)) - (i32.add (i32.const -639807423)) - (i32.add (i32.const 641541500)) - (i32.add (i32.const -1665827889)) - (i32.add (i32.const 2138496451)) - (i32.add (i32.const -699773824)) - (i32.add (i32.const -731441181)) - (i32.add (i32.const -1233671439)) - (i32.add (i32.const -66252978)) - (i32.add (i32.const -1700890870)) - (i32.add (i32.const 807262594)) - (i32.add (i32.const 544331171)) - (i32.add (i32.const -1408469691)) - (i32.add (i32.const 666294270)) - (i32.add (i32.const 912982524)) - (i32.add (i32.const -1417032542)) - (i32.add (i32.const 679737458)) - (i32.add (i32.const -614757663)) - (i32.add (i32.const -1239599619)) - (i32.add (i32.const -1816721588)) - (i32.add (i32.const -691653859)) - (i32.add (i32.const -1213683601)) - (i32.add (i32.const 1313606406)) - (i32.add (i32.const -1348136658)) - (i32.add (i32.const -550502313)) - (i32.add (i32.const 900697452)) - (i32.add (i32.const 1150413281)) - (i32.add (i32.const 1670317771)) - (i32.add (i32.const -1442830782)) - (i32.add (i32.const 81675531)) - (i32.add (i32.const 257526378)) - (i32.add (i32.const 388037918)) - (i32.add (i32.const -1608926805)) - (i32.add (i32.const 598849374)) - (i32.add (i32.const -555868434)) - (i32.add (i32.const -824314991)) - (i32.add (i32.const 1039091453)) - (i32.add (i32.const -1551367384)) - (i32.add (i32.const -1851265883)) - (i32.add (i32.const 253727794)) - (i32.add (i32.const -775412462)) - (i32.add (i32.const -816451705)) - (i32.add (i32.const -994621460)) - (i32.add (i32.const -1442879249)) - (i32.add (i32.const 436246584)) - (i32.add (i32.const 1080815472)) - (i32.add (i32.const -943920111)) - (i32.add (i32.const 919165228)) - (i32.add (i32.const 437342663)) - (i32.add (i32.const -370802813)) - (i32.add (i32.const 1222486736)) - (i32.add (i32.const 1739178510)) - (i32.add (i32.const 19065115)) - (i32.add (i32.const 1076725441)) - (i32.add (i32.const -36141097)) - (i32.add (i32.const 97894391)) - (i32.add (i32.const -389840945)) - (i32.add (i32.const 166775749)) - (i32.add (i32.const -1720667041)) - (i32.add (i32.const -911598190)) - (i32.add (i32.const -219989740)) - (i32.add (i32.const 1890189507)) - (i32.add (i32.const 856699648)) - (i32.add (i32.const 1572356022)) - (i32.add (i32.const -1134623621)) - (i32.add (i32.const 1011845959)) - (i32.add (i32.const 735291184)) - (i32.add (i32.const -944240152)) - (i32.add (i32.const 2131050385)) - (i32.add (i32.const 178636282)) - (i32.add (i32.const 289950567)) - (i32.add (i32.const -164252222)) - (i32.add (i32.const -1643699386)) - (i32.add (i32.const 1515256612)) - (i32.add (i32.const 1001090480)) - (i32.add (i32.const -1550969314)) - (i32.add (i32.const -1163487089)) - (i32.add (i32.const -1120472261)) - (i32.add (i32.const -1492239194)) - (i32.add (i32.const -7990800)) - (i32.add (i32.const -1547477733)) - (i32.add (i32.const -1292740654)) - (i32.add (i32.const -1103513391)) - (i32.add (i32.const -1214137618)) - (i32.add (i32.const -1956374036)) - (i32.add (i32.const 228055804)) - (i32.add (i32.const -1854233860)) - (i32.add (i32.const 1421603397)) - (i32.add (i32.const 1081761900)) - (i32.add (i32.const -914911333)) - (i32.add (i32.const 2104085859)) - (i32.add (i32.const -2140002855)) - (i32.add (i32.const -1247914076)) - (i32.add (i32.const 2028649441)) - (i32.add (i32.const -1685537416)) - (i32.add (i32.const 2060643747)) - (i32.add (i32.const -652803198)) - (i32.add (i32.const 1858401)) - (i32.add (i32.const -1685217055)) - (i32.add (i32.const 95998010)) - (i32.add (i32.const 1996219494)) - (i32.add (i32.const 683934613)) - (i32.add (i32.const -1689202274)) - (i32.add (i32.const 174099513)) - (i32.add (i32.const 887936104)) - (i32.add (i32.const 682666687)) - (i32.add (i32.const -1996040829)) - (i32.add (i32.const -277104087)) - (i32.add (i32.const -290621308)) - (i32.add (i32.const -1578725246)) - (i32.add (i32.const -1152752571)) - (i32.add (i32.const 1449568359)) - (i32.add (i32.const 964788207)) - (i32.add (i32.const 469962974)) - (i32.add (i32.const 868951903)) - (i32.add (i32.const 63147281)) - (i32.add (i32.const -1549745347)) - (i32.add (i32.const 1667163489)) - (i32.add (i32.const 135010318)) - (i32.add (i32.const 1884199708)) - (i32.add (i32.const 50685197)) - (i32.add (i32.const 41876363)) - (i32.add (i32.const -1516030251)) - (i32.add (i32.const 2050881396)) - (i32.add (i32.const -1806713592)) - (i32.add (i32.const 372036883)) - (i32.add (i32.const -950313142)) - (i32.add (i32.const -1368722734)) - (i32.add (i32.const -1982971220)) - (i32.add (i32.const 1805885784)) - (i32.add (i32.const 941076941)) - (i32.add (i32.const -883599909)) - (i32.add (i32.const -825935627)) - (i32.add (i32.const 879336327)) - (i32.add (i32.const 609087034)) - (i32.add (i32.const -195397433)) - (i32.add (i32.const -812141245)) - (i32.add (i32.const 82234485)) - (i32.add (i32.const -1458996360)) - (i32.add (i32.const 2063759064)) - (i32.add (i32.const -920433856)) - (i32.add (i32.const 1909586809)) - (i32.add (i32.const 902610945)) - (i32.add (i32.const 1048405394)) - (i32.add (i32.const 951764438)) - (i32.add (i32.const -240082293)) - (i32.add (i32.const 1190467203)) - (i32.add (i32.const 825763718)) - (i32.add (i32.const 543607046)) - (i32.add (i32.const -686699031)) - (i32.add (i32.const -279994428)) - (i32.add (i32.const -1661312791)) - (i32.add (i32.const 224337172)) - (i32.add (i32.const -1583296397)) - (i32.add (i32.const -1695449182)) - (i32.add (i32.const -759347395)) - (i32.add (i32.const 1902772314)) - (i32.add (i32.const 1096963885)) - (i32.add (i32.const -1057695277)) - (i32.add (i32.const -1252052477)) - (i32.add (i32.const -697662967)) - (i32.add (i32.const -129475925)) - (i32.add (i32.const 130875504)) - (i32.add (i32.const 184724450)) - (i32.add (i32.const -1479876041)) - (i32.add (i32.const 1657293732)) - (i32.add (i32.const -447624247)) - (i32.add (i32.const -148171901)) - (i32.add (i32.const -1949466567)) - (i32.add (i32.const -353551429)) - (i32.add (i32.const 911457309)) - (i32.add (i32.const 1825181615)) - (i32.add (i32.const 303816123)) - (i32.add (i32.const 910164636)) - (i32.add (i32.const 1689542793)) - (i32.add (i32.const 1000276632)) - (i32.add (i32.const -1753466521)) - (i32.add (i32.const -1120177547)) - (i32.add (i32.const 1127002691)) - (i32.add (i32.const -125173209)) - (i32.add (i32.const 248860464)) - (i32.add (i32.const 358231769)) - (i32.add (i32.const 921647391)) - (i32.add (i32.const -1713995594)) - (i32.add (i32.const 1614207809)) - (i32.add (i32.const -172598065)) - (i32.add (i32.const 1740821050)) - (i32.add (i32.const -983913220)) - (i32.add (i32.const -586638981)) - (i32.add (i32.const -2134448419)) - (i32.add (i32.const -1170962994)) - (i32.add (i32.const 2099917650)) - (i32.add (i32.const -537231407)) - (i32.add (i32.const -466051650)) - (i32.add (i32.const -1691652412)) - (i32.add (i32.const -1749616522)) - (i32.add (i32.const -66655551)) - (i32.add (i32.const 1529248895)) - (i32.add (i32.const 1836062000)) - (i32.add (i32.const -1478827613)) - (i32.add (i32.const 1950217155)) - (i32.add (i32.const -450186574)) - (i32.add (i32.const 1864321793)) - (i32.add (i32.const 190904021)) - (i32.add (i32.const -596455380)) - (i32.add (i32.const -1530046659)) - (i32.add (i32.const 525432798)) - (i32.add (i32.const 279541028)) - (i32.add (i32.const 1919157904)) - (i32.add (i32.const -1267150298)) - (i32.add (i32.const 894480402)) - (i32.add (i32.const -1820217594)) - (i32.add (i32.const 110611348)) - (i32.add (i32.const -1780572961)) - (i32.add (i32.const 1817319211)) - (i32.add (i32.const 1535387174)) - (i32.add (i32.const -1740285080)) - (i32.add (i32.const -1481760089)) - (i32.add (i32.const 1445933073)) - (i32.add (i32.const -280600774)) - (i32.add (i32.const 823421559)) - (i32.add (i32.const -119212948)) - (i32.add (i32.const 892602540)) - (i32.add (i32.const 296435450)) - (i32.add (i32.const 1851624901)) - (i32.add (i32.const -1542994655)) - (i32.add (i32.const 2038384389)) - (i32.add (i32.const 2140469525)) - (i32.add (i32.const -1197162874)) - (i32.add (i32.const 2051981100)) - (i32.add (i32.const 1767548856)) - (i32.add (i32.const -701636811)) - (i32.add (i32.const 137786553)) - (i32.add (i32.const 1625132347)) - (i32.add (i32.const -270847831)) - (i32.add (i32.const -1371772599)) - (i32.add (i32.const 388482268)) - (i32.add (i32.const 533563926)) - (i32.add (i32.const 1116589449)) - (i32.add (i32.const -1832256608)) - (i32.add (i32.const -216237015)) - (i32.add (i32.const 435204183)) - (i32.add (i32.const 1420986722)) - (i32.add (i32.const -1920795155)) - (i32.add (i32.const -316865088)) - (i32.add (i32.const -1054005834)) - (i32.add (i32.const -1147633457)) - (i32.add (i32.const -43821656)) - (i32.add (i32.const 1515419066)) - (i32.add (i32.const 1395238216)) - (i32.add (i32.const -1858902332)) - (i32.add (i32.const -1541913934)) - (i32.add (i32.const -1974861902)) - (i32.add (i32.const 1352544496)) - (i32.add (i32.const 933081782)) - (i32.add (i32.const 1504349808)) - (i32.add (i32.const -1542317180)) - (i32.add (i32.const -1618627146)) - (i32.add (i32.const 486689257)) - (i32.add (i32.const -1879882328)) - (i32.add (i32.const -55542726)) - (i32.add (i32.const 812454663)) - (i32.add (i32.const 1199080378)) - (i32.add (i32.const 667920323)) - (i32.add (i32.const -483717864)) - (i32.add (i32.const -1644201536)) - (i32.add (i32.const 479610840)) - (i32.add (i32.const 1339250451)) - (i32.add (i32.const 1030580963)) - (i32.add (i32.const -837330400)) - (i32.add (i32.const 1217060956)) - (i32.add (i32.const 1929375013)) - (i32.add (i32.const -2006009337)) - (i32.add (i32.const -163551389)) - (i32.add (i32.const -1124974967)) - (i32.add (i32.const -707651108)) - (i32.add (i32.const -1677362107)) - (i32.add (i32.const -2037710577)) - (i32.add (i32.const -988239994)) - (i32.add (i32.const -360997891)) - (i32.add (i32.const -1111230738)) - (i32.add (i32.const 1650064299)) - (i32.add (i32.const 858878371)) - (i32.add (i32.const -745980170)) - (i32.add (i32.const -379595680)) - (i32.add (i32.const -280410069)) - (i32.add (i32.const 546649242)) - (i32.add (i32.const -1617745205)) - (i32.add (i32.const 177119487)) - (i32.add (i32.const -1785785025)) - (i32.add (i32.const -143167395)) - (i32.add (i32.const 335819396)) - (i32.add (i32.const -1094439243)) - (i32.add (i32.const 171095178)) - (i32.add (i32.const -1557194324)) - (i32.add (i32.const -1947318680)) - (i32.add (i32.const 1733507663)) - (i32.add (i32.const -445598955)) - (i32.add (i32.const 1256384551)) - (i32.add (i32.const 683133059)) - (i32.add (i32.const -2103575841)) - (i32.add (i32.const -2135989352)) - (i32.add (i32.const 1690591745)) - (i32.add (i32.const 1183796387)) - (i32.add (i32.const -668335518)) - (i32.add (i32.const 1284748082)) - (i32.add (i32.const -2144568119)) - (i32.add (i32.const 1199592528)) - (i32.add (i32.const -653569522)) - (i32.add (i32.const -1548089858)) - (i32.add (i32.const -602743062)) - (i32.add (i32.const 1215770508)) - (i32.add (i32.const 1357554148)) - (i32.add (i32.const -957682969)) - (i32.add (i32.const 534595170)) - (i32.add (i32.const -30249998)) - (i32.add (i32.const -2062558299)) - (i32.add (i32.const -1188223966)) - (i32.add (i32.const -1647231759)) - (i32.add (i32.const 124405019)) - (i32.add (i32.const 1896356138)) - (i32.add (i32.const 494649092)) - (i32.add (i32.const 1568058670)) - (i32.add (i32.const 1031126097)) - (i32.add (i32.const 1739095004)) - (i32.add (i32.const -261149218)) - (i32.add (i32.const -1638393862)) - (i32.add (i32.const -2131448562)) - (i32.add (i32.const -1651105820)) - (i32.add (i32.const 89164587)) - (i32.add (i32.const -201739278)) - (i32.add (i32.const -385366934)) - (i32.add (i32.const 998623127)) - (i32.add (i32.const -1284349545)) - (i32.add (i32.const 1094142076)) - (i32.add (i32.const 836914488)) - (i32.add (i32.const -1217942906)) - (i32.add (i32.const 1081520799)) - (i32.add (i32.const -1592107780)) - (i32.add (i32.const -207160910)) - (i32.add (i32.const 192842282)) - (i32.add (i32.const -1509510006)) - (i32.add (i32.const -1957575105)) - (i32.add (i32.const -1317329926)) - (i32.add (i32.const 972762188)) - (i32.add (i32.const 748285937)) - (i32.add (i32.const 947500243)) - (i32.add (i32.const 311598861)) - (i32.add (i32.const -1724881624)) - (i32.add (i32.const -459726694)) - (i32.add (i32.const 1885317391)) - (i32.add (i32.const -1983746861)) - (i32.add (i32.const -1808606392)) - (i32.add (i32.const 1467937706)) - (i32.add (i32.const 907413749)) - (i32.add (i32.const -1208537803)) - (i32.add (i32.const -1120019045)) - (i32.add (i32.const -456540615)) - (i32.add (i32.const 1921877873)) - (i32.add (i32.const -237077911)) - (i32.add (i32.const 1330844298)) - (i32.add (i32.const -1766088526)) - (i32.add (i32.const -1838809867)) - (i32.add (i32.const 681605628)) - (i32.add (i32.const -1679405459)) - (i32.add (i32.const -187876416)) - (i32.add (i32.const -168971969)) - (i32.add (i32.const -925218415)) - (i32.add (i32.const -1386665195)) - (i32.add (i32.const -1642492082)) - (i32.add (i32.const 1491893765)) - (i32.add (i32.const -335670336)) - (i32.add (i32.const 1550352580)) - (i32.add (i32.const 825488939)) - (i32.add (i32.const -1206824293)) - (i32.add (i32.const -2004126653)) - (i32.add (i32.const 474024055)) - (i32.add (i32.const 701424892)) - (i32.add (i32.const 340921623)) - (i32.add (i32.const -215260148)) - (i32.add (i32.const 705936486)) - (i32.add (i32.const 1153995564)) - (i32.add (i32.const -355032609)) - (i32.add (i32.const -1743491535)) - (i32.add (i32.const 421455827)) - (i32.add (i32.const 1996921267)) - (i32.add (i32.const -453382828)) - (i32.add (i32.const 1363856089)) - (i32.add (i32.const 1617731722)) - (i32.add (i32.const -228952306)) - (i32.add (i32.const -235679508)) - (i32.add (i32.const 1711580416)) - (i32.add (i32.const -1925652664)) - (i32.add (i32.const -389075457)) - (i32.add (i32.const 1648409549)) - (i32.add (i32.const 728196466)) - (i32.add (i32.const 136782618)) - (i32.add (i32.const -1185092864)) - (i32.add (i32.const -1826915014)) - (i32.add (i32.const 300939804)) - (i32.add (i32.const 1600354494)) - (i32.add (i32.const -1929842144)) - (i32.add (i32.const -39762511)) - (i32.add (i32.const 1739402450)) - (i32.add (i32.const -1215174523)) - (i32.add (i32.const -184687005)) - (i32.add (i32.const -521315618)) - (i32.add (i32.const 852908391)) - (i32.add (i32.const 480232844)) - (i32.add (i32.const -996449799)) - (i32.add (i32.const -910849229)) - (i32.add (i32.const -459508539)) - (i32.add (i32.const 572250316)) - (i32.add (i32.const 1926722475)) - (i32.add (i32.const -1817734389)) - (i32.add (i32.const -495441381)) - (i32.add (i32.const 305248762)) - (i32.add (i32.const -1246027392)) - (i32.add (i32.const 1012539765)) - (i32.add (i32.const -860364031)) - (i32.add (i32.const -2077360457)) - (i32.add (i32.const -182998356)) - (i32.add (i32.const 1588830445)) - (i32.add (i32.const 438788569)) - (i32.add (i32.const -1614177577)) - (i32.add (i32.const 854441003)) - (i32.add (i32.const 911124372)) - (i32.add (i32.const -1913730462)) - (i32.add (i32.const 1731298498)) - (i32.add (i32.const -1947661165)) - (i32.add (i32.const -1002175369)) - (i32.add (i32.const 355847176)) - (i32.add (i32.const -336972688)) - (i32.add (i32.const -2088490245)) - (i32.add (i32.const 516443227)) - (i32.add (i32.const 1451643978)) - (i32.add (i32.const 727287977)) - (i32.add (i32.const 2027962918)) - (i32.add (i32.const 1293659141)) - (i32.add (i32.const -477877177)) - (i32.add (i32.const 1496896631)) - (i32.add (i32.const -1443141109)) - (i32.add (i32.const -336387664)) - (i32.add (i32.const 1343741398)) - (i32.add (i32.const 2143476075)) - (i32.add (i32.const -986720161)) - (i32.add (i32.const -1183117680)) - (i32.add (i32.const 1273687359)) - (i32.add (i32.const -245143047)) - (i32.add (i32.const -605325641)) - (i32.add (i32.const 129328866)) - (i32.add (i32.const -1312760065)) - (i32.add (i32.const -480081785)) - (i32.add (i32.const -990010319)) - (i32.add (i32.const 605452478)) - (i32.add (i32.const 1331463506)) - (i32.add (i32.const -2142453132)) - (i32.add (i32.const 1511805860)) - (i32.add (i32.const 1840583332)) - (i32.add (i32.const -619283115)) - (i32.add (i32.const -951774378)) - (i32.add (i32.const 595586168)) - (i32.add (i32.const -738641621)) - (i32.add (i32.const -482331874)) - (i32.add (i32.const 1878029541)) - (i32.add (i32.const 2028049589)) - (i32.add (i32.const 1522737369)) - (i32.add (i32.const -825756999)) - (i32.add (i32.const 173092438)) - (i32.add (i32.const -2053010445)) - (i32.add (i32.const -1937148906)) - (i32.add (i32.const 819031701)) - (i32.add (i32.const -1220724747)) - (i32.add (i32.const -1372956158)) - (i32.add (i32.const 1933990691)) - (i32.add (i32.const 1272076451)) - (i32.add (i32.const 250452367)) - (i32.add (i32.const 220552662)) - (i32.add (i32.const 1637255424)) - (i32.add (i32.const -2117587778)) - (i32.add (i32.const -1163284916)) - (i32.add (i32.const 1825324335)) - (i32.add (i32.const 1559491247)) - (i32.add (i32.const -1940549244)) - (i32.add (i32.const -2073719168)) - (i32.add (i32.const 2080131594)) - (i32.add (i32.const -1388767612)) - (i32.add (i32.const 1761100942)) - (i32.add (i32.const 1702121860)) - (i32.add (i32.const -2083805413)) - (i32.add (i32.const 1394502606)) - (i32.add (i32.const -1638038658)) - (i32.add (i32.const 321168186)) - (i32.add (i32.const 1017758502)) - (i32.add (i32.const 647304569)) - (i32.add (i32.const 803562076)) - (i32.add (i32.const -1581918762)) - (i32.add (i32.const 949225165)) - (i32.add (i32.const 1375528579)) - (i32.add (i32.const 1737536498)) - (i32.add (i32.const 1320001528)) - (i32.add (i32.const -866058407)) - (i32.add (i32.const 1646017711)) - (i32.add (i32.const 1893674781)) - (i32.add (i32.const 930167018)) - (i32.add (i32.const -838727761)) - (i32.add (i32.const 1694335390)) - (i32.add (i32.const 1095610497)) - (i32.add (i32.const 1398781650)) - (i32.add (i32.const 1422143476)) - (i32.add (i32.const -818453024)) - (i32.add (i32.const -1957737022)) - (i32.add (i32.const -1224022428)) - (i32.add (i32.const 1674699426)) - (i32.add (i32.const 1991333388)) - (i32.add (i32.const 78156352)) - (i32.add (i32.const -33976872)) - (i32.add (i32.const -129763382)) - (i32.add (i32.const 399223252)) - (i32.add (i32.const -777355797)) - (i32.add (i32.const -1744223242)) - (i32.add (i32.const -1164521113)) - (i32.add (i32.const -1791568844)) - (i32.add (i32.const -1415180317)) - (i32.add (i32.const -1353722690)) - (i32.add (i32.const -890581968)) - (i32.add (i32.const -328822008)) - (i32.add (i32.const 1581328612)) - (i32.add (i32.const -1788959244)) - (i32.add (i32.const -2053028754)) - (i32.add (i32.const 1213482979)) - (i32.add (i32.const 1267844380)) - (i32.add (i32.const -1292239458)) - (i32.add (i32.const -1644953791)) - (i32.add (i32.const 295362490)) - (i32.add (i32.const 1071821691)) - (i32.add (i32.const -266796331)) - (i32.add (i32.const 1842095610)) - (i32.add (i32.const 921585085)) - (i32.add (i32.const -66369517)) - (i32.add (i32.const -1510763961)) - (i32.add (i32.const 1022212048)) - (i32.add (i32.const 830242940)) - (i32.add (i32.const -1155468937)) - (i32.add (i32.const -1624790350)) - (i32.add (i32.const 440572635)) - (i32.add (i32.const 1444662659)) - (i32.add (i32.const -509288009)) - (i32.add (i32.const 1279525785)) - (i32.add (i32.const -610636571)) - (i32.add (i32.const 1983413670)) - (i32.add (i32.const 703365952)) - (i32.add (i32.const -1246669330)) - (i32.add (i32.const 106177376)) - (i32.add (i32.const 97364195)) - (i32.add (i32.const 195728161)) - (i32.add (i32.const 449419027)) - (i32.add (i32.const 1835695621)) - (i32.add (i32.const 1730251197)) - (i32.add (i32.const -2021501982)) - (i32.add (i32.const 1999668882)) - (i32.add (i32.const -372875714)) - (i32.add (i32.const -2093660289)) - (i32.add (i32.const -83550803)) - (i32.add (i32.const -485894477)) - (i32.add (i32.const 1778856418)) - (i32.add (i32.const 143379407)) - (i32.add (i32.const 1091016907)) - (i32.add (i32.const -1048977443)) - (i32.add (i32.const -1438547002)) - (i32.add (i32.const -1157935038)) - (i32.add (i32.const -1445778707)) - (i32.add (i32.const -1220883947)) - (i32.add (i32.const 1741790283)) - (i32.add (i32.const -159809443)) - (i32.add (i32.const -1179346176)) - (i32.add (i32.const 32961952)) - (i32.add (i32.const 1447723823)) - (i32.add (i32.const 1700471280)) - (i32.add (i32.const 608328623)) - (i32.add (i32.const 1840593933)) - (i32.add (i32.const 1276516125)) - (i32.add (i32.const 397490137)) - (i32.add (i32.const 281888783)) - (i32.add (i32.const 1151693629)) - (i32.add (i32.const 1138632662)) - (i32.add (i32.const 844479763)) - (i32.add (i32.const -1670404628)) - (i32.add (i32.const 1537611935)) - (i32.add (i32.const 1002443961)) - (i32.add (i32.const 1094971626)) - (i32.add (i32.const 149222490)) - (i32.add (i32.const 1542120324)) - (i32.add (i32.const 1013055268)) - (i32.add (i32.const -541141640)) - (i32.add (i32.const -2000660516)) - (i32.add (i32.const -1541477286)) - (i32.add (i32.const 385851490)) - (i32.add (i32.const 1860585272)) - (i32.add (i32.const -893902100)) - (i32.add (i32.const 1718812477)) - (i32.add (i32.const 1360947775)) - (i32.add (i32.const -1458511770)) - (i32.add (i32.const 1497610048)) - (i32.add (i32.const 951521240)) - (i32.add (i32.const 1717123763)) - (i32.add (i32.const 1592607052)) - (i32.add (i32.const -1576412397)) - (i32.add (i32.const 937694112)) - (i32.add (i32.const 1373254618)) - (i32.add (i32.const -155644804)) - (i32.add (i32.const 767235899)) - (i32.add (i32.const 1478042854)) - (i32.add (i32.const -121612883)) - (i32.add (i32.const -1031091686)) - (i32.add (i32.const 770691596)) - (i32.add (i32.const 180888915)) - (i32.add (i32.const 600022914)) - (i32.add (i32.const 89395241)) - (i32.add (i32.const 920730116)) - (i32.add (i32.const 1377815383)) - (i32.add (i32.const 764713063)) - (i32.add (i32.const 881140639)) - (i32.add (i32.const -416653200)) - (i32.add (i32.const 1465784554)) - (i32.add (i32.const -242091710)) - (i32.add (i32.const -1378385060)) - (i32.add (i32.const -1639308974)) - (i32.add (i32.const -2144533058)) - (i32.add (i32.const -492245593)) - (i32.add (i32.const 1826119142)) - (i32.add (i32.const -43026874)) - (i32.add (i32.const -1031599719)) - (i32.add (i32.const 1182430716)) - (i32.add (i32.const 1332638609)) - (i32.add (i32.const 1635803451)) - (i32.add (i32.const -2054436053)) - (i32.add (i32.const 176008910)) - (i32.add (i32.const -66072739)) - (i32.add (i32.const -2139414260)) - (i32.add (i32.const 983456496)) - (i32.add (i32.const -465035040)) - (i32.add (i32.const 63878782)) - (i32.add (i32.const 692711720)) - (i32.add (i32.const -904811661)) - (i32.add (i32.const -1441627437)) - (i32.add (i32.const 1000479797)) - (i32.add (i32.const -355608286)) - (i32.add (i32.const 1001824526)) - (i32.add (i32.const 243367752)) - (i32.add (i32.const -1534172922)) - (i32.add (i32.const 1578633090)) - (i32.add (i32.const -1639667739)) - (i32.add (i32.const -56633398)) - (i32.add (i32.const 1039579441)) - (i32.add (i32.const 400384240)) - (i32.add (i32.const 1209978612)) - (i32.add (i32.const -1650089593)) - (i32.add (i32.const 336393280)) - (i32.add (i32.const 1501574368)) - (i32.add (i32.const 2044744907)) - (i32.add (i32.const 673255977)) - (i32.add (i32.const 1397839430)) - (i32.add (i32.const -956557556)) - (i32.add (i32.const 1758706391)) - (i32.add (i32.const -418256181)) - (i32.add (i32.const 393942088)) - (i32.add (i32.const 2020734950)) - (i32.add (i32.const 23384382)) - (i32.add (i32.const 1229280701)) - (i32.add (i32.const -1299089492)) - (i32.add (i32.const 1642447445)) - (i32.add (i32.const 996811276)) - (i32.add (i32.const -859869812)) - (i32.add (i32.const 1565034165)) - (i32.add (i32.const 216923226)) - (i32.add (i32.const 611276850)) - (i32.add (i32.const -465786036)) - (i32.add (i32.const -1011917820)) - (i32.add (i32.const 1262152710)) - (i32.add (i32.const -2037435470)) - (i32.add (i32.const -1388994780)) - (i32.add (i32.const 584500434)) - (i32.add (i32.const 1630620458)) - (i32.add (i32.const -298257633)) - (i32.add (i32.const 282517533)) - (i32.add (i32.const -1306614715)) - (i32.add (i32.const -199347123)) - (i32.add (i32.const -1753447681)) - (i32.add (i32.const 1599689992)) - (i32.add (i32.const -720378334)) - (i32.add (i32.const 461426119)) - (i32.add (i32.const -204556908)) - (i32.add (i32.const -786564058)) - (i32.add (i32.const -456499115)) - (i32.add (i32.const -601975332)) - (i32.add (i32.const 71057301)) - (i32.add (i32.const -2121187348)) - (i32.add (i32.const 1794331665)) - (i32.add (i32.const 265456320)) - (i32.add (i32.const 60529010)) - (i32.add (i32.const 1659447550)) - (i32.add (i32.const -336998390)) - (i32.add (i32.const -1212564588)) - (i32.add (i32.const 1623957066)) - (i32.add (i32.const -928715228)) - (i32.add (i32.const 705614530)) - (i32.add (i32.const 560673854)) - (i32.add (i32.const -1460950376)) - (i32.add (i32.const -470014795)) - (i32.add (i32.const -1628423003)) - (i32.add (i32.const -791143887)) - (i32.add (i32.const 461061618)) - (i32.add (i32.const -1886271539)) - (i32.add (i32.const 919627625)) - (i32.add (i32.const 1068331220)) - (i32.add (i32.const -645398922)) - (i32.add (i32.const -728742234)) - (i32.add (i32.const 989728024)) - (i32.add (i32.const 1602128655)) - (i32.add (i32.const -97557944)) - (i32.add (i32.const 2101673156)) - (i32.add (i32.const -1405961041)) - (i32.add (i32.const 1285881890)) - (i32.add (i32.const -999271346)) - (i32.add (i32.const -918060644)) - (i32.add (i32.const 901271662)) - (i32.add (i32.const -1182484459)) - (i32.add (i32.const 1559681035)) - (i32.add (i32.const -1721804635)) - (i32.add (i32.const -1575120227)) - (i32.add (i32.const 371152620)) - (i32.add (i32.const 487314657)) - (i32.add (i32.const 777217006)) - (i32.add (i32.const 2131460719)) - (i32.add (i32.const -506412842)) - (i32.add (i32.const 234777213)) - (i32.add (i32.const 1321825915)) - (i32.add (i32.const 1093943971)) - (i32.add (i32.const -421560932)) - (i32.add (i32.const -1916273905)) - (i32.add (i32.const 43907466)) - (i32.add (i32.const 515660703)) - (i32.add (i32.const 15101708)) - (i32.add (i32.const -1478544448)) - (i32.add (i32.const 1037113887)) - (i32.add (i32.const 1653240567)) - (i32.add (i32.const 1538296489)) - (i32.add (i32.const -2094529483)) - (i32.add (i32.const 1005739037)) - (i32.add (i32.const 692280431)) - (i32.add (i32.const -446565917)) - (i32.add (i32.const 161700974)) - (i32.add (i32.const 2087283318)) - (i32.add (i32.const 616565403)) - (i32.add (i32.const -1337264556)) - (i32.add (i32.const 550783705)) - (i32.add (i32.const -1366811327)) - (i32.add (i32.const 239981565)) - (i32.add (i32.const -1154372867)) - (i32.add (i32.const -783590003)) - (i32.add (i32.const -883653812)) - (i32.add (i32.const 928136383)) - (i32.add (i32.const -374751524)) - (i32.add (i32.const -530927241)) - (i32.add (i32.const 309715186)) - (i32.add (i32.const -111067982)) - (i32.add (i32.const 1524121187)) - (i32.add (i32.const 20450733)) - (i32.add (i32.const -1107157970)) - (i32.add (i32.const 1348277463)) - (i32.add (i32.const 211631943)) - (i32.add (i32.const 280827244)) - (i32.add (i32.const -1931775015)) - (i32.add (i32.const -1904789873)) - (i32.add (i32.const -789915567)) - (i32.add (i32.const 248054647)) - (i32.add (i32.const -839048966)) - (i32.add (i32.const 2111917082)) - (i32.add (i32.const -2100996644)) - (i32.add (i32.const 983230619)) - (i32.add (i32.const -137322463)) - (i32.add (i32.const 1868970767)) - (i32.add (i32.const -491943875)) - (i32.add (i32.const -1070466236)) - (i32.add (i32.const -1762311425)) - (i32.add (i32.const -1352475272)) - (i32.add (i32.const 1684499265)) - (i32.add (i32.const 520389846)) - (i32.add (i32.const 1599717275)) - (i32.add (i32.const -474289692)) - (i32.add (i32.const 558447649)) - (i32.add (i32.const -1907352237)) - (i32.add (i32.const -303128520)) - (i32.add (i32.const -1466117734)) - (i32.add (i32.const 1804941640)) - (i32.add (i32.const 672479062)) - (i32.add (i32.const -248560073)) - (i32.add (i32.const -1202065741)) - (i32.add (i32.const 761332129)) - (i32.add (i32.const 603232062)) - (i32.add (i32.const 1227363662)) - (i32.add (i32.const 787738412)) - (i32.add (i32.const 1384702646)) - (i32.add (i32.const -1991450305)) - (i32.add (i32.const 1390876207)) - (i32.add (i32.const 687230876)) - (i32.add (i32.const -1106034881)) - (i32.add (i32.const -1506002528)) - (i32.add (i32.const -888192506)) - (i32.add (i32.const 715629175)) - (i32.add (i32.const -785707207)) - (i32.add (i32.const -417008051)) - (i32.add (i32.const -933673120)) - (i32.add (i32.const 1301034368)) - (i32.add (i32.const 377677883)) - (i32.add (i32.const -578080990)) - (i32.add (i32.const -564453986)) - (i32.add (i32.const -376352154)) - (i32.add (i32.const -954460243)) - (i32.add (i32.const -74617452)) - (i32.add (i32.const -142437195)) - (i32.add (i32.const -1036358588)) - (i32.add (i32.const -1237724756)) - (i32.add (i32.const -736292639)) - (i32.add (i32.const -906294539)) - (i32.add (i32.const 138048509)) - (i32.add (i32.const 1141419428)) - (i32.add (i32.const -573117714)) - (i32.add (i32.const -1763119467)) - (i32.add (i32.const 1655512314)) - (i32.add (i32.const 1427338562)) - (i32.add (i32.const -696842698)) - (i32.add (i32.const -1706833497)) - (i32.add (i32.const 278686868)) - (i32.add (i32.const 1419360615)) - (i32.add (i32.const 1986568109)) - (i32.add (i32.const 695323953)) - (i32.add (i32.const 416859436)) - (i32.add (i32.const 796141458)) - (i32.add (i32.const -1681432529)) - (i32.add (i32.const 438146466)) - (i32.add (i32.const 1077030035)) - (i32.add (i32.const 528178078)) - (i32.add (i32.const -1485773143)) - (i32.add (i32.const 568534162)) - (i32.add (i32.const 694201253)) - (i32.add (i32.const -1838822925)) - (i32.add (i32.const -1290621809)) - (i32.add (i32.const 1077239921)) - (i32.add (i32.const -1603882509)) - (i32.add (i32.const -318370374)) - (i32.add (i32.const 1654885031)) - (i32.add (i32.const -70448602)) - (i32.add (i32.const 251036797)) - (i32.add (i32.const 1894926700)) - (i32.add (i32.const 312759808)) - (i32.add (i32.const 1535612820)) - (i32.add (i32.const 1891334305)) - (i32.add (i32.const -1324229708)) - (i32.add (i32.const 1247933604)) - (i32.add (i32.const 2050429461)) - (i32.add (i32.const 296339819)) - (i32.add (i32.const -2007115515)) - (i32.add (i32.const 43685679)) - (i32.add (i32.const 1870473492)) - (i32.add (i32.const -1709172725)) - (i32.add (i32.const 667760755)) - (i32.add (i32.const -685509070)) - (i32.add (i32.const -1326281156)) - (i32.add (i32.const -1898967480)) - (i32.add (i32.const -1801356808)) - (i32.add (i32.const -1628330277)) - (i32.add (i32.const -558369085)) - (i32.add (i32.const 1419741777)) - (i32.add (i32.const -812098403)) - (i32.add (i32.const 333581737)) - (i32.add (i32.const 359234592)) - (i32.add (i32.const -68442887)) - (i32.add (i32.const -1822240372)) - (i32.add (i32.const 1965923904)) - (i32.add (i32.const 269283434)) - (i32.add (i32.const 642085016)) - (i32.add (i32.const 1764984849)) - (i32.add (i32.const 2079765899)) - (i32.add (i32.const -1603234962)) - (i32.add (i32.const 1096661276)) - (i32.add (i32.const 1275233698)) - (i32.add (i32.const 1443719505)) - (i32.add (i32.const 71212893)) - (i32.add (i32.const -163006199)) - (i32.add (i32.const 218554352)) - (i32.add (i32.const 553366859)) - (i32.add (i32.const -132733500)) - (i32.add (i32.const -375718104)) - (i32.add (i32.const -1946042075)) - (i32.add (i32.const -1269098536)) - (i32.add (i32.const -1666523455)) - (i32.add (i32.const 395575895)) - (i32.add (i32.const -568976078)) - (i32.add (i32.const -1816145278)) - (i32.add (i32.const -1119415487)) - (i32.add (i32.const -1516801436)) - (i32.add (i32.const -532007330)) - (i32.add (i32.const -1687134513)) - (i32.add (i32.const -1368846328)) - (i32.add (i32.const -1928558012)) - (i32.add (i32.const -1321299843)) - (i32.add (i32.const 2029853267)) - (i32.add (i32.const -1755244758)) - (i32.add (i32.const -1882445582)) - (i32.add (i32.const 1820505441)) - (i32.add (i32.const -1030627418)) - (i32.add (i32.const 147981169)) - (i32.add (i32.const -1670251373)) - (i32.add (i32.const 2011427202)) - (i32.add (i32.const -982837237)) - (i32.add (i32.const -1754526440)) - (i32.add (i32.const 1872116087)) - (i32.add (i32.const 505682277)) - (i32.add (i32.const 1719052975)) - (i32.add (i32.const 1606208046)) - (i32.add (i32.const 1697885296)) - (i32.add (i32.const -1139330303)) - (i32.add (i32.const -1650790181)) - (i32.add (i32.const -235006143)) - (i32.add (i32.const 146347509)) - (i32.add (i32.const 1545984503)) - (i32.add (i32.const -1193290747)) - (i32.add (i32.const 1335334403)) - (i32.add (i32.const 1870409865)) - (i32.add (i32.const 2010186766)) - (i32.add (i32.const -809221398)) - (i32.add (i32.const -314363924)) - (i32.add (i32.const 628540626)) - (i32.add (i32.const -597189691)) - (i32.add (i32.const 1338837471)) - (i32.add (i32.const -1227877557)) - (i32.add (i32.const -1516066874)) - (i32.add (i32.const -1055909222)) - (i32.add (i32.const 1093482728)) - (i32.add (i32.const -705978329)) - (i32.add (i32.const 1023319151)) - (i32.add (i32.const -535796305)) - (i32.add (i32.const -366536678)) - (i32.add (i32.const 851321114)) - (i32.add (i32.const -1788391038)) - (i32.add (i32.const 1036700302)) - (i32.add (i32.const 460529929)) - (i32.add (i32.const -1676197761)) - (i32.add (i32.const -24909491)) - (i32.add (i32.const -1565907723)) - (i32.add (i32.const -1531228354)) - (i32.add (i32.const 344330186)) - (i32.add (i32.const 848893762)) - (i32.add (i32.const -147515188)) - (i32.add (i32.const -1048666611)) - (i32.add (i32.const -74900021)) - (i32.add (i32.const -1382296421)) - (i32.add (i32.const 249583234)) - (i32.add (i32.const 498174499)) - (i32.add (i32.const 265267136)) - (i32.add (i32.const 84250747)) - (i32.add (i32.const 2129605258)) - (i32.add (i32.const 1511332390)) - (i32.add (i32.const 1788857195)) - (i32.add (i32.const -136373341)) - (i32.add (i32.const -2144559349)) - (i32.add (i32.const -1535478325)) - (i32.add (i32.const 1919283039)) - (i32.add (i32.const -506882622)) - (i32.add (i32.const 1242965481)) - (i32.add (i32.const 1236737394)) - (i32.add (i32.const -1811192795)) - (i32.add (i32.const -1974356498)) - (i32.add (i32.const -1950819059)) - (i32.add (i32.const -157744375)) - (i32.add (i32.const -723325311)) - (i32.add (i32.const 1575993289)) - (i32.add (i32.const 1847106593)) - (i32.add (i32.const 129491968)) - (i32.add (i32.const 625708569)) - (i32.add (i32.const -1818968566)) - (i32.add (i32.const 959476871)) - (i32.add (i32.const 1082224581)) - (i32.add (i32.const 1490598834)) - (i32.add (i32.const 1567017114)) - (i32.add (i32.const -916627341)) - (i32.add (i32.const 1564937325)) - (i32.add (i32.const -380033184)) - (i32.add (i32.const -1393683364)) - (i32.add (i32.const 1732668435)) - (i32.add (i32.const 1370124378)) - (i32.add (i32.const 982952467)) - (i32.add (i32.const 49631926)) - (i32.add (i32.const -1003242553)) - (i32.add (i32.const 536805328)) - (i32.add (i32.const 255361696)) - (i32.add (i32.const 689325482)) - (i32.add (i32.const 411313759)) - (i32.add (i32.const -1213171741)) - (i32.add (i32.const -173939265)) - (i32.add (i32.const 1843718224)) - (i32.add (i32.const 118499318)) - (i32.add (i32.const -47479780)) - (i32.add (i32.const 723141901)) - (i32.add (i32.const -616734562)) - (i32.add (i32.const 1452178557)) - (i32.add (i32.const 443643219)) - (i32.add (i32.const -2054786761)) - (i32.add (i32.const -1478433744)) - (i32.add (i32.const 404843525)) - (i32.add (i32.const 1298194787)) - (i32.add (i32.const 465529792)) - (i32.add (i32.const -1175816525)) - (i32.add (i32.const -1279462133)) - (i32.add (i32.const 1272667787)) - (i32.add (i32.const 655165467)) - (i32.add (i32.const -965213747)) - (i32.add (i32.const 1785087793)) - (i32.add (i32.const 1610994803)) - (i32.add (i32.const 2057889073)) - (i32.add (i32.const -883814139)) - (i32.add (i32.const 1622138363)) - (i32.add (i32.const -36104916)) - (i32.add (i32.const -1828989634)) - (i32.add (i32.const 1834116170)) - (i32.add (i32.const 1159253348)) - (i32.add (i32.const -1738689756)) - (i32.add (i32.const -1358127250)) - (i32.add (i32.const 298997289)) - (i32.add (i32.const 815030478)) - (i32.add (i32.const 932849111)) - (i32.add (i32.const -757062556)) - (i32.add (i32.const 242571953)) - (i32.add (i32.const -799696795)) - (i32.add (i32.const 1345884401)) - (i32.add (i32.const 2056028139)) - (i32.add (i32.const 868696661)) - (i32.add (i32.const -993760030)) - (i32.add (i32.const -1519705606)) - (i32.add (i32.const -1988728494)) - (i32.add (i32.const 402620558)) - (i32.add (i32.const 195985544)) - (i32.add (i32.const 603805054)) - (i32.add (i32.const 354961529)) - (i32.add (i32.const -780808056)) - (i32.add (i32.const -957605266)) - (i32.add (i32.const -1838211697)) - (i32.add (i32.const -163213164)) - (i32.add (i32.const -1915665997)) - (i32.add (i32.const 1578415379)) - (i32.add (i32.const -869440235)) - (i32.add (i32.const -1863365414)) - (i32.add (i32.const -717650483)) - (i32.add (i32.const -1760712245)) - (i32.add (i32.const 1921055616)) - (i32.add (i32.const 1264412515)) - (i32.add (i32.const -1147398111)) - (i32.add (i32.const -70544495)) - (i32.add (i32.const -1260191846)) - (i32.add (i32.const -579993739)) - (i32.add (i32.const -1512414036)) - (i32.add (i32.const 594204520)) - (i32.add (i32.const -1091986159)) - (i32.add (i32.const 554796487)) - (i32.add (i32.const -578329993)) - (i32.add (i32.const 643633566)) - (i32.add (i32.const -921805497)) - (i32.add (i32.const 299791699)) - (i32.add (i32.const 1079292360)) - (i32.add (i32.const -1927258936)) - (i32.add (i32.const 686917294)) - (i32.add (i32.const 857140355)) - (i32.add (i32.const 1137956277)) - (i32.add (i32.const -1652096680)) - (i32.add (i32.const -1257377070)) - (i32.add (i32.const 1872183531)) - (i32.add (i32.const 630997969)) - (i32.add (i32.const 958213804)) - (i32.add (i32.const 1500741671)) - (i32.add (i32.const -577312098)) - (i32.add (i32.const -1081579094)) - (i32.add (i32.const -152938634)) - (i32.add (i32.const 1290901244)) - (i32.add (i32.const 1236901085)) - (i32.add (i32.const 64064294)) - (i32.add (i32.const -658481249)) - (i32.add (i32.const 769360502)) - (i32.add (i32.const -220602576)) - (i32.add (i32.const 1513573957)) - (i32.add (i32.const -1404578125)) - (i32.add (i32.const 1600042352)) - (i32.add (i32.const -1471260511)) - (i32.add (i32.const -80235903)) - (i32.add (i32.const -272937616)) - (i32.add (i32.const 518005002)) - (i32.add (i32.const -1079373064)) - (i32.add (i32.const 774454031)) - (i32.add (i32.const 279448216)) - (i32.add (i32.const 433265232)) - (i32.add (i32.const 48007698)) - (i32.add (i32.const -1972505793)) - (i32.add (i32.const -651970118)) - (i32.add (i32.const -2095877473)) - (i32.add (i32.const 1682082416)) - (i32.add (i32.const -226409904)) - (i32.add (i32.const -1923873234)) - (i32.add (i32.const -1925430831)) - (i32.add (i32.const 1312726339)) - (i32.add (i32.const 1821485625)) - (i32.add (i32.const -1308102030)) - (i32.add (i32.const -1048986459)) - (i32.add (i32.const 772715737)) - (i32.add (i32.const -448051503)) - (i32.add (i32.const 1839533342)) - (i32.add (i32.const 447097535)) - (i32.add (i32.const 2104914588)) - (i32.add (i32.const -2006417335)) - (i32.add (i32.const -969583855)) - (i32.add (i32.const -351564862)) - (i32.add (i32.const 954064254)) - (i32.add (i32.const 1736905639)) - (i32.add (i32.const -669178345)) - (i32.add (i32.const 2042943430)) - (i32.add (i32.const 1296172763)) - (i32.add (i32.const 36455181)) - (i32.add (i32.const -825475883)) - (i32.add (i32.const -1678011836)) - (i32.add (i32.const -533815376)) - (i32.add (i32.const -1047493847)) - (i32.add (i32.const -1283854254)) - (i32.add (i32.const 269789195)) - (i32.add (i32.const -1175104338)) - (i32.add (i32.const 1177960742)) - (i32.add (i32.const 1205188573)) - (i32.add (i32.const 1636383773)) - (i32.add (i32.const 2071439679)) - (i32.add (i32.const -1420674394)) - (i32.add (i32.const -286721487)) - (i32.add (i32.const -104908435)) - (i32.add (i32.const -1288873459)) - (i32.add (i32.const 754217998)) - (i32.add (i32.const -1838802946)) - (i32.add (i32.const -860090626)) - (i32.add (i32.const -1855294757)) - (i32.add (i32.const 1042621892)) - (i32.add (i32.const 2130762311)) - (i32.add (i32.const -376129177)) - (i32.add (i32.const -918074616)) - (i32.add (i32.const 1748560095)) - (i32.add (i32.const 824243562)) - (i32.add (i32.const -2141799291)) - (i32.add (i32.const -779355763)) - (i32.add (i32.const -1538162704)) - (i32.add (i32.const -1433683538)) - (i32.add (i32.const -1472444913)) - (i32.add (i32.const -1573408339)) - (i32.add (i32.const 1200835906)) - (i32.add (i32.const 2139163571)) - (i32.add (i32.const 1448059284)) - (i32.add (i32.const -828044875)) - (i32.add (i32.const 1748667584)) - (i32.add (i32.const -722247772)) - (i32.add (i32.const -699632949)) - (i32.add (i32.const 1377100352)) - (i32.add (i32.const 404294141)) - (i32.add (i32.const -2057775449)) - (i32.add (i32.const 1148518711)) - (i32.add (i32.const -604548715)) - (i32.add (i32.const -1501652847)) - (i32.add (i32.const 1883572561)) - (i32.add (i32.const 995217720)) - (i32.add (i32.const 1129453083)) - (i32.add (i32.const -2120164286)) - (i32.add (i32.const 1499057574)) - (i32.add (i32.const 1222583921)) - (i32.add (i32.const -2009101834)) - (i32.add (i32.const 1411763123)) - (i32.add (i32.const 1150217056)) - (i32.add (i32.const -977726254)) - (i32.add (i32.const 2019798530)) - (i32.add (i32.const -1433869878)) - (i32.add (i32.const 750582401)) - (i32.add (i32.const 756918463)) - (i32.add (i32.const 346347032)) - (i32.add (i32.const -1455920982)) - (i32.add (i32.const -636900700)) - (i32.add (i32.const -1605272827)) - (i32.add (i32.const 430530281)) - (i32.add (i32.const 281348115)) - (i32.add (i32.const 929284037)) - (i32.add (i32.const 1892031827)) - (i32.add (i32.const -1483369352)) - (i32.add (i32.const -699516865)) - (i32.add (i32.const 1042326862)) - (i32.add (i32.const -265577021)) - (i32.add (i32.const 1495863523)) - (i32.add (i32.const 279056495)) - (i32.add (i32.const -1954969932)) - (i32.add (i32.const 207013693)) - (i32.add (i32.const 2133324531)) - (i32.add (i32.const -1020243882)) - (i32.add (i32.const 496211051)) - (i32.add (i32.const -214234714)) - (i32.add (i32.const 793355762)) - (i32.add (i32.const -210922001)) - (i32.add (i32.const 1476024792)) - (i32.add (i32.const 2023443403)) - (i32.add (i32.const 1062318242)) - (i32.add (i32.const -1378110837)) - (i32.add (i32.const -1864643874)) - (i32.add (i32.const -1979412083)) - (i32.add (i32.const 1865796761)) - (i32.add (i32.const 598245955)) - (i32.add (i32.const 925288666)) - (i32.add (i32.const -1401772869)) - (i32.add (i32.const 1483021392)) - (i32.add (i32.const -1346025840)) - (i32.add (i32.const -1798243214)) - (i32.add (i32.const -1498851406)) - (i32.add (i32.const 2091816825)) - (i32.add (i32.const -1774988692)) - (i32.add (i32.const 540414503)) - (i32.add (i32.const 811473133)) - (i32.add (i32.const -261087462)) - (i32.add (i32.const -1863742198)) - (i32.add (i32.const 1853365184)) - (i32.add (i32.const -1988063559)) - (i32.add (i32.const -996417289)) - (i32.add (i32.const -1032040175)) - (i32.add (i32.const 1156849603)) - (i32.add (i32.const -27579238)) - (i32.add (i32.const 2051759751)) - (i32.add (i32.const 1486936672)) - (i32.add (i32.const -606043552)) - (i32.add (i32.const -2078910144)) - (i32.add (i32.const -1470811879)) - (i32.add (i32.const -397234058)) - (i32.add (i32.const -1971502462)) - (i32.add (i32.const 245006917)) - (i32.add (i32.const -1519542682)) - (i32.add (i32.const -238445858)) - (i32.add (i32.const 539918212)) - (i32.add (i32.const -1757136458)) - (i32.add (i32.const -458033365)) - (i32.add (i32.const -309101336)) - (i32.add (i32.const -1702634235)) - (i32.add (i32.const 1087060872)) - (i32.add (i32.const 712984919)) - (i32.add (i32.const -1274614134)) - (i32.add (i32.const -1583116944)) - (i32.add (i32.const 2126700981)) - (i32.add (i32.const 53373738)) - (i32.add (i32.const -52346105)) - (i32.add (i32.const 1607597286)) - (i32.add (i32.const -82039005)) - (i32.add (i32.const -1712812890)) - (i32.add (i32.const -2015472297)) - (i32.add (i32.const 416087434)) - (i32.add (i32.const 1925909130)) - (i32.add (i32.const -1628008678)) - (i32.add (i32.const 2010915581)) - (i32.add (i32.const -204652289)) - (i32.add (i32.const 1579096965)) - (i32.add (i32.const -1073032069)) - (i32.add (i32.const 1740211940)) - (i32.add (i32.const -189376491)) - (i32.add (i32.const 1102239701)) - (i32.add (i32.const 2012619121)) - (i32.add (i32.const -508169218)) - (i32.add (i32.const -2103602508)) - (i32.add (i32.const -1652550264)) - (i32.add (i32.const -1228763435)) - (i32.add (i32.const 352240029)) - (i32.add (i32.const -294401352)) - (i32.add (i32.const -810603396)) - (i32.add (i32.const 1122248899)) - (i32.add (i32.const -676223464)) - (i32.add (i32.const 1393567569)) - (i32.add (i32.const 705214523)) - (i32.add (i32.const 1732794644)) - (i32.add (i32.const 720810045)) - (i32.add (i32.const 381802567)) - (i32.add (i32.const -939561194)) - (i32.add (i32.const -1703076499)) - (i32.add (i32.const -362933044)) - (i32.add (i32.const -537741369)) - (i32.add (i32.const 1213151932)) - (i32.add (i32.const -847788469)) - (i32.add (i32.const 1246920304)) - (i32.add (i32.const -1071520334)) - (i32.add (i32.const 1750788797)) - (i32.add (i32.const -2040657425)) - (i32.add (i32.const 632600034)) - (i32.add (i32.const 2067065325)) - (i32.add (i32.const 527432673)) - (i32.add (i32.const 1100915401)) - (i32.add (i32.const 658811426)) - (i32.add (i32.const -1026704887)) - (i32.add (i32.const 1844326151)) - (i32.add (i32.const -1717122982)) - (i32.add (i32.const 322962212)) - (i32.add (i32.const 1153907430)) - (i32.add (i32.const -626838213)) - (i32.add (i32.const -399153634)) - (i32.add (i32.const -62062693)) - (i32.add (i32.const 835058558)) - (i32.add (i32.const -9757861)) - (i32.add (i32.const 434861765)) - (i32.add (i32.const -1941168555)) - (i32.add (i32.const -1775078753)) - (i32.add (i32.const 345130997)) - (i32.add (i32.const -796620009)) - (i32.add (i32.const -1794867599)) - (i32.add (i32.const -68837957)) - (i32.add (i32.const 1577457782)) - (i32.add (i32.const 597838443)) - (i32.add (i32.const -1771653458)) - (i32.add (i32.const -2070300850)) - (i32.add (i32.const 1248705856)) - (i32.add (i32.const 925356774)) - (i32.add (i32.const 226076050)) - (i32.add (i32.const 1054018425)) - (i32.add (i32.const 632017083)) - (i32.add (i32.const -1998868062)) - (i32.add (i32.const 1895528038)) - (i32.add (i32.const -972278473)) - (i32.add (i32.const 1084017955)) - (i32.add (i32.const -1470168832)) - (i32.add (i32.const 1951142155)) - (i32.add (i32.const 568578363)) - (i32.add (i32.const -1420426556)) - (i32.add (i32.const 2017658348)) - (i32.add (i32.const -937130075)) - (i32.add (i32.const -1697456827)) - (i32.add (i32.const -1975747213)) - (i32.add (i32.const -1219336001)) - (i32.add (i32.const -1414220486)) - (i32.add (i32.const 553363515)) - (i32.add (i32.const 2003897549)) - (i32.add (i32.const 1439520226)) - (i32.add (i32.const 542151521)) - (i32.add (i32.const -429554343)) - (i32.add (i32.const 1520195132)) - (i32.add (i32.const 1929832484)) - (i32.add (i32.const 2000497200)) - (i32.add (i32.const 940119676)) - (i32.add (i32.const 2138281923)) - (i32.add (i32.const 389218213)) - (i32.add (i32.const 1574421991)) - (i32.add (i32.const 1986079220)) - (i32.add (i32.const -983554244)) - (i32.add (i32.const -315424843)) - (i32.add (i32.const -1416775599)) - (i32.add (i32.const -1713971770)) - (i32.add (i32.const -37693238)) - (i32.add (i32.const -468193473)) - (i32.add (i32.const -1664604026)) - (i32.add (i32.const 258435281)) - (i32.add (i32.const 731256509)) - (i32.add (i32.const 739316250)) - (i32.add (i32.const 151611283)) - (i32.add (i32.const 1634926325)) - (i32.add (i32.const 160252386)) - (i32.add (i32.const -1412961272)) - (i32.add (i32.const 455262312)) - (i32.add (i32.const -1918932237)) - (i32.add (i32.const -470869435)) - (i32.add (i32.const 1536452859)) - (i32.add (i32.const 1362864033)) - (i32.add (i32.const 1001287461)) - (i32.add (i32.const 1012102288)) - (i32.add (i32.const 2023032263)) - (i32.add (i32.const -310197935)) - (i32.add (i32.const 1953647217)) - (i32.add (i32.const -1371113847)) - (i32.add (i32.const -1522398647)) - (i32.add (i32.const 1113345884)) - (i32.add (i32.const 1579440322)) - (i32.add (i32.const 1676165072)) - (i32.add (i32.const 2012576401)) - (i32.add (i32.const -821671414)) - (i32.add (i32.const -399936079)) - (i32.add (i32.const -868496735)) - (i32.add (i32.const 1777618643)) - (i32.add (i32.const 1702744749)) - (i32.add (i32.const 1053511994)) - (i32.add (i32.const 1516902980)) - (i32.add (i32.const -1722283394)) - (i32.add (i32.const -56019907)) - (i32.add (i32.const 91379349)) - (i32.add (i32.const 1855853425)) - (i32.add (i32.const 881257320)) - (i32.add (i32.const -1160523257)) - (i32.add (i32.const -863706345)) - (i32.add (i32.const -1544591976)) - (i32.add (i32.const 1929170508)) - (i32.add (i32.const -1967302533)) - (i32.add (i32.const -1188590744)) - (i32.add (i32.const 367400350)) - (i32.add (i32.const -425276008)) - (i32.add (i32.const 82521290)) - (i32.add (i32.const -1725208859)) - (i32.add (i32.const 480071368)) - (i32.add (i32.const -1377894873)) - (i32.add (i32.const -1432951914)) - (i32.add (i32.const 750092862)) - (i32.add (i32.const -1236795570)) - (i32.add (i32.const 1973793156)) - (i32.add (i32.const 1208996699)) - (i32.add (i32.const -1733618734)) - (i32.add (i32.const -309940035)) - (i32.add (i32.const 510295197)) - (i32.add (i32.const 1531921932)) - (i32.add (i32.const -1251196285)) - (i32.add (i32.const -1016216141)) - (i32.add (i32.const 1158827591)) - (i32.add (i32.const 778910484)) - (i32.add (i32.const 294799118)) - (i32.add (i32.const 868437775)) - (i32.add (i32.const 1980077499)) - (i32.add (i32.const 1864276770)) - (i32.add (i32.const 1068078656)) - (i32.add (i32.const -1159416358)) - (i32.add (i32.const 706799972)) - (i32.add (i32.const -1410714869)) - (i32.add (i32.const -1323344844)) - (i32.add (i32.const 771799884)) - (i32.add (i32.const 1567014619)) - (i32.add (i32.const 1948186830)) - (i32.add (i32.const -1754471843)) - (i32.add (i32.const 180738853)) - (i32.add (i32.const -1003780787)) - (i32.add (i32.const 340172297)) - (i32.add (i32.const -293266171)) - (i32.add (i32.const 728633032)) - (i32.add (i32.const -1183806056)) - (i32.add (i32.const 876127236)) - (i32.add (i32.const 118808233)) - (i32.add (i32.const 506994400)) - (i32.add (i32.const 16734354)) - (i32.add (i32.const -2000367205)) - (i32.add (i32.const -87228881)) - (i32.add (i32.const 658100899)) - (i32.add (i32.const -1820735244)) - (i32.add (i32.const 2023555073)) - (i32.add (i32.const 314916000)) - (i32.add (i32.const -1066021990)) - (i32.add (i32.const 1310851384)) - (i32.add (i32.const 826962412)) - (i32.add (i32.const -858708004)) - (i32.add (i32.const 1719356925)) - (i32.add (i32.const 1994202281)) - (i32.add (i32.const -89354269)) - (i32.add (i32.const 347098446)) - (i32.add (i32.const 1912035632)) - (i32.add (i32.const -1604429437)) - (i32.add (i32.const 2047791396)) - (i32.add (i32.const -870056789)) - (i32.add (i32.const 1715814963)) - (i32.add (i32.const 1765517419)) - (i32.add (i32.const 1745578186)) - (i32.add (i32.const -909628393)) - (i32.add (i32.const 512462109)) - (i32.add (i32.const -206015143)) - (i32.add (i32.const -1392124013)) - (i32.add (i32.const -2101540093)) - (i32.add (i32.const 2065121956)) - (i32.add (i32.const 88930272)) - (i32.add (i32.const -1710380090)) - (i32.add (i32.const 294207868)) - (i32.add (i32.const -1091419560)) - (i32.add (i32.const 1427506218)) - (i32.add (i32.const -1701751504)) - (i32.add (i32.const 90390460)) - (i32.add (i32.const -1292317583)) - (i32.add (i32.const 736857180)) - (i32.add (i32.const -1944389858)) - (i32.add (i32.const 321933507)) - (i32.add (i32.const 1569894277)) - (i32.add (i32.const -1050483174)) - (i32.add (i32.const 1759034444)) - (i32.add (i32.const -873997577)) - (i32.add (i32.const 884926014)) - (i32.add (i32.const 1553838034)) - (i32.add (i32.const -1494456469)) - (i32.add (i32.const -513395876)) - (i32.add (i32.const -74823013)) - (i32.add (i32.const -1837411841)) - (i32.add (i32.const -728605063)) - (i32.add (i32.const 305411511)) - (i32.add (i32.const 186155769)) - (i32.add (i32.const -2115570287)) - (i32.add (i32.const -828355112)) - (i32.add (i32.const 910112415)) - (i32.add (i32.const 1042792612)) - (i32.add (i32.const -2141934532)) - (i32.add (i32.const 532379955)) - (i32.add (i32.const 260518139)) - (i32.add (i32.const -201935734)) - (i32.add (i32.const 889040307)) - (i32.add (i32.const 1005664403)) - (i32.add (i32.const 388699506)) - (i32.add (i32.const -2013453393)) - (i32.add (i32.const 349101371)) - (i32.add (i32.const 1464489327)) - (i32.add (i32.const 315652571)) - (i32.add (i32.const 256613248)) - (i32.add (i32.const -655215434)) - (i32.add (i32.const 1597003303)) - (i32.add (i32.const 1118864503)) - (i32.add (i32.const -590888180)) - (i32.add (i32.const -1363251240)) - (i32.add (i32.const 120459003)) - (i32.add (i32.const 1400318626)) - (i32.add (i32.const -1582785082)) - (i32.add (i32.const 346725706)) - (i32.add (i32.const 255879321)) - (i32.add (i32.const 831753973)) - (i32.add (i32.const 1515925832)) - (i32.add (i32.const -148953088)) - (i32.add (i32.const 1798597082)) - (i32.add (i32.const -471272892)) - (i32.add (i32.const 954635687)) - (i32.add (i32.const 1534812129)) - (i32.add (i32.const -1071540252)) - (i32.add (i32.const -1380421953)) - (i32.add (i32.const 241402263)) - (i32.add (i32.const -1597130976)) - (i32.add (i32.const 1934644950)) - (i32.add (i32.const -1630678692)) - (i32.add (i32.const -120970234)) - (i32.add (i32.const 661725323)) - (i32.add (i32.const 837641467)) - (i32.add (i32.const -1600400032)) - (i32.add (i32.const 222617969)) - (i32.add (i32.const 1337440812)) - (i32.add (i32.const 1119350230)) - (i32.add (i32.const 102325042)) - (i32.add (i32.const 739739153)) - (i32.add (i32.const 699218210)) - (i32.add (i32.const -1336768541)) - (i32.add (i32.const -2066271742)) - (i32.add (i32.const 954685540)) - (i32.add (i32.const 1603227501)) - (i32.add (i32.const 451813382)) - (i32.add (i32.const -1111459979)) - (i32.add (i32.const 288715264)) - (i32.add (i32.const 1864333887)) - (i32.add (i32.const -904569284)) - (i32.add (i32.const 2021469922)) - (i32.add (i32.const -1223903021)) - (i32.add (i32.const -291193110)) - (i32.add (i32.const 1645848392)) - (i32.add (i32.const 1893709360)) - (i32.add (i32.const -1282876217)) - (i32.add (i32.const -1375125669)) - (i32.add (i32.const -1921218553)) - (i32.add (i32.const 31639436)) - (i32.add (i32.const 1457822654)) - (i32.add (i32.const -1196338211)) - (i32.add (i32.const -1646272463)) - (i32.add (i32.const -1331085148)) - (i32.add (i32.const 898846138)) - (i32.add (i32.const -932270623)) - (i32.add (i32.const 1686990666)) - (i32.add (i32.const 895864724)) - (i32.add (i32.const 1764006764)) - (i32.add (i32.const 402519418)) - (i32.add (i32.const -1953386591)) - (i32.add (i32.const -417537452)) - (i32.add (i32.const -730673043)) - (i32.add (i32.const 834955167)) - (i32.add (i32.const 1354267736)) - (i32.add (i32.const -1912143126)) - (i32.add (i32.const -1862135787)) - (i32.add (i32.const -746700247)) - (i32.add (i32.const 163895081)) - (i32.add (i32.const 1742043126)) - (i32.add (i32.const -1981152256)) - (i32.add (i32.const 466734865)) - (i32.add (i32.const 70307264)) - (i32.add (i32.const 573798898)) - (i32.add (i32.const -1188573778)) - (i32.add (i32.const -844732028)) - (i32.add (i32.const 324336930)) - (i32.add (i32.const -741347047)) - (i32.add (i32.const -549500093)) - (i32.add (i32.const -1111940271)) - (i32.add (i32.const -453034971)) - (i32.add (i32.const 1235551749)) - (i32.add (i32.const 556518137)) - (i32.add (i32.const 606727714)) - (i32.add (i32.const 1294228588)) - (i32.add (i32.const 1801852273)) - (i32.add (i32.const 1385669863)) - (i32.add (i32.const 1546951830)) - (i32.add (i32.const 81542638)) - (i32.add (i32.const -180320345)) - (i32.add (i32.const 1813091847)) - (i32.add (i32.const -2071431833)) - (i32.add (i32.const 994574813)) - (i32.add (i32.const 1409556826)) - (i32.add (i32.const -227156404)) - (i32.add (i32.const 1446918963)) - (i32.add (i32.const 1294299643)) - (i32.add (i32.const 1390465324)) - (i32.add (i32.const -789220891)) - (i32.add (i32.const -932637524)) - (i32.add (i32.const -1597142900)) - (i32.add (i32.const -2106361924)) - (i32.add (i32.const -749689177)) - (i32.add (i32.const 381424927)) - (i32.add (i32.const -45800737)) - (i32.add (i32.const -731734390)) - (i32.add (i32.const -1697086639)) - (i32.add (i32.const 311140418)) - (i32.add (i32.const 1546428277)) - (i32.add (i32.const 246150940)) - (i32.add (i32.const -138771067)) - (i32.add (i32.const 597719888)) - (i32.add (i32.const 457807281)) - (i32.add (i32.const -1517888979)) - (i32.add (i32.const -1302044031)) - (i32.add (i32.const 82167901)) - (i32.add (i32.const 1445858398)) - (i32.add (i32.const -966996550)) - (i32.add (i32.const -856582428)) - (i32.add (i32.const -706524754)) - (i32.add (i32.const -2109644656)) - (i32.add (i32.const 1565723138)) - (i32.add (i32.const -692205695)) - (i32.add (i32.const 1381139657)) - (i32.add (i32.const -547586572)) - (i32.add (i32.const -1737295641)) - (i32.add (i32.const -776387579)) - (i32.add (i32.const -2114904228)) - (i32.add (i32.const 849718874)) - (i32.add (i32.const 453887535)) - (i32.add (i32.const 1377417508)) - (i32.add (i32.const -1874320143)) - (i32.add (i32.const 1277659105)) - (i32.add (i32.const -1783239784)) - (i32.add (i32.const 1721701560)) - (i32.add (i32.const 908694927)) - (i32.add (i32.const 239771247)) - (i32.add (i32.const 1071166746)) - (i32.add (i32.const 1878423901)) - (i32.add (i32.const -974971979)) - (i32.add (i32.const 2081912536)) - (i32.add (i32.const 840734665)) - (i32.add (i32.const 72024310)) - (i32.add (i32.const -306885677)) - (i32.add (i32.const 1249957887)) - (i32.add (i32.const -1141049913)) - (i32.add (i32.const -1222931025)) - (i32.add (i32.const -447188242)) - (i32.add (i32.const 1309189176)) - (i32.add (i32.const -1529245491)) - (i32.add (i32.const -722461990)) - (i32.add (i32.const 2058045075)) - (i32.add (i32.const 958105302)) - (i32.add (i32.const 665836315)) - (i32.add (i32.const 327326793)) - (i32.add (i32.const -1845088224)) - (i32.add (i32.const -1254256451)) - (i32.add (i32.const -2124152027)) - (i32.add (i32.const -806751182)) - (i32.add (i32.const -459297609)) - (i32.add (i32.const -1734614780)) - (i32.add (i32.const -104140862)) - (i32.add (i32.const 1255696035)) - (i32.add (i32.const -1460538805)) - (i32.add (i32.const 1702857165)) - (i32.add (i32.const 1396837458)) - (i32.add (i32.const -759898838)) - (i32.add (i32.const -287375888)) - (i32.add (i32.const 126114617)) - (i32.add (i32.const 1865307530)) - (i32.add (i32.const -1454872279)) - (i32.add (i32.const 10976627)) - (i32.add (i32.const -2136433228)) - (i32.add (i32.const 2115498248)) - (i32.add (i32.const -897627160)) - (i32.add (i32.const -977633093)) - (i32.add (i32.const 1426267205)) - (i32.add (i32.const 76927171)) - (i32.add (i32.const 1468215403)) - (i32.add (i32.const -792526859)) - (i32.add (i32.const 1689446076)) - (i32.add (i32.const -972248054)) - (i32.add (i32.const 2132351999)) - (i32.add (i32.const -295334117)) - (i32.add (i32.const 337257370)) - (i32.add (i32.const -1438154544)) - (i32.add (i32.const -628174675)) - (i32.add (i32.const -1760884485)) - (i32.add (i32.const 486350673)) - (i32.add (i32.const 832987862)) - (i32.add (i32.const 720515098)) - (i32.add (i32.const -1659624415)) - (i32.add (i32.const 946559293)) - (i32.add (i32.const 1087153406)) - (i32.add (i32.const -1946056375)) - (i32.add (i32.const 816995259)) - (i32.add (i32.const -1959232729)) - (i32.add (i32.const 325698117)) - (i32.add (i32.const 92189364)) - (i32.add (i32.const 1763274833)) - (i32.add (i32.const 549749376)) - (i32.add (i32.const -719854106)) - (i32.add (i32.const -349722400)) - (i32.add (i32.const -1604206941)) - (i32.add (i32.const -1417096231)) - (i32.add (i32.const -212519963)) - (i32.add (i32.const 66619842)) - (i32.add (i32.const 1701514147)) - (i32.add (i32.const 718684308)) - (i32.add (i32.const -281720331)) - (i32.add (i32.const -1920290187)) - (i32.add (i32.const -485939257)) - (i32.add (i32.const 1828360722)) - (i32.add (i32.const -832227206)) - (i32.add (i32.const -197304982)) - (i32.add (i32.const -1686575792)) - (i32.add (i32.const -1016719567)) - (i32.add (i32.const 1933689347)) - (i32.add (i32.const -477978474)) - (i32.add (i32.const 1288155098)) - (i32.add (i32.const 1877963356)) - (i32.add (i32.const -306137784)) - (i32.add (i32.const 892130559)) - (i32.add (i32.const -8033467)) - (i32.add (i32.const 202897877)) - (i32.add (i32.const -1724498553)) - (i32.add (i32.const -454407722)) - (i32.add (i32.const 1309621693)) - (i32.add (i32.const 1369462558)) - (i32.add (i32.const -1731221471)) - (i32.add (i32.const 1477250386)) - (i32.add (i32.const -2100918712)) - (i32.add (i32.const -2079253115)) - (i32.add (i32.const -1340751487)) - (i32.add (i32.const 1275248720)) - (i32.add (i32.const -1809078465)) - (i32.add (i32.const -1933394708)) - (i32.add (i32.const -145540411)) - (i32.add (i32.const 713470185)) - (i32.add (i32.const -1702403115)) - (i32.add (i32.const 1282791652)) - (i32.add (i32.const 1211383079)) - (i32.add (i32.const -1640018355)) - (i32.add (i32.const -1237126008)) - (i32.add (i32.const 1910173495)) - (i32.add (i32.const -1310142147)) - (i32.add (i32.const 78267964)) - (i32.add (i32.const -1756252091)) - (i32.add (i32.const 1091962571)) - (i32.add (i32.const 18757071)) - (i32.add (i32.const -1094561630)) - (i32.add (i32.const 1655996297)) - (i32.add (i32.const 1711354367)) - (i32.add (i32.const 1159613321)) - (i32.add (i32.const 163184724)) - (i32.add (i32.const -2089733210)) - (i32.add (i32.const 159704496)) - (i32.add (i32.const -1594499762)) - (i32.add (i32.const -142742899)) - (i32.add (i32.const 200511118)) - (i32.add (i32.const 695378804)) - (i32.add (i32.const -968931002)) - (i32.add (i32.const -1922443570)) - (i32.add (i32.const 309195640)) - (i32.add (i32.const -591305357)) - (i32.add (i32.const 1934339325)) - (i32.add (i32.const -669827384)) - (i32.add (i32.const 144685273)) - (i32.add (i32.const 952074833)) - (i32.add (i32.const -595504307)) - (i32.add (i32.const -503056207)) - (i32.add (i32.const 1953059133)) - (i32.add (i32.const -1214719677)) - (i32.add (i32.const -1310448979)) - (i32.add (i32.const -809300457)) - (i32.add (i32.const -552182727)) - (i32.add (i32.const 1898570609)) - (i32.add (i32.const 539236062)) - (i32.add (i32.const -940129105)) - (i32.add (i32.const 908016425)) - (i32.add (i32.const -1560560135)) - (i32.add (i32.const 1598662987)) - (i32.add (i32.const -1188099265)) - (i32.add (i32.const -1097437787)) - (i32.add (i32.const 1369167172)) - (i32.add (i32.const 1261248718)) - (i32.add (i32.const -445923362)) - (i32.add (i32.const 1822551412)) - (i32.add (i32.const -1488575148)) - (i32.add (i32.const 1293528026)) - (i32.add (i32.const -1997106538)) - (i32.add (i32.const -125324320)) - (i32.add (i32.const -765229460)) - (i32.add (i32.const 1730539593)) - (i32.add (i32.const -1112298582)) - (i32.add (i32.const 1624350280)) - (i32.add (i32.const 767122371)) - (i32.add (i32.const 1674939163)) - (i32.add (i32.const -1800840404)) - (i32.add (i32.const 1903171955)) - (i32.add (i32.const -103076685)) - (i32.add (i32.const -1076216446)) - (i32.add (i32.const -205907786)) - (i32.add (i32.const -1164943014)) - (i32.add (i32.const -482512221)) - (i32.add (i32.const 134574001)) - (i32.add (i32.const -1717258156)) - (i32.add (i32.const -1956852408)) - (i32.add (i32.const 401149603)) - (i32.add (i32.const -1021596297)) - (i32.add (i32.const 1484606640)) - (i32.add (i32.const -240461733)) - (i32.add (i32.const 1062488860)) - (i32.add (i32.const -1808890727)) - (i32.add (i32.const 1448109890)) - (i32.add (i32.const -893669451)) - (i32.add (i32.const -1780482146)) - (i32.add (i32.const 1685730007)) - (i32.add (i32.const 575214928)) - (i32.add (i32.const 440619703)) - (i32.add (i32.const -1924154687)) - (i32.add (i32.const -1315360608)) - (i32.add (i32.const -65755500)) - (i32.add (i32.const 1723748875)) - (i32.add (i32.const 690808926)) - (i32.add (i32.const -1597863624)) - (i32.add (i32.const 985282614)) - (i32.add (i32.const 1800437862)) - (i32.add (i32.const -292804710)) - (i32.add (i32.const -1297431312)) - (i32.add (i32.const 474944539)) - (i32.add (i32.const 36970701)) - (i32.add (i32.const -1404102907)) - (i32.add (i32.const 2101348242)) - (i32.add (i32.const -1796975482)) - (i32.add (i32.const -1497021681)) - (i32.add (i32.const 2137505888)) - (i32.add (i32.const 1738287155)) - (i32.add (i32.const 70970015)) - (i32.add (i32.const -1712369927)) - (i32.add (i32.const 897181003)) - (i32.add (i32.const -1378505949)) - (i32.add (i32.const -1330478102)) - (i32.add (i32.const -278282801)) - (i32.add (i32.const 1780737717)) - (i32.add (i32.const -1899781927)) - (i32.add (i32.const -1476490187)) - (i32.add (i32.const 1422007824)) - (i32.add (i32.const -1057377047)) - (i32.add (i32.const 591632861)) - (i32.add (i32.const -1735766671)) - (i32.add (i32.const -612667164)) - (i32.add (i32.const 1183627525)) - (i32.add (i32.const -894668376)) - (i32.add (i32.const -773220849)) - (i32.add (i32.const -1817595366)) - (i32.add (i32.const 301392230)) - (i32.add (i32.const 2006069923)) - (i32.add (i32.const -1695034480)) - (i32.add (i32.const 662043027)) - (i32.add (i32.const 1984641315)) - (i32.add (i32.const -1029395561)) - (i32.add (i32.const 895856647)) - (i32.add (i32.const -2020668166)) - (i32.add (i32.const 418212600)) - (i32.add (i32.const -490382457)) - (i32.add (i32.const 400362097)) - (i32.add (i32.const -1940517503)) - (i32.add (i32.const 727959528)) - (i32.add (i32.const -951929641)) - (i32.add (i32.const 1456539497)) - (i32.add (i32.const 1553126065)) - (i32.add (i32.const -1625968133)) - (i32.add (i32.const 701549432)) - (i32.add (i32.const 46771556)) - (i32.add (i32.const 518169212)) - (i32.add (i32.const 1185979546)) - (i32.add (i32.const 929292414)) - (i32.add (i32.const 1279130079)) - (i32.add (i32.const 2053102425)) - (i32.add (i32.const 544992260)) - (i32.add (i32.const -1114585140)) - (i32.add (i32.const -352409342)) - (i32.add (i32.const -5207452)) - (i32.add (i32.const 894534024)) - (i32.add (i32.const -838122415)) - (i32.add (i32.const -1950892039)) - (i32.add (i32.const -681297346)) - (i32.add (i32.const -595189239)) - (i32.add (i32.const 417124661)) - (i32.add (i32.const -201385000)) - (i32.add (i32.const -1087403900)) - (i32.add (i32.const 157876773)) - (i32.add (i32.const -1284511661)) - (i32.add (i32.const -401654344)) - (i32.add (i32.const 1144306002)) - (i32.add (i32.const 816852705)) - (i32.add (i32.const 19285542)) - (i32.add (i32.const -584317610)) - (i32.add (i32.const 1948997199)) - (i32.add (i32.const -2118316159)) - (i32.add (i32.const -440553478)) - (i32.add (i32.const -1497876262)) - (i32.add (i32.const -1452638635)) - (i32.add (i32.const -814643224)) - (i32.add (i32.const 1383300198)) - (i32.add (i32.const 1570179675)) - (i32.add (i32.const -2087978157)) - (i32.add (i32.const -896503408)) - (i32.add (i32.const -1359491894)) - (i32.add (i32.const 1379608777)) - (i32.add (i32.const -361667778)) - (i32.add (i32.const 1290126387)) - (i32.add (i32.const -476770879)) - (i32.add (i32.const 510432210)) - (i32.add (i32.const 1696197757)) - (i32.add (i32.const 1957772340)) - (i32.add (i32.const -137217374)) - (i32.add (i32.const 111979059)) - (i32.add (i32.const -1726881798)) - (i32.add (i32.const 59656353)) - (i32.add (i32.const 628723486)) - (i32.add (i32.const 2047376635)) - (i32.add (i32.const 2099801342)) - (i32.add (i32.const -989618784)) - (i32.add (i32.const -1204442993)) - (i32.add (i32.const -1965152366)) - (i32.add (i32.const 125259120)) - (i32.add (i32.const -392103585)) - (i32.add (i32.const 1919496029)) - (i32.add (i32.const -977597348)) - (i32.add (i32.const 1808723761)) - (i32.add (i32.const 1932709896)) - (i32.add (i32.const -314450957)) - (i32.add (i32.const -221405379)) - (i32.add (i32.const -273428252)) - (i32.add (i32.const 1825725836)) - (i32.add (i32.const 493625501)) - (i32.add (i32.const 1345543436)) - (i32.add (i32.const 374469056)) - (i32.add (i32.const -1716067270)) - (i32.add (i32.const 247230497)) - (i32.add (i32.const 1845471220)) - (i32.add (i32.const -1198265297)) - (i32.add (i32.const -648173132)) - (i32.add (i32.const 379742413)) - (i32.add (i32.const 385775001)) - (i32.add (i32.const -1528150029)) - (i32.add (i32.const 579758178)) - (i32.add (i32.const -1876112657)) - (i32.add (i32.const 1557433198)) - (i32.add (i32.const -510079716)) - (i32.add (i32.const -844421978)) - (i32.add (i32.const 265538399)) - (i32.add (i32.const -1190634281)) - (i32.add (i32.const -1891312320)) - (i32.add (i32.const -1621003608)) - (i32.add (i32.const 1357150164)) - (i32.add (i32.const 1149801764)) - (i32.add (i32.const 1323716729)) - (i32.add (i32.const -1459388733)) - (i32.add (i32.const 935177743)) - (i32.add (i32.const 155373866)) - (i32.add (i32.const -1162682996)) - (i32.add (i32.const -1278447319)) - (i32.add (i32.const -2029096467)) - (i32.add (i32.const -784375871)) - (i32.add (i32.const 1859190687)) - (i32.add (i32.const -1127064667)) - (i32.add (i32.const 400137700)) - (i32.add (i32.const -783962992)) - (i32.add (i32.const -1537147166)) - (i32.add (i32.const 723407187)) - (i32.add (i32.const 23843737)) - (i32.add (i32.const -1881084010)) - (i32.add (i32.const 1650989329)) - (i32.add (i32.const 1713461713)) - (i32.add (i32.const -850970281)) - (i32.add (i32.const 1217670322)) - (i32.add (i32.const -266395652)) - (i32.add (i32.const -241970528)) - (i32.add (i32.const 1179011658)) - (i32.add (i32.const 1684126067)) - (i32.add (i32.const 1427731240)) - (i32.add (i32.const 1450166463)) - (i32.add (i32.const -1098765318)) - (i32.add (i32.const -810747910)) - (i32.add (i32.const -2141864152)) - (i32.add (i32.const -504939772)) - (i32.add (i32.const 3624165)) - (i32.add (i32.const 694633320)) - (i32.add (i32.const 1045334399)) - (i32.add (i32.const 1926036716)) - (i32.add (i32.const -46374496)) - (i32.add (i32.const 2114395784)) - (i32.add (i32.const 1141089183)) - (i32.add (i32.const -1288359404)) - (i32.add (i32.const 1386235862)) - (i32.add (i32.const -1301637498)) - (i32.add (i32.const -94237515)) - (i32.add (i32.const -1654066336)) - (i32.add (i32.const 1116215843)) - (i32.add (i32.const 1968506979)) - (i32.add (i32.const -865053837)) - (i32.add (i32.const -1080314667)) - (i32.add (i32.const -852760075)) - (i32.add (i32.const 1222754839)) - (i32.add (i32.const 635772705)) - (i32.add (i32.const 901114855)) - (i32.add (i32.const 664342034)) - (i32.add (i32.const -1341292880)) - (i32.add (i32.const -643205874)) - (i32.add (i32.const -798787380)) - (i32.add (i32.const 769390502)) - (i32.add (i32.const -856093237)) - (i32.add (i32.const -2102567661)) - (i32.add (i32.const -1756248175)) - (i32.add (i32.const -1847910656)) - (i32.add (i32.const -900085166)) - (i32.add (i32.const 879243769)) - (i32.add (i32.const 1799406945)) - (i32.add (i32.const 235961038)) - (i32.add (i32.const -1044615266)) - (i32.add (i32.const -1362463866)) - (i32.add (i32.const 1201238405)) - (i32.add (i32.const -1467267900)) - (i32.add (i32.const -41001069)) - (i32.add (i32.const 1399492972)) - (i32.add (i32.const 619643320)) - (i32.add (i32.const 1854614575)) - (i32.add (i32.const -278801577)) - (i32.add (i32.const -1696211377)) - (i32.add (i32.const -1450140485)) - (i32.add (i32.const -1910131377)) - (i32.add (i32.const 1281566200)) - (i32.add (i32.const 331754644)) - (i32.add (i32.const -1631783352)) - (i32.add (i32.const 479293148)) - (i32.add (i32.const 959374909)) - (i32.add (i32.const 449549527)) - (i32.add (i32.const -1098382218)) - (i32.add (i32.const 938464890)) - (i32.add (i32.const -261681842)) - (i32.add (i32.const -1672434184)) - (i32.add (i32.const -1329236577)) - (i32.add (i32.const -1908530644)) - (i32.add (i32.const 2029386118)) - (i32.add (i32.const 1331015832)) - (i32.add (i32.const 899576271)) - (i32.add (i32.const -177466402)) - (i32.add (i32.const -1502156684)) - (i32.add (i32.const -371904627)) - (i32.add (i32.const 1991770026)) - (i32.add (i32.const 554793225)) - (i32.add (i32.const 1707770433)) - (i32.add (i32.const 1326862310)) - (i32.add (i32.const 1797358147)) - (i32.add (i32.const 703176740)) - (i32.add (i32.const -369305851)) - (i32.add (i32.const -1163605333)) - (i32.add (i32.const -577708168)) - (i32.add (i32.const 1637880985)) - (i32.add (i32.const 1929578626)) - (i32.add (i32.const -667153086)) - (i32.add (i32.const -1909018065)) - (i32.add (i32.const -248981445)) - (i32.add (i32.const -1110206576)) - (i32.add (i32.const -1769275237)) - (i32.add (i32.const 1685350276)) - (i32.add (i32.const -324339127)) - (i32.add (i32.const -760106242)) - (i32.add (i32.const 1248622243)) - (i32.add (i32.const -1412040093)) - (i32.add (i32.const 966029195)) - (i32.add (i32.const 1517134082)) - (i32.add (i32.const -315101509)) - (i32.add (i32.const -173107412)) - (i32.add (i32.const -1113012721)) - (i32.add (i32.const -1185963845)) - (i32.add (i32.const -1146390258)) - (i32.add (i32.const -571749329)) - (i32.add (i32.const 786202457)) - (i32.add (i32.const 200463594)) - (i32.add (i32.const 1743444000)) - (i32.add (i32.const 156115902)) - (i32.add (i32.const -1821493858)) - (i32.add (i32.const -1681405941)) - (i32.add (i32.const -1859250980)) - (i32.add (i32.const -211991812)) - (i32.add (i32.const 1580470080)) - (i32.add (i32.const 1502330668)) - (i32.add (i32.const 995937685)) - (i32.add (i32.const -374123677)) - (i32.add (i32.const -898395424)) - (i32.add (i32.const 1304262313)) - (i32.add (i32.const -1775871973)) - (i32.add (i32.const 665598917)) - (i32.add (i32.const -198190698)) - (i32.add (i32.const -657664653)) - (i32.add (i32.const 1830909709)) - (i32.add (i32.const 823592329)) - (i32.add (i32.const -804292144)) - (i32.add (i32.const -292015430)) - (i32.add (i32.const 642993452)) - (i32.add (i32.const 1393752653)) - (i32.add (i32.const -671010211)) - (i32.add (i32.const 1037203869)) - (i32.add (i32.const 765504580)) - (i32.add (i32.const -1220456890)) - (i32.add (i32.const 1010845613)) - (i32.add (i32.const -1256575454)) - (i32.add (i32.const 1722052494)) - (i32.add (i32.const -435303633)) - (i32.add (i32.const -1487750958)) - (i32.add (i32.const -1409169135)) - (i32.add (i32.const -494069821)) - (i32.add (i32.const 895061314)) - (i32.add (i32.const 869498555)) - (i32.add (i32.const -1428494430)) - (i32.add (i32.const -1115602156)) - (i32.add (i32.const -1831853077)) - (i32.add (i32.const 1546430444)) - (i32.add (i32.const -165970641)) - (i32.add (i32.const 120856696)) - (i32.add (i32.const 1652002785)) - (i32.add (i32.const -379585125)) - (i32.add (i32.const -210829561)) - (i32.add (i32.const -2100828637)) - (i32.add (i32.const -194776081)) - (i32.add (i32.const -1879298667)) - (i32.add (i32.const 767284482)) - (i32.add (i32.const 855208470)) - (i32.add (i32.const 1928536126)) - (i32.add (i32.const 1323973485)) - (i32.add (i32.const 696486959)) - (i32.add (i32.const 1727748015)) - (i32.add (i32.const -260809799)) - (i32.add (i32.const 368068372)) - (i32.add (i32.const 1860331721)) - (i32.add (i32.const -1124321574)) - (i32.add (i32.const 710161053)) - (i32.add (i32.const -530750992)) - (i32.add (i32.const -1497627758)) - (i32.add (i32.const 1442626517)) - (i32.add (i32.const -1539298007)) - (i32.add (i32.const -1671368471)) - (i32.add (i32.const 1459574538)) - (i32.add (i32.const -890386339)) - (i32.add (i32.const 1422558259)) - (i32.add (i32.const -67957122)) - (i32.add (i32.const -1539135970)) - (i32.add (i32.const 436851314)) - (i32.add (i32.const -1165320794)) - (i32.add (i32.const 1085187677)) - (i32.add (i32.const -1784431346)) - (i32.add (i32.const 1999439203)) - (i32.add (i32.const 1280860304)) - (i32.add (i32.const 188443150)) - (i32.add (i32.const -45661623)) - (i32.add (i32.const 1452924443)) - (i32.add (i32.const -855754836)) - (i32.add (i32.const 876562383)) - (i32.add (i32.const -1130030379)) - (i32.add (i32.const -618615334)) - (i32.add (i32.const -2047559170)) - (i32.add (i32.const 1292102987)) - (i32.add (i32.const -1615286223)) - (i32.add (i32.const 1123096034)) - (i32.add (i32.const 431939168)) - (i32.add (i32.const -813122624)) - (i32.add (i32.const -1981577021)) - (i32.add (i32.const -1501894795)) - (i32.add (i32.const -509237370)) - (i32.add (i32.const 423894194)) - (i32.add (i32.const -1086793491)) - (i32.add (i32.const 1299803332)) - (i32.add (i32.const 739759009)) - (i32.add (i32.const -641870898)) - (i32.add (i32.const -854288927)) - (i32.add (i32.const 205311067)) - (i32.add (i32.const 373560583)) - (i32.add (i32.const 1590613752)) - (i32.add (i32.const -1902449881)) - (i32.add (i32.const -1134259273)) - (i32.add (i32.const -2126924669)) - (i32.add (i32.const -1710721551)) - (i32.add (i32.const 439161517)) - (i32.add (i32.const 509933942)) - (i32.add (i32.const -1798325756)) - (i32.add (i32.const -1984480102)) - (i32.add (i32.const -1358473130)) - (i32.add (i32.const -1730727574)) - (i32.add (i32.const 272325394)) - (i32.add (i32.const -511307760)) - (i32.add (i32.const -157128951)) - (i32.add (i32.const 542324051)) - (i32.add (i32.const -811078783)) - (i32.add (i32.const 2061204656)) - (i32.add (i32.const -1193056624)) - (i32.add (i32.const -1839555079)) - (i32.add (i32.const 930078347)) - (i32.add (i32.const -1452171389)) - (i32.add (i32.const 325431750)) - (i32.add (i32.const -2109248811)) - (i32.add (i32.const -747012051)) - (i32.add (i32.const -1287483540)) - (i32.add (i32.const 790658768)) - (i32.add (i32.const 189107547)) - (i32.add (i32.const -1571527369)) - (i32.add (i32.const 120978654)) - (i32.add (i32.const 991897140)) - (i32.add (i32.const -727045783)) - (i32.add (i32.const 257555361)) - (i32.add (i32.const 1721659229)) - (i32.add (i32.const 1853880025)) - (i32.add (i32.const -1873049077)) - (i32.add (i32.const 1150529893)) - (i32.add (i32.const 1708796062)) - (i32.add (i32.const -1069553001)) - (i32.add (i32.const 683900808)) - (i32.add (i32.const -1633944182)) - (i32.add (i32.const 1368022196)) - (i32.add (i32.const -953088397)) - (i32.add (i32.const 390475647)) - (i32.add (i32.const -216839067)) - (i32.add (i32.const 1922534848)) - (i32.add (i32.const -1032916084)) - (i32.add (i32.const -602827491)) - (i32.add (i32.const 152991768)) - (i32.add (i32.const 1021423142)) - (i32.add (i32.const 349808232)) - (i32.add (i32.const -930902983)) - (i32.add (i32.const -999124940)) - (i32.add (i32.const 795668066)) - (i32.add (i32.const -955486998)) - (i32.add (i32.const -1413641993)) - (i32.add (i32.const 1912483856)) - (i32.add (i32.const 1161688938)) - (i32.add (i32.const -935706235)) - (i32.add (i32.const -216232475)) - (i32.add (i32.const -946711146)) - (i32.add (i32.const -40423652)) - (i32.add (i32.const 1535399759)) - (i32.add (i32.const 350927227)) - (i32.add (i32.const -1126345892)) - (i32.add (i32.const -846545721)) - (i32.add (i32.const 1740724607)) - (i32.add (i32.const -1266247269)) - (i32.add (i32.const 61075448)) - (i32.add (i32.const -1649131876)) - (i32.add (i32.const 1745980627)) - (i32.add (i32.const 1059750053)) - (i32.add (i32.const -2099131716)) - (i32.add (i32.const 584537050)) - (i32.add (i32.const -1065805113)) - (i32.add (i32.const -1787430757)) - (i32.add (i32.const 1838169207)) - (i32.add (i32.const 18458018)) - (i32.add (i32.const 1637995132)) - (i32.add (i32.const -1730132756)) - (i32.add (i32.const -154734050)) - (i32.add (i32.const -727339474)) - (i32.add (i32.const -580418386)) - (i32.add (i32.const 1174131054)) - (i32.add (i32.const -1685059701)) - (i32.add (i32.const 1105935646)) - (i32.add (i32.const 1954121032)) - (i32.add (i32.const 1399317385)) - (i32.add (i32.const -218108917)) - (i32.add (i32.const -871536300)) - (i32.add (i32.const 545326975)) - (i32.add (i32.const 1129688664)) - (i32.add (i32.const 22162087)) - (i32.add (i32.const -1707753991)) - (i32.add (i32.const 1992434796)) - (i32.add (i32.const -898812544)) - (i32.add (i32.const 803672067)) - (i32.add (i32.const -725425529)) - (i32.add (i32.const -1497936860)) - (i32.add (i32.const -1391355655)) - (i32.add (i32.const -1615116673)) - (i32.add (i32.const 542075471)) - (i32.add (i32.const -494832588)) - (i32.add (i32.const -1437600518)) - (i32.add (i32.const 1008830792)) - (i32.add (i32.const 1498312970)) - (i32.add (i32.const 1760348565)) - (i32.add (i32.const -794679269)) - (i32.add (i32.const -1055582070)) - (i32.add (i32.const -1583361488)) - (i32.add (i32.const 530120560)) - (i32.add (i32.const -446152363)) - (i32.add (i32.const -1223387163)) - (i32.add (i32.const -278425759)) - (i32.add (i32.const 1674187964)) - (i32.add (i32.const 1155985868)) - (i32.add (i32.const -102294645)) - (i32.add (i32.const 150175337)) - (i32.add (i32.const -1482878955)) - (i32.add (i32.const 396217888)) - (i32.add (i32.const 1163423111)) - (i32.add (i32.const 2113699258)) - (i32.add (i32.const -1862344622)) - (i32.add (i32.const 1433868715)) - (i32.add (i32.const 1584925334)) - (i32.add (i32.const 969294245)) - (i32.add (i32.const -1206335458)) - (i32.add (i32.const -2067179900)) - (i32.add (i32.const -1316458952)) - (i32.add (i32.const -1190428840)) - (i32.add (i32.const -1389711776)) - (i32.add (i32.const -1852641384)) - (i32.add (i32.const -1074959554)) - (i32.add (i32.const 260138698)) - (i32.add (i32.const -1843862952)) - (i32.add (i32.const -601347418)) - (i32.add (i32.const -2073037709)) - (i32.add (i32.const 1443345121)) - (i32.add (i32.const 347563636)) - (i32.add (i32.const -682295503)) - (i32.add (i32.const 1197833057)) - (i32.add (i32.const 1629391260)) - (i32.add (i32.const -1148456029)) - (i32.add (i32.const -1638195565)) - (i32.add (i32.const 1780747805)) - (i32.add (i32.const -633601749)) - (i32.add (i32.const -1870700149)) - (i32.add (i32.const 585979539)) - (i32.add (i32.const -1618174328)) - (i32.add (i32.const -593423309)) - (i32.add (i32.const -1739397624)) - (i32.add (i32.const -1642705877)) - (i32.add (i32.const -352456606)) - (i32.add (i32.const -1508320041)) - (i32.add (i32.const 1582587480)) - (i32.add (i32.const -1964200922)) - (i32.add (i32.const 78723519)) - (i32.add (i32.const -1607434859)) - (i32.add (i32.const -1148537885)) - (i32.add (i32.const -141404389)) - (i32.add (i32.const 1051437120)) - (i32.add (i32.const -2099308761)) - (i32.add (i32.const 676407835)) - (i32.add (i32.const 325960327)) - (i32.add (i32.const 171743182)) - (i32.add (i32.const -1472913812)) - (i32.add (i32.const 839264187)) - (i32.add (i32.const -603505668)) - (i32.add (i32.const 675011810)) - (i32.add (i32.const -1975719225)) - (i32.add (i32.const -1544755733)) - (i32.add (i32.const 604568682)) - (i32.add (i32.const 673934987)) - (i32.add (i32.const 914674901)) - (i32.add (i32.const -739366833)) - (i32.add (i32.const -748224547)) - (i32.add (i32.const 23658154)) - (i32.add (i32.const -1796264467)) - (i32.add (i32.const 1005639941)) - (i32.add (i32.const 892473601)) - (i32.add (i32.const 445307637)) - (i32.add (i32.const 887571767)) - (i32.add (i32.const 1975512119)) - (i32.add (i32.const 557711108)) - (i32.add (i32.const 92669578)) - (i32.add (i32.const 1177096098)) - (i32.add (i32.const 484900096)) - (i32.add (i32.const -1808954007)) - (i32.add (i32.const 274409742)) - (i32.add (i32.const 773398128)) - (i32.add (i32.const -8710154)) - (i32.add (i32.const -708202792)) - (i32.add (i32.const -1566552558)) - (i32.add (i32.const 1470169516)) - (i32.add (i32.const -1756231333)) - (i32.add (i32.const -729443369)) - (i32.add (i32.const -1259803191)) - (i32.add (i32.const -2122046896)) - (i32.add (i32.const -1393624004)) - (i32.add (i32.const 1298870948)) - (i32.add (i32.const -462157298)) - (i32.add (i32.const 208897398)) - (i32.add (i32.const -1085171260)) - (i32.add (i32.const 1620907740)) - (i32.add (i32.const -134620907)) - (i32.add (i32.const 1843614665)) - (i32.add (i32.const 2042921137)) - (i32.add (i32.const 693203957)) - (i32.add (i32.const 67675443)) - (i32.add (i32.const -651986726)) - (i32.add (i32.const 1500696961)) - (i32.add (i32.const -791764154)) - (i32.add (i32.const -436056419)) - (i32.add (i32.const 209613106)) - (i32.add (i32.const -1922460898)) - (i32.add (i32.const 878288559)) - (i32.add (i32.const 1138486633)) - (i32.add (i32.const -1968254743)) - (i32.add (i32.const 888465714)) - (i32.add (i32.const -1064073602)) - (i32.add (i32.const -831769871)) - (i32.add (i32.const -332764766)) - (i32.add (i32.const 540403811)) - (i32.add (i32.const 181163929)) - (i32.add (i32.const 380675054)) - (i32.add (i32.const -1836751902)) - (i32.add (i32.const -1925698447)) - (i32.add (i32.const -179987804)) - (i32.add (i32.const -2084080832)) - (i32.add (i32.const -799912724)) - (i32.add (i32.const -1654428979)) - (i32.add (i32.const 1340546241)) - (i32.add (i32.const 1293019311)) - (i32.add (i32.const -1939439599)) - (i32.add (i32.const 873683620)) - (i32.add (i32.const 62696751)) - (i32.add (i32.const -2102082560)) - (i32.add (i32.const 1639789602)) - (i32.add (i32.const -2116013062)) - (i32.add (i32.const -1517886142)) - (i32.add (i32.const 45565414)) - (i32.add (i32.const -1273505810)) - (i32.add (i32.const -225368135)) - (i32.add (i32.const 376555752)) - (i32.add (i32.const -1777830690)) - (i32.add (i32.const 1053328917)) - (i32.add (i32.const -79268145)) - (i32.add (i32.const -178549405)) - (i32.add (i32.const 1571768810)) - (i32.add (i32.const 1699369996)) - (i32.add (i32.const 297821741)) - (i32.add (i32.const -431744235)) - (i32.add (i32.const -499752037)) - (i32.add (i32.const 1782945159)) - (i32.add (i32.const -1645701840)) - (i32.add (i32.const -1274286510)) - (i32.add (i32.const 832899018)) - (i32.add (i32.const -607663118)) - (i32.add (i32.const 1164701197)) - (i32.add (i32.const 1116217823)) - (i32.add (i32.const 1080562834)) - (i32.add (i32.const -918015519)) - (i32.add (i32.const -663829564)) - (i32.add (i32.const -185867860)) - (i32.add (i32.const 1758058486)) - (i32.add (i32.const -1425699689)) - (i32.add (i32.const -440838637)) - (i32.add (i32.const -1129266822)) - (i32.add (i32.const -1026940416)) - (i32.add (i32.const -245261210)) - (i32.add (i32.const 246937623)) - (i32.add (i32.const 749249997)) - (i32.add (i32.const 437724438)) - (i32.add (i32.const 614330268)) - (i32.add (i32.const 1947758137)) - (i32.add (i32.const 848203765)) - (i32.add (i32.const -151112698)) - (i32.add (i32.const -363771364)) - (i32.add (i32.const 1996662811)) - (i32.add (i32.const 1643900111)) - (i32.add (i32.const 1994783128)) - (i32.add (i32.const 498208298)) - (i32.add (i32.const -492666996)) - (i32.add (i32.const -973683444)) - (i32.add (i32.const 1139389063)) - (i32.add (i32.const 1217310712)) - (i32.add (i32.const -1445022454)) - (i32.add (i32.const -1467616190)) - (i32.add (i32.const -1443802615)) - (i32.add (i32.const -392121242)) - (i32.add (i32.const -762891435)) - (i32.add (i32.const -828143624)) - (i32.add (i32.const 1992014447)) - (i32.add (i32.const 1528993718)) - (i32.add (i32.const -1371599922)) - (i32.add (i32.const 1665156838)) - (i32.add (i32.const -2105116529)) - (i32.add (i32.const -124597045)) - (i32.add (i32.const 638365562)) - (i32.add (i32.const -926105657)) - (i32.add (i32.const -2143102073)) - (i32.add (i32.const -387698877)) - (i32.add (i32.const 1028501869)) - (i32.add (i32.const -267212751)) - (i32.add (i32.const -251683009)) - (i32.add (i32.const -1090285583)) - (i32.add (i32.const 1513843710)) - (i32.add (i32.const -2097359504)) - (i32.add (i32.const 314277410)) - (i32.add (i32.const -525913089)) - (i32.add (i32.const -2101936914)) - (i32.add (i32.const -1735939466)) - (i32.add (i32.const 1170938294)) - (i32.add (i32.const 1978145615)) - (i32.add (i32.const 1504688343)) - (i32.add (i32.const -1191151335)) - (i32.add (i32.const 803856473)) - (i32.add (i32.const -319382125)) - (i32.add (i32.const -1970971320)) - (i32.add (i32.const -1127445305)) - (i32.add (i32.const 1281741339)) - (i32.add (i32.const 147906342)) - (i32.add (i32.const 687693972)) - (i32.add (i32.const -1233242673)) - (i32.add (i32.const 1062697303)) - (i32.add (i32.const -1899667959)) - (i32.add (i32.const -1358243493)) - (i32.add (i32.const -663845630)) - (i32.add (i32.const -1950827242)) - (i32.add (i32.const -913691669)) - (i32.add (i32.const 155926763)) - (i32.add (i32.const 7716606)) - (i32.add (i32.const 1339738916)) - (i32.add (i32.const 300822099)) - (i32.add (i32.const 2035305486)) - (i32.add (i32.const 1145796550)) - (i32.add (i32.const 2041949299)) - (i32.add (i32.const 329630223)) - (i32.add (i32.const -629325232)) - (i32.add (i32.const 942085959)) - (i32.add (i32.const -518403510)) - (i32.add (i32.const 1663298840)) - (i32.add (i32.const -993594130)) - (i32.add (i32.const -796174542)) - (i32.add (i32.const -165138075)) - (i32.add (i32.const 528581580)) - (i32.add (i32.const -544180987)) - (i32.add (i32.const 901078493)) - (i32.add (i32.const -1626511796)) - (i32.add (i32.const -1608981220)) - (i32.add (i32.const 831654878)) - (i32.add (i32.const -1798529140)) - (i32.add (i32.const -245003773)) - (i32.add (i32.const -315439617)) - (i32.add (i32.const -1698361177)) - (i32.add (i32.const 591739936)) - (i32.add (i32.const -1340616238)) - (i32.add (i32.const -2012788489)) - (i32.add (i32.const 1921087194)) - (i32.add (i32.const -1364867223)) - (i32.add (i32.const -95994226)) - (i32.add (i32.const -2099479233)) - (i32.add (i32.const -540405457)) - (i32.add (i32.const -1142499247)) - (i32.add (i32.const 592332832)) - (i32.add (i32.const 1244823705)) - (i32.add (i32.const 861176825)) - (i32.add (i32.const 900725968)) - (i32.add (i32.const 115515628)) - (i32.add (i32.const 1448838788)) - (i32.add (i32.const 535319556)) - (i32.add (i32.const -321930439)) - (i32.add (i32.const 909473254)) - (i32.add (i32.const 1790540327)) - (i32.add (i32.const -2064866648)) - (i32.add (i32.const 1751479987)) - (i32.add (i32.const 1441188334)) - (i32.add (i32.const 1590982576)) - (i32.add (i32.const -959512041)) - (i32.add (i32.const 1393730571)) - (i32.add (i32.const -1131757720)) - (i32.add (i32.const 60198818)) - (i32.add (i32.const -110075744)) - (i32.add (i32.const 1923276339)) - (i32.add (i32.const 1904687109)) - (i32.add (i32.const -2144629918)) - (i32.add (i32.const 858158772)) - (i32.add (i32.const 114440073)) - (i32.add (i32.const -378111139)) - (i32.add (i32.const 1950389902)) - (i32.add (i32.const -754530075)) - (i32.add (i32.const -1765452252)) - (i32.add (i32.const -1913529746)) - (i32.add (i32.const 1924297805)) - (i32.add (i32.const 731962511)) - (i32.add (i32.const 2121293774)) - (i32.add (i32.const -1114628194)) - (i32.add (i32.const -169883552)) - (i32.add (i32.const 157651986)) - (i32.add (i32.const -2039148903)) - (i32.add (i32.const 749049369)) - (i32.add (i32.const 396745690)) - (i32.add (i32.const 1238130401)) - (i32.add (i32.const -376850631)) - (i32.add (i32.const -943993486)) - (i32.add (i32.const -1869630650)) - (i32.add (i32.const -722378768)) - (i32.add (i32.const 90099750)) - (i32.add (i32.const -784291635)) - (i32.add (i32.const -1515999075)) - (i32.add (i32.const 43841562)) - (i32.add (i32.const -1311730327)) - (i32.add (i32.const -638367132)) - (i32.add (i32.const 898216443)) - (i32.add (i32.const 397264106)) - (i32.add (i32.const 1898757468)) - (i32.add (i32.const 1076968436)) - (i32.add (i32.const 1912827814)) - (i32.add (i32.const -953732352)) - (i32.add (i32.const 1075756980)) - (i32.add (i32.const 981565158)) - (i32.add (i32.const 1639377541)) - (i32.add (i32.const 962039384)) - (i32.add (i32.const 385979314)) - (i32.add (i32.const 414576035)) - (i32.add (i32.const 461379562)) - (i32.add (i32.const -434017899)) - (i32.add (i32.const -1174462646)) - (i32.add (i32.const -538161405)) - (i32.add (i32.const -1878683710)) - (i32.add (i32.const -685958066)) - (i32.add (i32.const -520942481)) - (i32.add (i32.const 1308630512)) - (i32.add (i32.const -1398790768)) - (i32.add (i32.const -123289560)) - (i32.add (i32.const 1667270858)) - (i32.add (i32.const 439752588)) - (i32.add (i32.const -2054582497)) - (i32.add (i32.const -985723852)) - (i32.add (i32.const -1283424262)) - (i32.add (i32.const -1600564845)) - (i32.add (i32.const 1547513657)) - (i32.add (i32.const -1504172718)) - (i32.add (i32.const 1277199406)) - (i32.add (i32.const 1711273989)) - (i32.add (i32.const -1366538353)) - (i32.add (i32.const 487740115)) - (i32.add (i32.const 572162328)) - (i32.add (i32.const 980279195)) - (i32.add (i32.const 1171688701)) - (i32.add (i32.const 547696319)) - (i32.add (i32.const -687458090)) - (i32.add (i32.const 1340234237)) - (i32.add (i32.const -812978883)) - (i32.add (i32.const 1380911987)) - (i32.add (i32.const -1354231794)) - (i32.add (i32.const -72836620)) - (i32.add (i32.const 560419135)) - (i32.add (i32.const 1514996312)) - (i32.add (i32.const -1213367712)) - (i32.add (i32.const -38171234)) - (i32.add (i32.const -157751201)) - (i32.add (i32.const 1506229185)) - (i32.add (i32.const 948269470)) - (i32.add (i32.const 780454791)) - (i32.add (i32.const -864174162)) - (i32.add (i32.const -1225044905)) - (i32.add (i32.const 95225559)) - (i32.add (i32.const 1662363697)) - (i32.add (i32.const 830038598)) - (i32.add (i32.const 466189248)) - (i32.add (i32.const -390750294)) - (i32.add (i32.const -1644499117)) - (i32.add (i32.const -1749341378)) - (i32.add (i32.const 943660143)) - (i32.add (i32.const -702910159)) - (i32.add (i32.const -845085378)) - (i32.add (i32.const 1305534851)) - (i32.add (i32.const -108671627)) - (i32.add (i32.const 1846751851)) - (i32.add (i32.const -1892866043)) - (i32.add (i32.const -1566255304)) - (i32.add (i32.const 879636118)) - (i32.add (i32.const -1507230323)) - (i32.add (i32.const -1576826402)) - (i32.add (i32.const -239375759)) - (i32.add (i32.const 1784739524)) - (i32.add (i32.const 1582716882)) - (i32.add (i32.const -2129695159)) - (i32.add (i32.const 66167272)) - (i32.add (i32.const 371868676)) - (i32.add (i32.const 1410360712)) - (i32.add (i32.const 850860496)) - (i32.add (i32.const 726923557)) - (i32.add (i32.const -1165613790)) - (i32.add (i32.const -1539664535)) - (i32.add (i32.const 1803052201)) - (i32.add (i32.const -1717905266)) - (i32.add (i32.const 493603650)) - (i32.add (i32.const 1749161732)) - (i32.add (i32.const 1097449822)) - (i32.add (i32.const -1850706745)) - (i32.add (i32.const 578570733)) - (i32.add (i32.const -1068582389)) - (i32.add (i32.const 108768404)) - (i32.add (i32.const -1851138975)) - (i32.add (i32.const 817876645)) - (i32.add (i32.const 1658584725)) - (i32.add (i32.const 1111805205)) - (i32.add (i32.const 649640412)) - (i32.add (i32.const 1518112417)) - (i32.add (i32.const 1099016545)) - (i32.add (i32.const -663438713)) - (i32.add (i32.const -1756633535)) - (i32.add (i32.const -391591841)) - (i32.add (i32.const -631901045)) - (i32.add (i32.const 1050887392)) - (i32.add (i32.const 1209926616)) - (i32.add (i32.const -355316377)) - (i32.add (i32.const 984913505)) - (i32.add (i32.const 98920195)) - (i32.add (i32.const 1534911133)) - (i32.add (i32.const 1667264916)) - (i32.add (i32.const -679478330)) - (i32.add (i32.const 420375409)) - (i32.add (i32.const 770279540)) - (i32.add (i32.const -431320497)) - (i32.add (i32.const 166865143)) - (i32.add (i32.const 760149719)) - (i32.add (i32.const 688541784)) - (i32.add (i32.const -690831717)) - (i32.add (i32.const 599024962)) - (i32.add (i32.const -1289656434)) - (i32.add (i32.const -389909306)) - (i32.add (i32.const -642227055)) - (i32.add (i32.const -1951100301)) - (i32.add (i32.const 87315556)) - (i32.add (i32.const 1211424652)) - (i32.add (i32.const -1244354206)) - (i32.add (i32.const 1051068731)) - (i32.add (i32.const 1111779403)) - (i32.add (i32.const 214002968)) - (i32.add (i32.const 263835697)) - (i32.add (i32.const 1057770864)) - (i32.add (i32.const -1542229455)) - (i32.add (i32.const -2125445470)) - (i32.add (i32.const 654223039)) - (i32.add (i32.const 1271297191)) - (i32.add (i32.const -1318557526)) - (i32.add (i32.const -935917489)) - (i32.add (i32.const 672428662)) - (i32.add (i32.const 1512533706)) - (i32.add (i32.const -1529135023)) - (i32.add (i32.const 731505405)) - (i32.add (i32.const -1748687573)) - (i32.add (i32.const 348236761)) - (i32.add (i32.const -571763650)) - (i32.add (i32.const 2140830790)) - (i32.add (i32.const -478667709)) - (i32.add (i32.const -182582880)) - (i32.add (i32.const -1689575415)) - (i32.add (i32.const -1062860567)) - (i32.add (i32.const 154663990)) - (i32.add (i32.const -1092502960)) - (i32.add (i32.const 247162999)) - (i32.add (i32.const -1435680521)) - (i32.add (i32.const -254601534)) - (i32.add (i32.const -62540775)) - (i32.add (i32.const 170811175)) - (i32.add (i32.const 186740341)) - (i32.add (i32.const -1117223046)) - (i32.add (i32.const -1839885954)) - (i32.add (i32.const -757779156)) - (i32.add (i32.const 2107737781)) - (i32.add (i32.const 1654711212)) - (i32.add (i32.const -316263523)) - (i32.add (i32.const -1579873296)) - (i32.add (i32.const -1327781666)) - (i32.add (i32.const 2003315466)) - (i32.add (i32.const -1046406433)) - (i32.add (i32.const 539032287)) - (i32.add (i32.const -1215532803)) - (i32.add (i32.const -2105182237)) - (i32.add (i32.const 1413509514)) - (i32.add (i32.const 34567195)) - (i32.add (i32.const 1784754283)) - (i32.add (i32.const -1825704237)) - (i32.add (i32.const -467757484)) - (i32.add (i32.const -1124062578)) - (i32.add (i32.const -1786303159)) - (i32.add (i32.const 1914993367)) - (i32.add (i32.const 2032384700)) - (i32.add (i32.const -120736784)) - (i32.add (i32.const -1250936145)) - (i32.add (i32.const 1598691942)) - (i32.add (i32.const 1846499794)) - (i32.add (i32.const -1110349838)) - (i32.add (i32.const -647895786)) - (i32.add (i32.const 1733165111)) - (i32.add (i32.const -432867342)) - (i32.add (i32.const 1631263577)) - (i32.add (i32.const -1700083322)) - (i32.add (i32.const -580309590)) - (i32.add (i32.const -951293574)) - (i32.add (i32.const 1916470624)) - (i32.add (i32.const -1912187851)) - (i32.add (i32.const 269380216)) - (i32.add (i32.const -1235340115)) - (i32.add (i32.const 796983409)) - (i32.add (i32.const -358476595)) - (i32.add (i32.const 1265020837)) - (i32.add (i32.const -601338682)) - (i32.add (i32.const 1371210570)) - (i32.add (i32.const -1238603946)) - (i32.add (i32.const 1961538703)) - (i32.add (i32.const 1287336064)) - (i32.add (i32.const -1682288668)) - (i32.add (i32.const -121446322)) - (i32.add (i32.const -2089447714)) - (i32.add (i32.const -1136104223)) - (i32.add (i32.const -889904262)) - (i32.add (i32.const 1181580062)) - (i32.add (i32.const -1733927606)) - (i32.add (i32.const 323143456)) - (i32.add (i32.const 1810903463)) - (i32.add (i32.const 2146091169)) - (i32.add (i32.const 1076477589)) - (i32.add (i32.const 613853222)) - (i32.add (i32.const 1569990792)) - (i32.add (i32.const -1094310939)) - (i32.add (i32.const 137461233)) - (i32.add (i32.const 293600623)) - (i32.add (i32.const -1375644298)) - (i32.add (i32.const -746683848)) - (i32.add (i32.const -1622663873)) - (i32.add (i32.const -308156382)) - (i32.add (i32.const 765614057)) - (i32.add (i32.const 738467956)) - (i32.add (i32.const -265032462)) - (i32.add (i32.const 1010846609)) - (i32.add (i32.const 1127383866)) - (i32.add (i32.const 1684405613)) - (i32.add (i32.const 105690168)) - (i32.add (i32.const 1133693748)) - (i32.add (i32.const -2021371211)) - (i32.add (i32.const 165385340)) - (i32.add (i32.const -1144789617)) - (i32.add (i32.const -928430340)) - (i32.add (i32.const 1625557458)) - (i32.add (i32.const 545790091)) - (i32.add (i32.const -1753406174)) - (i32.add (i32.const 2140986634)) - (i32.add (i32.const -1064164209)) - (i32.add (i32.const -824083761)) - (i32.add (i32.const 452672695)) - (i32.add (i32.const -170413241)) - (i32.add (i32.const 1745572850)) - (i32.add (i32.const 1619798749)) - (i32.add (i32.const -1370230775)) - (i32.add (i32.const -770572467)) - (i32.add (i32.const 1332958016)) - (i32.add (i32.const 1134048075)) - (i32.add (i32.const -1647304117)) - (i32.add (i32.const -1765990677)) - (i32.add (i32.const 1195127846)) - (i32.add (i32.const -1075346593)) - (i32.add (i32.const 551138547)) - (i32.add (i32.const 2143116712)) - (i32.add (i32.const 935817811)) - (i32.add (i32.const -132662451)) - (i32.add (i32.const 1066534907)) - (i32.add (i32.const -2001534743)) - (i32.add (i32.const 68087667)) - (i32.add (i32.const 1431689226)) - (i32.add (i32.const 807679484)) - (i32.add (i32.const -1232077502)) - (i32.add (i32.const 1818362971)) - (i32.add (i32.const -1151440086)) - (i32.add (i32.const -498289613)) - (i32.add (i32.const -1820673998)) - (i32.add (i32.const 156169374)) - (i32.add (i32.const 1977697608)) - (i32.add (i32.const -1290595540)) - (i32.add (i32.const -63936211)) - (i32.add (i32.const -562415940)) - (i32.add (i32.const 573750589)) - (i32.add (i32.const -309957822)) - (i32.add (i32.const 646736184)) - (i32.add (i32.const 170171289)) - (i32.add (i32.const -1764966852)) - (i32.add (i32.const 1933413784)) - (i32.add (i32.const -441155495)) - (i32.add (i32.const -1291947501)) - (i32.add (i32.const -1637531325)) - (i32.add (i32.const 1135472325)) - (i32.add (i32.const -1238168889)) - (i32.add (i32.const 814280309)) - (i32.add (i32.const -2062060089)) - (i32.add (i32.const 38156389)) - (i32.add (i32.const -323556870)) - (i32.add (i32.const -410191378)) - (i32.add (i32.const -612589952)) - (i32.add (i32.const -355064314)) - (i32.add (i32.const 1068648716)) - (i32.add (i32.const 1540653626)) - (i32.add (i32.const -10810645)) - (i32.add (i32.const -5849878)) - (i32.add (i32.const -1099558795)) - (i32.add (i32.const 1456669113)) - (i32.add (i32.const -2139505812)) - (i32.add (i32.const -238745798)) - (i32.add (i32.const 1601201086)) - (i32.add (i32.const -1914024890)) - (i32.add (i32.const 510085272)) - (i32.add (i32.const 445786840)) - (i32.add (i32.const -1678452457)) - (i32.add (i32.const 385368321)) - (i32.add (i32.const -1961940770)) - (i32.add (i32.const 1713329393)) - (i32.add (i32.const -1775334686)) - (i32.add (i32.const 1426683240)) - (i32.add (i32.const -2124715474)) - (i32.add (i32.const -111686824)) - (i32.add (i32.const -593691604)) - (i32.add (i32.const -400347228)) - (i32.add (i32.const -1761361448)) - (i32.add (i32.const 2040817057)) - (i32.add (i32.const 1872595100)) - (i32.add (i32.const -50081796)) - (i32.add (i32.const 913378022)) - (i32.add (i32.const -933755571)) - (i32.add (i32.const 1662862474)) - (i32.add (i32.const 667186939)) - (i32.add (i32.const -1330946439)) - (i32.add (i32.const -330104320)) - (i32.add (i32.const -1496864309)) - (i32.add (i32.const 849467320)) - (i32.add (i32.const -428585133)) - (i32.add (i32.const 1146072426)) - (i32.add (i32.const -656187411)) - (i32.add (i32.const 1024855995)) - (i32.add (i32.const -674108798)) - (i32.add (i32.const 1268089020)) - (i32.add (i32.const 1410926546)) - (i32.add (i32.const 48888208)) - (i32.add (i32.const -526795978)) - (i32.add (i32.const 807726024)) - (i32.add (i32.const 1543422587)) - (i32.add (i32.const 1829246875)) - (i32.add (i32.const 501478605)) - (i32.add (i32.const -1886180256)) - (i32.add (i32.const -709004434)) - (i32.add (i32.const -1151719495)) - (i32.add (i32.const 433372085)) - (i32.add (i32.const -1641248320)) - (i32.add (i32.const 1990314996)) - (i32.add (i32.const 907115302)) - (i32.add (i32.const 769508299)) - (i32.add (i32.const 84701418)) - (i32.add (i32.const 1330908477)) - (i32.add (i32.const -1398599757)) - (i32.add (i32.const 2076647327)) - (i32.add (i32.const -1472271991)) - (i32.add (i32.const 1024544949)) - (i32.add (i32.const -1423401322)) - (i32.add (i32.const -781293415)) - (i32.add (i32.const -1158470289)) - (i32.add (i32.const -1748010485)) - (i32.add (i32.const -1506052477)) - (i32.add (i32.const -1368893896)) - (i32.add (i32.const 1852564600)) - (i32.add (i32.const 648488531)) - (i32.add (i32.const -177671746)) - (i32.add (i32.const -675096787)) - (i32.add (i32.const -385367507)) - (i32.add (i32.const 1875330579)) - (i32.add (i32.const -1228353964)) - (i32.add (i32.const -1306136521)) - (i32.add (i32.const -2112496968)) - (i32.add (i32.const -1059516940)) - (i32.add (i32.const -1085372459)) - (i32.add (i32.const -2076403799)) - (i32.add (i32.const -1132542605)) - (i32.add (i32.const 19700230)) - (i32.add (i32.const -1203666475)) - (i32.add (i32.const 1830285575)) - (i32.add (i32.const 9108963)) - (i32.add (i32.const 378692420)) - (i32.add (i32.const 241118819)) - (i32.add (i32.const -1165717729)) - (i32.add (i32.const -867530846)) - (i32.add (i32.const -149320003)) - (i32.add (i32.const -1019403252)) - (i32.add (i32.const -1809912876)) - (i32.add (i32.const -1499536757)) - (i32.add (i32.const -957394673)) - (i32.add (i32.const -202026720)) - (i32.add (i32.const 391448243)) - (i32.add (i32.const 935375633)) - (i32.add (i32.const -1360947223)) - (i32.add (i32.const -217199354)) - (i32.add (i32.const 964473711)) - (i32.add (i32.const 1313437227)) - (i32.add (i32.const -1649688636)) - (i32.add (i32.const -989092294)) - (i32.add (i32.const 1200908944)) - (i32.add (i32.const 2007915126)) - (i32.add (i32.const -1167567365)) - (i32.add (i32.const 1836923996)) - (i32.add (i32.const -207894344)) - (i32.add (i32.const -140890304)) - (i32.add (i32.const 1719126131)) - (i32.add (i32.const -355879433)) - (i32.add (i32.const -65166005)) - (i32.add (i32.const -283794854)) - (i32.add (i32.const -1512649265)) - (i32.add (i32.const 154522504)) - (i32.add (i32.const 1111778329)) - (i32.add (i32.const 2136986469)) - (i32.add (i32.const -1830574930)) - (i32.add (i32.const 288601762)) - (i32.add (i32.const 735174462)) - (i32.add (i32.const 1615653528)) - (i32.add (i32.const 1137471211)) - (i32.add (i32.const -1902244289)) - (i32.add (i32.const -814494350)) - (i32.add (i32.const -1637181469)) - (i32.add (i32.const -1307506024)) - (i32.add (i32.const -1579445880)) - (i32.add (i32.const 38181446)) - (i32.add (i32.const 302651427)) - (i32.add (i32.const -1754250011)) - (i32.add (i32.const -1178438112)) - (i32.add (i32.const -1173934185)) - (i32.add (i32.const 1722560710)) - (i32.add (i32.const 502058530)) - (i32.add (i32.const -615528296)) - (i32.add (i32.const -1935114304)) - (i32.add (i32.const 304110895)) - (i32.add (i32.const 1030706193)) - (i32.add (i32.const -1387375576)) - (i32.add (i32.const -15893296)) - (i32.add (i32.const 718326947)) - (i32.add (i32.const -1858437516)) - (i32.add (i32.const -235892467)) - (i32.add (i32.const -1143283392)) - (i32.add (i32.const 1534899795)) - (i32.add (i32.const 144106042)) - (i32.add (i32.const 894092046)) - (i32.add (i32.const 656818885)) - (i32.add (i32.const 239056975)) - (i32.add (i32.const 1494683805)) - (i32.add (i32.const -1170894946)) - (i32.add (i32.const 1153516280)) - (i32.add (i32.const 617586524)) - (i32.add (i32.const 789693390)) - (i32.add (i32.const 981142270)) - (i32.add (i32.const 1362577833)) - (i32.add (i32.const -630251811)) - (i32.add (i32.const -54045649)) - (i32.add (i32.const -470365900)) - (i32.add (i32.const 195000406)) - (i32.add (i32.const 860146720)) - (i32.add (i32.const 1414603118)) - (i32.add (i32.const -930369256)) - (i32.add (i32.const 388887137)) - (i32.add (i32.const 1523664341)) - (i32.add (i32.const 997761304)) - (i32.add (i32.const 1184024111)) - (i32.add (i32.const -1683217103)) - (i32.add (i32.const 1095374246)) - (i32.add (i32.const 1678782769)) - (i32.add (i32.const 779924290)) - (i32.add (i32.const -955566406)) - (i32.add (i32.const 1769129866)) - (i32.add (i32.const -1665577175)) - (i32.add (i32.const 1580766592)) - (i32.add (i32.const -1017016432)) - (i32.add (i32.const 1786034765)) - (i32.add (i32.const -1820736234)) - (i32.add (i32.const -613617366)) - (i32.add (i32.const -619420194)) - (i32.add (i32.const 945007986)) - (i32.add (i32.const 1121016372)) - (i32.add (i32.const 710980325)) - (i32.add (i32.const 567811860)) - (i32.add (i32.const 58709674)) - (i32.add (i32.const -1085166892)) - (i32.add (i32.const 1588455561)) - (i32.add (i32.const 1556716638)) - (i32.add (i32.const -684434434)) - (i32.add (i32.const -1352348603)) - (i32.add (i32.const 653245250)) - (i32.add (i32.const -1790700303)) - (i32.add (i32.const 1119532479)) - (i32.add (i32.const 565751191)) - (i32.add (i32.const -2040738531)) - (i32.add (i32.const 1972932814)) - (i32.add (i32.const -1264429541)) - (i32.add (i32.const 2035603094)) - (i32.add (i32.const 1096303291)) - (i32.add (i32.const -1150448108)) - (i32.add (i32.const 306403348)) - (i32.add (i32.const 2065614994)) - (i32.add (i32.const -2092271880)) - (i32.add (i32.const -2068366595)) - (i32.add (i32.const 1312850381)) - (i32.add (i32.const -1588220511)) - (i32.add (i32.const -467581002)) - (i32.add (i32.const -2137002304)) - (i32.add (i32.const 240247983)) - (i32.add (i32.const 1943249016)) - (i32.add (i32.const 1946880375)) - (i32.add (i32.const 1187194060)) - (i32.add (i32.const 1743955163)) - (i32.add (i32.const 860130636)) - (i32.add (i32.const -50029022)) - (i32.add (i32.const -793177861)) - (i32.add (i32.const -101547343)) - (i32.add (i32.const -725483441)) - (i32.add (i32.const 1681638599)) - (i32.add (i32.const 1738731827)) - (i32.add (i32.const -1180059536)) - (i32.add (i32.const -2015158712)) - (i32.add (i32.const -76444753)) - (i32.add (i32.const -1789651659)) - (i32.add (i32.const -436716256)) - (i32.add (i32.const -1048033604)) - (i32.add (i32.const 1605071728)) - (i32.add (i32.const -1377856559)) - (i32.add (i32.const -1467475704)) - (i32.add (i32.const 583426203)) - (i32.add (i32.const 1210933744)) - (i32.add (i32.const 267347728)) - (i32.add (i32.const -1687588949)) - (i32.add (i32.const -420057445)) - (i32.add (i32.const 1177320608)) - (i32.add (i32.const -1887096454)) - (i32.add (i32.const 268672694)) - (i32.add (i32.const 1427993659)) - (i32.add (i32.const -453414505)) - (i32.add (i32.const -1857337996)) - (i32.add (i32.const 425525204)) - (i32.add (i32.const -986680571)) - (i32.add (i32.const 2134969483)) - (i32.add (i32.const -2034909729)) - (i32.add (i32.const 418177666)) - (i32.add (i32.const 945159724)) - (i32.add (i32.const 1832758056)) - (i32.add (i32.const 901628843)) - (i32.add (i32.const -273968208)) - (i32.add (i32.const -1913395071)) - (i32.add (i32.const 730268548)) - (i32.add (i32.const -1647874412)) - (i32.add (i32.const 1955047631)) - (i32.add (i32.const -421878083)) - (i32.add (i32.const 2064973555)) - (i32.add (i32.const 615375045)) - (i32.add (i32.const 1574247581)) - (i32.add (i32.const 1779957189)) - (i32.add (i32.const 147028351)) - (i32.add (i32.const 1783979348)) - (i32.add (i32.const 920526098)) - (i32.add (i32.const -2136805511)) - (i32.add (i32.const -1109321555)) - (i32.add (i32.const 763568444)) - (i32.add (i32.const 1309359599)) - (i32.add (i32.const -1076906136)) - (i32.add (i32.const -767898688)) - (i32.add (i32.const -1109717942)) - (i32.add (i32.const -552510887)) - (i32.add (i32.const -1791634140)) - (i32.add (i32.const -2013867253)) - (i32.add (i32.const -825988547)) - (i32.add (i32.const -139564695)) - (i32.add (i32.const 575795285)) - (i32.add (i32.const -263453727)) - (i32.add (i32.const -2092980900)) - (i32.add (i32.const -1510952202)) - (i32.add (i32.const -323726884)) - (i32.add (i32.const 328504198)) - (i32.add (i32.const 2079755008)) - (i32.add (i32.const 1651925751)) - (i32.add (i32.const 465482791)) - (i32.add (i32.const -775825454)) - (i32.add (i32.const -2029760129)) - (i32.add (i32.const -1340797334)) - (i32.add (i32.const -1151792721)) - (i32.add (i32.const 1457856031)) - (i32.add (i32.const 536603428)) - (i32.add (i32.const 1581054776)) - (i32.add (i32.const -2019445998)) - (i32.add (i32.const 1976024461)) - (i32.add (i32.const 380488462)) - (i32.add (i32.const -2007964877)) - (i32.add (i32.const 2033495389)) - (i32.add (i32.const -268152059)) - (i32.add (i32.const 301950612)) - (i32.add (i32.const 1342208926)) - (i32.add (i32.const 570473227)) - (i32.add (i32.const -1813806932)) - (i32.add (i32.const 272235110)) - (i32.add (i32.const -1178921107)) - (i32.add (i32.const -1699055790)) - (i32.add (i32.const 105570050)) - (i32.add (i32.const 510434245)) - (i32.add (i32.const -731847195)) - (i32.add (i32.const 522103146)) - (i32.add (i32.const -811785533)) - (i32.add (i32.const 1107338378)) - (i32.add (i32.const 2117850663)) - (i32.add (i32.const 485220998)) - (i32.add (i32.const 390052014)) - (i32.add (i32.const -344571027)) - (i32.add (i32.const 1122391769)) - (i32.add (i32.const -2005805820)) - (i32.add (i32.const 50885842)) - (i32.add (i32.const 1970668727)) - (i32.add (i32.const -351472558)) - (i32.add (i32.const -440979071)) - (i32.add (i32.const 1333368519)) - (i32.add (i32.const -171670408)) - (i32.add (i32.const 2119755237)) - (i32.add (i32.const -481929402)) - (i32.add (i32.const -941676038)) - (i32.add (i32.const -20675852)) - (i32.add (i32.const 839617136)) - (i32.add (i32.const 1428289095)) - (i32.add (i32.const 719617667)) - (i32.add (i32.const -1485261578)) - (i32.add (i32.const -1996176884)) - (i32.add (i32.const -1668964762)) - (i32.add (i32.const 1151733100)) - (i32.add (i32.const 1192804036)) - (i32.add (i32.const 987590276)) - (i32.add (i32.const -1289926077)) - (i32.add (i32.const -52928272)) - (i32.add (i32.const 128432845)) - (i32.add (i32.const -87293015)) - (i32.add (i32.const -1479445218)) - (i32.add (i32.const 1436441652)) - (i32.add (i32.const 614323904)) - (i32.add (i32.const 714122317)) - (i32.add (i32.const 520273045)) - (i32.add (i32.const 1143483400)) - (i32.add (i32.const 208056002)) - (i32.add (i32.const -1671452431)) - (i32.add (i32.const -1152198484)) - (i32.add (i32.const -445394059)) - (i32.add (i32.const -478116776)) - (i32.add (i32.const 209143553)) - (i32.add (i32.const -1487182642)) - (i32.add (i32.const -1691401198)) - (i32.add (i32.const 914845551)) - (i32.add (i32.const -1662275426)) - (i32.add (i32.const 1840582866)) - (i32.add (i32.const -2003286829)) - (i32.add (i32.const -934628689)) - (i32.add (i32.const 1731710274)) - (i32.add (i32.const -1154852426)) - (i32.add (i32.const 616945956)) - (i32.add (i32.const -1870919730)) - (i32.add (i32.const -137854014)) - (i32.add (i32.const 916864794)) - (i32.add (i32.const 1409686868)) - (i32.add (i32.const -81520369)) - (i32.add (i32.const 793856110)) - (i32.add (i32.const 2106074131)) - (i32.add (i32.const 565480414)) - (i32.add (i32.const -494694608)) - (i32.add (i32.const 2063744172)) - (i32.add (i32.const -618812482)) - (i32.add (i32.const 1381392801)) - (i32.add (i32.const -1598162379)) - (i32.add (i32.const 1252602582)) - (i32.add (i32.const -1955473874)) - (i32.add (i32.const -1798376514)) - (i32.add (i32.const -229983537)) - (i32.add (i32.const -1702049066)) - (i32.add (i32.const 422185964)) - (i32.add (i32.const 1762820886)) - (i32.add (i32.const -1153744811)) - (i32.add (i32.const -960341553)) - (i32.add (i32.const -381121388)) - (i32.add (i32.const 1183965229)) - (i32.add (i32.const 1852557621)) - (i32.add (i32.const 1154528751)) - (i32.add (i32.const 1024905802)) - (i32.add (i32.const -860597183)) - (i32.add (i32.const 1581249128)) - (i32.add (i32.const -1052897957)) - (i32.add (i32.const -1871699806)) - (i32.add (i32.const -617356922)) - (i32.add (i32.const 732837250)) - (i32.add (i32.const -2048020043)) - (i32.add (i32.const -83752782)) - (i32.add (i32.const 201816682)) - (i32.add (i32.const 791886456)) - (i32.add (i32.const -1402188476)) - (i32.add (i32.const 693701624)) - (i32.add (i32.const 1379505348)) - (i32.add (i32.const 1990083358)) - (i32.add (i32.const 500201777)) - (i32.add (i32.const -259168603)) - (i32.add (i32.const -573191945)) - (i32.add (i32.const -581609929)) - (i32.add (i32.const -234127487)) - (i32.add (i32.const -1400383592)) - (i32.add (i32.const -888690825)) - (i32.add (i32.const 588425584)) - (i32.add (i32.const 736085189)) - (i32.add (i32.const 1461665371)) - (i32.add (i32.const 1530634471)) - (i32.add (i32.const 1326385226)) - (i32.add (i32.const -591293544)) - (i32.add (i32.const -2033200307)) - (i32.add (i32.const 1304323115)) - (i32.add (i32.const 1047727688)) - (i32.add (i32.const -6625531)) - (i32.add (i32.const 24799824)) - (i32.add (i32.const 1780487730)) - (i32.add (i32.const 933556488)) - (i32.add (i32.const 239899535)) - (i32.add (i32.const 1375356153)) - (i32.add (i32.const 669025213)) - (i32.add (i32.const 504291767)) - (i32.add (i32.const -1961882937)) - (i32.add (i32.const 933761449)) - (i32.add (i32.const -1842545656)) - (i32.add (i32.const 1248122834)) - (i32.add (i32.const -1728268667)) - (i32.add (i32.const 1162960131)) - (i32.add (i32.const -2125667089)) - (i32.add (i32.const -129296637)) - (i32.add (i32.const 1715332274)) - (i32.add (i32.const 1931752640)) - (i32.add (i32.const -1644044654)) - (i32.add (i32.const -642876320)) - (i32.add (i32.const -343733450)) - (i32.add (i32.const -933978173)) - (i32.add (i32.const 399559967)) - (i32.add (i32.const 751393223)) - (i32.add (i32.const -517476283)) - (i32.add (i32.const -1515479151)) - (i32.add (i32.const 656816713)) - (i32.add (i32.const 506180215)) - (i32.add (i32.const 205777809)) - (i32.add (i32.const -639175878)) - (i32.add (i32.const 114356507)) - (i32.add (i32.const 1595890744)) - (i32.add (i32.const 193119564)) - (i32.add (i32.const 1721889625)) - (i32.add (i32.const -469309912)) - (i32.add (i32.const -1059302337)) - (i32.add (i32.const 1563712690)) - (i32.add (i32.const -140949996)) - (i32.add (i32.const -1352559137)) - (i32.add (i32.const -732416976)) - (i32.add (i32.const -529953808)) - (i32.add (i32.const 2083315049)) - (i32.add (i32.const 843112941)) - (i32.add (i32.const -1734333108)) - (i32.add (i32.const -2070587447)) - (i32.add (i32.const -1166029708)) - (i32.add (i32.const -227600655)) - (i32.add (i32.const 2028621804)) - (i32.add (i32.const -829716139)) - (i32.add (i32.const -840138429)) - (i32.add (i32.const 642587251)) - (i32.add (i32.const 1932456160)) - (i32.add (i32.const -579765728)) - (i32.add (i32.const -249598449)) - (i32.add (i32.const -1650400506)) - (i32.add (i32.const 627513367)) - (i32.add (i32.const -979735966)) - (i32.add (i32.const -97675327)) - (i32.add (i32.const 1994401970)) - (i32.add (i32.const -124893481)) - (i32.add (i32.const -1751842708)) - (i32.add (i32.const 1869068882)) - (i32.add (i32.const -2090507990)) - (i32.add (i32.const 577700269)) - (i32.add (i32.const -851519139)) - (i32.add (i32.const 1457776855)) - (i32.add (i32.const 765756696)) - (i32.add (i32.const 2038654856)) - (i32.add (i32.const -1996299321)) - (i32.add (i32.const 957074937)) - (i32.add (i32.const 2036584682)) - (i32.add (i32.const -1572624136)) - (i32.add (i32.const -1229628167)) - (i32.add (i32.const -672460213)) - (i32.add (i32.const 939482562)) - (i32.add (i32.const 2085275141)) - (i32.add (i32.const 478463978)) - (i32.add (i32.const -1720714907)) - (i32.add (i32.const -134416774)) - (i32.add (i32.const 2108693838)) - (i32.add (i32.const -755441762)) - (i32.add (i32.const -938661809)) - (i32.add (i32.const 1503348530)) - (i32.add (i32.const 449602636)) - (i32.add (i32.const 968349827)) - (i32.add (i32.const 1885648096)) - (i32.add (i32.const 903426166)) - (i32.add (i32.const -1276381148)) - (i32.add (i32.const 1850111192)) - (i32.add (i32.const 1204855721)) - (i32.add (i32.const 1312539798)) - (i32.add (i32.const 772300447)) - (i32.add (i32.const -250305037)) - (i32.add (i32.const -737698593)) - (i32.add (i32.const 2115676878)) - (i32.add (i32.const 74710478)) - (i32.add (i32.const -1284413984)) - (i32.add (i32.const 1346678340)) - (i32.add (i32.const -53021226)) - (i32.add (i32.const -675938697)) - (i32.add (i32.const 1998967712)) - (i32.add (i32.const -1716948387)) - (i32.add (i32.const 642321517)) - (i32.add (i32.const -445321412)) - (i32.add (i32.const -1328275868)) - (i32.add (i32.const 1833594961)) - (i32.add (i32.const 1698392151)) - (i32.add (i32.const 1099521418)) - (i32.add (i32.const 1219561139)) - (i32.add (i32.const 1706239558)) - (i32.add (i32.const -45636821)) - (i32.add (i32.const 764807205)) - (i32.add (i32.const 46629216)) - (i32.add (i32.const 961762327)) - (i32.add (i32.const -176107429)) - (i32.add (i32.const -1343610049)) - (i32.add (i32.const 93673870)) - (i32.add (i32.const -1588395064)) - (i32.add (i32.const 479197294)) - (i32.add (i32.const -1073632411)) - (i32.add (i32.const 1839074118)) - (i32.add (i32.const 1558404245)) - (i32.add (i32.const -1247948984)) - (i32.add (i32.const -563038909)) - (i32.add (i32.const 495600579)) - (i32.add (i32.const 2115311493)) - (i32.add (i32.const -1713994934)) - (i32.add (i32.const 1512783881)) - (i32.add (i32.const 511918778)) - (i32.add (i32.const 14881794)) - (i32.add (i32.const -1119232126)) - (i32.add (i32.const 938229658)) - (i32.add (i32.const 1704265772)) - (i32.add (i32.const -754730069)) - (i32.add (i32.const 1150613916)) - (i32.add (i32.const -467941972)) - (i32.add (i32.const -183566532)) - (i32.add (i32.const -179848711)) - (i32.add (i32.const 863614321)) - (i32.add (i32.const 444192546)) - (i32.add (i32.const -39156593)) - (i32.add (i32.const -1934559671)) - (i32.add (i32.const 421097965)) - (i32.add (i32.const -401747666)) - (i32.add (i32.const -1836059402)) - (i32.add (i32.const -1004538590)) - (i32.add (i32.const 757509267)) - (i32.add (i32.const 1911872017)) - (i32.add (i32.const 813456682)) - (i32.add (i32.const 1670550691)) - (i32.add (i32.const 811878520)) - (i32.add (i32.const -599610993)) - (i32.add (i32.const -1496045058)) - (i32.add (i32.const 1689560806)) - (i32.add (i32.const 380320567)) - (i32.add (i32.const -1455337997)) - (i32.add (i32.const 251874514)) - (i32.add (i32.const -2879587)) - (i32.add (i32.const -1719065158)) - (i32.add (i32.const 690926144)) - (i32.add (i32.const 1768823148)) - (i32.add (i32.const 2122981129)) - (i32.add (i32.const 2035636012)) - (i32.add (i32.const -223926116)) - (i32.add (i32.const -1542012165)) - (i32.add (i32.const -318694850)) - (i32.add (i32.const 718085416)) - (i32.add (i32.const -496467011)) - (i32.add (i32.const -916803534)) - (i32.add (i32.const -1929309981)) - (i32.add (i32.const -1325681187)) - (i32.add (i32.const 98504998)) - (i32.add (i32.const 1921313569)) - (i32.add (i32.const -743192901)) - (i32.add (i32.const 413829639)) - (i32.add (i32.const -491519967)) - (i32.add (i32.const -64100946)) - (i32.add (i32.const 710544673)) - (i32.add (i32.const 770529902)) - (i32.add (i32.const 238664172)) - (i32.add (i32.const -1974459743)) - (i32.add (i32.const -480581677)) - (i32.add (i32.const 1033694359)) - (i32.add (i32.const 2114484551)) - (i32.add (i32.const -1458442588)) - (i32.add (i32.const 1912364572)) - (i32.add (i32.const -562150549)) - (i32.add (i32.const 1097280434)) - (i32.add (i32.const -562251843)) - (i32.add (i32.const -1047070517)) - (i32.add (i32.const 1134990824)) - (i32.add (i32.const -186573492)) - (i32.add (i32.const -883567933)) - (i32.add (i32.const 1266025797)) - (i32.add (i32.const 854662579)) - (i32.add (i32.const -87907691)) - (i32.add (i32.const -1397766601)) - (i32.add (i32.const -1317481212)) - (i32.add (i32.const 1256457706)) - (i32.add (i32.const 488302431)) - (i32.add (i32.const -530702380)) - (i32.add (i32.const -1451229242)) - (i32.add (i32.const 984323623)) - (i32.add (i32.const 1772650)) - (i32.add (i32.const 516093650)) - (i32.add (i32.const 25198771)) - (i32.add (i32.const -254742038)) - (i32.add (i32.const -1911911685)) - (i32.add (i32.const 100962704)) - (i32.add (i32.const -1729972263)) - (i32.add (i32.const -676446887)) - (i32.add (i32.const -297406834)) - (i32.add (i32.const -1809940696)) - (i32.add (i32.const -1048623782)) - (i32.add (i32.const 725065978)) - (i32.add (i32.const 437300611)) - (i32.add (i32.const -2084353441)) - (i32.add (i32.const 398903918)) - (i32.add (i32.const -2010456351)) - (i32.add (i32.const 1739767379)) - (i32.add (i32.const 2138601291)) - (i32.add (i32.const -167531853)) - (i32.add (i32.const -1506853578)) - (i32.add (i32.const -1435102915)) - (i32.add (i32.const -593836086)) - (i32.add (i32.const -1728445321)) - (i32.add (i32.const -1444150228)) - (i32.add (i32.const 1529346730)) - (i32.add (i32.const 987113839)) - (i32.add (i32.const 1935714700)) - (i32.add (i32.const 135229151)) - (i32.add (i32.const 62212446)) - (i32.add (i32.const -2055152188)) - (i32.add (i32.const 1856877032)) - (i32.add (i32.const 1946559846)) - (i32.add (i32.const -1745711743)) - (i32.add (i32.const -1897655530)) - (i32.add (i32.const -2014365698)) - (i32.add (i32.const -190463586)) - (i32.add (i32.const 58053470)) - (i32.add (i32.const 173128185)) - (i32.add (i32.const 12517861)) - (i32.add (i32.const -2089048812)) - (i32.add (i32.const -2092235137)) - (i32.add (i32.const 383621237)) - (i32.add (i32.const 1886259169)) - (i32.add (i32.const -1667350348)) - (i32.add (i32.const -366869145)) - (i32.add (i32.const 181517728)) - (i32.add (i32.const -2031731692)) - (i32.add (i32.const -785966945)) - (i32.add (i32.const 858227570)) - (i32.add (i32.const -491081001)) - (i32.add (i32.const -2101656776)) - (i32.add (i32.const -215259440)) - (i32.add (i32.const 686400509)) - (i32.add (i32.const 2051484602)) - (i32.add (i32.const -819943301)) - (i32.add (i32.const -638672294)) - (i32.add (i32.const 245672071)) - (i32.add (i32.const -484730583)) - (i32.add (i32.const -1581692804)) - (i32.add (i32.const -120415849)) - (i32.add (i32.const 1995669524)) - (i32.add (i32.const 1906604414)) - (i32.add (i32.const 1822993695)) - (i32.add (i32.const -1756844205)) - (i32.add (i32.const -862461807)) - (i32.add (i32.const 823339417)) - (i32.add (i32.const 1347833075)) - (i32.add (i32.const -1955515587)) - (i32.add (i32.const -1233861076)) - (i32.add (i32.const -860880966)) - (i32.add (i32.const 1599408827)) - (i32.add (i32.const 322059476)) - (i32.add (i32.const 1019468706)) - (i32.add (i32.const 667425808)) - (i32.add (i32.const 707730346)) - (i32.add (i32.const -1811833919)) - (i32.add (i32.const 1721491990)) - (i32.add (i32.const -1569766001)) - (i32.add (i32.const -746798690)) - (i32.add (i32.const 849255091)) - (i32.add (i32.const 946624374)) - (i32.add (i32.const -1895420697)) - (i32.add (i32.const 1674443211)) - (i32.add (i32.const -1791748071)) - (i32.add (i32.const -18806768)) - (i32.add (i32.const -1171293342)) - (i32.add (i32.const -1529157441)) - (i32.add (i32.const 510243940)) - (i32.add (i32.const -2098337403)) - (i32.add (i32.const -709137452)) - (i32.add (i32.const -975672106)) - (i32.add (i32.const -841100920)) - (i32.add (i32.const -1902913358)) - (i32.add (i32.const 322150240)) - (i32.add (i32.const 1683260890)) - (i32.add (i32.const 2060125852)) - (i32.add (i32.const -2037430925)) - (i32.add (i32.const 247385999)) - (i32.add (i32.const -1171384897)) - (i32.add (i32.const 442706290)) - (i32.add (i32.const 2100057504)) - (i32.add (i32.const -595807760)) - (i32.add (i32.const -711883263)) - (i32.add (i32.const -1170302003)) - (i32.add (i32.const -1217459137)) - (i32.add (i32.const 995822127)) - (i32.add (i32.const -254007707)) - (i32.add (i32.const -1694162420)) - (i32.add (i32.const -977748576)) - (i32.add (i32.const -2089864593)) - (i32.add (i32.const 1610537169)) - (i32.add (i32.const 733485891)) - (i32.add (i32.const -447332172)) - (i32.add (i32.const 1453346082)) - (i32.add (i32.const 1486360038)) - (i32.add (i32.const 317581181)) - (i32.add (i32.const 101838368)) - (i32.add (i32.const -157865855)) - (i32.add (i32.const 1015262272)) - (i32.add (i32.const -2078250790)) - (i32.add (i32.const -971263151)) - (i32.add (i32.const -260563845)) - (i32.add (i32.const -1530913919)) - (i32.add (i32.const -1311903302)) - (i32.add (i32.const 436555150)) - (i32.add (i32.const -1749639349)) - (i32.add (i32.const 96171757)) - (i32.add (i32.const -1974175654)) - (i32.add (i32.const -610470045)) - (i32.add (i32.const -1098144754)) - (i32.add (i32.const -59891434)) - (i32.add (i32.const 189155007)) - (i32.add (i32.const 1569314809)) - (i32.add (i32.const -1257936136)) - (i32.add (i32.const 477207962)) - (i32.add (i32.const 2019958034)) - (i32.add (i32.const 982900811)) - (i32.add (i32.const -934096728)) - (i32.add (i32.const -454931540)) - (i32.add (i32.const -872604144)) - (i32.add (i32.const -1453399261)) - (i32.add (i32.const 1079400544)) - (i32.add (i32.const 1440039820)) - (i32.add (i32.const 411748793)) - (i32.add (i32.const -1601224505)) - (i32.add (i32.const -629793673)) - (i32.add (i32.const 336867769)) - (i32.add (i32.const -1520608240)) - (i32.add (i32.const -1299201214)) - (i32.add (i32.const -461510184)) - (i32.add (i32.const -489196935)) - (i32.add (i32.const -799961907)) - (i32.add (i32.const -987306072)) - (i32.add (i32.const 1917778222)) - (i32.add (i32.const 1726111320)) - (i32.add (i32.const -490019281)) - (i32.add (i32.const -1568122607)) - (i32.add (i32.const -1197926755)) - (i32.add (i32.const -899775446)) - (i32.add (i32.const -1208972805)) - (i32.add (i32.const 118861021)) - (i32.add (i32.const 987551778)) - (i32.add (i32.const -1969228944)) - (i32.add (i32.const -122348122)) - (i32.add (i32.const -810040595)) - (i32.add (i32.const -820990769)) - (i32.add (i32.const 103429061)) - (i32.add (i32.const -206721603)) - (i32.add (i32.const 1733026075)) - (i32.add (i32.const 666827278)) - (i32.add (i32.const 153892482)) - (i32.add (i32.const -2124459993)) - (i32.add (i32.const -1983077914)) - (i32.add (i32.const 1216602625)) - (i32.add (i32.const -2075885084)) - (i32.add (i32.const -1341417524)) - (i32.add (i32.const 47913677)) - (i32.add (i32.const 1485170592)) - (i32.add (i32.const 1099342492)) - (i32.add (i32.const -1711772989)) - (i32.add (i32.const 597587448)) - (i32.add (i32.const 1083001850)) - (i32.add (i32.const 566806483)) - (i32.add (i32.const -617557923)) - (i32.add (i32.const -1554614464)) - (i32.add (i32.const 2119386729)) - (i32.add (i32.const 77823514)) - (i32.add (i32.const -500867797)) - (i32.add (i32.const -1680620417)) - (i32.add (i32.const 1368752785)) - (i32.add (i32.const -808890652)) - (i32.add (i32.const -1563007953)) - (i32.add (i32.const 468181360)) - (i32.add (i32.const 66826466)) - (i32.add (i32.const 1630707743)) - (i32.add (i32.const -2094222159)) - (i32.add (i32.const 741320153)) - (i32.add (i32.const -2064037890)) - (i32.add (i32.const 259844849)) - (i32.add (i32.const -422868372)) - (i32.add (i32.const 1538784077)) - (i32.add (i32.const 1040736004)) - (i32.add (i32.const 1612940663)) - (i32.add (i32.const -196270821)) - (i32.add (i32.const 49164345)) - (i32.add (i32.const 1460426249)) - (i32.add (i32.const 1254386625)) - (i32.add (i32.const 1598133201)) - (i32.add (i32.const -1722578313)) - (i32.add (i32.const 435001913)) - (i32.add (i32.const -1787421456)) - (i32.add (i32.const 1493237082)) - (i32.add (i32.const -1673520701)) - (i32.add (i32.const 2021177041)) - (i32.add (i32.const 1323422225)) - (i32.add (i32.const -586424375)) - (i32.add (i32.const -1879807503)) - (i32.add (i32.const 1031962863)) - (i32.add (i32.const 1788870615)) - (i32.add (i32.const 692416855)) - (i32.add (i32.const 2033626915)) - (i32.add (i32.const 7333569)) - (i32.add (i32.const 1936728314)) - (i32.add (i32.const -439277198)) - (i32.add (i32.const 202750507)) - (i32.add (i32.const -995096268)) - (i32.add (i32.const -1407764448)) - (i32.add (i32.const 734011025)) - (i32.add (i32.const -919050789)) - (i32.add (i32.const -24557182)) - (i32.add (i32.const -1515726032)) - (i32.add (i32.const 141807025)) - (i32.add (i32.const 765441810)) - (i32.add (i32.const 453811410)) - (i32.add (i32.const -1371038082)) - (i32.add (i32.const 51212460)) - (i32.add (i32.const 1489615977)) - (i32.add (i32.const -2134474211)) - (i32.add (i32.const 1006166636)) - (i32.add (i32.const -2139498152)) - (i32.add (i32.const -685815992)) - (i32.add (i32.const -1819353722)) - (i32.add (i32.const 431609918)) - (i32.add (i32.const 1554797154)) - (i32.add (i32.const 710127343)) - (i32.add (i32.const 903250620)) - (i32.add (i32.const -682464710)) - (i32.add (i32.const -865108509)) - (i32.add (i32.const 1251639716)) - (i32.add (i32.const 89773220)) - (i32.add (i32.const -82343372)) - (i32.add (i32.const -1372134135)) - (i32.add (i32.const 1315059744)) - (i32.add (i32.const 2015236489)) - (i32.add (i32.const 1456125001)) - (i32.add (i32.const 1860978840)) - (i32.add (i32.const -1217209323)) - (i32.add (i32.const -786803491)) - (i32.add (i32.const -613296864)) - (i32.add (i32.const 1952957147)) - (i32.add (i32.const -1769620536)) - (i32.add (i32.const 2009913470)) - (i32.add (i32.const 612162806)) - (i32.add (i32.const 662287416)) - (i32.add (i32.const -376298746)) - (i32.add (i32.const -1070858498)) - (i32.add (i32.const -517605180)) - (i32.add (i32.const -1052261532)) - (i32.add (i32.const -1586669442)) - (i32.add (i32.const -248708171)) - (i32.add (i32.const -1833764989)) - (i32.add (i32.const -1703679423)) - (i32.add (i32.const -1764815028)) - (i32.add (i32.const 444227313)) - (i32.add (i32.const 1832404047)) - (i32.add (i32.const 657308102)) - (i32.add (i32.const -229232778)) - (i32.add (i32.const -873908465)) - (i32.add (i32.const -243239952)) - (i32.add (i32.const 888174613)) - (i32.add (i32.const 1479696289)) - (i32.add (i32.const 1199755086)) - (i32.add (i32.const -250189764)) - (i32.add (i32.const 1699138068)) - (i32.add (i32.const -612903904)) - (i32.add (i32.const -1069617896)) - (i32.add (i32.const 914378873)) - (i32.add (i32.const 974449059)) - (i32.add (i32.const -2095659763)) - (i32.add (i32.const -1249647111)) - (i32.add (i32.const -2046414607)) - (i32.add (i32.const 260397700)) - (i32.add (i32.const 1630853613)) - (i32.add (i32.const -586545887)) - (i32.add (i32.const 2045411231)) - (i32.add (i32.const 998929387)) - (i32.add (i32.const -816217412)) - (i32.add (i32.const 2031995804)) - (i32.add (i32.const 9717149)) - (i32.add (i32.const -1987156940)) - (i32.add (i32.const -892256592)) - (i32.add (i32.const -494800857)) - (i32.add (i32.const 1338491708)) - (i32.add (i32.const 1795424831)) - (i32.add (i32.const -512363703)) - (i32.add (i32.const 1338610565)) - (i32.add (i32.const 944192201)) - (i32.add (i32.const 1119453788)) - (i32.add (i32.const 1701731864)) - (i32.add (i32.const 1834305533)) - (i32.add (i32.const 241118094)) - (i32.add (i32.const 352976736)) - (i32.add (i32.const -1915034476)) - (i32.add (i32.const 1529258645)) - (i32.add (i32.const -198213093)) - (i32.add (i32.const -1342580692)) - (i32.add (i32.const -570777229)) - (i32.add (i32.const -3353644)) - (i32.add (i32.const 927389197)) - (i32.add (i32.const -400748046)) - (i32.add (i32.const 796970014)) - (i32.add (i32.const 1036685502)) - (i32.add (i32.const -851394802)) - (i32.add (i32.const -612545906)) - (i32.add (i32.const 648022080)) - (i32.add (i32.const 5286660)) - (i32.add (i32.const 1505150670)) - (i32.add (i32.const -1562302681)) - (i32.add (i32.const 193065519)) - (i32.add (i32.const 1838819445)) - (i32.add (i32.const -2078365300)) - (i32.add (i32.const -1558448281)) - (i32.add (i32.const -1729207354)) - (i32.add (i32.const -420825598)) - (i32.add (i32.const 1042934547)) - (i32.add (i32.const -321259556)) - (i32.add (i32.const 1688732541)) - (i32.add (i32.const -1522846386)) - (i32.add (i32.const 1517989923)) - (i32.add (i32.const 565185722)) - (i32.add (i32.const 1681338973)) - (i32.add (i32.const 1235517383)) - (i32.add (i32.const -501516622)) - (i32.add (i32.const 16514368)) - (i32.add (i32.const 1911141426)) - (i32.add (i32.const 1540011970)) - (i32.add (i32.const -565005694)) - (i32.add (i32.const 877722904)) - (i32.add (i32.const -745198913)) - (i32.add (i32.const -216627032)) - (i32.add (i32.const -1489653237)) - (i32.add (i32.const -736625571)) - (i32.add (i32.const 1656218739)) - (i32.add (i32.const 1381547063)) - (i32.add (i32.const -1452227873)) - (i32.add (i32.const 1468842721)) - (i32.add (i32.const 418306803)) - (i32.add (i32.const 1703561077)) - (i32.add (i32.const 1236317845)) - (i32.add (i32.const 1088329070)) - (i32.add (i32.const -679587660)) - (i32.add (i32.const -832786614)) - (i32.add (i32.const -1858291620)) - (i32.add (i32.const 892448741)) - (i32.add (i32.const -954958113)) - (i32.add (i32.const -45415533)) - (i32.add (i32.const -1812263725)) - (i32.add (i32.const -2003642880)) - (i32.add (i32.const -351408029)) - (i32.add (i32.const -1383084147)) - (i32.add (i32.const 2114471103)) - (i32.add (i32.const 1860009517)) - (i32.add (i32.const 340624506)) - (i32.add (i32.const 413603763)) - (i32.add (i32.const 1647074776)) - (i32.add (i32.const -381051471)) - (i32.add (i32.const -1628926055)) - (i32.add (i32.const 1221023846)) - (i32.add (i32.const -101246820)) - (i32.add (i32.const 1739653294)) - (i32.add (i32.const 1523346673)) - (i32.add (i32.const 1692606599)) - (i32.add (i32.const 1108648643)) - (i32.add (i32.const 1276726150)) - (i32.add (i32.const 1437659043)) - (i32.add (i32.const -1755023982)) - (i32.add (i32.const -460618067)) - (i32.add (i32.const -1354271614)) - (i32.add (i32.const -298062651)) - (i32.add (i32.const -292763342)) - (i32.add (i32.const -1166595542)) - (i32.add (i32.const 1376620247)) - (i32.add (i32.const 262890535)) - (i32.add (i32.const -861941067)) - (i32.add (i32.const -1569026323)) - (i32.add (i32.const -1478648294)) - (i32.add (i32.const -998896283)) - (i32.add (i32.const -2014673150)) - (i32.add (i32.const 1677596258)) - (i32.add (i32.const 892835536)) - (i32.add (i32.const 1388055104)) - (i32.add (i32.const 326931354)) - (i32.add (i32.const -1946416353)) - (i32.add (i32.const -637227675)) - (i32.add (i32.const -2075836548)) - (i32.add (i32.const 1136668447)) - (i32.add (i32.const 1562833275)) - (i32.add (i32.const -381963860)) - (i32.add (i32.const 568643329)) - (i32.add (i32.const 574897121)) - (i32.add (i32.const 270557375)) - (i32.add (i32.const 1255559861)) - (i32.add (i32.const -1051039236)) - (i32.add (i32.const -1419423909)) - (i32.add (i32.const -1370545223)) - (i32.add (i32.const -443178350)) - (i32.add (i32.const -569026509)) - (i32.add (i32.const -1155519596)) - (i32.add (i32.const -147967956)) - (i32.add (i32.const -2091310663)) - (i32.add (i32.const 161739787)) - (i32.add (i32.const -970165045)) - (i32.add (i32.const -1531654093)) - (i32.add (i32.const -1929282510)) - (i32.add (i32.const -1787058598)) - (i32.add (i32.const -737081079)) - (i32.add (i32.const 982503085)) - (i32.add (i32.const -1909697559)) - (i32.add (i32.const 761379891)) - (i32.add (i32.const -2064743498)) - (i32.add (i32.const 1291656003)) - (i32.add (i32.const -2032734397)) - (i32.add (i32.const -855729299)) - (i32.add (i32.const -778036168)) - (i32.add (i32.const 962648291)) - (i32.add (i32.const -184751451)) - (i32.add (i32.const -707090534)) - (i32.add (i32.const 881397047)) - (i32.add (i32.const -206553020)) - (i32.add (i32.const 1469499878)) - (i32.add (i32.const -61993040)) - (i32.add (i32.const 1721295008)) - (i32.add (i32.const 283017601)) - (i32.add (i32.const -1410250097)) - (i32.add (i32.const 1904006157)) - (i32.add (i32.const -1219674787)) - (i32.add (i32.const 1477955327)) - (i32.add (i32.const 659465109)) - (i32.add (i32.const -1358559712)) - (i32.add (i32.const -1243842968)) - (i32.add (i32.const 820435272)) - (i32.add (i32.const -254856915)) - (i32.add (i32.const -73983647)) - (i32.add (i32.const 1251961060)) - (i32.add (i32.const 1495022002)) - (i32.add (i32.const -759544476)) - (i32.add (i32.const -2018734876)) - (i32.add (i32.const -1817736284)) - (i32.add (i32.const 928653708)) - (i32.add (i32.const -749877649)) - (i32.add (i32.const -1461222093)) - (i32.add (i32.const 1071982755)) - (i32.add (i32.const -2013753212)) - (i32.add (i32.const -2059296397)) - (i32.add (i32.const 1696906356)) - (i32.add (i32.const -1689960229)) - (i32.add (i32.const 1237314746)) - (i32.add (i32.const -1079834465)) - (i32.add (i32.const -1586163914)) - (i32.add (i32.const 1032509830)) - (i32.add (i32.const -1454294079)) - (i32.add (i32.const 2112701834)) - (i32.add (i32.const -1320610990)) - (i32.add (i32.const 517523480)) - (i32.add (i32.const -250915543)) - (i32.add (i32.const -1966729692)) - (i32.add (i32.const -568601132)) - (i32.add (i32.const -494561465)) - (i32.add (i32.const 858358074)) - (i32.add (i32.const -1977886270)) - (i32.add (i32.const 625689163)) - (i32.add (i32.const -1703653690)) - (i32.add (i32.const 1120743727)) - (i32.add (i32.const 542248885)) - (i32.add (i32.const -628220161)) - (i32.add (i32.const 1152975923)) - (i32.add (i32.const -335141489)) - (i32.add (i32.const 2058284680)) - (i32.add (i32.const -1903951596)) - (i32.add (i32.const -969893177)) - (i32.add (i32.const -567037178)) - (i32.add (i32.const 2105329942)) - (i32.add (i32.const -410921931)) - (i32.add (i32.const 1984180722)) - (i32.add (i32.const 800134892)) - (i32.add (i32.const -443449790)) - (i32.add (i32.const 1154350307)) - (i32.add (i32.const 421455983)) - (i32.add (i32.const -493139893)) - (i32.add (i32.const -2057505766)) - (i32.add (i32.const -785164851)) - (i32.add (i32.const -1659400584)) - (i32.add (i32.const 938678632)) - (i32.add (i32.const 2133831833)) - (i32.add (i32.const 1925450674)) - (i32.add (i32.const -1706253716)) - (i32.add (i32.const -941759981)) - (i32.add (i32.const -661682622)) - (i32.add (i32.const 518610185)) - (i32.add (i32.const 333246145)) - (i32.add (i32.const -265297411)) - (i32.add (i32.const -1564968689)) - (i32.add (i32.const 1676879018)) - (i32.add (i32.const -194711813)) - (i32.add (i32.const -1498938039)) - (i32.add (i32.const -1678788476)) - (i32.add (i32.const 301496871)) - (i32.add (i32.const -190030488)) - (i32.add (i32.const 1771821960)) - (i32.add (i32.const -1606540451)) - (i32.add (i32.const -2138221983)) - (i32.add (i32.const -845717335)) - (i32.add (i32.const 1898245942)) - (i32.add (i32.const -1658070149)) - (i32.add (i32.const -837480466)) - (i32.add (i32.const 1358481743)) - (i32.add (i32.const -1055353922)) - (i32.add (i32.const 1216440722)) - (i32.add (i32.const -433247116)) - (i32.add (i32.const 1036343974)) - (i32.add (i32.const -820520205)) - (i32.add (i32.const 1260233987)) - (i32.add (i32.const -2026475448)) - (i32.add (i32.const -2103420216)) - (i32.add (i32.const -1356683973)) - (i32.add (i32.const -200319766)) - (i32.add (i32.const 426746541)) - (i32.add (i32.const 554368275)) - (i32.add (i32.const -1222338246)) - (i32.add (i32.const 1103144121)) - (i32.add (i32.const 126026522)) - (i32.add (i32.const -1119281420)) - (i32.add (i32.const -311122653)) - (i32.add (i32.const 1851827264)) - (i32.add (i32.const -1319577846)) - (i32.add (i32.const 121236951)) - (i32.add (i32.const -554327200)) - (i32.add (i32.const 632051614)) - (i32.add (i32.const 744462821)) - (i32.add (i32.const -550520526)) - (i32.add (i32.const 1008802471)) - (i32.add (i32.const -1854687265)) - (i32.add (i32.const -1139496752)) - (i32.add (i32.const 43614283)) - (i32.add (i32.const -1329935052)) - (i32.add (i32.const -1558162934)) - (i32.add (i32.const 1474018999)) - (i32.add (i32.const -452816233)) - (i32.add (i32.const -1593247994)) - (i32.add (i32.const 327418221)) - (i32.add (i32.const 807224604)) - (i32.add (i32.const 825464964)) - (i32.add (i32.const 281755887)) - (i32.add (i32.const 1279007053)) - (i32.add (i32.const 954142610)) - (i32.add (i32.const 544453143)) - (i32.add (i32.const -1720306624)) - (i32.add (i32.const -368433827)) - (i32.add (i32.const 2139649939)) - (i32.add (i32.const -2145796907)) - (i32.add (i32.const -37666653)) - (i32.add (i32.const -133969815)) - (i32.add (i32.const -150400835)) - (i32.add (i32.const -180900779)) - (i32.add (i32.const -782118486)) - (i32.add (i32.const 275756823)) - (i32.add (i32.const -605812034)) - (i32.add (i32.const -371869461)) - (i32.add (i32.const -100424385)) - (i32.add (i32.const 1468469156)) - (i32.add (i32.const -1897507562)) - (i32.add (i32.const 890190983)) - (i32.add (i32.const 2040619148)) - (i32.add (i32.const -1074418614)) - (i32.add (i32.const -1436003731)) - (i32.add (i32.const 696044524)) - (i32.add (i32.const -64842112)) - (i32.add (i32.const 1647125212)) - (i32.add (i32.const 1739476824)) - (i32.add (i32.const 1112571622)) - (i32.add (i32.const 660970047)) - (i32.add (i32.const -141174749)) - (i32.add (i32.const -1533234935)) - (i32.add (i32.const 1505011397)) - (i32.add (i32.const -1662910736)) - (i32.add (i32.const 1346177079)) - (i32.add (i32.const -775053522)) - (i32.add (i32.const 15257874)) - (i32.add (i32.const -1976259327)) - (i32.add (i32.const 519508846)) - (i32.add (i32.const -211306540)) - (i32.add (i32.const 252952201)) - (i32.add (i32.const 207069969)) - (i32.add (i32.const -2035665200)) - (i32.add (i32.const 1550355763)) - (i32.add (i32.const -2077391451)) - (i32.add (i32.const -1585483819)) - (i32.add (i32.const -946418843)) - (i32.add (i32.const 226708221)) - (i32.add (i32.const -2050781218)) - (i32.add (i32.const 948510856)) - (i32.add (i32.const -1219750172)) - (i32.add (i32.const 3056415)) - (i32.add (i32.const 1975570821)) - (i32.add (i32.const -1531273541)) - (i32.add (i32.const -1852123384)) - (i32.add (i32.const -2006328669)) - (i32.add (i32.const -276995196)) - (i32.add (i32.const -794930199)) - (i32.add (i32.const 1647998428)) - (i32.add (i32.const -2137913440)) - (i32.add (i32.const 721683163)) - (i32.add (i32.const -1548654287)) - (i32.add (i32.const 1297130545)) - (i32.add (i32.const 763210778)) - (i32.add (i32.const -52781471)) - (i32.add (i32.const 2100390535)) - (i32.add (i32.const -928474765)) - (i32.add (i32.const 830415104)) - (i32.add (i32.const 1506445693)) - (i32.add (i32.const 25346197)) - (i32.add (i32.const 499260948)) - (i32.add (i32.const -1904493276)) - (i32.add (i32.const -29133848)) - (i32.add (i32.const -1194246838)) - (i32.add (i32.const -1818926308)) - (i32.add (i32.const 422595604)) - (i32.add (i32.const 1413659294)) - (i32.add (i32.const 1038293811)) - (i32.add (i32.const -401601674)) - (i32.add (i32.const 749735101)) - (i32.add (i32.const -1200075696)) - (i32.add (i32.const -1752661303)) - (i32.add (i32.const -1761006443)) - (i32.add (i32.const 1234386247)) - (i32.add (i32.const 282393336)) - (i32.add (i32.const -726071595)) - (i32.add (i32.const -1226110906)) - (i32.add (i32.const 966378089)) - (i32.add (i32.const 1620882329)) - (i32.add (i32.const -550327725)) - (i32.add (i32.const 1934059783)) - (i32.add (i32.const -1345218871)) - (i32.add (i32.const -527415143)) - (i32.add (i32.const -1111927483)) - (i32.add (i32.const -1278853424)) - (i32.add (i32.const 291758128)) - (i32.add (i32.const 1732026716)) - (i32.add (i32.const -1754016276)) - (i32.add (i32.const -1230657445)) - (i32.add (i32.const 1153977832)) - (i32.add (i32.const 1446972721)) - (i32.add (i32.const -997814564)) - (i32.add (i32.const 494609280)) - (i32.add (i32.const 1203477526)) - (i32.add (i32.const 436454966)) - (i32.add (i32.const -705348218)) - (i32.add (i32.const 1926371048)) - (i32.add (i32.const 1725424738)) - (i32.add (i32.const 1236668713)) - (i32.add (i32.const -359950404)) - (i32.add (i32.const -1453251901)) - (i32.add (i32.const -500682796)) - (i32.add (i32.const 1934465596)) - (i32.add (i32.const -674780240)) - (i32.add (i32.const 37928841)) - (i32.add (i32.const -1877864071)) - (i32.add (i32.const -327718560)) - (i32.add (i32.const -2068490252)) - (i32.add (i32.const 151971682)) - (i32.add (i32.const 419686708)) - (i32.add (i32.const -464087923)) - (i32.add (i32.const -1939226325)) - (i32.add (i32.const -1901551528)) - (i32.add (i32.const -1642493265)) - (i32.add (i32.const -900268162)) - (i32.add (i32.const 829522693)) - (i32.add (i32.const -428784244)) - (i32.add (i32.const 1965744105)) - (i32.add (i32.const -1087177226)) - (i32.add (i32.const -625168356)) - (i32.add (i32.const -899880410)) - (i32.add (i32.const 933990175)) - (i32.add (i32.const -70296980)) - (i32.add (i32.const -1644751366)) - (i32.add (i32.const 125528903)) - (i32.add (i32.const 2068858145)) - (i32.add (i32.const -1987892399)) - (i32.add (i32.const -431595634)) - (i32.add (i32.const 65803249)) - (i32.add (i32.const 858575118)) - (i32.add (i32.const 921910148)) - (i32.add (i32.const 55764983)) - (i32.add (i32.const 2083163582)) - (i32.add (i32.const -2072425361)) - (i32.add (i32.const 286081605)) - (i32.add (i32.const -951727285)) - (i32.add (i32.const 1698194958)) - (i32.add (i32.const 979401722)) - (i32.add (i32.const -186042614)) - (i32.add (i32.const 137807048)) - (i32.add (i32.const 1150807997)) - (i32.add (i32.const -419076344)) - (i32.add (i32.const -597722583)) - (i32.add (i32.const -19759158)) - (i32.add (i32.const 1076494022)) - (i32.add (i32.const -1632769409)) - (i32.add (i32.const -13332406)) - (i32.add (i32.const -1615263925)) - (i32.add (i32.const -1691909791)) - (i32.add (i32.const -95650159)) - (i32.add (i32.const -640761133)) - (i32.add (i32.const -1951629127)) - (i32.add (i32.const -210652416)) - (i32.add (i32.const -1067719456)) - (i32.add (i32.const -66397313)) - (i32.add (i32.const -2133202686)) - (i32.add (i32.const 660382976)) - (i32.add (i32.const 342595278)) - (i32.add (i32.const 553283905)) - (i32.add (i32.const 105468110)) - (i32.add (i32.const 552667663)) - (i32.add (i32.const -366390635)) - (i32.add (i32.const -2071384425)) - (i32.add (i32.const 928728229)) - (i32.add (i32.const -1898325545)) - (i32.add (i32.const 1764292523)) - (i32.add (i32.const 267961372)) - (i32.add (i32.const 99375983)) - (i32.add (i32.const -1284890518)) - (i32.add (i32.const -839660121)) - (i32.add (i32.const -1889315814)) - (i32.add (i32.const -1500332441)) - (i32.add (i32.const -792621347)) - (i32.add (i32.const 1052441069)) - (i32.add (i32.const -490004410)) - (i32.add (i32.const 553189976)) - (i32.add (i32.const -2046024095)) - (i32.add (i32.const -1262005919)) - (i32.add (i32.const -2113400670)) - (i32.add (i32.const 918429443)) - (i32.add (i32.const 1087619765)) - (i32.add (i32.const 38633566)) - (i32.add (i32.const -321501749)) - (i32.add (i32.const 882505211)) - (i32.add (i32.const -2131271957)) - (i32.add (i32.const 362041984)) - (i32.add (i32.const -2005832368)) - (i32.add (i32.const -960461282)) - (i32.add (i32.const 436154710)) - (i32.add (i32.const -723253878)) - (i32.add (i32.const 289017559)) - (i32.add (i32.const 145328135)) - (i32.add (i32.const 1368867935)) - (i32.add (i32.const -698821807)) - (i32.add (i32.const -1686866153)) - (i32.add (i32.const 1716524755)) - (i32.add (i32.const 2016840808)) - (i32.add (i32.const -1902704232)) - (i32.add (i32.const 1640542848)) - (i32.add (i32.const -405385144)) - (i32.add (i32.const -1802505750)) - (i32.add (i32.const -1442625548)) - (i32.add (i32.const -579992233)) - (i32.add (i32.const 1475389282)) - (i32.add (i32.const 191465787)) - (i32.add (i32.const 159938848)) - (i32.add (i32.const -1724926688)) - (i32.add (i32.const -1833817601)) - (i32.add (i32.const -367376927)) - (i32.add (i32.const -278133005)) - (i32.add (i32.const 348489735)) - (i32.add (i32.const -1092345081)) - (i32.add (i32.const 162867206)) - (i32.add (i32.const -1687183771)) - (i32.add (i32.const 1861711351)) - (i32.add (i32.const 1147219708)) - (i32.add (i32.const 1402512593)) - (i32.add (i32.const -2009599620)) - (i32.add (i32.const -705537664)) - (i32.add (i32.const -251011113)) - (i32.add (i32.const 1946286431)) - (i32.add (i32.const -1704893665)) - (i32.add (i32.const 761593823)) - (i32.add (i32.const -1791584988)) - (i32.add (i32.const 1793315207)) - (i32.add (i32.const 1160744237)) - (i32.add (i32.const -24974471)) - (i32.add (i32.const -446417806)) - (i32.add (i32.const 1846520072)) - (i32.add (i32.const -712745508)) - (i32.add (i32.const -2056176650)) - (i32.add (i32.const -14715748)) - (i32.add (i32.const 1642429701)) - (i32.add (i32.const 1527105693)) - (i32.add (i32.const 1726490405)) - (i32.add (i32.const 790557089)) - (i32.add (i32.const -980373142)) - (i32.add (i32.const -1482112487)) - (i32.add (i32.const -401109669)) - (i32.add (i32.const 347061844)) - (i32.add (i32.const -1501780665)) - (i32.add (i32.const -1120533423)) - (i32.add (i32.const -625275075)) - (i32.add (i32.const 1559927586)) - (i32.add (i32.const -1884152467)) - (i32.add (i32.const 1206205218)) - (i32.add (i32.const -2016264560)) - (i32.add (i32.const 180451962)) - (i32.add (i32.const 525135299)) - (i32.add (i32.const 1428481748)) - (i32.add (i32.const -1968719648)) - (i32.add (i32.const 360148889)) - (i32.add (i32.const 1243146966)) - (i32.add (i32.const 2079362777)) - (i32.add (i32.const 676630572)) - (i32.add (i32.const -930685567)) - (i32.add (i32.const -276718825)) - (i32.add (i32.const 1505283829)) - (i32.add (i32.const 1845632193)) - (i32.add (i32.const -1866457589)) - (i32.add (i32.const -1647968389)) - (i32.add (i32.const 1311706712)) - (i32.add (i32.const -1163270888)) - (i32.add (i32.const 509748494)) - (i32.add (i32.const 602482164)) - (i32.add (i32.const -1894961736)) - (i32.add (i32.const -1213592575)) - (i32.add (i32.const 353464226)) - (i32.add (i32.const 1860537115)) - (i32.add (i32.const 497722552)) - (i32.add (i32.const -593258038)) - (i32.add (i32.const 945800624)) - (i32.add (i32.const 329378414)) - (i32.add (i32.const 1147086772)) - (i32.add (i32.const -609926462)) - (i32.add (i32.const -648185708)) - (i32.add (i32.const -1931284754)) - (i32.add (i32.const 1995182377)) - (i32.add (i32.const -119812287)) - (i32.add (i32.const -858341835)) - (i32.add (i32.const -1295071689)) - (i32.add (i32.const 708843215)) - (i32.add (i32.const 1084163678)) - (i32.add (i32.const -1153488322)) - (i32.add (i32.const 363480536)) - (i32.add (i32.const 2111036045)) - (i32.add (i32.const -111438484)) - (i32.add (i32.const -1695103363)) - (i32.add (i32.const 329946607)) - (i32.add (i32.const -1900869324)) - (i32.add (i32.const 933684790)) - (i32.add (i32.const -1011432016)) - (i32.add (i32.const 960016131)) - (i32.add (i32.const -879664218)) - (i32.add (i32.const 805514399)) - (i32.add (i32.const -1384830007)) - (i32.add (i32.const 1267163032)) - (i32.add (i32.const 893739436)) - (i32.add (i32.const 1333018636)) - (i32.add (i32.const -2014077002)) - (i32.add (i32.const -1942263123)) - (i32.add (i32.const 257639891)) - (i32.add (i32.const -1989097304)) - (i32.add (i32.const 1399448525)) - (i32.add (i32.const -1754236871)) - (i32.add (i32.const 2090962794)) - (i32.add (i32.const -1403414058)) - (i32.add (i32.const -289662933)) - (i32.add (i32.const 295955562)) - (i32.add (i32.const -1177364860)) - (i32.add (i32.const 794168731)) - (i32.add (i32.const 1386067975)) - (i32.add (i32.const 1686966557)) - (i32.add (i32.const 633686046)) - (i32.add (i32.const -1086800461)) - (i32.add (i32.const -942413657)) - (i32.add (i32.const 1489452196)) - (i32.add (i32.const -179116077)) - (i32.add (i32.const 1411110438)) - (i32.add (i32.const 1986674690)) - (i32.add (i32.const -1636948732)) - (i32.add (i32.const -1758358491)) - (i32.add (i32.const -521627243)) - (i32.add (i32.const -696198701)) - (i32.add (i32.const -236371504)) - (i32.add (i32.const -508636839)) - (i32.add (i32.const -1299683515)) - (i32.add (i32.const 1937198018)) - (i32.add (i32.const 1822826352)) - (i32.add (i32.const 323715023)) - (i32.add (i32.const 676453475)) - (i32.add (i32.const -1781339389)) - (i32.add (i32.const -1585021797)) - (i32.add (i32.const -1829705936)) - (i32.add (i32.const 2119823864)) - (i32.add (i32.const 653879773)) - (i32.add (i32.const -250123076)) - (i32.add (i32.const 1235674555)) - (i32.add (i32.const -89500137)) - (i32.add (i32.const -1642485578)) - (i32.add (i32.const -481541991)) - (i32.add (i32.const 1746550344)) - (i32.add (i32.const 984339263)) - (i32.add (i32.const -521281489)) - (i32.add (i32.const 1209141935)) - (i32.add (i32.const 1806267043)) - (i32.add (i32.const -1240601212)) - (i32.add (i32.const -17364845)) - (i32.add (i32.const 981555766)) - (i32.add (i32.const 61775821)) - (i32.add (i32.const 1625288171)) - (i32.add (i32.const -1389434851)) - (i32.add (i32.const -2032580384)) - (i32.add (i32.const -925928578)) - (i32.add (i32.const -675729153)) - (i32.add (i32.const 2107554229)) - (i32.add (i32.const -937194912)) - (i32.add (i32.const -1084380320)) - (i32.add (i32.const 816530328)) - (i32.add (i32.const -1940255945)) - (i32.add (i32.const -227250851)) - (i32.add (i32.const -388150043)) - (i32.add (i32.const -838275785)) - (i32.add (i32.const -1242683590)) - (i32.add (i32.const 906328799)) - (i32.add (i32.const -1019097779)) - (i32.add (i32.const 8796131)) - (i32.add (i32.const 1489093123)) - (i32.add (i32.const -102727227)) - (i32.add (i32.const -311315860)) - (i32.add (i32.const 1436269401)) - (i32.add (i32.const -856089493)) - (i32.add (i32.const 1361209865)) - (i32.add (i32.const 947552511)) - (i32.add (i32.const -1194843601)) - (i32.add (i32.const 662708972)) - (i32.add (i32.const -1074411538)) - (i32.add (i32.const -1767234635)) - (i32.add (i32.const -1855886555)) - (i32.add (i32.const -1745745718)) - (i32.add (i32.const -1331778675)) - (i32.add (i32.const -1961336697)) - (i32.add (i32.const -440693522)) - (i32.add (i32.const 1175385795)) - (i32.add (i32.const 2026164684)) - (i32.add (i32.const -1276225759)) - (i32.add (i32.const 57411864)) - (i32.add (i32.const -728167391)) - (i32.add (i32.const -153755900)) - (i32.add (i32.const 1501088928)) - (i32.add (i32.const 1196952915)) - (i32.add (i32.const -1723495320)) - (i32.add (i32.const 1338491806)) - (i32.add (i32.const -47298351)) - (i32.add (i32.const 1576993495)) - (i32.add (i32.const 1919483303)) - (i32.add (i32.const -2058777559)) - (i32.add (i32.const 1659107781)) - (i32.add (i32.const 136623121)) - (i32.add (i32.const 900516600)) - (i32.add (i32.const -1375006952)) - (i32.add (i32.const 984553677)) - (i32.add (i32.const -1913210540)) - (i32.add (i32.const -507030789)) - (i32.add (i32.const -1751141963)) - (i32.add (i32.const -63350053)) - (i32.add (i32.const -1497343136)) - (i32.add (i32.const 1993237457)) - (i32.add (i32.const -1938394601)) - (i32.add (i32.const 2072877106)) - (i32.add (i32.const -1347358463)) - (i32.add (i32.const -1103003185)) - (i32.add (i32.const -161163764)) - (i32.add (i32.const 1641994622)) - (i32.add (i32.const 965251874)) - (i32.add (i32.const 2016623662)) - (i32.add (i32.const -1688486022)) - (i32.add (i32.const 1571163317)) - (i32.add (i32.const 926054941)) - (i32.add (i32.const -120131997)) - (i32.add (i32.const 1521223812)) - (i32.add (i32.const -1844102560)) - (i32.add (i32.const -940100140)) - (i32.add (i32.const 1325846758)) - (i32.add (i32.const -84518469)) - (i32.add (i32.const 50114576)) - (i32.add (i32.const 1966324301)) - (i32.add (i32.const -353124212)) - (i32.add (i32.const 1039228051)) - (i32.add (i32.const -228490067)) - (i32.add (i32.const -1870507994)) - (i32.add (i32.const 109016609)) - (i32.add (i32.const 1489950716)) - (i32.add (i32.const -1560326095)) - (i32.add (i32.const 1315409476)) - (i32.add (i32.const 755008939)) - (i32.add (i32.const -526053406)) - (i32.add (i32.const -1533402586)) - (i32.add (i32.const -39297339)) - (i32.add (i32.const -280861923)) - (i32.add (i32.const -85220651)) - (i32.add (i32.const 1109440741)) - (i32.add (i32.const -2016845170)) - (i32.add (i32.const -1635266922)) - (i32.add (i32.const 461971047)) - (i32.add (i32.const 182567090)) - (i32.add (i32.const -814107127)) - (i32.add (i32.const 2024176972)) - (i32.add (i32.const -1724642949)) - (i32.add (i32.const -1365281727)) - (i32.add (i32.const 102777599)) - (i32.add (i32.const 1286322043)) - (i32.add (i32.const -1936614254)) - (i32.add (i32.const -813864610)) - (i32.add (i32.const 284353768)) - (i32.add (i32.const 1021985675)) - (i32.add (i32.const 1921713991)) - (i32.add (i32.const 1560152572)) - (i32.add (i32.const 989087713)) - (i32.add (i32.const 154858703)) - (i32.add (i32.const 277684287)) - (i32.add (i32.const -1776276640)) - (i32.add (i32.const -1543414462)) - (i32.add (i32.const 1932992901)) - (i32.add (i32.const -1335839092)) - (i32.add (i32.const 829395020)) - (i32.add (i32.const -798532891)) - (i32.add (i32.const -1629116548)) - (i32.add (i32.const -1239678019)) - (i32.add (i32.const 686970570)) - (i32.add (i32.const -1352485236)) - (i32.add (i32.const -299894451)) - (i32.add (i32.const 1924316636)) - (i32.add (i32.const -579294914)) - (i32.add (i32.const 1905288265)) - (i32.add (i32.const 1665285694)) - (i32.add (i32.const -984621911)) - (i32.add (i32.const -1360959915)) - (i32.add (i32.const -988525708)) - (i32.add (i32.const 1349735443)) - (i32.add (i32.const 554113740)) - (i32.add (i32.const 312860443)) - (i32.add (i32.const -1593220623)) - (i32.add (i32.const -1495260075)) - (i32.add (i32.const -1588041500)) - (i32.add (i32.const 886610170)) - (i32.add (i32.const -1929161832)) - (i32.add (i32.const -395887453)) - (i32.add (i32.const -1937827612)) - (i32.add (i32.const 1810519739)) - (i32.add (i32.const 1574367281)) - (i32.add (i32.const 1025369229)) - (i32.add (i32.const -501120405)) - (i32.add (i32.const 2082069817)) - (i32.add (i32.const -2078058750)) - (i32.add (i32.const -97472727)) - (i32.add (i32.const 705911594)) - (i32.add (i32.const -41216359)) - (i32.add (i32.const -2115283456)) - (i32.add (i32.const 1100794855)) - (i32.add (i32.const 595400581)) - (i32.add (i32.const 280379919)) - (i32.add (i32.const 225357037)) - (i32.add (i32.const -1945353076)) - (i32.add (i32.const 493118267)) - (i32.add (i32.const -461878044)) - (i32.add (i32.const 2072903842)) - (i32.add (i32.const 41627614)) - (i32.add (i32.const -1462051025)) - (i32.add (i32.const 1470494419)) - (i32.add (i32.const 1470295080)) - (i32.add (i32.const -604442977)) - (i32.add (i32.const 1322547357)) - (i32.add (i32.const 885928062)) - (i32.add (i32.const 812523882)) - (i32.add (i32.const 1972630602)) - (i32.add (i32.const -522837235)) - (i32.add (i32.const 1825174082)) - (i32.add (i32.const -1525682411)) - (i32.add (i32.const 1681377012)) - (i32.add (i32.const 1370156780)) - (i32.add (i32.const -1416881127)) - (i32.add (i32.const 1477773302)) - (i32.add (i32.const 845967561)) - (i32.add (i32.const 220900604)) - (i32.add (i32.const 463740715)) - (i32.add (i32.const -1188907341)) - (i32.add (i32.const 634980884)) - (i32.add (i32.const 85766908)) - (i32.add (i32.const -806213823)) - (i32.add (i32.const 1488813796)) - (i32.add (i32.const 704385515)) - (i32.add (i32.const -254320922)) - (i32.add (i32.const -1863170624)) - (i32.add (i32.const -956496194)) - (i32.add (i32.const -1200034835)) - (i32.add (i32.const -12683866)) - (i32.add (i32.const 532399861)) - (i32.add (i32.const 1516485318)) - (i32.add (i32.const 2058168431)) - (i32.add (i32.const -1052499420)) - (i32.add (i32.const 1719680538)) - (i32.add (i32.const -2071319355)) - (i32.add (i32.const -115004609)) - (i32.add (i32.const -879269227)) - (i32.add (i32.const 1781567157)) - (i32.add (i32.const -870765327)) - (i32.add (i32.const -2084195918)) - (i32.add (i32.const -1601398904)) - (i32.add (i32.const -1623391461)) - (i32.add (i32.const -395741485)) - (i32.add (i32.const -1266215700)) - (i32.add (i32.const -571906349)) - (i32.add (i32.const -1060659272)) - (i32.add (i32.const -1599691760)) - (i32.add (i32.const -1117452626)) - (i32.add (i32.const 1186779978)) - (i32.add (i32.const 1247268641)) - (i32.add (i32.const 212598718)) - (i32.add (i32.const -683440947)) - (i32.add (i32.const 671789549)) - (i32.add (i32.const 1107313634)) - (i32.add (i32.const 714252951)) - (i32.add (i32.const 439590728)) - (i32.add (i32.const 614387505)) - (i32.add (i32.const -1922289515)) - (i32.add (i32.const 311522191)) - (i32.add (i32.const 441280202)) - (i32.add (i32.const 1927223266)) - (i32.add (i32.const -1824443639)) - (i32.add (i32.const -2062008673)) - (i32.add (i32.const -158588265)) - (i32.add (i32.const -693222144)) - (i32.add (i32.const 867135224)) - (i32.add (i32.const 729460153)) - (i32.add (i32.const -1070827785)) - (i32.add (i32.const -587571930)) - (i32.add (i32.const 987549965)) - (i32.add (i32.const -1466132541)) - (i32.add (i32.const 1470279812)) - (i32.add (i32.const 654904626)) - (i32.add (i32.const -1486360755)) - (i32.add (i32.const 386146427)) - (i32.add (i32.const -1493775452)) - (i32.add (i32.const -426453777)) - (i32.add (i32.const 2131617946)) - (i32.add (i32.const 1833599322)) - (i32.add (i32.const -1831850117)) - (i32.add (i32.const 1204440892)) - (i32.add (i32.const -2104279593)) - (i32.add (i32.const -1820492886)) - (i32.add (i32.const -1219588173)) - (i32.add (i32.const 739191780)) - (i32.add (i32.const 972276278)) - (i32.add (i32.const 1015705254)) - (i32.add (i32.const -1920487131)) - (i32.add (i32.const 1866577578)) - (i32.add (i32.const -80567914)) - (i32.add (i32.const -1647080951)) - (i32.add (i32.const 572916399)) - (i32.add (i32.const 29531658)) - (i32.add (i32.const 905622305)) - (i32.add (i32.const 1054262877)) - (i32.add (i32.const -1971322111)) - (i32.add (i32.const -919132105)) - (i32.add (i32.const -453817871)) - (i32.add (i32.const 2132449108)) - (i32.add (i32.const -1804769525)) - (i32.add (i32.const -1769537118)) - (i32.add (i32.const 2145531801)) - (i32.add (i32.const 656746054)) - (i32.add (i32.const -226918810)) - (i32.add (i32.const -1776519760)) - (i32.add (i32.const 380823084)) - (i32.add (i32.const -1683239186)) - (i32.add (i32.const 681121855)) - (i32.add (i32.const -883107748)) - (i32.add (i32.const 638058257)) - (i32.add (i32.const 2096235423)) - (i32.add (i32.const 509017011)) - (i32.add (i32.const 1597501180)) - (i32.add (i32.const -1153651055)) - (i32.add (i32.const -1332577858)) - (i32.add (i32.const 1746547261)) - (i32.add (i32.const -1095744674)) - (i32.add (i32.const -1729938705)) - (i32.add (i32.const -1936260170)) - (i32.add (i32.const -2014514350)) - (i32.add (i32.const 318891107)) - (i32.add (i32.const -2011451096)) - (i32.add (i32.const 1392304247)) - (i32.add (i32.const -163721994)) - (i32.add (i32.const 355254350)) - (i32.add (i32.const -660030573)) - (i32.add (i32.const 983012679)) - (i32.add (i32.const -1045831700)) - (i32.add (i32.const -1101506486)) - (i32.add (i32.const -872011792)) - (i32.add (i32.const 1276950806)) - (i32.add (i32.const 1655043495)) - (i32.add (i32.const 484254493)) - (i32.add (i32.const -1262243263)) - (i32.add (i32.const -482434526)) - (i32.add (i32.const 767680743)) - (i32.add (i32.const 1643282251)) - (i32.add (i32.const 1124886411)) - (i32.add (i32.const -827685250)) - (i32.add (i32.const -1434831886)) - (i32.add (i32.const -2018774100)) - (i32.add (i32.const 1721688565)) - (i32.add (i32.const -1982414905)) - (i32.add (i32.const -1095167645)) - (i32.add (i32.const -797041706)) - (i32.add (i32.const -1079661929)) - (i32.add (i32.const 368444257)) - (i32.add (i32.const 581876632)) - (i32.add (i32.const 1772288034)) - (i32.add (i32.const 2070086126)) - (i32.add (i32.const 804624471)) - (i32.add (i32.const 118931051)) - (i32.add (i32.const -2013871808)) - (i32.add (i32.const -916862086)) - (i32.add (i32.const -1746657531)) - (i32.add (i32.const 2020849881)) - (i32.add (i32.const 1546850676)) - (i32.add (i32.const 52234869)) - (i32.add (i32.const -1615917884)) - (i32.add (i32.const -1198002258)) - (i32.add (i32.const -342554229)) - (i32.add (i32.const 1567819551)) - (i32.add (i32.const -276288301)) - (i32.add (i32.const 1689982630)) - (i32.add (i32.const -1042962167)) - (i32.add (i32.const 862022304)) - (i32.add (i32.const -668707516)) - (i32.add (i32.const 1317599950)) - (i32.add (i32.const 888843931)) - (i32.add (i32.const 1108593211)) - (i32.add (i32.const 130047374)) - (i32.add (i32.const 369682055)) - (i32.add (i32.const -383414551)) - (i32.add (i32.const -788056030)) - (i32.add (i32.const 1120909054)) - (i32.add (i32.const 1229300638)) - (i32.add (i32.const -1908708559)) - (i32.add (i32.const 1398635893)) - (i32.add (i32.const 1570667326)) - (i32.add (i32.const -1426266581)) - (i32.add (i32.const 1671446492)) - (i32.add (i32.const 1340861263)) - (i32.add (i32.const 725729640)) - (i32.add (i32.const -2127495620)) - (i32.add (i32.const 1461576059)) - (i32.add (i32.const 2131235824)) - (i32.add (i32.const -2057268707)) - (i32.add (i32.const -1029199618)) - (i32.add (i32.const 45161388)) - (i32.add (i32.const -2055452020)) - (i32.add (i32.const 1565142849)) - (i32.add (i32.const 1883943035)) - (i32.add (i32.const -200079892)) - (i32.add (i32.const 1002986541)) - (i32.add (i32.const -845460723)) - (i32.add (i32.const -1244004829)) - (i32.add (i32.const 923329209)) - (i32.add (i32.const 1100320521)) - (i32.add (i32.const 60805448)) - (i32.add (i32.const -922371978)) - (i32.add (i32.const 1014206508)) - (i32.add (i32.const -1815710054)) - (i32.add (i32.const -759956048)) - (i32.add (i32.const -553386495)) - (i32.add (i32.const 1667870665)) - (i32.add (i32.const -290761840)) - (i32.add (i32.const -1055387690)) - (i32.add (i32.const -1742697682)) - (i32.add (i32.const -57904809)) - (i32.add (i32.const -1463738569)) - (i32.add (i32.const 490342168)) - (i32.add (i32.const 622731499)) - (i32.add (i32.const 1742766006)) - (i32.add (i32.const -1678113674)) - (i32.add (i32.const -447376617)) - (i32.add (i32.const -1169111134)) - (i32.add (i32.const -767329749)) - (i32.add (i32.const -390950909)) - (i32.add (i32.const -1959928026)) - (i32.add (i32.const 1112383291)) - (i32.add (i32.const 1442619281)) - (i32.add (i32.const -203479088)) - (i32.add (i32.const -537963042)) - (i32.add (i32.const 1937443264)) - (i32.add (i32.const 573880516)) - (i32.add (i32.const -1319606881)) - (i32.add (i32.const 1580962897)) - (i32.add (i32.const -1664673360)) - (i32.add (i32.const -1314686422)) - (i32.add (i32.const 46994490)) - (i32.add (i32.const 472002652)) - (i32.add (i32.const 1851891516)) - (i32.add (i32.const 2054610192)) - (i32.add (i32.const -1311576284)) - (i32.add (i32.const 323310832)) - (i32.add (i32.const -733483421)) - (i32.add (i32.const -174541009)) - (i32.add (i32.const 1485598227)) - (i32.add (i32.const 972612155)) - (i32.add (i32.const 1568013710)) - (i32.add (i32.const 1638142368)) - (i32.add (i32.const -946940424)) - (i32.add (i32.const 1916779331)) - (i32.add (i32.const -1227023335)) - (i32.add (i32.const -1851643606)) - (i32.add (i32.const 1982418614)) - (i32.add (i32.const 676027615)) - (i32.add (i32.const 1415200079)) - (i32.add (i32.const -576663506)) - (i32.add (i32.const 305515807)) - (i32.add (i32.const -1959695805)) - (i32.add (i32.const 977871963)) - (i32.add (i32.const 4096178)) - (i32.add (i32.const 577869422)) - (i32.add (i32.const 2095761489)) - (i32.add (i32.const -1549451066)) - (i32.add (i32.const -1087043425)) - (i32.add (i32.const 19285345)) - (i32.add (i32.const 848591100)) - (i32.add (i32.const -191711041)) - (i32.add (i32.const -511722505)) - (i32.add (i32.const 882023194)) - (i32.add (i32.const 1197056571)) - (i32.add (i32.const 1251320179)) - (i32.add (i32.const -1575000494)) - (i32.add (i32.const 1461442414)) - (i32.add (i32.const -1077685550)) - (i32.add (i32.const 38182177)) - (i32.add (i32.const -1280140173)) - (i32.add (i32.const 1096641632)) - (i32.add (i32.const -549379823)) - (i32.add (i32.const -1894661432)) - (i32.add (i32.const -839483115)) - (i32.add (i32.const -1660127692)) - (i32.add (i32.const 170172393)) - (i32.add (i32.const -1838568080)) - (i32.add (i32.const 1188111319)) - (i32.add (i32.const 630224809)) - (i32.add (i32.const 303358631)) - (i32.add (i32.const -964800938)) - (i32.add (i32.const 508316718)) - (i32.add (i32.const 1881457925)) - (i32.add (i32.const -1250210297)) - (i32.add (i32.const 294590146)) - (i32.add (i32.const -205054945)) - (i32.add (i32.const 1381746584)) - (i32.add (i32.const -901272564)) - (i32.add (i32.const -1484377570)) - (i32.add (i32.const -1550715139)) - (i32.add (i32.const 1449764913)) - (i32.add (i32.const 1895467403)) - (i32.add (i32.const -1119253005)) - (i32.add (i32.const -1236453406)) - (i32.add (i32.const 1338250402)) - (i32.add (i32.const 1672840651)) - (i32.add (i32.const -1843950356)) - (i32.add (i32.const 956115219)) - (i32.add (i32.const -1118027222)) - (i32.add (i32.const 1200552489)) - (i32.add (i32.const -1041803022)) - (i32.add (i32.const 1467136558)) - (i32.add (i32.const 1943950262)) - (i32.add (i32.const -298124288)) - (i32.add (i32.const -2019690102)) - (i32.add (i32.const 1891931262)) - (i32.add (i32.const 257726437)) - (i32.add (i32.const -1963059548)) - (i32.add (i32.const -1519452032)) - (i32.add (i32.const -1061032563)) - (i32.add (i32.const -1312071827)) - (i32.add (i32.const 257940510)) - (i32.add (i32.const -13521009)) - (i32.add (i32.const -669056397)) - (i32.add (i32.const 1099225201)) - (i32.add (i32.const -454646770)) - (i32.add (i32.const -1328458695)) - (i32.add (i32.const 139037250)) - (i32.add (i32.const 273528863)) - (i32.add (i32.const 1967159908)) - (i32.add (i32.const -1486962917)) - (i32.add (i32.const -1374008061)) - (i32.add (i32.const -1477919207)) - (i32.add (i32.const -1665548727)) - (i32.add (i32.const -67762156)) - (i32.add (i32.const -1378244011)) - (i32.add (i32.const 140442688)) - (i32.add (i32.const 1268802472)) - (i32.add (i32.const -784880664)) - (i32.add (i32.const 1134379706)) - (i32.add (i32.const 54829705)) - (i32.add (i32.const -1285644539)) - (i32.add (i32.const -1971417243)) - (i32.add (i32.const -1251191955)) - (i32.add (i32.const 405723457)) - (i32.add (i32.const -1859009064)) - (i32.add (i32.const -1901503204)) - (i32.add (i32.const -610236373)) - (i32.add (i32.const -1432952571)) - (i32.add (i32.const -874123164)) - (i32.add (i32.const 876009268)) - (i32.add (i32.const -23393240)) - (i32.add (i32.const -1972858028)) - (i32.add (i32.const 1392647274)) - (i32.add (i32.const 1911072893)) - (i32.add (i32.const 1597725113)) - (i32.add (i32.const -1025879542)) - (i32.add (i32.const 1061101132)) - (i32.add (i32.const -126165619)) - (i32.add (i32.const 732916869)) - (i32.add (i32.const 2080519844)) - (i32.add (i32.const 2141223206)) - (i32.add (i32.const -97725785)) - (i32.add (i32.const -1433454934)) - (i32.add (i32.const -1846513579)) - (i32.add (i32.const 1849775925)) - (i32.add (i32.const 703976631)) - (i32.add (i32.const -893468325)) - (i32.add (i32.const -95820037)) - (i32.add (i32.const 1564464450)) - (i32.add (i32.const -516146621)) - (i32.add (i32.const -1239341162)) - (i32.add (i32.const -1903138188)) - (i32.add (i32.const -9258787)) - (i32.add (i32.const 1032067612)) - (i32.add (i32.const 2113216252)) - (i32.add (i32.const -869024283)) - (i32.add (i32.const -314449432)) - (i32.add (i32.const 233522714)) - (i32.add (i32.const -863515579)) - (i32.add (i32.const -843065966)) - (i32.add (i32.const 469596288)) - (i32.add (i32.const 949774238)) - (i32.add (i32.const -1810223126)) - (i32.add (i32.const -387367766)) - (i32.add (i32.const -394805327)) - (i32.add (i32.const -1885598318)) - (i32.add (i32.const -1772819184)) - (i32.add (i32.const -2136989155)) - (i32.add (i32.const 1107129813)) - (i32.add (i32.const 1878362343)) - (i32.add (i32.const 517053123)) - (i32.add (i32.const 1015957942)) - (i32.add (i32.const 1610614867)) - (i32.add (i32.const 1438518464)) - (i32.add (i32.const -1073335491)) - (i32.add (i32.const -1934701029)) - (i32.add (i32.const -2115376012)) - (i32.add (i32.const 774792105)) - (i32.add (i32.const -280472288)) - (i32.add (i32.const 2039830165)) - (i32.add (i32.const 1691890266)) - (i32.add (i32.const -1394434925)) - (i32.add (i32.const -286337325)) - (i32.add (i32.const -1555541697)) - (i32.add (i32.const 753923080)) - (i32.add (i32.const 1515303888)) - (i32.add (i32.const 1407882806)) - (i32.add (i32.const 858614412)) - (i32.add (i32.const 168590013)) - (i32.add (i32.const 1361861148)) - (i32.add (i32.const 1663923933)) - (i32.add (i32.const 870916575)) - (i32.add (i32.const -471228458)) - (i32.add (i32.const 1096902488)) - (i32.add (i32.const 920485564)) - (i32.add (i32.const -492325396)) - (i32.add (i32.const 2094866359)) - (i32.add (i32.const -206958569)) - (i32.add (i32.const 1781382030)) - (i32.add (i32.const 285077551)) - (i32.add (i32.const 1646375888)) - (i32.add (i32.const 2123122855)) - (i32.add (i32.const 731699660)) - (i32.add (i32.const 683462185)) - (i32.add (i32.const -1203928632)) - (i32.add (i32.const -2095512282)) - (i32.add (i32.const 1218878467)) - (i32.add (i32.const 1544369881)) - (i32.add (i32.const 1748568066)) - (i32.add (i32.const -1743413788)) - (i32.add (i32.const 792495466)) - (i32.add (i32.const 1272718867)) - (i32.add (i32.const 78802686)) - (i32.add (i32.const -1892080733)) - (i32.add (i32.const 1808950150)) - (i32.add (i32.const -804408796)) - (i32.add (i32.const -427034332)) - (i32.add (i32.const -1419134106)) - (i32.add (i32.const 2028911926)) - (i32.add (i32.const 1469576281)) - (i32.add (i32.const -1686672843)) - (i32.add (i32.const -1946581352)) - (i32.add (i32.const -1342814953)) - (i32.add (i32.const 1435341343)) - (i32.add (i32.const 554528303)) - (i32.add (i32.const -1148508128)) - (i32.add (i32.const -52807284)) - (i32.add (i32.const -634684579)) - (i32.add (i32.const 528225913)) - (i32.add (i32.const 1935380284)) - (i32.add (i32.const 2141283843)) - (i32.add (i32.const 1275243327)) - (i32.add (i32.const 1740687294)) - (i32.add (i32.const -1904998508)) - (i32.add (i32.const -1061917345)) - (i32.add (i32.const 749387315)) - (i32.add (i32.const 1651179329)) - (i32.add (i32.const -60482403)) - (i32.add (i32.const -61429217)) - (i32.add (i32.const 628152167)) - (i32.add (i32.const -1113238673)) - (i32.add (i32.const 337393831)) - (i32.add (i32.const 1300043114)) - (i32.add (i32.const 109236361)) - (i32.add (i32.const 2029468331)) - (i32.add (i32.const 951787582)) - (i32.add (i32.const -860655840)) - (i32.add (i32.const 742172696)) - (i32.add (i32.const 1414495410)) - (i32.add (i32.const 1367461598)) - (i32.add (i32.const -455288255)) - (i32.add (i32.const 1243578509)) - (i32.add (i32.const -97530222)) - (i32.add (i32.const 252893048)) - (i32.add (i32.const 397945408)) - (i32.add (i32.const -1889423528)) - (i32.add (i32.const 629829063)) - (i32.add (i32.const 859175272)) - (i32.add (i32.const 1055440713)) - (i32.add (i32.const -1111362880)) - (i32.add (i32.const 1191995039)) - (i32.add (i32.const 1563813589)) - (i32.add (i32.const -131207603)) - (i32.add (i32.const -964538315)) - (i32.add (i32.const -1236215086)) - (i32.add (i32.const 1669105398)) - (i32.add (i32.const 265431063)) - (i32.add (i32.const 1931173738)) - (i32.add (i32.const -624301844)) - (i32.add (i32.const 1271053882)) - (i32.add (i32.const 201506395)) - (i32.add (i32.const -1287467203)) - (i32.add (i32.const -1221197992)) - (i32.add (i32.const 1837883201)) - (i32.add (i32.const -1205547423)) - (i32.add (i32.const 1873451873)) - (i32.add (i32.const 628546022)) - (i32.add (i32.const -1668448800)) - (i32.add (i32.const 152824839)) - (i32.add (i32.const 798108598)) - (i32.add (i32.const 857362272)) - (i32.add (i32.const 198527553)) - (i32.add (i32.const -651887917)) - (i32.add (i32.const -1406603293)) - (i32.add (i32.const -1413391553)) - (i32.add (i32.const -452096208)) - (i32.add (i32.const 882923630)) - (i32.add (i32.const -655697611)) - (i32.add (i32.const 202773372)) - (i32.add (i32.const -1382108908)) - (i32.add (i32.const -452879169)) - (i32.add (i32.const 681548511)) - (i32.add (i32.const -277500681)) - (i32.add (i32.const 545169181)) - (i32.add (i32.const -428305447)) - (i32.add (i32.const 1451551369)) - (i32.add (i32.const 1035852863)) - (i32.add (i32.const 512726548)) - (i32.add (i32.const -930524311)) - (i32.add (i32.const 1870773101)) - (i32.add (i32.const 901965448)) - (i32.add (i32.const -576425834)) - (i32.add (i32.const 351084350)) - (i32.add (i32.const -1291225113)) - (i32.add (i32.const -487396110)) - (i32.add (i32.const -590654550)) - (i32.add (i32.const 897238501)) - (i32.add (i32.const -81110220)) - (i32.add (i32.const 1237525562)) - (i32.add (i32.const -1961825536)) - (i32.add (i32.const -1057442122)) - (i32.add (i32.const -697868336)) - (i32.add (i32.const -2021643440)) - (i32.add (i32.const 1666073752)) - (i32.add (i32.const -483336792)) - (i32.add (i32.const 514461942)) - (i32.add (i32.const -488896700)) - (i32.add (i32.const 1320677228)) - (i32.add (i32.const 1443594811)) - (i32.add (i32.const 847305938)) - (i32.add (i32.const -595578695)) - (i32.add (i32.const -192978101)) - (i32.add (i32.const 2031566241)) - (i32.add (i32.const 172612862)) - (i32.add (i32.const -597183810)) - (i32.add (i32.const 946968274)) - (i32.add (i32.const 1888660215)) - (i32.add (i32.const -2020029929)) - (i32.add (i32.const 1161035215)) - (i32.add (i32.const -668163661)) - (i32.add (i32.const -964152056)) - (i32.add (i32.const -860208907)) - (i32.add (i32.const 1770621526)) - (i32.add (i32.const -300767501)) - (i32.add (i32.const -988920211)) - (i32.add (i32.const -811514429)) - (i32.add (i32.const 1042906444)) - (i32.add (i32.const 1914789783)) - (i32.add (i32.const -1930664832)) - (i32.add (i32.const 114332389)) - (i32.add (i32.const -942532061)) - (i32.add (i32.const -1582562505)) - (i32.add (i32.const 102127584)) - (i32.add (i32.const 241680401)) - (i32.add (i32.const -804334260)) - (i32.add (i32.const -528561060)) - (i32.add (i32.const 1381797756)) - (i32.add (i32.const 800196000)) - (i32.add (i32.const 130008983)) - (i32.add (i32.const -11400201)) - (i32.add (i32.const 1641606101)) - (i32.add (i32.const 531530183)) - (i32.add (i32.const 1018637582)) - (i32.add (i32.const 1666302089)) - (i32.add (i32.const 774941105)) - (i32.add (i32.const 1343717856)) - (i32.add (i32.const 125791375)) - (i32.add (i32.const -158701661)) - (i32.add (i32.const -96990682)) - (i32.add (i32.const 2144414261)) - (i32.add (i32.const 1459604760)) - (i32.add (i32.const 2009556041)) - (i32.add (i32.const -1069379734)) - (i32.add (i32.const 1106055593)) - (i32.add (i32.const -1240098588)) - (i32.add (i32.const -1213802987)) - (i32.add (i32.const 735180836)) - (i32.add (i32.const -883733202)) - (i32.add (i32.const 625583145)) - (i32.add (i32.const 1001161786)) - (i32.add (i32.const 1859010859)) - (i32.add (i32.const 1413062624)) - (i32.add (i32.const -1366959057)) - (i32.add (i32.const 263908153)) - (i32.add (i32.const -817551118)) - (i32.add (i32.const 949346241)) - (i32.add (i32.const 619474396)) - (i32.add (i32.const 1964750969)) - (i32.add (i32.const 1610153036)) - (i32.add (i32.const -393816219)) - (i32.add (i32.const 368426987)) - (i32.add (i32.const -528413005)) - (i32.add (i32.const 298524205)) - (i32.add (i32.const 595477817)) - (i32.add (i32.const 1294247088)) - (i32.add (i32.const 1688018983)) - (i32.add (i32.const -1434115357)) - (i32.add (i32.const 16117666)) - (i32.add (i32.const 363935642)) - (i32.add (i32.const -1144734969)) - (i32.add (i32.const -704051197)) - (i32.add (i32.const 1424596467)) - (i32.add (i32.const 83702353)) - (i32.add (i32.const 598988583)) - (i32.add (i32.const 1077669503)) - (i32.add (i32.const 1263175356)) - (i32.add (i32.const 1530399855)) - (i32.add (i32.const -510688699)) - (i32.add (i32.const 923245747)) - (i32.add (i32.const 791601887)) - (i32.add (i32.const -1523610703)) - (i32.add (i32.const 778826063)) - (i32.add (i32.const -851444002)) - (i32.add (i32.const -1292704448)) - (i32.add (i32.const 1068270811)) - (i32.add (i32.const 562535820)) - (i32.add (i32.const 1785662322)) - (i32.add (i32.const 789628223)) - (i32.add (i32.const 2040198188)) - (i32.add (i32.const -1731753135)) - (i32.add (i32.const -1437301786)) - (i32.add (i32.const -89598592)) - (i32.add (i32.const -272290545)) - (i32.add (i32.const -1703574067)) - (i32.add (i32.const 35636428)) - (i32.add (i32.const 253115709)) - (i32.add (i32.const 1685033584)) - (i32.add (i32.const 1415552290)) - (i32.add (i32.const 1860071413)) - (i32.add (i32.const -1963757635)) - (i32.add (i32.const -342536222)) - (i32.add (i32.const 978844290)) - (i32.add (i32.const 1132162924)) - (i32.add (i32.const -969888176)) - (i32.add (i32.const -1123194405)) - (i32.add (i32.const -694748221)) - (i32.add (i32.const -2121386810)) - (i32.add (i32.const -573114171)) - (i32.add (i32.const 2081528250)) - (i32.add (i32.const 1925764786)) - (i32.add (i32.const -1769259448)) - (i32.add (i32.const 1160964864)) - (i32.add (i32.const 1980641039)) - (i32.add (i32.const -1707093523)) - (i32.add (i32.const 17758896)) - (i32.add (i32.const -1289496228)) - (i32.add (i32.const -1902466322)) - (i32.add (i32.const 1627662727)) - (i32.add (i32.const -787056323)) - (i32.add (i32.const 191149279)) - (i32.add (i32.const 1513217396)) - (i32.add (i32.const 705263977)) - (i32.add (i32.const -1183281799)) - (i32.add (i32.const -565619968)) - (i32.add (i32.const 1269427213)) - (i32.add (i32.const -56192516)) - (i32.add (i32.const 1751502710)) - (i32.add (i32.const -1159520815)) - (i32.add (i32.const -1683723126)) - (i32.add (i32.const 784890973)) - (i32.add (i32.const -1656004395)) - (i32.add (i32.const -150701616)) - (i32.add (i32.const -1121746763)) - (i32.add (i32.const -907804830)) - (i32.add (i32.const -412971054)) - (i32.add (i32.const -316916494)) - (i32.add (i32.const -773110722)) - (i32.add (i32.const 231846713)) - (i32.add (i32.const -665364475)) - (i32.add (i32.const 1516094241)) - (i32.add (i32.const -586340861)) - (i32.add (i32.const -563164616)) - (i32.add (i32.const -792412148)) - (i32.add (i32.const 462498995)) - (i32.add (i32.const 1204742785)) - (i32.add (i32.const -527015680)) - (i32.add (i32.const 2082389270)) - (i32.add (i32.const -953684765)) - (i32.add (i32.const 2036740362)) - (i32.add (i32.const 1642946615)) - (i32.add (i32.const 1652783364)) - (i32.add (i32.const 1396963193)) - (i32.add (i32.const -48062978)) - (i32.add (i32.const -928062054)) - (i32.add (i32.const 1918973332)) - (i32.add (i32.const -526568501)) - (i32.add (i32.const -1954263288)) - (i32.add (i32.const -692740906)) - (i32.add (i32.const -1992128979)) - (i32.add (i32.const -1203701672)) - (i32.add (i32.const -1170638476)) - (i32.add (i32.const -1782937588)) - (i32.add (i32.const 1108557815)) - (i32.add (i32.const -513125821)) - (i32.add (i32.const 1692224167)) - (i32.add (i32.const -616459771)) - (i32.add (i32.const 2050676599)) - (i32.add (i32.const -1296693673)) - (i32.add (i32.const 430357011)) - (i32.add (i32.const -633155911)) - (i32.add (i32.const -1810569980)) - (i32.add (i32.const 2045571221)) - (i32.add (i32.const -1970945090)) - (i32.add (i32.const 1422211318)) - (i32.add (i32.const 1944849527)) - (i32.add (i32.const 938179469)) - (i32.add (i32.const -1156264385)) - (i32.add (i32.const -144538726)) - (i32.add (i32.const 384697536)) - (i32.add (i32.const 1023090454)) - (i32.add (i32.const -1889139170)) - (i32.add (i32.const 1049617690)) - (i32.add (i32.const -754244005)) - (i32.add (i32.const 215306256)) - (i32.add (i32.const -899724688)) - (i32.add (i32.const 964479472)) - (i32.add (i32.const -221452352)) - (i32.add (i32.const 1977157231)) - (i32.add (i32.const 341148613)) - (i32.add (i32.const 306359468)) - (i32.add (i32.const 1778759471)) - (i32.add (i32.const -1773417631)) - (i32.add (i32.const 1920767473)) - (i32.add (i32.const 361992974)) - (i32.add (i32.const -703002522)) - (i32.add (i32.const -937731066)) - (i32.add (i32.const -1951447747)) - (i32.add (i32.const 860438161)) - (i32.add (i32.const -1408037848)) - (i32.add (i32.const -1948772655)) - (i32.add (i32.const -780988391)) - (i32.add (i32.const 2133285278)) - (i32.add (i32.const 1743647918)) - (i32.add (i32.const 1126977401)) - (i32.add (i32.const 337118259)) - (i32.add (i32.const 48451647)) - (i32.add (i32.const -732064119)) - (i32.add (i32.const -1905019079)) - (i32.add (i32.const 1763013951)) - (i32.add (i32.const -1726701788)) - (i32.add (i32.const -1124552182)) - (i32.add (i32.const -443178368)) - (i32.add (i32.const -1636529991)) - (i32.add (i32.const -225461615)) - (i32.add (i32.const 565165751)) - (i32.add (i32.const 278647837)) - (i32.add (i32.const -1777227173)) - (i32.add (i32.const 566816963)) - (i32.add (i32.const -829537830)) - (i32.add (i32.const 1745260873)) - (i32.add (i32.const -2097313574)) - (i32.add (i32.const 1078563631)) - (i32.add (i32.const 2043853772)) - (i32.add (i32.const -435294605)) - (i32.add (i32.const -487798809)) - (i32.add (i32.const 1541077270)) - (i32.add (i32.const 1030622720)) - (i32.add (i32.const -1699018565)) - (i32.add (i32.const -62155778)) - (i32.add (i32.const -698397040)) - (i32.add (i32.const -651059544)) - (i32.add (i32.const -837583594)) - (i32.add (i32.const -186065657)) - (i32.add (i32.const 2065044902)) - (i32.add (i32.const 1045752341)) - (i32.add (i32.const 1977512008)) - (i32.add (i32.const 1287288954)) - (i32.add (i32.const -1509167620)) - (i32.add (i32.const -469937114)) - (i32.add (i32.const -1452363043)) - (i32.add (i32.const 622388988)) - (i32.add (i32.const -391058742)) - (i32.add (i32.const -1481575797)) - (i32.add (i32.const 1414012142)) - (i32.add (i32.const -626895247)) - (i32.add (i32.const 938004276)) - (i32.add (i32.const 1690355836)) - (i32.add (i32.const -1818915959)) - (i32.add (i32.const -1169666696)) - (i32.add (i32.const -1516251782)) - (i32.add (i32.const -1154326883)) - (i32.add (i32.const -1825034168)) - (i32.add (i32.const 567580588)) - (i32.add (i32.const 752384655)) - (i32.add (i32.const -558868395)) - (i32.add (i32.const -254267488)) - (i32.add (i32.const 562676945)) - (i32.add (i32.const 1402419285)) - (i32.add (i32.const 1716888720)) - (i32.add (i32.const -1181992583)) - (i32.add (i32.const 1756034162)) - (i32.add (i32.const 492845328)) - (i32.add (i32.const 89677429)) - (i32.add (i32.const -149760127)) - (i32.add (i32.const 1832567204)) - (i32.add (i32.const -743455901)) - (i32.add (i32.const -762547065)) - (i32.add (i32.const -1888913297)) - (i32.add (i32.const -579625833)) - (i32.add (i32.const -2016141999)) - (i32.add (i32.const 663726741)) - (i32.add (i32.const -773245147)) - (i32.add (i32.const -705528113)) - (i32.add (i32.const -1750579832)) - (i32.add (i32.const 1528409596)) - (i32.add (i32.const -858117264)) - (i32.add (i32.const -685587716)) - (i32.add (i32.const -1045548664)) - (i32.add (i32.const -1957554351)) - (i32.add (i32.const -350796956)) - (i32.add (i32.const -22350816)) - (i32.add (i32.const -2110526651)) - (i32.add (i32.const -830155181)) - (i32.add (i32.const 244995611)) - (i32.add (i32.const 1799292908)) - (i32.add (i32.const -718254194)) - (i32.add (i32.const 303385517)) - (i32.add (i32.const 2109107987)) - (i32.add (i32.const -2022414891)) - (i32.add (i32.const -1627503222)) - (i32.add (i32.const -1426776889)) - (i32.add (i32.const 1278259762)) - (i32.add (i32.const -1233926301)) - (i32.add (i32.const -380624438)) - (i32.add (i32.const 532242728)) - (i32.add (i32.const -425449889)) - (i32.add (i32.const -398903537)) - (i32.add (i32.const 1279542826)) - (i32.add (i32.const -1061066762)) - (i32.add (i32.const 1026701426)) - (i32.add (i32.const -1537593951)) - (i32.add (i32.const 1201279933)) - (i32.add (i32.const -470581829)) - (i32.add (i32.const 33862576)) - (i32.add (i32.const -2099975261)) - (i32.add (i32.const -208331973)) - (i32.add (i32.const -1002011727)) - (i32.add (i32.const -1724710638)) - (i32.add (i32.const 1004453003)) - (i32.add (i32.const -601790224)) - (i32.add (i32.const 728829158)) - (i32.add (i32.const 1185670369)) - (i32.add (i32.const 2118083238)) - (i32.add (i32.const 1295808029)) - (i32.add (i32.const -620570144)) - (i32.add (i32.const 1617564460)) - (i32.add (i32.const -720554669)) - (i32.add (i32.const -458139520)) - (i32.add (i32.const -165709774)) - (i32.add (i32.const 2092421889)) - (i32.add (i32.const 1704915197)) - (i32.add (i32.const -1550031038)) - (i32.add (i32.const 156555538)) - (i32.add (i32.const -443440644)) - (i32.add (i32.const 367165041)) - (i32.add (i32.const -1184517567)) - (i32.add (i32.const 356040809)) - (i32.add (i32.const 1810842323)) - (i32.add (i32.const 2062236635)) - (i32.add (i32.const 1686199291)) - (i32.add (i32.const -264032873)) - (i32.add (i32.const -347556986)) - (i32.add (i32.const -129747353)) - (i32.add (i32.const 757374609)) - (i32.add (i32.const -1859306698)) - (i32.add (i32.const 1590528112)) - (i32.add (i32.const 353031322)) - (i32.add (i32.const -444069532)) - (i32.add (i32.const -1998646100)) - (i32.add (i32.const -470300023)) - (i32.add (i32.const -523451103)) - (i32.add (i32.const 1404535016)) - (i32.add (i32.const -242797784)) - (i32.add (i32.const 2136656985)) - (i32.add (i32.const -276909040)) - (i32.add (i32.const 295127003)) - (i32.add (i32.const 1332887942)) - (i32.add (i32.const 1284614040)) - (i32.add (i32.const -1480227275)) - (i32.add (i32.const 1944681808)) - (i32.add (i32.const -924788662)) - (i32.add (i32.const -1303926453)) - (i32.add (i32.const -1173963169)) - (i32.add (i32.const -509659692)) - (i32.add (i32.const -391579803)) - (i32.add (i32.const 1840729132)) - (i32.add (i32.const -1608685376)) - (i32.add (i32.const -1774411761)) - (i32.add (i32.const 1832889622)) - (i32.add (i32.const 971012088)) - (i32.add (i32.const 500544255)) - (i32.add (i32.const -1163653694)) - (i32.add (i32.const 1708947165)) - (i32.add (i32.const 921636240)) - (i32.add (i32.const 1162411917)) - (i32.add (i32.const 1569480331)) - (i32.add (i32.const -1437359373)) - (i32.add (i32.const 1231478794)) - (i32.add (i32.const 419920181)) - (i32.add (i32.const 2093426352)) - (i32.add (i32.const 607378867)) - (i32.add (i32.const -1678102212)) - (i32.add (i32.const -1765898663)) - (i32.add (i32.const 923497471)) - (i32.add (i32.const -1537454447)) - (i32.add (i32.const 1546814983)) - (i32.add (i32.const 2104208310)) - (i32.add (i32.const 1145810213)) - (i32.add (i32.const 303490567)) - (i32.add (i32.const -2003903060)) - (i32.add (i32.const 1494390011)) - (i32.add (i32.const 1884251707)) - (i32.add (i32.const 1000194173)) - (i32.add (i32.const -880402854)) - (i32.add (i32.const -411846985)) - (i32.add (i32.const -385158295)) - (i32.add (i32.const -1872747930)) - (i32.add (i32.const -116836511)) - (i32.add (i32.const 1945932888)) - (i32.add (i32.const 1354372328)) - (i32.add (i32.const 1560120340)) - (i32.add (i32.const -617394409)) - (i32.add (i32.const 332634400)) - (i32.add (i32.const 1392609750)) - (i32.add (i32.const -816956019)) - (i32.add (i32.const -877509500)) - (i32.add (i32.const -2120589293)) - (i32.add (i32.const -1080478130)) - (i32.add (i32.const 1106180183)) - (i32.add (i32.const 1639215678)) - (i32.add (i32.const 498407531)) - (i32.add (i32.const -1924514378)) - (i32.add (i32.const -1661160357)) - (i32.add (i32.const 973530063)) - (i32.add (i32.const 2032257200)) - (i32.add (i32.const -1277636036)) - (i32.add (i32.const -1786435140)) - (i32.add (i32.const -2141933167)) - (i32.add (i32.const 1334420633)) - (i32.add (i32.const -1689172207)) - (i32.add (i32.const -842411690)) - (i32.add (i32.const 1354328385)) - (i32.add (i32.const 1375083472)) - (i32.add (i32.const -1196768754)) - (i32.add (i32.const 2090028846)) - (i32.add (i32.const 194393267)) - (i32.add (i32.const 1122342319)) - (i32.add (i32.const -1920760235)) - (i32.add (i32.const 924069648)) - (i32.add (i32.const 806921655)) - (i32.add (i32.const -1744964273)) - (i32.add (i32.const 289688347)) - (i32.add (i32.const 964438358)) - (i32.add (i32.const -1838844059)) - (i32.add (i32.const -1783696424)) - (i32.add (i32.const -785246926)) - (i32.add (i32.const -1443780335)) - (i32.add (i32.const 240495321)) - (i32.add (i32.const -567479738)) - (i32.add (i32.const -2079707200)) - (i32.add (i32.const 532530678)) - (i32.add (i32.const -2016942046)) - (i32.add (i32.const -1949899641)) - (i32.add (i32.const 1058208614)) - (i32.add (i32.const 992259690)) - (i32.add (i32.const -1332877674)) - (i32.add (i32.const -2072843628)) - (i32.add (i32.const 1445904481)) - (i32.add (i32.const 91936559)) - (i32.add (i32.const 723345677)) - (i32.add (i32.const 1702239153)) - (i32.add (i32.const -1373781737)) - (i32.add (i32.const 254105323)) - (i32.add (i32.const 1340522664)) - (i32.add (i32.const 1854396472)) - (i32.add (i32.const 635678030)) - (i32.add (i32.const -861966413)) - (i32.add (i32.const -1740534964)) - (i32.add (i32.const 1983572834)) - (i32.add (i32.const -1728265720)) - (i32.add (i32.const -1750156150)) - (i32.add (i32.const -174998476)) - (i32.add (i32.const 1248674741)) - (i32.add (i32.const 1184926306)) - (i32.add (i32.const -545451763)) - (i32.add (i32.const 211455455)) - (i32.add (i32.const -174946727)) - (i32.add (i32.const -1977055778)) - (i32.add (i32.const 1113689726)) - (i32.add (i32.const -123585965)) - (i32.add (i32.const 1237311596)) - (i32.add (i32.const -1503715612)) - (i32.add (i32.const 2118694683)) - (i32.add (i32.const 524299732)) - (i32.add (i32.const -1985188837)) - (i32.add (i32.const -491578392)) - (i32.add (i32.const 1689057676)) - (i32.add (i32.const -34295463)) - (i32.add (i32.const -2137395596)) - (i32.add (i32.const -348231201)) - (i32.add (i32.const -1281944743)) - (i32.add (i32.const -1107296137)) - (i32.add (i32.const -14798233)) - (i32.add (i32.const -1675964634)) - (i32.add (i32.const -761305571)) - (i32.add (i32.const -1606968734)) - (i32.add (i32.const -1747189334)) - (i32.add (i32.const 1146735670)) - (i32.add (i32.const -1415923738)) - (i32.add (i32.const 65697308)) - (i32.add (i32.const 1258506349)) - (i32.add (i32.const -1807495923)) - (i32.add (i32.const 1509879797)) - (i32.add (i32.const -1144112181)) - (i32.add (i32.const 1580986366)) - (i32.add (i32.const 2056069013)) - (i32.add (i32.const -293806550)) - (i32.add (i32.const 975327032)) - (i32.add (i32.const 1623230115)) - (i32.add (i32.const -850766522)) - (i32.add (i32.const 1154715090)) - (i32.add (i32.const -698769301)) - (i32.add (i32.const -497821925)) - (i32.add (i32.const 843636830)) - (i32.add (i32.const 1605853386)) - (i32.add (i32.const 834771442)) - (i32.add (i32.const -1155207439)) - (i32.add (i32.const 1566699265)) - (i32.add (i32.const -591342542)) - (i32.add (i32.const 806140881)) - (i32.add (i32.const 1493245820)) - (i32.add (i32.const -596382033)) - (i32.add (i32.const -2084080868)) - (i32.add (i32.const 1850308851)) - (i32.add (i32.const 1633471424)) - (i32.add (i32.const -1779122373)) - (i32.add (i32.const -1527834867)) - (i32.add (i32.const 1409108249)) - (i32.add (i32.const -359426997)) - (i32.add (i32.const -1609663934)) - (i32.add (i32.const 1242300535)) - (i32.add (i32.const -46185955)) - (i32.add (i32.const 1881118495)) - (i32.add (i32.const 112084787)) - (i32.add (i32.const 1453639104)) - (i32.add (i32.const -97899573)) - (i32.add (i32.const -986951663)) - (i32.add (i32.const -2069117311)) - (i32.add (i32.const 1895606201)) - (i32.add (i32.const -416344926)) - (i32.add (i32.const -1959961568)) - (i32.add (i32.const -919250591)) - (i32.add (i32.const 258821452)) - (i32.add (i32.const -261167114)) - (i32.add (i32.const -1429790759)) - (i32.add (i32.const 1740030748)) - (i32.add (i32.const -2008478413)) - (i32.add (i32.const -1740035703)) - (i32.add (i32.const -1582346433)) - (i32.add (i32.const 1768700568)) - (i32.add (i32.const -1782979056)) - (i32.add (i32.const -1504446115)) - (i32.add (i32.const 2044337746)) - (i32.add (i32.const -204795682)) - (i32.add (i32.const -547654737)) - (i32.add (i32.const 1240688447)) - (i32.add (i32.const -1002986536)) - (i32.add (i32.const -207510373)) - (i32.add (i32.const 1551395683)) - (i32.add (i32.const -1285942082)) - (i32.add (i32.const 346928178)) - (i32.add (i32.const -1296340897)) - (i32.add (i32.const 967350127)) - (i32.add (i32.const -1029112770)) - (i32.add (i32.const -2120805290)) - (i32.add (i32.const -957354291)) - (i32.add (i32.const -2121203506)) - (i32.add (i32.const -757377983)) - (i32.add (i32.const 1097867708)) - (i32.add (i32.const 1785160927)) - (i32.add (i32.const -2033661254)) - (i32.add (i32.const 100592971)) - (i32.add (i32.const 1019255448)) - (i32.add (i32.const -1687074046)) - (i32.add (i32.const -1663640966)) - (i32.add (i32.const -654089458)) - (i32.add (i32.const -1984798222)) - (i32.add (i32.const 804158769)) - (i32.add (i32.const -1695027867)) - (i32.add (i32.const -279222936)) - (i32.add (i32.const 1765528601)) - (i32.add (i32.const 1402156720)) - (i32.add (i32.const -2127077832)) - (i32.add (i32.const -850568145)) - (i32.add (i32.const -35024397)) - (i32.add (i32.const -633856797)) - (i32.add (i32.const 1721466237)) - (i32.add (i32.const -347378039)) - (i32.add (i32.const 1389819779)) - (i32.add (i32.const -515539191)) - (i32.add (i32.const 1425913016)) - (i32.add (i32.const -898000639)) - (i32.add (i32.const 1441447293)) - (i32.add (i32.const 1322379714)) - (i32.add (i32.const -820993951)) - (i32.add (i32.const 1026405450)) - (i32.add (i32.const 295478902)) - (i32.add (i32.const 980815318)) - (i32.add (i32.const 1769162769)) - (i32.add (i32.const -1641066826)) - (i32.add (i32.const 29675115)) - (i32.add (i32.const -641078106)) - (i32.add (i32.const 1113627112)) - (i32.add (i32.const -922230713)) - (i32.add (i32.const 1409770103)) - (i32.add (i32.const 1267206403)) - (i32.add (i32.const -921745666)) - (i32.add (i32.const -268746078)) - (i32.add (i32.const -1838825951)) - (i32.add (i32.const -266815748)) - (i32.add (i32.const -1596476904)) - (i32.add (i32.const 2136936903)) - (i32.add (i32.const -692111620)) - (i32.add (i32.const 2044154013)) - (i32.add (i32.const -1458776161)) - (i32.add (i32.const 2108097837)) - (i32.add (i32.const 1291411545)) - (i32.add (i32.const -787125127)) - (i32.add (i32.const 716570754)) - (i32.add (i32.const 1936218622)) - (i32.add (i32.const -413043254)) - (i32.add (i32.const -1822648934)) - (i32.add (i32.const 289976773)) - (i32.add (i32.const -110200840)) - (i32.add (i32.const -2097250688)) - (i32.add (i32.const -1914672411)) - (i32.add (i32.const -1383675733)) - (i32.add (i32.const 1147761382)) - (i32.add (i32.const -2000836436)) - (i32.add (i32.const -1139405580)) - (i32.add (i32.const 314178847)) - (i32.add (i32.const -86794208)) - (i32.add (i32.const 1041798673)) - (i32.add (i32.const -1207405095)) - (i32.add (i32.const -1517920780)) - (i32.add (i32.const 1177567260)) - (i32.add (i32.const -1865972371)) - (i32.add (i32.const -1428552323)) - (i32.add (i32.const 1568755369)) - (i32.add (i32.const 1193907896)) - (i32.add (i32.const -836699281)) - (i32.add (i32.const -1447339882)) - (i32.add (i32.const -1429864719)) - (i32.add (i32.const 313206532)) - (i32.add (i32.const -969754153)) - (i32.add (i32.const -1837756530)) - (i32.add (i32.const -1661657305)) - (i32.add (i32.const 1972376395)) - (i32.add (i32.const 1208406458)) - (i32.add (i32.const -1605917569)) - (i32.add (i32.const -72880615)) - (i32.add (i32.const 491022397)) - (i32.add (i32.const -625504539)) - (i32.add (i32.const 1056542497)) - (i32.add (i32.const 1259187795)) - (i32.add (i32.const 937930846)) - (i32.add (i32.const 869957678)) - (i32.add (i32.const -1819399851)) - (i32.add (i32.const -327564007)) - (i32.add (i32.const 1529955267)) - (i32.add (i32.const -421065728)) - (i32.add (i32.const -1555621399)) - (i32.add (i32.const 639066532)) - (i32.add (i32.const -2073371719)) - (i32.add (i32.const -1223703218)) - (i32.add (i32.const -1908476355)) - (i32.add (i32.const -195534321)) - (i32.add (i32.const -1772530116)) - (i32.add (i32.const -2105813605)) - (i32.add (i32.const 398740426)) - (i32.add (i32.const 1235507000)) - (i32.add (i32.const -250372478)) - (i32.add (i32.const -318964384)) - (i32.add (i32.const -581629924)) - (i32.add (i32.const 1749198393)) - (i32.add (i32.const -2072218411)) - (i32.add (i32.const 1932562902)) - (i32.add (i32.const -871754451)) - (i32.add (i32.const 599202986)) - (i32.add (i32.const -1158512456)) - (i32.add (i32.const -1882880269)) - (i32.add (i32.const -1562346517)) - (i32.add (i32.const 2116868671)) - (i32.add (i32.const -1194922430)) - (i32.add (i32.const -121131285)) - (i32.add (i32.const -684832691)) - (i32.add (i32.const 628710109)) - (i32.add (i32.const 1949102733)) - (i32.add (i32.const 1251336064)) - (i32.add (i32.const -2132784920)) - (i32.add (i32.const 1854667384)) - (i32.add (i32.const -740788545)) - (i32.add (i32.const -671107867)) - (i32.add (i32.const -544945863)) - (i32.add (i32.const 319123035)) - (i32.add (i32.const -488142453)) - (i32.add (i32.const 1836597283)) - (i32.add (i32.const -1230400082)) - (i32.add (i32.const 1569285749)) - (i32.add (i32.const 54348060)) - (i32.add (i32.const -1829766378)) - (i32.add (i32.const -1424697569)) - (i32.add (i32.const -48633597)) - (i32.add (i32.const 481235734)) - (i32.add (i32.const -705930432)) - (i32.add (i32.const 753949116)) - (i32.add (i32.const 471862297)) - (i32.add (i32.const 1639933031)) - (i32.add (i32.const -581931010)) - (i32.add (i32.const 596146024)) - (i32.add (i32.const -927686465)) - (i32.add (i32.const -1650875340)) - (i32.add (i32.const -1496622441)) - (i32.add (i32.const -1584243189)) - (i32.add (i32.const 2112584333)) - (i32.add (i32.const 905604444)) - (i32.add (i32.const -1425356251)) - (i32.add (i32.const 1046371356)) - (i32.add (i32.const 781979348)) - (i32.add (i32.const 1578040039)) - (i32.add (i32.const 1029247356)) - (i32.add (i32.const -2091697457)) - (i32.add (i32.const -2125618610)) - (i32.add (i32.const 1919474272)) - (i32.add (i32.const 2072048136)) - (i32.add (i32.const 1034069838)) - (i32.add (i32.const -228301834)) - (i32.add (i32.const 1495108344)) - (i32.add (i32.const 1287522914)) - (i32.add (i32.const -1995198395)) - (i32.add (i32.const -80701693)) - (i32.add (i32.const -404229190)) - (i32.add (i32.const 1027051863)) - (i32.add (i32.const -1293786243)) - (i32.add (i32.const 875066764)) - (i32.add (i32.const -559444680)) - (i32.add (i32.const -557364105)) - (i32.add (i32.const -1088257455)) - (i32.add (i32.const -557885677)) - (i32.add (i32.const 1566570580)) - (i32.add (i32.const 645372295)) - (i32.add (i32.const 1846130214)) - (i32.add (i32.const -1595683948)) - (i32.add (i32.const -392580323)) - (i32.add (i32.const 579011456)) - (i32.add (i32.const -451621491)) - (i32.add (i32.const -1807543901)) - (i32.add (i32.const -1436732277)) - (i32.add (i32.const -2065667683)) - (i32.add (i32.const 1176522375)) - (i32.add (i32.const -1511303811)) - (i32.add (i32.const -730621217)) - (i32.add (i32.const 171046822)) - (i32.add (i32.const -1329412207)) - (i32.add (i32.const 1553250679)) - (i32.add (i32.const -1989789497)) - (i32.add (i32.const 136092462)) - (i32.add (i32.const -1938485859)) - (i32.add (i32.const -924953701)) - (i32.add (i32.const 416925897)) - (i32.add (i32.const -1618865267)) - (i32.add (i32.const -1251755604)) - (i32.add (i32.const 504960407)) - (i32.add (i32.const -1816235638)) - (i32.add (i32.const -1870782547)) - (i32.add (i32.const -1295861231)) - (i32.add (i32.const -577896406)) - (i32.add (i32.const -755194016)) - (i32.add (i32.const 2098015211)) - (i32.add (i32.const 1460483097)) - (i32.add (i32.const 1640913021)) - (i32.add (i32.const 17381983)) - (i32.add (i32.const -1176676249)) - (i32.add (i32.const -1381637365)) - (i32.add (i32.const 1881104310)) - (i32.add (i32.const 1090750363)) - (i32.add (i32.const -656620783)) - (i32.add (i32.const 993745837)) - (i32.add (i32.const -1655868146)) - (i32.add (i32.const 665423831)) - (i32.add (i32.const -699977820)) - (i32.add (i32.const -2091490259)) - (i32.add (i32.const 1846904885)) - (i32.add (i32.const 1733348011)) - (i32.add (i32.const -1778518927)) - (i32.add (i32.const 706670347)) - (i32.add (i32.const -1198841459)) - (i32.add (i32.const -1648934262)) - (i32.add (i32.const 2093513336)) - (i32.add (i32.const 411316372)) - (i32.add (i32.const 450344240)) - (i32.add (i32.const -11333505)) - (i32.add (i32.const -1460210077)) - (i32.add (i32.const -942258584)) - (i32.add (i32.const -268381863)) - (i32.add (i32.const -640995650)) - (i32.add (i32.const 1073500854)) - (i32.add (i32.const -783320015)) - (i32.add (i32.const 944548541)) - (i32.add (i32.const -52154930)) - (i32.add (i32.const 1038620560)) - (i32.add (i32.const 680165760)) - (i32.add (i32.const 1068185438)) - (i32.add (i32.const -174175743)) - (i32.add (i32.const 433701639)) - (i32.add (i32.const 1052433270)) - (i32.add (i32.const 2045870521)) - (i32.add (i32.const -1305755990)) - (i32.add (i32.const -731284234)) - (i32.add (i32.const 1828792271)) - (i32.add (i32.const -380564974)) - (i32.add (i32.const -1771266885)) - (i32.add (i32.const -389454529)) - (i32.add (i32.const 848127689)) - (i32.add (i32.const -8489705)) - (i32.add (i32.const -645884768)) - (i32.add (i32.const 611064547)) - (i32.add (i32.const 833428812)) - (i32.add (i32.const -594146779)) - (i32.add (i32.const -1978599899)) - (i32.add (i32.const -401554532)) - (i32.add (i32.const 675444103)) - (i32.add (i32.const -1395806526)) - (i32.add (i32.const -947758857)) - (i32.add (i32.const -1003509577)) - (i32.add (i32.const 1296221024)) - (i32.add (i32.const -1186865620)) - (i32.add (i32.const -327635861)) - (i32.add (i32.const -2145187065)) - (i32.add (i32.const 401834169)) - (i32.add (i32.const 95043256)) - (i32.add (i32.const -58747100)) - (i32.add (i32.const 1563082410)) - (i32.add (i32.const -1611417332)) - (i32.add (i32.const 1240709754)) - (i32.add (i32.const 174412520)) - (i32.add (i32.const 1310958639)) - (i32.add (i32.const 1368731862)) - (i32.add (i32.const 694964092)) - (i32.add (i32.const -556704119)) - (i32.add (i32.const -2065741845)) - (i32.add (i32.const 1177418280)) - (i32.add (i32.const 309040745)) - (i32.add (i32.const -1562192595)) - (i32.add (i32.const -1177085171)) - (i32.add (i32.const 2027231597)) - (i32.add (i32.const -228691212)) - (i32.add (i32.const 1531642185)) - (i32.add (i32.const 1075599743)) - (i32.add (i32.const -490090855)) - (i32.add (i32.const -1556435680)) - (i32.add (i32.const 523474761)) - (i32.add (i32.const -144585363)) - (i32.add (i32.const 822021993)) - (i32.add (i32.const 1278729674)) - (i32.add (i32.const 2099198072)) - (i32.add (i32.const -1722786720)) - (i32.add (i32.const -1753258127)) - (i32.add (i32.const 1769296154)) - (i32.add (i32.const -953764912)) - (i32.add (i32.const -1535397080)) - (i32.add (i32.const 1222055115)) - (i32.add (i32.const -776467927)) - (i32.add (i32.const -114560794)) - (i32.add (i32.const 1008317147)) - (i32.add (i32.const 1245460272)) - (i32.add (i32.const 382024700)) - (i32.add (i32.const -1562462862)) - (i32.add (i32.const -7841511)) - (i32.add (i32.const -1983131057)) - (i32.add (i32.const -2093346993)) - (i32.add (i32.const -1018948717)) - (i32.add (i32.const 167749710)) - (i32.add (i32.const -1691007220)) - (i32.add (i32.const 289287753)) - (i32.add (i32.const 46156408)) - (i32.add (i32.const 150574350)) - (i32.add (i32.const -1816278443)) - (i32.add (i32.const -2143248263)) - (i32.add (i32.const 1070312053)) - (i32.add (i32.const -2142700860)) - (i32.add (i32.const -931605636)) - (i32.add (i32.const -1596017876)) - (i32.add (i32.const -433008385)) - (i32.add (i32.const 1555625890)) - (i32.add (i32.const 1815658790)) - (i32.add (i32.const -1694656189)) - (i32.add (i32.const 1703414742)) - (i32.add (i32.const -2028351905)) - (i32.add (i32.const 247808864)) - (i32.add (i32.const -1330840941)) - (i32.add (i32.const 435584597)) - (i32.add (i32.const 906375317)) - (i32.add (i32.const 1753955809)) - (i32.add (i32.const 1221165117)) - (i32.add (i32.const 370174654)) - (i32.add (i32.const -1632563658)) - (i32.add (i32.const -1848216271)) - (i32.add (i32.const -2061385032)) - (i32.add (i32.const 390573096)) - (i32.add (i32.const -198400479)) - (i32.add (i32.const -1044588663)) - (i32.add (i32.const 494108556)) - (i32.add (i32.const 1571225107)) - (i32.add (i32.const -2137860023)) - (i32.add (i32.const -1200767554)) - (i32.add (i32.const -352297675)) - (i32.add (i32.const 1527909666)) - (i32.add (i32.const 1801302662)) - (i32.add (i32.const 116501281)) - (i32.add (i32.const -1545128125)) - (i32.add (i32.const 942123517)) - (i32.add (i32.const -187466885)) - (i32.add (i32.const 714487794)) - (i32.add (i32.const -1880021496)) - (i32.add (i32.const -1826069368)) - (i32.add (i32.const 188044652)) - (i32.add (i32.const 493760998)) - (i32.add (i32.const -982875784)) - (i32.add (i32.const 1861917725)) - (i32.add (i32.const -1204409981)) - (i32.add (i32.const 1189841660)) - (i32.add (i32.const -1115174553)) - (i32.add (i32.const -633228398)) - (i32.add (i32.const 1770841215)) - (i32.add (i32.const 420554118)) - (i32.add (i32.const -244759794)) - (i32.add (i32.const -337821140)) - (i32.add (i32.const 384159013)) - (i32.add (i32.const -226367259)) - (i32.add (i32.const -1381323141)) - (i32.add (i32.const 1072395814)) - (i32.add (i32.const 145788931)) - (i32.add (i32.const 1130027806)) - (i32.add (i32.const -1626559942)) - (i32.add (i32.const 766623909)) - (i32.add (i32.const -1379390459)) - (i32.add (i32.const -118935399)) - (i32.add (i32.const 2074279113)) - (i32.add (i32.const 960122398)) - (i32.add (i32.const 1771150364)) - (i32.add (i32.const 131268319)) - (i32.add (i32.const -192012359)) - (i32.add (i32.const -191783779)) - (i32.add (i32.const 1106136845)) - (i32.add (i32.const 1457300435)) - (i32.add (i32.const 641701386)) - (i32.add (i32.const 635584538)) - (i32.add (i32.const 84053696)) - (i32.add (i32.const -1055001826)) - (i32.add (i32.const 506246196)) - (i32.add (i32.const 509478800)) - (i32.add (i32.const -889967495)) - (i32.add (i32.const 1064969635)) - (i32.add (i32.const 1487107300)) - (i32.add (i32.const 133878590)) - (i32.add (i32.const -1246264217)) - (i32.add (i32.const -388413642)) - (i32.add (i32.const 556148503)) - (i32.add (i32.const -1754847340)) - (i32.add (i32.const -267859403)) - (i32.add (i32.const -1189331639)) - (i32.add (i32.const 1369380572)) - (i32.add (i32.const 1189952783)) - (i32.add (i32.const -376013112)) - (i32.add (i32.const 336376612)) - (i32.add (i32.const 1231317215)) - (i32.add (i32.const 835066437)) - (i32.add (i32.const -1867943073)) - (i32.add (i32.const 707644670)) - (i32.add (i32.const -43150534)) - (i32.add (i32.const -1708068505)) - (i32.add (i32.const -1630236927)) - (i32.add (i32.const 1097570137)) - (i32.add (i32.const 1039053987)) - (i32.add (i32.const -1452943264)) - (i32.add (i32.const -1545325094)) - (i32.add (i32.const 2005906079)) - (i32.add (i32.const -297789290)) - (i32.add (i32.const 1041901988)) - (i32.add (i32.const 4351490)) - (i32.add (i32.const -1504549723)) - (i32.add (i32.const 55399503)) - (i32.add (i32.const 167018688)) - (i32.add (i32.const -890083535)) - (i32.add (i32.const -1194843210)) - (i32.add (i32.const 768716308)) - (i32.add (i32.const -1441652185)) - (i32.add (i32.const 932148217)) - (i32.add (i32.const 140777379)) - (i32.add (i32.const 939351256)) - (i32.add (i32.const 386703147)) - (i32.add (i32.const 904357109)) - (i32.add (i32.const -450799341)) - (i32.add (i32.const -1079552524)) - (i32.add (i32.const -1221352930)) - (i32.add (i32.const -348151235)) - (i32.add (i32.const 1923187360)) - (i32.add (i32.const 182746434)) - (i32.add (i32.const -1407594857)) - (i32.add (i32.const -664483799)) - (i32.add (i32.const -10413231)) - (i32.add (i32.const -1773474670)) - (i32.add (i32.const 1045483649)) - (i32.add (i32.const -2064202982)) - (i32.add (i32.const -1089758992)) - (i32.add (i32.const -322237797)) - (i32.add (i32.const -1103015238)) - (i32.add (i32.const 1801275353)) - (i32.add (i32.const -136793840)) - (i32.add (i32.const -318747393)) - (i32.add (i32.const -1631088856)) - (i32.add (i32.const -931302022)) - (i32.add (i32.const 20391101)) - (i32.add (i32.const -2102803790)) - (i32.add (i32.const -276984917)) - (i32.add (i32.const 713831347)) - (i32.add (i32.const -1627103239)) - (i32.add (i32.const 2055937466)) - (i32.add (i32.const -1422309522)) - (i32.add (i32.const -24751553)) - (i32.add (i32.const 492486073)) - (i32.add (i32.const 397744865)) - (i32.add (i32.const -1752698206)) - (i32.add (i32.const -1418432127)) - (i32.add (i32.const -528629389)) - (i32.add (i32.const -1378229092)) - (i32.add (i32.const -410470005)) - (i32.add (i32.const -659186268)) - (i32.add (i32.const 2131122773)) - (i32.add (i32.const 1827187320)) - (i32.add (i32.const -2062845985)) - (i32.add (i32.const 791620088)) - (i32.add (i32.const 1595593419)) - (i32.add (i32.const 2055802713)) - (i32.add (i32.const -1764630318)) - (i32.add (i32.const -1866052031)) - (i32.add (i32.const -1876038654)) - (i32.add (i32.const -652581486)) - (i32.add (i32.const -1623446327)) - (i32.add (i32.const -675082909)) - (i32.add (i32.const 1480159422)) - (i32.add (i32.const 2085846655)) - (i32.add (i32.const 1125408897)) - (i32.add (i32.const 755501310)) - (i32.add (i32.const 189819572)) - (i32.add (i32.const -1675710174)) - (i32.add (i32.const 1458713092)) - (i32.add (i32.const -1815680764)) - (i32.add (i32.const 1935143268)) - (i32.add (i32.const -1051524845)) - (i32.add (i32.const -1638391905)) - (i32.add (i32.const -846378777)) - (i32.add (i32.const 1327173235)) - (i32.add (i32.const 884061048)) - (i32.add (i32.const -184310464)) - (i32.add (i32.const -288212162)) - (i32.add (i32.const -1055322411)) - (i32.add (i32.const 297247640)) - (i32.add (i32.const 1132914363)) - (i32.add (i32.const -1807293131)) - (i32.add (i32.const 846618290)) - (i32.add (i32.const -647377294)) - (i32.add (i32.const 1996632927)) - (i32.add (i32.const 232005306)) - (i32.add (i32.const -173891953)) - (i32.add (i32.const 410250962)) - (i32.add (i32.const 1679756372)) - (i32.add (i32.const 1239385790)) - (i32.add (i32.const 118397817)) - (i32.add (i32.const 916143876)) - (i32.add (i32.const 1664583893)) - (i32.add (i32.const -1534157632)) - (i32.add (i32.const -877107324)) - (i32.add (i32.const 1995963814)) - (i32.add (i32.const 2087761919)) - (i32.add (i32.const -169495823)) - (i32.add (i32.const 1558885947)) - (i32.add (i32.const 58930843)) - (i32.add (i32.const -324238678)) - (i32.add (i32.const -1387228025)) - (i32.add (i32.const 1385426520)) - (i32.add (i32.const -1678306011)) - (i32.add (i32.const 1501095721)) - (i32.add (i32.const -1315147732)) - (i32.add (i32.const -254628817)) - (i32.add (i32.const 1685330896)) - (i32.add (i32.const 60729077)) - (i32.add (i32.const 1532161426)) - (i32.add (i32.const -914588928)) - (i32.add (i32.const 1391596187)) - (i32.add (i32.const -1200053488)) - (i32.add (i32.const -61769886)) - (i32.add (i32.const -1025273497)) - (i32.add (i32.const -1397742032)) - (i32.add (i32.const 1854571987)) - (i32.add (i32.const 223568185)) - (i32.add (i32.const -325730449)) - (i32.add (i32.const -1847910516)) - (i32.add (i32.const 778534957)) - (i32.add (i32.const 430059179)) - (i32.add (i32.const -325230949)) - (i32.add (i32.const 1902121859)) - (i32.add (i32.const 2089535941)) - (i32.add (i32.const -1332898442)) - (i32.add (i32.const -416637608)) - (i32.add (i32.const -1175500448)) - (i32.add (i32.const 99017682)) - (i32.add (i32.const 1679570987)) - (i32.add (i32.const -850143843)) - (i32.add (i32.const -943119589)) - (i32.add (i32.const 85798669)) - (i32.add (i32.const -852577833)) - (i32.add (i32.const -1467218664)) - (i32.add (i32.const -130721576)) - (i32.add (i32.const 1128532049)) - (i32.add (i32.const 1082842557)) - (i32.add (i32.const -941058707)) - (i32.add (i32.const 1756167502)) - (i32.add (i32.const 2050183610)) - (i32.add (i32.const 1313877068)) - (i32.add (i32.const -1152634255)) - (i32.add (i32.const -282540278)) - (i32.add (i32.const 404802447)) - (i32.add (i32.const -1565319655)) - (i32.add (i32.const -450908360)) - (i32.add (i32.const 246061396)) - (i32.add (i32.const 1738710278)) - (i32.add (i32.const -1357758577)) - (i32.add (i32.const 1121131098)) - (i32.add (i32.const 683345538)) - (i32.add (i32.const -461863162)) - (i32.add (i32.const -1889226327)) - (i32.add (i32.const 1751695999)) - (i32.add (i32.const 982763994)) - (i32.add (i32.const 585984341)) - (i32.add (i32.const -382132253)) - (i32.add (i32.const 1320040406)) - (i32.add (i32.const -481568130)) - (i32.add (i32.const -912325238)) - (i32.add (i32.const 1962019320)) - (i32.add (i32.const -1677915700)) - (i32.add (i32.const 1391701017)) - (i32.add (i32.const -209516273)) - (i32.add (i32.const -1808538949)) - (i32.add (i32.const -285597921)) - (i32.add (i32.const 69216851)) - (i32.add (i32.const -84480087)) - (i32.add (i32.const -502423137)) - (i32.add (i32.const -1599178848)) - (i32.add (i32.const 1506340284)) - (i32.add (i32.const 644239474)) - (i32.add (i32.const 1254030061)) - (i32.add (i32.const 1514863754)) - (i32.add (i32.const -871157112)) - (i32.add (i32.const -977456589)) - (i32.add (i32.const 1856338678)) - (i32.add (i32.const 1607081072)) - (i32.add (i32.const -1918545244)) - (i32.add (i32.const -97873894)) - (i32.add (i32.const -1662770790)) - (i32.add (i32.const -2120838377)) - (i32.add (i32.const -932047118)) - (i32.add (i32.const 518922820)) - (i32.add (i32.const -821084606)) - (i32.add (i32.const 680876683)) - (i32.add (i32.const -1135085920)) - (i32.add (i32.const -1902907676)) - (i32.add (i32.const -1175392245)) - (i32.add (i32.const -1062943573)) - (i32.add (i32.const -1266952209)) - (i32.add (i32.const -49112571)) - (i32.add (i32.const 509076822)) - (i32.add (i32.const -1310906858)) - (i32.add (i32.const 1668246683)) - (i32.add (i32.const 442352182)) - (i32.add (i32.const 365554916)) - (i32.add (i32.const 1454197086)) - (i32.add (i32.const -1306521515)) - (i32.add (i32.const 2010770221)) - (i32.add (i32.const 2146180009)) - (i32.add (i32.const 1206405045)) - (i32.add (i32.const 1111778313)) - (i32.add (i32.const 470251169)) - (i32.add (i32.const 736017456)) - (i32.add (i32.const 1369349441)) - (i32.add (i32.const 852768754)) - (i32.add (i32.const -1300731409)) - (i32.add (i32.const 1629057012)) - (i32.add (i32.const 1773633687)) - (i32.add (i32.const -17432413)) - (i32.add (i32.const -937504836)) - (i32.add (i32.const 1825934126)) - (i32.add (i32.const -173254608)) - (i32.add (i32.const -596466628)) - (i32.add (i32.const 480607452)) - (i32.add (i32.const 966311063)) - (i32.add (i32.const -1983090502)) - (i32.add (i32.const -152550854)) - (i32.add (i32.const 1419538037)) - (i32.add (i32.const -404915772)) - (i32.add (i32.const -738620591)) - (i32.add (i32.const 2051530789)) - (i32.add (i32.const -570630663)) - (i32.add (i32.const -1692307513)) - (i32.add (i32.const -1329435135)) - (i32.add (i32.const -1409004610)) - (i32.add (i32.const -1105346397)) - (i32.add (i32.const -49542136)) - (i32.add (i32.const 2138787992)) - (i32.add (i32.const -1227347643)) - (i32.add (i32.const -709913386)) - (i32.add (i32.const -1854069883)) - (i32.add (i32.const 190604313)) - (i32.add (i32.const -1738522010)) - (i32.add (i32.const -247660291)) - (i32.add (i32.const -69428525)) - (i32.add (i32.const -1294584715)) - (i32.add (i32.const -995482984)) - (i32.add (i32.const -266782402)) - (i32.add (i32.const 1095184714)) - (i32.add (i32.const 2118141767)) - (i32.add (i32.const -13595128)) - (i32.add (i32.const 379346535)) - (i32.add (i32.const 616548669)) - (i32.add (i32.const -1836900895)) - (i32.add (i32.const -1608377820)) - (i32.add (i32.const -1131702501)) - (i32.add (i32.const 1604049515)) - (i32.add (i32.const -1062093300)) - (i32.add (i32.const 1905020903)) - (i32.add (i32.const 892567177)) - (i32.add (i32.const -714917650)) - (i32.add (i32.const 1530168051)) - (i32.add (i32.const -1322139320)) - (i32.add (i32.const 328228183)) - (i32.add (i32.const -1610779915)) - (i32.add (i32.const 1219885441)) - (i32.add (i32.const -1740728126)) - (i32.add (i32.const -1696989787)) - (i32.add (i32.const 1951489502)) - (i32.add (i32.const 2100796303)) - (i32.add (i32.const 715158708)) - (i32.add (i32.const 136342476)) - (i32.add (i32.const -492706177)) - (i32.add (i32.const 1598856914)) - (i32.add (i32.const 1640653248)) - (i32.add (i32.const 937479164)) - (i32.add (i32.const -1981838355)) - (i32.add (i32.const 268375540)) - (i32.add (i32.const 986327450)) - (i32.add (i32.const 1212888114)) - (i32.add (i32.const 1568399171)) - (i32.add (i32.const 1748488090)) - (i32.add (i32.const 1424111166)) - (i32.add (i32.const -1471042575)) - (i32.add (i32.const 1880330387)) - (i32.add (i32.const 753922113)) - (i32.add (i32.const -609230318)) - (i32.add (i32.const -1304161919)) - (i32.add (i32.const -1859789183)) - (i32.add (i32.const 156529246)) - (i32.add (i32.const -2102612423)) - (i32.add (i32.const -419736181)) - (i32.add (i32.const -2108996200)) - (i32.add (i32.const -1720460611)) - (i32.add (i32.const 1935096088)) - (i32.add (i32.const -1620273549)) - (i32.add (i32.const -785072034)) - (i32.add (i32.const 1725281773)) - (i32.add (i32.const 868858268)) - (i32.add (i32.const 1405284298)) - (i32.add (i32.const 1540278493)) - (i32.add (i32.const 1689261867)) - (i32.add (i32.const -1870952671)) - (i32.add (i32.const -174996832)) - (i32.add (i32.const -145869145)) - (i32.add (i32.const -1345812588)) - (i32.add (i32.const 1733339941)) - (i32.add (i32.const 862781894)) - (i32.add (i32.const -2057617160)) - (i32.add (i32.const 22828355)) - (i32.add (i32.const -1245797680)) - (i32.add (i32.const -869276284)) - (i32.add (i32.const 1967648374)) - (i32.add (i32.const 2003021477)) - (i32.add (i32.const -12542882)) - (i32.add (i32.const -960535776)) - (i32.add (i32.const 402418285)) - (i32.add (i32.const 1545622691)) - (i32.add (i32.const 1087548256)) - (i32.add (i32.const -788266004)) - (i32.add (i32.const -1776722482)) - (i32.add (i32.const -930531347)) - (i32.add (i32.const -447318150)) - (i32.add (i32.const 831275204)) - (i32.add (i32.const 2006235489)) - (i32.add (i32.const -1365242386)) - (i32.add (i32.const -1847164705)) - (i32.add (i32.const 2036106809)) - (i32.add (i32.const -722015172)) - (i32.add (i32.const 1380296481)) - (i32.add (i32.const -1108161955)) - (i32.add (i32.const 1896506093)) - (i32.add (i32.const 245990331)) - (i32.add (i32.const -3306521)) - (i32.add (i32.const 2063046574)) - (i32.add (i32.const 757348700)) - (i32.add (i32.const -1913544952)) - (i32.add (i32.const -1712395867)) - (i32.add (i32.const -870018831)) - (i32.add (i32.const -403017873)) - (i32.add (i32.const 1832750370)) - (i32.add (i32.const 981818247)) - (i32.add (i32.const -1502906883)) - (i32.add (i32.const 477326655)) - (i32.add (i32.const -2011037034)) - (i32.add (i32.const -55052854)) - (i32.add (i32.const 781349432)) - (i32.add (i32.const 998916387)) - (i32.add (i32.const 1454502156)) - (i32.add (i32.const 295172378)) - (i32.add (i32.const 981974000)) - (i32.add (i32.const 90848345)) - (i32.add (i32.const -1330368339)) - (i32.add (i32.const 934667478)) - (i32.add (i32.const -388128320)) - (i32.add (i32.const -1504565114)) - (i32.add (i32.const 1676779866)) - (i32.add (i32.const 281407912)) - (i32.add (i32.const 864420515)) - (i32.add (i32.const 1210283225)) - (i32.add (i32.const 784866640)) - (i32.add (i32.const -1050595095)) - (i32.add (i32.const 370449537)) - (i32.add (i32.const 903364534)) - (i32.add (i32.const -92165071)) - (i32.add (i32.const 1180005109)) - (i32.add (i32.const 184250403)) - (i32.add (i32.const 713474634)) - (i32.add (i32.const 1031319146)) - (i32.add (i32.const -147992337)) - (i32.add (i32.const -1103954923)) - (i32.add (i32.const 67957048)) - (i32.add (i32.const -238094823)) - (i32.add (i32.const 1040342042)) - (i32.add (i32.const -2146049597)) - (i32.add (i32.const 914252055)) - (i32.add (i32.const -646059428)) - (i32.add (i32.const -1512473773)) - (i32.add (i32.const 1518138291)) - (i32.add (i32.const 384003610)) - (i32.add (i32.const 1920744907)) - (i32.add (i32.const -708284021)) - (i32.add (i32.const -1247772397)) - (i32.add (i32.const -1295841689)) - (i32.add (i32.const 141619444)) - (i32.add (i32.const 1237906022)) - (i32.add (i32.const -1626604409)) - (i32.add (i32.const 1622771271)) - (i32.add (i32.const 654690537)) - (i32.add (i32.const 256636443)) - (i32.add (i32.const 81045527)) - (i32.add (i32.const -253727712)) - (i32.add (i32.const 1455474317)) - (i32.add (i32.const 1055815760)) - (i32.add (i32.const -973064077)) - (i32.add (i32.const -1539762667)) - (i32.add (i32.const 1468466865)) - (i32.add (i32.const -1167253600)) - (i32.add (i32.const -292126766)) - (i32.add (i32.const -1456668442)) - (i32.add (i32.const 976543296)) - (i32.add (i32.const -1020108910)) - (i32.add (i32.const -943250050)) - (i32.add (i32.const -191641327)) - (i32.add (i32.const 193980839)) - (i32.add (i32.const -104485282)) - (i32.add (i32.const -645928253)) - (i32.add (i32.const -2127291078)) - (i32.add (i32.const -330801695)) - (i32.add (i32.const 747659668)) - (i32.add (i32.const 844560808)) - (i32.add (i32.const -1834933174)) - (i32.add (i32.const -1772139545)) - (i32.add (i32.const -858995352)) - (i32.add (i32.const 1494041957)) - (i32.add (i32.const -639532315)) - (i32.add (i32.const 2128990034)) - (i32.add (i32.const -2141388543)) - (i32.add (i32.const 295283851)) - (i32.add (i32.const -159458276)) - (i32.add (i32.const 1196370268)) - (i32.add (i32.const -703943515)) - (i32.add (i32.const -1073233600)) - (i32.add (i32.const -1530322172)) - (i32.add (i32.const -422005421)) - (i32.add (i32.const -971050446)) - (i32.add (i32.const -1730407282)) - (i32.add (i32.const 162360140)) - (i32.add (i32.const -92004670)) - (i32.add (i32.const -985616158)) - (i32.add (i32.const 863627996)) - (i32.add (i32.const 69321499)) - (i32.add (i32.const 2007392739)) - (i32.add (i32.const -1823648707)) - (i32.add (i32.const 1689981316)) - (i32.add (i32.const 1772537226)) - (i32.add (i32.const 14135584)) - (i32.add (i32.const -904471016)) - (i32.add (i32.const 1627595042)) - (i32.add (i32.const 159004159)) - (i32.add (i32.const 1165187532)) - (i32.add (i32.const 16433420)) - (i32.add (i32.const -866812034)) - (i32.add (i32.const -239344255)) - (i32.add (i32.const 143466785)) - (i32.add (i32.const -406466654)) - (i32.add (i32.const -1476222156)) - (i32.add (i32.const -950681509)) - (i32.add (i32.const -1348951609)) - (i32.add (i32.const -327785687)) - (i32.add (i32.const 1566924537)) - (i32.add (i32.const -1750372073)) - (i32.add (i32.const 982969430)) - (i32.add (i32.const -626272292)) - (i32.add (i32.const 1735397073)) - (i32.add (i32.const -324874263)) - (i32.add (i32.const 831606457)) - (i32.add (i32.const -1420112845)) - (i32.add (i32.const -470937545)) - (i32.add (i32.const -1134859665)) - (i32.add (i32.const 1881879322)) - (i32.add (i32.const 1736587052)) - (i32.add (i32.const 1969565798)) - (i32.add (i32.const -224292276)) - (i32.add (i32.const -1087011982)) - (i32.add (i32.const -1117443716)) - (i32.add (i32.const -2049196538)) - (i32.add (i32.const -894932584)) - (i32.add (i32.const 262291630)) - (i32.add (i32.const -2103743298)) - (i32.add (i32.const -308152884)) - (i32.add (i32.const -704004316)) - (i32.add (i32.const -1087717301)) - (i32.add (i32.const 30444108)) - (i32.add (i32.const 588673242)) - (i32.add (i32.const -1514723518)) - (i32.add (i32.const 1972072949)) - (i32.add (i32.const -1207472534)) - (i32.add (i32.const 346992056)) - (i32.add (i32.const 1939171642)) - (i32.add (i32.const -379015174)) - (i32.add (i32.const 1719992933)) - (i32.add (i32.const -1106973394)) - (i32.add (i32.const 112047540)) - (i32.add (i32.const -1422336191)) - (i32.add (i32.const 1249196787)) - (i32.add (i32.const -1137423928)) - (i32.add (i32.const -357174737)) - (i32.add (i32.const 769616315)) - (i32.add (i32.const 569224864)) - (i32.add (i32.const 1228835059)) - (i32.add (i32.const 2147097899)) - (i32.add (i32.const 1072983167)) - (i32.add (i32.const 15740634)) - (i32.add (i32.const 762847485)) - (i32.add (i32.const -1872257652)) - (i32.add (i32.const -24914886)) - (i32.add (i32.const -350619656)) - (i32.add (i32.const 1404342268)) - (i32.add (i32.const -1348468070)) - (i32.add (i32.const -1110806814)) - (i32.add (i32.const -1620552330)) - (i32.add (i32.const 246276133)) - (i32.add (i32.const 1138698936)) - (i32.add (i32.const 1173354284)) - (i32.add (i32.const -176450491)) - (i32.add (i32.const 1118909828)) - (i32.add (i32.const -1778018232)) - (i32.add (i32.const 1509569006)) - (i32.add (i32.const -1376990624)) - (i32.add (i32.const 2126021887)) - (i32.add (i32.const 509485580)) - (i32.add (i32.const 1814951520)) - (i32.add (i32.const 1207635885)) - (i32.add (i32.const -1595429468)) - (i32.add (i32.const -777760275)) - (i32.add (i32.const 1165725760)) - (i32.add (i32.const 1793780414)) - (i32.add (i32.const 1766640126)) - (i32.add (i32.const 758699762)) - (i32.add (i32.const -113597615)) - (i32.add (i32.const 1512575813)) - (i32.add (i32.const -329282061)) - (i32.add (i32.const 1302029460)) - (i32.add (i32.const 883239014)) - (i32.add (i32.const 1588421611)) - (i32.add (i32.const -1531426169)) - (i32.add (i32.const 1916052193)) - (i32.add (i32.const -1810120804)) - (i32.add (i32.const -1606975176)) - (i32.add (i32.const 2014308792)) - (i32.add (i32.const -380563049)) - (i32.add (i32.const -455696317)) - (i32.add (i32.const 846879295)) - (i32.add (i32.const 1495338700)) - (i32.add (i32.const 1395126778)) - (i32.add (i32.const 1812024796)) - (i32.add (i32.const -1053995164)) - (i32.add (i32.const -1447290982)) - (i32.add (i32.const -384870093)) - (i32.add (i32.const 371686079)) - (i32.add (i32.const -1786035144)) - (i32.add (i32.const -1126221250)) - (i32.add (i32.const 1519883888)) - (i32.add (i32.const 23297297)) - (i32.add (i32.const 421639562)) - (i32.add (i32.const 333950380)) - (i32.add (i32.const 1047249728)) - (i32.add (i32.const -1563950283)) - (i32.add (i32.const 1795316584)) - (i32.add (i32.const 1413895807)) - (i32.add (i32.const -83365529)) - (i32.add (i32.const -451067369)) - (i32.add (i32.const 1192772271)) - (i32.add (i32.const 763148712)) - (i32.add (i32.const 1642759449)) - (i32.add (i32.const 595694934)) - (i32.add (i32.const -1895948291)) - (i32.add (i32.const 803674643)) - (i32.add (i32.const 772316068)) - (i32.add (i32.const -110437944)) - (i32.add (i32.const 963018031)) - (i32.add (i32.const -1437647798)) - (i32.add (i32.const 1659287224)) - (i32.add (i32.const -1934199846)) - (i32.add (i32.const 1590535944)) - (i32.add (i32.const -116788271)) - (i32.add (i32.const -622334392)) - (i32.add (i32.const -625319800)) - (i32.add (i32.const 547294658)) - (i32.add (i32.const -432797851)) - (i32.add (i32.const 1200479577)) - (i32.add (i32.const -319463987)) - (i32.add (i32.const 671306371)) - (i32.add (i32.const 1173456663)) - (i32.add (i32.const 259176956)) - (i32.add (i32.const 1004933684)) - (i32.add (i32.const -1598111916)) - (i32.add (i32.const 1563632229)) - (i32.add (i32.const -1848480539)) - (i32.add (i32.const 846932437)) - (i32.add (i32.const -1830836739)) - (i32.add (i32.const 2082605854)) - (i32.add (i32.const 785993097)) - (i32.add (i32.const 1894601609)) - (i32.add (i32.const -1651354)) - (i32.add (i32.const 899220876)) - (i32.add (i32.const -784260465)) - (i32.add (i32.const -552049052)) - (i32.add (i32.const 2118452544)) - (i32.add (i32.const -949256578)) - (i32.add (i32.const 1623680643)) - (i32.add (i32.const 156480786)) - (i32.add (i32.const -74065590)) - (i32.add (i32.const 1604767675)) - (i32.add (i32.const 1240539651)) - (i32.add (i32.const -410159642)) - (i32.add (i32.const 1048402196)) - (i32.add (i32.const 1049537605)) - (i32.add (i32.const 1404678381)) - (i32.add (i32.const -2078233416)) - (i32.add (i32.const 1416154921)) - (i32.add (i32.const -2021164967)) - (i32.add (i32.const -443941905)) - (i32.add (i32.const 18604619)) - (i32.add (i32.const -519066677)) - (i32.add (i32.const -1473782222)) - (i32.add (i32.const -277972981)) - (i32.add (i32.const 1782888724)) - (i32.add (i32.const 771923960)) - (i32.add (i32.const 1671594055)) - (i32.add (i32.const -1390046327)) - (i32.add (i32.const 1327956462)) - (i32.add (i32.const -1788163675)) - (i32.add (i32.const 1349037898)) - (i32.add (i32.const 2132277042)) - (i32.add (i32.const 1417057915)) - (i32.add (i32.const 980795716)) - (i32.add (i32.const -283961084)) - (i32.add (i32.const 1774449788)) - (i32.add (i32.const -231846521)) - (i32.add (i32.const 1307457483)) - (i32.add (i32.const -1707149671)) - (i32.add (i32.const 689458808)) - (i32.add (i32.const -1197667495)) - (i32.add (i32.const 1785819199)) - (i32.add (i32.const -932809418)) - (i32.add (i32.const -1579775187)) - (i32.add (i32.const -1070950799)) - (i32.add (i32.const -2028148150)) - (i32.add (i32.const 910588207)) - (i32.add (i32.const 1561918802)) - (i32.add (i32.const 1339134717)) - (i32.add (i32.const -236284721)) - (i32.add (i32.const 1597531176)) - (i32.add (i32.const 1993753915)) - (i32.add (i32.const -809551662)) - (i32.add (i32.const 734248299)) - (i32.add (i32.const -695570863)) - (i32.add (i32.const 1865416656)) - (i32.add (i32.const -322578755)) - (i32.add (i32.const -719091606)) - (i32.add (i32.const -531167970)) - (i32.add (i32.const 177208848)) - (i32.add (i32.const 2053979205)) - (i32.add (i32.const 1579297551)) - (i32.add (i32.const -832863300)) - (i32.add (i32.const -1814399468)) - (i32.add (i32.const 1221718195)) - (i32.add (i32.const 57728652)) - (i32.add (i32.const -1786258468)) - (i32.add (i32.const -955311013)) - (i32.add (i32.const 1999666592)) - (i32.add (i32.const 688283953)) - (i32.add (i32.const -1455150122)) - (i32.add (i32.const 262245261)) - (i32.add (i32.const 405410080)) - (i32.add (i32.const -1160219750)) - (i32.add (i32.const -2146851660)) - (i32.add (i32.const -898188434)) - (i32.add (i32.const 524150252)) - (i32.add (i32.const 2147283732)) - (i32.add (i32.const 2068564829)) - (i32.add (i32.const -888970312)) - (i32.add (i32.const 2015153393)) - (i32.add (i32.const -911285700)) - (i32.add (i32.const -93142628)) - (i32.add (i32.const -730736756)) - (i32.add (i32.const -583587706)) - (i32.add (i32.const -1916228151)) - (i32.add (i32.const -217892782)) - (i32.add (i32.const -2013674179)) - (i32.add (i32.const -1797056634)) - (i32.add (i32.const -650314082)) - (i32.add (i32.const 561001453)) - (i32.add (i32.const -373968709)) - (i32.add (i32.const 1099494353)) - (i32.add (i32.const 874237151)) - (i32.add (i32.const 2130722378)) - (i32.add (i32.const 467958132)) - (i32.add (i32.const -1506816526)) - (i32.add (i32.const -1376411522)) - (i32.add (i32.const -1381150970)) - (i32.add (i32.const 1080685165)) - (i32.add (i32.const -1152816439)) - (i32.add (i32.const -1362573289)) - (i32.add (i32.const 1399603189)) - (i32.add (i32.const 865646118)) - (i32.add (i32.const 508761821)) - (i32.add (i32.const -2055978424)) - (i32.add (i32.const -2127933117)) - (i32.add (i32.const 733557455)) - (i32.add (i32.const -26882626)) - (i32.add (i32.const 1158703055)) - (i32.add (i32.const -968729590)) - (i32.add (i32.const -292006270)) - (i32.add (i32.const -1236548785)) - (i32.add (i32.const 1854232937)) - (i32.add (i32.const 188686977)) - (i32.add (i32.const -486308922)) - (i32.add (i32.const -1733996042)) - (i32.add (i32.const 1686111448)) - (i32.add (i32.const 1180147798)) - (i32.add (i32.const -1897412984)) - (i32.add (i32.const 62509036)) - (i32.add (i32.const 2089509606)) - (i32.add (i32.const 330924418)) - (i32.add (i32.const 825261204)) - (i32.add (i32.const -1761797435)) - (i32.add (i32.const -445294284)) - (i32.add (i32.const -1078196375)) - (i32.add (i32.const 498810132)) - (i32.add (i32.const -1080828807)) - (i32.add (i32.const 1598314315)) - (i32.add (i32.const -1691544629)) - (i32.add (i32.const 855438061)) - (i32.add (i32.const -1369167276)) - (i32.add (i32.const 1575066364)) - (i32.add (i32.const 194355905)) - (i32.add (i32.const 1906017714)) - (i32.add (i32.const -305996600)) - (i32.add (i32.const 1220661873)) - (i32.add (i32.const -22764784)) - (i32.add (i32.const 352458750)) - (i32.add (i32.const -663106757)) - (i32.add (i32.const 226979045)) - (i32.add (i32.const -10537853)) - (i32.add (i32.const 457720360)) - (i32.add (i32.const 1270422052)) - (i32.add (i32.const 1891424504)) - (i32.add (i32.const -1730410224)) - (i32.add (i32.const -71039060)) - (i32.add (i32.const -343684307)) - (i32.add (i32.const 2010582859)) - (i32.add (i32.const -1287719050)) - (i32.add (i32.const -553548703)) - (i32.add (i32.const -1098024782)) - (i32.add (i32.const -1596491923)) - (i32.add (i32.const 603032331)) - (i32.add (i32.const 1103133417)) - (i32.add (i32.const -1293521343)) - (i32.add (i32.const -464162025)) - (i32.add (i32.const 19862271)) - (i32.add (i32.const 585342967)) - (i32.add (i32.const -1792316252)) - (i32.add (i32.const 969907354)) - (i32.add (i32.const 499173272)) - (i32.add (i32.const -533115860)) - (i32.add (i32.const 472742524)) - (i32.add (i32.const -63070705)) - (i32.add (i32.const 1429741200)) - (i32.add (i32.const 1987812484)) - (i32.add (i32.const -548953486)) - (i32.add (i32.const 1528622906)) - (i32.add (i32.const -1251114247)) - (i32.add (i32.const 1794044005)) - (i32.add (i32.const -1670292151)) - (i32.add (i32.const -1194073062)) - (i32.add (i32.const -1398292292)) - (i32.add (i32.const -1236525127)) - (i32.add (i32.const -500110038)) - (i32.add (i32.const -1809602156)) - (i32.add (i32.const 1321609202)) - (i32.add (i32.const 752513173)) - (i32.add (i32.const 738832719)) - (i32.add (i32.const 1537374672)) - (i32.add (i32.const 320009040)) - (i32.add (i32.const -1898669814)) - (i32.add (i32.const 1658032929)) - (i32.add (i32.const 1944366438)) - (i32.add (i32.const 907182816)) - (i32.add (i32.const -96900482)) - (i32.add (i32.const -681182808)) - (i32.add (i32.const 1455235711)) - (i32.add (i32.const -884838650)) - (i32.add (i32.const -390828505)) - (i32.add (i32.const 49577901)) - (i32.add (i32.const -817080418)) - (i32.add (i32.const -583315579)) - (i32.add (i32.const -831474454)) - (i32.add (i32.const 1691187694)) - (i32.add (i32.const -672030384)) - (i32.add (i32.const 1035827836)) - (i32.add (i32.const -1902462948)) - (i32.add (i32.const -359537414)) - (i32.add (i32.const -1254170546)) - (i32.add (i32.const -1004612515)) - (i32.add (i32.const -876419017)) - (i32.add (i32.const -579380593)) - (i32.add (i32.const 993641655)) - (i32.add (i32.const -596045155)) - (i32.add (i32.const 639416938)) - (i32.add (i32.const -1064964664)) - (i32.add (i32.const -92593239)) - (i32.add (i32.const 1353535324)) - (i32.add (i32.const 1586896082)) - (i32.add (i32.const 527695963)) - (i32.add (i32.const 88259217)) - (i32.add (i32.const 1227099479)) - (i32.add (i32.const 786917736)) - (i32.add (i32.const 41397055)) - (i32.add (i32.const -1263803693)) - (i32.add (i32.const 797894291)) - (i32.add (i32.const -690044494)) - (i32.add (i32.const -1439636074)) - (i32.add (i32.const 2103067325)) - (i32.add (i32.const 1401531225)) - (i32.add (i32.const -1363782320)) - (i32.add (i32.const 736600815)) - (i32.add (i32.const 147615395)) - (i32.add (i32.const 314120934)) - (i32.add (i32.const 395869455)) - (i32.add (i32.const -1758291421)) - (i32.add (i32.const 1099376903)) - (i32.add (i32.const 544105883)) - (i32.add (i32.const 127945754)) - (i32.add (i32.const -1451510510)) - (i32.add (i32.const 1021728160)) - (i32.add (i32.const -1188386561)) - (i32.add (i32.const -1156754267)) - (i32.add (i32.const 1632991688)) - (i32.add (i32.const 1505916280)) - (i32.add (i32.const 679908939)) - (i32.add (i32.const 481681629)) - (i32.add (i32.const -1703339968)) - (i32.add (i32.const 637684682)) - (i32.add (i32.const 600472427)) - (i32.add (i32.const -2007408647)) - (i32.add (i32.const -1075560836)) - (i32.add (i32.const 1208150053)) - (i32.add (i32.const 1186263025)) - (i32.add (i32.const 1078896125)) - (i32.add (i32.const 30278803)) - (i32.add (i32.const 1696075350)) - (i32.add (i32.const 933023716)) - (i32.add (i32.const 2072840762)) - (i32.add (i32.const -1397774304)) - (i32.add (i32.const -48115062)) - (i32.add (i32.const -1900715317)) - (i32.add (i32.const -1344472813)) - (i32.add (i32.const -253925325)) - (i32.add (i32.const -1152626610)) - (i32.add (i32.const 1241667954)) - (i32.add (i32.const -429872314)) - (i32.add (i32.const 139297018)) - (i32.add (i32.const -1998196579)) - (i32.add (i32.const 542404849)) - (i32.add (i32.const 266160050)) - (i32.add (i32.const 774600300)) - (i32.add (i32.const 970076408)) - (i32.add (i32.const 830498434)) - (i32.add (i32.const 258022995)) - (i32.add (i32.const 800637766)) - (i32.add (i32.const 315534184)) - (i32.add (i32.const -2006984648)) - (i32.add (i32.const -1220609602)) - (i32.add (i32.const -1980895459)) - (i32.add (i32.const -1653828266)) - (i32.add (i32.const -248400207)) - (i32.add (i32.const -937374610)) - (i32.add (i32.const 516771562)) - (i32.add (i32.const -800239504)) - (i32.add (i32.const 595129322)) - (i32.add (i32.const 1281004198)) - (i32.add (i32.const -1391112002)) - (i32.add (i32.const 1995383651)) - (i32.add (i32.const 1609743496)) - (i32.add (i32.const -1194134158)) - (i32.add (i32.const 1102878503)) - (i32.add (i32.const 922278327)) - (i32.add (i32.const -1807040970)) - (i32.add (i32.const 801810913)) - (i32.add (i32.const 1604065821)) - (i32.add (i32.const -1963761897)) - (i32.add (i32.const -274813324)) - (i32.add (i32.const -1823476361)) - (i32.add (i32.const 425447223)) - (i32.add (i32.const 526720395)) - (i32.add (i32.const -864764134)) - (i32.add (i32.const 405829181)) - (i32.add (i32.const -1788520378)) - (i32.add (i32.const 260808628)) - (i32.add (i32.const -1374696894)) - (i32.add (i32.const 1311052695)) - (i32.add (i32.const -2040010927)) - (i32.add (i32.const -829194611)) - (i32.add (i32.const -302981190)) - (i32.add (i32.const 899791272)) - (i32.add (i32.const 407518577)) - (i32.add (i32.const 659930234)) - (i32.add (i32.const -63806847)) - (i32.add (i32.const 1326012290)) - (i32.add (i32.const -1757187654)) - (i32.add (i32.const -364021596)) - (i32.add (i32.const -1840491596)) - (i32.add (i32.const 524937613)) - (i32.add (i32.const -78161148)) - (i32.add (i32.const 417159451)) - (i32.add (i32.const -1311572269)) - (i32.add (i32.const 965747162)) - (i32.add (i32.const 481361148)) - (i32.add (i32.const 1087725696)) - (i32.add (i32.const 564341824)) - (i32.add (i32.const -743378415)) - (i32.add (i32.const -1512236830)) - (i32.add (i32.const -1807419737)) - (i32.add (i32.const 1571094630)) - (i32.add (i32.const -1620750766)) - (i32.add (i32.const -1886183797)) - (i32.add (i32.const -1060461644)) - (i32.add (i32.const -562138911)) - (i32.add (i32.const 978927765)) - (i32.add (i32.const -35041358)) - (i32.add (i32.const -669850461)) - (i32.add (i32.const 2017233288)) - (i32.add (i32.const 1767285861)) - (i32.add (i32.const -577931520)) - (i32.add (i32.const 412371025)) - (i32.add (i32.const 1666329231)) - (i32.add (i32.const -267347768)) - (i32.add (i32.const -1548190543)) - (i32.add (i32.const -129647015)) - (i32.add (i32.const -750404339)) - (i32.add (i32.const 1096275596)) - (i32.add (i32.const 549503505)) - (i32.add (i32.const -2005736220)) - (i32.add (i32.const -1869972077)) - (i32.add (i32.const 1488586057)) - (i32.add (i32.const 1600765340)) - (i32.add (i32.const -2135303979)) - (i32.add (i32.const 561614557)) - (i32.add (i32.const 563681640)) - (i32.add (i32.const -925206566)) - (i32.add (i32.const 2010270529)) - (i32.add (i32.const 418443653)) - (i32.add (i32.const -1260760424)) - (i32.add (i32.const 1876425891)) - (i32.add (i32.const 473632858)) - (i32.add (i32.const 1033731940)) - (i32.add (i32.const -1411176701)) - (i32.add (i32.const -1974028657)) - (i32.add (i32.const 905924287)) - (i32.add (i32.const 1803467972)) - (i32.add (i32.const 1380375659)) - (i32.add (i32.const 2062717029)) - (i32.add (i32.const -1809047187)) - (i32.add (i32.const -1861419055)) - (i32.add (i32.const 1789279549)) - (i32.add (i32.const -1692705302)) - (i32.add (i32.const -882224016)) - (i32.add (i32.const 500757612)) - (i32.add (i32.const 1415706139)) - (i32.add (i32.const 521287105)) - (i32.add (i32.const -1861274820)) - (i32.add (i32.const 224190701)) - (i32.add (i32.const 987668566)) - (i32.add (i32.const -1875857809)) - (i32.add (i32.const -401500861)) - (i32.add (i32.const 841003492)) - (i32.add (i32.const 30870258)) - (i32.add (i32.const 382593617)) - (i32.add (i32.const -307536517)) - (i32.add (i32.const -1095035049)) - (i32.add (i32.const -1751748714)) - (i32.add (i32.const 1148552764)) - (i32.add (i32.const -696817913)) - (i32.add (i32.const 735201275)) - (i32.add (i32.const -989221490)) - (i32.add (i32.const -861118131)) - (i32.add (i32.const 1880118139)) - (i32.add (i32.const 1761505383)) - (i32.add (i32.const 61780311)) - (i32.add (i32.const 415303948)) - (i32.add (i32.const -1125556778)) - (i32.add (i32.const 1498591195)) - (i32.add (i32.const 1522642485)) - (i32.add (i32.const -1788928686)) - (i32.add (i32.const -1179372184)) - (i32.add (i32.const -1500718671)) - (i32.add (i32.const 532225395)) - (i32.add (i32.const 557950107)) - (i32.add (i32.const 1342895684)) - (i32.add (i32.const 636170709)) - (i32.add (i32.const -386053968)) - (i32.add (i32.const -1800076154)) - (i32.add (i32.const 1685715721)) - (i32.add (i32.const -241854434)) - (i32.add (i32.const -1479568946)) - (i32.add (i32.const 689699259)) - (i32.add (i32.const -2145932262)) - (i32.add (i32.const 1825248528)) - (i32.add (i32.const 1473870368)) - (i32.add (i32.const -1975181650)) - (i32.add (i32.const -867474743)) - (i32.add (i32.const 1693322657)) - (i32.add (i32.const 1575579750)) - (i32.add (i32.const -838439667)) - (i32.add (i32.const 1188299402)) - (i32.add (i32.const 262326352)) - (i32.add (i32.const -26026273)) - (i32.add (i32.const -474519621)) - (i32.add (i32.const -2099742588)) - (i32.add (i32.const 1055649185)) - (i32.add (i32.const 322668623)) - (i32.add (i32.const 1116217091)) - (i32.add (i32.const -2020124382)) - (i32.add (i32.const 147369042)) - (i32.add (i32.const 147215661)) - (i32.add (i32.const -100197234)) - (i32.add (i32.const 1334017845)) - (i32.add (i32.const -233843043)) - (i32.add (i32.const 351555383)) - (i32.add (i32.const -1820131087)) - (i32.add (i32.const 964503560)) - (i32.add (i32.const -846611300)) - (i32.add (i32.const 416240906)) - (i32.add (i32.const -307446786)) - (i32.add (i32.const 1590341661)) - (i32.add (i32.const -1184550380)) - (i32.add (i32.const -1274535190)) - (i32.add (i32.const 66348284)) - (i32.add (i32.const -451693770)) - (i32.add (i32.const 136518046)) - (i32.add (i32.const -1592380358)) - (i32.add (i32.const -1181692679)) - (i32.add (i32.const 1567217257)) - (i32.add (i32.const 595996789)) - (i32.add (i32.const -578714708)) - (i32.add (i32.const -1650812745)) - (i32.add (i32.const 823442078)) - (i32.add (i32.const -1339875108)) - (i32.add (i32.const -1239260067)) - (i32.add (i32.const -784243133)) - (i32.add (i32.const -786609514)) - (i32.add (i32.const 784280653)) - (i32.add (i32.const 2096473223)) - (i32.add (i32.const -860228003)) - (i32.add (i32.const 2021711904)) - (i32.add (i32.const 805887200)) - (i32.add (i32.const 1504371732)) - (i32.add (i32.const -1917502354)) - (i32.add (i32.const -401932165)) - (i32.add (i32.const 528767317)) - (i32.add (i32.const -1429527579)) - (i32.add (i32.const 467684375)) - (i32.add (i32.const 607817530)) - (i32.add (i32.const 1073656788)) - (i32.add (i32.const 253316344)) - (i32.add (i32.const -1571803458)) - (i32.add (i32.const 923542678)) - (i32.add (i32.const -481511919)) - (i32.add (i32.const -835860641)) - (i32.add (i32.const -972164626)) - (i32.add (i32.const 1416842720)) - (i32.add (i32.const -228892281)) - (i32.add (i32.const 936212167)) - (i32.add (i32.const 1467819995)) - (i32.add (i32.const -1854908918)) - (i32.add (i32.const -24560705)) - (i32.add (i32.const 531738483)) - (i32.add (i32.const 835192408)) - (i32.add (i32.const -1733676426)) - (i32.add (i32.const -1648650989)) - (i32.add (i32.const -328127861)) - (i32.add (i32.const -308350308)) - (i32.add (i32.const -86347905)) - (i32.add (i32.const 246574038)) - (i32.add (i32.const -1482470946)) - (i32.add (i32.const 1189651869)) - (i32.add (i32.const -1520715664)) - (i32.add (i32.const 472988690)) - (i32.add (i32.const 1744796503)) - (i32.add (i32.const 275123626)) - (i32.add (i32.const -1028492158)) - (i32.add (i32.const 1785440271)) - (i32.add (i32.const -1880899454)) - (i32.add (i32.const -1670905200)) - (i32.add (i32.const 1098528465)) - (i32.add (i32.const 1194262365)) - (i32.add (i32.const -711815719)) - (i32.add (i32.const 1536617085)) - (i32.add (i32.const 250044983)) - (i32.add (i32.const 666268946)) - (i32.add (i32.const 84793843)) - (i32.add (i32.const 1350481305)) - (i32.add (i32.const -1078527481)) - (i32.add (i32.const -2043974922)) - (i32.add (i32.const 1757165055)) - (i32.add (i32.const 986553217)) - (i32.add (i32.const 1041860515)) - (i32.add (i32.const -1951064181)) - (i32.add (i32.const 1679567308)) - (i32.add (i32.const 1149200272)) - (i32.add (i32.const 384821793)) - (i32.add (i32.const -873179266)) - (i32.add (i32.const -1507583083)) - (i32.add (i32.const -424085628)) - (i32.add (i32.const -21094833)) - (i32.add (i32.const -1831884517)) - (i32.add (i32.const -489699021)) - (i32.add (i32.const -304809495)) - (i32.add (i32.const -1651455436)) - (i32.add (i32.const -671985185)) - (i32.add (i32.const 94845907)) - (i32.add (i32.const -140422156)) - (i32.add (i32.const 1455840108)) - (i32.add (i32.const 191956161)) - (i32.add (i32.const 387304187)) - (i32.add (i32.const 1279520671)) - (i32.add (i32.const -2128387083)) - (i32.add (i32.const -947362845)) - (i32.add (i32.const 17710754)) - (i32.add (i32.const 574146761)) - (i32.add (i32.const -1570079519)) - (i32.add (i32.const -1985560499)) - (i32.add (i32.const 1010153797)) - (i32.add (i32.const 1096755757)) - (i32.add (i32.const -99699006)) - (i32.add (i32.const 1766766228)) - (i32.add (i32.const 1866890073)) - (i32.add (i32.const 203952587)) - (i32.add (i32.const 1821182861)) - (i32.add (i32.const -1173846371)) - (i32.add (i32.const 2020896756)) - (i32.add (i32.const 1702495474)) - (i32.add (i32.const 1376059453)) - (i32.add (i32.const -173306664)) - (i32.add (i32.const -615777902)) - (i32.add (i32.const -218474649)) - (i32.add (i32.const -750524956)) - (i32.add (i32.const -671653722)) - (i32.add (i32.const -472506997)) - (i32.add (i32.const -8134585)) - (i32.add (i32.const 1671097220)) - (i32.add (i32.const -2074837459)) - (i32.add (i32.const 1308529744)) - (i32.add (i32.const 494561598)) - (i32.add (i32.const -2042777014)) - (i32.add (i32.const 1227561224)) - (i32.add (i32.const 192881295)) - (i32.add (i32.const -1417795727)) - (i32.add (i32.const 1136301953)) - (i32.add (i32.const -228461703)) - (i32.add (i32.const -335031021)) - (i32.add (i32.const 193113590)) - (i32.add (i32.const -573440056)) - (i32.add (i32.const -863476461)) - (i32.add (i32.const 1525109802)) - (i32.add (i32.const -1374253095)) - (i32.add (i32.const 1070619881)) - (i32.add (i32.const 1242035338)) - (i32.add (i32.const 775780356)) - (i32.add (i32.const -846243521)) - (i32.add (i32.const -1098739357)) - (i32.add (i32.const 1339797400)) - (i32.add (i32.const 199515090)) - (i32.add (i32.const -75762589)) - (i32.add (i32.const 1253101009)) - (i32.add (i32.const -473532)) - (i32.add (i32.const 1788409019)) - (i32.add (i32.const -647243092)) - (i32.add (i32.const 1160786557)) - (i32.add (i32.const 201301550)) - (i32.add (i32.const 153112841)) - (i32.add (i32.const -1913312466)) - (i32.add (i32.const -2042134601)) - (i32.add (i32.const 1384849767)) - (i32.add (i32.const -1919802377)) - (i32.add (i32.const 1305791337)) - (i32.add (i32.const 1029258136)) - (i32.add (i32.const 740045522)) - (i32.add (i32.const 907226180)) - (i32.add (i32.const -2118176540)) - (i32.add (i32.const -1811052496)) - (i32.add (i32.const -1794594265)) - (i32.add (i32.const -817654053)) - (i32.add (i32.const -1505873587)) - (i32.add (i32.const 522135579)) - (i32.add (i32.const 1095694124)) - (i32.add (i32.const -629428179)) - (i32.add (i32.const -1904666224)) - (i32.add (i32.const -966785956)) - (i32.add (i32.const 719725101)) - (i32.add (i32.const -1904850175)) - (i32.add (i32.const 992975299)) - (i32.add (i32.const 182865215)) - (i32.add (i32.const 1778863032)) - (i32.add (i32.const 1117936685)) - (i32.add (i32.const -324201454)) - (i32.add (i32.const 114510925)) - (i32.add (i32.const -233633945)) - (i32.add (i32.const -1686468553)) - (i32.add (i32.const -74185210)) - (i32.add (i32.const -660813272)) - (i32.add (i32.const 1912058593)) - (i32.add (i32.const -927902435)) - (i32.add (i32.const 947491423)) - (i32.add (i32.const -2048772772)) - (i32.add (i32.const -1337762148)) - (i32.add (i32.const 2103744784)) - (i32.add (i32.const 878446215)) - (i32.add (i32.const -1936572518)) - (i32.add (i32.const -698288871)) - (i32.add (i32.const 1942032009)) - (i32.add (i32.const -924591866)) - (i32.add (i32.const 812122739)) - (i32.add (i32.const 1583059409)) - (i32.add (i32.const 270001495)) - (i32.add (i32.const 367794999)) - (i32.add (i32.const 1482404560)) - (i32.add (i32.const 1410771202)) - (i32.add (i32.const 1257370552)) - (i32.add (i32.const -1679178723)) - (i32.add (i32.const 1961900195)) - (i32.add (i32.const 755967703)) - (i32.add (i32.const -653958692)) - (i32.add (i32.const -903489599)) - (i32.add (i32.const 1911513317)) - (i32.add (i32.const -1750174182)) - (i32.add (i32.const 1230332486)) - (i32.add (i32.const 1645621647)) - (i32.add (i32.const 1895132709)) - (i32.add (i32.const -1714076193)) - (i32.add (i32.const 1083360942)) - (i32.add (i32.const 101070323)) - (i32.add (i32.const 1084246752)) - (i32.add (i32.const -963034830)) - (i32.add (i32.const -984030199)) - (i32.add (i32.const 13318339)) - (i32.add (i32.const -2002590708)) - (i32.add (i32.const -1853134759)) - (i32.add (i32.const -2013565602)) - (i32.add (i32.const 1591866205)) - (i32.add (i32.const -1474380192)) - (i32.add (i32.const -1468146366)) - (i32.add (i32.const -1871075083)) - (i32.add (i32.const -1313678380)) - (i32.add (i32.const -811184823)) - (i32.add (i32.const 1549469044)) - (i32.add (i32.const 469314605)) - (i32.add (i32.const -572161551)) - (i32.add (i32.const 319707071)) - (i32.add (i32.const 1093515724)) - (i32.add (i32.const -777955912)) - (i32.add (i32.const -830350686)) - (i32.add (i32.const 891444441)) - (i32.add (i32.const 348790488)) - (i32.add (i32.const -860150468)) - (i32.add (i32.const 798079262)) - (i32.add (i32.const 1139884590)) - (i32.add (i32.const -1564737690)) - (i32.add (i32.const -989699329)) - (i32.add (i32.const -1369425002)) - (i32.add (i32.const 732478293)) - (i32.add (i32.const -1274508199)) - (i32.add (i32.const 984799931)) - (i32.add (i32.const -1713229420)) - (i32.add (i32.const -75076880)) - (i32.add (i32.const -2139493693)) - (i32.add (i32.const -1035332364)) - (i32.add (i32.const 1240496478)) - (i32.add (i32.const -711608568)) - (i32.add (i32.const -2126657011)) - (i32.add (i32.const 1823390368)) - (i32.add (i32.const -765766592)) - (i32.add (i32.const -1292274342)) - (i32.add (i32.const -141485505)) - (i32.add (i32.const -1429880807)) - (i32.add (i32.const 1920471355)) - (i32.add (i32.const 103470175)) - (i32.add (i32.const -684486509)) - (i32.add (i32.const 1142404912)) - (i32.add (i32.const -1887237917)) - (i32.add (i32.const 1486131876)) - (i32.add (i32.const 1140290241)) - (i32.add (i32.const -1441010015)) - (i32.add (i32.const 1751644241)) - (i32.add (i32.const 330216541)) - (i32.add (i32.const 549399148)) - (i32.add (i32.const -1541410165)) - (i32.add (i32.const -375769137)) - (i32.add (i32.const -556345849)) - (i32.add (i32.const -1354616922)) - (i32.add (i32.const -163687638)) - (i32.add (i32.const -1257533349)) - (i32.add (i32.const 1713165074)) - (i32.add (i32.const 858509473)) - (i32.add (i32.const -933494340)) - (i32.add (i32.const 986326553)) - (i32.add (i32.const 958398299)) - (i32.add (i32.const 741000680)) - (i32.add (i32.const 331990604)) - (i32.add (i32.const -579889761)) - (i32.add (i32.const 2064578529)) - (i32.add (i32.const -1053118907)) - (i32.add (i32.const -1510785048)) - (i32.add (i32.const -551502679)) - (i32.add (i32.const -305388617)) - (i32.add (i32.const 596139700)) - (i32.add (i32.const -462542238)) - (i32.add (i32.const -669809578)) - (i32.add (i32.const -1883196943)) - (i32.add (i32.const 65576430)) - (i32.add (i32.const 282809759)) - (i32.add (i32.const 2118539859)) - (i32.add (i32.const -1537993784)) - (i32.add (i32.const 2147356018)) - (i32.add (i32.const -229147936)) - (i32.add (i32.const 2096071981)) - (i32.add (i32.const 2142354554)) - (i32.add (i32.const -257854616)) - (i32.add (i32.const 528447556)) - (i32.add (i32.const -1700865220)) - (i32.add (i32.const 1897325641)) - (i32.add (i32.const -1775010311)) - (i32.add (i32.const 1943051239)) - (i32.add (i32.const 1386080887)) - (i32.add (i32.const 1656269021)) - (i32.add (i32.const 1005558664)) - (i32.add (i32.const 1754625662)) - (i32.add (i32.const -1649964002)) - (i32.add (i32.const -567597736)) - (i32.add (i32.const 1433803372)) - (i32.add (i32.const -1647951430)) - (i32.add (i32.const 1081303400)) - (i32.add (i32.const 749782111)) - (i32.add (i32.const -922785300)) - (i32.add (i32.const 162266746)) - (i32.add (i32.const -712103576)) - (i32.add (i32.const 1880363768)) - (i32.add (i32.const -29181681)) - (i32.add (i32.const 1408598260)) - (i32.add (i32.const 1119917717)) - (i32.add (i32.const 1692686537)) - (i32.add (i32.const 1473447744)) - (i32.add (i32.const -1139553135)) - (i32.add (i32.const 2085562826)) - (i32.add (i32.const 684670777)) - (i32.add (i32.const 1738237276)) - (i32.add (i32.const -27503683)) - (i32.add (i32.const -2074794353)) - (i32.add (i32.const 127641259)) - (i32.add (i32.const 1307801282)) - (i32.add (i32.const -1856778779)) - (i32.add (i32.const -2136453141)) - (i32.add (i32.const -713064862)) - (i32.add (i32.const -1377707089)) - (i32.add (i32.const 1433548279)) - (i32.add (i32.const 2077489731)) - (i32.add (i32.const 417903264)) - (i32.add (i32.const -710515542)) - (i32.add (i32.const 125570911)) - (i32.add (i32.const -280261681)) - (i32.add (i32.const 292693910)) - (i32.add (i32.const -1095897706)) - (i32.add (i32.const 157916140)) - (i32.add (i32.const 515996429)) - (i32.add (i32.const 2110776751)) - (i32.add (i32.const -80943632)) - (i32.add (i32.const 1457419290)) - (i32.add (i32.const 1212208025)) - (i32.add (i32.const -450670821)) - (i32.add (i32.const 582987827)) - (i32.add (i32.const -1360874333)) - (i32.add (i32.const -744972352)) - (i32.add (i32.const -2117442242)) - (i32.add (i32.const 1296058763)) - (i32.add (i32.const 793353909)) - (i32.add (i32.const -1173740408)) - (i32.add (i32.const -1505076050)) - (i32.add (i32.const 2091563836)) - (i32.add (i32.const 1596059923)) - (i32.add (i32.const -1045119051)) - (i32.add (i32.const 1185659744)) - (i32.add (i32.const -1451223595)) - (i32.add (i32.const -696983431)) - (i32.add (i32.const 468967108)) - (i32.add (i32.const -547655936)) - (i32.add (i32.const -1056916375)) - (i32.add (i32.const 842399220)) - (i32.add (i32.const 1210083293)) - (i32.add (i32.const -1151424440)) - (i32.add (i32.const 1146233548)) - (i32.add (i32.const -1020543959)) - (i32.add (i32.const 2117573090)) - (i32.add (i32.const 878066889)) - (i32.add (i32.const 862650443)) - (i32.add (i32.const -1496573433)) - (i32.add (i32.const -1383082129)) - (i32.add (i32.const -126294666)) - (i32.add (i32.const -134767161)) - (i32.add (i32.const 42979283)) - (i32.add (i32.const 1733639504)) - (i32.add (i32.const 1877287080)) - (i32.add (i32.const 570937117)) - (i32.add (i32.const -693544166)) - (i32.add (i32.const 972751422)) - (i32.add (i32.const 1438190017)) - (i32.add (i32.const 15851555)) - (i32.add (i32.const 1149470599)) - (i32.add (i32.const -799453113)) - (i32.add (i32.const -427016210)) - (i32.add (i32.const -2074797200)) - (i32.add (i32.const 518777592)) - (i32.add (i32.const 583226833)) - (i32.add (i32.const -1880716195)) - (i32.add (i32.const -793190884)) - (i32.add (i32.const -1049193547)) - (i32.add (i32.const 925443043)) - (i32.add (i32.const 1940500064)) - (i32.add (i32.const 2063962593)) - (i32.add (i32.const -505118359)) - (i32.add (i32.const 1416601455)) - (i32.add (i32.const 234516433)) - (i32.add (i32.const 2037160995)) - (i32.add (i32.const 259866268)) - (i32.add (i32.const -1351830021)) - (i32.add (i32.const -1747987939)) - (i32.add (i32.const 2016995610)) - (i32.add (i32.const -1165344789)) - (i32.add (i32.const -1232121237)) - (i32.add (i32.const -595683095)) - (i32.add (i32.const 672649188)) - (i32.add (i32.const -594537170)) - (i32.add (i32.const -247446319)) - (i32.add (i32.const -655161707)) - (i32.add (i32.const -1398505650)) - (i32.add (i32.const -24036065)) - (i32.add (i32.const 760928173)) - (i32.add (i32.const -2372767)) - (i32.add (i32.const -114239640)) - (i32.add (i32.const 122793132)) - (i32.add (i32.const 1723372249)) - (i32.add (i32.const -40682341)) - (i32.add (i32.const -591179899)) - (i32.add (i32.const -676241904)) - (i32.add (i32.const -297966327)) - (i32.add (i32.const -1617043054)) - (i32.add (i32.const 428853437)) - (i32.add (i32.const 878531944)) - (i32.add (i32.const 1690210056)) - (i32.add (i32.const -1329187247)) - (i32.add (i32.const 1574454375)) - (i32.add (i32.const 1150916789)) - (i32.add (i32.const 271887207)) - (i32.add (i32.const -443394240)) - (i32.add (i32.const 743824309)) - (i32.add (i32.const 921644466)) - (i32.add (i32.const -486568781)) - (i32.add (i32.const -1771789829)) - (i32.add (i32.const 1454585964)) - (i32.add (i32.const -1303211886)) - (i32.add (i32.const -939931755)) - (i32.add (i32.const 1063061674)) - (i32.add (i32.const -1411742304)) - (i32.add (i32.const 549552782)) - (i32.add (i32.const -1174298834)) - (i32.add (i32.const -1656694849)) - (i32.add (i32.const -463805566)) - (i32.add (i32.const 724645882)) - (i32.add (i32.const -2145663354)) - (i32.add (i32.const -435688673)) - (i32.add (i32.const -673625628)) - (i32.add (i32.const 340669873)) - (i32.add (i32.const 843216535)) - (i32.add (i32.const 394631552)) - (i32.add (i32.const 1468489930)) - (i32.add (i32.const 1582379109)) - (i32.add (i32.const 244977514)) - (i32.add (i32.const 1870456118)) - (i32.add (i32.const -1753616581)) - (i32.add (i32.const -2078883758)) - (i32.add (i32.const 644300992)) - (i32.add (i32.const -676084580)) - (i32.add (i32.const -972508205)) - (i32.add (i32.const -1511624633)) - (i32.add (i32.const 1515504686)) - (i32.add (i32.const 1627172899)) - (i32.add (i32.const -253744102)) - (i32.add (i32.const -1256473693)) - (i32.add (i32.const 646984677)) - (i32.add (i32.const 486578323)) - (i32.add (i32.const -1391716943)) - (i32.add (i32.const -2015352033)) - (i32.add (i32.const -282089324)) - (i32.add (i32.const -249892643)) - (i32.add (i32.const 1305633273)) - (i32.add (i32.const 1794982674)) - (i32.add (i32.const 1082739721)) - (i32.add (i32.const 692694601)) - (i32.add (i32.const -1472572918)) - (i32.add (i32.const -793870576)) - (i32.add (i32.const 958573087)) - (i32.add (i32.const 350873935)) - (i32.add (i32.const 974507598)) - (i32.add (i32.const 1729966557)) - (i32.add (i32.const 1167613702)) - (i32.add (i32.const 860760562)) - (i32.add (i32.const -177076501)) - (i32.add (i32.const 1994537502)) - (i32.add (i32.const 421548779)) - (i32.add (i32.const 1031939072)) - (i32.add (i32.const 1392630315)) - (i32.add (i32.const -169484648)) - (i32.add (i32.const -675039610)) - (i32.add (i32.const -230965396)) - (i32.add (i32.const -1960044208)) - (i32.add (i32.const 563482690)) - (i32.add (i32.const -56681867)) - (i32.add (i32.const -43779259)) - (i32.add (i32.const -1384531186)) - (i32.add (i32.const -736655210)) - (i32.add (i32.const 1530099083)) - (i32.add (i32.const 1568589057)) - (i32.add (i32.const 1822676394)) - (i32.add (i32.const 1588238734)) - (i32.add (i32.const 1446092704)) - (i32.add (i32.const -1061367086)) - (i32.add (i32.const -1928624101)) - (i32.add (i32.const -446557732)) - (i32.add (i32.const -149885871)) - (i32.add (i32.const 2038134570)) - (i32.add (i32.const 1250752585)) - (i32.add (i32.const 1392793725)) - (i32.add (i32.const 153732353)) - (i32.add (i32.const 1484997936)) - (i32.add (i32.const 1594441112)) - (i32.add (i32.const 1947626425)) - (i32.add (i32.const 1402972294)) - (i32.add (i32.const 137878178)) - (i32.add (i32.const 435249453)) - (i32.add (i32.const 1553875044)) - (i32.add (i32.const -861517714)) - (i32.add (i32.const 1912307799)) - (i32.add (i32.const 1083774621)) - (i32.add (i32.const 404906473)) - (i32.add (i32.const 1467672671)) - (i32.add (i32.const 1632276290)) - (i32.add (i32.const 578668997)) - (i32.add (i32.const 2098252)) - (i32.add (i32.const 1138656416)) - (i32.add (i32.const -942840458)) - (i32.add (i32.const -676584968)) - (i32.add (i32.const -1727526332)) - (i32.add (i32.const -575067909)) - (i32.add (i32.const 30126717)) - (i32.add (i32.const -2128284349)) - (i32.add (i32.const 2085419622)) - (i32.add (i32.const -1458280687)) - (i32.add (i32.const -437005100)) - (i32.add (i32.const 632920052)) - (i32.add (i32.const 236096590)) - (i32.add (i32.const 807992309)) - (i32.add (i32.const 646213088)) - (i32.add (i32.const -519500617)) - (i32.add (i32.const -1561775529)) - (i32.add (i32.const 919996170)) - (i32.add (i32.const -566957947)) - (i32.add (i32.const 2141517684)) - (i32.add (i32.const 607475430)) - (i32.add (i32.const -1306366483)) - (i32.add (i32.const 1906569242)) - (i32.add (i32.const 1981481457)) - (i32.add (i32.const 1869981611)) - (i32.add (i32.const 386237607)) - (i32.add (i32.const 1602132507)) - (i32.add (i32.const 1109290439)) - (i32.add (i32.const 572678622)) - (i32.add (i32.const 687708812)) - (i32.add (i32.const -1424527460)) - (i32.add (i32.const -970350829)) - (i32.add (i32.const -850092681)) - (i32.add (i32.const -394147091)) - (i32.add (i32.const -1741458291)) - (i32.add (i32.const 216849099)) - (i32.add (i32.const 83054823)) - (i32.add (i32.const 418578335)) - (i32.add (i32.const 573042164)) - (i32.add (i32.const -1341354672)) - (i32.add (i32.const -1938705699)) - (i32.add (i32.const -1701773622)) - (i32.add (i32.const -977606250)) - (i32.add (i32.const -728773218)) - (i32.add (i32.const -609144357)) - (i32.add (i32.const 1227830053)) - (i32.add (i32.const 1856282967)) - (i32.add (i32.const -2069516862)) - (i32.add (i32.const 2053062593)) - (i32.add (i32.const -1378768211)) - (i32.add (i32.const -1007953587)) - (i32.add (i32.const -255418589)) - (i32.add (i32.const 754347250)) - (i32.add (i32.const -1791624621)) - (i32.add (i32.const 500439366)) - (i32.add (i32.const 651073038)) - (i32.add (i32.const 849417875)) - (i32.add (i32.const 1736220241)) - (i32.add (i32.const 2056801931)) - (i32.add (i32.const 155395797)) - (i32.add (i32.const -598979975)) - (i32.add (i32.const 246689700)) - (i32.add (i32.const 1824551717)) - (i32.add (i32.const -1629246329)) - (i32.add (i32.const -388696272)) - (i32.add (i32.const -2078236673)) - (i32.add (i32.const -162435115)) - (i32.add (i32.const 1481451239)) - (i32.add (i32.const 1909989119)) - (i32.add (i32.const 267882167)) - (i32.add (i32.const -1202085152)) - (i32.add (i32.const -1311432456)) - (i32.add (i32.const -1250564920)) - (i32.add (i32.const -949244811)) - (i32.add (i32.const 1529172338)) - (i32.add (i32.const -898772372)) - (i32.add (i32.const -947670395)) - (i32.add (i32.const 1309814100)) - (i32.add (i32.const 297979506)) - (i32.add (i32.const -1567399999)) - (i32.add (i32.const 429878719)) - (i32.add (i32.const -86716170)) - (i32.add (i32.const -1293024274)) - (i32.add (i32.const -1347982986)) - (i32.add (i32.const 237488051)) - (i32.add (i32.const -2100525480)) - (i32.add (i32.const -1507032684)) - (i32.add (i32.const 1869300595)) - (i32.add (i32.const -1346797230)) - (i32.add (i32.const 28102503)) - (i32.add (i32.const -1116277647)) - (i32.add (i32.const -1200313271)) - (i32.add (i32.const -277474648)) - (i32.add (i32.const -251568878)) - (i32.add (i32.const 215475908)) - (i32.add (i32.const -1283778663)) - (i32.add (i32.const 1884251528)) - (i32.add (i32.const 104217190)) - (i32.add (i32.const -956956101)) - (i32.add (i32.const -42418079)) - (i32.add (i32.const 1068198804)) - (i32.add (i32.const -1656344076)) - (i32.add (i32.const -842508783)) - (i32.add (i32.const 1404792651)) - (i32.add (i32.const 212784950)) - (i32.add (i32.const -761073940)) - (i32.add (i32.const -1921599293)) - (i32.add (i32.const 1184187761)) - (i32.add (i32.const -1725085241)) - (i32.add (i32.const -1744541550)) - (i32.add (i32.const -507212435)) - (i32.add (i32.const -1329364826)) - (i32.add (i32.const -701016751)) - (i32.add (i32.const 1661150811)) - (i32.add (i32.const -1677513546)) - (i32.add (i32.const 1217762393)) - (i32.add (i32.const 833054692)) - (i32.add (i32.const 220063220)) - (i32.add (i32.const 2312004)) - (i32.add (i32.const -1017727511)) - (i32.add (i32.const 397543527)) - (i32.add (i32.const 109534960)) - (i32.add (i32.const -1626515713)) - (i32.add (i32.const -993673526)) - (i32.add (i32.const 1228879479)) - (i32.add (i32.const 2098973122)) - (i32.add (i32.const -390309946)) - (i32.add (i32.const 1732493059)) - (i32.add (i32.const -1479265143)) - (i32.add (i32.const 1869318615)) - (i32.add (i32.const -1797667844)) - (i32.add (i32.const -2087741977)) - (i32.add (i32.const -17301481)) - (i32.add (i32.const -103915597)) - (i32.add (i32.const -237503547)) - (i32.add (i32.const 378907545)) - (i32.add (i32.const 1921729434)) - (i32.add (i32.const 65959289)) - (i32.add (i32.const 411223460)) - (i32.add (i32.const 1724781397)) - (i32.add (i32.const -509489876)) - (i32.add (i32.const 1407645924)) - (i32.add (i32.const -434306431)) - (i32.add (i32.const 1352056408)) - (i32.add (i32.const 1603787099)) - (i32.add (i32.const 1479225042)) - (i32.add (i32.const 1780218786)) - (i32.add (i32.const 390978401)) - (i32.add (i32.const 1732142241)) - (i32.add (i32.const -1819657983)) - (i32.add (i32.const 468270873)) - (i32.add (i32.const -1590363090)) - (i32.add (i32.const 1692797981)) - (i32.add (i32.const -1143833883)) - (i32.add (i32.const -1233291127)) - (i32.add (i32.const -680033842)) - (i32.add (i32.const -588129462)) - (i32.add (i32.const -32187615)) - (i32.add (i32.const -75383607)) - (i32.add (i32.const 883399255)) - (i32.add (i32.const -1313487736)) - (i32.add (i32.const -605277631)) - (i32.add (i32.const -611197436)) - (i32.add (i32.const 1037147542)) - (i32.add (i32.const 1787932295)) - (i32.add (i32.const -1030600000)) - (i32.add (i32.const 1683904921)) - (i32.add (i32.const 865635091)) - (i32.add (i32.const 970130535)) - (i32.add (i32.const -1155094097)) - (i32.add (i32.const -1600633899)) - (i32.add (i32.const -1517202093)) - (i32.add (i32.const 1165638408)) - (i32.add (i32.const -809309072)) - (i32.add (i32.const 877855334)) - (i32.add (i32.const -1663773675)) - (i32.add (i32.const 56685360)) - (i32.add (i32.const -1595481836)) - (i32.add (i32.const -5241718)) - (i32.add (i32.const 6438720)) - (i32.add (i32.const -419403558)) - (i32.add (i32.const -208151228)) - (i32.add (i32.const -1423669078)) - (i32.add (i32.const 698832256)) - (i32.add (i32.const -107340966)) - (i32.add (i32.const 860470198)) - (i32.add (i32.const -484205690)) - (i32.add (i32.const 1728868366)) - (i32.add (i32.const -1240696541)) - (i32.add (i32.const 412731802)) - (i32.add (i32.const -520543155)) - (i32.add (i32.const 748312045)) - (i32.add (i32.const 722594751)) - (i32.add (i32.const 916300480)) - (i32.add (i32.const -1390741338)) - (i32.add (i32.const -54319756)) - (i32.add (i32.const 1624303958)) - (i32.add (i32.const -621154142)) - (i32.add (i32.const 1417227819)) - (i32.add (i32.const -504451803)) - (i32.add (i32.const 1185782512)) - (i32.add (i32.const 1607319607)) - (i32.add (i32.const 1815408390)) - (i32.add (i32.const 1485388183)) - (i32.add (i32.const 315272517)) - (i32.add (i32.const -1111619361)) - (i32.add (i32.const 1553155849)) - (i32.add (i32.const 354402621)) - (i32.add (i32.const -23993887)) - (i32.add (i32.const -1236988661)) - (i32.add (i32.const -1109348201)) - (i32.add (i32.const 1163343655)) - (i32.add (i32.const -1775900829)) - (i32.add (i32.const 2125557795)) - (i32.add (i32.const -783336752)) - (i32.add (i32.const -1019876256)) - (i32.add (i32.const 532228928)) - (i32.add (i32.const -352017943)) - (i32.add (i32.const -1113155191)) - (i32.add (i32.const 1127998895)) - (i32.add (i32.const 2130229624)) - (i32.add (i32.const 645122552)) - (i32.add (i32.const 1803614569)) - (i32.add (i32.const -1496837460)) - (i32.add (i32.const -1625033731)) - (i32.add (i32.const -1852754904)) - (i32.add (i32.const -729317978)) - (i32.add (i32.const -1294272331)) - (i32.add (i32.const 1488883276)) - (i32.add (i32.const -1178279087)) - (i32.add (i32.const 1423039690)) - (i32.add (i32.const -1051440277)) - (i32.add (i32.const -1930750995)) - (i32.add (i32.const 1678431160)) - (i32.add (i32.const 1516363230)) - (i32.add (i32.const -131432419)) - (i32.add (i32.const -1934900717)) - (i32.add (i32.const 1293836674)) - (i32.add (i32.const -356776933)) - (i32.add (i32.const 1022702395)) - (i32.add (i32.const -1282166862)) - (i32.add (i32.const -501963427)) - (i32.add (i32.const -62660692)) - (i32.add (i32.const -2145849949)) - (i32.add (i32.const -1630740678)) - (i32.add (i32.const -1638397456)) - (i32.add (i32.const 72220869)) - (i32.add (i32.const 1986467766)) - (i32.add (i32.const 1280709970)) - (i32.add (i32.const -1949717209)) - (i32.add (i32.const -550770289)) - (i32.add (i32.const 1071654598)) - (i32.add (i32.const 944418091)) - (i32.add (i32.const 843029703)) - (i32.add (i32.const 612796090)) - (i32.add (i32.const -2013775591)) - (i32.add (i32.const -1038040327)) - (i32.add (i32.const 38110707)) - (i32.add (i32.const 1814880196)) - (i32.add (i32.const -1934731739)) - (i32.add (i32.const 1279509670)) - (i32.add (i32.const -1560351479)) - (i32.add (i32.const -1368729506)) - (i32.add (i32.const 12115063)) - (i32.add (i32.const 1376956431)) - (i32.add (i32.const -10190159)) - (i32.add (i32.const 425584111)) - (i32.add (i32.const 1612874006)) - (i32.add (i32.const -261630193)) - (i32.add (i32.const -1496096059)) - (i32.add (i32.const -1750321596)) - (i32.add (i32.const -2099601963)) - (i32.add (i32.const -585138133)) - (i32.add (i32.const -448218652)) - (i32.add (i32.const -239606947)) - (i32.add (i32.const 1621013647)) - (i32.add (i32.const -1308816014)) - (i32.add (i32.const -488119719)) - (i32.add (i32.const -434025680)) - (i32.add (i32.const -1382620171)) - (i32.add (i32.const -419269536)) - (i32.add (i32.const 402022642)) - (i32.add (i32.const 237787238)) - (i32.add (i32.const 915430890)) - (i32.add (i32.const 307939911)) - (i32.add (i32.const 1836581053)) - (i32.add (i32.const -657456891)) - (i32.add (i32.const 1855715594)) - (i32.add (i32.const 569454013)) - (i32.add (i32.const 271293317)) - (i32.add (i32.const -1260283491)) - (i32.add (i32.const -406548180)) - (i32.add (i32.const -1034861991)) - (i32.add (i32.const 15943095)) - (i32.add (i32.const -1136535897)) - (i32.add (i32.const -1211580950)) - (i32.add (i32.const 1606483185)) - (i32.add (i32.const 1652880484)) - (i32.add (i32.const 1624303610)) - (i32.add (i32.const -977855165)) - (i32.add (i32.const 653767405)) - (i32.add (i32.const 632970388)) - (i32.add (i32.const 1208839766)) - (i32.add (i32.const 60178826)) - (i32.add (i32.const 1771833107)) - (i32.add (i32.const 1613056183)) - (i32.add (i32.const -292030693)) - (i32.add (i32.const -556535656)) - (i32.add (i32.const -325472120)) - (i32.add (i32.const 1506684635)) - (i32.add (i32.const 158843761)) - (i32.add (i32.const 256073741)) - (i32.add (i32.const 1757909419)) - (i32.add (i32.const -271532113)) - (i32.add (i32.const -1142623866)) - (i32.add (i32.const 2107064274)) - (i32.add (i32.const 197681291)) - (i32.add (i32.const 291014283)) - (i32.add (i32.const -1564087975)) - (i32.add (i32.const 865354150)) - (i32.add (i32.const -806338777)) - (i32.add (i32.const -1471305197)) - (i32.add (i32.const 499873121)) - (i32.add (i32.const 1213198837)) - (i32.add (i32.const 1274281882)) - (i32.add (i32.const -1856357586)) - (i32.add (i32.const -480836895)) - (i32.add (i32.const 566159545)) - (i32.add (i32.const 801846824)) - (i32.add (i32.const -1707611208)) - (i32.add (i32.const 272104431)) - (i32.add (i32.const 1824037357)) - (i32.add (i32.const 1188276130)) - (i32.add (i32.const 453331757)) - (i32.add (i32.const 480000)) - (i32.add (i32.const -1323289583)) - (i32.add (i32.const 1934856480)) - (i32.add (i32.const -1072954202)) - (i32.add (i32.const 1107369866)) - (i32.add (i32.const 1975875981)) - (i32.add (i32.const -2009085326)) - (i32.add (i32.const -1345162369)) - (i32.add (i32.const -93759131)) - (i32.add (i32.const -881015791)) - (i32.add (i32.const -735718758)) - (i32.add (i32.const 921453153)) - (i32.add (i32.const -1019347786)) - (i32.add (i32.const -52625405)) - (i32.add (i32.const 1832543934)) - (i32.add (i32.const 1010887499)) - (i32.add (i32.const -1863402204)) - (i32.add (i32.const -1048069742)) - (i32.add (i32.const 764002390)) - (i32.add (i32.const 69098841)) - (i32.add (i32.const -722731597)) - (i32.add (i32.const 434686123)) - (i32.add (i32.const -58074206)) - (i32.add (i32.const 482103967)) - (i32.add (i32.const -89522655)) - (i32.add (i32.const 1428635497)) - (i32.add (i32.const 854704550)) - (i32.add (i32.const 154038699)) - (i32.add (i32.const -962057830)) - (i32.add (i32.const -1924148363)) - (i32.add (i32.const -67296117)) - (i32.add (i32.const -30877510)) - (i32.add (i32.const 364538130)) - (i32.add (i32.const 627199989)) - (i32.add (i32.const 1918450214)) - (i32.add (i32.const 1091792273)) - (i32.add (i32.const 304208716)) - (i32.add (i32.const 727784864)) - (i32.add (i32.const -1072092013)) - (i32.add (i32.const -1516498915)) - (i32.add (i32.const -969255276)) - (i32.add (i32.const 1200230549)) - (i32.add (i32.const 1190751428)) - (i32.add (i32.const -186290446)) - (i32.add (i32.const 1725366449)) - (i32.add (i32.const 1404193081)) - (i32.add (i32.const -78628515)) - (i32.add (i32.const -753870894)) - (i32.add (i32.const 1595581139)) - (i32.add (i32.const 9098546)) - (i32.add (i32.const 111780812)) - (i32.add (i32.const 1259292087)) - (i32.add (i32.const -749901233)) - (i32.add (i32.const 298170112)) - (i32.add (i32.const -185952065)) - (i32.add (i32.const -924806321)) - (i32.add (i32.const 214777014)) - (i32.add (i32.const -615638447)) - (i32.add (i32.const -1671637836)) - (i32.add (i32.const 2070321543)) - (i32.add (i32.const 1955367500)) - (i32.add (i32.const -1432362916)) - (i32.add (i32.const 1272647707)) - (i32.add (i32.const 1916366350)) - (i32.add (i32.const -2101103940)) - (i32.add (i32.const 128759761)) - (i32.add (i32.const -1671743869)) - (i32.add (i32.const 850778791)) - (i32.add (i32.const -2060055180)) - (i32.add (i32.const 512736745)) - (i32.add (i32.const 1819747587)) - (i32.add (i32.const -1387185744)) - (i32.add (i32.const 1586147168)) - (i32.add (i32.const 1241646484)) - (i32.add (i32.const 341275531)) - (i32.add (i32.const 580301181)) - (i32.add (i32.const 244177248)) - (i32.add (i32.const 47252474)) - (i32.add (i32.const -733408546)) - (i32.add (i32.const 2004371963)) - (i32.add (i32.const -897219190)) - (i32.add (i32.const -1460400883)) - (i32.add (i32.const 2098803505)) - (i32.add (i32.const -1442108015)) - (i32.add (i32.const -151489870)) - (i32.add (i32.const 251473899)) - (i32.add (i32.const -1123003806)) - (i32.add (i32.const 1207520183)) - (i32.add (i32.const 320211693)) - (i32.add (i32.const 96442893)) - (i32.add (i32.const 671831206)) - (i32.add (i32.const 2099007424)) - (i32.add (i32.const 36186926)) - (i32.add (i32.const 516173882)) - (i32.add (i32.const -621771535)) - (i32.add (i32.const -238489146)) - (i32.add (i32.const -921347141)) - (i32.add (i32.const 556557052)) - (i32.add (i32.const 1600876384)) - (i32.add (i32.const -1885951649)) - (i32.add (i32.const 849694848)) - (i32.add (i32.const 13284259)) - (i32.add (i32.const 925152936)) - (i32.add (i32.const 148220608)) - (i32.add (i32.const -597995621)) - (i32.add (i32.const -369284999)) - (i32.add (i32.const 857380821)) - (i32.add (i32.const -259168626)) - (i32.add (i32.const -792926227)) - (i32.add (i32.const 123183909)) - (i32.add (i32.const -887148252)) - (i32.add (i32.const 503509501)) - (i32.add (i32.const 794885608)) - (i32.add (i32.const 1929066752)) - (i32.add (i32.const -187948215)) - (i32.add (i32.const 907975127)) - (i32.add (i32.const 969198459)) - (i32.add (i32.const -473727833)) - (i32.add (i32.const 207772899)) - (i32.add (i32.const -1260733993)) - (i32.add (i32.const 379925935)) - (i32.add (i32.const -269658938)) - (i32.add (i32.const -126882762)) - (i32.add (i32.const 1342708371)) - (i32.add (i32.const -6448101)) - (i32.add (i32.const 1951000126)) - (i32.add (i32.const 1676338329)) - (i32.add (i32.const 548137966)) - (i32.add (i32.const -1560034847)) - (i32.add (i32.const 2120412753)) - (i32.add (i32.const 886344535)) - (i32.add (i32.const -668626536)) - (i32.add (i32.const 2048601697)) - (i32.add (i32.const -1627403590)) - (i32.add (i32.const -182181315)) - (i32.add (i32.const 1420941464)) - (i32.add (i32.const 1483564163)) - (i32.add (i32.const 1576107234)) - (i32.add (i32.const 1197400126)) - (i32.add (i32.const -1234939536)) - (i32.add (i32.const -712460105)) - (i32.add (i32.const -1301983419)) - (i32.add (i32.const -1152500246)) - (i32.add (i32.const 1435568946)) - (i32.add (i32.const 1335314471)) - (i32.add (i32.const 677459652)) - (i32.add (i32.const 80592141)) - (i32.add (i32.const -1343801454)) - (i32.add (i32.const 1208580533)) - (i32.add (i32.const 1971970110)) - (i32.add (i32.const 1465565437)) - (i32.add (i32.const -71122156)) - (i32.add (i32.const 1911625737)) - (i32.add (i32.const 1765320452)) - (i32.add (i32.const -353375814)) - (i32.add (i32.const 1256626342)) - (i32.add (i32.const -1037134370)) - (i32.add (i32.const 1483288774)) - (i32.add (i32.const -350413297)) - (i32.add (i32.const 363136137)) - (i32.add (i32.const 518663092)) - (i32.add (i32.const 472760261)) - (i32.add (i32.const 794113473)) - (i32.add (i32.const 353955573)) - (i32.add (i32.const 1466648035)) - (i32.add (i32.const 1750409630)) - (i32.add (i32.const 1947879297)) - (i32.add (i32.const 10740108)) - (i32.add (i32.const -461481086)) - (i32.add (i32.const -1485475337)) - (i32.add (i32.const 874532597)) - (i32.add (i32.const 672857431)) - (i32.add (i32.const -551235287)) - (i32.add (i32.const 1223676833)) - (i32.add (i32.const -1467660817)) - (i32.add (i32.const -2071550333)) - (i32.add (i32.const -1244128334)) - (i32.add (i32.const -1177334204)) - (i32.add (i32.const -24836014)) - (i32.add (i32.const 768398009)) - (i32.add (i32.const -2066054108)) - (i32.add (i32.const -937533427)) - (i32.add (i32.const -1167556980)) - (i32.add (i32.const -1526350666)) - (i32.add (i32.const 1668013578)) - (i32.add (i32.const 1799741682)) - (i32.add (i32.const 1055792204)) - (i32.add (i32.const -1232589344)) - (i32.add (i32.const 514987514)) - (i32.add (i32.const -760464420)) - (i32.add (i32.const -1595544577)) - (i32.add (i32.const -1700679684)) - (i32.add (i32.const 1710905535)) - (i32.add (i32.const 1913245038)) - (i32.add (i32.const 1771873067)) - (i32.add (i32.const -1281943648)) - (i32.add (i32.const -1530236887)) - (i32.add (i32.const 1489151466)) - (i32.add (i32.const -548219149)) - (i32.add (i32.const 606825670)) - (i32.add (i32.const 972164313)) - (i32.add (i32.const -177467236)) - (i32.add (i32.const -1872229042)) - (i32.add (i32.const 2064994255)) - (i32.add (i32.const 2006674822)) - (i32.add (i32.const 420237842)) - (i32.add (i32.const -1783473764)) - (i32.add (i32.const -369584193)) - (i32.add (i32.const 388385613)) - (i32.add (i32.const -166113926)) - (i32.add (i32.const 1322258540)) - (i32.add (i32.const -292640016)) - (i32.add (i32.const -2085131132)) - (i32.add (i32.const 929448192)) - (i32.add (i32.const -1072038200)) - (i32.add (i32.const 841214734)) - (i32.add (i32.const 1225250472)) - (i32.add (i32.const -1885201916)) - (i32.add (i32.const -423198147)) - (i32.add (i32.const -495847716)) - (i32.add (i32.const -1188557833)) - (i32.add (i32.const 1423591513)) - (i32.add (i32.const 1199629919)) - (i32.add (i32.const 576858270)) - (i32.add (i32.const -1794921342)) - (i32.add (i32.const -1990537628)) - (i32.add (i32.const -1865555753)) - (i32.add (i32.const -530924649)) - (i32.add (i32.const -1520402046)) - (i32.add (i32.const 651305762)) - (i32.add (i32.const 1842948281)) - (i32.add (i32.const 1086727267)) - (i32.add (i32.const 1725411852)) - (i32.add (i32.const 1296745557)) - (i32.add (i32.const 1189735577)) - (i32.add (i32.const 1046174699)) - (i32.add (i32.const 614808098)) - (i32.add (i32.const -1092907833)) - (i32.add (i32.const -1020220843)) - (i32.add (i32.const 66898974)) - (i32.add (i32.const 1726050323)) - (i32.add (i32.const 1297698040)) - (i32.add (i32.const 1989763615)) - (i32.add (i32.const 2000380365)) - (i32.add (i32.const 1398569849)) - (i32.add (i32.const -948500436)) - (i32.add (i32.const -1035032018)) - (i32.add (i32.const -1545063424)) - (i32.add (i32.const -334758773)) - (i32.add (i32.const -1934462533)) - (i32.add (i32.const -842844437)) - (i32.add (i32.const 1713162618)) - (i32.add (i32.const 986131872)) - (i32.add (i32.const 1635347744)) - (i32.add (i32.const -1447663825)) - (i32.add (i32.const 146060833)) - (i32.add (i32.const 1653763430)) - (i32.add (i32.const 1837906578)) - (i32.add (i32.const 1131603416)) - (i32.add (i32.const 768236753)) - (i32.add (i32.const -749714834)) - (i32.add (i32.const -582530281)) - (i32.add (i32.const -114958495)) - (i32.add (i32.const -196807922)) - (i32.add (i32.const 117308195)) - (i32.add (i32.const -1692780536)) - (i32.add (i32.const 1297977408)) - (i32.add (i32.const 2026582314)) - (i32.add (i32.const -1660443388)) - (i32.add (i32.const -1798823386)) - (i32.add (i32.const -1419133221)) - (i32.add (i32.const -334210255)) - (i32.add (i32.const -411274774)) - (i32.add (i32.const 179901842)) - (i32.add (i32.const -970362510)) - (i32.add (i32.const 1359976554)) - (i32.add (i32.const -1800771803)) - (i32.add (i32.const 176318024)) - (i32.add (i32.const -103626983)) - (i32.add (i32.const -854798187)) - (i32.add (i32.const -648193666)) - (i32.add (i32.const -919208207)) - (i32.add (i32.const -158755654)) - (i32.add (i32.const 2025752314)) - (i32.add (i32.const 921617843)) - (i32.add (i32.const 1608824062)) - (i32.add (i32.const 27682354)) - (i32.add (i32.const 1597178412)) - (i32.add (i32.const -1574101803)) - (i32.add (i32.const -1346069863)) - (i32.add (i32.const -290799319)) - (i32.add (i32.const 1330734866)) - (i32.add (i32.const 450035942)) - (i32.add (i32.const -1377543061)) - (i32.add (i32.const -227820722)) - (i32.add (i32.const 76332797)) - (i32.add (i32.const 1842238102)) - (i32.add (i32.const 1687214006)) - (i32.add (i32.const 202286616)) - (i32.add (i32.const 156774584)) - (i32.add (i32.const -1579759415)) - (i32.add (i32.const -834809482)) - (i32.add (i32.const 1117960407)) - (i32.add (i32.const -198550590)) - (i32.add (i32.const -895345979)) - (i32.add (i32.const -1164154312)) - (i32.add (i32.const -886687691)) - (i32.add (i32.const 1929182561)) - (i32.add (i32.const 711432229)) - (i32.add (i32.const -1513479318)) - (i32.add (i32.const 899983751)) - (i32.add (i32.const -1063675611)) - (i32.add (i32.const -1300124523)) - (i32.add (i32.const 1368842776)) - (i32.add (i32.const 2052144906)) - (i32.add (i32.const 85560135)) - (i32.add (i32.const 625688432)) - (i32.add (i32.const 848928235)) - (i32.add (i32.const -1563758018)) - (i32.add (i32.const 1737631908)) - (i32.add (i32.const 1695766633)) - (i32.add (i32.const -641315393)) - (i32.add (i32.const -1739974836)) - (i32.add (i32.const -1633171850)) - (i32.add (i32.const 288509499)) - (i32.add (i32.const -829290631)) - (i32.add (i32.const -15945183)) - (i32.add (i32.const -399313953)) - (i32.add (i32.const -118088858)) - (i32.add (i32.const -1963026591)) - (i32.add (i32.const 1700672562)) - (i32.add (i32.const -1769341688)) - (i32.add (i32.const -1538439330)) - (i32.add (i32.const 325543469)) - (i32.add (i32.const 534194087)) - (i32.add (i32.const 607602103)) - (i32.add (i32.const 1006268207)) - (i32.add (i32.const 1884834904)) - (i32.add (i32.const 173163967)) - (i32.add (i32.const 1356792759)) - (i32.add (i32.const -1748064704)) - (i32.add (i32.const -536154763)) - (i32.add (i32.const 886248941)) - (i32.add (i32.const 452354800)) - (i32.add (i32.const 1538223092)) - (i32.add (i32.const -886584906)) - (i32.add (i32.const -27219503)) - (i32.add (i32.const 911471282)) - (i32.add (i32.const -262370311)) - (i32.add (i32.const 1240449435)) - (i32.add (i32.const 1771110968)) - (i32.add (i32.const 423926717)) - (i32.add (i32.const 1070292666)) - (i32.add (i32.const -598765108)) - (i32.add (i32.const 959548688)) - (i32.add (i32.const -1391047010)) - (i32.add (i32.const 1021405863)) - (i32.add (i32.const 10328558)) - (i32.add (i32.const 764060216)) - (i32.add (i32.const 1966170798)) - (i32.add (i32.const 890781355)) - (i32.add (i32.const -1065122632)) - (i32.add (i32.const -426871347)) - (i32.add (i32.const 1892474054)) - (i32.add (i32.const 140512189)) - (i32.add (i32.const -437740782)) - (i32.add (i32.const -546110972)) - (i32.add (i32.const -293666587)) - (i32.add (i32.const -44551341)) - (i32.add (i32.const -2020979062)) - (i32.add (i32.const -1689339069)) - (i32.add (i32.const -1077332672)) - (i32.add (i32.const -1942365899)) - (i32.add (i32.const -1389706265)) - (i32.add (i32.const -1738802536)) - (i32.add (i32.const -1135300364)) - (i32.add (i32.const 56913707)) - (i32.add (i32.const -305138238)) - (i32.add (i32.const -912305889)) - (i32.add (i32.const 1709955957)) - (i32.add (i32.const 994637884)) - (i32.add (i32.const 847040290)) - (i32.add (i32.const -1901864208)) - (i32.add (i32.const -1437252251)) - (i32.add (i32.const 719481759)) - (i32.add (i32.const 1113205433)) - (i32.add (i32.const -17435530)) - (i32.add (i32.const 1987876616)) - (i32.add (i32.const 601256284)) - (i32.add (i32.const -761465670)) - (i32.add (i32.const -383471916)) - (i32.add (i32.const 1398416524)) - (i32.add (i32.const 228618016)) - (i32.add (i32.const 348339282)) - (i32.add (i32.const 264593026)) - (i32.add (i32.const -1505473519)) - (i32.add (i32.const -1372327815)) - (i32.add (i32.const 1278595256)) - (i32.add (i32.const -124801153)) - (i32.add (i32.const -819008362)) - (i32.add (i32.const -724256010)) - (i32.add (i32.const -1130210643)) - (i32.add (i32.const -1781624750)) - (i32.add (i32.const 1656827810)) - (i32.add (i32.const -1480412970)) - (i32.add (i32.const -1447056941)) - (i32.add (i32.const 529740119)) - (i32.add (i32.const 1261619595)) - (i32.add (i32.const 115485068)) - (i32.add (i32.const 3419234)) - (i32.add (i32.const -700672643)) - (i32.add (i32.const 1418647241)) - (i32.add (i32.const 151231458)) - (i32.add (i32.const -1936369764)) - (i32.add (i32.const 308294718)) - (i32.add (i32.const 737689997)) - (i32.add (i32.const 1155916645)) - (i32.add (i32.const 1725953336)) - (i32.add (i32.const 1443725467)) - (i32.add (i32.const 1633968973)) - (i32.add (i32.const -1964621518)) - (i32.add (i32.const 1733417657)) - (i32.add (i32.const 310932636)) - (i32.add (i32.const 1812927791)) - (i32.add (i32.const 1374265270)) - (i32.add (i32.const -2127696868)) - (i32.add (i32.const -664430188)) - (i32.add (i32.const -1706846177)) - (i32.add (i32.const 1879725401)) - (i32.add (i32.const -1344783563)) - (i32.add (i32.const -1144868176)) - (i32.add (i32.const 5593958)) - (i32.add (i32.const 186143542)) - (i32.add (i32.const 662441702)) - (i32.add (i32.const 2096412885)) - (i32.add (i32.const 1798697144)) - (i32.add (i32.const 573410273)) - (i32.add (i32.const -554103294)) - (i32.add (i32.const -62614502)) - (i32.add (i32.const -2045999136)) - (i32.add (i32.const 1382607852)) - (i32.add (i32.const -735041960)) - (i32.add (i32.const 965835700)) - (i32.add (i32.const 1024149723)) - (i32.add (i32.const -733295512)) - (i32.add (i32.const -1856891772)) - (i32.add (i32.const 1567066279)) - (i32.add (i32.const -2090868599)) - (i32.add (i32.const 242923444)) - (i32.add (i32.const -671413769)) - (i32.add (i32.const 1515753158)) - (i32.add (i32.const 1861352320)) - (i32.add (i32.const -1209032575)) - (i32.add (i32.const 2140719656)) - (i32.add (i32.const 159347882)) - (i32.add (i32.const 1655430499)) - (i32.add (i32.const -154160852)) - (i32.add (i32.const 1073216206)) - (i32.add (i32.const 1583894994)) - (i32.add (i32.const 2019376726)) - (i32.add (i32.const 794808222)) - (i32.add (i32.const 1665464402)) - (i32.add (i32.const -1003136566)) - (i32.add (i32.const 1137989882)) - (i32.add (i32.const -2022877819)) - (i32.add (i32.const -693448894)) - (i32.add (i32.const 2037502981)) - (i32.add (i32.const -1083500132)) - (i32.add (i32.const 1051007482)) - (i32.add (i32.const -266324141)) - (i32.add (i32.const 1559624190)) - (i32.add (i32.const 280235685)) - (i32.add (i32.const -923644275)) - (i32.add (i32.const 2017156196)) - (i32.add (i32.const -1828335428)) - (i32.add (i32.const 1119495683)) - (i32.add (i32.const 1835530897)) - (i32.add (i32.const 214860133)) - (i32.add (i32.const -182114011)) - (i32.add (i32.const -636808003)) - (i32.add (i32.const 745021392)) - (i32.add (i32.const -1346608769)) - (i32.add (i32.const -461589826)) - (i32.add (i32.const -1860545438)) - (i32.add (i32.const -250955754)) - (i32.add (i32.const -1343271734)) - (i32.add (i32.const -155678886)) - (i32.add (i32.const -1932022765)) - (i32.add (i32.const 198643600)) - (i32.add (i32.const 524439553)) - (i32.add (i32.const 1120997881)) - (i32.add (i32.const 797455036)) - (i32.add (i32.const -1139975803)) - (i32.add (i32.const -1288501711)) - (i32.add (i32.const -1385891853)) - (i32.add (i32.const 881090489)) - (i32.add (i32.const -1496283170)) - (i32.add (i32.const 2026920076)) - (i32.add (i32.const -747943788)) - (i32.add (i32.const 845128462)) - (i32.add (i32.const -1870326072)) - (i32.add (i32.const -200515562)) - (i32.add (i32.const 307777154)) - (i32.add (i32.const 1328175861)) - (i32.add (i32.const -1229626195)) - (i32.add (i32.const 79975612)) - (i32.add (i32.const -191512777)) - (i32.add (i32.const 622259410)) - (i32.add (i32.const -1077252903)) - (i32.add (i32.const 1566663460)) - (i32.add (i32.const -1509694704)) - (i32.add (i32.const -254831342)) - (i32.add (i32.const 1815303809)) - (i32.add (i32.const -1101531828)) - (i32.add (i32.const -340310114)) - (i32.add (i32.const -1229308390)) - (i32.add (i32.const 1523706773)) - (i32.add (i32.const -1441246093)) - (i32.add (i32.const 1180890732)) - (i32.add (i32.const 639486489)) - (i32.add (i32.const -546129476)) - (i32.add (i32.const -1291041464)) - (i32.add (i32.const 1507137333)) - (i32.add (i32.const -1113825555)) - (i32.add (i32.const 495718169)) - (i32.add (i32.const -839770566)) - (i32.add (i32.const 1525692857)) - (i32.add (i32.const 303640030)) - (i32.add (i32.const -2096018946)) - (i32.add (i32.const 961984764)) - (i32.add (i32.const -846149700)) - (i32.add (i32.const -1685860593)) - (i32.add (i32.const -943055518)) - (i32.add (i32.const 334960186)) - (i32.add (i32.const -276395602)) - (i32.add (i32.const 1520062320)) - (i32.add (i32.const -1638146201)) - (i32.add (i32.const -2084438456)) - (i32.add (i32.const -1932738250)) - (i32.add (i32.const -760635024)) - (i32.add (i32.const 63541288)) - (i32.add (i32.const -1018542895)) - (i32.add (i32.const -1420406123)) - (i32.add (i32.const -269594307)) - (i32.add (i32.const 829770691)) - (i32.add (i32.const -197912196)) - (i32.add (i32.const -1154080187)) - (i32.add (i32.const -2061685992)) - (i32.add (i32.const -1382593780)) - (i32.add (i32.const -349374614)) - (i32.add (i32.const 1048271346)) - (i32.add (i32.const 1091197094)) - (i32.add (i32.const 452900221)) - (i32.add (i32.const -411829276)) - (i32.add (i32.const 1803041211)) - (i32.add (i32.const -688441401)) - (i32.add (i32.const -1927095742)) - (i32.add (i32.const 584229814)) - (i32.add (i32.const 1622140758)) - (i32.add (i32.const 602386979)) - (i32.add (i32.const 480425670)) - (i32.add (i32.const -1090053113)) - (i32.add (i32.const -27799672)) - (i32.add (i32.const -921621230)) - (i32.add (i32.const 2081345093)) - (i32.add (i32.const 1584484104)) - (i32.add (i32.const -501872893)) - (i32.add (i32.const -1716395721)) - (i32.add (i32.const 123323045)) - (i32.add (i32.const -779593257)) - (i32.add (i32.const -1670441403)) - (i32.add (i32.const -719927350)) - (i32.add (i32.const -638778389)) - (i32.add (i32.const -929157017)) - (i32.add (i32.const -2013712345)) - (i32.add (i32.const -1719854669)) - (i32.add (i32.const 1659569543)) - (i32.add (i32.const -951434501)) - (i32.add (i32.const -262965328)) - (i32.add (i32.const -1337002927)) - (i32.add (i32.const 9460469)) - (i32.add (i32.const 98085383)) - (i32.add (i32.const 241892439)) - (i32.add (i32.const -1299780724)) - (i32.add (i32.const -1184751698)) - (i32.add (i32.const -2003513976)) - (i32.add (i32.const -1121836615)) - (i32.add (i32.const 177549797)) - (i32.add (i32.const -853666420)) - (i32.add (i32.const -791019307)) - (i32.add (i32.const 728873894)) - (i32.add (i32.const -1288992986)) - (i32.add (i32.const 1302716614)) - (i32.add (i32.const 370409360)) - (i32.add (i32.const 2104094898)) - (i32.add (i32.const 58701879)) - (i32.add (i32.const -1589291944)) - (i32.add (i32.const -1983692367)) - (i32.add (i32.const 385019197)) - (i32.add (i32.const -323589374)) - (i32.add (i32.const -1928990702)) - (i32.add (i32.const -1624086208)) - (i32.add (i32.const 822570058)) - (i32.add (i32.const 2005482985)) - (i32.add (i32.const -1654672193)) - (i32.add (i32.const 443519132)) - (i32.add (i32.const 1904034422)) - (i32.add (i32.const -781960614)) - (i32.add (i32.const -687740965)) - (i32.add (i32.const 1828534292)) - (i32.add (i32.const -2122608070)) - (i32.add (i32.const 1497104936)) - (i32.add (i32.const 1646740311)) - (i32.add (i32.const -171943195)) - (i32.add (i32.const -860876536)) - (i32.add (i32.const 1020322681)) - (i32.add (i32.const -1408655521)) - (i32.add (i32.const -1937096330)) - (i32.add (i32.const -993056424)) - (i32.add (i32.const 1859612438)) - (i32.add (i32.const 331250097)) - (i32.add (i32.const -396011362)) - (i32.add (i32.const -1359449260)) - (i32.add (i32.const -1736964222)) - (i32.add (i32.const 566856434)) - (i32.add (i32.const 519800941)) - (i32.add (i32.const 309384224)) - (i32.add (i32.const -811425827)) - (i32.add (i32.const -473393986)) - (i32.add (i32.const -372782388)) - (i32.add (i32.const -1844975378)) - (i32.add (i32.const -574988509)) - (i32.add (i32.const 1641045052)) - (i32.add (i32.const -1214589305)) - (i32.add (i32.const -269282040)) - (i32.add (i32.const -818473762)) - (i32.add (i32.const 857045272)) - (i32.add (i32.const -184174629)) - (i32.add (i32.const -47592429)) - (i32.add (i32.const -1657035888)) - (i32.add (i32.const -1411360527)) - (i32.add (i32.const -2119851793)) - (i32.add (i32.const 1331855655)) - (i32.add (i32.const 655034257)) - (i32.add (i32.const -765009583)) - (i32.add (i32.const -43277151)) - (i32.add (i32.const -698000193)) - (i32.add (i32.const 2146074981)) - (i32.add (i32.const -804890684)) - (i32.add (i32.const 502601908)) - (i32.add (i32.const -378453383)) - (i32.add (i32.const 1663477263)) - (i32.add (i32.const 33778260)) - (i32.add (i32.const -1238459437)) - (i32.add (i32.const 2119157218)) - (i32.add (i32.const -1760549091)) - (i32.add (i32.const -1455657144)) - (i32.add (i32.const -47260668)) - (i32.add (i32.const 716709609)) - (i32.add (i32.const -1877307812)) - (i32.add (i32.const -1310264832)) - (i32.add (i32.const 2014578654)) - (i32.add (i32.const 443819581)) - (i32.add (i32.const -529540303)) - (i32.add (i32.const -1988186170)) - (i32.add (i32.const 2139617294)) - (i32.add (i32.const -1516219372)) - (i32.add (i32.const -2137430218)) - (i32.add (i32.const 328658028)) - (i32.add (i32.const 43969844)) - (i32.add (i32.const -220275978)) - (i32.add (i32.const -1179221915)) - (i32.add (i32.const -1066898795)) - (i32.add (i32.const 1322481376)) - (i32.add (i32.const -870065236)) - (i32.add (i32.const -1401708436)) - (i32.add (i32.const 2052845937)) - (i32.add (i32.const -1074830384)) - (i32.add (i32.const 1083647045)) - (i32.add (i32.const -492350108)) - (i32.add (i32.const -1626757116)) - (i32.add (i32.const 396763846)) - (i32.add (i32.const 1028489500)) - (i32.add (i32.const -1159776499)) - (i32.add (i32.const -682099583)) - (i32.add (i32.const -1254822257)) - (i32.add (i32.const 991430310)) - (i32.add (i32.const 1894472997)) - (i32.add (i32.const -1653065081)) - (i32.add (i32.const -400270885)) - (i32.add (i32.const 2114300218)) - (i32.add (i32.const 2087166948)) - (i32.add (i32.const 966891296)) - (i32.add (i32.const -190760644)) - (i32.add (i32.const 908242876)) - (i32.add (i32.const -2120720279)) - (i32.add (i32.const -2020992512)) - (i32.add (i32.const 1673358712)) - (i32.add (i32.const -1154192677)) - (i32.add (i32.const 884816252)) - (i32.add (i32.const 1116917109)) - (i32.add (i32.const 1244596079)) - (i32.add (i32.const 1703947889)) - (i32.add (i32.const -959612558)) - (i32.add (i32.const -684065036)) - (i32.add (i32.const 41501283)) - (i32.add (i32.const -1593859786)) - (i32.add (i32.const 1545964783)) - (i32.add (i32.const -845100539)) - (i32.add (i32.const -1153394834)) - (i32.add (i32.const 981307595)) - (i32.add (i32.const -1096845914)) - (i32.add (i32.const 66287898)) - (i32.add (i32.const 2041703037)) - (i32.add (i32.const 705201788)) - (i32.add (i32.const -1062404628)) - (i32.add (i32.const -1326475693)) - (i32.add (i32.const -488671520)) - (i32.add (i32.const 1059409308)) - (i32.add (i32.const -1069788432)) - (i32.add (i32.const 111915351)) - (i32.add (i32.const -597553403)) - (i32.add (i32.const 851141458)) - (i32.add (i32.const 37894732)) - (i32.add (i32.const 245255702)) - (i32.add (i32.const -1261897047)) - (i32.add (i32.const -827516738)) - (i32.add (i32.const 1212796267)) - (i32.add (i32.const -993896340)) - (i32.add (i32.const 1687039407)) - (i32.add (i32.const -225223291)) - (i32.add (i32.const 1191253923)) - (i32.add (i32.const 1421725909)) - (i32.add (i32.const 937064298)) - (i32.add (i32.const -1389414406)) - (i32.add (i32.const 389405956)) - (i32.add (i32.const 2030616618)) - (i32.add (i32.const -1745852387)) - (i32.add (i32.const -1986573532)) - (i32.add (i32.const 1755356061)) - (i32.add (i32.const 1135798185)) - (i32.add (i32.const -921985289)) - (i32.add (i32.const 1914222759)) - (i32.add (i32.const -1341512609)) - (i32.add (i32.const 349046324)) - (i32.add (i32.const -363646776)) - (i32.add (i32.const -1172578146)) - (i32.add (i32.const 2072756466)) - (i32.add (i32.const 748840536)) - (i32.add (i32.const 484346586)) - (i32.add (i32.const 1522152992)) - (i32.add (i32.const -945694389)) - (i32.add (i32.const -1528001716)) - (i32.add (i32.const -1090951602)) - (i32.add (i32.const 52131713)) - (i32.add (i32.const -110446890)) - (i32.add (i32.const -892665227)) - (i32.add (i32.const 1995159605)) - (i32.add (i32.const -1996238706)) - (i32.add (i32.const 1959350781)) - (i32.add (i32.const -486881834)) - (i32.add (i32.const 1226356921)) - (i32.add (i32.const 899008808)) - (i32.add (i32.const -564992687)) - (i32.add (i32.const -258609078)) - (i32.add (i32.const 1168095771)) - (i32.add (i32.const 1757826861)) - (i32.add (i32.const -1053741413)) - (i32.add (i32.const -1202111560)) - (i32.add (i32.const 216044841)) - (i32.add (i32.const 693116476)) - (i32.add (i32.const 1423883903)) - (i32.add (i32.const 636985314)) - (i32.add (i32.const -872378058)) - (i32.add (i32.const -559373455)) - (i32.add (i32.const -748778735)) - (i32.add (i32.const -1422276587)) - (i32.add (i32.const -1072345544)) - (i32.add (i32.const 991034779)) - (i32.add (i32.const -1945279535)) - (i32.add (i32.const 1412169114)) - (i32.add (i32.const -1038077214)) - (i32.add (i32.const 695066167)) - (i32.add (i32.const -1432995213)) - (i32.add (i32.const 277213101)) - (i32.add (i32.const -662151388)) - (i32.add (i32.const 116255503)) - (i32.add (i32.const -1095152820)) - (i32.add (i32.const 747097776)) - (i32.add (i32.const -2130045257)) - (i32.add (i32.const -978815128)) - (i32.add (i32.const -1844367254)) - (i32.add (i32.const -1338145058)) - (i32.add (i32.const 395950007)) - (i32.add (i32.const 548904189)) - (i32.add (i32.const 381516947)) - (i32.add (i32.const 221536395)) - (i32.add (i32.const 464906564)) - (i32.add (i32.const -462382934)) - (i32.add (i32.const -1224614718)) - (i32.add (i32.const 479070617)) - (i32.add (i32.const -1149505965)) - (i32.add (i32.const -59995465)) - (i32.add (i32.const 732571535)) - (i32.add (i32.const 1541126187)) - (i32.add (i32.const 1216601704)) - (i32.add (i32.const -1969323452)) - (i32.add (i32.const 1128571261)) - (i32.add (i32.const 1941716877)) - (i32.add (i32.const -7226974)) - (i32.add (i32.const 1230689000)) - (i32.add (i32.const 1550451334)) - (i32.add (i32.const -460142827)) - (i32.add (i32.const 282142752)) - (i32.add (i32.const 1974269478)) - (i32.add (i32.const 615167194)) - (i32.add (i32.const -1306646682)) - (i32.add (i32.const 1921663528)) - (i32.add (i32.const 1718739339)) - (i32.add (i32.const -1667787711)) - (i32.add (i32.const -1350786967)) - (i32.add (i32.const -1588876707)) - (i32.add (i32.const -1415332174)) - (i32.add (i32.const 1721383101)) - (i32.add (i32.const 2097974519)) - (i32.add (i32.const 1582844409)) - (i32.add (i32.const 675565766)) - (i32.add (i32.const 1234269921)) - (i32.add (i32.const -896479936)) - (i32.add (i32.const 997180907)) - (i32.add (i32.const -1398604270)) - (i32.add (i32.const 1536809985)) - (i32.add (i32.const 691160081)) - (i32.add (i32.const 448784453)) - (i32.add (i32.const 822949008)) - (i32.add (i32.const -207039821)) - (i32.add (i32.const 1082180196)) - (i32.add (i32.const -717577920)) - (i32.add (i32.const 999194368)) - (i32.add (i32.const 345581626)) - (i32.add (i32.const -2085385064)) - (i32.add (i32.const 935703034)) - (i32.add (i32.const -918649651)) - (i32.add (i32.const -388237335)) - (i32.add (i32.const -1214351487)) - (i32.add (i32.const 1880003358)) - (i32.add (i32.const -1930111504)) - (i32.add (i32.const 1431277127)) - (i32.add (i32.const -398348915)) - (i32.add (i32.const 1688280781)) - (i32.add (i32.const -502411866)) - (i32.add (i32.const 319006464)) - (i32.add (i32.const 755951775)) - (i32.add (i32.const -1128291501)) - (i32.add (i32.const -639534665)) - (i32.add (i32.const 840254469)) - (i32.add (i32.const -126207875)) - (i32.add (i32.const 1762837232)) - (i32.add (i32.const 274061011)) - (i32.add (i32.const 732098848)) - (i32.add (i32.const -1338318531)) - (i32.add (i32.const -36144653)) - (i32.add (i32.const -1963269517)) - (i32.add (i32.const -385076044)) - (i32.add (i32.const -1321131962)) - (i32.add (i32.const -1635387100)) - (i32.add (i32.const -1772986670)) - (i32.add (i32.const -892639174)) - (i32.add (i32.const -1765352961)) - (i32.add (i32.const -565303041)) - (i32.add (i32.const 108801821)) - (i32.add (i32.const 1031643822)) - (i32.add (i32.const -645088754)) - (i32.add (i32.const -192228018)) - (i32.add (i32.const 753091426)) - (i32.add (i32.const -675942781)) - (i32.add (i32.const -178424187)) - (i32.add (i32.const -1274386740)) - (i32.add (i32.const 1189890641)) - (i32.add (i32.const -208223945)) - (i32.add (i32.const 230449798)) - (i32.add (i32.const -967534564)) - (i32.add (i32.const 301462079)) - (i32.add (i32.const 1339321769)) - (i32.add (i32.const -707129102)) - (i32.add (i32.const -1374674262)) - (i32.add (i32.const -855322072)) - (i32.add (i32.const 1933435104)) - (i32.add (i32.const 349697915)) - (i32.add (i32.const 812439432)) - (i32.add (i32.const -56684674)) - (i32.add (i32.const 93763619)) - (i32.add (i32.const -2106493233)) - (i32.add (i32.const -1982286982)) - (i32.add (i32.const -895077381)) - (i32.add (i32.const -2036858659)) - (i32.add (i32.const -931125631)) - (i32.add (i32.const 1653662434)) - (i32.add (i32.const 746582773)) - (i32.add (i32.const -97793106)) - (i32.add (i32.const 398777142)) - (i32.add (i32.const 1909574633)) - (i32.add (i32.const 2077370321)) - (i32.add (i32.const -1508534360)) - (i32.add (i32.const 123204423)) - (i32.add (i32.const 559702507)) - (i32.add (i32.const -1912194383)) - (i32.add (i32.const -1088471695)) - (i32.add (i32.const -686420267)) - (i32.add (i32.const -468870860)) - (i32.add (i32.const 2097167039)) - (i32.add (i32.const -426448721)) - (i32.add (i32.const 1818341914)) - (i32.add (i32.const 629216958)) - (i32.add (i32.const -887318219)) - (i32.add (i32.const 2015219039)) - (i32.add (i32.const -1464810562)) - (i32.add (i32.const 390924010)) - (i32.add (i32.const -1400629520)) - (i32.add (i32.const -488941495)) - (i32.add (i32.const -1148855185)) - (i32.add (i32.const 2035012632)) - (i32.add (i32.const 1671090649)) - (i32.add (i32.const -507644009)) - (i32.add (i32.const -1492137638)) - (i32.add (i32.const -498728662)) - (i32.add (i32.const 321839204)) - (i32.add (i32.const 563576882)) - (i32.add (i32.const 1660449147)) - (i32.add (i32.const 1279568538)) - (i32.add (i32.const 1976590766)) - (i32.add (i32.const 1821767161)) - (i32.add (i32.const -879245836)) - (i32.add (i32.const 593981620)) - (i32.add (i32.const 1438361075)) - (i32.add (i32.const 892293037)) - (i32.add (i32.const -1430515119)) - (i32.add (i32.const 733017506)) - (i32.add (i32.const 1835781005)) - (i32.add (i32.const 1246203582)) - (i32.add (i32.const -144224288)) - (i32.add (i32.const -1122328721)) - (i32.add (i32.const -1221040874)) - (i32.add (i32.const -1381848741)) - (i32.add (i32.const 143528255)) - (i32.add (i32.const 128302399)) - (i32.add (i32.const 2092341716)) - (i32.add (i32.const 707725275)) - (i32.add (i32.const -2141261369)) - (i32.add (i32.const 337056344)) - (i32.add (i32.const -731015349)) - (i32.add (i32.const -2049232103)) - (i32.add (i32.const -1704467347)) - (i32.add (i32.const 1702391256)) - (i32.add (i32.const -918043931)) - (i32.add (i32.const 409292740)) - (i32.add (i32.const 1707553837)) - (i32.add (i32.const -238934446)) - (i32.add (i32.const -1808085367)) - (i32.add (i32.const 1354535000)) - (i32.add (i32.const -1968506814)) - (i32.add (i32.const 1931160733)) - (i32.add (i32.const -1195958407)) - (i32.add (i32.const 1490882736)) - (i32.add (i32.const 1663458159)) - (i32.add (i32.const 49970569)) - (i32.add (i32.const -617747413)) - (i32.add (i32.const 469017410)) - (i32.add (i32.const -461099358)) - (i32.add (i32.const -1452517594)) - (i32.add (i32.const 1561767422)) - (i32.add (i32.const 904360821)) - (i32.add (i32.const 925023275)) - (i32.add (i32.const -1269775691)) - (i32.add (i32.const -1112888739)) - (i32.add (i32.const 1487790500)) - (i32.add (i32.const 1429237693)) - (i32.add (i32.const -376628172)) - (i32.add (i32.const -1631026511)) - (i32.add (i32.const -1849528228)) - (i32.add (i32.const 1562558186)) - (i32.add (i32.const 760889699)) - (i32.add (i32.const 849500529)) - (i32.add (i32.const 408911500)) - (i32.add (i32.const 53768942)) - (i32.add (i32.const -2044474663)) - (i32.add (i32.const -880810919)) - (i32.add (i32.const -409891550)) - (i32.add (i32.const -3094433)) - (i32.add (i32.const 1855652502)) - (i32.add (i32.const 560804946)) - (i32.add (i32.const 1307747579)) - (i32.add (i32.const -815873542)) - (i32.add (i32.const -14610713)) - (i32.add (i32.const -1677627819)) - (i32.add (i32.const 1208075587)) - (i32.add (i32.const 1199019223)) - (i32.add (i32.const 47370426)) - (i32.add (i32.const 125590851)) - (i32.add (i32.const 217405143)) - (i32.add (i32.const -229184050)) - (i32.add (i32.const -1710026620)) - (i32.add (i32.const -2003846613)) - (i32.add (i32.const 1643344349)) - (i32.add (i32.const 690658132)) - (i32.add (i32.const -853507764)) - (i32.add (i32.const 292089952)) - (i32.add (i32.const 116200283)) - (i32.add (i32.const -503264767)) - (i32.add (i32.const 157663928)) - (i32.add (i32.const 27428943)) - (i32.add (i32.const -980695711)) - (i32.add (i32.const -1207536255)) - (i32.add (i32.const 1188480925)) - (i32.add (i32.const -177458952)) - (i32.add (i32.const -1876101697)) - (i32.add (i32.const -725463434)) - (i32.add (i32.const 1728493532)) - (i32.add (i32.const -300299988)) - (i32.add (i32.const 444220454)) - (i32.add (i32.const -1189745235)) - (i32.add (i32.const 389247914)) - (i32.add (i32.const 610812459)) - (i32.add (i32.const 1580088268)) - (i32.add (i32.const -1694670707)) - (i32.add (i32.const -617208026)) - (i32.add (i32.const -175513280)) - (i32.add (i32.const -991665356)) - (i32.add (i32.const 538343835)) - (i32.add (i32.const -99034242)) - (i32.add (i32.const 600601450)) - (i32.add (i32.const -12452352)) - (i32.add (i32.const -2010377800)) - (i32.add (i32.const -1178869927)) - (i32.add (i32.const 185213781)) - (i32.add (i32.const 163132488)) - (i32.add (i32.const -49516237)) - (i32.add (i32.const -398845500)) - (i32.add (i32.const 951992904)) - (i32.add (i32.const -1666450292)) - (i32.add (i32.const -558353891)) - (i32.add (i32.const -1474830401)) - (i32.add (i32.const 823353465)) - (i32.add (i32.const 1566811449)) - (i32.add (i32.const 191879742)) - (i32.add (i32.const -224214259)) - (i32.add (i32.const 1185004949)) - (i32.add (i32.const -865099818)) - (i32.add (i32.const 99646674)) - (i32.add (i32.const -1316604980)) - (i32.add (i32.const -243696962)) - (i32.add (i32.const 1093120149)) - (i32.add (i32.const -1018615852)) - (i32.add (i32.const -60174070)) - (i32.add (i32.const -1975122746)) - (i32.add (i32.const -1771231702)) - (i32.add (i32.const 2056607865)) - (i32.add (i32.const -1990709055)) - (i32.add (i32.const -545141018)) - (i32.add (i32.const -1244175573)) - (i32.add (i32.const -636069393)) - (i32.add (i32.const 1563887832)) - (i32.add (i32.const 1609597567)) - (i32.add (i32.const 1500865362)) - (i32.add (i32.const 1432937584)) - (i32.add (i32.const -1765840692)) - (i32.add (i32.const 1144162894)) - (i32.add (i32.const 860052933)) - (i32.add (i32.const 268318736)) - (i32.add (i32.const -740296387)) - (i32.add (i32.const 913080347)) - (i32.add (i32.const -1870269350)) - (i32.add (i32.const -1670533132)) - (i32.add (i32.const 1340870144)) - (i32.add (i32.const -1146486122)) - (i32.add (i32.const -787862211)) - (i32.add (i32.const 1609403900)) - (i32.add (i32.const 748426292)) - (i32.add (i32.const -585983454)) - (i32.add (i32.const -897932134)) - (i32.add (i32.const 27842682)) - (i32.add (i32.const 1110466919)) - (i32.add (i32.const 178548103)) - (i32.add (i32.const -867957796)) - (i32.add (i32.const -1098656540)) - (i32.add (i32.const -33715572)) - (i32.add (i32.const -116117074)) - (i32.add (i32.const -396132877)) - (i32.add (i32.const 215222708)) - (i32.add (i32.const -2003162548)) - (i32.add (i32.const 2026621269)) - (i32.add (i32.const -1580357875)) - (i32.add (i32.const -2000437935)) - (i32.add (i32.const 1763031360)) - (i32.add (i32.const 918732327)) - (i32.add (i32.const 568616138)) - (i32.add (i32.const -268987438)) - (i32.add (i32.const 1856982250)) - (i32.add (i32.const -298470725)) - (i32.add (i32.const 201749084)) - (i32.add (i32.const -1139288213)) - (i32.add (i32.const -1909422296)) - (i32.add (i32.const -1117921562)) - (i32.add (i32.const 114853467)) - (i32.add (i32.const 29067418)) - (i32.add (i32.const 378565328)) - (i32.add (i32.const -2072974106)) - (i32.add (i32.const 747471337)) - (i32.add (i32.const -1581842342)) - (i32.add (i32.const 1092776288)) - (i32.add (i32.const 1700966294)) - (i32.add (i32.const -149931998)) - (i32.add (i32.const -2025144969)) - (i32.add (i32.const 132383785)) - (i32.add (i32.const -3146868)) - (i32.add (i32.const 624023660)) - (i32.add (i32.const 725303242)) - (i32.add (i32.const -1701836424)) - (i32.add (i32.const -1364376396)) - (i32.add (i32.const -1102714214)) - (i32.add (i32.const -851105404)) - (i32.add (i32.const 1933006221)) - (i32.add (i32.const 515430504)) - (i32.add (i32.const -308905432)) - (i32.add (i32.const -1216829322)) - (i32.add (i32.const -1934932164)) - (i32.add (i32.const 426504106)) - (i32.add (i32.const -1607792948)) - (i32.add (i32.const -418939645)) - (i32.add (i32.const 1409478061)) - (i32.add (i32.const -1297443685)) - (i32.add (i32.const -895832786)) - (i32.add (i32.const -1382430192)) - (i32.add (i32.const 1575734726)) - (i32.add (i32.const 1494496562)) - (i32.add (i32.const 1884305314)) - (i32.add (i32.const 1623783989)) - (i32.add (i32.const 200038596)) - (i32.add (i32.const 1941402891)) - (i32.add (i32.const 427739835)) - (i32.add (i32.const 1128635926)) - (i32.add (i32.const -922635089)) - (i32.add (i32.const 337763851)) - (i32.add (i32.const 663327348)) - (i32.add (i32.const -1447533985)) - (i32.add (i32.const 1341394724)) - (i32.add (i32.const -920844586)) - (i32.add (i32.const -1604457664)) - (i32.add (i32.const -1191387466)) - (i32.add (i32.const -195793344)) - (i32.add (i32.const 938708180)) - (i32.add (i32.const 41480710)) - (i32.add (i32.const -1217218710)) - (i32.add (i32.const 1170359369)) - (i32.add (i32.const 757032378)) - (i32.add (i32.const 275737697)) - (i32.add (i32.const -1401491386)) - (i32.add (i32.const 464407799)) - (i32.add (i32.const -1098509827)) - (i32.add (i32.const 1089525777)) - (i32.add (i32.const 1274266479)) - (i32.add (i32.const 1982319142)) - (i32.add (i32.const 2117472439)) - (i32.add (i32.const -1294868571)) - (i32.add (i32.const 1382317465)) - (i32.add (i32.const -749148063)) - (i32.add (i32.const 978421849)) - (i32.add (i32.const 75951925)) - (i32.add (i32.const -557818094)) - (i32.add (i32.const -384605483)) - (i32.add (i32.const 1133860697)) - (i32.add (i32.const 164857440)) - (i32.add (i32.const 151560634)) - (i32.add (i32.const 448862439)) - (i32.add (i32.const -1770946316)) - (i32.add (i32.const 1761822441)) - (i32.add (i32.const -1335780747)) - (i32.add (i32.const -250282247)) - (i32.add (i32.const 1202591537)) - (i32.add (i32.const 521393375)) - (i32.add (i32.const -994407781)) - (i32.add (i32.const 1330055848)) - (i32.add (i32.const 258892066)) - (i32.add (i32.const 765366099)) - (i32.add (i32.const -1406460467)) - (i32.add (i32.const -1649875701)) - (i32.add (i32.const 1783370037)) - (i32.add (i32.const 1434838389)) - (i32.add (i32.const 110698483)) - (i32.add (i32.const -1706332646)) - (i32.add (i32.const 505308456)) - (i32.add (i32.const 1002557035)) - (i32.add (i32.const -2061979323)) - (i32.add (i32.const -236838305)) - (i32.add (i32.const 1816255402)) - (i32.add (i32.const 38574421)) - (i32.add (i32.const -763984486)) - (i32.add (i32.const 3202910)) - (i32.add (i32.const 280199786)) - (i32.add (i32.const -1354765913)) - (i32.add (i32.const 520850733)) - (i32.add (i32.const -1366167473)) - (i32.add (i32.const 102640492)) - (i32.add (i32.const -1209242809)) - (i32.add (i32.const 67802693)) - (i32.add (i32.const 1452777082)) - (i32.add (i32.const 1879494721)) - (i32.add (i32.const 318468557)) - (i32.add (i32.const -499854880)) - (i32.add (i32.const 1896531397)) - (i32.add (i32.const -1955605474)) - (i32.add (i32.const 2098233635)) - (i32.add (i32.const 489923878)) - (i32.add (i32.const 1756071792)) - (i32.add (i32.const 2146496236)) - (i32.add (i32.const -1238799576)) - (i32.add (i32.const 546891073)) - (i32.add (i32.const 681005426)) - (i32.add (i32.const -28496427)) - (i32.add (i32.const 1451326356)) - (i32.add (i32.const -2057973012)) - (i32.add (i32.const 1735528793)) - (i32.add (i32.const -1897715776)) - (i32.add (i32.const -770796542)) - (i32.add (i32.const -815952832)) - (i32.add (i32.const -1399243394)) - (i32.add (i32.const -356504351)) - (i32.add (i32.const 517502241)) - (i32.add (i32.const 1341940196)) - (i32.add (i32.const 623458145)) - (i32.add (i32.const -1680906382)) - (i32.add (i32.const 2006457321)) - (i32.add (i32.const -987992654)) - (i32.add (i32.const 1191543573)) - (i32.add (i32.const 1794380419)) - (i32.add (i32.const 318741332)) - (i32.add (i32.const 1814832480)) - (i32.add (i32.const -116320993)) - (i32.add (i32.const 242214579)) - (i32.add (i32.const 464978911)) - (i32.add (i32.const 1922379028)) - (i32.add (i32.const -551221275)) - (i32.add (i32.const -919158362)) - (i32.add (i32.const -1414237695)) - (i32.add (i32.const -1425752578)) - (i32.add (i32.const -2110613899)) - (i32.add (i32.const 379547212)) - (i32.add (i32.const 1970231022)) - (i32.add (i32.const 1432361652)) - (i32.add (i32.const -133220762)) - (i32.add (i32.const -192201708)) - (i32.add (i32.const -120326884)) - (i32.add (i32.const -298826508)) - (i32.add (i32.const -1712434688)) - (i32.add (i32.const 938142648)) - (i32.add (i32.const 475917931)) - (i32.add (i32.const -873332651)) - (i32.add (i32.const 294301989)) - (i32.add (i32.const 34803031)) - (i32.add (i32.const -665223082)) - (i32.add (i32.const 1206124282)) - (i32.add (i32.const -833996212)) - (i32.add (i32.const 1710255502)) - (i32.add (i32.const 338745534)) - (i32.add (i32.const 1991490933)) - (i32.add (i32.const 677812764)) - (i32.add (i32.const -1749429748)) - (i32.add (i32.const 383546300)) - (i32.add (i32.const 406196399)) - (i32.add (i32.const -773068267)) - (i32.add (i32.const -1064136430)) - (i32.add (i32.const -1049289946)) - (i32.add (i32.const -20131188)) - (i32.add (i32.const -823760825)) - (i32.add (i32.const 183228775)) - (i32.add (i32.const -1900183387)) - (i32.add (i32.const 1127039103)) - (i32.add (i32.const 2038144826)) - (i32.add (i32.const -186193492)) - (i32.add (i32.const -695129653)) - (i32.add (i32.const -57332052)) - (i32.add (i32.const -679255006)) - (i32.add (i32.const 1009825540)) - (i32.add (i32.const -566186552)) - (i32.add (i32.const -622005467)) - (i32.add (i32.const 1019576636)) - (i32.add (i32.const -523705740)) - (i32.add (i32.const 245606344)) - (i32.add (i32.const -1196482490)) - (i32.add (i32.const 581228558)) - (i32.add (i32.const 1273229886)) - (i32.add (i32.const -1547268844)) - (i32.add (i32.const 1443378699)) - (i32.add (i32.const 458176826)) - (i32.add (i32.const -1175943593)) - (i32.add (i32.const -1115667005)) - (i32.add (i32.const -1444183528)) - (i32.add (i32.const 1612554610)) - (i32.add (i32.const 1351042681)) - (i32.add (i32.const -688399511)) - (i32.add (i32.const -932908073)) - (i32.add (i32.const 2117530333)) - (i32.add (i32.const -15214251)) - (i32.add (i32.const 1201375473)) - (i32.add (i32.const 2118056169)) - (i32.add (i32.const 1687449940)) - (i32.add (i32.const -1663452502)) - (i32.add (i32.const -1933362672)) - (i32.add (i32.const 898769109)) - (i32.add (i32.const 32658232)) - (i32.add (i32.const 235084596)) - (i32.add (i32.const 2081979166)) - (i32.add (i32.const 736018854)) - (i32.add (i32.const 440398878)) - (i32.add (i32.const 988298403)) - (i32.add (i32.const 791407207)) - (i32.add (i32.const 1452040071)) - (i32.add (i32.const -2075070893)) - (i32.add (i32.const -476577493)) - (i32.add (i32.const 802183547)) - (i32.add (i32.const 1645103930)) - (i32.add (i32.const 1276766932)) - (i32.add (i32.const -1321311178)) - (i32.add (i32.const 1683096515)) - (i32.add (i32.const 1161624920)) - (i32.add (i32.const 41795223)) - (i32.add (i32.const 204191425)) - (i32.add (i32.const -752762089)) - (i32.add (i32.const 1664839150)) - (i32.add (i32.const -528926237)) - (i32.add (i32.const -1170030048)) - (i32.add (i32.const -834450025)) - (i32.add (i32.const -685179504)) - (i32.add (i32.const 2012878252)) - (i32.add (i32.const 940124203)) - (i32.add (i32.const -1781250603)) - (i32.add (i32.const -721247937)) - (i32.add (i32.const -1279117107)) - (i32.add (i32.const 789509980)) - (i32.add (i32.const -20473893)) - (i32.add (i32.const 1762806836)) - (i32.add (i32.const 683535246)) - (i32.add (i32.const -370336461)) - (i32.add (i32.const -53511038)) - (i32.add (i32.const -1407907420)) - (i32.add (i32.const -1150757946)) - (i32.add (i32.const 911484122)) - (i32.add (i32.const -713222738)) - (i32.add (i32.const -1637515522)) - (i32.add (i32.const 1603558287)) - (i32.add (i32.const 1883496366)) - (i32.add (i32.const 1403251117)) - (i32.add (i32.const 1614405860)) - (i32.add (i32.const -998574472)) - (i32.add (i32.const 842226093)) - (i32.add (i32.const 525398076)) - (i32.add (i32.const 1688490071)) - (i32.add (i32.const 1281075222)) - (i32.add (i32.const 1729043853)) - (i32.add (i32.const 2129105298)) - (i32.add (i32.const -712426645)) - (i32.add (i32.const -1204629644)) - (i32.add (i32.const -256959893)) - (i32.add (i32.const 1627191454)) - (i32.add (i32.const -18230655)) - (i32.add (i32.const -549673653)) - (i32.add (i32.const -1311063282)) - (i32.add (i32.const 1234324132)) - (i32.add (i32.const 1969532963)) - (i32.add (i32.const -2097317712)) - (i32.add (i32.const 765194427)) - (i32.add (i32.const 647000862)) - (i32.add (i32.const 1972219923)) - (i32.add (i32.const 1838766566)) - (i32.add (i32.const 767461922)) - (i32.add (i32.const -2061059031)) - (i32.add (i32.const 2019907931)) - (i32.add (i32.const 143444335)) - (i32.add (i32.const 510237865)) - (i32.add (i32.const -854786906)) - (i32.add (i32.const 1261652249)) - (i32.add (i32.const -396370704)) - (i32.add (i32.const 226061891)) - (i32.add (i32.const 1467921736)) - (i32.add (i32.const 99700659)) - (i32.add (i32.const 1911361337)) - (i32.add (i32.const 1890623977)) - (i32.add (i32.const -220275023)) - (i32.add (i32.const 770505705)) - (i32.add (i32.const 88475198)) - (i32.add (i32.const -645201514)) - (i32.add (i32.const -173248133)) - (i32.add (i32.const 1864763630)) - (i32.add (i32.const 1224226645)) - (i32.add (i32.const -956054852)) - (i32.add (i32.const -772067537)) - (i32.add (i32.const -154066563)) - (i32.add (i32.const 734267371)) - (i32.add (i32.const 945775889)) - (i32.add (i32.const 1025519785)) - (i32.add (i32.const 1724115638)) - (i32.add (i32.const -1854427419)) - (i32.add (i32.const 1688832102)) - (i32.add (i32.const 899719159)) - (i32.add (i32.const -308844383)) - (i32.add (i32.const 2101948206)) - (i32.add (i32.const 993105290)) - (i32.add (i32.const -1240676746)) - (i32.add (i32.const -837553056)) - (i32.add (i32.const 798597426)) - (i32.add (i32.const 706506028)) - (i32.add (i32.const -882266534)) - (i32.add (i32.const -998924760)) - (i32.add (i32.const 815472363)) - (i32.add (i32.const -366736874)) - (i32.add (i32.const 494768539)) - (i32.add (i32.const -834224551)) - (i32.add (i32.const 2046007206)) - (i32.add (i32.const -367932715)) - (i32.add (i32.const 1998939925)) - (i32.add (i32.const 2143767662)) - (i32.add (i32.const 1552646032)) - (i32.add (i32.const 972335758)) - (i32.add (i32.const 205060040)) - (i32.add (i32.const 1256721993)) - (i32.add (i32.const -637066269)) - (i32.add (i32.const -408613828)) - (i32.add (i32.const 1144496332)) - (i32.add (i32.const -921719086)) - (i32.add (i32.const 1540632136)) - (i32.add (i32.const 1835568410)) - (i32.add (i32.const -762494025)) - (i32.add (i32.const 1540528178)) - (i32.add (i32.const -1684974034)) - (i32.add (i32.const -1919580691)) - (i32.add (i32.const -1274135384)) - (i32.add (i32.const 1815335508)) - (i32.add (i32.const -1377584283)) - (i32.add (i32.const -1438342270)) - (i32.add (i32.const -27227108)) - (i32.add (i32.const 129766973)) - (i32.add (i32.const 861613635)) - (i32.add (i32.const 467103106)) - (i32.add (i32.const 1964552162)) - (i32.add (i32.const -1709203795)) - (i32.add (i32.const 936664563)) - (i32.add (i32.const 381190222)) - (i32.add (i32.const 1388720754)) - (i32.add (i32.const -1228932552)) - (i32.add (i32.const -1221972940)) - (i32.add (i32.const -995467111)) - (i32.add (i32.const -745946774)) - (i32.add (i32.const -1980186073)) - (i32.add (i32.const 1236230317)) - (i32.add (i32.const -580185522)) - (i32.add (i32.const 57404687)) - (i32.add (i32.const -6267600)) - (i32.add (i32.const -672652608)) - (i32.add (i32.const 1225077764)) - (i32.add (i32.const -235331020)) - (i32.add (i32.const 2100999209)) - (i32.add (i32.const -1867872003)) - (i32.add (i32.const 1723525670)) - (i32.add (i32.const -1198801227)) - (i32.add (i32.const -196183224)) - (i32.add (i32.const -829953158)) - (i32.add (i32.const -912941022)) - (i32.add (i32.const 1662099454)) - (i32.add (i32.const -804106501)) - (i32.add (i32.const -1799156552)) - (i32.add (i32.const 1130792424)) - (i32.add (i32.const -1278521975)) - (i32.add (i32.const -1480582067)) - (i32.add (i32.const 654843209)) - (i32.add (i32.const 851930444)) - (i32.add (i32.const 1766439066)) - (i32.add (i32.const -2076130690)) - (i32.add (i32.const 1483951470)) - (i32.add (i32.const 1818666175)) - (i32.add (i32.const 1900720386)) - (i32.add (i32.const 1005511071)) - (i32.add (i32.const 2090602258)) - (i32.add (i32.const 1486098250)) - (i32.add (i32.const 648634485)) - (i32.add (i32.const -335474570)) - (i32.add (i32.const 246149322)) - (i32.add (i32.const -894676970)) - (i32.add (i32.const 38359147)) - (i32.add (i32.const 721874199)) - (i32.add (i32.const -665500408)) - (i32.add (i32.const 1363459685)) - (i32.add (i32.const 659939888)) - (i32.add (i32.const -1614896545)) - (i32.add (i32.const -1150271620)) - (i32.add (i32.const -522824348)) - (i32.add (i32.const 1257014245)) - (i32.add (i32.const 1219437010)) - (i32.add (i32.const 636199745)) - (i32.add (i32.const -118129178)) - (i32.add (i32.const -1938555666)) - (i32.add (i32.const -348284413)) - (i32.add (i32.const 142345468)) - (i32.add (i32.const -72461541)) - (i32.add (i32.const 1727393452)) - (i32.add (i32.const 1743524804)) - (i32.add (i32.const 1328825974)) - (i32.add (i32.const 994442838)) - (i32.add (i32.const -300990852)) - (i32.add (i32.const -1497784983)) - (i32.add (i32.const 743692329)) - (i32.add (i32.const -1005886672)) - (i32.add (i32.const 1329188746)) - (i32.add (i32.const -623252330)) - (i32.add (i32.const 1607032674)) - (i32.add (i32.const -1080818681)) - (i32.add (i32.const -863257664)) - (i32.add (i32.const 712780712)) - (i32.add (i32.const 1135422965)) - (i32.add (i32.const 202397194)) - (i32.add (i32.const -1746499297)) - (i32.add (i32.const 232874165)) - (i32.add (i32.const -717036310)) - (i32.add (i32.const -2097559473)) - (i32.add (i32.const -552145970)) - (i32.add (i32.const 1659629371)) - (i32.add (i32.const 1792129415)) - (i32.add (i32.const 217955597)) - (i32.add (i32.const 1505044963)) - (i32.add (i32.const 1945418994)) - (i32.add (i32.const -1664753500)) - (i32.add (i32.const -190971802)) - (i32.add (i32.const 47633541)) - (i32.add (i32.const 1936958989)) - (i32.add (i32.const -1599762711)) - (i32.add (i32.const 88923096)) - (i32.add (i32.const 1929425725)) - (i32.add (i32.const -1569309484)) - (i32.add (i32.const 2042672206)) - (i32.add (i32.const -1107092491)) - (i32.add (i32.const -1297347348)) - (i32.add (i32.const -1286063456)) - (i32.add (i32.const -1752484416)) - (i32.add (i32.const -230480505)) - (i32.add (i32.const -321848799)) - (i32.add (i32.const -1495570187)) - (i32.add (i32.const 8512220)) - (i32.add (i32.const 1630715631)) - (i32.add (i32.const 138104903)) - (i32.add (i32.const 820751280)) - (i32.add (i32.const 1042288954)) - (i32.add (i32.const 11467315)) - (i32.add (i32.const 1496044993)) - (i32.add (i32.const -336644374)) - (i32.add (i32.const -1883674600)) - (i32.add (i32.const -546849080)) - (i32.add (i32.const -386414336)) - (i32.add (i32.const -1905225127)) - (i32.add (i32.const -1814660374)) - (i32.add (i32.const -1256495186)) - (i32.add (i32.const 852525236)) - (i32.add (i32.const -242496393)) - (i32.add (i32.const -572277631)) - (i32.add (i32.const -2008281314)) - (i32.add (i32.const -1762067666)) - (i32.add (i32.const -2077009426)) - (i32.add (i32.const -2049863711)) - (i32.add (i32.const -59893626)) - (i32.add (i32.const 1533777384)) - (i32.add (i32.const 1652220931)) - (i32.add (i32.const 1384053135)) - (i32.add (i32.const 115859309)) - (i32.add (i32.const -385690763)) - (i32.add (i32.const -921040780)) - (i32.add (i32.const 1643298259)) - (i32.add (i32.const 677097665)) - (i32.add (i32.const 2127030198)) - (i32.add (i32.const -1456743128)) - (i32.add (i32.const 1029172981)) - (i32.add (i32.const -90627432)) - (i32.add (i32.const 800656177)) - (i32.add (i32.const -855818663)) - (i32.add (i32.const 705069429)) - (i32.add (i32.const 331313906)) - (i32.add (i32.const -2036826151)) - (i32.add (i32.const 2067597096)) - (i32.add (i32.const 1353079847)) - (i32.add (i32.const -273301989)) - (i32.add (i32.const -2013828436)) - (i32.add (i32.const 904777290)) - (i32.add (i32.const -1208135716)) - (i32.add (i32.const 657463562)) - (i32.add (i32.const -1624506107)) - (i32.add (i32.const 222826113)) - (i32.add (i32.const 310573686)) - (i32.add (i32.const -1411656693)) - (i32.add (i32.const -1200718938)) - (i32.add (i32.const 1717412424)) - (i32.add (i32.const -1238911259)) - (i32.add (i32.const 435655598)) - (i32.add (i32.const 210467087)) - (i32.add (i32.const 424901165)) - (i32.add (i32.const 1451838700)) - (i32.add (i32.const -1609402954)) - (i32.add (i32.const -1217709774)) - (i32.add (i32.const 934728318)) - (i32.add (i32.const -334844552)) - (i32.add (i32.const -765270584)) - (i32.add (i32.const -237893768)) - (i32.add (i32.const -746127741)) - (i32.add (i32.const -1869630610)) - (i32.add (i32.const 1889246818)) - (i32.add (i32.const 1057195950)) - (i32.add (i32.const -1808146577)) - (i32.add (i32.const 836297182)) - (i32.add (i32.const -2120451238)) - (i32.add (i32.const -1226779626)) - (i32.add (i32.const 693747657)) - (i32.add (i32.const 83698568)) - (i32.add (i32.const -136182585)) - (i32.add (i32.const -1896195445)) - (i32.add (i32.const -302829301)) - (i32.add (i32.const -6193650)) - (i32.add (i32.const -1092687108)) - (i32.add (i32.const 1476699894)) - (i32.add (i32.const 1129594820)) - (i32.add (i32.const -172584524)) - (i32.add (i32.const -44468432)) - (i32.add (i32.const 574909697)) - (i32.add (i32.const 1674109719)) - (i32.add (i32.const 1305784500)) - (i32.add (i32.const -523540191)) - (i32.add (i32.const -2083807825)) - (i32.add (i32.const -548504542)) - (i32.add (i32.const 1602075276)) - (i32.add (i32.const -183193846)) - (i32.add (i32.const 1363878789)) - (i32.add (i32.const -711641208)) - (i32.add (i32.const 746574793)) - (i32.add (i32.const -157889104)) - (i32.add (i32.const -1255020099)) - (i32.add (i32.const -1714229352)) - (i32.add (i32.const 350991879)) - (i32.add (i32.const -1595469968)) - (i32.add (i32.const 1961941032)) - (i32.add (i32.const 1213177874)) - (i32.add (i32.const -1015574734)) - (i32.add (i32.const -1673690318)) - (i32.add (i32.const 427599515)) - (i32.add (i32.const -1426608554)) - (i32.add (i32.const -1280711861)) - (i32.add (i32.const 1242418407)) - (i32.add (i32.const -412026337)) - (i32.add (i32.const 709142004)) - (i32.add (i32.const -973515650)) - (i32.add (i32.const -1922285035)) - (i32.add (i32.const -705197386)) - (i32.add (i32.const -1852513074)) - (i32.add (i32.const 1568631435)) - (i32.add (i32.const -1626934069)) - (i32.add (i32.const 1244983142)) - (i32.add (i32.const -1338941645)) - (i32.add (i32.const 821408545)) - (i32.add (i32.const 2145403542)) - (i32.add (i32.const -985812849)) - (i32.add (i32.const -534044765)) - (i32.add (i32.const 1752337386)) - (i32.add (i32.const -2084164348)) - (i32.add (i32.const 1544978429)) - (i32.add (i32.const -1682916247)) - (i32.add (i32.const -900104360)) - (i32.add (i32.const -1029318915)) - (i32.add (i32.const 576474542)) - (i32.add (i32.const -1554934257)) - (i32.add (i32.const 713441770)) - (i32.add (i32.const 1700025992)) - (i32.add (i32.const -47691328)) - (i32.add (i32.const 820009077)) - (i32.add (i32.const -429200535)) - (i32.add (i32.const 757022160)) - (i32.add (i32.const 487799463)) - (i32.add (i32.const 2023916451)) - (i32.add (i32.const 2079432361)) - (i32.add (i32.const 1001724744)) - (i32.add (i32.const 1208280401)) - (i32.add (i32.const 661848503)) - (i32.add (i32.const 1722087487)) - (i32.add (i32.const -1674556772)) - (i32.add (i32.const 10463357)) - (i32.add (i32.const -905288285)) - (i32.add (i32.const 1242177728)) - (i32.add (i32.const 1906054702)) - (i32.add (i32.const -1650389938)) - (i32.add (i32.const -18996165)) - (i32.add (i32.const 1915438802)) - (i32.add (i32.const -1765808528)) - (i32.add (i32.const 2143063914)) - (i32.add (i32.const 194475343)) - (i32.add (i32.const -1861524966)) - (i32.add (i32.const 2024169785)) - (i32.add (i32.const 678109337)) - (i32.add (i32.const -35731156)) - (i32.add (i32.const 1466598991)) - (i32.add (i32.const -289466782)) - (i32.add (i32.const -1334603253)) - (i32.add (i32.const -901894813)) - (i32.add (i32.const 2014532474)) - (i32.add (i32.const -1756283681)) - (i32.add (i32.const 1504583632)) - (i32.add (i32.const -776561190)) - (i32.add (i32.const 899027943)) - (i32.add (i32.const 809596958)) - (i32.add (i32.const -839867198)) - (i32.add (i32.const 1571018155)) - (i32.add (i32.const 782277900)) - (i32.add (i32.const 145349218)) - (i32.add (i32.const 642346811)) - (i32.add (i32.const -1004800324)) - (i32.add (i32.const 2123683331)) - (i32.add (i32.const 1033800493)) - (i32.add (i32.const 2092079405)) - (i32.add (i32.const -177672845)) - (i32.add (i32.const 271606220)) - (i32.add (i32.const 1528873556)) - (i32.add (i32.const 1659828399)) - (i32.add (i32.const -427557120)) - (i32.add (i32.const 2042582117)) - (i32.add (i32.const 1250555657)) - (i32.add (i32.const -1688410359)) - (i32.add (i32.const -297584420)) - (i32.add (i32.const 250615250)) - (i32.add (i32.const -909951876)) - (i32.add (i32.const 40364278)) - (i32.add (i32.const 573257740)) - (i32.add (i32.const 864051301)) - (i32.add (i32.const 264113014)) - (i32.add (i32.const 1534096844)) - (i32.add (i32.const -87164635)) - (i32.add (i32.const 1030836755)) - (i32.add (i32.const 1680415622)) - (i32.add (i32.const 1705391698)) - (i32.add (i32.const -2099321270)) - (i32.add (i32.const 822363017)) - (i32.add (i32.const -1167416620)) - (i32.add (i32.const -100755784)) - (i32.add (i32.const -1445554658)) - (i32.add (i32.const -1474309819)) - (i32.add (i32.const -1046880228)) - (i32.add (i32.const -1016815083)) - (i32.add (i32.const -208689536)) - (i32.add (i32.const 1676693367)) - (i32.add (i32.const 1327645857)) - (i32.add (i32.const -1145469908)) - (i32.add (i32.const 263189289)) - (i32.add (i32.const -1257253276)) - (i32.add (i32.const 909070659)) - (i32.add (i32.const -1856378377)) - (i32.add (i32.const -1625356300)) - (i32.add (i32.const 1565512096)) - (i32.add (i32.const 797842331)) - (i32.add (i32.const 267986970)) - (i32.add (i32.const -1549024803)) - (i32.add (i32.const 1435855032)) - (i32.add (i32.const -258291362)) - (i32.add (i32.const -911273668)) - (i32.add (i32.const -1799407728)) - (i32.add (i32.const -1065524103)) - (i32.add (i32.const -1265513129)) - (i32.add (i32.const -2030752054)) - (i32.add (i32.const -1403041148)) - (i32.add (i32.const 1786311034)) - (i32.add (i32.const 1946550713)) - (i32.add (i32.const -287679860)) - (i32.add (i32.const -892404764)) - (i32.add (i32.const -1927946495)) - (i32.add (i32.const 553535621)) - (i32.add (i32.const -1720861413)) - (i32.add (i32.const 2094745125)) - (i32.add (i32.const 1571977877)) - (i32.add (i32.const 1947336985)) - (i32.add (i32.const -1517979907)) - (i32.add (i32.const 390016748)) - (i32.add (i32.const -1061413700)) - (i32.add (i32.const 545175413)) - (i32.add (i32.const 255095096)) - (i32.add (i32.const -675123584)) - (i32.add (i32.const -2010858480)) - (i32.add (i32.const 1488598974)) - (i32.add (i32.const 1989959995)) - (i32.add (i32.const -1344952356)) - (i32.add (i32.const -20837465)) - (i32.add (i32.const 206335046)) - (i32.add (i32.const 1751308310)) - (i32.add (i32.const -1176218694)) - (i32.add (i32.const -1476903882)) - (i32.add (i32.const 979618230)) - (i32.add (i32.const 1320752136)) - (i32.add (i32.const -578435719)) - (i32.add (i32.const -724788616)) - (i32.add (i32.const -795920278)) - (i32.add (i32.const -493643634)) - (i32.add (i32.const 2062425931)) - (i32.add (i32.const -353966600)) - (i32.add (i32.const -2003726861)) - (i32.add (i32.const -2060783157)) - (i32.add (i32.const 1202646080)) - (i32.add (i32.const -336822329)) - (i32.add (i32.const 927423442)) - (i32.add (i32.const -1900001806)) - (i32.add (i32.const -1651275238)) - (i32.add (i32.const 547214223)) - (i32.add (i32.const 945773251)) - (i32.add (i32.const 192488022)) - (i32.add (i32.const -1725942543)) - (i32.add (i32.const -462688701)) - (i32.add (i32.const 205410968)) - (i32.add (i32.const -972144855)) - (i32.add (i32.const 2110612633)) - (i32.add (i32.const 957988974)) - (i32.add (i32.const -1750896722)) - (i32.add (i32.const 203936800)) - (i32.add (i32.const -80287878)) - (i32.add (i32.const 1176968627)) - (i32.add (i32.const 716875482)) - (i32.add (i32.const 1865121504)) - (i32.add (i32.const 1993865702)) - (i32.add (i32.const 1243857259)) - (i32.add (i32.const -102547661)) - (i32.add (i32.const 229897430)) - (i32.add (i32.const -806087534)) - (i32.add (i32.const 292518030)) - (i32.add (i32.const 482654275)) - (i32.add (i32.const 1631635105)) - (i32.add (i32.const 739611019)) - (i32.add (i32.const -1079947145)) - (i32.add (i32.const 1174710278)) - (i32.add (i32.const 26201309)) - (i32.add (i32.const -1051043388)) - (i32.add (i32.const -35435373)) - (i32.add (i32.const 1801256610)) - (i32.add (i32.const -1071353316)) - (i32.add (i32.const -1114124193)) - (i32.add (i32.const -849347899)) - (i32.add (i32.const 1726018015)) - (i32.add (i32.const -917031009)) - (i32.add (i32.const 173651293)) - (i32.add (i32.const 702314758)) - (i32.add (i32.const 1481394105)) - (i32.add (i32.const -389054766)) - (i32.add (i32.const 592022842)) - (i32.add (i32.const -703081460)) - (i32.add (i32.const 2054750998)) - (i32.add (i32.const -1964982416)) - (i32.add (i32.const 1186604152)) - (i32.add (i32.const -197082009)) - (i32.add (i32.const 2144483633)) - (i32.add (i32.const 1769533052)) - (i32.add (i32.const 464611526)) - (i32.add (i32.const -1340392629)) - (i32.add (i32.const 619223328)) - (i32.add (i32.const -1260795600)) - (i32.add (i32.const 929068122)) - (i32.add (i32.const -536802910)) - (i32.add (i32.const -1428616122)) - (i32.add (i32.const -1559547556)) - (i32.add (i32.const -1172252072)) - (i32.add (i32.const 670320301)) - (i32.add (i32.const -1047404813)) - (i32.add (i32.const 1784021217)) - (i32.add (i32.const -284290596)) - (i32.add (i32.const -2116202801)) - (i32.add (i32.const 1141656288)) - (i32.add (i32.const 1475330391)) - (i32.add (i32.const 1789892930)) - (i32.add (i32.const -976114237)) - (i32.add (i32.const -1611886959)) - (i32.add (i32.const 1255960384)) - (i32.add (i32.const 121382915)) - (i32.add (i32.const 1889149671)) - (i32.add (i32.const -511518860)) - (i32.add (i32.const -958991082)) - (i32.add (i32.const -1519633838)) - (i32.add (i32.const 157261175)) - (i32.add (i32.const -893249705)) - (i32.add (i32.const 1232994527)) - (i32.add (i32.const -870205342)) - (i32.add (i32.const 2087662027)) - (i32.add (i32.const -1613623504)) - (i32.add (i32.const 75808200)) - (i32.add (i32.const -851755671)) - (i32.add (i32.const -999964756)) - (i32.add (i32.const 875406880)) - (i32.add (i32.const 305093873)) - (i32.add (i32.const -177846530)) - (i32.add (i32.const 1437089638)) - (i32.add (i32.const -308083058)) - (i32.add (i32.const 662864894)) - (i32.add (i32.const 1718154780)) - (i32.add (i32.const -1439348222)) - (i32.add (i32.const -1454493345)) - (i32.add (i32.const -584116227)) - (i32.add (i32.const 1325568135)) - (i32.add (i32.const -736291433)) - (i32.add (i32.const 1261535711)) - (i32.add (i32.const 538261750)) - (i32.add (i32.const 550899027)) - (i32.add (i32.const -1659511767)) - (i32.add (i32.const -1084948252)) - (i32.add (i32.const -1814867924)) - (i32.add (i32.const 456809015)) - (i32.add (i32.const -155699904)) - (i32.add (i32.const -1345828338)) - (i32.add (i32.const -1142404258)) - (i32.add (i32.const -1918915720)) - (i32.add (i32.const -1714494512)) - (i32.add (i32.const 1872785872)) - (i32.add (i32.const 1188751129)) - (i32.add (i32.const -1598461007)) - (i32.add (i32.const 742221017)) - (i32.add (i32.const -19751915)) - (i32.add (i32.const -1616301460)) - (i32.add (i32.const 1561393860)) - (i32.add (i32.const 1443146271)) - (i32.add (i32.const 1064605391)) - (i32.add (i32.const 1005420165)) - (i32.add (i32.const -1962162751)) - (i32.add (i32.const 43509751)) - (i32.add (i32.const -1675677325)) - (i32.add (i32.const -1396792209)) - (i32.add (i32.const 2094254363)) - (i32.add (i32.const 767404861)) - (i32.add (i32.const 503523297)) - (i32.add (i32.const -2001958238)) - (i32.add (i32.const -747278222)) - (i32.add (i32.const 1137494196)) - (i32.add (i32.const 751455709)) - (i32.add (i32.const -862326086)) - (i32.add (i32.const -237270020)) - (i32.add (i32.const 1351835424)) - (i32.add (i32.const 500921904)) - (i32.add (i32.const -1729551498)) - (i32.add (i32.const -1050906308)) - (i32.add (i32.const 1531544366)) - (i32.add (i32.const -966491043)) - (i32.add (i32.const -1802974321)) - (i32.add (i32.const -8836540)) - (i32.add (i32.const 1266856292)) - (i32.add (i32.const -1216214869)) - (i32.add (i32.const 1078763441)) - (i32.add (i32.const -1392213926)) - (i32.add (i32.const 417502714)) - (i32.add (i32.const -1786116863)) - (i32.add (i32.const -1230026055)) - (i32.add (i32.const -1683084829)) - (i32.add (i32.const -1265147044)) - (i32.add (i32.const -407875859)) - (i32.add (i32.const 1216984730)) - (i32.add (i32.const -571647991)) - (i32.add (i32.const -1258712140)) - (i32.add (i32.const -1636974500)) - (i32.add (i32.const 682739238)) - (i32.add (i32.const -1772130081)) - (i32.add (i32.const -2009678593)) - (i32.add (i32.const -176326403)) - (i32.add (i32.const -1182237961)) - (i32.add (i32.const 450000016)) - (i32.add (i32.const 708959826)) - (i32.add (i32.const 303658004)) - (i32.add (i32.const 1814913879)) - (i32.add (i32.const -873564042)) - (i32.add (i32.const -942059126)) - (i32.add (i32.const -475501065)) - (i32.add (i32.const 244189138)) - (i32.add (i32.const 1535821115)) - (i32.add (i32.const 1982433014)) - (i32.add (i32.const 1072821512)) - (i32.add (i32.const 723987989)) - (i32.add (i32.const 1927009607)) - (i32.add (i32.const -1307291959)) - (i32.add (i32.const 1539097529)) - (i32.add (i32.const 1213681428)) - (i32.add (i32.const 1701938479)) - (i32.add (i32.const 110869212)) - (i32.add (i32.const -1737959105)) - (i32.add (i32.const -950397347)) - (i32.add (i32.const 135470594)) - (i32.add (i32.const 1778550163)) - (i32.add (i32.const -267684635)) - (i32.add (i32.const 2109530096)) - (i32.add (i32.const 1571067004)) - (i32.add (i32.const 1685828275)) - (i32.add (i32.const 1991254824)) - (i32.add (i32.const 1333345064)) - (i32.add (i32.const 242403917)) - (i32.add (i32.const 1591884345)) - (i32.add (i32.const 1580731070)) - (i32.add (i32.const 1894466211)) - (i32.add (i32.const -307599304)) - (i32.add (i32.const 1473272754)) - (i32.add (i32.const 1599275502)) - (i32.add (i32.const -98111686)) - (i32.add (i32.const -601824329)) - (i32.add (i32.const 363913130)) - (i32.add (i32.const -1348590222)) - (i32.add (i32.const 52739913)) - (i32.add (i32.const -1903204542)) - (i32.add (i32.const -1730047862)) - (i32.add (i32.const -1914819594)) - (i32.add (i32.const -335842697)) - (i32.add (i32.const 1814162913)) - (i32.add (i32.const 1938814912)) - (i32.add (i32.const 1891949441)) - (i32.add (i32.const -1475052303)) - (i32.add (i32.const -1781880417)) - (i32.add (i32.const 338332197)) - (i32.add (i32.const 1242721441)) - (i32.add (i32.const 593584317)) - (i32.add (i32.const -1881761539)) - (i32.add (i32.const 1688487411)) - (i32.add (i32.const 326556673)) - (i32.add (i32.const 1323509004)) - (i32.add (i32.const 384557072)) - (i32.add (i32.const 226403727)) - (i32.add (i32.const 1131784739)) - (i32.add (i32.const -596768423)) - (i32.add (i32.const -1999401174)) - (i32.add (i32.const 231678181)) - (i32.add (i32.const -1529885511)) - (i32.add (i32.const 126770852)) - (i32.add (i32.const 1734502816)) - (i32.add (i32.const 565946404)) - (i32.add (i32.const 283857209)) - (i32.add (i32.const -1422093262)) - (i32.add (i32.const 1678529117)) - (i32.add (i32.const -185094792)) - (i32.add (i32.const -1352657504)) - (i32.add (i32.const 132951461)) - (i32.add (i32.const -1025916987)) - (i32.add (i32.const 2050912676)) - (i32.add (i32.const 1002309626)) - (i32.add (i32.const 1105487193)) - (i32.add (i32.const -178614901)) - (i32.add (i32.const -1638954385)) - (i32.add (i32.const 1443098076)) - (i32.add (i32.const 766861688)) - (i32.add (i32.const -956673419)) - (i32.add (i32.const 1175350021)) - (i32.add (i32.const 1781257350)) - (i32.add (i32.const 2035216739)) - (i32.add (i32.const -325063461)) - (i32.add (i32.const -1471944730)) - (i32.add (i32.const 68915710)) - (i32.add (i32.const -2079160115)) - (i32.add (i32.const -343077323)) - (i32.add (i32.const 1032483478)) - (i32.add (i32.const -1793192116)) - (i32.add (i32.const -1450105123)) - (i32.add (i32.const 899271774)) - (i32.add (i32.const -1627804019)) - (i32.add (i32.const -1491580747)) - (i32.add (i32.const -252518937)) - (i32.add (i32.const 1206217606)) - (i32.add (i32.const -1074669308)) - (i32.add (i32.const 1747628312)) - (i32.add (i32.const 1555721287)) - (i32.add (i32.const 1341903796)) - (i32.add (i32.const 1101574664)) - (i32.add (i32.const 476110094)) - (i32.add (i32.const -368242976)) - (i32.add (i32.const 1762506716)) - (i32.add (i32.const -543561938)) - (i32.add (i32.const 926179436)) - (i32.add (i32.const -1733729880)) - (i32.add (i32.const -410507584)) - (i32.add (i32.const 899188513)) - (i32.add (i32.const 1483267556)) - (i32.add (i32.const -2134241796)) - (i32.add (i32.const 1259197810)) - (i32.add (i32.const 462236523)) - (i32.add (i32.const 80932876)) - (i32.add (i32.const -1192014773)) - (i32.add (i32.const -1861736882)) - (i32.add (i32.const -256023262)) - (i32.add (i32.const 1145876217)) - (i32.add (i32.const 542377404)) - (i32.add (i32.const 1393691808)) - (i32.add (i32.const -2080417837)) - (i32.add (i32.const 868701576)) - (i32.add (i32.const 1452816143)) - (i32.add (i32.const -1416722665)) - (i32.add (i32.const 749806634)) - (i32.add (i32.const -566569715)) - (i32.add (i32.const 1639279531)) - (i32.add (i32.const 978498603)) - (i32.add (i32.const 113290670)) - (i32.add (i32.const -1064122489)) - (i32.add (i32.const 2078453911)) - (i32.add (i32.const -1814724316)) - (i32.add (i32.const -2036204751)) - (i32.add (i32.const -736675578)) - (i32.add (i32.const 3499685)) - (i32.add (i32.const 1674396386)) - (i32.add (i32.const -518893950)) - (i32.add (i32.const -243821614)) - (i32.add (i32.const -1192456752)) - (i32.add (i32.const 1551186733)) - (i32.add (i32.const 1836108910)) - (i32.add (i32.const -115352671)) - (i32.add (i32.const 1920510518)) - (i32.add (i32.const 64141859)) - (i32.add (i32.const 482378124)) - (i32.add (i32.const -1475380948)) - (i32.add (i32.const -416554209)) - (i32.add (i32.const -1048075196)) - (i32.add (i32.const 270084738)) - (i32.add (i32.const 1738855531)) - (i32.add (i32.const -630655593)) - (i32.add (i32.const -501550004)) - (i32.add (i32.const 2019369293)) - (i32.add (i32.const 925647280)) - (i32.add (i32.const 1980603497)) - (i32.add (i32.const -1008257070)) - (i32.add (i32.const -602414401)) - (i32.add (i32.const -1000645874)) - (i32.add (i32.const 1669596952)) - (i32.add (i32.const -1439418480)) - (i32.add (i32.const 714734464)) - (i32.add (i32.const -696376269)) - (i32.add (i32.const -979060254)) - (i32.add (i32.const 138574740)) - (i32.add (i32.const -1263866008)) - (i32.add (i32.const -26210519)) - (i32.add (i32.const 217679903)) - (i32.add (i32.const 51571852)) - (i32.add (i32.const 344715383)) - (i32.add (i32.const 329898982)) - (i32.add (i32.const 2082060297)) - (i32.add (i32.const -1906305149)) - (i32.add (i32.const -1549948816)) - (i32.add (i32.const 2090326259)) - (i32.add (i32.const -339907557)) - (i32.add (i32.const 1854524757)) - (i32.add (i32.const 296872483)) - (i32.add (i32.const 418980212)) - (i32.add (i32.const 1426805373)) - (i32.add (i32.const -1991187256)) - (i32.add (i32.const -1958889578)) - (i32.add (i32.const -400573352)) - (i32.add (i32.const 1911126918)) - (i32.add (i32.const 271406746)) - (i32.add (i32.const -1995448352)) - (i32.add (i32.const 1960325415)) - (i32.add (i32.const -654376641)) - (i32.add (i32.const 205537942)) - (i32.add (i32.const 247866277)) - (i32.add (i32.const 776894833)) - (i32.add (i32.const -390523290)) - (i32.add (i32.const 878299740)) - (i32.add (i32.const -2031700797)) - (i32.add (i32.const 1655613802)) - (i32.add (i32.const 1214958457)) - (i32.add (i32.const 77239794)) - (i32.add (i32.const 894503908)) - (i32.add (i32.const 330426178)) - (i32.add (i32.const -1526795865)) - (i32.add (i32.const -1901049612)) - (i32.add (i32.const -1607831309)) - (i32.add (i32.const -144832956)) - (i32.add (i32.const 193333660)) - (i32.add (i32.const -1744165877)) - (i32.add (i32.const 1947567749)) - (i32.add (i32.const 10340653)) - (i32.add (i32.const 387347578)) - (i32.add (i32.const -1803916948)) - (i32.add (i32.const -449677578)) - (i32.add (i32.const -1117668445)) - (i32.add (i32.const -890868181)) - (i32.add (i32.const -285537238)) - (i32.add (i32.const -1392514026)) - (i32.add (i32.const -2075883263)) - (i32.add (i32.const -102819510)) - (i32.add (i32.const -1930230127)) - (i32.add (i32.const -1941600431)) - (i32.add (i32.const -859795080)) - (i32.add (i32.const 1501169063)) - (i32.add (i32.const 1984785006)) - (i32.add (i32.const -2029943655)) - (i32.add (i32.const 750141068)) - (i32.add (i32.const 921980762)) - (i32.add (i32.const 395179676)) - (i32.add (i32.const 683436474)) - (i32.add (i32.const 482877285)) - (i32.add (i32.const 22281551)) - (i32.add (i32.const 1842007136)) - (i32.add (i32.const 2294356)) - (i32.add (i32.const -2138509524)) - (i32.add (i32.const -842819360)) - (i32.add (i32.const 993195261)) - (i32.add (i32.const 877303577)) - (i32.add (i32.const -287686773)) - (i32.add (i32.const 359920577)) - (i32.add (i32.const -1396464156)) - (i32.add (i32.const -996716867)) - (i32.add (i32.const -1665169591)) - (i32.add (i32.const 1199923953)) - (i32.add (i32.const -804356382)) - (i32.add (i32.const -1095572690)) - (i32.add (i32.const 691417574)) - (i32.add (i32.const 2025010915)) - (i32.add (i32.const 2020520725)) - (i32.add (i32.const 2001862091)) - (i32.add (i32.const -1083322279)) - (i32.add (i32.const -280695096)) - (i32.add (i32.const 529821116)) - (i32.add (i32.const -919996187)) - (i32.add (i32.const -1874444328)) - (i32.add (i32.const -369826199)) - (i32.add (i32.const 1297201833)) - (i32.add (i32.const -1791568437)) - (i32.add (i32.const 452635312)) - (i32.add (i32.const 1095604492)) - (i32.add (i32.const 2034964356)) - (i32.add (i32.const 1021931020)) - (i32.add (i32.const -1100088244)) - (i32.add (i32.const 1062859823)) - (i32.add (i32.const -1044823332)) - (i32.add (i32.const -1760780786)) - (i32.add (i32.const 1305767981)) - (i32.add (i32.const -1377370500)) - (i32.add (i32.const 1088812609)) - (i32.add (i32.const 1717051432)) - (i32.add (i32.const -1205616282)) - (i32.add (i32.const -678566920)) - (i32.add (i32.const 1909804714)) - (i32.add (i32.const 1960507690)) - (i32.add (i32.const -2139649305)) - (i32.add (i32.const 1082905605)) - (i32.add (i32.const 1564597058)) - (i32.add (i32.const -1265584149)) - (i32.add (i32.const -1446228451)) - (i32.add (i32.const 1864430134)) - (i32.add (i32.const 1344844194)) - (i32.add (i32.const 1675075374)) - (i32.add (i32.const 2008023975)) - (i32.add (i32.const 155847813)) - (i32.add (i32.const -1670137790)) - (i32.add (i32.const -1893135793)) - (i32.add (i32.const 1596729811)) - (i32.add (i32.const -1163691652)) - (i32.add (i32.const -990712869)) - (i32.add (i32.const 241627310)) - (i32.add (i32.const -338982238)) - (i32.add (i32.const 257512177)) - (i32.add (i32.const -1090729362)) - (i32.add (i32.const 17040225)) - (i32.add (i32.const 1687995565)) - (i32.add (i32.const -66144512)) - (i32.add (i32.const -493083421)) - (i32.add (i32.const -1797712886)) - (i32.add (i32.const -581148274)) - (i32.add (i32.const 315659302)) - (i32.add (i32.const -959550805)) - (i32.add (i32.const -1021319534)) - (i32.add (i32.const -968104063)) - (i32.add (i32.const 1957787555)) - (i32.add (i32.const 1300039846)) - (i32.add (i32.const -1503594605)) - (i32.add (i32.const 243712374)) - (i32.add (i32.const 86739507)) - (i32.add (i32.const 1098983054)) - (i32.add (i32.const -934517639)) - (i32.add (i32.const -1403078212)) - (i32.add (i32.const -286304973)) - (i32.add (i32.const -1930175956)) - (i32.add (i32.const 349968751)) - (i32.add (i32.const 10481483)) - (i32.add (i32.const -698259024)) - (i32.add (i32.const -38550292)) - (i32.add (i32.const 849491037)) - (i32.add (i32.const 52838267)) - (i32.add (i32.const -2136495862)) - (i32.add (i32.const -1445772209)) - (i32.add (i32.const 2106317296)) - (i32.add (i32.const 1552184301)) - (i32.add (i32.const 413988019)) - (i32.add (i32.const 1216337356)) - (i32.add (i32.const 1739629781)) - (i32.add (i32.const 394950227)) - (i32.add (i32.const 629448372)) - (i32.add (i32.const -698544524)) - (i32.add (i32.const -1281954663)) - (i32.add (i32.const 1416395122)) - (i32.add (i32.const -1786786894)) - (i32.add (i32.const -1814518784)) - (i32.add (i32.const -15426747)) - (i32.add (i32.const 1600869606)) - (i32.add (i32.const -2124248072)) - (i32.add (i32.const 565309534)) - (i32.add (i32.const 257945601)) - (i32.add (i32.const 2017131161)) - (i32.add (i32.const 953435128)) - (i32.add (i32.const -1119112514)) - (i32.add (i32.const -1977592706)) - (i32.add (i32.const 623118563)) - (i32.add (i32.const 690293227)) - (i32.add (i32.const 870859221)) - (i32.add (i32.const 559870174)) - (i32.add (i32.const -1988012473)) - (i32.add (i32.const 710989468)) - (i32.add (i32.const -443001973)) - (i32.add (i32.const -1553367700)) - (i32.add (i32.const -130314309)) - (i32.add (i32.const 1812138369)) - (i32.add (i32.const -1228229930)) - (i32.add (i32.const 362316659)) - (i32.add (i32.const -1417330112)) - (i32.add (i32.const -1583903933)) - (i32.add (i32.const -1749688049)) - (i32.add (i32.const 2056984618)) - (i32.add (i32.const 236016618)) - (i32.add (i32.const 607098412)) - (i32.add (i32.const 1907768176)) - (i32.add (i32.const -526450098)) - (i32.add (i32.const 233319170)) - (i32.add (i32.const -90820860)) - (i32.add (i32.const -1875287878)) - (i32.add (i32.const 2019953551)) - (i32.add (i32.const -880733066)) - (i32.add (i32.const -765940119)) - (i32.add (i32.const 1604054999)) - (i32.add (i32.const 1391719862)) - (i32.add (i32.const -1804190650)) - (i32.add (i32.const -2079003730)) - (i32.add (i32.const 461496265)) - (i32.add (i32.const -2073518821)) - (i32.add (i32.const 362760414)) - (i32.add (i32.const 81344155)) - (i32.add (i32.const -848406615)) - (i32.add (i32.const -64266029)) - (i32.add (i32.const -1842693816)) - (i32.add (i32.const 604387413)) - (i32.add (i32.const -111577370)) - (i32.add (i32.const -752660290)) - (i32.add (i32.const -1157141460)) - (i32.add (i32.const -127994308)) - (i32.add (i32.const 1862465057)) - (i32.add (i32.const -1416085763)) - (i32.add (i32.const 1825360664)) - (i32.add (i32.const 1680021754)) - (i32.add (i32.const 1168713484)) - (i32.add (i32.const -1138616366)) - (i32.add (i32.const -207667125)) - (i32.add (i32.const 758119368)) - (i32.add (i32.const 1356395681)) - (i32.add (i32.const -250393633)) - (i32.add (i32.const 1469481820)) - (i32.add (i32.const -102100724)) - (i32.add (i32.const -1605187581)) - (i32.add (i32.const -408333352)) - (i32.add (i32.const 613106920)) - (i32.add (i32.const -1519041336)) - (i32.add (i32.const 1195521375)) - (i32.add (i32.const -815801155)) - (i32.add (i32.const 2026174045)) - (i32.add (i32.const 103045663)) - (i32.add (i32.const -1487577099)) - (i32.add (i32.const -1163973878)) - (i32.add (i32.const 1137449)) - (i32.add (i32.const -651997223)) - (i32.add (i32.const 692051684)) - (i32.add (i32.const 445615149)) - (i32.add (i32.const -170448664)) - (i32.add (i32.const 1968341605)) - (i32.add (i32.const -1203781440)) - (i32.add (i32.const 1224824523)) - (i32.add (i32.const -1948068561)) - (i32.add (i32.const 1261958914)) - (i32.add (i32.const -8198162)) - (i32.add (i32.const -1355950205)) - (i32.add (i32.const 2018829304)) - (i32.add (i32.const -61239357)) - (i32.add (i32.const -311738754)) - (i32.add (i32.const -1866548733)) - (i32.add (i32.const -1673699071)) - (i32.add (i32.const -1620734827)) - (i32.add (i32.const -185329036)) - (i32.add (i32.const 719746070)) - (i32.add (i32.const -342101546)) - (i32.add (i32.const -1611118701)) - (i32.add (i32.const 1069618550)) - (i32.add (i32.const -1992839923)) - (i32.add (i32.const 1384212317)) - (i32.add (i32.const -1695297908)) - (i32.add (i32.const 1065830839)) - (i32.add (i32.const 1965402720)) - (i32.add (i32.const -654362614)) - (i32.add (i32.const -383641459)) - (i32.add (i32.const -1786192345)) - (i32.add (i32.const -1771367233)) - (i32.add (i32.const -2057547205)) - (i32.add (i32.const 422899490)) - (i32.add (i32.const 659012449)) - (i32.add (i32.const -1364723065)) - (i32.add (i32.const 1809297147)) - (i32.add (i32.const 1141808429)) - (i32.add (i32.const -1574097255)) - (i32.add (i32.const -1112994352)) - (i32.add (i32.const 478811121)) - (i32.add (i32.const -2036845452)) - (i32.add (i32.const 1394450502)) - (i32.add (i32.const 7478350)) - (i32.add (i32.const 1232945048)) - (i32.add (i32.const 108657167)) - (i32.add (i32.const -619383651)) - (i32.add (i32.const -1605294242)) - (i32.add (i32.const -166346540)) - (i32.add (i32.const -1821653770)) - (i32.add (i32.const 1477722577)) - (i32.add (i32.const 1963340133)) - (i32.add (i32.const 248648046)) - (i32.add (i32.const 1867362768)) - (i32.add (i32.const -1905720554)) - (i32.add (i32.const 1228462945)) - (i32.add (i32.const -1727606582)) - (i32.add (i32.const -455269509)) - (i32.add (i32.const -49123947)) - (i32.add (i32.const -1157144157)) - (i32.add (i32.const 212037340)) - (i32.add (i32.const 1569157434)) - (i32.add (i32.const -652621510)) - (i32.add (i32.const -119826378)) - (i32.add (i32.const -261999598)) - (i32.add (i32.const -910766303)) - (i32.add (i32.const -817059209)) - (i32.add (i32.const 25692203)) - (i32.add (i32.const -2129638310)) - (i32.add (i32.const -820259904)) - (i32.add (i32.const -1147037021)) - (i32.add (i32.const -1884585112)) - (i32.add (i32.const -190582791)) - (i32.add (i32.const -934328777)) - (i32.add (i32.const 19333498)) - (i32.add (i32.const 794618065)) - (i32.add (i32.const -539165965)) - (i32.add (i32.const -656800363)) - (i32.add (i32.const -2081923993)) - (i32.add (i32.const 1086746230)) - (i32.add (i32.const 1101159073)) - (i32.add (i32.const 1272573806)) - (i32.add (i32.const 1412756182)) - (i32.add (i32.const -520543827)) - (i32.add (i32.const -1915412810)) - (i32.add (i32.const -1328221275)) - (i32.add (i32.const -769961910)) - (i32.add (i32.const -68550849)) - (i32.add (i32.const -1060403354)) - (i32.add (i32.const 587684385)) - (i32.add (i32.const 63550750)) - (i32.add (i32.const -1446488714)) - (i32.add (i32.const -1753540546)) - (i32.add (i32.const 2131517834)) - (i32.add (i32.const 1574856526)) - (i32.add (i32.const -1466935774)) - (i32.add (i32.const 533297172)) - (i32.add (i32.const 1258192588)) - (i32.add (i32.const 670479485)) - (i32.add (i32.const 1571769863)) - (i32.add (i32.const 1525240513)) - (i32.add (i32.const -1611465860)) - (i32.add (i32.const -1577882236)) - (i32.add (i32.const -384546188)) - (i32.add (i32.const 1745815916)) - (i32.add (i32.const 1306915500)) - (i32.add (i32.const 2126506450)) - (i32.add (i32.const -1959696596)) - (i32.add (i32.const -374563591)) - (i32.add (i32.const 1935868971)) - (i32.add (i32.const -594034677)) - (i32.add (i32.const 181591566)) - (i32.add (i32.const -1800585986)) - (i32.add (i32.const 740236862)) - (i32.add (i32.const 210260361)) - (i32.add (i32.const -1550199873)) - (i32.add (i32.const 2051399426)) - (i32.add (i32.const 1348220454)) - (i32.add (i32.const -815753839)) - (i32.add (i32.const -1759804046)) - (i32.add (i32.const -1904199268)) - (i32.add (i32.const 7264436)) - (i32.add (i32.const -946942195)) - (i32.add (i32.const 1026059208)) - (i32.add (i32.const 330495178)) - (i32.add (i32.const -44142721)) - (i32.add (i32.const 903578050)) - (i32.add (i32.const 376577051)) - (i32.add (i32.const 1230986084)) - (i32.add (i32.const 1989118940)) - (i32.add (i32.const 318201755)) - (i32.add (i32.const 335157942)) - (i32.add (i32.const -2049231785)) - (i32.add (i32.const 604749484)) - (i32.add (i32.const -510218837)) - (i32.add (i32.const -1562860864)) - (i32.add (i32.const -1437382872)) - (i32.add (i32.const 2031428146)) - (i32.add (i32.const -46971739)) - (i32.add (i32.const 109595633)) - (i32.add (i32.const -1672450721)) - (i32.add (i32.const -1520454711)) - (i32.add (i32.const -300337475)) - (i32.add (i32.const 111153969)) - (i32.add (i32.const 1669619724)) - (i32.add (i32.const -1191505613)) - (i32.add (i32.const -1028439994)) - (i32.add (i32.const -35514223)) - (i32.add (i32.const -1971584103)) - (i32.add (i32.const -1509757495)) - (i32.add (i32.const 1969735904)) - (i32.add (i32.const 29301763)) - (i32.add (i32.const -429826328)) - (i32.add (i32.const 378004782)) - (i32.add (i32.const 1762432314)) - (i32.add (i32.const 2041319682)) - (i32.add (i32.const -567698011)) - (i32.add (i32.const -70897355)) - (i32.add (i32.const 1833368710)) - (i32.add (i32.const 820223850)) - (i32.add (i32.const 1196598894)) - (i32.add (i32.const 1932391527)) - (i32.add (i32.const 1642020785)) - (i32.add (i32.const -2036367749)) - (i32.add (i32.const 1337245778)) - (i32.add (i32.const -1661641633)) - (i32.add (i32.const -2069039798)) - (i32.add (i32.const 246801862)) - (i32.add (i32.const -283276224)) - (i32.add (i32.const 679010854)) - (i32.add (i32.const 1798651832)) - (i32.add (i32.const 1548376864)) - (i32.add (i32.const 795537776)) - (i32.add (i32.const 1644106913)) - (i32.add (i32.const -787147808)) - (i32.add (i32.const -71632342)) - (i32.add (i32.const 721168461)) - (i32.add (i32.const -808144968)) - (i32.add (i32.const -1498521453)) - (i32.add (i32.const 398340647)) - (i32.add (i32.const 965251952)) - (i32.add (i32.const -985520274)) - (i32.add (i32.const -860811612)) - (i32.add (i32.const -1916791731)) - (i32.add (i32.const 665087297)) - (i32.add (i32.const 1702485366)) - (i32.add (i32.const -982372062)) - (i32.add (i32.const -443653268)) - (i32.add (i32.const 1122375922)) - (i32.add (i32.const -787425916)) - (i32.add (i32.const -943733050)) - (i32.add (i32.const -932559414)) - (i32.add (i32.const 2082073681)) - (i32.add (i32.const -1047559887)) - (i32.add (i32.const 984533111)) - (i32.add (i32.const -2135535727)) - (i32.add (i32.const -1175220635)) - (i32.add (i32.const 491202631)) - (i32.add (i32.const 938895621)) - (i32.add (i32.const 1027504458)) - (i32.add (i32.const -1873702784)) - (i32.add (i32.const -293545039)) - (i32.add (i32.const -283802384)) - (i32.add (i32.const 2112617641)) - (i32.add (i32.const -540936938)) - (i32.add (i32.const -1276902547)) - (i32.add (i32.const 1318776593)) - (i32.add (i32.const 187350045)) - (i32.add (i32.const 1728059882)) - (i32.add (i32.const 742241551)) - (i32.add (i32.const 421741227)) - (i32.add (i32.const 2048714244)) - (i32.add (i32.const -843544899)) - (i32.add (i32.const 2091356725)) - (i32.add (i32.const -13713737)) - (i32.add (i32.const -1554846417)) - (i32.add (i32.const 1275683063)) - (i32.add (i32.const -839252787)) - (i32.add (i32.const 1717607262)) - (i32.add (i32.const 2006777534)) - (i32.add (i32.const 1362957706)) - (i32.add (i32.const -1765188888)) - (i32.add (i32.const 857433558)) - (i32.add (i32.const -838917434)) - (i32.add (i32.const -934294814)) - (i32.add (i32.const -701061156)) - (i32.add (i32.const 623456800)) - (i32.add (i32.const 2037590473)) - (i32.add (i32.const -710172350)) - (i32.add (i32.const 1388944230)) - (i32.add (i32.const 723275279)) - (i32.add (i32.const -1881838463)) - (i32.add (i32.const 464108976)) - (i32.add (i32.const 1745943919)) - (i32.add (i32.const -1638919122)) - (i32.add (i32.const 1323922580)) - (i32.add (i32.const 975834373)) - (i32.add (i32.const -61167876)) - (i32.add (i32.const 1607759555)) - (i32.add (i32.const 1367922554)) - (i32.add (i32.const 439687641)) - (i32.add (i32.const -1102830531)) - (i32.add (i32.const -1934698417)) - (i32.add (i32.const -805150444)) - (i32.add (i32.const -1486183238)) - (i32.add (i32.const -972029504)) - (i32.add (i32.const 1010326084)) - (i32.add (i32.const -1262841712)) - (i32.add (i32.const -1561423802)) - (i32.add (i32.const 1665774019)) - (i32.add (i32.const 1798573628)) - (i32.add (i32.const -799818162)) - (i32.add (i32.const 464062528)) - (i32.add (i32.const 985520604)) - (i32.add (i32.const -1863496235)) - (i32.add (i32.const -693110242)) - (i32.add (i32.const -510298685)) - (i32.add (i32.const 974210396)) - (i32.add (i32.const -1388930061)) - (i32.add (i32.const 1322706380)) - (i32.add (i32.const 1193178364)) - (i32.add (i32.const -1758028125)) - (i32.add (i32.const -478743476)) - (i32.add (i32.const 1385374454)) - (i32.add (i32.const -776677250)) - (i32.add (i32.const -1287392281)) - (i32.add (i32.const -1234148665)) - (i32.add (i32.const 305868355)) - (i32.add (i32.const -707058110)) - (i32.add (i32.const 862012223)) - (i32.add (i32.const 762811933)) - (i32.add (i32.const 860881551)) - (i32.add (i32.const 866224820)) - (i32.add (i32.const 1305373463)) - (i32.add (i32.const -2086521834)) - (i32.add (i32.const 1638409322)) - (i32.add (i32.const -186107195)) - (i32.add (i32.const 843635579)) - (i32.add (i32.const -1652380372)) - (i32.add (i32.const 709579364)) - (i32.add (i32.const 73641744)) - (i32.add (i32.const 1593158578)) - (i32.add (i32.const -753441408)) - (i32.add (i32.const -1294320898)) - (i32.add (i32.const 554302626)) - (i32.add (i32.const 1896044226)) - (i32.add (i32.const 1629856169)) - (i32.add (i32.const 466289293)) - (i32.add (i32.const -1299588208)) - (i32.add (i32.const -198514311)) - (i32.add (i32.const -661899745)) - (i32.add (i32.const 1766288269)) - (i32.add (i32.const 1044157385)) - (i32.add (i32.const -1362120750)) - (i32.add (i32.const 1115079816)) - (i32.add (i32.const -2113549244)) - (i32.add (i32.const 703424428)) - (i32.add (i32.const -1932313332)) - (i32.add (i32.const 2098669397)) - (i32.add (i32.const 1416631762)) - (i32.add (i32.const -1489392431)) - (i32.add (i32.const -767627345)) - (i32.add (i32.const 384845283)) - (i32.add (i32.const 1004811074)) - (i32.add (i32.const -271433010)) - (i32.add (i32.const -311383150)) - (i32.add (i32.const -1129895436)) - (i32.add (i32.const -1392730034)) - (i32.add (i32.const -1625166135)) - (i32.add (i32.const 495513182)) - (i32.add (i32.const 150515687)) - (i32.add (i32.const -99519546)) - (i32.add (i32.const 853447835)) - (i32.add (i32.const 1083969691)) - (i32.add (i32.const -1180905830)) - (i32.add (i32.const -1806226503)) - (i32.add (i32.const 1169325224)) - (i32.add (i32.const 2060584840)) - (i32.add (i32.const 8238774)) - (i32.add (i32.const -1118037070)) - (i32.add (i32.const -256857050)) - (i32.add (i32.const -1059522183)) - (i32.add (i32.const -33271282)) - (i32.add (i32.const 498735728)) - (i32.add (i32.const -162115957)) - (i32.add (i32.const -1591020052)) - (i32.add (i32.const -1155057360)) - (i32.add (i32.const 1638009012)) - (i32.add (i32.const 669336347)) - (i32.add (i32.const -214082062)) - (i32.add (i32.const 63757133)) - (i32.add (i32.const -1747923356)) - (i32.add (i32.const -268152030)) - (i32.add (i32.const -1676048344)) - (i32.add (i32.const 1345640639)) - (i32.add (i32.const 614397798)) - (i32.add (i32.const 88706167)) - (i32.add (i32.const 24884044)) - (i32.add (i32.const 885503017)) - (i32.add (i32.const 397134506)) - (i32.add (i32.const -1912555609)) - (i32.add (i32.const 986360373)) - (i32.add (i32.const 1252226449)) - (i32.add (i32.const -173260184)) - (i32.add (i32.const -1853297289)) - (i32.add (i32.const 1006862501)) - (i32.add (i32.const 1033626513)) - (i32.add (i32.const 1684402421)) - (i32.add (i32.const 1547687994)) - (i32.add (i32.const -1334482204)) - (i32.add (i32.const 1110299785)) - (i32.add (i32.const -865603180)) - (i32.add (i32.const -1317027835)) - (i32.add (i32.const 661736634)) - (i32.add (i32.const 359530990)) - (i32.add (i32.const 1126555096)) - (i32.add (i32.const 1068202947)) - (i32.add (i32.const -1954968698)) - (i32.add (i32.const 886483442)) - (i32.add (i32.const -26580451)) - (i32.add (i32.const -72529730)) - (i32.add (i32.const -835915490)) - (i32.add (i32.const -929700362)) - (i32.add (i32.const 1556937746)) - (i32.add (i32.const -1792930368)) - (i32.add (i32.const 1598523644)) - (i32.add (i32.const 1057946546)) - (i32.add (i32.const 1248593352)) - (i32.add (i32.const 1051029923)) - (i32.add (i32.const 778496208)) - (i32.add (i32.const 1499757944)) - (i32.add (i32.const 1728035494)) - (i32.add (i32.const -1996754171)) - (i32.add (i32.const 2107154652)) - (i32.add (i32.const -490708732)) - (i32.add (i32.const -611672098)) - (i32.add (i32.const 833955313)) - (i32.add (i32.const 1473707721)) - (i32.add (i32.const -244285925)) - (i32.add (i32.const 1953654903)) - (i32.add (i32.const -1687445874)) - (i32.add (i32.const 1371447897)) - (i32.add (i32.const -550192040)) - (i32.add (i32.const 1552503437)) - (i32.add (i32.const -509329543)) - (i32.add (i32.const 2076460227)) - (i32.add (i32.const -129673527)) - (i32.add (i32.const 1733809871)) - (i32.add (i32.const 851545053)) - (i32.add (i32.const 222409957)) - (i32.add (i32.const 1961486391)) - (i32.add (i32.const 828713386)) - (i32.add (i32.const 197765819)) - (i32.add (i32.const 678097338)) - (i32.add (i32.const 297440396)) - (i32.add (i32.const 871841925)) - (i32.add (i32.const -1937914733)) - (i32.add (i32.const 2014797822)) - (i32.add (i32.const -1832434349)) - (i32.add (i32.const 1810974597)) - (i32.add (i32.const 789339153)) - (i32.add (i32.const -2044871959)) - (i32.add (i32.const 1715343927)) - (i32.add (i32.const 333529850)) - (i32.add (i32.const -523584995)) - (i32.add (i32.const 1260435259)) - (i32.add (i32.const 2112697036)) - (i32.add (i32.const 315498033)) - (i32.add (i32.const -1143054082)) - (i32.add (i32.const -186844460)) - (i32.add (i32.const 481318547)) - (i32.add (i32.const -1679002393)) - (i32.add (i32.const -43057118)) - (i32.add (i32.const -991310150)) - (i32.add (i32.const -1990483749)) - (i32.add (i32.const -48700708)) - (i32.add (i32.const 263480241)) - (i32.add (i32.const 1680043645)) - (i32.add (i32.const -1877444285)) - (i32.add (i32.const 1883235699)) - (i32.add (i32.const -86219984)) - (i32.add (i32.const 1238971383)) - (i32.add (i32.const -366547891)) - (i32.add (i32.const 1888221205)) - (i32.add (i32.const -1584439951)) - (i32.add (i32.const 721984307)) - (i32.add (i32.const 1037696125)) - (i32.add (i32.const 1666197172)) - (i32.add (i32.const 1953188468)) - (i32.add (i32.const 1121823595)) - (i32.add (i32.const -1890545807)) - (i32.add (i32.const 485933658)) - (i32.add (i32.const 309057494)) - (i32.add (i32.const -1754133458)) - (i32.add (i32.const -1894724085)) - (i32.add (i32.const 1677391927)) - (i32.add (i32.const 1015195556)) - (i32.add (i32.const -838293696)) - (i32.add (i32.const 1005776868)) - (i32.add (i32.const 2044941299)) - (i32.add (i32.const 974540907)) - (i32.add (i32.const -1817021830)) - (i32.add (i32.const 1473072079)) - (i32.add (i32.const 1333325064)) - (i32.add (i32.const 1872804572)) - (i32.add (i32.const -665814918)) - (i32.add (i32.const -548627406)) - (i32.add (i32.const 2001726289)) - (i32.add (i32.const 1137192257)) - (i32.add (i32.const 118317863)) - (i32.add (i32.const 777443631)) - (i32.add (i32.const -1362989278)) - (i32.add (i32.const 1645667718)) - (i32.add (i32.const -1353021973)) - (i32.add (i32.const -917075352)) - (i32.add (i32.const -1949897538)) - (i32.add (i32.const 757445800)) - (i32.add (i32.const -1486848295)) - (i32.add (i32.const -1599223327)) - (i32.add (i32.const 106836590)) - (i32.add (i32.const -1206658984)) - (i32.add (i32.const -1752626805)) - (i32.add (i32.const -698409285)) - (i32.add (i32.const 927285887)) - (i32.add (i32.const -145229436)) - (i32.add (i32.const 297889912)) - (i32.add (i32.const -224085975)) - (i32.add (i32.const 327075695)) - (i32.add (i32.const 928209855)) - (i32.add (i32.const 1003623561)) - (i32.add (i32.const -865604666)) - (i32.add (i32.const 2038738048)) - (i32.add (i32.const 289372116)) - (i32.add (i32.const -185619381)) - (i32.add (i32.const -1129542131)) - (i32.add (i32.const 369503487)) - (i32.add (i32.const -936311644)) - (i32.add (i32.const 214501360)) - (i32.add (i32.const -2028354573)) - (i32.add (i32.const -1164553916)) - (i32.add (i32.const -2048056382)) - (i32.add (i32.const -2044606360)) - (i32.add (i32.const 1399970890)) - (i32.add (i32.const 697234840)) - (i32.add (i32.const 464673324)) - (i32.add (i32.const 1951922749)) - (i32.add (i32.const 1775477639)) - (i32.add (i32.const 1361918553)) - (i32.add (i32.const -1041900124)) - (i32.add (i32.const 1909352596)) - (i32.add (i32.const 396211864)) - (i32.add (i32.const 2075420184)) - (i32.add (i32.const 694411014)) - (i32.add (i32.const 1164481323)) - (i32.add (i32.const 1013049384)) - (i32.add (i32.const -587802512)) - (i32.add (i32.const 1532768013)) - (i32.add (i32.const -1612661425)) - (i32.add (i32.const -1153138111)) - (i32.add (i32.const -1724860649)) - (i32.add (i32.const -599884897)) - (i32.add (i32.const -486774996)) - (i32.add (i32.const -1388706023)) - (i32.add (i32.const 1481070283)) - (i32.add (i32.const 155245128)) - (i32.add (i32.const -1708420048)) - (i32.add (i32.const 101989983)) - (i32.add (i32.const 413836047)) - (i32.add (i32.const 2118351866)) - (i32.add (i32.const -1652098904)) - (i32.add (i32.const 1138351108)) - (i32.add (i32.const 1500163199)) - (i32.add (i32.const -2118315101)) - (i32.add (i32.const -942816198)) - (i32.add (i32.const 533409123)) - (i32.add (i32.const 1739931746)) - (i32.add (i32.const -1006220510)) - (i32.add (i32.const -1577233767)) - (i32.add (i32.const -1276234965)) - (i32.add (i32.const 737991877)) - (i32.add (i32.const -1165209998)) - (i32.add (i32.const -1763193502)) - (i32.add (i32.const -578221176)) - (i32.add (i32.const -1961264719)) - (i32.add (i32.const 446620023)) - (i32.add (i32.const 320451591)) - (i32.add (i32.const -228803174)) - (i32.add (i32.const 522176251)) - (i32.add (i32.const -1919029857)) - (i32.add (i32.const -641394109)) - (i32.add (i32.const 1022910606)) - (i32.add (i32.const 1019384194)) - (i32.add (i32.const -233656271)) - (i32.add (i32.const -1762326212)) - (i32.add (i32.const 1436747877)) - (i32.add (i32.const 1929192212)) - (i32.add (i32.const 1525895490)) - (i32.add (i32.const -2059971874)) - (i32.add (i32.const -468166859)) - (i32.add (i32.const -1676075716)) - (i32.add (i32.const 430989110)) - (i32.add (i32.const -569248852)) - (i32.add (i32.const 279717613)) - (i32.add (i32.const -1523458167)) - (i32.add (i32.const -531913979)) - (i32.add (i32.const 1071513903)) - (i32.add (i32.const -1243006659)) - (i32.add (i32.const -1709118693)) - (i32.add (i32.const -1648781488)) - (i32.add (i32.const -1824199655)) - (i32.add (i32.const 1606102601)) - (i32.add (i32.const -529278499)) - (i32.add (i32.const -1384023064)) - (i32.add (i32.const 227746332)) - (i32.add (i32.const -1944085258)) - (i32.add (i32.const 1370974997)) - (i32.add (i32.const -65917812)) - (i32.add (i32.const 1663011496)) - (i32.add (i32.const 1325243765)) - (i32.add (i32.const -557170674)) - (i32.add (i32.const 2029318784)) - (i32.add (i32.const 1209504545)) - (i32.add (i32.const -694405924)) - (i32.add (i32.const -161712565)) - (i32.add (i32.const -1425448769)) - (i32.add (i32.const -1255423608)) - (i32.add (i32.const -251363856)) - (i32.add (i32.const 429479021)) - (i32.add (i32.const -1052772337)) - (i32.add (i32.const -856020131)) - (i32.add (i32.const -1372441059)) - (i32.add (i32.const 1105736623)) - (i32.add (i32.const -2100722458)) - (i32.add (i32.const -811492502)) - (i32.add (i32.const 925834263)) - (i32.add (i32.const -522675987)) - (i32.add (i32.const -877634061)) - (i32.add (i32.const -1252862775)) - (i32.add (i32.const 1421152906)) - (i32.add (i32.const -1062375704)) - (i32.add (i32.const -1123350575)) - (i32.add (i32.const -342039129)) - (i32.add (i32.const 1820171681)) - (i32.add (i32.const -1147776059)) - (i32.add (i32.const 514158178)) - (i32.add (i32.const 1825933439)) - (i32.add (i32.const 836281741)) - (i32.add (i32.const 571188976)) - (i32.add (i32.const 198839514)) - (i32.add (i32.const 357917464)) - (i32.add (i32.const -1347420563)) - (i32.add (i32.const 1782475648)) - (i32.add (i32.const -1052090404)) - (i32.add (i32.const 1853361325)) - (i32.add (i32.const 195516760)) - (i32.add (i32.const 306856181)) - (i32.add (i32.const -2024416088)) - (i32.add (i32.const 272724599)) - (i32.add (i32.const 851228317)) - (i32.add (i32.const -1745544015)) - (i32.add (i32.const 1949182178)) - (i32.add (i32.const 852582197)) - (i32.add (i32.const -1579359473)) - (i32.add (i32.const 2039233954)) - (i32.add (i32.const 614339878)) - (i32.add (i32.const -1694682159)) - (i32.add (i32.const -1760523447)) - (i32.add (i32.const -1491634844)) - (i32.add (i32.const 518278422)) - (i32.add (i32.const -59086177)) - (i32.add (i32.const 2065763592)) - (i32.add (i32.const -1200622785)) - (i32.add (i32.const -2014141973)) - (i32.add (i32.const -196525716)) - (i32.add (i32.const 2112566910)) - (i32.add (i32.const -100668529)) - (i32.add (i32.const 1024178185)) - (i32.add (i32.const 1939345321)) - (i32.add (i32.const -1082679141)) - (i32.add (i32.const 1896761915)) - (i32.add (i32.const 1515668532)) - (i32.add (i32.const 695942605)) - (i32.add (i32.const -614988762)) - (i32.add (i32.const -1788030683)) - (i32.add (i32.const 1271928563)) - (i32.add (i32.const 2092484413)) - (i32.add (i32.const 791584749)) - (i32.add (i32.const 1973022878)) - (i32.add (i32.const -2099342083)) - (i32.add (i32.const -475609618)) - (i32.add (i32.const -2026145742)) - (i32.add (i32.const -490387104)) - (i32.add (i32.const -552223761)) - (i32.add (i32.const -547924380)) - (i32.add (i32.const 1021516010)) - (i32.add (i32.const 1092989572)) - (i32.add (i32.const 979248329)) - (i32.add (i32.const 2135646954)) - (i32.add (i32.const 1204291597)) - (i32.add (i32.const -1955800047)) - (i32.add (i32.const 1974262582)) - (i32.add (i32.const -547667428)) - (i32.add (i32.const 1258196951)) - (i32.add (i32.const 1996010138)) - (i32.add (i32.const -1693247724)) - (i32.add (i32.const 1937860263)) - (i32.add (i32.const 1153251170)) - (i32.add (i32.const -130896918)) - (i32.add (i32.const -1983272252)) - (i32.add (i32.const -1691607013)) - (i32.add (i32.const -831304682)) - (i32.add (i32.const 1726695690)) - (i32.add (i32.const -1420969436)) - (i32.add (i32.const -801532172)) - (i32.add (i32.const 995839866)) - (i32.add (i32.const -1532092294)) - (i32.add (i32.const 1223744357)) - (i32.add (i32.const -1326160596)) - (i32.add (i32.const -358030783)) - (i32.add (i32.const 1124364080)) - (i32.add (i32.const -1615591925)) - (i32.add (i32.const 1169197842)) - (i32.add (i32.const -23153468)) - (i32.add (i32.const 1428297856)) - (i32.add (i32.const -1205547238)) - (i32.add (i32.const 1060402496)) - (i32.add (i32.const 898713704)) - (i32.add (i32.const 1814554588)) - (i32.add (i32.const -990266402)) - (i32.add (i32.const 530025060)) - (i32.add (i32.const -2066364905)) - (i32.add (i32.const -91303852)) - (i32.add (i32.const -1139377944)) - (i32.add (i32.const -760218910)) - (i32.add (i32.const -375142857)) - (i32.add (i32.const -1676019907)) - (i32.add (i32.const -39490506)) - (i32.add (i32.const 1059589540)) - (i32.add (i32.const -1489243212)) - (i32.add (i32.const -581518813)) - (i32.add (i32.const 619998213)) - (i32.add (i32.const -1446824227)) - (i32.add (i32.const -37936249)) - (i32.add (i32.const -1029851755)) - (i32.add (i32.const 3177911)) - (i32.add (i32.const 580965049)) - (i32.add (i32.const -892090420)) - (i32.add (i32.const -405723513)) - (i32.add (i32.const -804311411)) - (i32.add (i32.const -563874012)) - (i32.add (i32.const -1944289583)) - (i32.add (i32.const 351666316)) - (i32.add (i32.const -2079719684)) - (i32.add (i32.const -540592210)) - (i32.add (i32.const -2098422673)) - (i32.add (i32.const 1973184058)) - (i32.add (i32.const 789815324)) - (i32.add (i32.const -781372563)) - (i32.add (i32.const 423098097)) - (i32.add (i32.const -321937157)) - (i32.add (i32.const 926790769)) - (i32.add (i32.const 1681943079)) - (i32.add (i32.const -650134047)) - (i32.add (i32.const -2010845129)) - (i32.add (i32.const 1476124634)) - (i32.add (i32.const 1432593705)) - (i32.add (i32.const 989439795)) - (i32.add (i32.const -765751898)) - (i32.add (i32.const -629952497)) - (i32.add (i32.const -1140010922)) - (i32.add (i32.const 1379688134)) - (i32.add (i32.const -1124882443)) - (i32.add (i32.const 1671496569)) - (i32.add (i32.const -695681574)) - (i32.add (i32.const 1209473451)) - (i32.add (i32.const -1090147153)) - (i32.add (i32.const 714972686)) - (i32.add (i32.const 1716260212)) - (i32.add (i32.const 81271301)) - (i32.add (i32.const 1250756402)) - (i32.add (i32.const 1356970932)) - (i32.add (i32.const -1769752165)) - (i32.add (i32.const -2129329168)) - (i32.add (i32.const -397869368)) - (i32.add (i32.const 1974432115)) - (i32.add (i32.const 22954537)) - (i32.add (i32.const 1378512906)) - (i32.add (i32.const 1129710346)) - (i32.add (i32.const -969957049)) - (i32.add (i32.const -1026153607)) - (i32.add (i32.const -288851594)) - (i32.add (i32.const 345277431)) - (i32.add (i32.const -1937565112)) - (i32.add (i32.const 1903145005)) - (i32.add (i32.const 358509487)) - (i32.add (i32.const 1909548972)) - (i32.add (i32.const 1493183342)) - (i32.add (i32.const 1120089986)) - (i32.add (i32.const 1108831545)) - (i32.add (i32.const -1684219657)) - (i32.add (i32.const 1836134131)) - (i32.add (i32.const 2035948385)) - (i32.add (i32.const 678686180)) - (i32.add (i32.const 231601922)) - (i32.add (i32.const -792469047)) - (i32.add (i32.const -133701638)) - (i32.add (i32.const -1480300265)) - (i32.add (i32.const -586744110)) - (i32.add (i32.const -1714870717)) - (i32.add (i32.const -364038331)) - (i32.add (i32.const -58853330)) - (i32.add (i32.const -1564745947)) - (i32.add (i32.const -753892882)) - (i32.add (i32.const 1770720332)) - (i32.add (i32.const -1547872910)) - (i32.add (i32.const 976937871)) - (i32.add (i32.const 1966113257)) - (i32.add (i32.const -1738673445)) - (i32.add (i32.const -1839515296)) - (i32.add (i32.const -2039056631)) - (i32.add (i32.const -1120443465)) - (i32.add (i32.const -1155478365)) - (i32.add (i32.const -1989133780)) - (i32.add (i32.const -1097970556)) - (i32.add (i32.const -613744251)) - (i32.add (i32.const -1684790966)) - (i32.add (i32.const -387606976)) - (i32.add (i32.const 200379354)) - (i32.add (i32.const 228988623)) - (i32.add (i32.const 1890605545)) - (i32.add (i32.const -1138248232)) - (i32.add (i32.const 1339712945)) - (i32.add (i32.const 1800539662)) - (i32.add (i32.const -765355266)) - (i32.add (i32.const -1830995404)) - (i32.add (i32.const 2077668102)) - (i32.add (i32.const 1004562179)) - (i32.add (i32.const 1288959307)) - (i32.add (i32.const -1848974552)) - (i32.add (i32.const 1667682171)) - (i32.add (i32.const 978659243)) - (i32.add (i32.const 941753390)) - (i32.add (i32.const 562567284)) - (i32.add (i32.const -1305126659)) - (i32.add (i32.const -2097157604)) - (i32.add (i32.const 1032388149)) - (i32.add (i32.const 1622234709)) - (i32.add (i32.const 1740105601)) - (i32.add (i32.const -1470196275)) - (i32.add (i32.const -945535559)) - (i32.add (i32.const -534297226)) - (i32.add (i32.const -919533001)) - (i32.add (i32.const 349022159)) - (i32.add (i32.const 102475571)) - (i32.add (i32.const 1428004926)) - (i32.add (i32.const -835851047)) - (i32.add (i32.const -1230664017)) - (i32.add (i32.const 1268252177)) - (i32.add (i32.const 443474693)) - (i32.add (i32.const 1249889417)) - (i32.add (i32.const 1524421300)) - (i32.add (i32.const 1651796907)) - (i32.add (i32.const -490057113)) - (i32.add (i32.const 1174777099)) - (i32.add (i32.const 421996621)) - (i32.add (i32.const -1709262562)) - (i32.add (i32.const 1586056083)) - (i32.add (i32.const 98629394)) - (i32.add (i32.const 760226235)) - (i32.add (i32.const -718085525)) - (i32.add (i32.const 1156556952)) - (i32.add (i32.const 373387388)) - (i32.add (i32.const -807210541)) - (i32.add (i32.const 1100460175)) - (i32.add (i32.const -809668011)) - (i32.add (i32.const -2094339536)) - (i32.add (i32.const 112738943)) - (i32.add (i32.const 258761818)) - (i32.add (i32.const -354193775)) - (i32.add (i32.const -1856039785)) - (i32.add (i32.const 1029086410)) - (i32.add (i32.const 1681130416)) - (i32.add (i32.const 658575750)) - (i32.add (i32.const -1643252127)) - (i32.add (i32.const 1294644874)) - (i32.add (i32.const -1935730753)) - (i32.add (i32.const 1152857525)) - (i32.add (i32.const -269154341)) - (i32.add (i32.const 399418817)) - (i32.add (i32.const 2143444357)) - (i32.add (i32.const 1216760407)) - (i32.add (i32.const 529694969)) - (i32.add (i32.const 327051295)) - (i32.add (i32.const 1185230061)) - (i32.add (i32.const 903639765)) - (i32.add (i32.const -145983263)) - (i32.add (i32.const -1012846170)) - (i32.add (i32.const -888429669)) - (i32.add (i32.const 1729399118)) - (i32.add (i32.const -999562369)) - (i32.add (i32.const 1428408551)) - (i32.add (i32.const -1316112608)) - (i32.add (i32.const 1741960142)) - (i32.add (i32.const -547275811)) - (i32.add (i32.const -260110506)) - (i32.add (i32.const -744133923)) - (i32.add (i32.const -2059679358)) - (i32.add (i32.const -803712047)) - (i32.add (i32.const 1583364799)) - (i32.add (i32.const 618291996)) - (i32.add (i32.const -938379023)) - (i32.add (i32.const 893712010)) - (i32.add (i32.const -993654487)) - (i32.add (i32.const 302526802)) - (i32.add (i32.const 1376639937)) - (i32.add (i32.const 219147549)) - (i32.add (i32.const -674652387)) - (i32.add (i32.const 2128712585)) - (i32.add (i32.const -1177069609)) - (i32.add (i32.const -581896704)) - (i32.add (i32.const -1138227028)) - (i32.add (i32.const -196219719)) - (i32.add (i32.const -1246679698)) - (i32.add (i32.const -1141811802)) - (i32.add (i32.const -2080203001)) - (i32.add (i32.const -644219445)) - (i32.add (i32.const 1174060822)) - (i32.add (i32.const 366746079)) - (i32.add (i32.const 2143900174)) - (i32.add (i32.const -1167728892)) - (i32.add (i32.const -1551379590)) - (i32.add (i32.const -1731394355)) - (i32.add (i32.const 552840991)) - (i32.add (i32.const -2030085662)) - (i32.add (i32.const -1891977238)) - (i32.add (i32.const -102930841)) - (i32.add (i32.const 768726687)) - (i32.add (i32.const 1463779202)) - (i32.add (i32.const -169181894)) - (i32.add (i32.const -1047346805)) - (i32.add (i32.const -674113638)) - (i32.add (i32.const 828574193)) - (i32.add (i32.const -1624636412)) - (i32.add (i32.const -257266242)) - (i32.add (i32.const -1851097961)) - (i32.add (i32.const -236887620)) - (i32.add (i32.const -305492922)) - (i32.add (i32.const 1969757002)) - (i32.add (i32.const 626800436)) - (i32.add (i32.const 1992758872)) - (i32.add (i32.const 1810992874)) - (i32.add (i32.const -1615804588)) - (i32.add (i32.const 189402789)) - (i32.add (i32.const 649701137)) - (i32.add (i32.const -905579789)) - (i32.add (i32.const -2108387688)) - (i32.add (i32.const -251501906)) - (i32.add (i32.const -1236852421)) - (i32.add (i32.const 1895319411)) - (i32.add (i32.const 1566318220)) - (i32.add (i32.const -810982023)) - (i32.add (i32.const -1855254306)) - (i32.add (i32.const 735970802)) - (i32.add (i32.const -384399351)) - (i32.add (i32.const 618280453)) - (i32.add (i32.const 795192269)) - (i32.add (i32.const 251595579)) - (i32.add (i32.const -2120112525)) - (i32.add (i32.const 557347085)) - (i32.add (i32.const 1273086297)) - (i32.add (i32.const 1153626776)) - (i32.add (i32.const 201958486)) - (i32.add (i32.const -1007816076)) - (i32.add (i32.const -211575540)) - (i32.add (i32.const -1061530425)) - (i32.add (i32.const 1114912383)) - (i32.add (i32.const 1846992017)) - (i32.add (i32.const -1783337573)) - (i32.add (i32.const -1259067097)) - (i32.add (i32.const 667835742)) - (i32.add (i32.const 1532531102)) - (i32.add (i32.const -419543692)) - (i32.add (i32.const -1421199303)) - (i32.add (i32.const 1047446645)) - (i32.add (i32.const 2097818101)) - (i32.add (i32.const 1002982528)) - (i32.add (i32.const 578336137)) - (i32.add (i32.const -996644060)) - (i32.add (i32.const 33286186)) - (i32.add (i32.const 1423793810)) - (i32.add (i32.const -939789843)) - (i32.add (i32.const 1104889543)) - (i32.add (i32.const 1795612176)) - (i32.add (i32.const -439452142)) - (i32.add (i32.const 1233516888)) - (i32.add (i32.const -1483941958)) - (i32.add (i32.const 1441532450)) - (i32.add (i32.const -584083244)) - (i32.add (i32.const -1762153940)) - (i32.add (i32.const 1311598645)) - (i32.add (i32.const -1733700886)) - (i32.add (i32.const -1848471653)) - (i32.add (i32.const 1444510784)) - (i32.add (i32.const 2127018521)) - (i32.add (i32.const 789061364)) - (i32.add (i32.const 1613208404)) - (i32.add (i32.const 374144517)) - (i32.add (i32.const 1334411109)) - (i32.add (i32.const 1217215070)) - (i32.add (i32.const 1172775603)) - (i32.add (i32.const -1083968062)) - (i32.add (i32.const 1677046152)) - (i32.add (i32.const -1384432107)) - (i32.add (i32.const 1319131506)) - (i32.add (i32.const -354745002)) - (i32.add (i32.const -470259433)) - (i32.add (i32.const 1461811891)) - (i32.add (i32.const -1734576281)) - (i32.add (i32.const -679166215)) - (i32.add (i32.const -1653175373)) - (i32.add (i32.const 1760711260)) - (i32.add (i32.const 2124807893)) - (i32.add (i32.const 2069799827)) - (i32.add (i32.const 1639384183)) - (i32.add (i32.const -1137056403)) - (i32.add (i32.const 1023684282)) - (i32.add (i32.const -607574645)) - (i32.add (i32.const -469159464)) - (i32.add (i32.const -1698958402)) - (i32.add (i32.const -1344326238)) - (i32.add (i32.const -2116641460)) - (i32.add (i32.const 1683225715)) - (i32.add (i32.const 39926412)) - (i32.add (i32.const 2014019306)) - (i32.add (i32.const -1113672793)) - (i32.add (i32.const -941096054)) - (i32.add (i32.const 1099447542)) - (i32.add (i32.const -561254073)) - (i32.add (i32.const 857499505)) - (i32.add (i32.const -1648554847)) - (i32.add (i32.const 566389160)) - (i32.add (i32.const 782313281)) - (i32.add (i32.const 2016396876)) - (i32.add (i32.const 902195855)) - (i32.add (i32.const 1101114674)) - (i32.add (i32.const -1326181541)) - (i32.add (i32.const 823237159)) - (i32.add (i32.const -128305906)) - (i32.add (i32.const 313469179)) - (i32.add (i32.const -795844474)) - (i32.add (i32.const -240873920)) - (i32.add (i32.const 1345406227)) - (i32.add (i32.const -1497447272)) - (i32.add (i32.const 1654231493)) - (i32.add (i32.const -1958369947)) - (i32.add (i32.const -2088996644)) - (i32.add (i32.const 1083241541)) - (i32.add (i32.const -1602450010)) - (i32.add (i32.const 50451847)) - (i32.add (i32.const -915258762)) - (i32.add (i32.const 797261301)) - (i32.add (i32.const -1396178514)) - (i32.add (i32.const 287870933)) - (i32.add (i32.const -1070444939)) - (i32.add (i32.const 1645879743)) - (i32.add (i32.const 944198954)) - (i32.add (i32.const -667311120)) - (i32.add (i32.const 72698624)) - (i32.add (i32.const 253650124)) - (i32.add (i32.const 1471037516)) - (i32.add (i32.const 53322648)) - (i32.add (i32.const -1217571888)) - (i32.add (i32.const -1837742283)) - (i32.add (i32.const -1959745910)) - (i32.add (i32.const -509768652)) - (i32.add (i32.const -1363791088)) - (i32.add (i32.const -64605812)) - (i32.add (i32.const -241384670)) - (i32.add (i32.const -1723046719)) - (i32.add (i32.const 1016088652)) - (i32.add (i32.const 2142915523)) - (i32.add (i32.const -447925718)) - (i32.add (i32.const -1234153488)) - (i32.add (i32.const 2015441616)) - (i32.add (i32.const 1369250583)) - (i32.add (i32.const -779476079)) - (i32.add (i32.const -1714144865)) - (i32.add (i32.const 1105014603)) - (i32.add (i32.const 1105493471)) - (i32.add (i32.const -398275867)) - (i32.add (i32.const 1000955666)) - (i32.add (i32.const 1390209645)) - (i32.add (i32.const -1729771661)) - (i32.add (i32.const 981200189)) - (i32.add (i32.const -1477327904)) - (i32.add (i32.const -2118989685)) - (i32.add (i32.const 1417359667)) - (i32.add (i32.const -1791824430)) - (i32.add (i32.const 2145749273)) - (i32.add (i32.const -172330119)) - (i32.add (i32.const 374179334)) - (i32.add (i32.const -1043906504)) - (i32.add (i32.const 681018056)) - (i32.add (i32.const 1930308618)) - (i32.add (i32.const 114715293)) - (i32.add (i32.const -513301138)) - (i32.add (i32.const 2135202801)) - (i32.add (i32.const 981091538)) - (i32.add (i32.const 1627875180)) - (i32.add (i32.const -871717375)) - (i32.add (i32.const -531554011)) - (i32.add (i32.const 782330057)) - (i32.add (i32.const 424662815)) - (i32.add (i32.const -1428468037)) - (i32.add (i32.const 1558415495)) - (i32.add (i32.const -924422339)) - (i32.add (i32.const -1934298500)) - (i32.add (i32.const -1547251480)) - (i32.add (i32.const 1526554842)) - (i32.add (i32.const 704652735)) - (i32.add (i32.const -2136933220)) - (i32.add (i32.const 1998910825)) - (i32.add (i32.const -1649389377)) - (i32.add (i32.const 2024869840)) - (i32.add (i32.const -157696021)) - (i32.add (i32.const 1168462490)) - (i32.add (i32.const -1517684050)) - (i32.add (i32.const 1848099754)) - (i32.add (i32.const 497019728)) - (i32.add (i32.const 581880410)) - (i32.add (i32.const 1163980554)) - (i32.add (i32.const -1099208016)) - (i32.add (i32.const -796428983)) - (i32.add (i32.const 682296021)) - (i32.add (i32.const 466247449)) - (i32.add (i32.const 336742816)) - (i32.add (i32.const -929393871)) - (i32.add (i32.const 2094945902)) - (i32.add (i32.const -680209019)) - (i32.add (i32.const -1550697316)) - (i32.add (i32.const 853404800)) - (i32.add (i32.const -939911597)) - (i32.add (i32.const 561039571)) - (i32.add (i32.const -103913314)) - (i32.add (i32.const 1309081961)) - (i32.add (i32.const -289963553)) - (i32.add (i32.const 718035299)) - (i32.add (i32.const -1606184627)) - (i32.add (i32.const 298640400)) - (i32.add (i32.const -2119002013)) - (i32.add (i32.const 426939363)) - (i32.add (i32.const 573335452)) - (i32.add (i32.const -611534046)) - (i32.add (i32.const 1010963538)) - (i32.add (i32.const -1241036634)) - (i32.add (i32.const 2003518128)) - (i32.add (i32.const 122584944)) - (i32.add (i32.const 136099010)) - (i32.add (i32.const 562276717)) - (i32.add (i32.const -644229658)) - (i32.add (i32.const -1813748842)) - (i32.add (i32.const -629233683)) - (i32.add (i32.const -1725525052)) - (i32.add (i32.const 1170586084)) - (i32.add (i32.const 204916343)) - (i32.add (i32.const 748253991)) - (i32.add (i32.const -391000946)) - (i32.add (i32.const 1869803261)) - (i32.add (i32.const -83645031)) - (i32.add (i32.const 419565795)) - (i32.add (i32.const -448820110)) - (i32.add (i32.const 945523662)) - (i32.add (i32.const -1956027845)) - (i32.add (i32.const 70131643)) - (i32.add (i32.const -9838772)) - (i32.add (i32.const -184290909)) - (i32.add (i32.const -526572953)) - (i32.add (i32.const 343396401)) - (i32.add (i32.const 234245736)) - (i32.add (i32.const 1564297832)) - (i32.add (i32.const -646964406)) - (i32.add (i32.const -1295330903)) - (i32.add (i32.const -594787303)) - (i32.add (i32.const 46603935)) - (i32.add (i32.const -868949742)) - (i32.add (i32.const -837703882)) - (i32.add (i32.const -1940996788)) - (i32.add (i32.const -551883437)) - (i32.add (i32.const 1164107774)) - (i32.add (i32.const -1059664365)) - (i32.add (i32.const -42614673)) - (i32.add (i32.const -2131316529)) - (i32.add (i32.const 575453376)) - (i32.add (i32.const -884975871)) - (i32.add (i32.const -530043773)) - (i32.add (i32.const 421133353)) - (i32.add (i32.const -1565447367)) - (i32.add (i32.const -1166109106)) - (i32.add (i32.const -1700942058)) - (i32.add (i32.const 304398817)) - (i32.add (i32.const 2131802444)) - (i32.add (i32.const -1771840283)) - (i32.add (i32.const -887572140)) - (i32.add (i32.const 361015715)) - (i32.add (i32.const 1517947164)) - (i32.add (i32.const -1846813858)) - (i32.add (i32.const -1802524860)) - (i32.add (i32.const -979421836)) - (i32.add (i32.const 1224152256)) - (i32.add (i32.const 397737673)) - (i32.add (i32.const 1435200470)) - (i32.add (i32.const -1692313915)) - (i32.add (i32.const 614976323)) - (i32.add (i32.const -2016012529)) - (i32.add (i32.const 1731721421)) - (i32.add (i32.const -1788522205)) - (i32.add (i32.const -1090475742)) - (i32.add (i32.const 1426784728)) - (i32.add (i32.const -967769524)) - (i32.add (i32.const 210455165)) - (i32.add (i32.const -591524969)) - (i32.add (i32.const 607615690)) - (i32.add (i32.const -2037954552)) - (i32.add (i32.const 1179964211)) - (i32.add (i32.const 516745466)) - (i32.add (i32.const 735677468)) - (i32.add (i32.const -1630636816)) - (i32.add (i32.const -727358913)) - (i32.add (i32.const 1386674598)) - (i32.add (i32.const -228587542)) - (i32.add (i32.const -1147989447)) - (i32.add (i32.const 42264831)) - (i32.add (i32.const -1393866635)) - (i32.add (i32.const -1406208039)) - (i32.add (i32.const -684812955)) - (i32.add (i32.const -1816503711)) - call $timer - local.set $check - (block - local.get $check - i32.const -1063366326 - i32.eq - br_if 0 - unreachable - ) -) diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/user.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/user.wat deleted file mode 100644 index 9ecb4dcc45..0000000000 --- a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/user.wat +++ /dev/null @@ -1,53 +0,0 @@ -;; Copyright 2023, Offchain Labs, Inc. -;; For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE - -(module - (import "vm_hooks" "storage_load_bytes32" (func $storage_load_bytes32 (param i32 i32))) - - (func $storage_load (result i32) - i32.const 0 - i32.const 32 - call $storage_load_bytes32 - i32.const 0 - ) - (func $safe (result i32) - i32.const 5 - ) - (func $unreachable (result i32) - i32.const 0 - i64.const 4 - unreachable - ) - (func $out_of_bounds (result i32) - i32.const 0xFFFFFF - i32.load - ) - (func (export "user_entrypoint") (param $args_len i32) (result i32) - ;; this func uses $args_len to select which func to call - - ;; only call that succeeds - (i32.eq (local.get $args_len) (i32.const 1)) - (if - (then (call $safe) (return)) - ) - - ;; reverts due to an unreachable - (i32.eq (local.get $args_len) (i32.const 2)) - (if - (then (call $unreachable) (return)) - ) - - ;; reverts due to an out of bounds memory access - (i32.eq (local.get $args_len) (i32.const 3)) - (if - (then (call $out_of_bounds) (return)) - ) - - (i32.eq (local.get $args_len) (i32.const 32)) - (if - (then (call $storage_load) (return)) - ) - - unreachable - ) - (memory (export "memory") 1 1)) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs deleted file mode 100644 index f9862c42a5..0000000000 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ /dev/null @@ -1,139 +0,0 @@ -use std::fs; -// use wabt::wat2wasm; -use wasmer::wasmparser::{Validator, WasmFeatures}; -// use wasmer::{imports, Imports, Function, Instance, Module, Store}; -use wasmer::{imports, Instance, Module, Store}; - -fn main() -> eyre::Result<()> { - // let wasm = fs::read(format!("../../../target/machines/latest/user_host.wasm"))?; - let wasm = fs::read(format!("../../../target/machines/latest/host_io.wasm"))?; - - let features = WasmFeatures { - mutable_global: true, - saturating_float_to_int: true, - sign_extension: true, - reference_types: false, - multi_value: false, - bulk_memory: true, // not all ops supported yet - simd: false, - relaxed_simd: false, - threads: false, - tail_call: false, - multi_memory: false, - exceptions: false, - memory64: false, - extended_const: false, - component_model: false, - component_model_nested_names: false, - component_model_values: false, - floats: true, - function_references: false, - gc: false, - memory_control: false, - }; - Validator::new_with_features(features).validate_all(&wasm)?; - - let mut store = Store::default(); - let module = Module::new(&store, wasm)?; - - // WHICH IMPORTS TO USE? - let import_object = imports! {}; - let _instance = Instance::new(&mut store, &module, &import_object)?; - - println!("Hello, world!"); - Ok(()) -} - -// fn foo(n: i32) -> i32 { -// n -// } -// fn main() -> eyre::Result<()> { -// let wasm = fs::read(format!("./target/wasm32-wasi/debug/stylus_caller.wasm"))?; -// -// let features = WasmFeatures { -// mutable_global: true, -// saturating_float_to_int: true, -// sign_extension: true, -// reference_types: false, -// multi_value: false, -// bulk_memory: true, // not all ops supported yet -// simd: false, -// relaxed_simd: false, -// threads: false, -// tail_call: false, -// multi_memory: false, -// exceptions: false, -// memory64: false, -// extended_const: false, -// component_model: false, -// component_model_nested_names: false, -// component_model_values: false, -// floats: true, -// function_references: false, -// gc: false, -// memory_control: false, -// }; -// Validator::new_with_features(features).validate_all(&wasm)?; -// -// let mut store = Store::default(); -// let module = Module::new(&store, wasm)?; -// -// let host_fn = Function::new_typed(&mut store, foo); -// let import_object: Imports = imports! { -// "hostio" => { -// "wavm_link_module" => host_fn, -// }, -// }; -// -// let instance = Instance::new(&mut store, &module, &import_object)?; -// -// let main = instance.exports.get_function("main")?; -// let result = main.call(&mut store, &[])?; -// -// println!("Hello, world!, wasm: {:?}", result); -// Ok(()) -// } - -// fn main() -> eyre::Result<()> { -// let wat = fs::read(format!("./programs_to_benchmark/add_one.wat"))?; -// let wasm = wat2wasm(&wat)?; -// -// let features = WasmFeatures { -// mutable_global: true, -// saturating_float_to_int: true, -// sign_extension: true, -// reference_types: false, -// multi_value: false, -// bulk_memory: true, // not all ops supported yet -// simd: false, -// relaxed_simd: false, -// threads: false, -// tail_call: false, -// multi_memory: false, -// exceptions: false, -// memory64: false, -// extended_const: false, -// component_model: false, -// component_model_nested_names: false, -// component_model_values: false, -// floats: false, -// function_references: false, -// gc: false, -// memory_control: false, -// }; -// Validator::new_with_features(features).validate_all(&wasm)?; -// -// let mut store = Store::default(); -// let module = Module::new(&store, &wat)?; -// // The module doesn't import anything, so we create an empty import object. -// let import_object = imports! {}; -// let instance = Instance::new(&mut store, &module, &import_object)?; -// -// let add_one = instance.exports.get_function("add_one")?; -// let result = add_one.call(&mut store, &[Value::I32(42)])?; -// assert_eq!(result[0], Value::I32(43)); -// -// println!("Hello, world!, result: {:?}", result); -// println!("{:?}", wasm); -// Ok(()) -// } diff --git a/arbitrator/tools/stylus_benchmark/stylus_caller/Cargo.toml b/arbitrator/tools/stylus_benchmark/stylus_caller/Cargo.toml deleted file mode 100644 index 5e8aa4fd42..0000000000 --- a/arbitrator/tools/stylus_benchmark/stylus_caller/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "stylus_caller" -version = "0.1.0" -edition = "2021" - -[dependencies] -user-host = { path = "../../../wasm-libraries/user-host/" } diff --git a/arbitrator/tools/stylus_benchmark/stylus_caller/src/main.rs b/arbitrator/tools/stylus_benchmark/stylus_caller/src/main.rs deleted file mode 100644 index 7de17d77cc..0000000000 --- a/arbitrator/tools/stylus_benchmark/stylus_caller/src/main.rs +++ /dev/null @@ -1,10 +0,0 @@ -use user_host::link::programs__create_stylus_config; - -fn main() { - println!("Hello, world!"); - - unsafe { - let ret = programs__create_stylus_config(0, 10000, 1, 1); - println!("ret= {}", ret); - } -} diff --git a/arbitrator/wasm-libraries/user-host/Cargo.toml b/arbitrator/wasm-libraries/user-host/Cargo.toml index be8aa5047b..15174397eb 100644 --- a/arbitrator/wasm-libraries/user-host/Cargo.toml +++ b/arbitrator/wasm-libraries/user-host/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [lib] -crate-type = ["cdylib", "lib"] +crate-type = ["cdylib"] [dependencies] arbutil = { path = "../../arbutil/" } diff --git a/arbitrator/wasm-libraries/user-host/src/lib.rs b/arbitrator/wasm-libraries/user-host/src/lib.rs index 5843812fc8..cd2d142850 100644 --- a/arbitrator/wasm-libraries/user-host/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host/src/lib.rs @@ -3,5 +3,5 @@ mod host; mod ink; -pub mod link; +mod link; mod program; From d94665a9f13f6cdef63255d0d9a2e52b2ccc95b6 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 21 Nov 2024 10:11:48 -0300 Subject: [PATCH 048/187] jit as a library and binary --- arbitrator/jit/src/lib.rs | 51 +++++++++++++++++++++++++++++++++++ arbitrator/jit/src/main.rs | 51 +++-------------------------------- arbitrator/jit/src/prepare.rs | 2 +- 3 files changed, 55 insertions(+), 49 deletions(-) create mode 100644 arbitrator/jit/src/lib.rs diff --git a/arbitrator/jit/src/lib.rs b/arbitrator/jit/src/lib.rs new file mode 100644 index 0000000000..e19ee6caae --- /dev/null +++ b/arbitrator/jit/src/lib.rs @@ -0,0 +1,51 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +use std::path::PathBuf; +use structopt::StructOpt; + +mod arbcompress; +mod caller_env; +pub mod machine; +mod prepare; +pub mod program; +mod socket; +mod stylus_backend; +mod test; +mod wasip1_stub; +mod wavmio; + +#[derive(StructOpt)] +#[structopt(name = "jit-prover")] +pub struct Opts { + #[structopt(short, long)] + binary: PathBuf, + #[structopt(long, default_value = "0")] + inbox_position: u64, + #[structopt(long, default_value = "0")] + delayed_inbox_position: u64, + #[structopt(long, default_value = "0")] + position_within_message: u64, + #[structopt(long)] + last_block_hash: Option, + #[structopt(long)] + last_send_root: Option, + #[structopt(long)] + inbox: Vec, + #[structopt(long)] + delayed_inbox: Vec, + #[structopt(long)] + preimages: Option, + #[structopt(long)] + cranelift: bool, + #[structopt(long)] + forks: bool, + #[structopt(long)] + pub debug: bool, + #[structopt(long)] + pub require_success: bool, + // JSON inputs supercede any of the command-line inputs which could + // be specified in the JSON file. + #[structopt(long)] + json_inputs: Option, +} diff --git a/arbitrator/jit/src/main.rs b/arbitrator/jit/src/main.rs index 6e44500215..bd0591909c 100644 --- a/arbitrator/jit/src/main.rs +++ b/arbitrator/jit/src/main.rs @@ -1,58 +1,13 @@ // Copyright 2022-2024, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -use crate::machine::{Escape, WasmEnv}; +use jit::machine; +use jit::machine::{Escape, WasmEnv}; +use jit::Opts; use arbutil::{color, Color}; use eyre::Result; -use std::path::PathBuf; use structopt::StructOpt; -mod arbcompress; -mod caller_env; -mod machine; -mod prepare; -mod program; -mod socket; -mod stylus_backend; -mod test; -mod wasip1_stub; -mod wavmio; - -#[derive(StructOpt)] -#[structopt(name = "jit-prover")] -pub struct Opts { - #[structopt(short, long)] - binary: PathBuf, - #[structopt(long, default_value = "0")] - inbox_position: u64, - #[structopt(long, default_value = "0")] - delayed_inbox_position: u64, - #[structopt(long, default_value = "0")] - position_within_message: u64, - #[structopt(long)] - last_block_hash: Option, - #[structopt(long)] - last_send_root: Option, - #[structopt(long)] - inbox: Vec, - #[structopt(long)] - delayed_inbox: Vec, - #[structopt(long)] - preimages: Option, - #[structopt(long)] - cranelift: bool, - #[structopt(long)] - forks: bool, - #[structopt(long)] - debug: bool, - #[structopt(long)] - require_success: bool, - // JSON inputs supercede any of the command-line inputs which could - // be specified in the JSON file. - #[structopt(long)] - json_inputs: Option, -} - fn main() -> Result<()> { let opts = Opts::from_args(); let env = match WasmEnv::cli(&opts) { diff --git a/arbitrator/jit/src/prepare.rs b/arbitrator/jit/src/prepare.rs index e7a7ba0f4d..62dd063b75 100644 --- a/arbitrator/jit/src/prepare.rs +++ b/arbitrator/jit/src/prepare.rs @@ -1,7 +1,7 @@ // Copyright 2022-2024, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -use crate::WasmEnv; +use crate::machine::WasmEnv; use arbutil::{Bytes32, PreimageType}; use eyre::Ok; use prover::parse_input::FileData; From cd1642d503467be33d647b4a24ddc7c629e1e66a Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 21 Nov 2024 10:12:25 -0300 Subject: [PATCH 049/187] Beginning of stylus_benchmark --- .dockerignore | 1 + arbitrator/Cargo.toml | 1 + arbitrator/tools/stylus_benchmark/Cargo.lock | 2517 +++++++++++++++++ arbitrator/tools/stylus_benchmark/Cargo.toml | 10 + arbitrator/tools/stylus_benchmark/src/main.rs | 25 + 5 files changed, 2554 insertions(+) create mode 100644 arbitrator/tools/stylus_benchmark/Cargo.lock create mode 100644 arbitrator/tools/stylus_benchmark/Cargo.toml create mode 100644 arbitrator/tools/stylus_benchmark/src/main.rs diff --git a/.dockerignore b/.dockerignore index 51424900e8..2d5303a3be 100644 --- a/.dockerignore +++ b/.dockerignore @@ -36,6 +36,7 @@ arbitrator/tools/wasmer/target/ arbitrator/tools/wasm-tools/ arbitrator/tools/pricers/ arbitrator/tools/module_roots/ +arbitrator/tools/stylus_benchmark arbitrator/langs/rust/target/ arbitrator/langs/bf/target/ diff --git a/arbitrator/Cargo.toml b/arbitrator/Cargo.toml index eaafb6e439..3c5228daf2 100644 --- a/arbitrator/Cargo.toml +++ b/arbitrator/Cargo.toml @@ -12,6 +12,7 @@ members = [ exclude = [ "stylus/tests/", "tools/wasmer/", + "tools/stylus_benchmark", ] resolver = "2" diff --git a/arbitrator/tools/stylus_benchmark/Cargo.lock b/arbitrator/tools/stylus_benchmark/Cargo.lock new file mode 100644 index 0000000000..b9ee1aaadc --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/Cargo.lock @@ -0,0 +1,2517 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli 0.31.1", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "allocator-api2" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "arbutil" +version = "0.1.0" +dependencies = [ + "digest 0.10.7", + "eyre", + "fnv", + "hex", + "num-traits", + "num_enum", + "ruint2", + "serde", + "sha2 0.10.8", + "sha3 0.10.8", + "siphasher", + "tiny-keccak", + "wasmparser", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "serde", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "blst" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "brotli" +version = "0.1.0" +dependencies = [ + "lazy_static", + "num_enum", + "wasmer", + "wee_alloc", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" + +[[package]] +name = "c-kzg" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94a4bc5367b6284358d2a6a6a1dc2d92ec4b86034561c3b9d3341909752fd848" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", +] + +[[package]] +name = "caller-env" +version = "0.1.0" +dependencies = [ + "brotli", + "num_enum", + "rand", + "rand_pcg", + "wasmer", +] + +[[package]] +name = "cc" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clru" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "corosensei" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80128832c58ea9cbd041d2a759ec449224487b2c1e400453d99d244eead87a8e" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "libc", + "scopeguard", + "windows-sys 0.33.0", +] + +[[package]] +name = "cpufeatures" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-bforest" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2ab4512dfd3a6f4be184403a195f76e81a8a9f9e6c898e19d2dc3ce20e0115" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b022ed2a5913a38839dfbafe6cf135342661293b08049843362df4301261dc" +dependencies = [ + "arrayvec", + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-egraph", + "cranelift-entity", + "cranelift-isle", + "gimli 0.26.2", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "639307b45434ad112a98f8300c0f0ab085cbefcd767efcdef9ef19d4c0756e74" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "278e52e29c53fcf32431ef08406c295699a70306d05a0715c5b1bf50e33a9ab7" + +[[package]] +name = "cranelift-egraph" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624b54323b06e675293939311943ba82d323bb340468ce1889be5da7932c8d73" +dependencies = [ + "cranelift-entity", + "fxhash", + "hashbrown 0.12.3", + "indexmap 1.9.3", + "log", + "smallvec", +] + +[[package]] +name = "cranelift-entity" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a59bcbca89c3f1b70b93ab3cbba5e5e0cbf3e63dadb23c7525cb142e21a9d4c" + +[[package]] +name = "cranelift-frontend" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d70abacb8cfef3dc8ff7e8836e9c1d70f7967dfdac824a4cd5e30223415aca6" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "393bc73c451830ff8dbb3a07f61843d6cb41a084f9996319917c0b291ed785bb" + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.87", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if 1.0.0", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.87", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", +] + +[[package]] +name = "dynasm" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add9a102807b524ec050363f09e06f1504214b0e1c7797f64261c891022dce8b" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "lazy_static", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "dynasmrt" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fba5a42bd76a17cad4bfa00de168ee1cbfa06a5e8ce992ae880218c05641a9" +dependencies = [ + "byteorder", + "dynasm", + "memmap2 0.5.10", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "enum-iterator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" +dependencies = [ + "enum-iterator-derive 0.7.0", +] + +[[package]] +name = "enum-iterator" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c280b9e6b3ae19e152d8e31cf47f18389781e119d4013a2a2bb0180e5facc635" +dependencies = [ + "enum-iterator-derive 1.4.0", +] + +[[package]] +name = "enum-iterator-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "enumset" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +dependencies = [ + "fallible-iterator", + "indexmap 1.9.3", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.1", + "serde", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jit" +version = "0.1.0" +dependencies = [ + "arbutil", + "brotli", + "caller-env", + "eyre", + "hex", + "libc", + "parking_lot", + "prover", + "rand", + "rand_pcg", + "sha2 0.9.9", + "sha3 0.9.1", + "structopt", + "stylus", + "thiserror", + "wasmer", + "wasmer-compiler-cranelift", +] + +[[package]] +name = "js-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "libc" +version = "0.2.164" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.1", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memory_units" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "more-asserts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nom-leb128" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52a73b6c3a9ecfff12ad50dedba051ef838d2f478d938bb3e6b3842431028e62" +dependencies = [ + "arrayvec", + "nom", + "num-traits", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prover" +version = "0.1.0" +dependencies = [ + "arbutil", + "bincode", + "bitvec", + "brotli", + "c-kzg", + "derivative", + "digest 0.9.0", + "enum-iterator 2.1.0", + "eyre", + "fnv", + "hex", + "itertools", + "lazy_static", + "libc", + "lru", + "nom", + "nom-leb128", + "num", + "num-derive", + "num-traits", + "once_cell", + "parking_lot", + "rustc-demangle", + "serde", + "serde_json", + "serde_with", + "sha2 0.9.9", + "sha3 0.9.1", + "smallvec", + "static_assertions", + "structopt", + "wasmer", + "wasmer-compiler-singlepass", + "wasmer-types", + "wasmparser", + "wat", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_pcg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "regalloc2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "region" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6b6ebd13bc009aef9cd476c1310d49ac354d36e240cf1bd753290f3dc7199a7" +dependencies = [ + "bitflags 1.3.2", + "libc", + "mach2", + "windows-sys 0.52.0", +] + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "indexmap 1.9.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ruint2" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b066b8e4fcea7fae86b6932d2449670b6b5545b7e8407841b2d3a916ff2a9f86" +dependencies = [ + "derive_more", + "ruint2-macro", + "rustc_version", + "thiserror", +] + +[[package]] +name = "ruint2-macro" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89dc553bc0cf4512a8b96caa2e21ed5f6e4b66bf28a1bd08fd9eb07c0b39b28c" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "self_cell" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.6.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "shared-buffer" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6c99835bad52957e7aa241d3975ed17c1e5f8c92026377d117a606f36b84b16" +dependencies = [ + "bytes", + "memmap2 0.6.2", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "structopt" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +dependencies = [ + "clap", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "stylus" +version = "0.1.0" +dependencies = [ + "arbutil", + "bincode", + "brotli", + "caller-env", + "clru", + "derivative", + "eyre", + "fnv", + "hex", + "lazy_static", + "libc", + "parking_lot", + "prover", + "rand", + "thiserror", + "user-host-trait", + "wasmer", + "wasmer-compiler-cranelift", + "wasmer-compiler-singlepass", + "wasmer-types", + "wasmer-vm", +] + +[[package]] +name = "stylus_benchmark" +version = "0.1.0" +dependencies = [ + "eyre", + "jit", + "wasmer", + "wasmer-compiler-cranelift", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap 2.6.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "user-host-trait" +version = "0.1.0" +dependencies = [ + "arbutil", + "caller-env", + "eyre", + "prover", + "ruint2", +] + +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.87", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + +[[package]] +name = "wasm-encoder" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasmer" +version = "4.2.8" +dependencies = [ + "bytes", + "cfg-if 1.0.0", + "derivative", + "indexmap 1.9.3", + "js-sys", + "more-asserts", + "rustc-demangle", + "serde", + "serde-wasm-bindgen", + "shared-buffer", + "target-lexicon", + "thiserror", + "tracing", + "wasm-bindgen", + "wasmer-compiler", + "wasmer-compiler-cranelift", + "wasmer-derive", + "wasmer-types", + "wasmer-vm", + "wat", + "winapi", +] + +[[package]] +name = "wasmer-compiler" +version = "4.2.8" +dependencies = [ + "backtrace", + "bytes", + "cfg-if 1.0.0", + "enum-iterator 0.7.0", + "enumset", + "lazy_static", + "leb128", + "memmap2 0.5.10", + "more-asserts", + "region", + "rkyv", + "self_cell", + "shared-buffer", + "smallvec", + "thiserror", + "wasmer-types", + "wasmer-vm", + "wasmparser", + "winapi", +] + +[[package]] +name = "wasmer-compiler-cranelift" +version = "4.2.8" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "gimli 0.26.2", + "more-asserts", + "rayon", + "smallvec", + "target-lexicon", + "tracing", + "wasmer-compiler", + "wasmer-types", +] + +[[package]] +name = "wasmer-compiler-singlepass" +version = "4.2.8" +dependencies = [ + "byteorder", + "dynasm", + "dynasmrt", + "enumset", + "gimli 0.26.2", + "lazy_static", + "more-asserts", + "smallvec", + "wasmer-compiler", + "wasmer-types", +] + +[[package]] +name = "wasmer-derive" +version = "4.2.8" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "wasmer-types" +version = "4.2.8" +dependencies = [ + "bytecheck", + "enum-iterator 0.7.0", + "enumset", + "indexmap 1.9.3", + "more-asserts", + "rkyv", + "target-lexicon", + "thiserror", +] + +[[package]] +name = "wasmer-vm" +version = "4.2.8" +dependencies = [ + "backtrace", + "cc", + "cfg-if 1.0.0", + "corosensei", + "crossbeam-queue", + "dashmap", + "derivative", + "enum-iterator 0.7.0", + "fnv", + "indexmap 1.9.3", + "lazy_static", + "libc", + "mach", + "memoffset", + "more-asserts", + "region", + "scopeguard", + "thiserror", + "wasmer-types", + "winapi", +] + +[[package]] +name = "wasmparser" +version = "0.121.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" +dependencies = [ + "bitflags 2.6.0", + "indexmap 2.6.0", + "semver", +] + +[[package]] +name = "wast" +version = "64.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a259b226fd6910225aa7baeba82f9d9933b6d00f2ce1b49b80fa4214328237cc" +dependencies = [ + "leb128", + "memchr", + "unicode-width", + "wasm-encoder", +] + +[[package]] +name = "wat" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53253d920ab413fca1c7dc2161d601c79b4fdf631d0ba51dd4343bf9b556c3f6" +dependencies = [ + "wast", +] + +[[package]] +name = "wee_alloc" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "memory_units", + "winapi", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43dbb096663629518eb1dfa72d80243ca5a6aca764cae62a2df70af760a9be75" +dependencies = [ + "windows_aarch64_msvc 0.33.0", + "windows_i686_gnu 0.33.0", + "windows_i686_msvc 0.33.0", + "windows_x86_64_gnu 0.33.0", + "windows_x86_64_msvc 0.33.0", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] diff --git a/arbitrator/tools/stylus_benchmark/Cargo.toml b/arbitrator/tools/stylus_benchmark/Cargo.toml new file mode 100644 index 0000000000..04468c7248 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "stylus_benchmark" +version = "0.1.0" +edition = "2021" + +[dependencies] +eyre = "0.6.12" +jit = { path = "../../jit/" } +wasmer = { path = "../wasmer/lib/api/" } +wasmer-compiler-cranelift = { path = "../wasmer/lib/compiler-cranelift/" } diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs new file mode 100644 index 0000000000..12e65c9fb2 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -0,0 +1,25 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +use jit::program::create_stylus_config; +use jit::machine::WasmEnv; +use wasmer::{ Function, FunctionEnv, Store, CompilerConfig, Value }; +use wasmer_compiler_cranelift::Cranelift; + +fn main() -> eyre::Result<()> { + let env = WasmEnv::default(); + + let mut compiler = Cranelift::new(); + compiler.canonicalize_nans(true); + compiler.enable_verifier(); + let mut store = Store::new(compiler); + + let func_env = FunctionEnv::new(&mut store, env); + let f_create_stylus_config = Function::new_typed_with_env(&mut store, &func_env, create_stylus_config); + + let ret = f_create_stylus_config.call(&mut store, &[Value::I32(0), Value::I32(10000), Value::I32(1), Value::I32(0)]).unwrap(); + + println!("Hello, world2!"); + println!("{:?}", ret); + Ok(()) +} From 25a770bd3811ba05b95069ff5765448454337de2 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 21 Nov 2024 11:26:06 -0300 Subject: [PATCH 050/187] stylus_benchmark: create_stylus_config and create_evm_data2 --- arbitrator/tools/stylus_benchmark/src/main.rs | 66 ++++++++++++++++--- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 12e65c9fb2..d9a609bc23 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -1,25 +1,75 @@ // Copyright 2021-2024, Offchain Labs, Inc. // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE -use jit::program::create_stylus_config; use jit::machine::WasmEnv; -use wasmer::{ Function, FunctionEnv, Store, CompilerConfig, Value }; +use jit::program::{create_evm_data_v2, create_stylus_config}; +use wasmer::{CompilerConfig, Function, FunctionEnv, Store, Value, Memory, MemoryType }; use wasmer_compiler_cranelift::Cranelift; fn main() -> eyre::Result<()> { - let env = WasmEnv::default(); - let mut compiler = Cranelift::new(); compiler.canonicalize_nans(true); compiler.enable_verifier(); let mut store = Store::new(compiler); + let mut env = WasmEnv::default(); + let mem = Memory::new(&mut store, MemoryType::new(10000, Some(60000), false)).unwrap(); + env.memory = Some(mem); + let func_env = FunctionEnv::new(&mut store, env); - let f_create_stylus_config = Function::new_typed_with_env(&mut store, &func_env, create_stylus_config); - let ret = f_create_stylus_config.call(&mut store, &[Value::I32(0), Value::I32(10000), Value::I32(1), Value::I32(0)]).unwrap(); + macro_rules! func { + ($func:expr) => { + Function::new_typed_with_env(&mut store, &func_env, $func) + }; + } + let f_create_stylus_config = func!(create_stylus_config); + let f_create_evm_data = func!(create_evm_data_v2); + + let config_handler = f_create_stylus_config + .call( + &mut store, + &[ + Value::I32(0), + Value::I32(10000), + Value::I32(1), + Value::I32(0), + ], + ) + .unwrap(); + println!("config_handler={:?}", config_handler); + + let block_base_fee = Vec::from([0u8; 32]); + let block_coinbase = Vec::from([0u8; 32]); + let contract_address = Vec::from([0u8; 32]); + let module_hash = Vec::from([0u8; 32]); + let msg_sender = Vec::from([0u8; 32]); + let msg_value = Vec::from([0u8; 32]); + let tx_gas_price = Vec::from([0u8; 32]); + let tx_origin = Vec::from([0u8; 32]); + let data_handler = f_create_evm_data + .call( + &mut store, + &[ + Value::I64(0), + Value::I32(&block_base_fee as *const _ as i32), + Value::I64(0), + Value::I32(&block_coinbase as *const _ as i32), + Value::I64(0), + Value::I64(0), + Value::I64(0), + Value::I32(&contract_address as *const _ as i32), + Value::I32(&module_hash as *const _ as i32), + Value::I32(&msg_sender as *const _ as i32), + Value::I32(&msg_value as *const _ as i32), + Value::I32(&tx_gas_price as *const _ as i32), + Value::I32(&tx_origin as *const _ as i32), + Value::I32(0), + Value::I32(0), + ], + ) + .unwrap(); + println!("data_handler={:?}", data_handler); - println!("Hello, world2!"); - println!("{:?}", ret); Ok(()) } From 472a66227815ed10a189d9fd50799a2a6c7f7404 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 25 Nov 2024 09:19:58 -0300 Subject: [PATCH 051/187] Refactors jit to have *_with_wasm functions --- arbitrator/jit/src/lib.rs | 2 +- arbitrator/jit/src/program.rs | 67 ++++++++++++++++++++++++++--------- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/arbitrator/jit/src/lib.rs b/arbitrator/jit/src/lib.rs index e19ee6caae..d0ad76bd03 100644 --- a/arbitrator/jit/src/lib.rs +++ b/arbitrator/jit/src/lib.rs @@ -10,7 +10,7 @@ pub mod machine; mod prepare; pub mod program; mod socket; -mod stylus_backend; +pub mod stylus_backend; mod test; mod wasip1_stub; mod wavmio; diff --git a/arbitrator/jit/src/program.rs b/arbitrator/jit/src/program.rs index f10a059748..9008a23318 100644 --- a/arbitrator/jit/src/program.rs +++ b/arbitrator/jit/src/program.rs @@ -4,8 +4,8 @@ #![allow(clippy::too_many_arguments)] use crate::caller_env::JitEnv; -use crate::machine::{Escape, MaybeEscape, WasmEnvMut}; -use crate::stylus_backend::exec_wasm; +use crate::machine::{Escape, MaybeEscape, WasmEnv, WasmEnvMut}; +use crate::stylus_backend::{exec_wasm, MessageFromCothread}; use arbutil::evm::api::Gas; use arbutil::Bytes32; use arbutil::{evm::EvmData, format::DebugBytes, heapify}; @@ -16,6 +16,7 @@ use prover::{ machine::Module, programs::{config::PricingParams, prelude::*}, }; +use std::sync::Arc; const DEFAULT_STYLUS_ARBOS_VERSION: u64 = 31; @@ -130,10 +131,6 @@ pub fn new_program( let evm_data: EvmData = unsafe { *Box::from_raw(evm_data_handler as *mut EvmData) }; let config: JitConfig = unsafe { *Box::from_raw(stylus_config_handler as *mut JitConfig) }; - // buy ink - let pricing = config.stylus.pricing; - let ink = pricing.gas_to_ink(Gas(gas)); - let Some(module) = exec.module_asms.get(&compiled_hash).cloned() else { return Err(Escape::Failure(format!( "module hash {:?} not found in {:?}", @@ -142,6 +139,21 @@ pub fn new_program( ))); }; + exec_program(exec, module, calldata, config, evm_data, gas) +} + +pub fn exec_program( + exec: &mut WasmEnv, + module: Arc<[u8]>, + calldata: Vec, + config: JitConfig, + evm_data: EvmData, + gas: u64, +) -> Result { + // buy ink + let pricing = config.stylus.pricing; + let ink = pricing.gas_to_ink(Gas(gas)); + let cothread = exec_wasm( module, calldata, @@ -162,7 +174,10 @@ pub fn new_program( /// returns request_id for the first request from the program pub fn start_program(mut env: WasmEnvMut, module: u32) -> Result { let (_, exec) = env.jit_env(); + start_program_with_wasm_env(exec, module) +} +pub fn start_program_with_wasm_env(exec: &mut WasmEnv, module: u32) -> Result { if exec.threads.len() as u32 != module || module == 0 { return Escape::hostio(format!( "got request for thread {module} but len is {}", @@ -179,13 +194,18 @@ pub fn start_program(mut env: WasmEnvMut, module: u32) -> Result { /// request_id MUST be last request id returned from start_program or send_response pub fn get_request(mut env: WasmEnvMut, id: u32, len_ptr: GuestPtr) -> Result { let (mut mem, exec) = env.jit_env(); + let msg = get_last_msg(exec, id)?; + mem.write_u32(len_ptr, msg.req_data.len() as u32); + Ok(msg.req_type) +} + +pub fn get_last_msg(exec: &mut WasmEnv, id: u32) -> Result { let thread = exec.threads.last_mut().unwrap(); let msg = thread.last_message()?; if msg.1 != id { return Escape::hostio("get_request id doesn't match"); }; - mem.write_u32(len_ptr, msg.0.req_data.len() as u32); - Ok(msg.0.req_type) + Ok(msg.0) } // gets data associated with last request. @@ -193,12 +213,8 @@ pub fn get_request(mut env: WasmEnvMut, id: u32, len_ptr: GuestPtr) -> Result MaybeEscape { let (mut mem, exec) = env.jit_env(); - let thread = exec.threads.last_mut().unwrap(); - let msg = thread.last_message()?; - if msg.1 != id { - return Escape::hostio("get_request id doesn't match"); - }; - mem.write_slice(data_ptr, &msg.0.req_data); + let msg = get_last_msg(exec, id)?; + mem.write_slice(data_ptr, &msg.req_data); Ok(()) } @@ -217,15 +233,29 @@ pub fn set_response( let result = mem.read_slice(result_ptr, result_len as usize); let raw_data = mem.read_slice(raw_data_ptr, raw_data_len as usize); + set_response_with_wasm_env(exec, id, gas, result, raw_data) +} + +pub fn set_response_with_wasm_env( + exec: &mut WasmEnv, + id: u32, + gas: u64, + result: Vec, + raw_data: Vec, +) -> MaybeEscape { let thread = exec.threads.last_mut().unwrap(); thread.set_response(id, result, raw_data, Gas(gas)) } -/// sends previos response +/// sends previous response /// MUST be called right after set_response to the same id /// returns request_id for the next request pub fn send_response(mut env: WasmEnvMut, req_id: u32) -> Result { let (_, exec) = env.jit_env(); + send_response_with_wasm_env(exec, req_id) +} + +pub fn send_response_with_wasm_env(exec: &mut WasmEnv, req_id: u32) -> Result { let thread = exec.threads.last_mut().unwrap(); let msg = thread.last_message()?; if msg.1 != req_id { @@ -239,7 +269,10 @@ pub fn send_response(mut env: WasmEnvMut, req_id: u32) -> Result { /// removes the last created program pub fn pop(mut env: WasmEnvMut) -> MaybeEscape { let (_, exec) = env.jit_env(); + pop_with_wasm_env(exec) +} +pub fn pop_with_wasm_env(exec: &mut WasmEnv) -> MaybeEscape { match exec.threads.pop() { None => Err(Escape::Child(eyre!("no child"))), Some(mut thread) => thread.wait_done(), @@ -247,8 +280,8 @@ pub fn pop(mut env: WasmEnvMut) -> MaybeEscape { } pub struct JitConfig { - stylus: StylusConfig, - compile: CompileConfig, + pub stylus: StylusConfig, + pub compile: CompileConfig, } /// Creates a `StylusConfig` from its component parts. From f32753162b4ca5b5bb63bd2a0d191d593f27a1bc Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 25 Nov 2024 09:21:16 -0300 Subject: [PATCH 052/187] Basic CallProgramLoop in stylus_benchmark --- arbitrator/tools/stylus_benchmark/Cargo.lock | 3 + arbitrator/tools/stylus_benchmark/Cargo.toml | 3 + arbitrator/tools/stylus_benchmark/src/main.rs | 151 +++++++++++------- 3 files changed, 95 insertions(+), 62 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/Cargo.lock b/arbitrator/tools/stylus_benchmark/Cargo.lock index b9ee1aaadc..34c18f2f8e 100644 --- a/arbitrator/tools/stylus_benchmark/Cargo.lock +++ b/arbitrator/tools/stylus_benchmark/Cargo.lock @@ -1827,8 +1827,11 @@ dependencies = [ name = "stylus_benchmark" version = "0.1.0" dependencies = [ + "arbutil", "eyre", "jit", + "prover", + "stylus", "wasmer", "wasmer-compiler-cranelift", ] diff --git a/arbitrator/tools/stylus_benchmark/Cargo.toml b/arbitrator/tools/stylus_benchmark/Cargo.toml index 04468c7248..a944a853b3 100644 --- a/arbitrator/tools/stylus_benchmark/Cargo.toml +++ b/arbitrator/tools/stylus_benchmark/Cargo.toml @@ -8,3 +8,6 @@ eyre = "0.6.12" jit = { path = "../../jit/" } wasmer = { path = "../wasmer/lib/api/" } wasmer-compiler-cranelift = { path = "../wasmer/lib/compiler-cranelift/" } +arbutil = { path = "../../arbutil/" } +prover = { path = "../../prover/", default-features = false, features = ["native"] } +stylus = { path = "../../stylus/", default-features = false } diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index d9a609bc23..2698637ba4 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -1,75 +1,102 @@ // Copyright 2021-2024, Offchain Labs, Inc. // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE +use arbutil::evm::EvmData; use jit::machine::WasmEnv; -use jit::program::{create_evm_data_v2, create_stylus_config}; -use wasmer::{CompilerConfig, Function, FunctionEnv, Store, Value, Memory, MemoryType }; -use wasmer_compiler_cranelift::Cranelift; +use jit::program::{ + exec_program, get_last_msg, pop_with_wasm_env, send_response_with_wasm_env, + set_response_with_wasm_env, start_program_with_wasm_env, JitConfig, +}; +use prover::programs::{ + config::CompileConfig, config::CompileDebugParams, config::CompileMemoryParams, + config::CompilePricingParams, config::PricingParams, prelude::StylusConfig, +}; +use stylus::native::compile; +use wasmer::Target; +use std::str; + +const EVM_API_METHOD_REQ_OFFSET: u32 = 0x10000000; + +fn to_result(req_type: u32, req_data: &Vec) -> (&str, &str) { + let msg = match str::from_utf8(req_data) { + Ok(v) => v, + Err(e) => panic!("Invalid UTF-8 sequence: {}", e), + }; + + match req_type { + 0 => return ("", ""), // userSuccess + 1 => return (msg, "ErrExecutionReverted"), // userRevert + 2 => return (msg, "ErrExecutionReverted"), // userFailure + 3 => return ("", "ErrOutOfGas"), // userOutOfInk + 4 => return ("", "ErrDepth"), // userOutOfStack + _ => return ("", "ErrExecutionReverted") // userUnknown + } +} fn main() -> eyre::Result<()> { - let mut compiler = Cranelift::new(); - compiler.canonicalize_nans(true); - compiler.enable_verifier(); - let mut store = Store::new(compiler); + let wasm = match std::fs::read("./programs_to_benchmark/user.wasm") { + Ok(wasm) => wasm, + Err(err) => panic!("failed to read: {err}"), + }; + + let compiled_module = compile(&wasm, 0, false, Target::default())?; + + let exec = &mut WasmEnv::default(); + + let calldata = Vec::from([0u8; 32]); + let evm_data = EvmData::default(); + let config = JitConfig { + stylus: StylusConfig { + version: 0, + max_depth: 10000, + pricing: PricingParams { ink_price: 1 }, + }, + compile: CompileConfig { + version: 0, + pricing: CompilePricingParams::default(), + bounds: CompileMemoryParams::default(), + debug: CompileDebugParams::default(), + }, + }; + + let module = exec_program( + exec, + compiled_module.into(), + calldata, + config, + evm_data, + 160000000, + ) + .unwrap(); + println!("module: {:?}", module); + + let mut req_id = start_program_with_wasm_env(exec, module).unwrap(); + println!("req_id: {:?}", req_id); + + loop { + let msg = get_last_msg(exec, req_id).unwrap(); + println!( + "msg.req_type: {:?}, msg.req_data: {:?}", + msg.req_type, msg.req_data + ); + + if msg.req_type < EVM_API_METHOD_REQ_OFFSET { + let _ = pop_with_wasm_env(exec); - let mut env = WasmEnv::default(); - let mem = Memory::new(&mut store, MemoryType::new(10000, Some(60000), false)).unwrap(); - env.memory = Some(mem); + let gas_left = u64::from_be_bytes(msg.req_data[..8].try_into().unwrap()); + let req_data = msg.req_data[8..].to_vec(); + let (msg, err) = to_result(msg.req_type, &req_data); + println!("gas_left: {:?}, msg: {:?}, err: {:?}", gas_left, msg, err); - let func_env = FunctionEnv::new(&mut store, env); + break; + } - macro_rules! func { - ($func:expr) => { - Function::new_typed_with_env(&mut store, &func_env, $func) - }; + if msg.req_type != EVM_API_METHOD_REQ_OFFSET { + panic!("unsupported call"); + } + set_response_with_wasm_env(exec, req_id, 1, vec![0u8; 32], msg.req_data)?; + req_id = send_response_with_wasm_env(exec, req_id).unwrap(); } - let f_create_stylus_config = func!(create_stylus_config); - let f_create_evm_data = func!(create_evm_data_v2); - - let config_handler = f_create_stylus_config - .call( - &mut store, - &[ - Value::I32(0), - Value::I32(10000), - Value::I32(1), - Value::I32(0), - ], - ) - .unwrap(); - println!("config_handler={:?}", config_handler); - - let block_base_fee = Vec::from([0u8; 32]); - let block_coinbase = Vec::from([0u8; 32]); - let contract_address = Vec::from([0u8; 32]); - let module_hash = Vec::from([0u8; 32]); - let msg_sender = Vec::from([0u8; 32]); - let msg_value = Vec::from([0u8; 32]); - let tx_gas_price = Vec::from([0u8; 32]); - let tx_origin = Vec::from([0u8; 32]); - let data_handler = f_create_evm_data - .call( - &mut store, - &[ - Value::I64(0), - Value::I32(&block_base_fee as *const _ as i32), - Value::I64(0), - Value::I32(&block_coinbase as *const _ as i32), - Value::I64(0), - Value::I64(0), - Value::I64(0), - Value::I32(&contract_address as *const _ as i32), - Value::I32(&module_hash as *const _ as i32), - Value::I32(&msg_sender as *const _ as i32), - Value::I32(&msg_value as *const _ as i32), - Value::I32(&tx_gas_price as *const _ as i32), - Value::I32(&tx_origin as *const _ as i32), - Value::I32(0), - Value::I32(0), - ], - ) - .unwrap(); - println!("data_handler={:?}", data_handler); Ok(()) } From 2aa59c91ce5cda5588cf62d7667b2e7cd9060c5a Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 26 Nov 2024 20:29:28 -0300 Subject: [PATCH 053/187] Adds debug.toggle_measurement instruction --- arbitrator/Cargo.lock | 1 + arbitrator/arbutil/Cargo.toml | 1 + arbitrator/arbutil/src/lib.rs | 1 + arbitrator/arbutil/src/timer.rs | 14 ++++++++++ arbitrator/jit/src/stylus_backend.rs | 6 +++++ arbitrator/stylus/src/env.rs | 9 +++++++ arbitrator/stylus/src/host.rs | 11 ++++++++ arbitrator/stylus/src/native.rs | 2 ++ arbitrator/tools/stylus_benchmark/Cargo.lock | 1 + .../programs_to_benchmark/add_one.wat | 15 +++++++++++ arbitrator/tools/stylus_benchmark/src/main.rs | 21 +++++++++------ .../wasm-libraries/user-host-trait/src/lib.rs | 26 +++++++++++++++++++ 12 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 arbitrator/arbutil/src/timer.rs create mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat diff --git a/arbitrator/Cargo.lock b/arbitrator/Cargo.lock index 2b437968fa..c0a957265f 100644 --- a/arbitrator/Cargo.lock +++ b/arbitrator/Cargo.lock @@ -144,6 +144,7 @@ checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" name = "arbutil" version = "0.1.0" dependencies = [ + "derivative", "digest 0.10.7", "eyre", "fnv", diff --git a/arbitrator/arbutil/Cargo.toml b/arbitrator/arbutil/Cargo.toml index 3fe1a9d134..b3fd156364 100644 --- a/arbitrator/arbutil/Cargo.toml +++ b/arbitrator/arbutil/Cargo.toml @@ -17,3 +17,4 @@ serde = { version = "1.0.130", features = ["derive", "rc"] } num_enum = "0.7.1" sha2 = "0.10.7" sha3 = "0.10.8" +derivative = "2.2.0" diff --git a/arbitrator/arbutil/src/lib.rs b/arbitrator/arbutil/src/lib.rs index 9c48a9fefc..83c65e259b 100644 --- a/arbitrator/arbutil/src/lib.rs +++ b/arbitrator/arbutil/src/lib.rs @@ -10,6 +10,7 @@ pub mod math; pub mod operator; pub mod pricing; pub mod types; +pub mod timer; pub use color::{Color, DebugColor}; use num_traits::Unsigned; diff --git a/arbitrator/arbutil/src/timer.rs b/arbitrator/arbutil/src/timer.rs new file mode 100644 index 0000000000..8c8d92ab9a --- /dev/null +++ b/arbitrator/arbutil/src/timer.rs @@ -0,0 +1,14 @@ +// Copyright 2024, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE + +use std::time::{Duration, Instant}; +use derivative::Derivative; + +#[derive(Derivative, Clone, Copy)] +#[derivative(Debug)] +pub struct Timer { + pub instant: Option, + pub elapsed: Option, + pub cycles_start: Option, + pub cycles_total: Option, +} diff --git a/arbitrator/jit/src/stylus_backend.rs b/arbitrator/jit/src/stylus_backend.rs index 0d8c477c6c..ac8f636a67 100644 --- a/arbitrator/jit/src/stylus_backend.rs +++ b/arbitrator/jit/src/stylus_backend.rs @@ -147,6 +147,9 @@ pub fn exec_wasm( unsafe { NativeInstance::deserialize(&module, compile.clone(), evm_api, evm_data) }?; let thread = thread::spawn(move || { + let timer_before = instance.env().timer; + println!("timer_before: {:?}", timer_before); + let outcome = instance.run_main(&calldata, config, ink); let ink_left = match outcome.as_ref() { @@ -166,6 +169,9 @@ pub fn exec_wasm( output.extend(gas_left.to_be_bytes()); output.extend(data); + let timer_after = instance.env().timer; + println!("timer_after: {:?}", timer_after); + let msg = MessageFromCothread { req_data: output, req_type: out_kind as u32, diff --git a/arbitrator/stylus/src/env.rs b/arbitrator/stylus/src/env.rs index a153fb5bf1..17fc133d1e 100644 --- a/arbitrator/stylus/src/env.rs +++ b/arbitrator/stylus/src/env.rs @@ -7,6 +7,7 @@ use arbutil::{ EvmData, }, pricing, + timer::Timer, }; use caller_env::GuestPtr; use derivative::Derivative; @@ -48,6 +49,8 @@ pub struct WasmEnv> { pub compile: CompileConfig, /// The runtime config pub config: Option, + // Used to measure execution time of blocks of code + pub timer: Timer, // Using the unused generic parameter D in a PhantomData field _data_reader_marker: PhantomData, } @@ -68,6 +71,12 @@ impl> WasmEnv { outs: vec![], memory: None, meter: None, + timer: Timer { + instant: None, + elapsed: None, + cycles_start: None, + cycles_total: None, + }, _data_reader_marker: PhantomData, } } diff --git a/arbitrator/stylus/src/host.rs b/arbitrator/stylus/src/host.rs index c72cafc316..a45e416321 100644 --- a/arbitrator/stylus/src/host.rs +++ b/arbitrator/stylus/src/host.rs @@ -9,6 +9,7 @@ use arbutil::{ api::{DataReader, EvmApi, Gas, Ink}, EvmData, }, + timer::Timer, Color, }; use caller_env::GuestPtr; @@ -46,6 +47,10 @@ where &self.evm_data } + fn timer(&mut self) -> &mut Timer { + &mut self.env.timer + } + fn evm_return_data_len(&mut self) -> &mut u32 { &mut self.evm_data.return_data_len } @@ -464,3 +469,9 @@ pub(crate) fn console_tee, T: Into + Copy>( } pub(crate) fn null_host>(_: WasmEnvMut) {} + +pub(crate) fn toggle_measurement>( + mut env: WasmEnvMut +) -> MaybeEscape { + hostio!(env, toggle_measurement()) +} diff --git a/arbitrator/stylus/src/native.rs b/arbitrator/stylus/src/native.rs index 0fbdb342f3..2de51dbb82 100644 --- a/arbitrator/stylus/src/native.rs +++ b/arbitrator/stylus/src/native.rs @@ -212,6 +212,7 @@ impl> NativeInstance { imports.define("console", "tee_f32", func!(host::console_tee::)); imports.define("console", "tee_f64", func!(host::console_tee::)); imports.define("debug", "null_host", func!(host::null_host)); + imports.define("debug", "toggle_measurement", func!(host::toggle_measurement)); } let instance = Instance::new(&mut store, &module, &imports)?; let exports = &instance.exports; @@ -429,6 +430,7 @@ pub fn module(wasm: &[u8], compile: CompileConfig, target: Target) -> Result) -> (&str, &str) { } fn main() -> eyre::Result<()> { - let wasm = match std::fs::read("./programs_to_benchmark/user.wasm") { + let wat = match std::fs::read("./programs_to_benchmark/add_one.wat") { Ok(wasm) => wasm, Err(err) => panic!("failed to read: {err}"), }; + let wasm = wasmer::wat2wasm(&wat).unwrap(); - let compiled_module = compile(&wasm, 0, false, Target::default())?; + // enables debug in order to use log + let compiled_module = compile(&wasm, 0, true, Target::default())?; let exec = &mut WasmEnv::default(); @@ -55,7 +57,12 @@ fn main() -> eyre::Result<()> { version: 0, pricing: CompilePricingParams::default(), bounds: CompileMemoryParams::default(), - debug: CompileDebugParams::default(), + debug: CompileDebugParams { + debug_funcs: true, + debug_info: true, + count_ops: true, + cranelift: true, + }, }, }; @@ -71,13 +78,11 @@ fn main() -> eyre::Result<()> { println!("module: {:?}", module); let mut req_id = start_program_with_wasm_env(exec, module).unwrap(); - println!("req_id: {:?}", req_id); - loop { let msg = get_last_msg(exec, req_id).unwrap(); println!( - "msg.req_type: {:?}, msg.req_data: {:?}", - msg.req_type, msg.req_data + "req_id: {:?}, msg.req_type: {:?}, msg.req_data: {:?}", + req_id, msg.req_type, msg.req_data ); if msg.req_type < EVM_API_METHOD_REQ_OFFSET { @@ -86,7 +91,7 @@ fn main() -> eyre::Result<()> { let gas_left = u64::from_be_bytes(msg.req_data[..8].try_into().unwrap()); let req_data = msg.req_data[8..].to_vec(); let (msg, err) = to_result(msg.req_type, &req_data); - println!("gas_left: {:?}, msg: {:?}, err: {:?}", gas_left, msg, err); + println!("gas_left: {:?}, msg: {:?}, err: {:?}, req_data: {:?}", gas_left, msg, err, req_data); break; } diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index 2f410849fc..0675bcf9d5 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -11,6 +11,7 @@ use arbutil::{ EvmData, ARBOS_VERSION_STYLUS_CHARGING_FIXES, }, pricing::{self, EVM_API_INK, HOSTIO_INK, PTR_INK}, + timer::Timer, Bytes20, Bytes32, }; pub use caller_env::GuestPtr; @@ -21,6 +22,7 @@ use prover::{ }; use ruint2::Uint; use std::fmt::Display; +use std::time::Instant; macro_rules! be { ($int:expr) => { @@ -57,6 +59,17 @@ type Address = Bytes20; type Wei = Bytes32; type U256 = Uint<256, 4>; +#[inline(always)] +pub fn cpu_cycles() -> u64 { + #[cfg(target_arch = "x86_64")] + unsafe { + core::arch::x86_64::_rdtsc() + } + + #[cfg(not(target_arch = "x86_64"))] + 0 +} + #[allow(clippy::too_many_arguments)] pub trait UserHost: GasMeteredMachine { type Err: From + From + From; @@ -68,6 +81,7 @@ pub trait UserHost: GasMeteredMachine { fn evm_api(&mut self) -> &mut Self::A; fn evm_data(&self) -> &EvmData; + fn timer(&mut self) -> &mut Timer; fn evm_return_data_len(&mut self) -> &mut u32; fn read_slice(&self, ptr: GuestPtr, len: u32) -> Result, Self::MemoryErr>; @@ -962,4 +976,16 @@ pub trait UserHost: GasMeteredMachine { self.say(value.into()); Ok(value) } + + fn toggle_measurement(&mut self) -> Result<(), Self::Err> { + let timer = self.timer(); + if let Some(instant) = timer.instant { + timer.elapsed = Some(instant.elapsed()); + timer.cycles_total = Some(cpu_cycles().wrapping_sub(timer.cycles_start.unwrap())); + return Ok(()); + } + timer.instant = Some(Instant::now()); + timer.cycles_start = Some(cpu_cycles()); + Ok(()) + } } From 61620f914ffd8e2e8fb1b2ed24692ca5b774627f Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 26 Nov 2024 21:05:31 -0300 Subject: [PATCH 054/187] toggle_measurement ink tracking --- arbitrator/arbutil/src/timer.rs | 3 +++ arbitrator/stylus/src/env.rs | 2 ++ arbitrator/wasm-libraries/Cargo.lock | 1 + arbitrator/wasm-libraries/user-host-trait/src/lib.rs | 4 ++++ 4 files changed, 10 insertions(+) diff --git a/arbitrator/arbutil/src/timer.rs b/arbitrator/arbutil/src/timer.rs index 8c8d92ab9a..4aa145d63b 100644 --- a/arbitrator/arbutil/src/timer.rs +++ b/arbitrator/arbutil/src/timer.rs @@ -1,6 +1,7 @@ // Copyright 2024, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE +use crate::evm::api::Ink; use std::time::{Duration, Instant}; use derivative::Derivative; @@ -11,4 +12,6 @@ pub struct Timer { pub elapsed: Option, pub cycles_start: Option, pub cycles_total: Option, + pub ink_start: Option, + pub ink_total: Option, } diff --git a/arbitrator/stylus/src/env.rs b/arbitrator/stylus/src/env.rs index 17fc133d1e..72e49bfd66 100644 --- a/arbitrator/stylus/src/env.rs +++ b/arbitrator/stylus/src/env.rs @@ -76,6 +76,8 @@ impl> WasmEnv { elapsed: None, cycles_start: None, cycles_total: None, + ink_start: None, + ink_total: None, }, _data_reader_marker: PhantomData, } diff --git a/arbitrator/wasm-libraries/Cargo.lock b/arbitrator/wasm-libraries/Cargo.lock index a5a066e5c9..438a0cf563 100644 --- a/arbitrator/wasm-libraries/Cargo.lock +++ b/arbitrator/wasm-libraries/Cargo.lock @@ -68,6 +68,7 @@ dependencies = [ name = "arbutil" version = "0.1.0" dependencies = [ + "derivative", "digest 0.10.7", "eyre", "fnv", diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index 0675bcf9d5..bf077c5a5c 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -978,14 +978,18 @@ pub trait UserHost: GasMeteredMachine { } fn toggle_measurement(&mut self) -> Result<(), Self::Err> { + let ink = self.ink_ready()?; let timer = self.timer(); if let Some(instant) = timer.instant { timer.elapsed = Some(instant.elapsed()); timer.cycles_total = Some(cpu_cycles().wrapping_sub(timer.cycles_start.unwrap())); + timer.ink_total = Some(timer.ink_start.unwrap() - ink); return Ok(()); } timer.instant = Some(Instant::now()); timer.cycles_start = Some(cpu_cycles()); + timer.ink_start = Some(ink); + Ok(()) } } From 5e17f53eba101dc55c567846a0924eae17df12db Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 28 Nov 2024 10:48:35 -0300 Subject: [PATCH 055/187] Run benchmark multiple times for the same wat file --- arbitrator/jit/src/stylus_backend.rs | 9 +- arbitrator/tools/stylus_benchmark/Cargo.lock | 127 +++++++++++++++++- arbitrator/tools/stylus_benchmark/Cargo.toml | 1 + arbitrator/tools/stylus_benchmark/src/main.rs | 102 +++++++++----- 4 files changed, 197 insertions(+), 42 deletions(-) diff --git a/arbitrator/jit/src/stylus_backend.rs b/arbitrator/jit/src/stylus_backend.rs index ac8f636a67..a4fe3cec14 100644 --- a/arbitrator/jit/src/stylus_backend.rs +++ b/arbitrator/jit/src/stylus_backend.rs @@ -35,6 +35,7 @@ struct MessageToCothread { pub struct MessageFromCothread { pub req_type: u32, pub req_data: Vec, + pub timer_elapsed: Option, } struct CothreadRequestor { @@ -51,6 +52,7 @@ impl RequestHandler for CothreadRequestor { let msg = MessageFromCothread { req_type: req_type as u32 + EVM_API_METHOD_REQ_OFFSET, req_data: req_data.as_ref().to_vec(), + timer_elapsed: None, }; if let Err(error) = self.tx.send(msg) { @@ -147,9 +149,6 @@ pub fn exec_wasm( unsafe { NativeInstance::deserialize(&module, compile.clone(), evm_api, evm_data) }?; let thread = thread::spawn(move || { - let timer_before = instance.env().timer; - println!("timer_before: {:?}", timer_before); - let outcome = instance.run_main(&calldata, config, ink); let ink_left = match outcome.as_ref() { @@ -169,12 +168,10 @@ pub fn exec_wasm( output.extend(gas_left.to_be_bytes()); output.extend(data); - let timer_after = instance.env().timer; - println!("timer_after: {:?}", timer_after); - let msg = MessageFromCothread { req_data: output, req_type: out_kind as u32, + timer_elapsed: instance.env().timer.elapsed, }; instance .env_mut() diff --git a/arbitrator/tools/stylus_benchmark/Cargo.lock b/arbitrator/tools/stylus_benchmark/Cargo.lock index 592b527435..3e13d831bb 100644 --- a/arbitrator/tools/stylus_benchmark/Cargo.lock +++ b/arbitrator/tools/stylus_benchmark/Cargo.lock @@ -58,6 +58,55 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] + [[package]] name = "arbutil" version = "0.1.0" @@ -317,12 +366,58 @@ dependencies = [ "vec_map", ] +[[package]] +name = "clap" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "clap_lex" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" + [[package]] name = "clru" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + [[package]] name = "convert_case" version = "0.4.0" @@ -812,6 +907,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -890,6 +991,12 @@ dependencies = [ "serde", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itertools" version = "0.10.5" @@ -1779,7 +1886,7 @@ version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" dependencies = [ - "clap", + "clap 2.34.0", "lazy_static", "structopt-derive", ] @@ -1790,7 +1897,7 @@ version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ - "heck", + "heck 0.3.3", "proc-macro-error", "proc-macro2", "quote", @@ -1829,6 +1936,7 @@ name = "stylus_benchmark" version = "0.1.0" dependencies = [ "arbutil", + "clap 4.5.21", "eyre", "jit", "prover", @@ -2047,6 +2155,12 @@ dependencies = [ "ruint2", ] +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "1.11.0" @@ -2367,6 +2481,15 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-targets" version = "0.52.6" diff --git a/arbitrator/tools/stylus_benchmark/Cargo.toml b/arbitrator/tools/stylus_benchmark/Cargo.toml index a944a853b3..4f9ed74d46 100644 --- a/arbitrator/tools/stylus_benchmark/Cargo.toml +++ b/arbitrator/tools/stylus_benchmark/Cargo.toml @@ -11,3 +11,4 @@ wasmer-compiler-cranelift = { path = "../wasmer/lib/compiler-cranelift/" } arbutil = { path = "../../arbutil/" } prover = { path = "../../prover/", default-features = false, features = ["native"] } stylus = { path = "../../stylus/", default-features = false } +clap = { version = "4.4.8", features = ["derive"] } diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 7b7e332b18..87c8e6cf30 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -2,21 +2,26 @@ // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE use arbutil::evm::EvmData; +use clap::Parser; +use core::time::Duration; use jit::machine::WasmEnv; use jit::program::{ - exec_program, get_last_msg, pop_with_wasm_env, send_response_with_wasm_env, - set_response_with_wasm_env, start_program_with_wasm_env, JitConfig, + exec_program, get_last_msg, pop_with_wasm_env, start_program_with_wasm_env, JitConfig, }; use prover::programs::{ config::CompileConfig, config::CompileDebugParams, config::CompileMemoryParams, config::CompilePricingParams, config::PricingParams, prelude::StylusConfig, }; +use std::path::PathBuf; +use std::str; use stylus::native::compile; use wasmer::Target; -use std::str; const EVM_API_METHOD_REQ_OFFSET: u32 = 0x10000000; +const NUMBER_OF_BENCHMARK_RUNS: u32 = 7; +const NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD: u32 = 2; + fn to_result(req_type: u32, req_data: &Vec) -> (&str, &str) { let msg = match str::from_utf8(req_data) { Ok(v) => v, @@ -24,26 +29,31 @@ fn to_result(req_type: u32, req_data: &Vec) -> (&str, &str) { }; match req_type { - 0 => return ("", ""), // userSuccess + 0 => return ("", ""), // userSuccess 1 => return (msg, "ErrExecutionReverted"), // userRevert 2 => return (msg, "ErrExecutionReverted"), // userFailure - 3 => return ("", "ErrOutOfGas"), // userOutOfInk - 4 => return ("", "ErrDepth"), // userOutOfStack - _ => return ("", "ErrExecutionReverted") // userUnknown + 3 => return ("", "ErrOutOfGas"), // userOutOfInk + 4 => return ("", "ErrDepth"), // userOutOfStack + _ => return ("", "ErrExecutionReverted"), // userUnknown } } -fn main() -> eyre::Result<()> { - let wat = match std::fs::read("./programs_to_benchmark/add_one.wat") { - Ok(wasm) => wasm, +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None)] +struct Args { + // Path to the wat file to be benchmarked + #[arg(short, long)] + wat_path: PathBuf, +} + +fn run(wat_path: &PathBuf) -> Duration { + let wat = match std::fs::read(wat_path) { + Ok(wat) => wat, Err(err) => panic!("failed to read: {err}"), }; let wasm = wasmer::wat2wasm(&wat).unwrap(); - // enables debug in order to use log - let compiled_module = compile(&wasm, 0, true, Target::default())?; - - let exec = &mut WasmEnv::default(); + let compiled_module = compile(&wasm, 0, true, Target::default()).unwrap(); let calldata = Vec::from([0u8; 32]); let evm_data = EvmData::default(); @@ -66,6 +76,8 @@ fn main() -> eyre::Result<()> { }, }; + let exec = &mut WasmEnv::default(); + let module = exec_program( exec, compiled_module.into(), @@ -75,33 +87,55 @@ fn main() -> eyre::Result<()> { 160000000, ) .unwrap(); - println!("module: {:?}", module); - let mut req_id = start_program_with_wasm_env(exec, module).unwrap(); - loop { - let msg = get_last_msg(exec, req_id).unwrap(); + let req_id = start_program_with_wasm_env(exec, module).unwrap(); + let msg = get_last_msg(exec, req_id).unwrap(); + println!( + "req_id: {:?}, msg.req_type: {:?}, msg.req_data: {:?}, msg.timer_elapsed: {:?}", + req_id, msg.req_type, msg.req_data, msg.timer_elapsed, + ); + + if msg.req_type < EVM_API_METHOD_REQ_OFFSET { + let _ = pop_with_wasm_env(exec); + + let gas_left = u64::from_be_bytes(msg.req_data[..8].try_into().unwrap()); + let req_data = msg.req_data[8..].to_vec(); + let (msg, err) = to_result(msg.req_type, &req_data); println!( - "req_id: {:?}, msg.req_type: {:?}, msg.req_data: {:?}", - req_id, msg.req_type, msg.req_data + "gas_left: {:?}, msg: {:?}, err: {:?}, req_data: {:?}", + gas_left, msg, err, req_data ); + if err != "" { + panic!("error: {:?}", err); + } + } else { + panic!("unsupported request"); + } - if msg.req_type < EVM_API_METHOD_REQ_OFFSET { - let _ = pop_with_wasm_env(exec); - - let gas_left = u64::from_be_bytes(msg.req_data[..8].try_into().unwrap()); - let req_data = msg.req_data[8..].to_vec(); - let (msg, err) = to_result(msg.req_type, &req_data); - println!("gas_left: {:?}, msg: {:?}, err: {:?}, req_data: {:?}", gas_left, msg, err, req_data); + msg.timer_elapsed.expect("timer_elapsed") +} - break; - } +fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { + let mut durations: Vec = Vec::new(); - if msg.req_type != EVM_API_METHOD_REQ_OFFSET { - panic!("unsupported call"); - } - set_response_with_wasm_env(exec, req_id, 1, vec![0u8; 32], msg.req_data)?; - req_id = send_response_with_wasm_env(exec, req_id).unwrap(); + for i in 0..NUMBER_OF_BENCHMARK_RUNS { + println!("Benchmark run {:?} {:?}", i, wat_path); + let duration = run(wat_path); + durations.push(duration); } + durations.sort(); + println!("durations: {:?}", durations); + + let l = NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; + let r = NUMBER_OF_BENCHMARK_RUNS as usize - NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; + let sum = durations[l..r].to_vec().iter().sum::(); + println!("sum {:?}, average duration: {:?}", sum, sum / (r - l) as u32); + Ok(()) } + +fn main() -> eyre::Result<()> { + let args = Args::parse(); + return benchmark(&args.wat_path); +} From 89eeee8c91122d9b29b62c77aebfd8827fbcf4e1 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 28 Nov 2024 16:12:31 -0300 Subject: [PATCH 056/187] toggle_measurement to toggle_benchmark --- .../arbutil/src/{timer.rs => benchmark.rs} | 2 +- arbitrator/arbutil/src/lib.rs | 2 +- arbitrator/jit/src/stylus_backend.rs | 2 +- arbitrator/stylus/src/env.rs | 8 +++---- arbitrator/stylus/src/host.rs | 10 ++++---- arbitrator/stylus/src/native.rs | 4 ++-- .../programs_to_benchmark/add_one.wat | 6 ++--- arbitrator/tools/stylus_benchmark/src/main.rs | 23 +++++++------------ .../wasm-libraries/user-host-trait/src/lib.rs | 8 +++---- 9 files changed, 29 insertions(+), 36 deletions(-) rename arbitrator/arbutil/src/{timer.rs => benchmark.rs} (95%) diff --git a/arbitrator/arbutil/src/timer.rs b/arbitrator/arbutil/src/benchmark.rs similarity index 95% rename from arbitrator/arbutil/src/timer.rs rename to arbitrator/arbutil/src/benchmark.rs index 4aa145d63b..1be82be42f 100644 --- a/arbitrator/arbutil/src/timer.rs +++ b/arbitrator/arbutil/src/benchmark.rs @@ -7,7 +7,7 @@ use derivative::Derivative; #[derive(Derivative, Clone, Copy)] #[derivative(Debug)] -pub struct Timer { +pub struct Benchmark { pub instant: Option, pub elapsed: Option, pub cycles_start: Option, diff --git a/arbitrator/arbutil/src/lib.rs b/arbitrator/arbutil/src/lib.rs index 83c65e259b..d6a94433a7 100644 --- a/arbitrator/arbutil/src/lib.rs +++ b/arbitrator/arbutil/src/lib.rs @@ -10,7 +10,7 @@ pub mod math; pub mod operator; pub mod pricing; pub mod types; -pub mod timer; +pub mod benchmark; pub use color::{Color, DebugColor}; use num_traits::Unsigned; diff --git a/arbitrator/jit/src/stylus_backend.rs b/arbitrator/jit/src/stylus_backend.rs index a4fe3cec14..19aa505c28 100644 --- a/arbitrator/jit/src/stylus_backend.rs +++ b/arbitrator/jit/src/stylus_backend.rs @@ -171,7 +171,7 @@ pub fn exec_wasm( let msg = MessageFromCothread { req_data: output, req_type: out_kind as u32, - timer_elapsed: instance.env().timer.elapsed, + timer_elapsed: instance.env().benchmark.elapsed, }; instance .env_mut() diff --git a/arbitrator/stylus/src/env.rs b/arbitrator/stylus/src/env.rs index 72e49bfd66..ebacb67992 100644 --- a/arbitrator/stylus/src/env.rs +++ b/arbitrator/stylus/src/env.rs @@ -7,7 +7,7 @@ use arbutil::{ EvmData, }, pricing, - timer::Timer, + benchmark::Benchmark, }; use caller_env::GuestPtr; use derivative::Derivative; @@ -49,8 +49,8 @@ pub struct WasmEnv> { pub compile: CompileConfig, /// The runtime config pub config: Option, - // Used to measure execution time of blocks of code - pub timer: Timer, + // Used to benchmark execution blocks of code + pub benchmark: Benchmark, // Using the unused generic parameter D in a PhantomData field _data_reader_marker: PhantomData, } @@ -71,7 +71,7 @@ impl> WasmEnv { outs: vec![], memory: None, meter: None, - timer: Timer { + benchmark: Benchmark { instant: None, elapsed: None, cycles_start: None, diff --git a/arbitrator/stylus/src/host.rs b/arbitrator/stylus/src/host.rs index a45e416321..31fe4f6afa 100644 --- a/arbitrator/stylus/src/host.rs +++ b/arbitrator/stylus/src/host.rs @@ -9,7 +9,7 @@ use arbutil::{ api::{DataReader, EvmApi, Gas, Ink}, EvmData, }, - timer::Timer, + benchmark::Benchmark, Color, }; use caller_env::GuestPtr; @@ -47,8 +47,8 @@ where &self.evm_data } - fn timer(&mut self) -> &mut Timer { - &mut self.env.timer + fn benchmark(&mut self) -> &mut Benchmark { + &mut self.env.benchmark } fn evm_return_data_len(&mut self) -> &mut u32 { @@ -470,8 +470,8 @@ pub(crate) fn console_tee, T: Into + Copy>( pub(crate) fn null_host>(_: WasmEnvMut) {} -pub(crate) fn toggle_measurement>( +pub(crate) fn toggle_benchmark>( mut env: WasmEnvMut ) -> MaybeEscape { - hostio!(env, toggle_measurement()) + hostio!(env, toggle_benchmark()) } diff --git a/arbitrator/stylus/src/native.rs b/arbitrator/stylus/src/native.rs index 2de51dbb82..243a1c6442 100644 --- a/arbitrator/stylus/src/native.rs +++ b/arbitrator/stylus/src/native.rs @@ -212,7 +212,7 @@ impl> NativeInstance { imports.define("console", "tee_f32", func!(host::console_tee::)); imports.define("console", "tee_f64", func!(host::console_tee::)); imports.define("debug", "null_host", func!(host::null_host)); - imports.define("debug", "toggle_measurement", func!(host::toggle_measurement)); + imports.define("debug", "toggle_benchmark", func!(host::toggle_benchmark)); } let instance = Instance::new(&mut store, &module, &imports)?; let exports = &instance.exports; @@ -430,7 +430,7 @@ pub fn module(wasm: &[u8], compile: CompileConfig, target: Target) -> Result Duration { let evm_data = EvmData::default(); let config = JitConfig { stylus: StylusConfig { - version: 0, + version: 2, max_depth: 10000, pricing: PricingParams { ink_price: 1 }, }, - compile: CompileConfig { - version: 0, - pricing: CompilePricingParams::default(), - bounds: CompileMemoryParams::default(), - debug: CompileDebugParams { - debug_funcs: true, - debug_info: true, - count_ops: true, - cranelift: true, - }, - }, + compile: CompileConfig::version(2, true), }; let exec = &mut WasmEnv::default(); @@ -130,7 +119,11 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { let l = NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; let r = NUMBER_OF_BENCHMARK_RUNS as usize - NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; let sum = durations[l..r].to_vec().iter().sum::(); - println!("sum {:?}, average duration: {:?}", sum, sum / (r - l) as u32); + println!( + "sum {:?}, average duration: {:?}", + sum, + sum / (r - l) as u32 + ); Ok(()) } diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index bf077c5a5c..4858186e88 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -11,7 +11,7 @@ use arbutil::{ EvmData, ARBOS_VERSION_STYLUS_CHARGING_FIXES, }, pricing::{self, EVM_API_INK, HOSTIO_INK, PTR_INK}, - timer::Timer, + benchmark::Benchmark, Bytes20, Bytes32, }; pub use caller_env::GuestPtr; @@ -81,7 +81,7 @@ pub trait UserHost: GasMeteredMachine { fn evm_api(&mut self) -> &mut Self::A; fn evm_data(&self) -> &EvmData; - fn timer(&mut self) -> &mut Timer; + fn benchmark(&mut self) -> &mut Benchmark; fn evm_return_data_len(&mut self) -> &mut u32; fn read_slice(&self, ptr: GuestPtr, len: u32) -> Result, Self::MemoryErr>; @@ -977,9 +977,9 @@ pub trait UserHost: GasMeteredMachine { Ok(value) } - fn toggle_measurement(&mut self) -> Result<(), Self::Err> { + fn toggle_benchmark(&mut self) -> Result<(), Self::Err> { let ink = self.ink_ready()?; - let timer = self.timer(); + let timer = self.benchmark(); if let Some(instant) = timer.instant { timer.elapsed = Some(instant.elapsed()); timer.cycles_total = Some(cpu_cycles().wrapping_sub(timer.cycles_start.unwrap())); From 7d9819cb0ba33a340184e01cf181359ef0845696 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 28 Nov 2024 16:19:08 -0300 Subject: [PATCH 057/187] Adds whole Benchmark object to MessageFromCothread --- arbitrator/jit/src/stylus_backend.rs | 7 ++++--- arbitrator/tools/stylus_benchmark/src/main.rs | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/arbitrator/jit/src/stylus_backend.rs b/arbitrator/jit/src/stylus_backend.rs index 19aa505c28..cf321ead83 100644 --- a/arbitrator/jit/src/stylus_backend.rs +++ b/arbitrator/jit/src/stylus_backend.rs @@ -12,6 +12,7 @@ use arbutil::evm::{ user::UserOutcome, EvmData, }; +use arbutil::benchmark::Benchmark; use eyre::{eyre, Result}; use prover::programs::prelude::*; use std::thread; @@ -35,7 +36,7 @@ struct MessageToCothread { pub struct MessageFromCothread { pub req_type: u32, pub req_data: Vec, - pub timer_elapsed: Option, + pub benchmark: Option, } struct CothreadRequestor { @@ -52,7 +53,7 @@ impl RequestHandler for CothreadRequestor { let msg = MessageFromCothread { req_type: req_type as u32 + EVM_API_METHOD_REQ_OFFSET, req_data: req_data.as_ref().to_vec(), - timer_elapsed: None, + benchmark: None, }; if let Err(error) = self.tx.send(msg) { @@ -171,7 +172,7 @@ pub fn exec_wasm( let msg = MessageFromCothread { req_data: output, req_type: out_kind as u32, - timer_elapsed: instance.env().benchmark.elapsed, + benchmark: Some(instance.env().benchmark), }; instance .env_mut() diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 5b748b3260..3be0e15ad7 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -80,8 +80,8 @@ fn run(wat_path: &PathBuf) -> Duration { let req_id = start_program_with_wasm_env(exec, module).unwrap(); let msg = get_last_msg(exec, req_id).unwrap(); println!( - "req_id: {:?}, msg.req_type: {:?}, msg.req_data: {:?}, msg.timer_elapsed: {:?}", - req_id, msg.req_type, msg.req_data, msg.timer_elapsed, + "req_id: {:?}, msg.req_type: {:?}, msg.req_data: {:?}, msg.benchmark.elapsed: {:?}", + req_id, msg.req_type, msg.req_data, msg.benchmark.unwrap().elapsed, ); if msg.req_type < EVM_API_METHOD_REQ_OFFSET { @@ -101,7 +101,7 @@ fn run(wat_path: &PathBuf) -> Duration { panic!("unsupported request"); } - msg.timer_elapsed.expect("timer_elapsed") + msg.benchmark.unwrap().elapsed.expect("timer_elapsed") } fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { From 55463ed4e2d244c52477b6f6675751d18d5d4ba2 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 28 Nov 2024 16:57:25 -0300 Subject: [PATCH 058/187] Stores benchmark as an Option in WasmEnv --- arbitrator/arbutil/src/benchmark.rs | 8 ++--- arbitrator/jit/src/stylus_backend.rs | 2 +- arbitrator/stylus/src/env.rs | 11 ++---- arbitrator/stylus/src/host.rs | 2 +- .../wasm-libraries/user-host-trait/src/lib.rs | 36 +++++++++++-------- 5 files changed, 30 insertions(+), 29 deletions(-) diff --git a/arbitrator/arbutil/src/benchmark.rs b/arbitrator/arbutil/src/benchmark.rs index 1be82be42f..8f24831527 100644 --- a/arbitrator/arbutil/src/benchmark.rs +++ b/arbitrator/arbutil/src/benchmark.rs @@ -2,16 +2,16 @@ // For license information, see https://github.com/nitro/blob/master/LICENSE use crate::evm::api::Ink; -use std::time::{Duration, Instant}; use derivative::Derivative; +use std::time::{Duration, Instant}; #[derive(Derivative, Clone, Copy)] #[derivative(Debug)] pub struct Benchmark { - pub instant: Option, + pub timer: Instant, pub elapsed: Option, - pub cycles_start: Option, + pub cycles_start: u64, pub cycles_total: Option, - pub ink_start: Option, + pub ink_start: Ink, pub ink_total: Option, } diff --git a/arbitrator/jit/src/stylus_backend.rs b/arbitrator/jit/src/stylus_backend.rs index cf321ead83..2c809403e4 100644 --- a/arbitrator/jit/src/stylus_backend.rs +++ b/arbitrator/jit/src/stylus_backend.rs @@ -172,7 +172,7 @@ pub fn exec_wasm( let msg = MessageFromCothread { req_data: output, req_type: out_kind as u32, - benchmark: Some(instance.env().benchmark), + benchmark: instance.env().benchmark, }; instance .env_mut() diff --git a/arbitrator/stylus/src/env.rs b/arbitrator/stylus/src/env.rs index ebacb67992..91bd5db927 100644 --- a/arbitrator/stylus/src/env.rs +++ b/arbitrator/stylus/src/env.rs @@ -50,7 +50,7 @@ pub struct WasmEnv> { /// The runtime config pub config: Option, // Used to benchmark execution blocks of code - pub benchmark: Benchmark, + pub benchmark: Option, // Using the unused generic parameter D in a PhantomData field _data_reader_marker: PhantomData, } @@ -71,14 +71,7 @@ impl> WasmEnv { outs: vec![], memory: None, meter: None, - benchmark: Benchmark { - instant: None, - elapsed: None, - cycles_start: None, - cycles_total: None, - ink_start: None, - ink_total: None, - }, + benchmark: None, _data_reader_marker: PhantomData, } } diff --git a/arbitrator/stylus/src/host.rs b/arbitrator/stylus/src/host.rs index 31fe4f6afa..de86442f7d 100644 --- a/arbitrator/stylus/src/host.rs +++ b/arbitrator/stylus/src/host.rs @@ -47,7 +47,7 @@ where &self.evm_data } - fn benchmark(&mut self) -> &mut Benchmark { + fn benchmark(&mut self) -> &mut Option { &mut self.env.benchmark } diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index 4858186e88..8164612034 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -2,6 +2,7 @@ // For license information, see https://github.com/nitro/blob/master/LICENSE use arbutil::{ + benchmark::Benchmark, crypto, evm::{ self, @@ -11,7 +12,6 @@ use arbutil::{ EvmData, ARBOS_VERSION_STYLUS_CHARGING_FIXES, }, pricing::{self, EVM_API_INK, HOSTIO_INK, PTR_INK}, - benchmark::Benchmark, Bytes20, Bytes32, }; pub use caller_env::GuestPtr; @@ -81,7 +81,7 @@ pub trait UserHost: GasMeteredMachine { fn evm_api(&mut self) -> &mut Self::A; fn evm_data(&self) -> &EvmData; - fn benchmark(&mut self) -> &mut Benchmark; + fn benchmark(&mut self) -> &mut Option; fn evm_return_data_len(&mut self) -> &mut u32; fn read_slice(&self, ptr: GuestPtr, len: u32) -> Result, Self::MemoryErr>; @@ -977,19 +977,27 @@ pub trait UserHost: GasMeteredMachine { Ok(value) } + // Tracks benchmark data related to the block of instructions defined by instruction between the first and last `toggle_benchmark` calls. fn toggle_benchmark(&mut self) -> Result<(), Self::Err> { - let ink = self.ink_ready()?; - let timer = self.benchmark(); - if let Some(instant) = timer.instant { - timer.elapsed = Some(instant.elapsed()); - timer.cycles_total = Some(cpu_cycles().wrapping_sub(timer.cycles_start.unwrap())); - timer.ink_total = Some(timer.ink_start.unwrap() - ink); - return Ok(()); - } - timer.instant = Some(Instant::now()); - timer.cycles_start = Some(cpu_cycles()); - timer.ink_start = Some(ink); - + let ink_curr = self.ink_ready()?; + + match self.benchmark() { + None => { + *self.benchmark() = Some(Benchmark { + timer: Instant::now(), + elapsed: None, + cycles_start: cpu_cycles(), + cycles_total: None, + ink_start: ink_curr, + ink_total: None, + }); + } + Some(benchmark) => { + benchmark.elapsed = Some(benchmark.timer.elapsed()); + benchmark.cycles_total = Some(cpu_cycles().wrapping_sub(benchmark.cycles_start)); + benchmark.ink_total = Some(benchmark.ink_start.saturating_sub(ink_curr)); + } + }; Ok(()) } } From e9a74d9c58e2e75aeaecdc584c3f9a9028b4ef5d Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 9 Dec 2024 18:30:57 -0300 Subject: [PATCH 059/187] reuse compiled module --- arbitrator/tools/stylus_benchmark/src/main.rs | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 3be0e15ad7..acde4c59f4 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -8,9 +8,7 @@ use jit::machine::WasmEnv; use jit::program::{ exec_program, get_last_msg, pop_with_wasm_env, start_program_with_wasm_env, JitConfig, }; -use prover::programs::{ - config::CompileConfig, config::PricingParams, prelude::StylusConfig, -}; +use prover::programs::{config::CompileConfig, config::PricingParams, prelude::StylusConfig}; use std::path::PathBuf; use std::str; use stylus::native::compile; @@ -45,15 +43,7 @@ struct Args { wat_path: PathBuf, } -fn run(wat_path: &PathBuf) -> Duration { - let wat = match std::fs::read(wat_path) { - Ok(wat) => wat, - Err(err) => panic!("failed to read: {err}"), - }; - let wasm = wasmer::wat2wasm(&wat).unwrap(); - - let compiled_module = compile(&wasm, 0, true, Target::default()).unwrap(); - +fn run(compiled_module: Vec) -> Duration { let calldata = Vec::from([0u8; 32]); let evm_data = EvmData::default(); let config = JitConfig { @@ -81,7 +71,10 @@ fn run(wat_path: &PathBuf) -> Duration { let msg = get_last_msg(exec, req_id).unwrap(); println!( "req_id: {:?}, msg.req_type: {:?}, msg.req_data: {:?}, msg.benchmark.elapsed: {:?}", - req_id, msg.req_type, msg.req_data, msg.benchmark.unwrap().elapsed, + req_id, + msg.req_type, + msg.req_data, + msg.benchmark.unwrap().elapsed, ); if msg.req_type < EVM_API_METHOD_REQ_OFFSET { @@ -107,9 +100,17 @@ fn run(wat_path: &PathBuf) -> Duration { fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { let mut durations: Vec = Vec::new(); + let wat = match std::fs::read(wat_path) { + Ok(wat) => wat, + Err(err) => panic!("failed to read: {err}"), + }; + let wasm = wasmer::wat2wasm(&wat).unwrap(); + + let compiled_module = compile(&wasm, 0, true, Target::default()).unwrap(); + for i in 0..NUMBER_OF_BENCHMARK_RUNS { println!("Benchmark run {:?} {:?}", i, wat_path); - let duration = run(wat_path); + let duration = run(compiled_module.clone()); durations.push(duration); } From 1198dfaa919e09670f0f4e45e225eea2d485a822 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 9 Dec 2024 18:36:31 -0300 Subject: [PATCH 060/187] Uses ? instead of unwrap when appropriate --- arbitrator/tools/stylus_benchmark/src/main.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index acde4c59f4..38f7ac35dd 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -98,16 +98,15 @@ fn run(compiled_module: Vec) -> Duration { } fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { - let mut durations: Vec = Vec::new(); - let wat = match std::fs::read(wat_path) { Ok(wat) => wat, Err(err) => panic!("failed to read: {err}"), }; - let wasm = wasmer::wat2wasm(&wat).unwrap(); + let wasm = wasmer::wat2wasm(&wat)?; - let compiled_module = compile(&wasm, 0, true, Target::default()).unwrap(); + let compiled_module = compile(&wasm, 0, true, Target::default())?; + let mut durations: Vec = Vec::new(); for i in 0..NUMBER_OF_BENCHMARK_RUNS { println!("Benchmark run {:?} {:?}", i, wat_path); let duration = run(compiled_module.clone()); @@ -115,14 +114,11 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { } durations.sort(); - println!("durations: {:?}", durations); - let l = NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; let r = NUMBER_OF_BENCHMARK_RUNS as usize - NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; let sum = durations[l..r].to_vec().iter().sum::(); println!( - "sum {:?}, average duration: {:?}", - sum, + "average duration: {:?}", sum / (r - l) as u32 ); From d53bcc2058a64691773f2fcb827567f43164c9e7 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 9 Dec 2024 18:41:27 -0300 Subject: [PATCH 061/187] Small refactor on stylus_benchmark --- arbitrator/tools/stylus_benchmark/src/main.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 38f7ac35dd..023eca45ac 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -113,14 +113,14 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { durations.push(duration); } + // discard top and bottom runs durations.sort(); let l = NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; let r = NUMBER_OF_BENCHMARK_RUNS as usize - NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; - let sum = durations[l..r].to_vec().iter().sum::(); - println!( - "average duration: {:?}", - sum / (r - l) as u32 - ); + durations = durations[l..r].to_vec(); + + let sum = durations.iter().sum::(); + println!("average duration: {:?}", sum / (r - l) as u32); Ok(()) } From d2668f6c9eea47e00fd71a8b0d525a8bcabf0fc6 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 9 Dec 2024 18:57:02 -0300 Subject: [PATCH 062/187] stylus_benchmark: from to_result to check_result --- arbitrator/tools/stylus_benchmark/src/main.rs | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 023eca45ac..1a360f009a 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -19,19 +19,19 @@ const EVM_API_METHOD_REQ_OFFSET: u32 = 0x10000000; const NUMBER_OF_BENCHMARK_RUNS: u32 = 7; const NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD: u32 = 2; -fn to_result(req_type: u32, req_data: &Vec) -> (&str, &str) { - let msg = match str::from_utf8(req_data) { +fn check_result(req_type: u32, req_data: &Vec) { + let _ = match str::from_utf8(req_data) { Ok(v) => v, Err(e) => panic!("Invalid UTF-8 sequence: {}", e), }; match req_type { - 0 => return ("", ""), // userSuccess - 1 => return (msg, "ErrExecutionReverted"), // userRevert - 2 => return (msg, "ErrExecutionReverted"), // userFailure - 3 => return ("", "ErrOutOfGas"), // userOutOfInk - 4 => return ("", "ErrDepth"), // userOutOfStack - _ => return ("", "ErrExecutionReverted"), // userUnknown + 0 => return, // userSuccess + 1 => panic!("ErrExecutionReverted"), // userRevert + 2 => panic!("ErrExecutionReverted"), // userFailure + 3 => panic!("ErrOutOfGas"), // userOutOfInk + 4 => panic!("ErrDepth"), // userOutOfStack + _ => panic!("ErrExecutionReverted"), // userUnknown } } @@ -82,16 +82,13 @@ fn run(compiled_module: Vec) -> Duration { let gas_left = u64::from_be_bytes(msg.req_data[..8].try_into().unwrap()); let req_data = msg.req_data[8..].to_vec(); - let (msg, err) = to_result(msg.req_type, &req_data); + check_result(msg.req_type, &req_data); println!( - "gas_left: {:?}, msg: {:?}, err: {:?}, req_data: {:?}", - gas_left, msg, err, req_data + "gas_left: {:?}, req_data: {:?}", + gas_left, req_data ); - if err != "" { - panic!("error: {:?}", err); - } } else { - panic!("unsupported request"); + panic!("unsupported request type {:?}", msg.req_type); } msg.benchmark.unwrap().elapsed.expect("timer_elapsed") From c4fb5df201a4d9afcda35c06e23cbc60c30b246b Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 10:06:13 -0300 Subject: [PATCH 063/187] Removes send_response_with_wasm_env --- arbitrator/jit/src/program.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/arbitrator/jit/src/program.rs b/arbitrator/jit/src/program.rs index 9008a23318..d80b3771c6 100644 --- a/arbitrator/jit/src/program.rs +++ b/arbitrator/jit/src/program.rs @@ -252,10 +252,6 @@ pub fn set_response_with_wasm_env( /// returns request_id for the next request pub fn send_response(mut env: WasmEnvMut, req_id: u32) -> Result { let (_, exec) = env.jit_env(); - send_response_with_wasm_env(exec, req_id) -} - -pub fn send_response_with_wasm_env(exec: &mut WasmEnv, req_id: u32) -> Result { let thread = exec.threads.last_mut().unwrap(); let msg = thread.last_message()?; if msg.1 != req_id { From f36013ff88f9554fa6db315086a055a9fe4c41d8 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 10:17:20 -0300 Subject: [PATCH 064/187] Removes cycle from Benchmark --- arbitrator/arbutil/src/benchmark.rs | 2 -- .../wasm-libraries/user-host-trait/src/lib.rs | 14 -------------- 2 files changed, 16 deletions(-) diff --git a/arbitrator/arbutil/src/benchmark.rs b/arbitrator/arbutil/src/benchmark.rs index 8f24831527..d01713090b 100644 --- a/arbitrator/arbutil/src/benchmark.rs +++ b/arbitrator/arbutil/src/benchmark.rs @@ -10,8 +10,6 @@ use std::time::{Duration, Instant}; pub struct Benchmark { pub timer: Instant, pub elapsed: Option, - pub cycles_start: u64, - pub cycles_total: Option, pub ink_start: Ink, pub ink_total: Option, } diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index 8164612034..9266888f9a 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -59,17 +59,6 @@ type Address = Bytes20; type Wei = Bytes32; type U256 = Uint<256, 4>; -#[inline(always)] -pub fn cpu_cycles() -> u64 { - #[cfg(target_arch = "x86_64")] - unsafe { - core::arch::x86_64::_rdtsc() - } - - #[cfg(not(target_arch = "x86_64"))] - 0 -} - #[allow(clippy::too_many_arguments)] pub trait UserHost: GasMeteredMachine { type Err: From + From + From; @@ -986,15 +975,12 @@ pub trait UserHost: GasMeteredMachine { *self.benchmark() = Some(Benchmark { timer: Instant::now(), elapsed: None, - cycles_start: cpu_cycles(), - cycles_total: None, ink_start: ink_curr, ink_total: None, }); } Some(benchmark) => { benchmark.elapsed = Some(benchmark.timer.elapsed()); - benchmark.cycles_total = Some(cpu_cycles().wrapping_sub(benchmark.cycles_start)); benchmark.ink_total = Some(benchmark.ink_start.saturating_sub(ink_curr)); } }; From 24dac3e6342dbe62da846bd56733a4c93d374a51 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 10:26:59 -0300 Subject: [PATCH 065/187] Renames add_one.wat to add_i32.wat. Uses loop in add_i32.wat --- .../programs_to_benchmark/add_i32.wat | 22 +++++++++++++++++++ .../programs_to_benchmark/add_one.wat | 15 ------------- 2 files changed, 22 insertions(+), 15 deletions(-) create mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_i32.wat delete mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_i32.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_i32.wat new file mode 100644 index 0000000000..6aefe856a4 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_i32.wat @@ -0,0 +1,22 @@ +(module + (import "debug" "toggle_benchmark" (func $toggle_benchmark)) + (memory (export "memory") 0 0) + (global $i (mut i32) (i32.const 0)) + (func (export "user_entrypoint") (param i32) (result i32) + call $toggle_benchmark + + (loop $loop + global.get $i + i32.const 1 + i32.add + global.set $i + + global.get $i + i32.const 10000000 + i32.lt_s + br_if $loop) + + call $toggle_benchmark + + i32.const 0) +) diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat deleted file mode 100644 index 6cf5a5ed9d..0000000000 --- a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_one.wat +++ /dev/null @@ -1,15 +0,0 @@ -(module - (import "debug" "toggle_benchmark" (func $toggle_benchmark)) - (memory (export "memory") 0 0) - (func (export "user_entrypoint") (param i32) (result i32) - call $toggle_benchmark - - i32.const 0 - i32.const 2 - i32.add - drop - - call $toggle_benchmark - - i32.const 0) -) From 3df9b24e3072cf7b3153c0dbe07927dd3ba0609f Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 10:36:51 -0300 Subject: [PATCH 066/187] stylus_benchmark: print ink usage --- arbitrator/tools/stylus_benchmark/src/main.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 1a360f009a..c241ff6fe2 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -1,7 +1,7 @@ // Copyright 2021-2024, Offchain Labs, Inc. // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE -use arbutil::evm::EvmData; +use arbutil::evm::{api::Ink, EvmData}; use clap::Parser; use core::time::Duration; use jit::machine::WasmEnv; @@ -43,7 +43,7 @@ struct Args { wat_path: PathBuf, } -fn run(compiled_module: Vec) -> Duration { +fn run(compiled_module: Vec) -> (Duration, Ink) { let calldata = Vec::from([0u8; 32]); let evm_data = EvmData::default(); let config = JitConfig { @@ -83,15 +83,14 @@ fn run(compiled_module: Vec) -> Duration { let gas_left = u64::from_be_bytes(msg.req_data[..8].try_into().unwrap()); let req_data = msg.req_data[8..].to_vec(); check_result(msg.req_type, &req_data); - println!( - "gas_left: {:?}, req_data: {:?}", - gas_left, req_data - ); + println!("gas_left: {:?}, req_data: {:?}", gas_left, req_data); } else { panic!("unsupported request type {:?}", msg.req_type); } - msg.benchmark.unwrap().elapsed.expect("timer_elapsed") + let elapsed = msg.benchmark.unwrap().elapsed.expect("elapsed"); + let ink = msg.benchmark.unwrap().ink_total.expect("ink"); + (elapsed, ink) } fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { @@ -104,9 +103,11 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { let compiled_module = compile(&wasm, 0, true, Target::default())?; let mut durations: Vec = Vec::new(); + let mut ink: Ink = Ink(0); for i in 0..NUMBER_OF_BENCHMARK_RUNS { println!("Benchmark run {:?} {:?}", i, wat_path); - let duration = run(compiled_module.clone()); + let (duration, ink_run) = run(compiled_module.clone()); + ink = ink_run; durations.push(duration); } @@ -117,7 +118,7 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { durations = durations[l..r].to_vec(); let sum = durations.iter().sum::(); - println!("average duration: {:?}", sum / (r - l) as u32); + println!("average duration: {:?}, ink: {:?}", sum / (r - l) as u32, ink); Ok(()) } From 87f7386d1bcb8e4c24764548bd976514228e16ac Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 10:46:05 -0300 Subject: [PATCH 067/187] Improves prints in stylus_benchmark --- arbitrator/tools/stylus_benchmark/src/main.rs | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index c241ff6fe2..3942fd00e0 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -69,21 +69,11 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { let req_id = start_program_with_wasm_env(exec, module).unwrap(); let msg = get_last_msg(exec, req_id).unwrap(); - println!( - "req_id: {:?}, msg.req_type: {:?}, msg.req_data: {:?}, msg.benchmark.elapsed: {:?}", - req_id, - msg.req_type, - msg.req_data, - msg.benchmark.unwrap().elapsed, - ); - if msg.req_type < EVM_API_METHOD_REQ_OFFSET { let _ = pop_with_wasm_env(exec); - let gas_left = u64::from_be_bytes(msg.req_data[..8].try_into().unwrap()); let req_data = msg.req_data[8..].to_vec(); check_result(msg.req_type, &req_data); - println!("gas_left: {:?}, req_data: {:?}", gas_left, req_data); } else { panic!("unsupported request type {:?}", msg.req_type); } @@ -102,13 +92,13 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { let compiled_module = compile(&wasm, 0, true, Target::default())?; + println!("Benchmarking {:?}", wat_path); let mut durations: Vec = Vec::new(); - let mut ink: Ink = Ink(0); for i in 0..NUMBER_OF_BENCHMARK_RUNS { - println!("Benchmark run {:?} {:?}", i, wat_path); - let (duration, ink_run) = run(compiled_module.clone()); - ink = ink_run; + print!("Run {:?}, ", i); + let (duration, ink) = run(compiled_module.clone()); durations.push(duration); + println!("duration: {:?}, ink: {:?}", duration, ink); } // discard top and bottom runs @@ -118,7 +108,7 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { durations = durations[l..r].to_vec(); let sum = durations.iter().sum::(); - println!("average duration: {:?}, ink: {:?}", sum / (r - l) as u32, ink); + println!("Average duration after discarding top and bottom runs: {:?}", sum / (r - l) as u32); Ok(()) } From 654d18aed6feebd12708a0416f330540c1da94d8 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 10:59:25 -0300 Subject: [PATCH 068/187] fix cargo fmt --- arbitrator/arbutil/src/lib.rs | 2 +- arbitrator/jit/src/main.rs | 4 ++-- arbitrator/jit/src/stylus_backend.rs | 2 +- arbitrator/stylus/src/env.rs | 2 +- arbitrator/stylus/src/host.rs | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arbitrator/arbutil/src/lib.rs b/arbitrator/arbutil/src/lib.rs index d6a94433a7..e17e8d9448 100644 --- a/arbitrator/arbutil/src/lib.rs +++ b/arbitrator/arbutil/src/lib.rs @@ -1,6 +1,7 @@ // Copyright 2022-2024, Offchain Labs, Inc. // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE +pub mod benchmark; /// cbindgen:ignore pub mod color; pub mod crypto; @@ -10,7 +11,6 @@ pub mod math; pub mod operator; pub mod pricing; pub mod types; -pub mod benchmark; pub use color::{Color, DebugColor}; use num_traits::Unsigned; diff --git a/arbitrator/jit/src/main.rs b/arbitrator/jit/src/main.rs index bd0591909c..e19fabc250 100644 --- a/arbitrator/jit/src/main.rs +++ b/arbitrator/jit/src/main.rs @@ -1,11 +1,11 @@ // Copyright 2022-2024, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE +use arbutil::{color, Color}; +use eyre::Result; use jit::machine; use jit::machine::{Escape, WasmEnv}; use jit::Opts; -use arbutil::{color, Color}; -use eyre::Result; use structopt::StructOpt; fn main() -> Result<()> { diff --git a/arbitrator/jit/src/stylus_backend.rs b/arbitrator/jit/src/stylus_backend.rs index 2c809403e4..50fb031a7e 100644 --- a/arbitrator/jit/src/stylus_backend.rs +++ b/arbitrator/jit/src/stylus_backend.rs @@ -4,6 +4,7 @@ #![allow(clippy::too_many_arguments)] use crate::machine::{Escape, MaybeEscape}; +use arbutil::benchmark::Benchmark; use arbutil::evm::api::{Gas, Ink, VecReader}; use arbutil::evm::{ api::{EvmApiMethod, EVM_API_METHOD_REQ_OFFSET}, @@ -12,7 +13,6 @@ use arbutil::evm::{ user::UserOutcome, EvmData, }; -use arbutil::benchmark::Benchmark; use eyre::{eyre, Result}; use prover::programs::prelude::*; use std::thread; diff --git a/arbitrator/stylus/src/env.rs b/arbitrator/stylus/src/env.rs index 91bd5db927..a6eb97e640 100644 --- a/arbitrator/stylus/src/env.rs +++ b/arbitrator/stylus/src/env.rs @@ -2,12 +2,12 @@ // For license information, see https://github.com/nitro/blob/master/LICENSE use arbutil::{ + benchmark::Benchmark, evm::{ api::{DataReader, EvmApi, Ink}, EvmData, }, pricing, - benchmark::Benchmark, }; use caller_env::GuestPtr; use derivative::Derivative; diff --git a/arbitrator/stylus/src/host.rs b/arbitrator/stylus/src/host.rs index de86442f7d..2c96945cbc 100644 --- a/arbitrator/stylus/src/host.rs +++ b/arbitrator/stylus/src/host.rs @@ -5,11 +5,11 @@ use crate::env::{Escape, HostioInfo, MaybeEscape, WasmEnv, WasmEnvMut}; use arbutil::{ + benchmark::Benchmark, evm::{ api::{DataReader, EvmApi, Gas, Ink}, EvmData, }, - benchmark::Benchmark, Color, }; use caller_env::GuestPtr; @@ -471,7 +471,7 @@ pub(crate) fn console_tee, T: Into + Copy>( pub(crate) fn null_host>(_: WasmEnvMut) {} pub(crate) fn toggle_benchmark>( - mut env: WasmEnvMut + mut env: WasmEnvMut, ) -> MaybeEscape { hostio!(env, toggle_benchmark()) } From 15ca778415260818e5e99d58a9b73fd07ff152eb Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 11:02:15 -0300 Subject: [PATCH 069/187] fix cargo fmt --- arbitrator/tools/stylus_benchmark/src/main.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 3942fd00e0..a6e33aed93 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -108,7 +108,10 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { durations = durations[l..r].to_vec(); let sum = durations.iter().sum::(); - println!("Average duration after discarding top and bottom runs: {:?}", sum / (r - l) as u32); + println!( + "Average duration after discarding top and bottom runs: {:?}", + sum / (r - l) as u32 + ); Ok(()) } From a813433d0585d51eae8190398125a888d18b79e4 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 11:02:38 -0300 Subject: [PATCH 070/187] Adds rust fmt to stylus_benchmark in ci --- .github/workflows/arbitrator-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index 47646017ac..dd58a30571 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -171,6 +171,9 @@ jobs: - name: Rustfmt - langs/rust run: cargo fmt --all --manifest-path arbitrator/langs/rust/Cargo.toml -- --check + - name: Rustfmt - tools/stylus_benchmark + run: cargo fmt --all --manifest-path arbitrator/tools/stylus_benchmark/Cargo.toml -- --check + - name: Make proofs from test cases run: make -j test-gen-proofs From 1f1e5e38a69e4e806b9352f8222db3bcdda3eeb7 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 14:08:32 -0300 Subject: [PATCH 071/187] Improve panics msgs in stylus_benchmark --- arbitrator/tools/stylus_benchmark/src/main.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index a6e33aed93..25bdf6acda 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -26,12 +26,12 @@ fn check_result(req_type: u32, req_data: &Vec) { }; match req_type { - 0 => return, // userSuccess - 1 => panic!("ErrExecutionReverted"), // userRevert - 2 => panic!("ErrExecutionReverted"), // userFailure - 3 => panic!("ErrOutOfGas"), // userOutOfInk - 4 => panic!("ErrDepth"), // userOutOfStack - _ => panic!("ErrExecutionReverted"), // userUnknown + 0 => return, + 1 => panic!("ErrExecutionReverted user revert"), + 2 => panic!("ErrExecutionReverted user failure"), + 3 => panic!("ErrOutOfGas user out of ink"), + 4 => panic!("ErrDepth user out of stack"), + _ => panic!("ErrExecutionReverted user unknown"), } } From 175e39bbc5af7efc135bc9f13677a78ec2e86208 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 20:10:58 -0300 Subject: [PATCH 072/187] generate-wats subcommand --- .../programs_to_benchmark/add_i32.wat | 22 ------ arbitrator/tools/stylus_benchmark/src/main.rs | 76 ++++++++++++++++--- 2 files changed, 66 insertions(+), 32 deletions(-) delete mode 100644 arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_i32.wat diff --git a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_i32.wat b/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_i32.wat deleted file mode 100644 index 6aefe856a4..0000000000 --- a/arbitrator/tools/stylus_benchmark/programs_to_benchmark/add_i32.wat +++ /dev/null @@ -1,22 +0,0 @@ -(module - (import "debug" "toggle_benchmark" (func $toggle_benchmark)) - (memory (export "memory") 0 0) - (global $i (mut i32) (i32.const 0)) - (func (export "user_entrypoint") (param i32) (result i32) - call $toggle_benchmark - - (loop $loop - global.get $i - i32.const 1 - i32.add - global.set $i - - global.get $i - i32.const 10000000 - i32.lt_s - br_if $loop) - - call $toggle_benchmark - - i32.const 0) -) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 25bdf6acda..1616a1fbde 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -2,13 +2,15 @@ // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE use arbutil::evm::{api::Ink, EvmData}; -use clap::Parser; +use clap::{Parser, Subcommand}; use core::time::Duration; use jit::machine::WasmEnv; use jit::program::{ exec_program, get_last_msg, pop_with_wasm_env, start_program_with_wasm_env, JitConfig, }; use prover::programs::{config::CompileConfig, config::PricingParams, prelude::StylusConfig}; +use std::fs::File; +use std::io::Write; use std::path::PathBuf; use std::str; use stylus::native::compile; @@ -35,12 +37,21 @@ fn check_result(req_type: u32, req_data: &Vec) { } } -#[derive(Parser, Debug)] -#[command(author, version, about, long_about = None)] -struct Args { - // Path to the wat file to be benchmarked - #[arg(short, long)] - wat_path: PathBuf, +#[derive(Debug, Parser)] +#[command(name = "stylus_benchmark")] +struct Cli { + #[command(subcommand)] + command: Commands, +} + +#[derive(Debug, Subcommand)] +enum Commands { + #[command(arg_required_else_help = true)] + Benchmark { wat_path: PathBuf }, + GenerateWats { + #[arg(value_name = "OUT_PATH")] + out_path: PathBuf, + }, } fn run(compiled_module: Vec) -> (Duration, Ink) { @@ -84,6 +95,8 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { } fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { + println!("Benchmarking {:?}", wat_path); + let wat = match std::fs::read(wat_path) { Ok(wat) => wat, Err(err) => panic!("failed to read: {err}"), @@ -92,7 +105,6 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { let compiled_module = compile(&wasm, 0, true, Target::default())?; - println!("Benchmarking {:?}", wat_path); let mut durations: Vec = Vec::new(); for i in 0..NUMBER_OF_BENCHMARK_RUNS { print!("Run {:?}, ", i); @@ -116,7 +128,51 @@ fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { Ok(()) } +fn generate_add_i32_wat(mut out_path: PathBuf) -> eyre::Result<()> { + let number_of_ops = 20_000_000; + + out_path.push("add_i32.wat"); + println!( + "Generating {:?}, number_of_ops: {:?}", + out_path, number_of_ops + ); + + let mut file = File::create(out_path)?; + + file.write_all(b"(module\n")?; + file.write_all(b" (import \"debug\" \"toggle_benchmark\" (func $toggle_benchmark))\n")?; + file.write_all(b" (memory (export \"memory\") 0 0)\n")?; + file.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n")?; + + file.write_all(b" call $toggle_benchmark\n")?; + + file.write_all(b" i32.const 1\n")?; + for _ in 0..number_of_ops { + file.write_all(b" i32.const 1\n")?; + file.write_all(b" i32.add\n")?; + } + + file.write_all(b" call $toggle_benchmark\n")?; + + file.write_all(b" drop\n")?; + file.write_all(b" i32.const 0)\n")?; + file.write_all(b")")?; + + Ok(()) +} + +fn generate_wats(out_path: PathBuf) -> eyre::Result<()> { + return generate_add_i32_wat(out_path); +} + fn main() -> eyre::Result<()> { - let args = Args::parse(); - return benchmark(&args.wat_path); + let args = Cli::parse(); + match args.command { + Commands::Benchmark { wat_path } => { + return benchmark(&wat_path); + } + Commands::GenerateWats { out_path } => { + return generate_wats(out_path); + } + } } From 922fce875e5fe714ab24d165f114a70016943ee3 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 10 Dec 2024 20:21:26 -0300 Subject: [PATCH 073/187] Split benchmark and generate_wats in different files --- .../tools/stylus_benchmark/src/benchmark.rs | 109 +++++++++++++ .../stylus_benchmark/src/generate_wats.rs | 43 +++++ arbitrator/tools/stylus_benchmark/src/main.rs | 149 +----------------- 3 files changed, 156 insertions(+), 145 deletions(-) create mode 100644 arbitrator/tools/stylus_benchmark/src/benchmark.rs create mode 100644 arbitrator/tools/stylus_benchmark/src/generate_wats.rs diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs new file mode 100644 index 0000000000..fb47857676 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -0,0 +1,109 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +use arbutil::evm::{api::Ink, EvmData}; +use core::time::Duration; +use jit::machine::WasmEnv; +use jit::program::{ + exec_program, get_last_msg, pop_with_wasm_env, start_program_with_wasm_env, JitConfig, +}; +use prover::programs::{config::CompileConfig, config::PricingParams, prelude::StylusConfig}; +use std::path::PathBuf; +use std::str; +use stylus::native::compile; +use wasmer::Target; + +const EVM_API_METHOD_REQ_OFFSET: u32 = 0x10000000; + +const NUMBER_OF_BENCHMARK_RUNS: u32 = 7; +const NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD: u32 = 2; + +fn check_result(req_type: u32, req_data: &Vec) { + let _ = match str::from_utf8(req_data) { + Ok(v) => v, + Err(e) => panic!("Invalid UTF-8 sequence: {}", e), + }; + + match req_type { + 0 => return, + 1 => panic!("ErrExecutionReverted user revert"), + 2 => panic!("ErrExecutionReverted user failure"), + 3 => panic!("ErrOutOfGas user out of ink"), + 4 => panic!("ErrDepth user out of stack"), + _ => panic!("ErrExecutionReverted user unknown"), + } +} + +fn run(compiled_module: Vec) -> (Duration, Ink) { + let calldata = Vec::from([0u8; 32]); + let evm_data = EvmData::default(); + let config = JitConfig { + stylus: StylusConfig { + version: 2, + max_depth: 10000, + pricing: PricingParams { ink_price: 1 }, + }, + compile: CompileConfig::version(2, true), + }; + + let exec = &mut WasmEnv::default(); + + let module = exec_program( + exec, + compiled_module.into(), + calldata, + config, + evm_data, + 160000000, + ) + .unwrap(); + + let req_id = start_program_with_wasm_env(exec, module).unwrap(); + let msg = get_last_msg(exec, req_id).unwrap(); + if msg.req_type < EVM_API_METHOD_REQ_OFFSET { + let _ = pop_with_wasm_env(exec); + + let req_data = msg.req_data[8..].to_vec(); + check_result(msg.req_type, &req_data); + } else { + panic!("unsupported request type {:?}", msg.req_type); + } + + let elapsed = msg.benchmark.unwrap().elapsed.expect("elapsed"); + let ink = msg.benchmark.unwrap().ink_total.expect("ink"); + (elapsed, ink) +} + +pub fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { + println!("Benchmarking {:?}", wat_path); + + let wat = match std::fs::read(wat_path) { + Ok(wat) => wat, + Err(err) => panic!("failed to read: {err}"), + }; + let wasm = wasmer::wat2wasm(&wat)?; + + let compiled_module = compile(&wasm, 0, true, Target::default())?; + + let mut durations: Vec = Vec::new(); + for i in 0..NUMBER_OF_BENCHMARK_RUNS { + print!("Run {:?}, ", i); + let (duration, ink) = run(compiled_module.clone()); + durations.push(duration); + println!("duration: {:?}, ink: {:?}", duration, ink); + } + + // discard top and bottom runs + durations.sort(); + let l = NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; + let r = NUMBER_OF_BENCHMARK_RUNS as usize - NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; + durations = durations[l..r].to_vec(); + + let sum = durations.iter().sum::(); + println!( + "Average duration after discarding top and bottom runs: {:?}", + sum / (r - l) as u32 + ); + + Ok(()) +} diff --git a/arbitrator/tools/stylus_benchmark/src/generate_wats.rs b/arbitrator/tools/stylus_benchmark/src/generate_wats.rs new file mode 100644 index 0000000000..3656f8cf40 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/src/generate_wats.rs @@ -0,0 +1,43 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +fn generate_add_i32_wat(mut out_path: PathBuf) -> eyre::Result<()> { + let number_of_ops = 20_000_000; + + out_path.push("add_i32.wat"); + println!( + "Generating {:?}, number_of_ops: {:?}", + out_path, number_of_ops + ); + + let mut file = File::create(out_path)?; + + file.write_all(b"(module\n")?; + file.write_all(b" (import \"debug\" \"toggle_benchmark\" (func $toggle_benchmark))\n")?; + file.write_all(b" (memory (export \"memory\") 0 0)\n")?; + file.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n")?; + + file.write_all(b" call $toggle_benchmark\n")?; + + file.write_all(b" i32.const 1\n")?; + for _ in 0..number_of_ops { + file.write_all(b" i32.const 1\n")?; + file.write_all(b" i32.add\n")?; + } + + file.write_all(b" call $toggle_benchmark\n")?; + + file.write_all(b" drop\n")?; + file.write_all(b" i32.const 0)\n")?; + file.write_all(b")")?; + + Ok(()) +} + +pub fn generate_wats(out_path: PathBuf) -> eyre::Result<()> { + return generate_add_i32_wat(out_path); +} diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 1616a1fbde..ed6566ac90 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -1,41 +1,11 @@ // Copyright 2021-2024, Offchain Labs, Inc. // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE -use arbutil::evm::{api::Ink, EvmData}; use clap::{Parser, Subcommand}; -use core::time::Duration; -use jit::machine::WasmEnv; -use jit::program::{ - exec_program, get_last_msg, pop_with_wasm_env, start_program_with_wasm_env, JitConfig, -}; -use prover::programs::{config::CompileConfig, config::PricingParams, prelude::StylusConfig}; -use std::fs::File; -use std::io::Write; use std::path::PathBuf; -use std::str; -use stylus::native::compile; -use wasmer::Target; -const EVM_API_METHOD_REQ_OFFSET: u32 = 0x10000000; - -const NUMBER_OF_BENCHMARK_RUNS: u32 = 7; -const NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD: u32 = 2; - -fn check_result(req_type: u32, req_data: &Vec) { - let _ = match str::from_utf8(req_data) { - Ok(v) => v, - Err(e) => panic!("Invalid UTF-8 sequence: {}", e), - }; - - match req_type { - 0 => return, - 1 => panic!("ErrExecutionReverted user revert"), - 2 => panic!("ErrExecutionReverted user failure"), - 3 => panic!("ErrOutOfGas user out of ink"), - 4 => panic!("ErrDepth user out of stack"), - _ => panic!("ErrExecutionReverted user unknown"), - } -} +mod benchmark; +mod generate_wats; #[derive(Debug, Parser)] #[command(name = "stylus_benchmark")] @@ -54,125 +24,14 @@ enum Commands { }, } -fn run(compiled_module: Vec) -> (Duration, Ink) { - let calldata = Vec::from([0u8; 32]); - let evm_data = EvmData::default(); - let config = JitConfig { - stylus: StylusConfig { - version: 2, - max_depth: 10000, - pricing: PricingParams { ink_price: 1 }, - }, - compile: CompileConfig::version(2, true), - }; - - let exec = &mut WasmEnv::default(); - - let module = exec_program( - exec, - compiled_module.into(), - calldata, - config, - evm_data, - 160000000, - ) - .unwrap(); - - let req_id = start_program_with_wasm_env(exec, module).unwrap(); - let msg = get_last_msg(exec, req_id).unwrap(); - if msg.req_type < EVM_API_METHOD_REQ_OFFSET { - let _ = pop_with_wasm_env(exec); - - let req_data = msg.req_data[8..].to_vec(); - check_result(msg.req_type, &req_data); - } else { - panic!("unsupported request type {:?}", msg.req_type); - } - - let elapsed = msg.benchmark.unwrap().elapsed.expect("elapsed"); - let ink = msg.benchmark.unwrap().ink_total.expect("ink"); - (elapsed, ink) -} - -fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { - println!("Benchmarking {:?}", wat_path); - - let wat = match std::fs::read(wat_path) { - Ok(wat) => wat, - Err(err) => panic!("failed to read: {err}"), - }; - let wasm = wasmer::wat2wasm(&wat)?; - - let compiled_module = compile(&wasm, 0, true, Target::default())?; - - let mut durations: Vec = Vec::new(); - for i in 0..NUMBER_OF_BENCHMARK_RUNS { - print!("Run {:?}, ", i); - let (duration, ink) = run(compiled_module.clone()); - durations.push(duration); - println!("duration: {:?}, ink: {:?}", duration, ink); - } - - // discard top and bottom runs - durations.sort(); - let l = NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; - let r = NUMBER_OF_BENCHMARK_RUNS as usize - NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; - durations = durations[l..r].to_vec(); - - let sum = durations.iter().sum::(); - println!( - "Average duration after discarding top and bottom runs: {:?}", - sum / (r - l) as u32 - ); - - Ok(()) -} - -fn generate_add_i32_wat(mut out_path: PathBuf) -> eyre::Result<()> { - let number_of_ops = 20_000_000; - - out_path.push("add_i32.wat"); - println!( - "Generating {:?}, number_of_ops: {:?}", - out_path, number_of_ops - ); - - let mut file = File::create(out_path)?; - - file.write_all(b"(module\n")?; - file.write_all(b" (import \"debug\" \"toggle_benchmark\" (func $toggle_benchmark))\n")?; - file.write_all(b" (memory (export \"memory\") 0 0)\n")?; - file.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n")?; - - file.write_all(b" call $toggle_benchmark\n")?; - - file.write_all(b" i32.const 1\n")?; - for _ in 0..number_of_ops { - file.write_all(b" i32.const 1\n")?; - file.write_all(b" i32.add\n")?; - } - - file.write_all(b" call $toggle_benchmark\n")?; - - file.write_all(b" drop\n")?; - file.write_all(b" i32.const 0)\n")?; - file.write_all(b")")?; - - Ok(()) -} - -fn generate_wats(out_path: PathBuf) -> eyre::Result<()> { - return generate_add_i32_wat(out_path); -} - fn main() -> eyre::Result<()> { let args = Cli::parse(); match args.command { Commands::Benchmark { wat_path } => { - return benchmark(&wat_path); + return benchmark::benchmark(&wat_path); } Commands::GenerateWats { out_path } => { - return generate_wats(out_path); + return generate_wats::generate_wats(out_path); } } } From cac471c2c34785e173155afda40706231aae3414 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Wed, 11 Dec 2024 13:28:31 -0300 Subject: [PATCH 074/187] Adds benchmark to user-host Program --- arbitrator/wasm-libraries/user-host/src/program.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arbitrator/wasm-libraries/user-host/src/program.rs b/arbitrator/wasm-libraries/user-host/src/program.rs index 7b3782b2e5..fb11efa447 100644 --- a/arbitrator/wasm-libraries/user-host/src/program.rs +++ b/arbitrator/wasm-libraries/user-host/src/program.rs @@ -2,6 +2,7 @@ // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE use arbutil::{ + benchmark::Benchmark, evm::{ api::{EvmApiMethod, Gas, Ink, VecReader, EVM_API_METHOD_REQ_OFFSET}, req::{EvmApiRequestor, RequestHandler}, @@ -75,6 +76,8 @@ pub(crate) struct Program { pub evm_api: EvmApiRequestor, /// EVM Context info. pub evm_data: EvmData, + // Used to benchmark execution blocks of code + pub benchmark: Option, /// WAVM module index. pub module: u32, /// Call configuration. @@ -167,6 +170,7 @@ impl Program { outs: vec![], evm_api: EvmApiRequestor::new(UserHostRequester::default()), evm_data, + benchmark: None, module, config, early_exit: None, @@ -237,6 +241,10 @@ impl UserHost for Program { &self.evm_data } + fn benchmark(&mut self) -> &mut Option { + &mut self.benchmark + } + fn evm_return_data_len(&mut self) -> &mut u32 { &mut self.evm_data.return_data_len } From 33e0f90f0c5da97c553b9c735f6325a0f09cfb3f Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Wed, 11 Dec 2024 13:58:41 -0300 Subject: [PATCH 075/187] Adds benchmark to user-test Program --- arbitrator/wasm-libraries/user-test/src/program.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arbitrator/wasm-libraries/user-test/src/program.rs b/arbitrator/wasm-libraries/user-test/src/program.rs index 299fca08c3..d31664e7af 100644 --- a/arbitrator/wasm-libraries/user-test/src/program.rs +++ b/arbitrator/wasm-libraries/user-test/src/program.rs @@ -8,6 +8,7 @@ use arbutil::{ user::UserOutcomeKind, EvmData, }, + benchmark::Benchmark, Bytes20, Bytes32, Color, }; use caller_env::{static_caller::STATIC_MEM, GuestPtr, MemAccess}; @@ -28,6 +29,7 @@ impl From for eyre::ErrReport { /// Mock type representing a `user_host::Program` pub struct Program { evm_api: MockEvmApi, + benchmark: Option, } #[allow(clippy::unit_arg)] @@ -52,6 +54,10 @@ impl UserHost for Program { &EVM_DATA } + fn benchmark(&mut self) -> &mut Option { + &mut self.benchmark + } + fn evm_return_data_len(&mut self) -> &mut u32 { unimplemented!() } @@ -91,6 +97,7 @@ impl Program { pub fn current() -> Self { Self { evm_api: MockEvmApi, + benchmark: None, } } From e8170f09718ad27ce95ff35f92dbc1c900e959fe Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Wed, 11 Dec 2024 14:47:56 -0300 Subject: [PATCH 076/187] Improves panic message when toggle_measurement block doesn't exist --- arbitrator/tools/stylus_benchmark/src/benchmark.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index fb47857676..6b9ae8744e 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -69,8 +69,17 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { panic!("unsupported request type {:?}", msg.req_type); } - let elapsed = msg.benchmark.unwrap().elapsed.expect("elapsed"); - let ink = msg.benchmark.unwrap().ink_total.expect("ink"); + let benchmark_none_msg = "toggle_measurement block likely not present in program"; + let elapsed = msg + .benchmark + .expect(benchmark_none_msg) + .elapsed + .expect("elapsed"); + let ink = msg + .benchmark + .expect(benchmark_none_msg) + .ink_total + .expect("ink"); (elapsed, ink) } From 4cd4d137130021faf4e6546063687f42e5e627a3 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 13 Dec 2024 09:07:26 -0300 Subject: [PATCH 077/187] Fix version used to compile in stylus_benchmark --- arbitrator/tools/stylus_benchmark/src/benchmark.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index 6b9ae8744e..759f588c17 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -54,7 +54,7 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { calldata, config, evm_data, - 160000000, + u64::MAX, ) .unwrap(); @@ -92,7 +92,7 @@ pub fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { }; let wasm = wasmer::wat2wasm(&wat)?; - let compiled_module = compile(&wasm, 0, true, Target::default())?; + let compiled_module = compile(&wasm, 2, true, Target::default())?; let mut durations: Vec = Vec::new(); for i in 0..NUMBER_OF_BENCHMARK_RUNS { From bced42f7de6fcea4e63dafbf959d5005833ba32f Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 13 Dec 2024 09:09:15 -0300 Subject: [PATCH 078/187] Small refactor to avoid code duplication --- arbitrator/tools/stylus_benchmark/src/benchmark.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index 759f588c17..e97028a347 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -69,17 +69,11 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { panic!("unsupported request type {:?}", msg.req_type); } - let benchmark_none_msg = "toggle_measurement block likely not present in program"; - let elapsed = msg + let result = msg .benchmark - .expect(benchmark_none_msg) - .elapsed - .expect("elapsed"); - let ink = msg - .benchmark - .expect(benchmark_none_msg) - .ink_total - .expect("ink"); + .expect("toggle_measurement block likely not present in program"); + let elapsed = result.elapsed.expect("elapsed"); + let ink = result.ink_total.expect("ink"); (elapsed, ink) } From 0fb2960cf05cec6d2acf25c2dc8b401784abf8a0 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 13 Dec 2024 09:11:12 -0300 Subject: [PATCH 079/187] Change benchmark function arguments --- arbitrator/tools/stylus_benchmark/src/benchmark.rs | 2 +- arbitrator/tools/stylus_benchmark/src/main.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index e97028a347..1c3ab363c6 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -77,7 +77,7 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { (elapsed, ink) } -pub fn benchmark(wat_path: &PathBuf) -> eyre::Result<()> { +pub fn benchmark(wat_path: PathBuf) -> eyre::Result<()> { println!("Benchmarking {:?}", wat_path); let wat = match std::fs::read(wat_path) { diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index ed6566ac90..9df77f25c8 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -28,7 +28,7 @@ fn main() -> eyre::Result<()> { let args = Cli::parse(); match args.command { Commands::Benchmark { wat_path } => { - return benchmark::benchmark(&wat_path); + return benchmark::benchmark(wat_path); } Commands::GenerateWats { out_path } => { return generate_wats::generate_wats(out_path); From 26a78930948df31c9628d16b7c8193de516cfcc6 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 13 Dec 2024 09:23:20 -0300 Subject: [PATCH 080/187] Prints avg_ink_spent_per_micro_second --- .../tools/stylus_benchmark/src/benchmark.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index 1c3ab363c6..b5b3c78038 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -89,11 +89,13 @@ pub fn benchmark(wat_path: PathBuf) -> eyre::Result<()> { let compiled_module = compile(&wasm, 2, true, Target::default())?; let mut durations: Vec = Vec::new(); + let mut ink_spent = Ink(0); for i in 0..NUMBER_OF_BENCHMARK_RUNS { print!("Run {:?}, ", i); - let (duration, ink) = run(compiled_module.clone()); - durations.push(duration); - println!("duration: {:?}, ink: {:?}", duration, ink); + let (duration_run, ink_spent_run) = run(compiled_module.clone()); + durations.push(duration_run); + ink_spent = ink_spent_run; + println!("duration: {:?}, ink_spent: {:?}", duration_run, ink_spent_run); } // discard top and bottom runs @@ -102,11 +104,10 @@ pub fn benchmark(wat_path: PathBuf) -> eyre::Result<()> { let r = NUMBER_OF_BENCHMARK_RUNS as usize - NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; durations = durations[l..r].to_vec(); - let sum = durations.iter().sum::(); - println!( - "Average duration after discarding top and bottom runs: {:?}", - sum / (r - l) as u32 - ); + let avg_duration = durations.iter().sum::() / (r - l) as u32; + let avg_ink_spent_per_micro_second = ink_spent.0 / avg_duration.as_micros() as u64; + println!("After discarding top and bottom runs: "); + println!("avg_duration: {:?}, avg_ink_spent_per_micro_second: {:?}", avg_duration, avg_ink_spent_per_micro_second); Ok(()) } From 0c48cab922be5e4db20e5f886a38a832b5f6c115 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 13 Dec 2024 09:41:05 -0300 Subject: [PATCH 081/187] Fix rustfmt complaints in stylus_benchmark --- arbitrator/tools/stylus_benchmark/src/benchmark.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index b5b3c78038..6af9a05920 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -95,7 +95,10 @@ pub fn benchmark(wat_path: PathBuf) -> eyre::Result<()> { let (duration_run, ink_spent_run) = run(compiled_module.clone()); durations.push(duration_run); ink_spent = ink_spent_run; - println!("duration: {:?}, ink_spent: {:?}", duration_run, ink_spent_run); + println!( + "duration: {:?}, ink_spent: {:?}", + duration_run, ink_spent_run + ); } // discard top and bottom runs @@ -107,7 +110,10 @@ pub fn benchmark(wat_path: PathBuf) -> eyre::Result<()> { let avg_duration = durations.iter().sum::() / (r - l) as u32; let avg_ink_spent_per_micro_second = ink_spent.0 / avg_duration.as_micros() as u64; println!("After discarding top and bottom runs: "); - println!("avg_duration: {:?}, avg_ink_spent_per_micro_second: {:?}", avg_duration, avg_ink_spent_per_micro_second); + println!( + "avg_duration: {:?}, avg_ink_spent_per_micro_second: {:?}", + avg_duration, avg_ink_spent_per_micro_second + ); Ok(()) } From 382da9107058cb04c9dda5f562feb844097a9bfc Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 13 Dec 2024 14:35:09 -0300 Subject: [PATCH 082/187] Fixes typo --- arbitrator/tools/stylus_benchmark/src/benchmark.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index 6af9a05920..8e3085b55c 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -71,7 +71,7 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { let result = msg .benchmark - .expect("toggle_measurement block likely not present in program"); + .expect("toggle_benchmark block likely not present in program"); let elapsed = result.elapsed.expect("elapsed"); let ink = result.ink_total.expect("ink"); (elapsed, ink) From 3e59f8fb3a6576c84d2387574dd4907d1f60bd62 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Mon, 16 Dec 2024 08:31:57 -0600 Subject: [PATCH 083/187] update bold submodule --- bold | 2 +- nitro-testnode | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bold b/bold index d0a87de774..d3f4d600ab 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit d0a87de774aecfa97161efd1b0a924d4d5fbcf74 +Subproject commit d3f4d600abdacec800e9e27a429a730639233073 diff --git a/nitro-testnode b/nitro-testnode index c177f28234..fa19e22104 160000 --- a/nitro-testnode +++ b/nitro-testnode @@ -1 +1 @@ -Subproject commit c177f282340285bcdae2d6a784547e2bb8b97498 +Subproject commit fa19e2210403ad24519ea46c2d337f54a9f47593 From da609b6c5bedb1999362ffaa28257f0fa7291d97 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Mon, 16 Dec 2024 08:50:05 -0600 Subject: [PATCH 084/187] include all the new config opts --- staker/bold/bold_staker.go | 88 +++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 10 deletions(-) diff --git a/staker/bold/bold_staker.go b/staker/bold/bold_staker.go index 1a8eed80fa..2a6c32f5a9 100644 --- a/staker/bold/bold_staker.go +++ b/staker/bold/bold_staker.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "math/big" + "strings" "time" flag "github.com/spf13/pflag" @@ -57,16 +58,21 @@ type BoldConfig struct { // How often to scan for newly created assertions onchain. AssertionScanningInterval time.Duration `koanf:"assertion-scanning-interval"` // How often to confirm assertions onchain. - AssertionConfirmingInterval time.Duration `koanf:"assertion-confirming-interval"` - API bool `koanf:"api"` - APIHost string `koanf:"api-host"` - APIPort uint16 `koanf:"api-port"` - APIDBPath string `koanf:"api-db-path"` - TrackChallengeParentAssertionHashes []string `koanf:"track-challenge-parent-assertion-hashes"` - CheckStakerSwitchInterval time.Duration `koanf:"check-staker-switch-interval"` - StateProviderConfig StateProviderConfig `koanf:"state-provider-config"` - StartValidationFromStaked bool `koanf:"start-validation-from-staked"` + AssertionConfirmingInterval time.Duration `koanf:"assertion-confirming-interval"` + API bool `koanf:"api"` + APIHost string `koanf:"api-host"` + APIPort uint16 `koanf:"api-port"` + APIDBPath string `koanf:"api-db-path"` + TrackChallengeParentAssertionHashes []string `koanf:"track-challenge-parent-assertion-hashes"` + CheckStakerSwitchInterval time.Duration `koanf:"check-staker-switch-interval"` + StateProviderConfig StateProviderConfig `koanf:"state-provider-config"` + StartValidationFromStaked bool `koanf:"start-validation-from-staked"` + AutoDeposit bool `koanf:"auto-deposit"` + AutoIncreaseAllowance bool `koanf:"auto-increase-allowance"` + DelegatedStaking DelegatedStakingConfig `koanf:"delegated-staking"` + RPCBlockNumber string `koanf:"rpc-block-number"` strategy legacystaker.StakerStrategy + blockNum rpc.BlockNumber } func (c *BoldConfig) Validate() error { @@ -75,9 +81,31 @@ func (c *BoldConfig) Validate() error { return err } c.strategy = strategy + var blockNum rpc.BlockNumber + switch strings.ToLower(c.RPCBlockNumber) { + case "safe": + blockNum = rpc.SafeBlockNumber + case "finalized": + blockNum = rpc.FinalizedBlockNumber + case "latest": + blockNum = rpc.LatestBlockNumber + default: + return fmt.Errorf("unknown rpc block number \"%v\", expected either latest, safe, or finalized", c.RPCBlockNumber) + } + c.blockNum = blockNum return nil } +type DelegatedStakingConfig struct { + Enable bool `koanf:"enable"` + CustomWithdrawalAddress string `koanf:"custom-withdrawal-address"` +} + +var DefaultDelegatedStakingConfig = DelegatedStakingConfig{ + Enable: false, + CustomWithdrawalAddress: "", +} + type StateProviderConfig struct { // A name identifier for the validator for cosmetic purposes. ValidatorName string `koanf:"validator-name"` @@ -106,6 +134,10 @@ var DefaultBoldConfig = BoldConfig{ CheckStakerSwitchInterval: time.Minute, // Every minute, check if the Nitro node staker should switch to using BOLD. StateProviderConfig: DefaultStateProviderConfig, StartValidationFromStaked: true, + AutoDeposit: true, + AutoIncreaseAllowance: true, + DelegatedStaking: DefaultDelegatedStakingConfig, + RPCBlockNumber: "finalized", } var BoldModes = map[legacystaker.StakerStrategy]boldtypes.Mode{ @@ -118,6 +150,7 @@ var BoldModes = map[legacystaker.StakerStrategy]boldtypes.Mode{ func BoldConfigAddOptions(prefix string, f *flag.FlagSet) { f.Bool(prefix+".enable", DefaultBoldConfig.Enable, "enable bold challenge protocol") f.String(prefix+".strategy", DefaultBoldConfig.Strategy, "define the bold validator staker strategy, either watchtower, defensive, stakeLatest, or makeNodes") + f.String(prefix+".rpc-block-number", DefaultBoldConfig.RPCBlockNumber, "define the block number to use for reading data onchain, either latest, safe, or finalized") f.Duration(prefix+".assertion-posting-interval", DefaultBoldConfig.AssertionPostingInterval, "assertion posting interval") f.Duration(prefix+".assertion-scanning-interval", DefaultBoldConfig.AssertionScanningInterval, "scan assertion interval") f.Duration(prefix+".assertion-confirming-interval", DefaultBoldConfig.AssertionConfirmingInterval, "confirm assertion interval") @@ -129,6 +162,9 @@ func BoldConfigAddOptions(prefix string, f *flag.FlagSet) { f.StringSlice(prefix+".track-challenge-parent-assertion-hashes", DefaultBoldConfig.TrackChallengeParentAssertionHashes, "only track challenges/edges with these parent assertion hashes") StateProviderConfigAddOptions(prefix+".state-provider-config", f) f.Bool(prefix+".start-validation-from-staked", DefaultBoldConfig.StartValidationFromStaked, "assume staked nodes are valid") + f.Bool(prefix+".auto-deposit", DefaultBoldConfig.StartValidationFromStaked, "assume staked nodes are valid") + f.Bool(prefix+".auto-increase-allowance", DefaultBoldConfig.StartValidationFromStaked, "assume staked nodes are valid") + DelegatedStakingConfigAddOptions(prefix+".delegated-staking", f) } func StateProviderConfigAddOptions(prefix string, f *flag.FlagSet) { @@ -137,6 +173,11 @@ func StateProviderConfigAddOptions(prefix string, f *flag.FlagSet) { f.String(prefix+".machine-leaves-cache-path", DefaultStateProviderConfig.MachineLeavesCachePath, "path to machine cache") } +func DelegatedStakingConfigAddOptions(prefix string, f *flag.FlagSet) { + f.Bool(prefix+".enable", DefaultDelegatedStakingConfig.Enable, "check batch finality") + f.String(prefix+".custom-withdrawal-address", DefaultDelegatedStakingConfig.CustomWithdrawalAddress, "path to machine cache") +} + type BOLDStaker struct { stopwaiter.StopWaiter config *BoldConfig @@ -365,7 +406,25 @@ func newBOLDChallengeManager( if err != nil { return nil, fmt.Errorf("could not create challenge manager bindings: %w", err) } - assertionChain, err := solimpl.NewAssertionChain(ctx, rollupAddress, chalManager, txOpts, client, NewDataPosterTransactor(dataPoster)) + assertionChainOpts := []solimpl.Opt{ + solimpl.WithRpcHeadBlockNumber(config.blockNum), + } + if config.DelegatedStaking.Enable && config.DelegatedStaking.CustomWithdrawalAddress != "" { + withdrawalAddr := common.HexToAddress(config.DelegatedStaking.CustomWithdrawalAddress) + assertionChainOpts = append(assertionChainOpts, solimpl.WithCustomWithdrawalAddress(withdrawalAddr)) + } + if !config.AutoDeposit { + assertionChainOpts = append(assertionChainOpts, solimpl.WithoutAutoDeposit()) + } + assertionChain, err := solimpl.NewAssertionChain( + ctx, + rollupAddress, + chalManager, + txOpts, + client, + NewDataPosterTransactor(dataPoster), + assertionChainOpts..., + ) if err != nil { return nil, fmt.Errorf("could not create assertion chain: %w", err) } @@ -455,6 +514,15 @@ func newBOLDChallengeManager( apiAddr := fmt.Sprintf("%s:%d", config.APIHost, config.APIPort) stackOpts = append(stackOpts, challengemanager.StackWithAPIEnabled(apiAddr, apiDBPath)) } + if !config.AutoDeposit { + stackOpts = append(stackOpts, challengemanager.StackWithoutAutoDeposit()) + } + if !config.AutoIncreaseAllowance { + stackOpts = append(stackOpts, challengemanager.StackWithoutAutoAllowanceApproval()) + } + if config.DelegatedStaking.Enable { + stackOpts = append(stackOpts, challengemanager.StackWithDelegatedStaking()) + } manager, err := challengemanager.NewChallengeStack( assertionChain, From 177b7a887821aceb838254acd7c040485ba8d999 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Mon, 16 Dec 2024 09:09:41 -0600 Subject: [PATCH 085/187] comment --- staker/bold/bold_staker.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/staker/bold/bold_staker.go b/staker/bold/bold_staker.go index 2a6c32f5a9..b08b2ec18b 100644 --- a/staker/bold/bold_staker.go +++ b/staker/bold/bold_staker.go @@ -162,8 +162,8 @@ func BoldConfigAddOptions(prefix string, f *flag.FlagSet) { f.StringSlice(prefix+".track-challenge-parent-assertion-hashes", DefaultBoldConfig.TrackChallengeParentAssertionHashes, "only track challenges/edges with these parent assertion hashes") StateProviderConfigAddOptions(prefix+".state-provider-config", f) f.Bool(prefix+".start-validation-from-staked", DefaultBoldConfig.StartValidationFromStaked, "assume staked nodes are valid") - f.Bool(prefix+".auto-deposit", DefaultBoldConfig.StartValidationFromStaked, "assume staked nodes are valid") - f.Bool(prefix+".auto-increase-allowance", DefaultBoldConfig.StartValidationFromStaked, "assume staked nodes are valid") + f.Bool(prefix+".auto-deposit", DefaultBoldConfig.AutoDeposit, "auto-deposit stake token whenever making a move in BoLD that does not have enough stake token balance") + f.Bool(prefix+".auto-increase-allowance", DefaultBoldConfig.AutoIncreaseAllowance, "auto-increase spending allowance of the stake token by the rollup and challenge manager contracts") DelegatedStakingConfigAddOptions(prefix+".delegated-staking", f) } @@ -174,8 +174,8 @@ func StateProviderConfigAddOptions(prefix string, f *flag.FlagSet) { } func DelegatedStakingConfigAddOptions(prefix string, f *flag.FlagSet) { - f.Bool(prefix+".enable", DefaultDelegatedStakingConfig.Enable, "check batch finality") - f.String(prefix+".custom-withdrawal-address", DefaultDelegatedStakingConfig.CustomWithdrawalAddress, "path to machine cache") + f.Bool(prefix+".enable", DefaultDelegatedStakingConfig.Enable, "enable delegated staking by having the validator call newStake on startup") + f.String(prefix+".custom-withdrawal-address", DefaultDelegatedStakingConfig.CustomWithdrawalAddress, "enable a custom withdrawal address for staking on the rollup contract, useful for delegated stakers") } type BOLDStaker struct { From 66baceb7c497ff0edff87d7f6cba998b9922817d Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Mon, 16 Dec 2024 18:15:00 -0600 Subject: [PATCH 086/187] update geth pin --- arbos/block_processor.go | 23 +++++++++++------------ go-ethereum | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/arbos/block_processor.go b/arbos/block_processor.go index caa8abd4a7..a06034f905 100644 --- a/arbos/block_processor.go +++ b/arbos/block_processor.go @@ -265,6 +265,15 @@ func ProduceBlockAdvanced( return nil, nil, err } + if err = hooks.PreTxFilter(chainConfig, header, statedb, arbState, tx, options, sender, l1Info); err != nil { + return nil, nil, err + } + + // Additional pre-transaction validity check + if err = extraPreTxFilter(chainConfig, header, statedb, arbState, tx, options, sender, l1Info); err != nil { + return nil, nil, err + } + if basefee.Sign() > 0 { dataGas = math.MaxUint64 brotliCompressionLevel, err := arbState.BrotliCompressionLevel() @@ -300,18 +309,6 @@ func ProduceBlockAdvanced( } snap := statedb.Snapshot() - - if err = hooks.PreTxFilter(chainConfig, header, statedb, arbState, tx, options, sender, l1Info); err != nil { - statedb.RevertToSnapshot(snap) - return nil, nil, err - } - - // Additional pre-transaction validity check - if err = extraPreTxFilter(chainConfig, header, statedb, arbState, tx, options, sender, l1Info); err != nil { - statedb.RevertToSnapshot(snap) - return nil, nil, err - } - statedb.SetTxContext(tx.Hash(), len(receipts)) // the number of successful state transitions gasPool := gethGas @@ -333,12 +330,14 @@ func ProduceBlockAdvanced( if err != nil { // Ignore this transaction if it's invalid under the state transition function statedb.RevertToSnapshot(snap) + statedb.ClearTxFilter() return nil, nil, err } // Additional post-transaction validity check if err = extraPostTxFilter(chainConfig, header, statedb, arbState, tx, options, sender, l1Info, result); err != nil { statedb.RevertToSnapshot(snap) + statedb.ClearTxFilter() return nil, nil, err } diff --git a/go-ethereum b/go-ethereum index 6205f5effb..313432e2a4 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 6205f5effbcc8286f14cea045a9fcabb7c894413 +Subproject commit 313432e2a408f5d7d0f50c9ad4ccf515c8d21a56 From 6e0b0e0dbd84dc07681cb2fdf3c7a5696b114c42 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Tue, 17 Dec 2024 19:24:47 +0530 Subject: [PATCH 087/187] Store last message pruned in database --- arbnode/message_pruner.go | 50 +++++++++++++++++++++++++++++++++++---- arbnode/schema.go | 12 ++++++---- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/arbnode/message_pruner.go b/arbnode/message_pruner.go index 840a15f328..c86b88f2d0 100644 --- a/arbnode/message_pruner.go +++ b/arbnode/message_pruner.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/util/stopwaiter" @@ -121,7 +122,7 @@ func (m *MessagePruner) prune(ctx context.Context, count arbutil.MessageIndex, g } func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCount arbutil.MessageIndex, delayedMessageCount uint64) error { - prunedKeysRange, err := deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messageResultPrefix, &m.cachedPrunedMessageResult, uint64(messageCount)) + prunedKeysRange, err := deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messageResultPrefix, lastPrunedMessageResultKey, &m.cachedPrunedMessageResult, uint64(messageCount)) if err != nil { return fmt.Errorf("error deleting message results: %w", err) } @@ -129,7 +130,7 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun log.Info("Pruned message results:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } - prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, blockHashInputFeedPrefix, &m.cachedPrunedBlockHashesInputFeed, uint64(messageCount)) + prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, blockHashInputFeedPrefix, lastPrunedBlockHashInputFeedKey, &m.cachedPrunedBlockHashesInputFeed, uint64(messageCount)) if err != nil { return fmt.Errorf("error deleting expected block hashes: %w", err) } @@ -137,7 +138,7 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun log.Info("Pruned expected block hashes:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } - prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messagePrefix, &m.cachedPrunedMessages, uint64(messageCount)) + prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messagePrefix, lastPrunedMessageKey, &m.cachedPrunedMessages, uint64(messageCount)) if err != nil { return fmt.Errorf("error deleting last batch messages: %w", err) } @@ -145,7 +146,7 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun log.Info("Pruned last batch messages:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } - prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.inboxTracker.db, rlpDelayedMessagePrefix, &m.cachedPrunedDelayedMessages, delayedMessageCount) + prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.inboxTracker.db, rlpDelayedMessagePrefix, lastPrunedRlpDelayedMessageKey, &m.cachedPrunedDelayedMessages, delayedMessageCount) if err != nil { return fmt.Errorf("error deleting last batch delayed messages: %w", err) } @@ -157,8 +158,12 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun // deleteFromLastPrunedUptoEndKey is similar to deleteFromRange but automatically populates the start key // cachedStartMinKey must not be nil. It's set to the new start key at the end of this function if successful. -func deleteFromLastPrunedUptoEndKey(ctx context.Context, db ethdb.Database, prefix []byte, cachedStartMinKey *uint64, endMinKey uint64) ([]uint64, error) { +// Checks if the last pruned key is set in the database and uses it as the start key if it is. +func deleteFromLastPrunedUptoEndKey(ctx context.Context, db ethdb.Database, prefix []byte, lastPrunedKey []byte, cachedStartMinKey *uint64, endMinKey uint64) ([]uint64, error) { startMinKey := *cachedStartMinKey + if startMinKey == 0 { + startMinKey = fetchLastPrunedKey(db, lastPrunedKey) + } if startMinKey == 0 { startIter := db.NewIterator(prefix, uint64ToKey(1)) if !startIter.Next() { @@ -169,11 +174,46 @@ func deleteFromLastPrunedUptoEndKey(ctx context.Context, db ethdb.Database, pref } if endMinKey <= startMinKey { *cachedStartMinKey = startMinKey + insertLastPrunedKey(db, lastPrunedKey, startMinKey) return nil, nil } keys, err := deleteFromRange(ctx, db, prefix, startMinKey, endMinKey-1) if err == nil { *cachedStartMinKey = endMinKey - 1 + insertLastPrunedKey(db, lastPrunedKey, endMinKey-1) } return keys, err } + +func insertLastPrunedKey(db ethdb.Database, lastPrunedKey []byte, lastPrunedValue uint64) { + lastPrunedValueByte, err := rlp.EncodeToBytes(lastPrunedValue) + if err != nil { + log.Error("error encoding last pruned value: %w", err) + } else { + err = db.Put(lastPrunedKey, lastPrunedValueByte) + if err != nil { + log.Error("error saving last pruned value: %w", err) + } + } +} + +func fetchLastPrunedKey(db ethdb.Database, lastPrunedKey []byte) uint64 { + hasKey, err := db.Has(lastPrunedKey) + if err != nil { + log.Warn("error checking for last pruned key: %w", err) + } else if hasKey { + lastPrunedValueByte, err := db.Get(lastPrunedKey) + if err != nil { + log.Warn("error fetching last pruned key: %w", err) + } else { + var lastPrunedValue uint64 + err = rlp.DecodeBytes(lastPrunedValueByte, &lastPrunedValue) + if err != nil { + log.Warn("error decoding last pruned value: %w", err) + } else { + return lastPrunedValue + } + } + } + return 0 +} diff --git a/arbnode/schema.go b/arbnode/schema.go index 1aaded2b95..e06d6a75c7 100644 --- a/arbnode/schema.go +++ b/arbnode/schema.go @@ -13,10 +13,14 @@ var ( sequencerBatchMetaPrefix []byte = []byte("s") // maps a batch sequence number to BatchMetadata delayedSequencedPrefix []byte = []byte("a") // maps a delayed message count to the first sequencer batch sequence number with this delayed count - messageCountKey []byte = []byte("_messageCount") // contains the current message count - delayedMessageCountKey []byte = []byte("_delayedMessageCount") // contains the current delayed message count - sequencerBatchCountKey []byte = []byte("_sequencerBatchCount") // contains the current sequencer message count - dbSchemaVersion []byte = []byte("_schemaVersion") // contains a uint64 representing the database schema version + messageCountKey []byte = []byte("_messageCount") // contains the current message count + lastPrunedMessageResultKey []byte = []byte("_lastPrunedMessageResultKey") // contains the last pruned message result key + lastPrunedBlockHashInputFeedKey []byte = []byte("_lastPrunedBlockHashInputFeedPrefix") // contains the last pruned block hash input feed key + lastPrunedMessageKey []byte = []byte("_lastPrunedMessageKey") // contains the last pruned message key + lastPrunedRlpDelayedMessageKey []byte = []byte("_lastPrunedRlpDelayedMessageKey") // contains the last pruned RLP delayed message key + delayedMessageCountKey []byte = []byte("_delayedMessageCount") // contains the current delayed message count + sequencerBatchCountKey []byte = []byte("_sequencerBatchCount") // contains the current sequencer message count + dbSchemaVersion []byte = []byte("_schemaVersion") // contains a uint64 representing the database schema version ) const currentDbSchemaVersion uint64 = 1 From b77df7dab0139ca54e2d5f17938a89881e5c892e Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Tue, 17 Dec 2024 21:01:42 +0530 Subject: [PATCH 088/187] Get rid of receiver methods on aliased cgo types --- arbos/programs/native.go | 26 +++++++++++++------------- arbos/programs/testcompile.go | 26 +++++++++++++------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/arbos/programs/native.go b/arbos/programs/native.go index cfc1170c5b..a996d50d8a 100644 --- a/arbos/programs/native.go +++ b/arbos/programs/native.go @@ -109,7 +109,7 @@ func activateProgramInternal( (*u64)(gasLeft), )) - module, msg, err := status_mod.toResult(output.intoBytes(), debug) + module, msg, err := status_mod.toResult(rustBytesIntoBytes(output), debug) if err != nil { if debug { log.Warn("activation failed", "err", err, "msg", msg, "program", addressForLogging) @@ -119,7 +119,7 @@ func activateProgramInternal( } return nil, nil, err } - hash := moduleHash.toHash() + hash := bytes32ToHash(moduleHash) targets := db.Database().WasmTargets() type result struct { target ethdb.WasmTarget @@ -141,7 +141,7 @@ func activateProgramInternal( goSlice([]byte(target)), output, ) - asm := output.intoBytes() + asm := rustBytesIntoBytes(output) if status_asm != 0 { results <- result{target, nil, fmt.Errorf("%w: %s", ErrProgramActivation, string(asm))} return @@ -279,7 +279,7 @@ func callProgram( )) depth := interpreter.Depth() - data, msg, err := status.toResult(output.intoBytes(), debug) + data, msg, err := status.toResult(rustBytesIntoBytes(output), debug) if status == userFailure && debug { log.Warn("program failure", "err", err, "msg", msg, "program", address, "depth", depth) } @@ -292,7 +292,7 @@ func callProgram( //export handleReqImpl func handleReqImpl(apiId usize, req_type u32, data *rustSlice, costPtr *u64, out_response *C.GoSliceData, out_raw_data *C.GoSliceData) { api := getApi(apiId) - reqData := data.read() + reqData := readRustSlice(data) reqType := RequestType(req_type - EvmApiMethodReqOffset) response, raw_data, cost := api.handler(reqType, reqData) *costPtr = u64(cost) @@ -418,14 +418,14 @@ func SetTarget(name ethdb.WasmTarget, description string, native bool) error { cbool(native), )) if status != userSuccess { - msg := arbutil.ToStringOrHex(output.intoBytes()) + msg := arbutil.ToStringOrHex(rustBytesIntoBytes(output)) log.Error("failed to set stylus compilation target", "status", status, "msg", msg) return fmt.Errorf("failed to set stylus compilation target, status %v: %v", status, msg) } return nil } -func (value bytes32) toHash() common.Hash { +func bytes32ToHash(value *bytes32) common.Hash { hash := common.Hash{} for index, b := range value.bytes { hash[index] = byte(b) @@ -449,27 +449,27 @@ func addressToBytes20(addr common.Address) bytes20 { return value } -func (slice *rustSlice) read() []byte { +func readRustSlice(slice *rustSlice) []byte { if slice.len == 0 { return nil } return arbutil.PointerToSlice((*byte)(slice.ptr), int(slice.len)) } -func (vec *rustBytes) read() []byte { +func readRustBytes(vec *rustBytes) []byte { if vec.len == 0 { return nil } return arbutil.PointerToSlice((*byte)(vec.ptr), int(vec.len)) } -func (vec *rustBytes) intoBytes() []byte { - slice := vec.read() - vec.drop() +func rustBytesIntoBytes(vec *rustBytes) []byte { + slice := readRustBytes(vec) + dropRustBytes(vec) return slice } -func (vec *rustBytes) drop() { +func dropRustBytes(vec *rustBytes) { C.free_rust_bytes(*vec) } diff --git a/arbos/programs/testcompile.go b/arbos/programs/testcompile.go index 8a4e38444a..58afa228d5 100644 --- a/arbos/programs/testcompile.go +++ b/arbos/programs/testcompile.go @@ -35,10 +35,10 @@ func Wat2Wasm(wat []byte) ([]byte, error) { status := C.wat_to_wasm(goSlice(wat), output) if status != 0 { - return nil, fmt.Errorf("failed reading wat file: %v", string(output.intoBytes())) + return nil, fmt.Errorf("failed reading wat file: %v", string(rustBytesIntoBytes(output))) } - return output.intoBytes(), nil + return rustBytesIntoBytes(output), nil } func testCompileArch(store bool) error { @@ -66,7 +66,7 @@ func testCompileArch(store bool) error { cbool(nativeArm64)) if status != 0 { - return fmt.Errorf("failed setting compilation target arm: %v", string(output.intoBytes())) + return fmt.Errorf("failed setting compilation target arm: %v", string(rustBytesIntoBytes(output))) } status = C.stylus_target_set(goSlice(amd64CompileName), @@ -75,7 +75,7 @@ func testCompileArch(store bool) error { cbool(nativeAmd64)) if status != 0 { - return fmt.Errorf("failed setting compilation target amd: %v", string(output.intoBytes())) + return fmt.Errorf("failed setting compilation target amd: %v", string(rustBytesIntoBytes(output))) } source, err := os.ReadFile("../../arbitrator/stylus/tests/add.wat") @@ -107,7 +107,7 @@ func testCompileArch(store bool) error { output, ) if status == 0 { - return fmt.Errorf("succeeded compiling non-existent arch: %v", string(output.intoBytes())) + return fmt.Errorf("succeeded compiling non-existent arch: %v", string(rustBytesIntoBytes(output))) } status = C.stylus_compile( @@ -118,7 +118,7 @@ func testCompileArch(store bool) error { output, ) if status != 0 { - return fmt.Errorf("failed compiling native: %v", string(output.intoBytes())) + return fmt.Errorf("failed compiling native: %v", string(rustBytesIntoBytes(output))) } if store && !nativeAmd64 && !nativeArm64 { _, err := fmt.Printf("writing host file\n") @@ -126,7 +126,7 @@ func testCompileArch(store bool) error { return err } - err = os.WriteFile("../../target/testdata/host.bin", output.intoBytes(), 0644) + err = os.WriteFile("../../target/testdata/host.bin", rustBytesIntoBytes(output), 0644) if err != nil { return err } @@ -140,7 +140,7 @@ func testCompileArch(store bool) error { output, ) if status != 0 { - return fmt.Errorf("failed compiling arm: %v", string(output.intoBytes())) + return fmt.Errorf("failed compiling arm: %v", string(rustBytesIntoBytes(output))) } if store { _, err := fmt.Printf("writing arm file\n") @@ -148,7 +148,7 @@ func testCompileArch(store bool) error { return err } - err = os.WriteFile("../../target/testdata/arm64.bin", output.intoBytes(), 0644) + err = os.WriteFile("../../target/testdata/arm64.bin", rustBytesIntoBytes(output), 0644) if err != nil { return err } @@ -162,7 +162,7 @@ func testCompileArch(store bool) error { output, ) if status != 0 { - return fmt.Errorf("failed compiling amd: %v", string(output.intoBytes())) + return fmt.Errorf("failed compiling amd: %v", string(rustBytesIntoBytes(output))) } if store { _, err := fmt.Printf("writing amd64 file\n") @@ -170,7 +170,7 @@ func testCompileArch(store bool) error { return err } - err = os.WriteFile("../../target/testdata/amd64.bin", output.intoBytes(), 0644) + err = os.WriteFile("../../target/testdata/amd64.bin", rustBytesIntoBytes(output), 0644) if err != nil { return err } @@ -195,7 +195,7 @@ func resetNativeTarget() error { cbool(true)) if status != 0 { - return fmt.Errorf("failed setting compilation target arm: %v", string(output.intoBytes())) + return fmt.Errorf("failed setting compilation target arm: %v", string(rustBytesIntoBytes(output))) } return nil @@ -260,7 +260,7 @@ func testCompileLoad() error { return err } - _, msg, err := status.toResult(output.intoBytes(), true) + _, msg, err := status.toResult(rustBytesIntoBytes(output), true) if status == userFailure { err = fmt.Errorf("%w: %v", err, msg) } From 9027dc1f7e9437f06788f9ce9f27b76e9324a250 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 12 Dec 2024 09:48:32 -0300 Subject: [PATCH 089/187] Moves TestScheduleArbosUpgrade to its own file --- system_tests/arbos_upgrade_test.go | 64 ++++++++++++++++++++++++++++++ system_tests/precompile_test.go | 51 ------------------------ 2 files changed, 64 insertions(+), 51 deletions(-) create mode 100644 system_tests/arbos_upgrade_test.go diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go new file mode 100644 index 0000000000..084f962209 --- /dev/null +++ b/system_tests/arbos_upgrade_test.go @@ -0,0 +1,64 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +package arbtest + +import ( + "context" + "testing" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/offchainlabs/nitro/solgen/go/precompilesgen" +) + +func TestScheduleArbosUpgrade(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + builder := NewNodeBuilder(ctx).DefaultConfig(t, false) + cleanup := builder.Build(t) + defer cleanup() + + auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) + + arbOwnerPublic, err := precompilesgen.NewArbOwnerPublic(common.HexToAddress("0x6b"), builder.L2.Client) + Require(t, err, "could not bind ArbOwner contract") + + arbOwner, err := precompilesgen.NewArbOwner(common.HexToAddress("0x70"), builder.L2.Client) + Require(t, err, "could not bind ArbOwner contract") + + callOpts := &bind.CallOpts{Context: ctx} + scheduled, err := arbOwnerPublic.GetScheduledUpgrade(callOpts) + Require(t, err, "failed to call GetScheduledUpgrade before scheduling upgrade") + if scheduled.ArbosVersion != 0 || scheduled.ScheduledForTimestamp != 0 { + t.Errorf("expected no upgrade to be scheduled, got version %v timestamp %v", scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) + } + + // Schedule a noop upgrade, which should test GetScheduledUpgrade in the same way an already completed upgrade would. + tx, err := arbOwner.ScheduleArbOSUpgrade(&auth, 1, 1) + Require(t, err) + _, err = builder.L2.EnsureTxSucceeded(tx) + Require(t, err) + + scheduled, err = arbOwnerPublic.GetScheduledUpgrade(callOpts) + Require(t, err, "failed to call GetScheduledUpgrade after scheduling noop upgrade") + if scheduled.ArbosVersion != 0 || scheduled.ScheduledForTimestamp != 0 { + t.Errorf("expected completed scheduled upgrade to be ignored, got version %v timestamp %v", scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) + } + + // TODO: Once we have an ArbOS 30, test a real upgrade with it + // We can't test 11 -> 20 because 11 doesn't have the GetScheduledUpgrade method we want to test + var testVersion uint64 = 100 + var testTimestamp uint64 = 1 << 62 + tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, 100, 1<<62) + Require(t, err) + _, err = builder.L2.EnsureTxSucceeded(tx) + Require(t, err) + + scheduled, err = arbOwnerPublic.GetScheduledUpgrade(callOpts) + Require(t, err, "failed to call GetScheduledUpgrade after scheduling upgrade") + if scheduled.ArbosVersion != testVersion || scheduled.ScheduledForTimestamp != testTimestamp { + t.Errorf("expected upgrade to be scheduled for version %v timestamp %v, got version %v timestamp %v", testVersion, testTimestamp, scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) + } +} diff --git a/system_tests/precompile_test.go b/system_tests/precompile_test.go index 78f34df6c7..f0757a1a46 100644 --- a/system_tests/precompile_test.go +++ b/system_tests/precompile_test.go @@ -504,57 +504,6 @@ func TestGetBrotliCompressionLevel(t *testing.T) { } } -func TestScheduleArbosUpgrade(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - builder := NewNodeBuilder(ctx).DefaultConfig(t, false) - cleanup := builder.Build(t) - defer cleanup() - - auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) - - arbOwnerPublic, err := precompilesgen.NewArbOwnerPublic(common.HexToAddress("0x6b"), builder.L2.Client) - Require(t, err, "could not bind ArbOwner contract") - - arbOwner, err := precompilesgen.NewArbOwner(common.HexToAddress("0x70"), builder.L2.Client) - Require(t, err, "could not bind ArbOwner contract") - - callOpts := &bind.CallOpts{Context: ctx} - scheduled, err := arbOwnerPublic.GetScheduledUpgrade(callOpts) - Require(t, err, "failed to call GetScheduledUpgrade before scheduling upgrade") - if scheduled.ArbosVersion != 0 || scheduled.ScheduledForTimestamp != 0 { - t.Errorf("expected no upgrade to be scheduled, got version %v timestamp %v", scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) - } - - // Schedule a noop upgrade, which should test GetScheduledUpgrade in the same way an already completed upgrade would. - tx, err := arbOwner.ScheduleArbOSUpgrade(&auth, 1, 1) - Require(t, err) - _, err = builder.L2.EnsureTxSucceeded(tx) - Require(t, err) - - scheduled, err = arbOwnerPublic.GetScheduledUpgrade(callOpts) - Require(t, err, "failed to call GetScheduledUpgrade after scheduling noop upgrade") - if scheduled.ArbosVersion != 0 || scheduled.ScheduledForTimestamp != 0 { - t.Errorf("expected completed scheduled upgrade to be ignored, got version %v timestamp %v", scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) - } - - // TODO: Once we have an ArbOS 30, test a real upgrade with it - // We can't test 11 -> 20 because 11 doesn't have the GetScheduledUpgrade method we want to test - var testVersion uint64 = 100 - var testTimestamp uint64 = 1 << 62 - tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, 100, 1<<62) - Require(t, err) - _, err = builder.L2.EnsureTxSucceeded(tx) - Require(t, err) - - scheduled, err = arbOwnerPublic.GetScheduledUpgrade(callOpts) - Require(t, err, "failed to call GetScheduledUpgrade after scheduling upgrade") - if scheduled.ArbosVersion != testVersion || scheduled.ScheduledForTimestamp != testTimestamp { - t.Errorf("expected upgrade to be scheduled for version %v timestamp %v, got version %v timestamp %v", testVersion, testTimestamp, scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) - } -} - func TestArbStatistics(t *testing.T) { t.Parallel() From b37cd1f7ba4f3a6e321546fb9e19c991f83637f4 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 13 Dec 2024 10:53:28 -0300 Subject: [PATCH 090/187] Basic TestArbos11To32Upgrade --- system_tests/arbos_upgrade_test.go | 52 ++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go index 084f962209..111da1dabe 100644 --- a/system_tests/arbos_upgrade_test.go +++ b/system_tests/arbos_upgrade_test.go @@ -5,10 +5,13 @@ package arbtest import ( "context" + "math/big" "testing" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" ) @@ -62,3 +65,52 @@ func TestScheduleArbosUpgrade(t *testing.T) { t.Errorf("expected upgrade to be scheduled for version %v timestamp %v, got version %v timestamp %v", testVersion, testTimestamp, scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) } } + +func checkArbOSVersion(t *testing.T, builder *NodeBuilder, expectedVersion uint64, scenario string) { + statedb, err := builder.L2.ExecNode.Backend.ArbInterface().BlockChain().State() + Require(t, err, "could not get statedb", scenario) + state, err := arbosState.OpenSystemArbosState(statedb, nil, true) + Require(t, err, "could not open ArbOS state", scenario) + if state.ArbOSVersion() != expectedVersion { + t.Errorf("%s: expected ArbOS version %v, got %v", scenario, expectedVersion, state.ArbOSVersion()) + } + +} + +func TestArbos11To32Upgrade(t *testing.T) { + t.Parallel() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + initialVersion := uint64(11) + finalVersion := uint64(32) + + builder := NewNodeBuilder(ctx). + DefaultConfig(t, false). + WithArbOSVersion(initialVersion) + cleanup := builder.Build(t) + defer cleanup() + + checkArbOSVersion(t, builder, initialVersion, "initial") + + auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) + + arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, builder.L2.Client) + Require(t, err, "could not bind ArbOwner contract") + + tx, err := arbOwner.ScheduleArbOSUpgrade(&auth, finalVersion, 0) + Require(t, err) + _, err = builder.L2.EnsureTxSucceeded(tx) + Require(t, err) + + // generate a new block to trigger the upgrade + builder.L2Info.GenerateAccount("User2") + tx = builder.L2Info.PrepareTx("Owner", "User2", builder.L2Info.TransferGas, big.NewInt(1e12), nil) + err = builder.L2.Client.SendTransaction(ctx, tx) + Require(t, err) + _, err = builder.L2.EnsureTxSucceeded(tx) + Require(t, err) + + checkArbOSVersion(t, builder, finalVersion, "final") +} From 61ce80b3fe80c6abd24a61cf756a5cd32b695732 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 16 Dec 2024 10:38:26 -0300 Subject: [PATCH 091/187] Update contracts to have ArbOS11To32UpgradeTest --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index b140ed63ac..cd9b8d6afc 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit b140ed63acdb53cb906ffd1fa3c36fdbd474364e +Subproject commit cd9b8d6afce238d1cb12c8ce1952f745bead71ac From 658e2d1f108f9bd235dc0e4a9551533958ae6bb5 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 16 Dec 2024 10:47:50 -0300 Subject: [PATCH 092/187] Calls DeployArbOS11To32UpgradeTest --- system_tests/arbos_upgrade_test.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go index 111da1dabe..1194f3232f 100644 --- a/system_tests/arbos_upgrade_test.go +++ b/system_tests/arbos_upgrade_test.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/offchainlabs/nitro/arbos/arbosState" + "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" ) @@ -97,14 +98,19 @@ func TestArbos11To32Upgrade(t *testing.T) { auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, builder.L2.Client) - Require(t, err, "could not bind ArbOwner contract") + Require(t, err) + + _, tx, contract, err := mocksgen.DeployArbOS11To32UpgradeTest(&auth, builder.L2.Client) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, builder.L2.Client, tx) + Require(t, err) - tx, err := arbOwner.ScheduleArbOSUpgrade(&auth, finalVersion, 0) + tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, finalVersion, 0) Require(t, err) _, err = builder.L2.EnsureTxSucceeded(tx) Require(t, err) - // generate a new block to trigger the upgrade + // generates a new block to trigger the upgrade builder.L2Info.GenerateAccount("User2") tx = builder.L2Info.PrepareTx("Owner", "User2", builder.L2Info.TransferGas, big.NewInt(1e12), nil) err = builder.L2.Client.SendTransaction(ctx, tx) @@ -112,5 +118,9 @@ func TestArbos11To32Upgrade(t *testing.T) { _, err = builder.L2.EnsureTxSucceeded(tx) Require(t, err) + callOpts := &bind.CallOpts{Context: ctx} + err = contract.Mcopy(callOpts) + Require(t, err) + checkArbOSVersion(t, builder, finalVersion, "final") } From 61ab0c70e13e52a28b3907793fd3eee25892d0d4 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 16 Dec 2024 13:47:10 -0300 Subject: [PATCH 093/187] mcopy as a transaction instead of a call --- contracts | 2 +- system_tests/arbos_upgrade_test.go | 27 ++++++++++++++++----------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/contracts b/contracts index cd9b8d6afc..54ec0a90af 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit cd9b8d6afce238d1cb12c8ce1952f745bead71ac +Subproject commit 54ec0a90af2068d5c4e9b7865d87221aa12e6969 diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go index 1194f3232f..52660817fb 100644 --- a/system_tests/arbos_upgrade_test.go +++ b/system_tests/arbos_upgrade_test.go @@ -67,8 +67,8 @@ func TestScheduleArbosUpgrade(t *testing.T) { } } -func checkArbOSVersion(t *testing.T, builder *NodeBuilder, expectedVersion uint64, scenario string) { - statedb, err := builder.L2.ExecNode.Backend.ArbInterface().BlockChain().State() +func checkArbOSVersion(t *testing.T, testClient *TestClient, expectedVersion uint64, scenario string) { + statedb, err := testClient.ExecNode.Backend.ArbInterface().BlockChain().State() Require(t, err, "could not get statedb", scenario) state, err := arbosState.OpenSystemArbosState(statedb, nil, true) Require(t, err, "could not open ArbOS state", scenario) @@ -93,18 +93,25 @@ func TestArbos11To32Upgrade(t *testing.T) { cleanup := builder.Build(t) defer cleanup() - checkArbOSVersion(t, builder, initialVersion, "initial") - auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) - arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, builder.L2.Client) - Require(t, err) - + // deploys test contract _, tx, contract, err := mocksgen.DeployArbOS11To32UpgradeTest(&auth, builder.L2.Client) Require(t, err) _, err = EnsureTxSucceeded(ctx, builder.L2.Client, tx) Require(t, err) + checkArbOSVersion(t, builder.L2, initialVersion, "initial") + + // mcopy should revert since arbos 11 doesn't support it + _, err = contract.Mcopy(&auth) + if (err == nil) || (err.Error() != "invalid opcode: MCOPY") { + t.Fatalf("expected MCOPY to revert, got %v", err) + } + + // upgrade arbos to final version + arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, builder.L2.Client) + Require(t, err) tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, finalVersion, 0) Require(t, err) _, err = builder.L2.EnsureTxSucceeded(tx) @@ -118,9 +125,7 @@ func TestArbos11To32Upgrade(t *testing.T) { _, err = builder.L2.EnsureTxSucceeded(tx) Require(t, err) - callOpts := &bind.CallOpts{Context: ctx} - err = contract.Mcopy(callOpts) + checkArbOSVersion(t, builder.L2, finalVersion, "final") + _, err = contract.Mcopy(&auth) Require(t, err) - - checkArbOSVersion(t, builder, finalVersion, "final") } From 5dc83ac5888cfd182d98d47a357adf88265d6fd8 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 16 Dec 2024 15:41:58 -0300 Subject: [PATCH 094/187] TestArbos11To32Upgrade use L1 --- system_tests/arbos_upgrade_test.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go index 52660817fb..418046ed73 100644 --- a/system_tests/arbos_upgrade_test.go +++ b/system_tests/arbos_upgrade_test.go @@ -88,13 +88,21 @@ func TestArbos11To32Upgrade(t *testing.T) { finalVersion := uint64(32) builder := NewNodeBuilder(ctx). - DefaultConfig(t, false). + DefaultConfig(t, true). WithArbOSVersion(initialVersion) cleanup := builder.Build(t) defer cleanup() auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) + // makes Owner a chain owner + arbDebug, err := precompilesgen.NewArbDebug(types.ArbDebugAddress, builder.L2.Client) + Require(t, err) + tx, err := arbDebug.BecomeChainOwner(&auth) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, builder.L2.Client, tx) + Require(t, err) + // deploys test contract _, tx, contract, err := mocksgen.DeployArbOS11To32UpgradeTest(&auth, builder.L2.Client) Require(t, err) From 1fe4c311d0c64ef04ffd3b4b346f45318d0fe815 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 16 Dec 2024 16:13:00 -0300 Subject: [PATCH 095/187] Tries mcopy tx in the same block that arbos upgrades will take effect --- system_tests/arbos_upgrade_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go index 418046ed73..ce9accaed1 100644 --- a/system_tests/arbos_upgrade_test.go +++ b/system_tests/arbos_upgrade_test.go @@ -125,13 +125,13 @@ func TestArbos11To32Upgrade(t *testing.T) { _, err = builder.L2.EnsureTxSucceeded(tx) Require(t, err) - // generates a new block to trigger the upgrade - builder.L2Info.GenerateAccount("User2") - tx = builder.L2Info.PrepareTx("Owner", "User2", builder.L2Info.TransferGas, big.NewInt(1e12), nil) - err = builder.L2.Client.SendTransaction(ctx, tx) - Require(t, err) - _, err = builder.L2.EnsureTxSucceeded(tx) - Require(t, err) + // // generates a new block to trigger the upgrade + // builder.L2Info.GenerateAccount("User2") + // tx = builder.L2Info.PrepareTx("Owner", "User2", builder.L2Info.TransferGas, big.NewInt(1e12), nil) + // err = builder.L2.Client.SendTransaction(ctx, tx) + // Require(t, err) + // _, err = builder.L2.EnsureTxSucceeded(tx) + // Require(t, err) checkArbOSVersion(t, builder.L2, finalVersion, "final") _, err = contract.Mcopy(&auth) From 1b3734e510333effb1bc26b31b929a468c1b637a Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 17 Dec 2024 10:42:16 -0300 Subject: [PATCH 096/187] Adds replica node to TestArbos11To32Upgrade --- system_tests/arbos_upgrade_test.go | 87 +++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 20 deletions(-) diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go index ce9accaed1..e6be0de16c 100644 --- a/system_tests/arbos_upgrade_test.go +++ b/system_tests/arbos_upgrade_test.go @@ -6,11 +6,14 @@ package arbtest import ( "context" "math/big" + "strings" "testing" + "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" @@ -92,48 +95,92 @@ func TestArbos11To32Upgrade(t *testing.T) { WithArbOSVersion(initialVersion) cleanup := builder.Build(t) defer cleanup() + seqTestClient := builder.L2 auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) + auth.GasLimit = 32000000 // makes Owner a chain owner - arbDebug, err := precompilesgen.NewArbDebug(types.ArbDebugAddress, builder.L2.Client) + arbDebug, err := precompilesgen.NewArbDebug(types.ArbDebugAddress, seqTestClient.Client) Require(t, err) tx, err := arbDebug.BecomeChainOwner(&auth) Require(t, err) - _, err = EnsureTxSucceeded(ctx, builder.L2.Client, tx) + _, err = EnsureTxSucceeded(ctx, seqTestClient.Client, tx) Require(t, err) // deploys test contract - _, tx, contract, err := mocksgen.DeployArbOS11To32UpgradeTest(&auth, builder.L2.Client) + _, tx, contract, err := mocksgen.DeployArbOS11To32UpgradeTest(&auth, seqTestClient.Client) Require(t, err) - _, err = EnsureTxSucceeded(ctx, builder.L2.Client, tx) + _, err = EnsureTxSucceeded(ctx, seqTestClient.Client, tx) Require(t, err) - checkArbOSVersion(t, builder.L2, initialVersion, "initial") + // build replica node + replicaConfig := arbnode.ConfigDefaultL1Test() + replicaConfig.BatchPoster.Enable = false + replicaTestClient, replicaCleanup := builder.Build2ndNode(t, &SecondNodeParams{nodeConfig: replicaConfig}) + defer replicaCleanup() - // mcopy should revert since arbos 11 doesn't support it - _, err = contract.Mcopy(&auth) - if (err == nil) || (err.Error() != "invalid opcode: MCOPY") { - t.Fatalf("expected MCOPY to revert, got %v", err) + checkArbOSVersion(t, seqTestClient, initialVersion, "initial sequencer") + checkArbOSVersion(t, replicaTestClient, initialVersion, "initial replica") + + // mcopy should fail since arbos 11 doesn't support it + tx, err = contract.Mcopy(&auth) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + if (err == nil) || !strings.Contains(err.Error(), "invalid opcode: MCOPY") { + t.Errorf("expected MCOPY to fail, got %v", err) } + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) // upgrade arbos to final version - arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, builder.L2.Client) + arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, seqTestClient.Client) Require(t, err) tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, finalVersion, 0) Require(t, err) - _, err = builder.L2.EnsureTxSucceeded(tx) + _, err = seqTestClient.EnsureTxSucceeded(tx) + Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + + // checks upgrade worked + tx, err = contract.Mcopy(&auth) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + + checkArbOSVersion(t, seqTestClient, finalVersion, "final sequencer") + checkArbOSVersion(t, replicaTestClient, finalVersion, "final replica") + + // generates more blocks + builder.L2Info.GenerateAccount("User2") + for i := 0; i < 3; i++ { + tx = builder.L2Info.PrepareTx("Owner", "User2", builder.L2Info.TransferGas, big.NewInt(1e12), nil) + err = seqTestClient.Client.SendTransaction(ctx, tx) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + } - // // generates a new block to trigger the upgrade - // builder.L2Info.GenerateAccount("User2") - // tx = builder.L2Info.PrepareTx("Owner", "User2", builder.L2Info.TransferGas, big.NewInt(1e12), nil) - // err = builder.L2.Client.SendTransaction(ctx, tx) - // Require(t, err) - // _, err = builder.L2.EnsureTxSucceeded(tx) - // Require(t, err) + blockNumberSeq, err := seqTestClient.Client.BlockNumber(ctx) + Require(t, err) + blockNumberReplica, err := replicaTestClient.Client.BlockNumber(ctx) + Require(t, err) + if blockNumberSeq != blockNumberReplica { + t.Errorf("expected sequencer and replica to have same block number, got %v and %v", blockNumberSeq, blockNumberReplica) + } + // #nosec G115 + blockNumber := big.NewInt(int64(blockNumberSeq)) - checkArbOSVersion(t, builder.L2, finalVersion, "final") - _, err = contract.Mcopy(&auth) + blockSeq, err := seqTestClient.Client.BlockByNumber(ctx, blockNumber) Require(t, err) + blockReplica, err := replicaTestClient.Client.BlockByNumber(ctx, blockNumber) + Require(t, err) + if blockSeq.Hash() != blockReplica.Hash() { + t.Errorf("expected sequencer and replica to have same block hash, got %v and %v", blockSeq.Hash(), blockReplica.Hash()) + } } From 9f9038a80f5d8ab45bf0d38a0b906dfe934ce021 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 17 Dec 2024 14:28:30 -0300 Subject: [PATCH 097/187] Fix lint issue --- system_tests/arbos_upgrade_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go index e6be0de16c..d2b2b7b9af 100644 --- a/system_tests/arbos_upgrade_test.go +++ b/system_tests/arbos_upgrade_test.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/solgen/go/mocksgen" From 86ca279098d74452428cc1f4532fc9e0fcbcab91 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Tue, 17 Dec 2024 15:05:26 -0300 Subject: [PATCH 098/187] Update contracts --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 54ec0a90af..550bfe608a 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 54ec0a90af2068d5c4e9b7865d87221aa12e6969 +Subproject commit 550bfe608a9d9009518a52c502389270ed14e273 From ffdce5c13833c00b0a8f58463b95209e66cdc0aa Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Tue, 17 Dec 2024 14:01:58 -0600 Subject: [PATCH 099/187] edits --- nitro-testnode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nitro-testnode b/nitro-testnode index fa19e22104..c177f28234 160000 --- a/nitro-testnode +++ b/nitro-testnode @@ -1 +1 @@ -Subproject commit fa19e2210403ad24519ea46c2d337f54a9f47593 +Subproject commit c177f282340285bcdae2d6a784547e2bb8b97498 From 4598b50d56c4d151581c1d249846ccfbd755987d Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Wed, 18 Dec 2024 09:24:44 -0300 Subject: [PATCH 100/187] Update contracts --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 550bfe608a..faf77b348e 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 550bfe608a9d9009518a52c502389270ed14e273 +Subproject commit faf77b348e52338cca22852393feedc7b550e9db From c139ee1ed2bd2076fbe38ba08f03f2b3293cc2ac Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Wed, 18 Dec 2024 10:11:54 -0300 Subject: [PATCH 101/187] Removes TODO --- system_tests/arbos_upgrade_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go index d2b2b7b9af..805def1781 100644 --- a/system_tests/arbos_upgrade_test.go +++ b/system_tests/arbos_upgrade_test.go @@ -55,7 +55,6 @@ func TestScheduleArbosUpgrade(t *testing.T) { t.Errorf("expected completed scheduled upgrade to be ignored, got version %v timestamp %v", scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) } - // TODO: Once we have an ArbOS 30, test a real upgrade with it // We can't test 11 -> 20 because 11 doesn't have the GetScheduledUpgrade method we want to test var testVersion uint64 = 100 var testTimestamp uint64 = 1 << 62 From aa0da722dfc71984ca10b5a48a85abe9d31f9fab Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Wed, 18 Dec 2024 16:05:09 -0300 Subject: [PATCH 102/187] stylus_benchmark: change args to --output-wat-dir-path --cenario --- .../tools/stylus_benchmark/src/benchmark.rs | 9 +-- .../stylus_benchmark/src/generate_wats.rs | 43 ----------- arbitrator/tools/stylus_benchmark/src/main.rs | 41 +++++----- .../tools/stylus_benchmark/src/scenario.rs | 75 +++++++++++++++++++ 4 files changed, 95 insertions(+), 73 deletions(-) delete mode 100644 arbitrator/tools/stylus_benchmark/src/generate_wats.rs create mode 100644 arbitrator/tools/stylus_benchmark/src/scenario.rs diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index 8e3085b55c..1e5dd0f332 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -8,7 +8,6 @@ use jit::program::{ exec_program, get_last_msg, pop_with_wasm_env, start_program_with_wasm_env, JitConfig, }; use prover::programs::{config::CompileConfig, config::PricingParams, prelude::StylusConfig}; -use std::path::PathBuf; use std::str; use stylus::native::compile; use wasmer::Target; @@ -77,13 +76,7 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { (elapsed, ink) } -pub fn benchmark(wat_path: PathBuf) -> eyre::Result<()> { - println!("Benchmarking {:?}", wat_path); - - let wat = match std::fs::read(wat_path) { - Ok(wat) => wat, - Err(err) => panic!("failed to read: {err}"), - }; +pub fn benchmark(wat: Vec) -> eyre::Result<()> { let wasm = wasmer::wat2wasm(&wat)?; let compiled_module = compile(&wasm, 2, true, Target::default())?; diff --git a/arbitrator/tools/stylus_benchmark/src/generate_wats.rs b/arbitrator/tools/stylus_benchmark/src/generate_wats.rs deleted file mode 100644 index 3656f8cf40..0000000000 --- a/arbitrator/tools/stylus_benchmark/src/generate_wats.rs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2021-2024, Offchain Labs, Inc. -// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE - -use std::fs::File; -use std::io::Write; -use std::path::PathBuf; - -fn generate_add_i32_wat(mut out_path: PathBuf) -> eyre::Result<()> { - let number_of_ops = 20_000_000; - - out_path.push("add_i32.wat"); - println!( - "Generating {:?}, number_of_ops: {:?}", - out_path, number_of_ops - ); - - let mut file = File::create(out_path)?; - - file.write_all(b"(module\n")?; - file.write_all(b" (import \"debug\" \"toggle_benchmark\" (func $toggle_benchmark))\n")?; - file.write_all(b" (memory (export \"memory\") 0 0)\n")?; - file.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n")?; - - file.write_all(b" call $toggle_benchmark\n")?; - - file.write_all(b" i32.const 1\n")?; - for _ in 0..number_of_ops { - file.write_all(b" i32.const 1\n")?; - file.write_all(b" i32.add\n")?; - } - - file.write_all(b" call $toggle_benchmark\n")?; - - file.write_all(b" drop\n")?; - file.write_all(b" i32.const 0)\n")?; - file.write_all(b")")?; - - Ok(()) -} - -pub fn generate_wats(out_path: PathBuf) -> eyre::Result<()> { - return generate_add_i32_wat(out_path); -} diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index 9df77f25c8..e945ad69ab 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -1,37 +1,34 @@ // Copyright 2021-2024, Offchain Labs, Inc. // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE -use clap::{Parser, Subcommand}; +use clap::Parser; use std::path::PathBuf; mod benchmark; -mod generate_wats; +mod scenario; -#[derive(Debug, Parser)] -#[command(name = "stylus_benchmark")] -struct Cli { - #[command(subcommand)] - command: Commands, -} +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +struct Args { + #[arg(short, long)] + output_wat_dir_path: Option, -#[derive(Debug, Subcommand)] -enum Commands { - #[command(arg_required_else_help = true)] - Benchmark { wat_path: PathBuf }, - GenerateWats { - #[arg(value_name = "OUT_PATH")] - out_path: PathBuf, - }, + #[arg(short, long)] + scenario: Option, } fn main() -> eyre::Result<()> { - let args = Cli::parse(); - match args.command { - Commands::Benchmark { wat_path } => { - return benchmark::benchmark(wat_path); + let args = Args::parse(); + + match args.scenario { + Some(scenario) => { + println!("Benchmarking {:?}", scenario); + let wat = scenario::generate_wat(scenario, args.output_wat_dir_path); + benchmark::benchmark(wat) } - Commands::GenerateWats { out_path } => { - return generate_wats::generate_wats(out_path); + None => { + println!("No scenario specified, benchmarking all scenarios"); + Ok(()) } } } diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs new file mode 100644 index 0000000000..3256aa2320 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -0,0 +1,75 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum Scenario { + AddI32, +} + +const ADD_I32: &str = "add_i32"; + +impl std::fmt::Display for Scenario { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let s = match self { + Self::AddI32 => ADD_I32, + }; + s.fmt(f) + } +} + +impl std::str::FromStr for Scenario { + type Err = String; + + fn from_str(s: &str) -> Result { + match s { + ADD_I32 => Ok(Self::AddI32), + _ => Err(format!("Unknown scenario: {s}")), + } + } +} + +fn generate_add_i32_wat() -> Vec { + let number_of_ops = 20_000; + + let mut wat = Vec::new(); + + wat.write_all(b"(module\n").unwrap(); + wat.write_all(b" (import \"debug\" \"toggle_benchmark\" (func $toggle_benchmark))\n").unwrap(); + wat.write_all(b" (memory (export \"memory\") 0 0)\n").unwrap(); + wat.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n").unwrap(); + + wat.write_all(b" call $toggle_benchmark\n").unwrap(); + + wat.write_all(b" i32.const 1\n").unwrap(); + for _ in 0..number_of_ops { + wat.write_all(b" i32.const 1\n").unwrap(); + wat.write_all(b" i32.add\n").unwrap(); + } + + wat.write_all(b" call $toggle_benchmark\n").unwrap(); + + wat.write_all(b" drop\n").unwrap(); + wat.write_all(b" i32.const 0)\n").unwrap(); + wat.write_all(b")").unwrap(); + + wat +} + +pub fn generate_wat(scenario: Scenario, output_wat_dir_path: Option) -> Vec { + let wat = match scenario { + Scenario::AddI32 => generate_add_i32_wat(), + }; + + if let Some(output_wat_dir_path) = output_wat_dir_path { + let mut output_wat_path = output_wat_dir_path; + output_wat_path.push(format!("{:?}.wat", scenario)); + let mut file = File::create(output_wat_path).unwrap(); + file.write_all(&wat).unwrap(); + } + + wat +} From f7bacf667afd7b6fcb40516a2378e424c177b9f1 Mon Sep 17 00:00:00 2001 From: thirdkeyword Date: Thu, 19 Dec 2024 14:15:19 +0800 Subject: [PATCH 103/187] chore: fix some problematic method name and typos in comment Signed-off-by: thirdkeyword --- cmd/datool/datool.go | 2 +- execution/nodeInterface/NodeInterface.go | 2 +- relay/relay_stress_test.go | 2 +- system_tests/outbox_test.go | 2 +- system_tests/seqinbox_test.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/datool/datool.go b/cmd/datool/datool.go index 06f94dc952..2eb1e95660 100644 --- a/cmd/datool/datool.go +++ b/cmd/datool/datool.go @@ -99,7 +99,7 @@ func parseClientStoreConfig(args []string) (*ClientStoreConfig, error) { f.String("url", "", "URL of DAS server to connect to") f.String("message", "", "message to send") f.Int("random-message-size", 0, "send a message of a specified number of random bytes") - f.String("signing-key", "", "ecdsa private key to sign the message with, treated as a hex string if prefixed with 0x otherise treated as a file; if not specified the message is not signed") + f.String("signing-key", "", "ecdsa private key to sign the message with, treated as a hex string if prefixed with 0x otherwise treated as a file; if not specified the message is not signed") f.String("signing-wallet", "", "wallet containing ecdsa key to sign the message with") f.String("signing-wallet-password", genericconf.PASSWORD_NOT_SET, "password to unlock the wallet, if not specified the user is prompted for the password") f.Duration("das-retention-period", 24*time.Hour, "The period which DASes are requested to retain the stored batches.") diff --git a/execution/nodeInterface/NodeInterface.go b/execution/nodeInterface/NodeInterface.go index 20282f8231..189640d5d1 100644 --- a/execution/nodeInterface/NodeInterface.go +++ b/execution/nodeInterface/NodeInterface.go @@ -405,7 +405,7 @@ func (n NodeInterface) ConstructOutboxProof(c ctx, evm mech, size, leaf uint64) if !balanced { // This tree isn't balanced, so we'll need to use the partials to recover the missing info. - // To do this, we'll walk the boundry of what's known, computing hashes along the way + // To do this, we'll walk the boundary of what's known, computing hashes along the way step := *minPartialPlace step.Leaf += 1 << step.Level // we start on the min partial's zero-hash sibling diff --git a/relay/relay_stress_test.go b/relay/relay_stress_test.go index 93ba510193..e2cff07341 100644 --- a/relay/relay_stress_test.go +++ b/relay/relay_stress_test.go @@ -93,7 +93,7 @@ func (ts *dummyTxStreamer) AddBroadcastMessages(feedMessages []*message.Broadcas time.Sleep(50 * time.Millisecond) if !ts.logConnection { ts.logConnection = true - log.Info("test client is succesfully receiving messages", "client_Id", ts.id, "msg_size", feedMessages[0].Size()) + log.Info("test client is successfully receiving messages", "client_Id", ts.id, "msg_size", feedMessages[0].Size()) } return nil } diff --git a/system_tests/outbox_test.go b/system_tests/outbox_test.go index 10d1ebec42..2b3ff38da1 100644 --- a/system_tests/outbox_test.go +++ b/system_tests/outbox_test.go @@ -283,7 +283,7 @@ func TestOutboxProofs(t *testing.T) { if !balanced { // This tree isn't balanced, so we'll need to use the partials to recover the missing info. - // To do this, we'll walk the boundry of what's known, computing hashes along the way + // To do this, we'll walk the boundary of what's known, computing hashes along the way zero := common.Hash{} diff --git a/system_tests/seqinbox_test.go b/system_tests/seqinbox_test.go index a9f66b0e2f..44d96f39e7 100644 --- a/system_tests/seqinbox_test.go +++ b/system_tests/seqinbox_test.go @@ -353,7 +353,7 @@ func testSequencerInboxReaderImpl(t *testing.T, validator bool) { AfterDelayedMessagesRead: 1, }) if diff := diffAccessList(accessed, *wantAL); diff != "" { - t.Errorf("Access list mistmatch:\n%s\n", diff) + t.Errorf("Access list mismatch:\n%s\n", diff) } if i%5 == 0 { tx, err = seqInbox.AddSequencerL2Batch(&seqOpts, big.NewInt(int64(len(blockStates))), batchData, big.NewInt(1), gasRefunderAddr, big.NewInt(0), big.NewInt(0)) From ecb51720a309505599f2453a3f45e96802b04e98 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 19 Dec 2024 09:26:59 -0300 Subject: [PATCH 104/187] Uses strum in stylus_benchmark --- arbitrator/tools/stylus_benchmark/Cargo.lock | 27 ++++++++++++++++++ arbitrator/tools/stylus_benchmark/Cargo.toml | 2 ++ .../tools/stylus_benchmark/src/scenario.rs | 28 +++---------------- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/Cargo.lock b/arbitrator/tools/stylus_benchmark/Cargo.lock index 3e13d831bb..c02bcf6122 100644 --- a/arbitrator/tools/stylus_benchmark/Cargo.lock +++ b/arbitrator/tools/stylus_benchmark/Cargo.lock @@ -1664,6 +1664,12 @@ dependencies = [ "semver", ] +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + [[package]] name = "ryu" version = "1.0.18" @@ -1904,6 +1910,25 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.87", +] + [[package]] name = "stylus" version = "0.1.0" @@ -1940,6 +1965,8 @@ dependencies = [ "eyre", "jit", "prover", + "strum", + "strum_macros", "stylus", "wasmer", "wasmer-compiler-cranelift", diff --git a/arbitrator/tools/stylus_benchmark/Cargo.toml b/arbitrator/tools/stylus_benchmark/Cargo.toml index 4f9ed74d46..e193fc0ca8 100644 --- a/arbitrator/tools/stylus_benchmark/Cargo.toml +++ b/arbitrator/tools/stylus_benchmark/Cargo.toml @@ -12,3 +12,5 @@ arbutil = { path = "../../arbutil/" } prover = { path = "../../prover/", default-features = false, features = ["native"] } stylus = { path = "../../stylus/", default-features = false } clap = { version = "4.4.8", features = ["derive"] } +strum = "0.26" +strum_macros = "0.26" diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index 3256aa2320..a6c402046f 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -4,34 +4,14 @@ use std::fs::File; use std::io::Write; use std::path::PathBuf; +use strum_macros::{EnumString, Display}; -#[derive(Copy, Clone, PartialEq, Eq, Debug)] +#[derive(Copy, Clone, PartialEq, Eq, Debug, EnumString, Display)] pub enum Scenario { + #[strum(serialize = "add_i32")] AddI32, } -const ADD_I32: &str = "add_i32"; - -impl std::fmt::Display for Scenario { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let s = match self { - Self::AddI32 => ADD_I32, - }; - s.fmt(f) - } -} - -impl std::str::FromStr for Scenario { - type Err = String; - - fn from_str(s: &str) -> Result { - match s { - ADD_I32 => Ok(Self::AddI32), - _ => Err(format!("Unknown scenario: {s}")), - } - } -} - fn generate_add_i32_wat() -> Vec { let number_of_ops = 20_000; @@ -66,7 +46,7 @@ pub fn generate_wat(scenario: Scenario, output_wat_dir_path: Option) -> if let Some(output_wat_dir_path) = output_wat_dir_path { let mut output_wat_path = output_wat_dir_path; - output_wat_path.push(format!("{:?}.wat", scenario)); + output_wat_path.push(format!("{}.wat", scenario)); let mut file = File::create(output_wat_path).unwrap(); file.write_all(&wat).unwrap(); } From 486cc67edd093a95d43a71c73a9b43af5fb10a26 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 19 Dec 2024 09:44:38 -0300 Subject: [PATCH 105/187] Run all scenarios in stylus_benchmark --- arbitrator/tools/stylus_benchmark/src/main.rs | 24 ++++++++++++++----- .../tools/stylus_benchmark/src/scenario.rs | 13 ++++++---- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index e945ad69ab..da088495d1 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -3,6 +3,7 @@ use clap::Parser; use std::path::PathBuf; +use strum::IntoEnumIterator; mod benchmark; mod scenario; @@ -17,17 +18,28 @@ struct Args { scenario: Option, } +fn handle_scenario( + scenario: scenario::Scenario, + output_wat_dir_path: Option, +) -> eyre::Result<()> { + println!("Benchmarking {}", scenario); + let wat = scenario::generate_wat(scenario, output_wat_dir_path); + benchmark::benchmark(wat) +} + fn main() -> eyre::Result<()> { let args = Args::parse(); match args.scenario { - Some(scenario) => { - println!("Benchmarking {:?}", scenario); - let wat = scenario::generate_wat(scenario, args.output_wat_dir_path); - benchmark::benchmark(wat) - } + Some(scenario) => handle_scenario(scenario, args.output_wat_dir_path), None => { - println!("No scenario specified, benchmarking all scenarios"); + println!("No scenario specified, benchmarking all scenarios\n"); + for scenario in scenario::Scenario::iter() { + let benchmark_result = handle_scenario(scenario, args.output_wat_dir_path.clone()); + if let Err(err) = benchmark_result { + return Err(err); + } + } Ok(()) } } diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index a6c402046f..5bc0999910 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -4,9 +4,9 @@ use std::fs::File; use std::io::Write; use std::path::PathBuf; -use strum_macros::{EnumString, Display}; +use strum_macros::{Display, EnumIter, EnumString}; -#[derive(Copy, Clone, PartialEq, Eq, Debug, EnumString, Display)] +#[derive(Copy, Clone, PartialEq, Eq, Debug, EnumString, Display, EnumIter)] pub enum Scenario { #[strum(serialize = "add_i32")] AddI32, @@ -18,9 +18,12 @@ fn generate_add_i32_wat() -> Vec { let mut wat = Vec::new(); wat.write_all(b"(module\n").unwrap(); - wat.write_all(b" (import \"debug\" \"toggle_benchmark\" (func $toggle_benchmark))\n").unwrap(); - wat.write_all(b" (memory (export \"memory\") 0 0)\n").unwrap(); - wat.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n").unwrap(); + wat.write_all(b" (import \"debug\" \"toggle_benchmark\" (func $toggle_benchmark))\n") + .unwrap(); + wat.write_all(b" (memory (export \"memory\") 0 0)\n") + .unwrap(); + wat.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n") + .unwrap(); wat.write_all(b" call $toggle_benchmark\n").unwrap(); From 03e8315c2c0cf87f61227edd518983991bdb3680 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 19 Dec 2024 10:05:51 -0300 Subject: [PATCH 106/187] Do not import functions in stylus_benchmark --- .../tools/stylus_benchmark/src/benchmark.rs | 16 +++++++--------- arbitrator/tools/stylus_benchmark/src/main.rs | 13 +++++++------ .../tools/stylus_benchmark/src/scenario.rs | 1 + 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index 1e5dd0f332..20c41c348e 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -4,12 +4,10 @@ use arbutil::evm::{api::Ink, EvmData}; use core::time::Duration; use jit::machine::WasmEnv; -use jit::program::{ - exec_program, get_last_msg, pop_with_wasm_env, start_program_with_wasm_env, JitConfig, -}; +use jit::program::JitConfig; use prover::programs::{config::CompileConfig, config::PricingParams, prelude::StylusConfig}; use std::str; -use stylus::native::compile; +use stylus::native; use wasmer::Target; const EVM_API_METHOD_REQ_OFFSET: u32 = 0x10000000; @@ -47,7 +45,7 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { let exec = &mut WasmEnv::default(); - let module = exec_program( + let module = jit::program::exec_program( exec, compiled_module.into(), calldata, @@ -57,10 +55,10 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { ) .unwrap(); - let req_id = start_program_with_wasm_env(exec, module).unwrap(); - let msg = get_last_msg(exec, req_id).unwrap(); + let req_id = jit::program::start_program_with_wasm_env(exec, module).unwrap(); + let msg = jit::program::get_last_msg(exec, req_id).unwrap(); if msg.req_type < EVM_API_METHOD_REQ_OFFSET { - let _ = pop_with_wasm_env(exec); + let _ = jit::program::pop_with_wasm_env(exec); let req_data = msg.req_data[8..].to_vec(); check_result(msg.req_type, &req_data); @@ -79,7 +77,7 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { pub fn benchmark(wat: Vec) -> eyre::Result<()> { let wasm = wasmer::wat2wasm(&wat)?; - let compiled_module = compile(&wasm, 2, true, Target::default())?; + let compiled_module = native::compile(&wasm, 2, true, Target::default())?; let mut durations: Vec = Vec::new(); let mut ink_spent = Ink(0); diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index da088495d1..fc5ed16637 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -1,13 +1,14 @@ // Copyright 2021-2024, Offchain Labs, Inc. // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE +mod benchmark; +mod scenario; + use clap::Parser; +use scenario::Scenario; use std::path::PathBuf; use strum::IntoEnumIterator; -mod benchmark; -mod scenario; - #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args { @@ -15,11 +16,11 @@ struct Args { output_wat_dir_path: Option, #[arg(short, long)] - scenario: Option, + scenario: Option, } fn handle_scenario( - scenario: scenario::Scenario, + scenario: Scenario, output_wat_dir_path: Option, ) -> eyre::Result<()> { println!("Benchmarking {}", scenario); @@ -34,7 +35,7 @@ fn main() -> eyre::Result<()> { Some(scenario) => handle_scenario(scenario, args.output_wat_dir_path), None => { println!("No scenario specified, benchmarking all scenarios\n"); - for scenario in scenario::Scenario::iter() { + for scenario in Scenario::iter() { let benchmark_result = handle_scenario(scenario, args.output_wat_dir_path.clone()); if let Err(err) = benchmark_result { return Err(err); diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index 5bc0999910..8b6e837905 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -47,6 +47,7 @@ pub fn generate_wat(scenario: Scenario, output_wat_dir_path: Option) -> Scenario::AddI32 => generate_add_i32_wat(), }; + // print wat to file if needed if let Some(output_wat_dir_path) = output_wat_dir_path { let mut output_wat_path = output_wat_dir_path; output_wat_path.push(format!("{}.wat", scenario)); From 6d59589c679b0a5f0a07a06fb167779f6e1c9761 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 19 Dec 2024 15:57:56 -0300 Subject: [PATCH 107/187] Adds comment to Benchmark struct --- arbitrator/arbutil/src/benchmark.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/arbitrator/arbutil/src/benchmark.rs b/arbitrator/arbutil/src/benchmark.rs index d01713090b..aba45d23ed 100644 --- a/arbitrator/arbutil/src/benchmark.rs +++ b/arbitrator/arbutil/src/benchmark.rs @@ -5,6 +5,7 @@ use crate::evm::api::Ink; use derivative::Derivative; use std::time::{Duration, Instant}; +// Benchmark is used to track the performance of a block of code in stylus #[derive(Derivative, Clone, Copy)] #[derivative(Debug)] pub struct Benchmark { From babadc9b77d68e824959af8b1473a036f5226ce1 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 19 Dec 2024 15:58:09 -0300 Subject: [PATCH 108/187] Uses loop in benchmark programs --- .../tools/stylus_benchmark/src/scenario.rs | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index 8b6e837905..6bc6f068fc 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -13,29 +13,50 @@ pub enum Scenario { } fn generate_add_i32_wat() -> Vec { - let number_of_ops = 20_000; + let number_of_loop_iterations = 10_000; + let number_of_ops_per_loop_iteration = 2000; + let number_of_ops = number_of_loop_iterations * number_of_ops_per_loop_iteration; let mut wat = Vec::new(); + // preamble wat.write_all(b"(module\n").unwrap(); wat.write_all(b" (import \"debug\" \"toggle_benchmark\" (func $toggle_benchmark))\n") .unwrap(); wat.write_all(b" (memory (export \"memory\") 0 0)\n") .unwrap(); + wat.write_all(b" (global $ops_counter (mut i32) (i32.const 0))\n") + .unwrap(); wat.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n") .unwrap(); wat.write_all(b" call $toggle_benchmark\n").unwrap(); - wat.write_all(b" i32.const 1\n").unwrap(); - for _ in 0..number_of_ops { - wat.write_all(b" i32.const 1\n").unwrap(); - wat.write_all(b" i32.add\n").unwrap(); + // ops to be benchmarked + wat.write_all(b" (loop $loop\n").unwrap(); + wat.write_all(b" i32.const 0\n").unwrap(); + for _ in 0..number_of_ops_per_loop_iteration { + wat.write_all(b" i32.const 1\n").unwrap(); + wat.write_all(b" i32.add\n").unwrap(); } + wat.write_all(b" drop\n").unwrap(); + + // update ops_counter + wat.write_all(b" global.get $ops_counter\n").unwrap(); + wat.write_all(format!(" i32.const {}\n", number_of_ops_per_loop_iteration).as_bytes()) + .unwrap(); + wat.write_all(b" i32.add\n").unwrap(); + wat.write_all(b" global.set $ops_counter\n").unwrap(); + + // check if we need to continue looping + wat.write_all(b" global.get $ops_counter\n").unwrap(); + wat.write_all(format!(" i32.const {}\n", number_of_ops).as_bytes()) + .unwrap(); + wat.write_all(b" i32.lt_s\n").unwrap(); + wat.write_all(b" br_if $loop)\n").unwrap(); wat.write_all(b" call $toggle_benchmark\n").unwrap(); - wat.write_all(b" drop\n").unwrap(); wat.write_all(b" i32.const 0)\n").unwrap(); wat.write_all(b")").unwrap(); From b2aedea8a49b0a0c1652de175946c70aba550686 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 19 Dec 2024 16:22:42 -0300 Subject: [PATCH 109/187] Update contracts --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index faf77b348e..763bd77906 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit faf77b348e52338cca22852393feedc7b550e9db +Subproject commit 763bd77906b7677da691eaa31c6e195d455197a4 From 71bd119e7aea567a8d4f2583bf5058906f8b673f Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Thu, 19 Dec 2024 16:25:43 -0300 Subject: [PATCH 110/187] Adds pre-bold as a nitro-contracts branch exception in submodule-pin-check --- .github/workflows/submodule-pin-check.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/submodule-pin-check.yml b/.github/workflows/submodule-pin-check.yml index 60dd8ad827..a3cfc3b4f0 100644 --- a/.github/workflows/submodule-pin-check.yml +++ b/.github/workflows/submodule-pin-check.yml @@ -26,8 +26,9 @@ jobs: status_state="pending" declare -Ar exceptions=( [contracts]=origin/develop + [contracts]=origin/pre-bold [nitro-testnode]=origin/master - + #TODO Rachel to check these are the intended branches. [arbitrator/langs/c]=origin/vm-storage-cache [arbitrator/tools/wasmer]=origin/adopt-v4.2.8 @@ -38,7 +39,7 @@ jobs: if [[ -v exceptions[$mod] ]]; then branch=${exceptions[$mod]} fi - + if ! git -C $mod merge-base --is-ancestor HEAD $branch; then echo $mod diverges from $branch divergent=1 From 2377d0d2e01af17ce41c505bcfe69d8a1f67fa35 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Thu, 19 Dec 2024 14:32:18 -0700 Subject: [PATCH 111/187] Bump default message pruner min batches left to 1k --- arbnode/message_pruner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbnode/message_pruner.go b/arbnode/message_pruner.go index 840a15f328..08f568796d 100644 --- a/arbnode/message_pruner.go +++ b/arbnode/message_pruner.go @@ -46,7 +46,7 @@ type MessagePrunerConfigFetcher func() *MessagePrunerConfig var DefaultMessagePrunerConfig = MessagePrunerConfig{ Enable: true, PruneInterval: time.Minute, - MinBatchesLeft: 2, + MinBatchesLeft: 1000, } func MessagePrunerConfigAddOptions(prefix string, f *flag.FlagSet) { From 275dc27f39bdf9a91b5e69d264a55c8d6cd02986 Mon Sep 17 00:00:00 2001 From: Joshua Colvin Date: Thu, 19 Dec 2024 15:26:04 -0700 Subject: [PATCH 112/187] Update geth pin --- go-ethereum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go-ethereum b/go-ethereum index 50bb1f8110..94f175d5e1 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 50bb1f81101d321301e1d372422bef2950dd314f +Subproject commit 94f175d5e1c4aa5f52a7af212a683d8b7efb0f79 From 4e7496ada7f0b05d3b6d533ebdf3f969565e032d Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Fri, 20 Dec 2024 16:32:23 +0530 Subject: [PATCH 113/187] fix: BlockValidator is added twice to LatestStakedNotifiers in pre-BoLD case --- staker/legacy/staker.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/staker/legacy/staker.go b/staker/legacy/staker.go index fa74be327f..504e8c8421 100644 --- a/staker/legacy/staker.go +++ b/staker/legacy/staker.go @@ -323,9 +323,6 @@ func NewStaker( return nil, err } stakerLastSuccessfulActionGauge.Update(time.Now().Unix()) - if config().StartValidationFromStaked && blockValidator != nil { - stakedNotifiers = append(stakedNotifiers, blockValidator) - } inactiveValidatedNodes := btree.NewG(2, func(a, b validatedNode) bool { return a.number < b.number || (a.number == b.number && a.hash.Cmp(b.hash) < 0) }) From e93d7cae1fdfbd061f199c5efb1097c1751c045a Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Fri, 20 Dec 2024 17:25:55 +0530 Subject: [PATCH 114/187] Prevent calling arbtrace_ against nitro with the latest block number --- execution/gethexec/api.go | 55 +++++++++++++++++++++++++++++++------- execution/gethexec/node.go | 1 + 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/execution/gethexec/api.go b/execution/gethexec/api.go index 713d1496f9..d3ff209e64 100644 --- a/execution/gethexec/api.go +++ b/execution/gethexec/api.go @@ -285,14 +285,16 @@ func stateAndHeader(blockchain *core.BlockChain, block uint64) (*arbosState.Arbo type ArbTraceForwarderAPI struct { fallbackClientUrl string fallbackClientTimeout time.Duration + blockchain *core.BlockChain initialized atomic.Bool mutex sync.Mutex fallbackClient types.FallbackClient } -func NewArbTraceForwarderAPI(fallbackClientUrl string, fallbackClientTimeout time.Duration) *ArbTraceForwarderAPI { +func NewArbTraceForwarderAPI(blockchain *core.BlockChain, fallbackClientUrl string, fallbackClientTimeout time.Duration) *ArbTraceForwarderAPI { return &ArbTraceForwarderAPI{ + blockchain: blockchain, fallbackClientUrl: fallbackClientUrl, fallbackClientTimeout: fallbackClientTimeout, } @@ -332,16 +334,46 @@ func (api *ArbTraceForwarderAPI) forward(ctx context.Context, method string, arg return resp, nil } -func (api *ArbTraceForwarderAPI) Call(ctx context.Context, callArgs json.RawMessage, traceTypes json.RawMessage, blockNum json.RawMessage) (*json.RawMessage, error) { - return api.forward(ctx, "arbtrace_call", callArgs, traceTypes, blockNum) +func (api *ArbTraceForwarderAPI) ClipToPostNitroGenesis(blockNumOrHash json.RawMessage) (json.RawMessage, error) { + var bnh rpc.BlockNumberOrHash + err := bnh.UnmarshalJSON(blockNumOrHash) + if err != nil { + return nil, err + } + blockNum, isNum := bnh.Number() + if !isNum { + return blockNumOrHash, nil + } + blockNum, _ = api.blockchain.ClipToPostNitroGenesis(blockNum) + bnh.BlockNumber = &blockNum + return json.Marshal(bnh) } -func (api *ArbTraceForwarderAPI) CallMany(ctx context.Context, calls json.RawMessage, blockNum json.RawMessage) (*json.RawMessage, error) { - return api.forward(ctx, "arbtrace_callMany", calls, blockNum) +func (api *ArbTraceForwarderAPI) Call(ctx context.Context, callArgs json.RawMessage, traceTypes json.RawMessage, blockNumOrHash json.RawMessage) (*json.RawMessage, error) { + var err error + blockNumOrHash, err = api.ClipToPostNitroGenesis(blockNumOrHash) + if err != nil { + return nil, err + } + return api.forward(ctx, "arbtrace_call", callArgs, traceTypes, blockNumOrHash) } -func (api *ArbTraceForwarderAPI) ReplayBlockTransactions(ctx context.Context, blockNum json.RawMessage, traceTypes json.RawMessage) (*json.RawMessage, error) { - return api.forward(ctx, "arbtrace_replayBlockTransactions", blockNum, traceTypes) +func (api *ArbTraceForwarderAPI) CallMany(ctx context.Context, calls json.RawMessage, blockNumOrHash json.RawMessage) (*json.RawMessage, error) { + var err error + blockNumOrHash, err = api.ClipToPostNitroGenesis(blockNumOrHash) + if err != nil { + return nil, err + } + return api.forward(ctx, "arbtrace_callMany", calls, blockNumOrHash) +} + +func (api *ArbTraceForwarderAPI) ReplayBlockTransactions(ctx context.Context, blockNumOrHash json.RawMessage, traceTypes json.RawMessage) (*json.RawMessage, error) { + var err error + blockNumOrHash, err = api.ClipToPostNitroGenesis(blockNumOrHash) + if err != nil { + return nil, err + } + return api.forward(ctx, "arbtrace_replayBlockTransactions", blockNumOrHash, traceTypes) } func (api *ArbTraceForwarderAPI) ReplayTransaction(ctx context.Context, txHash json.RawMessage, traceTypes json.RawMessage) (*json.RawMessage, error) { @@ -356,8 +388,13 @@ func (api *ArbTraceForwarderAPI) Get(ctx context.Context, txHash json.RawMessage return api.forward(ctx, "arbtrace_get", txHash, path) } -func (api *ArbTraceForwarderAPI) Block(ctx context.Context, blockNum json.RawMessage) (*json.RawMessage, error) { - return api.forward(ctx, "arbtrace_block", blockNum) +func (api *ArbTraceForwarderAPI) Block(ctx context.Context, blockNumOrHash json.RawMessage) (*json.RawMessage, error) { + var err error + blockNumOrHash, err = api.ClipToPostNitroGenesis(blockNumOrHash) + if err != nil { + return nil, err + } + return api.forward(ctx, "arbtrace_block", blockNumOrHash) } func (api *ArbTraceForwarderAPI) Filter(ctx context.Context, filter json.RawMessage) (*json.RawMessage, error) { diff --git a/execution/gethexec/node.go b/execution/gethexec/node.go index 11d173a21e..b25ca5763c 100644 --- a/execution/gethexec/node.go +++ b/execution/gethexec/node.go @@ -284,6 +284,7 @@ func CreateExecutionNode( Namespace: "arbtrace", Version: "1.0", Service: NewArbTraceForwarderAPI( + l2BlockChain, config.RPC.ClassicRedirect, config.RPC.ClassicRedirectTimeout, ), From 027f35c44cb4d667cc755695ca798c868b28ef87 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 20 Dec 2024 09:29:26 -0300 Subject: [PATCH 115/187] pre-bold instead of develop as the exception branch used to check submodule pin for nitro-contracts --- .github/workflows/submodule-pin-check.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/submodule-pin-check.yml b/.github/workflows/submodule-pin-check.yml index 60dd8ad827..94fa705655 100644 --- a/.github/workflows/submodule-pin-check.yml +++ b/.github/workflows/submodule-pin-check.yml @@ -25,9 +25,9 @@ jobs: run: | status_state="pending" declare -Ar exceptions=( - [contracts]=origin/develop + [contracts]=origin/pre-bold [nitro-testnode]=origin/master - + #TODO Rachel to check these are the intended branches. [arbitrator/langs/c]=origin/vm-storage-cache [arbitrator/tools/wasmer]=origin/adopt-v4.2.8 @@ -38,7 +38,7 @@ jobs: if [[ -v exceptions[$mod] ]]; then branch=${exceptions[$mod]} fi - + if ! git -C $mod merge-base --is-ancestor HEAD $branch; then echo $mod diverges from $branch divergent=1 From 957b50e71eedee1887da99933f08d47b9e496d20 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 20 Dec 2024 09:38:09 -0300 Subject: [PATCH 116/187] Fixes exception branch for nitro-contracts --- .github/workflows/submodule-pin-check.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/submodule-pin-check.yml b/.github/workflows/submodule-pin-check.yml index a3cfc3b4f0..94fa705655 100644 --- a/.github/workflows/submodule-pin-check.yml +++ b/.github/workflows/submodule-pin-check.yml @@ -25,7 +25,6 @@ jobs: run: | status_state="pending" declare -Ar exceptions=( - [contracts]=origin/develop [contracts]=origin/pre-bold [nitro-testnode]=origin/master From 7fbd08a5746f031b44d4a3819465bd24d0a736cf Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 20 Dec 2024 10:26:50 -0300 Subject: [PATCH 117/187] start_benchmark/end_benchmark instead of toggle_benchmark --- arbitrator/arbutil/src/benchmark.rs | 10 ++--- arbitrator/stylus/src/host.rs | 10 ++++- arbitrator/stylus/src/native.rs | 6 ++- .../tools/stylus_benchmark/src/benchmark.rs | 6 +-- .../tools/stylus_benchmark/src/scenario.rs | 8 ++-- .../wasm-libraries/user-host-trait/src/lib.rs | 44 +++++++++++++++---- 6 files changed, 60 insertions(+), 24 deletions(-) diff --git a/arbitrator/arbutil/src/benchmark.rs b/arbitrator/arbutil/src/benchmark.rs index aba45d23ed..3baf6c2290 100644 --- a/arbitrator/arbutil/src/benchmark.rs +++ b/arbitrator/arbutil/src/benchmark.rs @@ -5,12 +5,12 @@ use crate::evm::api::Ink; use derivative::Derivative; use std::time::{Duration, Instant}; -// Benchmark is used to track the performance of a block of code in stylus +// Benchmark is used to track the performance of blocks of code in stylus #[derive(Derivative, Clone, Copy)] #[derivative(Debug)] pub struct Benchmark { - pub timer: Instant, - pub elapsed: Option, - pub ink_start: Ink, - pub ink_total: Option, + pub timer: Option, + pub elapsed_total: Duration, + pub ink_start: Option, + pub ink_total: Ink, } diff --git a/arbitrator/stylus/src/host.rs b/arbitrator/stylus/src/host.rs index 2c96945cbc..b3cb354c1e 100644 --- a/arbitrator/stylus/src/host.rs +++ b/arbitrator/stylus/src/host.rs @@ -470,8 +470,14 @@ pub(crate) fn console_tee, T: Into + Copy>( pub(crate) fn null_host>(_: WasmEnvMut) {} -pub(crate) fn toggle_benchmark>( +pub(crate) fn start_benchmark>( mut env: WasmEnvMut, ) -> MaybeEscape { - hostio!(env, toggle_benchmark()) + hostio!(env, start_benchmark()) +} + +pub(crate) fn end_benchmark>( + mut env: WasmEnvMut, +) -> MaybeEscape { + hostio!(env, end_benchmark()) } diff --git a/arbitrator/stylus/src/native.rs b/arbitrator/stylus/src/native.rs index 243a1c6442..a31df1034c 100644 --- a/arbitrator/stylus/src/native.rs +++ b/arbitrator/stylus/src/native.rs @@ -212,7 +212,8 @@ impl> NativeInstance { imports.define("console", "tee_f32", func!(host::console_tee::)); imports.define("console", "tee_f64", func!(host::console_tee::)); imports.define("debug", "null_host", func!(host::null_host)); - imports.define("debug", "toggle_benchmark", func!(host::toggle_benchmark)); + imports.define("debug", "start_benchmark", func!(host::start_benchmark)); + imports.define("debug", "end_benchmark", func!(host::end_benchmark)); } let instance = Instance::new(&mut store, &module, &imports)?; let exports = &instance.exports; @@ -430,7 +431,8 @@ pub fn module(wasm: &[u8], compile: CompileConfig, target: Target) -> Result) -> (Duration, Ink) { let result = msg .benchmark - .expect("toggle_benchmark block likely not present in program"); - let elapsed = result.elapsed.expect("elapsed"); - let ink = result.ink_total.expect("ink"); + .expect("start_benchmark/end_benchmark block likely not present in program"); + let elapsed = result.elapsed_total; + let ink = result.ink_total; (elapsed, ink) } diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index 6bc6f068fc..39afbfc8b4 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -21,7 +21,9 @@ fn generate_add_i32_wat() -> Vec { // preamble wat.write_all(b"(module\n").unwrap(); - wat.write_all(b" (import \"debug\" \"toggle_benchmark\" (func $toggle_benchmark))\n") + wat.write_all(b" (import \"debug\" \"start_benchmark\" (func $start_benchmark))\n") + .unwrap(); + wat.write_all(b" (import \"debug\" \"end_benchmark\" (func $end_benchmark))\n") .unwrap(); wat.write_all(b" (memory (export \"memory\") 0 0)\n") .unwrap(); @@ -30,7 +32,7 @@ fn generate_add_i32_wat() -> Vec { wat.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n") .unwrap(); - wat.write_all(b" call $toggle_benchmark\n").unwrap(); + wat.write_all(b" call $start_benchmark\n").unwrap(); // ops to be benchmarked wat.write_all(b" (loop $loop\n").unwrap(); @@ -55,7 +57,7 @@ fn generate_add_i32_wat() -> Vec { wat.write_all(b" i32.lt_s\n").unwrap(); wat.write_all(b" br_if $loop)\n").unwrap(); - wat.write_all(b" call $toggle_benchmark\n").unwrap(); + wat.write_all(b" call $end_benchmark\n").unwrap(); wat.write_all(b" i32.const 0)\n").unwrap(); wat.write_all(b")").unwrap(); diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index 9266888f9a..676563a345 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -21,8 +21,8 @@ use prover::{ value::Value, }; use ruint2::Uint; -use std::fmt::Display; use std::time::Instant; +use std::{fmt::Display, time::Duration}; macro_rules! be { ($int:expr) => { @@ -966,24 +966,50 @@ pub trait UserHost: GasMeteredMachine { Ok(value) } - // Tracks benchmark data related to the block of instructions defined by instruction between the first and last `toggle_benchmark` calls. - fn toggle_benchmark(&mut self) -> Result<(), Self::Err> { + // Initializes benchmark data related to a block of instruction, defined by instruction between the start_benchmark and end_benchmark calls + // If there are multiple start_benchmark calls without a end_benchmark in between them, then + // the block defined by the last start_benchmark call, and the next end_benchmark call, is the + // one to be benchmarked + fn start_benchmark(&mut self) -> Result<(), Self::Err> { let ink_curr = self.ink_ready()?; match self.benchmark() { None => { *self.benchmark() = Some(Benchmark { - timer: Instant::now(), - elapsed: None, - ink_start: ink_curr, - ink_total: None, + timer: Some(Instant::now()), + elapsed_total: Duration::new(0, 0), + ink_start: Some(ink_curr), + ink_total: Ink(0), }); } Some(benchmark) => { - benchmark.elapsed = Some(benchmark.timer.elapsed()); - benchmark.ink_total = Some(benchmark.ink_start.saturating_sub(ink_curr)); + benchmark.timer = Some(Instant::now()); + benchmark.ink_start = Some(ink_curr); } }; Ok(()) } + + fn end_benchmark(&mut self) -> Result<(), Self::Err> { + let ink_curr = self.ink_ready()?; + + match self.benchmark() { + Some(benchmark) => { + match benchmark.timer { + Some(timer) => { + benchmark.elapsed_total = benchmark.elapsed_total.saturating_add(timer.elapsed()); + + let block_ink = benchmark.ink_start.unwrap().saturating_sub(ink_curr); + benchmark.ink_total = benchmark.ink_total.saturating_add(block_ink); + + benchmark.timer = None; + benchmark.ink_start = None; + } + None => {} + }; + } + None => {}, + }; + Ok(()) + } } From d3ad3e656b0c2d245ed81a881263721ed6ed207d Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 20 Dec 2024 11:10:04 -0300 Subject: [PATCH 118/187] Stores Benchmark instead of Option in WasmEnv --- arbitrator/arbutil/src/benchmark.rs | 2 +- arbitrator/jit/src/stylus_backend.rs | 4 +- arbitrator/stylus/src/env.rs | 4 +- arbitrator/stylus/src/host.rs | 2 +- .../tools/stylus_benchmark/src/benchmark.rs | 7 +-- .../wasm-libraries/user-host-trait/src/lib.rs | 56 ++++++++----------- .../wasm-libraries/user-host/src/program.rs | 4 +- .../wasm-libraries/user-test/src/program.rs | 6 +- 8 files changed, 35 insertions(+), 50 deletions(-) diff --git a/arbitrator/arbutil/src/benchmark.rs b/arbitrator/arbutil/src/benchmark.rs index 3baf6c2290..1bc25ae999 100644 --- a/arbitrator/arbutil/src/benchmark.rs +++ b/arbitrator/arbutil/src/benchmark.rs @@ -6,7 +6,7 @@ use derivative::Derivative; use std::time::{Duration, Instant}; // Benchmark is used to track the performance of blocks of code in stylus -#[derive(Derivative, Clone, Copy)] +#[derive(Derivative, Clone, Copy, Default)] #[derivative(Debug)] pub struct Benchmark { pub timer: Option, diff --git a/arbitrator/jit/src/stylus_backend.rs b/arbitrator/jit/src/stylus_backend.rs index 50fb031a7e..d250780dd9 100644 --- a/arbitrator/jit/src/stylus_backend.rs +++ b/arbitrator/jit/src/stylus_backend.rs @@ -36,7 +36,7 @@ struct MessageToCothread { pub struct MessageFromCothread { pub req_type: u32, pub req_data: Vec, - pub benchmark: Option, + pub benchmark: Benchmark, } struct CothreadRequestor { @@ -53,7 +53,7 @@ impl RequestHandler for CothreadRequestor { let msg = MessageFromCothread { req_type: req_type as u32 + EVM_API_METHOD_REQ_OFFSET, req_data: req_data.as_ref().to_vec(), - benchmark: None, + benchmark: Benchmark::default(), }; if let Err(error) = self.tx.send(msg) { diff --git a/arbitrator/stylus/src/env.rs b/arbitrator/stylus/src/env.rs index a6eb97e640..a2c8189029 100644 --- a/arbitrator/stylus/src/env.rs +++ b/arbitrator/stylus/src/env.rs @@ -50,7 +50,7 @@ pub struct WasmEnv> { /// The runtime config pub config: Option, // Used to benchmark execution blocks of code - pub benchmark: Option, + pub benchmark: Benchmark, // Using the unused generic parameter D in a PhantomData field _data_reader_marker: PhantomData, } @@ -71,7 +71,7 @@ impl> WasmEnv { outs: vec![], memory: None, meter: None, - benchmark: None, + benchmark: Benchmark::default(), _data_reader_marker: PhantomData, } } diff --git a/arbitrator/stylus/src/host.rs b/arbitrator/stylus/src/host.rs index b3cb354c1e..f316cd0611 100644 --- a/arbitrator/stylus/src/host.rs +++ b/arbitrator/stylus/src/host.rs @@ -47,7 +47,7 @@ where &self.evm_data } - fn benchmark(&mut self) -> &mut Option { + fn benchmark(&mut self) -> &mut Benchmark { &mut self.env.benchmark } diff --git a/arbitrator/tools/stylus_benchmark/src/benchmark.rs b/arbitrator/tools/stylus_benchmark/src/benchmark.rs index 2af6e1fd95..43f7b7553a 100644 --- a/arbitrator/tools/stylus_benchmark/src/benchmark.rs +++ b/arbitrator/tools/stylus_benchmark/src/benchmark.rs @@ -66,12 +66,7 @@ fn run(compiled_module: Vec) -> (Duration, Ink) { panic!("unsupported request type {:?}", msg.req_type); } - let result = msg - .benchmark - .expect("start_benchmark/end_benchmark block likely not present in program"); - let elapsed = result.elapsed_total; - let ink = result.ink_total; - (elapsed, ink) + (msg.benchmark.elapsed_total, msg.benchmark.ink_total) } pub fn benchmark(wat: Vec) -> eyre::Result<()> { diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index 676563a345..2992921a5b 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -21,8 +21,8 @@ use prover::{ value::Value, }; use ruint2::Uint; +use std::fmt::Display; use std::time::Instant; -use std::{fmt::Display, time::Duration}; macro_rules! be { ($int:expr) => { @@ -70,7 +70,7 @@ pub trait UserHost: GasMeteredMachine { fn evm_api(&mut self) -> &mut Self::A; fn evm_data(&self) -> &EvmData; - fn benchmark(&mut self) -> &mut Option; + fn benchmark(&mut self) -> &mut Benchmark; fn evm_return_data_len(&mut self) -> &mut u32; fn read_slice(&self, ptr: GuestPtr, len: u32) -> Result, Self::MemoryErr>; @@ -966,50 +966,40 @@ pub trait UserHost: GasMeteredMachine { Ok(value) } - // Initializes benchmark data related to a block of instruction, defined by instruction between the start_benchmark and end_benchmark calls - // If there are multiple start_benchmark calls without a end_benchmark in between them, then - // the block defined by the last start_benchmark call, and the next end_benchmark call, is the - // one to be benchmarked + // Initializes benchmark data related to a code block. + // A code block is defined by the instructions between start_benchmark and end_benchmark calls. + // If start_benchmark is called multiple times without end_benchmark being called, + // then only the last start_benchmark before end_benchmark will be used. + // It is possible to have multiple code blocks benchmarked in the same program. fn start_benchmark(&mut self) -> Result<(), Self::Err> { let ink_curr = self.ink_ready()?; - match self.benchmark() { - None => { - *self.benchmark() = Some(Benchmark { - timer: Some(Instant::now()), - elapsed_total: Duration::new(0, 0), - ink_start: Some(ink_curr), - ink_total: Ink(0), - }); - } - Some(benchmark) => { - benchmark.timer = Some(Instant::now()); - benchmark.ink_start = Some(ink_curr); - } - }; + let benchmark = self.benchmark(); + benchmark.timer = Some(Instant::now()); + benchmark.ink_start = Some(ink_curr); + Ok(()) } + // Updates cumulative benchmark data related to a code block. + // If end_benchmark is called without a corresponding start_benchmark nothing will happen. fn end_benchmark(&mut self) -> Result<(), Self::Err> { let ink_curr = self.ink_ready()?; - match self.benchmark() { - Some(benchmark) => { - match benchmark.timer { - Some(timer) => { - benchmark.elapsed_total = benchmark.elapsed_total.saturating_add(timer.elapsed()); + let benchmark = self.benchmark(); + match benchmark.timer { + Some(timer) => { + benchmark.elapsed_total = benchmark.elapsed_total.saturating_add(timer.elapsed()); - let block_ink = benchmark.ink_start.unwrap().saturating_sub(ink_curr); - benchmark.ink_total = benchmark.ink_total.saturating_add(block_ink); + let code_block_ink = benchmark.ink_start.unwrap().saturating_sub(ink_curr); + benchmark.ink_total = benchmark.ink_total.saturating_add(code_block_ink); - benchmark.timer = None; - benchmark.ink_start = None; - } - None => {} - }; + benchmark.timer = None; + benchmark.ink_start = None; } - None => {}, + None => {} }; + Ok(()) } } diff --git a/arbitrator/wasm-libraries/user-host/src/program.rs b/arbitrator/wasm-libraries/user-host/src/program.rs index fb11efa447..c2af356535 100644 --- a/arbitrator/wasm-libraries/user-host/src/program.rs +++ b/arbitrator/wasm-libraries/user-host/src/program.rs @@ -77,7 +77,7 @@ pub(crate) struct Program { /// EVM Context info. pub evm_data: EvmData, // Used to benchmark execution blocks of code - pub benchmark: Option, + pub benchmark: Benchmark, /// WAVM module index. pub module: u32, /// Call configuration. @@ -241,7 +241,7 @@ impl UserHost for Program { &self.evm_data } - fn benchmark(&mut self) -> &mut Option { + fn benchmark(&mut self) -> &mut Benchmark { &mut self.benchmark } diff --git a/arbitrator/wasm-libraries/user-test/src/program.rs b/arbitrator/wasm-libraries/user-test/src/program.rs index d31664e7af..602170be37 100644 --- a/arbitrator/wasm-libraries/user-test/src/program.rs +++ b/arbitrator/wasm-libraries/user-test/src/program.rs @@ -3,12 +3,12 @@ use crate::{ARGS, EVER_PAGES, EVM_DATA, KEYS, LOGS, OPEN_PAGES, OUTS}; use arbutil::{ + benchmark::Benchmark, evm::{ api::{EvmApi, Gas, Ink, VecReader}, user::UserOutcomeKind, EvmData, }, - benchmark::Benchmark, Bytes20, Bytes32, Color, }; use caller_env::{static_caller::STATIC_MEM, GuestPtr, MemAccess}; @@ -29,7 +29,7 @@ impl From for eyre::ErrReport { /// Mock type representing a `user_host::Program` pub struct Program { evm_api: MockEvmApi, - benchmark: Option, + benchmark: Benchmark, } #[allow(clippy::unit_arg)] @@ -54,7 +54,7 @@ impl UserHost for Program { &EVM_DATA } - fn benchmark(&mut self) -> &mut Option { + fn benchmark(&mut self) -> &mut Benchmark { &mut self.benchmark } From 784fa4662f2415d9b1f461d87a4e56ca03790282 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:10:00 +0000 Subject: [PATCH 119/187] Bump golang.org/x/crypto from 0.24.0 to 0.31.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.24.0 to 0.31.0. - [Commits](https://github.com/golang/crypto/compare/v0.24.0...v0.31.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- go.mod | 12 ++++++------ go.sum | 20 ++++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index 7a48b0520d..cfcca3628b 100644 --- a/go.mod +++ b/go.mod @@ -20,6 +20,7 @@ require ( github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.27 github.com/aws/aws-sdk-go-v2/service/s3 v1.64.1 github.com/cavaliergopher/grab/v3 v3.0.1 + github.com/ccoveille/go-safecast v1.1.0 github.com/cockroachdb/pebble v1.1.0 github.com/codeclysm/extract/v3 v3.0.2 github.com/dgraph-io/badger/v4 v4.2.0 @@ -46,9 +47,9 @@ require ( github.com/spf13/pflag v1.0.5 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/wealdtech/go-merkletree v1.0.0 - golang.org/x/crypto v0.24.0 - golang.org/x/sys v0.21.0 - golang.org/x/term v0.21.0 + golang.org/x/crypto v0.31.0 + golang.org/x/sys v0.28.0 + golang.org/x/term v0.27.0 golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d google.golang.org/api v0.187.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 @@ -60,7 +61,6 @@ require ( cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.8 // indirect - github.com/ccoveille/go-safecast v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -195,8 +195,8 @@ require ( golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.22.0 - golang.org/x/sync v0.8.0 - golang.org/x/text v0.16.0 // indirect + golang.org/x/sync v0.10.0 + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/protobuf v1.34.2 // indirect rsc.io/tmplfunc v0.0.3 // indirect diff --git a/go.sum b/go.sum index 55ad86267a..01b58980dd 100644 --- a/go.sum +++ b/go.sum @@ -535,8 +535,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= @@ -580,8 +580,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -614,14 +614,14 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -631,8 +631,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= From d540d2a47189928b41319155e036e32b38b5b159 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Fri, 20 Dec 2024 21:46:12 +0530 Subject: [PATCH 120/187] Consolidate ArbOS version constants into a single file --- arbnode/batch_poster.go | 2 +- arbos/addressSet/addressSet.go | 3 +- arbos/arbosState/arbosstate.go | 39 ++++++++++++------------- arbos/blockhash/blockhash.go | 3 +- arbos/blockhash/blockhash_test.go | 3 +- arbos/internal_tx.go | 5 ++-- arbos/l1pricing/l1PricingOldVersions.go | 5 ++-- arbos/l1pricing/l1pricing.go | 6 ++-- arbos/tx_processor.go | 16 +++++----- arbos/util/transfer.go | 3 +- cmd/nitro/init.go | 8 ++--- go-ethereum | 2 +- precompiles/ArbGasInfo.go | 6 ++-- precompiles/ArbOwnerPublic.go | 3 +- precompiles/ArbOwner_test.go | 3 +- precompiles/ArbRetryableTx.go | 2 +- precompiles/ArbSys.go | 9 +++--- precompiles/precompile.go | 38 ++++++++++++------------ precompiles/precompile_test.go | 14 ++++----- precompiles/wrapper.go | 3 +- system_tests/block_validator_test.go | 3 +- system_tests/estimation_test.go | 2 +- system_tests/fees_test.go | 6 ++-- system_tests/precompile_test.go | 3 +- system_tests/retryable_test.go | 2 +- system_tests/transfer_test.go | 5 ++-- 26 files changed, 102 insertions(+), 92 deletions(-) diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index 45bd70c92b..70c5952042 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -1157,7 +1157,7 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) if err != nil { return false, err } - if arbOSVersion >= 20 { + if arbOSVersion >= params.ArbosVersion_20 { if config.IgnoreBlobPrice { use4844 = true } else { diff --git a/arbos/addressSet/addressSet.go b/arbos/addressSet/addressSet.go index 4bb87e614d..ccd780aa11 100644 --- a/arbos/addressSet/addressSet.go +++ b/arbos/addressSet/addressSet.go @@ -9,6 +9,7 @@ import ( "errors" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" @@ -185,7 +186,7 @@ func (as *AddressSet) Remove(addr common.Address, arbosVersion uint64) error { if err != nil { return err } - if arbosVersion >= 11 { + if arbosVersion >= params.ArbosVersion_11 { err = as.byAddress.Set(atSize, util.UintToHash(slot)) if err != nil { return err diff --git a/arbos/arbosState/arbosstate.go b/arbos/arbosState/arbosstate.go index a3d1ae8386..5ee070f942 100644 --- a/arbos/arbosState/arbosstate.go +++ b/arbos/arbosState/arbosstate.go @@ -63,9 +63,6 @@ type ArbosState struct { Burner burn.Burner } -const MaxArbosVersionSupported uint64 = params.ArbosVersion_StylusChargingFixes -const MaxDebugArbosVersionSupported uint64 = params.ArbosVersion_StylusChargingFixes - var ErrUninitializedArbOS = errors.New("ArbOS uninitialized") var ErrAlreadyInitialized = errors.New("ArbOS is already initialized") @@ -205,7 +202,7 @@ func InitializeArbosState(stateDB vm.StateDB, burner burn.Burner, chainConfig *p _ = sto.SetUint64ByUint64(uint64(versionOffset), 1) // initialize to version 1; upgrade at end of this func if needed _ = sto.SetUint64ByUint64(uint64(upgradeVersionOffset), 0) _ = sto.SetUint64ByUint64(uint64(upgradeTimestampOffset), 0) - if desiredArbosVersion >= 2 { + if desiredArbosVersion >= params.ArbosVersion_2 { _ = sto.SetByUint64(uint64(networkFeeAccountOffset), util.AddressToHash(initialChainOwner)) } else { _ = sto.SetByUint64(uint64(networkFeeAccountOffset), common.Hash{}) // the 0 address until an owner sets it @@ -217,7 +214,7 @@ func InitializeArbosState(stateDB vm.StateDB, burner burn.Burner, chainConfig *p _ = sto.SetUint64ByUint64(uint64(brotliCompressionLevelOffset), 0) // default brotliCompressionLevel for fast compression is 0 initialRewardsRecipient := l1pricing.BatchPosterAddress - if desiredArbosVersion >= 2 { + if desiredArbosVersion >= params.ArbosVersion_2 { initialRewardsRecipient = initialChainOwner } _ = l1pricing.InitializeL1PricingState(sto.OpenCachedSubStorage(l1PricingSubspace), initialRewardsRecipient, initMessage.InitialL1BaseFee) @@ -274,29 +271,29 @@ func (state *ArbosState) UpgradeArbosVersion( nextArbosVersion := state.arbosVersion + 1 switch nextArbosVersion { - case 2: + case params.ArbosVersion_2: ensure(state.l1PricingState.SetLastSurplus(common.Big0, 1)) - case 3: + case params.ArbosVersion_3: ensure(state.l1PricingState.SetPerBatchGasCost(0)) ensure(state.l1PricingState.SetAmortizedCostCapBips(math.MaxUint64)) - case 4: + case params.ArbosVersion_4: // no state changes needed - case 5: + case params.ArbosVersion_5: // no state changes needed - case 6: + case params.ArbosVersion_6: // no state changes needed - case 7: + case params.ArbosVersion_7: // no state changes needed - case 8: + case params.ArbosVersion_8: // no state changes needed - case 9: + case params.ArbosVersion_9: // no state changes needed - case 10: + case params.ArbosVersion_10: ensure(state.l1PricingState.SetL1FeesAvailable(stateDB.GetBalance( l1pricing.L1PricerFundsPoolAddress, ).ToBig())) - case 11: + case params.ArbosVersion_11: // Update the PerBatchGasCost to a more accurate value compared to the old v6 default. ensure(state.l1PricingState.SetPerBatchGasCost(l1pricing.InitialPerBatchGasCostV12)) @@ -316,23 +313,23 @@ func (state *ArbosState) UpgradeArbosVersion( case 12, 13, 14, 15, 16, 17, 18, 19: // these versions are left to Orbit chains for custom upgrades. - case 20: + case params.ArbosVersion_20: // Update Brotli compression level for fast compression from 0 to 1 ensure(state.SetBrotliCompressionLevel(1)) case 21, 22, 23, 24, 25, 26, 27, 28, 29: // these versions are left to Orbit chains for custom upgrades. - case 30: + case params.ArbosVersion_30: programs.Initialize(state.backingStorage.OpenSubStorage(programsSubspace)) - case 31: + case params.ArbosVersion_31: params, err := state.Programs().Params() ensure(err) ensure(params.UpgradeToVersion(2)) ensure(params.Save()) - case 32: + case params.ArbosVersion_32: // no change state needed default: @@ -353,8 +350,8 @@ func (state *ArbosState) UpgradeArbosVersion( state.arbosVersion = nextArbosVersion } - if firstTime && upgradeTo >= 6 { - if upgradeTo < 11 { + if firstTime && upgradeTo >= params.ArbosVersion_6 { + if upgradeTo < params.ArbosVersion_11 { state.Restrict(state.l1PricingState.SetPerBatchGasCost(l1pricing.InitialPerBatchGasCostV6)) } state.Restrict(state.l1PricingState.SetEquilibrationUnits(l1pricing.InitialEquilibrationUnitsV6)) diff --git a/arbos/blockhash/blockhash.go b/arbos/blockhash/blockhash.go index ff29bbca9a..df5078fd2c 100644 --- a/arbos/blockhash/blockhash.go +++ b/arbos/blockhash/blockhash.go @@ -8,6 +8,7 @@ import ( "errors" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/storage" ) @@ -56,7 +57,7 @@ func (bh *Blockhashes) RecordNewL1Block(number uint64, blockHash common.Hash, ar // fill in hashes for any "skipped over" blocks nextNumber++ var nextNumBuf [8]byte - if arbosVersion >= 8 { + if arbosVersion >= params.ArbosVersion_8 { binary.LittleEndian.PutUint64(nextNumBuf[:], nextNumber) } diff --git a/arbos/blockhash/blockhash_test.go b/arbos/blockhash/blockhash_test.go index c7cc04d966..8dec2181a3 100644 --- a/arbos/blockhash/blockhash_test.go +++ b/arbos/blockhash/blockhash_test.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/storage" @@ -15,7 +16,7 @@ import ( ) func TestBlockhash(t *testing.T) { - arbosVersion := uint64(8) + arbosVersion := params.ArbosVersion_8 sto := storage.NewMemoryBacked(burn.NewSystemBurner(nil, false)) InitializeBlockhashes(sto) diff --git a/arbos/internal_tx.go b/arbos/internal_tx.go index 64dede6290..0ecdfe74cf 100644 --- a/arbos/internal_tx.go +++ b/arbos/internal_tx.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/util" @@ -56,11 +57,11 @@ func ApplyInternalTxUpdate(tx *types.ArbitrumInternalTx, state *arbosState.Arbos l1BlockNumber := util.SafeMapGet[uint64](inputs, "l1BlockNumber") timePassed := util.SafeMapGet[uint64](inputs, "timePassed") - if state.ArbOSVersion() < 3 { + if state.ArbOSVersion() < params.ArbosVersion_3 { // (incorrectly) use the L2 block number instead timePassed = util.SafeMapGet[uint64](inputs, "l2BlockNumber") } - if state.ArbOSVersion() < 8 { + if state.ArbOSVersion() < params.ArbosVersion_8 { // in old versions we incorrectly used an L1 block number one too high l1BlockNumber++ } diff --git a/arbos/l1pricing/l1PricingOldVersions.go b/arbos/l1pricing/l1PricingOldVersions.go index 1377351af3..e4cbf5e1b3 100644 --- a/arbos/l1pricing/l1PricingOldVersions.go +++ b/arbos/l1pricing/l1PricingOldVersions.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/util" am "github.com/offchainlabs/nitro/util/arbmath" @@ -24,7 +25,7 @@ func (ps *L1PricingState) _preversion10_UpdateForBatchPosterSpending( l1Basefee *big.Int, scenario util.TracingScenario, ) error { - if arbosVersion < 2 { + if arbosVersion < params.ArbosVersion_2 { return ps._preVersion2_UpdateForBatchPosterSpending(statedb, evm, updateTime, currentTime, batchPoster, weiSpent, scenario) } @@ -69,7 +70,7 @@ func (ps *L1PricingState) _preversion10_UpdateForBatchPosterSpending( } // impose cap on amortized cost, if there is one - if arbosVersion >= 3 { + if arbosVersion >= params.ArbosVersion_3 { amortizedCostCapBips, err := ps.AmortizedCostCapBips() if err != nil { return err diff --git a/arbos/l1pricing/l1pricing.go b/arbos/l1pricing/l1pricing.go index 37dae08c33..cb92aeeec4 100644 --- a/arbos/l1pricing/l1pricing.go +++ b/arbos/l1pricing/l1pricing.go @@ -216,7 +216,7 @@ func (ps *L1PricingState) LastSurplus() (*big.Int, error) { } func (ps *L1PricingState) SetLastSurplus(val *big.Int, arbosVersion uint64) error { - if arbosVersion < 7 { + if arbosVersion < params.ArbosVersion_7 { return ps.lastSurplus.Set_preVersion7(val) } return ps.lastSurplus.SetSaturatingWithWarning(val, "L1 pricer last surplus") @@ -309,7 +309,7 @@ func (ps *L1PricingState) UpdateForBatchPosterSpending( l1Basefee *big.Int, scenario util.TracingScenario, ) error { - if arbosVersion < 10 { + if arbosVersion < params.ArbosVersion_10 { return ps._preversion10_UpdateForBatchPosterSpending(statedb, evm, arbosVersion, updateTime, currentTime, batchPoster, weiSpent, l1Basefee, scenario) } @@ -359,7 +359,7 @@ func (ps *L1PricingState) UpdateForBatchPosterSpending( } // impose cap on amortized cost, if there is one - if arbosVersion >= 3 { + if arbosVersion >= params.ArbosVersion_3 { amortizedCostCapBips, err := ps.AmortizedCostCapBips() if err != nil { return err diff --git a/arbos/tx_processor.go b/arbos/tx_processor.go index aec08b15b5..7cebd8da37 100644 --- a/arbos/tx_processor.go +++ b/arbos/tx_processor.go @@ -307,7 +307,7 @@ func (p *TxProcessor) StartTxHook() (endTxNow bool, gasUsed uint64, err error, r // pay for the retryable's gas and update the pools gascost := arbmath.BigMulByUint(effectiveBaseFee, usergas) networkCost := gascost - if p.state.ArbOSVersion() >= 11 { + if p.state.ArbOSVersion() >= params.ArbosVersion_11 { infraFeeAccount, err := p.state.InfraFeeAccount() p.state.Restrict(err) if infraFeeAccount != (common.Address{}) { @@ -576,7 +576,7 @@ func (p *TxProcessor) EndTxHook(gasLeft uint64, success bool) { takeFunds(maxRefund, arbmath.BigMulByUint(effectiveBaseFee, gasUsed)) // Refund any unused gas, without overdrafting the L1 deposit. networkRefund := gasRefund - if p.state.ArbOSVersion() >= 11 { + if p.state.ArbOSVersion() >= params.ArbosVersion_11 { infraFeeAccount, err := p.state.InfraFeeAccount() p.state.Restrict(err) if infraFeeAccount != (common.Address{}) { @@ -629,7 +629,7 @@ func (p *TxProcessor) EndTxHook(gasLeft uint64, success bool) { } purpose := "feeCollection" - if p.state.ArbOSVersion() > 4 { + if p.state.ArbOSVersion() > params.ArbosVersion_4 { infraFeeAccount, err := p.state.InfraFeeAccount() p.state.Restrict(err) if infraFeeAccount != (common.Address{}) { @@ -646,11 +646,11 @@ func (p *TxProcessor) EndTxHook(gasLeft uint64, success bool) { util.MintBalance(&networkFeeAccount, computeCost, p.evm, scenario, purpose) } posterFeeDestination := l1pricing.L1PricerFundsPoolAddress - if p.state.ArbOSVersion() < 2 { + if p.state.ArbOSVersion() < params.ArbosVersion_2 { posterFeeDestination = p.evm.Context.Coinbase } util.MintBalance(&posterFeeDestination, p.PosterFee, p.evm, scenario, purpose) - if p.state.ArbOSVersion() >= 10 { + if p.state.ArbOSVersion() >= params.ArbosVersion_10 { if _, err := p.state.L1PricingState().AddToL1FeesAvailable(p.PosterFee); err != nil { log.Error("failed to update L1FeesAvailable: ", "err", err) } @@ -748,13 +748,13 @@ func (p *TxProcessor) L1BlockHash(blockCtx vm.BlockContext, l1BlockNumber uint64 func (p *TxProcessor) DropTip() bool { version := p.state.ArbOSVersion() - return version != 9 || p.delayedInbox + return version != params.ArbosVersion_9 || p.delayedInbox } func (p *TxProcessor) GetPaidGasPrice() *big.Int { gasPrice := p.evm.GasPrice version := p.state.ArbOSVersion() - if version != 9 { + if version != params.ArbosVersion_9 { // p.evm.Context.BaseFee is already lowered to 0 when vm runs with NoBaseFee flag and 0 gas price gasPrice = p.evm.Context.BaseFee } @@ -762,7 +762,7 @@ func (p *TxProcessor) GetPaidGasPrice() *big.Int { } func (p *TxProcessor) GasPriceOp(evm *vm.EVM) *big.Int { - if p.state.ArbOSVersion() >= 3 { + if p.state.ArbOSVersion() >= params.ArbosVersion_3 { return p.GetPaidGasPrice() } return evm.GasPrice diff --git a/arbos/util/transfer.go b/arbos/util/transfer.go index c5873b7e93..0b61868abe 100644 --- a/arbos/util/transfer.go +++ b/arbos/util/transfer.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/util/arbmath" ) @@ -66,7 +67,7 @@ func TransferBalance( if arbmath.BigLessThan(balance.ToBig(), amount) { return fmt.Errorf("%w: addr %v have %v want %v", vm.ErrInsufficientBalance, *from, balance, amount) } - if evm.Context.ArbOSVersion < 30 && amount.Sign() == 0 { + if evm.Context.ArbOSVersion < params.ArbosVersion_30 && amount.Sign() == 0 { evm.StateDB.CreateZombieIfDeleted(*from) } evm.StateDB.SubBalance(*from, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) diff --git a/cmd/nitro/init.go b/cmd/nitro/init.go index acad672bb0..93c51a0040 100644 --- a/cmd/nitro/init.go +++ b/cmd/nitro/init.go @@ -335,12 +335,12 @@ func validateBlockChain(blockChain *core.BlockChain, chainConfig *params.ChainCo } // Make sure we don't allow accidentally downgrading ArbOS if chainConfig.DebugMode() { - if currentArbosState.ArbOSVersion() > arbosState.MaxDebugArbosVersionSupported { - return fmt.Errorf("attempted to launch node in debug mode with ArbOS version %v on ArbOS state with version %v", arbosState.MaxDebugArbosVersionSupported, currentArbosState.ArbOSVersion()) + if currentArbosState.ArbOSVersion() > params.MaxDebugArbosVersionSupported { + return fmt.Errorf("attempted to launch node in debug mode with ArbOS version %v on ArbOS state with version %v", params.MaxDebugArbosVersionSupported, currentArbosState.ArbOSVersion()) } } else { - if currentArbosState.ArbOSVersion() > arbosState.MaxArbosVersionSupported { - return fmt.Errorf("attempted to launch node with ArbOS version %v on ArbOS state with version %v", arbosState.MaxArbosVersionSupported, currentArbosState.ArbOSVersion()) + if currentArbosState.ArbOSVersion() > params.MaxArbosVersionSupported { + return fmt.Errorf("attempted to launch node with ArbOS version %v on ArbOS state with version %v", params.MaxArbosVersionSupported, currentArbosState.ArbOSVersion()) } } diff --git a/go-ethereum b/go-ethereum index 4f47f4c6ea..513e46e13b 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 4f47f4c6eafd81290d51a7f11fbd99bc2fc3c5a6 +Subproject commit 513e46e13b68cf290c580ef9053e3b7d3e6b4f81 diff --git a/precompiles/ArbGasInfo.go b/precompiles/ArbGasInfo.go index 8d916926f3..c85ed93f39 100644 --- a/precompiles/ArbGasInfo.go +++ b/precompiles/ArbGasInfo.go @@ -29,7 +29,7 @@ func (con ArbGasInfo) GetPricesInWeiWithAggregator( evm mech, aggregator addr, ) (huge, huge, huge, huge, huge, huge, error) { - if c.State.ArbOSVersion() < 4 { + if c.State.ArbOSVersion() < params.ArbosVersion_4 { return con._preVersion4_GetPricesInWeiWithAggregator(c, evm, aggregator) } @@ -105,7 +105,7 @@ func (con ArbGasInfo) GetPricesInWei(c ctx, evm mech) (huge, huge, huge, huge, h // GetPricesInArbGasWithAggregator gets prices in ArbGas when using the provided aggregator func (con ArbGasInfo) GetPricesInArbGasWithAggregator(c ctx, evm mech, aggregator addr) (huge, huge, huge, error) { - if c.State.ArbOSVersion() < 4 { + if c.State.ArbOSVersion() < params.ArbosVersion_4 { return con._preVersion4_GetPricesInArbGasWithAggregator(c, evm, aggregator) } l1GasPrice, err := c.State.L1PricingState().PricePerUnit() @@ -220,7 +220,7 @@ func (con ArbGasInfo) GetGasBacklogTolerance(c ctx, evm mech) (uint64, error) { // GetL1PricingSurplus gets the surplus of funds for L1 batch posting payments (may be negative) func (con ArbGasInfo) GetL1PricingSurplus(c ctx, evm mech) (*big.Int, error) { - if c.State.ArbOSVersion() < 10 { + if c.State.ArbOSVersion() < params.ArbosVersion_10 { return con._preversion10_GetL1PricingSurplus(c, evm) } ps := c.State.L1PricingState() diff --git a/precompiles/ArbOwnerPublic.go b/precompiles/ArbOwnerPublic.go index 451e18e1cc..792b4bb59d 100644 --- a/precompiles/ArbOwnerPublic.go +++ b/precompiles/ArbOwnerPublic.go @@ -5,6 +5,7 @@ package precompiles import ( "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" ) // ArbOwnerPublic precompile provides non-owners with info about the current chain owners. @@ -42,7 +43,7 @@ func (con ArbOwnerPublic) GetNetworkFeeAccount(c ctx, evm mech) (addr, error) { // GetInfraFeeAccount gets the infrastructure fee collector func (con ArbOwnerPublic) GetInfraFeeAccount(c ctx, evm mech) (addr, error) { - if c.State.ArbOSVersion() < 6 { + if c.State.ArbOSVersion() < params.ArbosVersion_6 { return c.State.NetworkFeeAccount() } return c.State.InfraFeeAccount() diff --git a/precompiles/ArbOwner_test.go b/precompiles/ArbOwner_test.go index 51b2fc0cd9..74b29a79b5 100644 --- a/precompiles/ArbOwner_test.go +++ b/precompiles/ArbOwner_test.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/burn" @@ -218,7 +219,7 @@ func TestArbInfraFeeAccount(t *testing.T) { err = prec.SetInfraFeeAccount(callCtx, evm, newAddr) // this should be a no-op (because ArbOS version 0) Require(t, err) - version5 := uint64(5) + version5 := params.ArbosVersion_5 evm = newMockEVMForTestingWithVersion(&version5) callCtx = testContext(caller, evm) prec = &ArbOwner{} diff --git a/precompiles/ArbRetryableTx.go b/precompiles/ArbRetryableTx.go index 8fb5aa9391..06e5ccd352 100644 --- a/precompiles/ArbRetryableTx.go +++ b/precompiles/ArbRetryableTx.go @@ -39,7 +39,7 @@ type ArbRetryableTx struct { var ErrSelfModifyingRetryable = errors.New("retryable cannot modify itself") func (con ArbRetryableTx) oldNotFoundError(c ctx) error { - if c.State.ArbOSVersion() >= 3 { + if c.State.ArbOSVersion() >= params.ArbosVersion_3 { return con.NoTicketWithIDError() } return errors.New("ticketId not found") diff --git a/precompiles/ArbSys.go b/precompiles/ArbSys.go index 04cde46ebe..9742ed51f4 100644 --- a/precompiles/ArbSys.go +++ b/precompiles/ArbSys.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/util/arbmath" @@ -37,7 +38,7 @@ func (con *ArbSys) ArbBlockNumber(c ctx, evm mech) (huge, error) { // ArbBlockHash gets the L2 block hash, if sufficiently recent func (con *ArbSys) ArbBlockHash(c ctx, evm mech, arbBlockNumber *big.Int) (bytes32, error) { if !arbBlockNumber.IsUint64() { - if c.State.ArbOSVersion() >= 11 { + if c.State.ArbOSVersion() >= params.ArbosVersion_11 { return bytes32{}, con.InvalidBlockNumberError(arbBlockNumber, evm.Context.BlockNumber) } return bytes32{}, errors.New("invalid block number") @@ -46,7 +47,7 @@ func (con *ArbSys) ArbBlockHash(c ctx, evm mech, arbBlockNumber *big.Int) (bytes currentNumber := evm.Context.BlockNumber.Uint64() if requestedBlockNum >= currentNumber || requestedBlockNum+256 < currentNumber { - if c.State.ArbOSVersion() >= 11 { + if c.State.ArbOSVersion() >= params.ArbosVersion_11 { return common.Hash{}, con.InvalidBlockNumberError(arbBlockNumber, evm.Context.BlockNumber) } return common.Hash{}, errors.New("invalid block number for ArbBlockHAsh") @@ -84,7 +85,7 @@ func (con *ArbSys) MapL1SenderContractAddressToL2Alias(c ctx, sender addr, dest // WasMyCallersAddressAliased checks if the caller's caller was aliased func (con *ArbSys) WasMyCallersAddressAliased(c ctx, evm mech) (bool, error) { topLevel := con.isTopLevel(c, evm) - if c.State.ArbOSVersion() < 6 { + if c.State.ArbOSVersion() < params.ArbosVersion_6 { topLevel = evm.Depth() == 2 } aliased := topLevel && util.DoesTxTypeAlias(c.txProcessor.TopTxType) @@ -180,7 +181,7 @@ func (con *ArbSys) SendTxToL1(c ctx, evm mech, value huge, destination addr, cal calldataForL1, ) - if c.State.ArbOSVersion() >= 4 { + if c.State.ArbOSVersion() >= params.ArbosVersion_4 { return leafNum, nil } return sendHash.Big(), err diff --git a/precompiles/precompile.go b/precompiles/precompile.go index 5b5376a4ca..54d18a0cc9 100644 --- a/precompiles/precompile.go +++ b/precompiles/precompile.go @@ -361,7 +361,7 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr args = args[2:] version := arbosState.ArbOSVersion(state) - if callerCtx.readOnly && version >= 11 { + if callerCtx.readOnly && version >= params.ArbosVersion_11 { return []reflect.Value{reflect.ValueOf(vm.ErrWriteProtection)} } @@ -531,14 +531,14 @@ func Precompiles() map[addr]ArbosPrecompile { insert(MakePrecompile(pgen.ArbFunctionTableMetaData, &ArbFunctionTable{Address: types.ArbFunctionTableAddress})) insert(MakePrecompile(pgen.ArbosTestMetaData, &ArbosTest{Address: types.ArbosTestAddress})) ArbGasInfo := insert(MakePrecompile(pgen.ArbGasInfoMetaData, &ArbGasInfo{Address: types.ArbGasInfoAddress})) - ArbGasInfo.methodsByName["GetL1FeesAvailable"].arbosVersion = 10 - ArbGasInfo.methodsByName["GetL1RewardRate"].arbosVersion = 11 - ArbGasInfo.methodsByName["GetL1RewardRecipient"].arbosVersion = 11 - ArbGasInfo.methodsByName["GetL1PricingEquilibrationUnits"].arbosVersion = 20 - ArbGasInfo.methodsByName["GetLastL1PricingUpdateTime"].arbosVersion = 20 - ArbGasInfo.methodsByName["GetL1PricingFundsDueForRewards"].arbosVersion = 20 - ArbGasInfo.methodsByName["GetL1PricingUnitsSinceUpdate"].arbosVersion = 20 - ArbGasInfo.methodsByName["GetLastL1PricingSurplus"].arbosVersion = 20 + ArbGasInfo.methodsByName["GetL1FeesAvailable"].arbosVersion = params.ArbosVersion_10 + ArbGasInfo.methodsByName["GetL1RewardRate"].arbosVersion = params.ArbosVersion_11 + ArbGasInfo.methodsByName["GetL1RewardRecipient"].arbosVersion = params.ArbosVersion_11 + ArbGasInfo.methodsByName["GetL1PricingEquilibrationUnits"].arbosVersion = params.ArbosVersion_20 + ArbGasInfo.methodsByName["GetLastL1PricingUpdateTime"].arbosVersion = params.ArbosVersion_20 + ArbGasInfo.methodsByName["GetL1PricingFundsDueForRewards"].arbosVersion = params.ArbosVersion_20 + ArbGasInfo.methodsByName["GetL1PricingUnitsSinceUpdate"].arbosVersion = params.ArbosVersion_20 + ArbGasInfo.methodsByName["GetLastL1PricingSurplus"].arbosVersion = params.ArbosVersion_20 insert(MakePrecompile(pgen.ArbAggregatorMetaData, &ArbAggregator{Address: types.ArbAggregatorAddress})) insert(MakePrecompile(pgen.ArbStatisticsMetaData, &ArbStatistics{Address: types.ArbStatisticsAddress})) @@ -554,10 +554,10 @@ func Precompiles() map[addr]ArbosPrecompile { ArbOwnerPublicImpl := &ArbOwnerPublic{Address: types.ArbOwnerPublicAddress} ArbOwnerPublic := insert(MakePrecompile(pgen.ArbOwnerPublicMetaData, ArbOwnerPublicImpl)) - ArbOwnerPublic.methodsByName["GetInfraFeeAccount"].arbosVersion = 5 - ArbOwnerPublic.methodsByName["RectifyChainOwner"].arbosVersion = 11 - ArbOwnerPublic.methodsByName["GetBrotliCompressionLevel"].arbosVersion = 20 - ArbOwnerPublic.methodsByName["GetScheduledUpgrade"].arbosVersion = 20 + ArbOwnerPublic.methodsByName["GetInfraFeeAccount"].arbosVersion = params.ArbosVersion_5 + ArbOwnerPublic.methodsByName["RectifyChainOwner"].arbosVersion = params.ArbosVersion_11 + ArbOwnerPublic.methodsByName["GetBrotliCompressionLevel"].arbosVersion = params.ArbosVersion_20 + ArbOwnerPublic.methodsByName["GetScheduledUpgrade"].arbosVersion = params.ArbosVersion_20 ArbWasmImpl := &ArbWasm{Address: types.ArbWasmAddress} ArbWasm := insert(MakePrecompile(pgen.ArbWasmMetaData, ArbWasmImpl)) @@ -611,11 +611,11 @@ func Precompiles() map[addr]ArbosPrecompile { return ArbOwnerImpl.OwnerActs(context, evm, method, owner, data) } _, ArbOwner := MakePrecompile(pgen.ArbOwnerMetaData, ArbOwnerImpl) - ArbOwner.methodsByName["GetInfraFeeAccount"].arbosVersion = 5 - ArbOwner.methodsByName["SetInfraFeeAccount"].arbosVersion = 5 - ArbOwner.methodsByName["ReleaseL1PricerSurplusFunds"].arbosVersion = 10 - ArbOwner.methodsByName["SetChainConfig"].arbosVersion = 11 - ArbOwner.methodsByName["SetBrotliCompressionLevel"].arbosVersion = 20 + ArbOwner.methodsByName["GetInfraFeeAccount"].arbosVersion = params.ArbosVersion_5 + ArbOwner.methodsByName["SetInfraFeeAccount"].arbosVersion = params.ArbosVersion_5 + ArbOwner.methodsByName["ReleaseL1PricerSurplusFunds"].arbosVersion = params.ArbosVersion_10 + ArbOwner.methodsByName["SetChainConfig"].arbosVersion = params.ArbosVersion_11 + ArbOwner.methodsByName["SetBrotliCompressionLevel"].arbosVersion = params.ArbosVersion_20 stylusMethods := []string{ "SetInkPrice", "SetWasmMaxStackDepth", "SetWasmFreePages", "SetWasmPageGas", "SetWasmPageLimit", "SetWasmMinInitGas", "SetWasmInitCostScalar", @@ -798,7 +798,7 @@ func (p *Precompile) Call( ) } // nolint:errorlint - if arbosVersion >= 11 || errRet == vm.ErrExecutionReverted { + if arbosVersion >= params.ArbosVersion_11 || errRet == vm.ErrExecutionReverted { return nil, callerCtx.gasLeft, vm.ErrExecutionReverted } // Preserve behavior with old versions which would zero out gas on this type of error diff --git a/precompiles/precompile_test.go b/precompiles/precompile_test.go index c8b8a46b96..75fed711eb 100644 --- a/precompiles/precompile_test.go +++ b/precompiles/precompile_test.go @@ -190,13 +190,13 @@ func TestPrecompilesPerArbosVersion(t *testing.T) { log.SetDefault(log.NewLogger(glogger)) expectedNewMethodsPerArbosVersion := map[uint64]int{ - 0: 89, - 5: 3, - 10: 2, - 11: 4, - 20: 8, - 30: 38, - 31: 1, + 0: 89, + params.ArbosVersion_5: 3, + params.ArbosVersion_10: 2, + params.ArbosVersion_11: 4, + params.ArbosVersion_20: 8, + params.ArbosVersion_30: 38, + params.ArbosVersion_31: 1, } precompiles := Precompiles() diff --git a/precompiles/wrapper.go b/precompiles/wrapper.go index edc079fc5b..028aed755b 100644 --- a/precompiles/wrapper.go +++ b/precompiles/wrapper.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/util" @@ -102,7 +103,7 @@ func (wrapper *OwnerPrecompile) Call( } version := arbosState.ArbOSVersion(evm.StateDB) - if !readOnly || version < 11 { + if !readOnly || version < params.ArbosVersion_11 { // log that the owner operation succeeded if err := wrapper.emitSuccess(evm, *(*[4]byte)(input[:4]), caller, input); err != nil { log.Error("failed to emit OwnerActs event", "err", err) diff --git a/system_tests/block_validator_test.go b/system_tests/block_validator_test.go index 4a9e38d25f..d6ae4973ac 100644 --- a/system_tests/block_validator_test.go +++ b/system_tests/block_validator_test.go @@ -19,6 +19,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbos/l2pricing" @@ -58,7 +59,7 @@ func testBlockValidatorSimple(t *testing.T, opts Options) { chainConfig, l1NodeConfigA, lifecycleManager, _, dasSignerKey := setupConfigWithDAS(t, ctx, opts.dasModeString) defer lifecycleManager.StopAndWaitUntil(time.Second) if opts.workload == upgradeArbOs { - chainConfig.ArbitrumChainParams.InitialArbOSVersion = 10 + chainConfig.ArbitrumChainParams.InitialArbOSVersion = params.ArbosVersion_10 } var delayEvery int diff --git a/system_tests/estimation_test.go b/system_tests/estimation_test.go index e489b1864e..37e1efe8c5 100644 --- a/system_tests/estimation_test.go +++ b/system_tests/estimation_test.go @@ -162,7 +162,7 @@ func TestDifficultyForArbOSTen(t *testing.T) { defer cancel() builder := NewNodeBuilder(ctx).DefaultConfig(t, false) - builder.chainConfig.ArbitrumChainParams.InitialArbOSVersion = 10 + builder.chainConfig.ArbitrumChainParams.InitialArbOSVersion = params.ArbosVersion_10 cleanup := builder.Build(t) defer cleanup() diff --git a/system_tests/fees_test.go b/system_tests/fees_test.go index 76de23e2cb..5540728df8 100644 --- a/system_tests/fees_test.go +++ b/system_tests/fees_test.go @@ -89,10 +89,10 @@ func TestSequencerFeePaid(t *testing.T) { feePaidForL2 := arbmath.BigMulByUint(gasPrice, gasUsedForL2) tipPaidToNet := arbmath.BigMulByUint(tipCap, receipt.GasUsedForL1) gotTip := arbmath.BigEquals(networkRevenue, arbmath.BigAdd(feePaidForL2, tipPaidToNet)) - if !gotTip && version == 9 { + if !gotTip && version == params.ArbosVersion_9 { Fatal(t, "network didn't receive expected payment", networkRevenue, feePaidForL2, tipPaidToNet) } - if gotTip && version != 9 { + if gotTip && version != params.ArbosVersion_9 { Fatal(t, "tips are somehow enabled") } @@ -110,7 +110,7 @@ func TestSequencerFeePaid(t *testing.T) { return networkRevenue, tipPaidToNet } - if version != 9 { + if version != params.ArbosVersion_9 { testFees(3) return } diff --git a/system_tests/precompile_test.go b/system_tests/precompile_test.go index 78f34df6c7..df9a91342c 100644 --- a/system_tests/precompile_test.go +++ b/system_tests/precompile_test.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/l1pricing" @@ -27,7 +28,7 @@ func TestPurePrecompileMethodCalls(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - arbosVersion := uint64(31) + arbosVersion := params.ArbosVersion_31 builder := NewNodeBuilder(ctx). DefaultConfig(t, false). WithArbOSVersion(arbosVersion) diff --git a/system_tests/retryable_test.go b/system_tests/retryable_test.go index 55d26c8372..49bba81374 100644 --- a/system_tests/retryable_test.go +++ b/system_tests/retryable_test.go @@ -316,7 +316,7 @@ func testSubmitRetryableEmptyEscrow(t *testing.T, arbosVersion uint64) { state, err := builder.L2.ExecNode.ArbInterface.BlockChain().State() Require(t, err) escrowExists := state.Exist(escrowAccount) - if escrowExists != (arbosVersion < 30) { + if escrowExists != (arbosVersion < params.ArbosVersion_30) { Fatal(t, "Escrow account existance", escrowExists, "doesn't correspond to ArbOS version", arbosVersion) } } diff --git a/system_tests/transfer_test.go b/system_tests/transfer_test.go index a49e059351..c221ecc137 100644 --- a/system_tests/transfer_test.go +++ b/system_tests/transfer_test.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" ) func TestTransfer(t *testing.T) { @@ -51,12 +52,12 @@ func TestP256Verify(t *testing.T) { }{ { desc: "p256 should not be enabled on arbOS 20", - initialVersion: 20, + initialVersion: params.ArbosVersion_20, want: nil, }, { desc: "p256 should be enabled on arbOS 20", - initialVersion: 30, + initialVersion: params.ArbosVersion_30, want: common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001"), }, } { From 982bd682d58ff4c1cabfa765f3669835ec19aa22 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Fri, 20 Dec 2024 09:30:12 -0700 Subject: [PATCH 121/187] Include tx compression level in calldata units cache --- arbos/l1pricing/l1pricing.go | 10 +-- execution/gethexec/executionengine.go | 3 +- go-ethereum | 2 +- system_tests/arbos_upgrade_test.go | 87 ++++++++++++++++++++++++++- 4 files changed, 95 insertions(+), 7 deletions(-) diff --git a/arbos/l1pricing/l1pricing.go b/arbos/l1pricing/l1pricing.go index 37dae08c33..36d8ae49f1 100644 --- a/arbos/l1pricing/l1pricing.go +++ b/arbos/l1pricing/l1pricing.go @@ -8,7 +8,6 @@ import ( "errors" "fmt" "math/big" - "sync/atomic" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -520,10 +519,13 @@ func (ps *L1PricingState) GetPosterInfo(tx *types.Transaction, poster common.Add if poster != BatchPosterAddress { return common.Big0, 0 } - units := atomic.LoadUint64(&tx.CalldataUnits) - if units == 0 { + var units uint64 + if cachedUnits := tx.GetCachedCalldataUnits(brotliCompressionLevel); cachedUnits != nil { + units = *cachedUnits + } else { + // The cache is empty or invalid, so we need to compute the calldata units units = ps.getPosterUnitsWithoutCache(tx, poster, brotliCompressionLevel) - atomic.StoreUint64(&tx.CalldataUnits, units) + tx.SetCachedCalldataUnits(brotliCompressionLevel, units) } // Approximate the l1 fee charged for posting this tx's calldata diff --git a/execution/gethexec/executionengine.go b/execution/gethexec/executionengine.go index 69535e82be..ffc6ceee9f 100644 --- a/execution/gethexec/executionengine.go +++ b/execution/gethexec/executionengine.go @@ -789,7 +789,8 @@ func (s *ExecutionEngine) cacheL1PriceDataOfMsg(seqNum arbutil.MessageIndex, rec gasUsedForL1 += receipts[i].GasUsedForL1 } for _, tx := range block.Transactions() { - callDataUnits += tx.CalldataUnits + _, cachedUnits := tx.GetRawCachedCalldataUnits() + callDataUnits += cachedUnits } } l1GasCharged := gasUsedForL1 * block.BaseFee().Uint64() diff --git a/go-ethereum b/go-ethereum index 4f47f4c6ea..deba80e729 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 4f47f4c6eafd81290d51a7f11fbd99bc2fc3c5a6 +Subproject commit deba80e729580237fc00c5e1dd6242385cb553de diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go index 805def1781..a7103a8585 100644 --- a/system_tests/arbos_upgrade_test.go +++ b/system_tests/arbos_upgrade_test.go @@ -16,6 +16,7 @@ import ( "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbos/arbosState" + "github.com/offchainlabs/nitro/execution/gethexec" "github.com/offchainlabs/nitro/solgen/go/mocksgen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" ) @@ -81,7 +82,7 @@ func checkArbOSVersion(t *testing.T, testClient *TestClient, expectedVersion uin } -func TestArbos11To32Upgrade(t *testing.T) { +func TestArbos11To32UpgradeWithMcopy(t *testing.T) { t.Parallel() ctx, cancel := context.WithCancel(context.Background()) @@ -184,3 +185,87 @@ func TestArbos11To32Upgrade(t *testing.T) { t.Errorf("expected sequencer and replica to have same block hash, got %v and %v", blockSeq.Hash(), blockReplica.Hash()) } } + +func TestArbos11To32UpgradeWithCalldata(t *testing.T) { + t.Parallel() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + initialVersion := uint64(11) + finalVersion := uint64(32) + + builder := NewNodeBuilder(ctx). + DefaultConfig(t, true). + WithArbOSVersion(initialVersion) + builder.execConfig.TxPreChecker.Strictness = gethexec.TxPreCheckerStrictnessLikelyCompatible + cleanup := builder.Build(t) + defer cleanup() + seqTestClient := builder.L2 + + auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) + auth.GasLimit = 32000000 + + // makes Owner a chain owner + arbDebug, err := precompilesgen.NewArbDebug(types.ArbDebugAddress, seqTestClient.Client) + Require(t, err) + tx, err := arbDebug.BecomeChainOwner(&auth) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, seqTestClient.Client, tx) + Require(t, err) + + // build replica node + replicaConfig := arbnode.ConfigDefaultL1Test() + replicaConfig.BatchPoster.Enable = false + replicaTestClient, replicaCleanup := builder.Build2ndNode(t, &SecondNodeParams{nodeConfig: replicaConfig}) + defer replicaCleanup() + + checkArbOSVersion(t, seqTestClient, initialVersion, "initial sequencer") + checkArbOSVersion(t, replicaTestClient, initialVersion, "initial replica") + + // upgrade arbos to final version + arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, seqTestClient.Client) + Require(t, err) + tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, finalVersion, 0) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + + // checks upgrade worked + var data []byte + for i := range 10 { + for range 100 { + data = append(data, byte(i)) + } + } + tx = builder.L2Info.PrepareTx("Owner", "Owner", builder.L2Info.TransferGas, big.NewInt(1e12), data) + err = seqTestClient.Client.SendTransaction(ctx, tx) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + + checkArbOSVersion(t, seqTestClient, finalVersion, "final sequencer") + checkArbOSVersion(t, replicaTestClient, finalVersion, "final replica") + + blockNumberSeq, err := seqTestClient.Client.BlockNumber(ctx) + Require(t, err) + blockNumberReplica, err := replicaTestClient.Client.BlockNumber(ctx) + Require(t, err) + if blockNumberSeq != blockNumberReplica { + t.Errorf("expected sequencer and replica to have same block number, got %v and %v", blockNumberSeq, blockNumberReplica) + } + // #nosec G115 + blockNumber := big.NewInt(int64(blockNumberSeq)) + + blockSeq, err := seqTestClient.Client.BlockByNumber(ctx, blockNumber) + Require(t, err) + blockReplica, err := replicaTestClient.Client.BlockByNumber(ctx, blockNumber) + Require(t, err) + if blockSeq.Hash() != blockReplica.Hash() { + t.Errorf("expected sequencer and replica to have same block hash, got %v and %v", blockSeq.Hash(), blockReplica.Hash()) + } +} From 6516c5ae304158ac4134f99ca170418b7e807fac Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Fri, 20 Dec 2024 09:33:17 -0700 Subject: [PATCH 122/187] Bump geth pin to fix lint --- go-ethereum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go-ethereum b/go-ethereum index deba80e729..b6a8f8999c 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit deba80e729580237fc00c5e1dd6242385cb553de +Subproject commit b6a8f8999c8605bdb1d1eedb96bf6e1c31a6f054 From 1fcab9fe1645c3caf746b67dec9a737ee82ae6d2 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 20 Dec 2024 14:40:33 -0300 Subject: [PATCH 123/187] Divide wat generation in multiple functions --- .../tools/stylus_benchmark/src/scenario.rs | 71 +++++++++++++------ 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index 39afbfc8b4..a6c4bf4d88 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -12,14 +12,7 @@ pub enum Scenario { AddI32, } -fn generate_add_i32_wat() -> Vec { - let number_of_loop_iterations = 10_000; - let number_of_ops_per_loop_iteration = 2000; - let number_of_ops = number_of_loop_iterations * number_of_ops_per_loop_iteration; - - let mut wat = Vec::new(); - - // preamble +fn write_wat_beginning(wat: &mut Vec) { wat.write_all(b"(module\n").unwrap(); wat.write_all(b" (import \"debug\" \"start_benchmark\" (func $start_benchmark))\n") .unwrap(); @@ -32,37 +25,71 @@ fn generate_add_i32_wat() -> Vec { wat.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n") .unwrap(); - wat.write_all(b" call $start_benchmark\n").unwrap(); + wat.write_all(b" call $start_benchmark\n") + .unwrap(); - // ops to be benchmarked wat.write_all(b" (loop $loop\n").unwrap(); - wat.write_all(b" i32.const 0\n").unwrap(); - for _ in 0..number_of_ops_per_loop_iteration { - wat.write_all(b" i32.const 1\n").unwrap(); - wat.write_all(b" i32.add\n").unwrap(); - } - wat.write_all(b" drop\n").unwrap(); +} + +fn write_wat_end( + wat: &mut Vec, + number_of_loop_iterations: usize, + number_of_ops_per_loop_iteration: usize, +) { + let number_of_ops = number_of_loop_iterations * number_of_ops_per_loop_iteration; // update ops_counter - wat.write_all(b" global.get $ops_counter\n").unwrap(); - wat.write_all(format!(" i32.const {}\n", number_of_ops_per_loop_iteration).as_bytes()) + wat.write_all(b" global.get $ops_counter\n") .unwrap(); + wat.write_all( + format!( + " i32.const {}\n", + number_of_ops_per_loop_iteration + ) + .as_bytes(), + ) + .unwrap(); wat.write_all(b" i32.add\n").unwrap(); - wat.write_all(b" global.set $ops_counter\n").unwrap(); + wat.write_all(b" global.set $ops_counter\n") + .unwrap(); // check if we need to continue looping - wat.write_all(b" global.get $ops_counter\n").unwrap(); + wat.write_all(b" global.get $ops_counter\n") + .unwrap(); wat.write_all(format!(" i32.const {}\n", number_of_ops).as_bytes()) .unwrap(); wat.write_all(b" i32.lt_s\n").unwrap(); wat.write_all(b" br_if $loop)\n").unwrap(); - wat.write_all(b" call $end_benchmark\n").unwrap(); + wat.write_all(b" call $end_benchmark\n").unwrap(); wat.write_all(b" i32.const 0)\n").unwrap(); wat.write_all(b")").unwrap(); +} - wat +fn generate_add_i32_wat() -> Vec { + let number_of_loop_iterations = 10_000; + let number_of_ops_per_loop_iteration = 2000; + + let mut wat = Vec::new(); + + write_wat_beginning(&mut wat); + + // ops to be benchmarked + wat.write_all(b" i32.const 0\n").unwrap(); + for _ in 0..number_of_ops_per_loop_iteration { + wat.write_all(b" i32.const 1\n").unwrap(); + wat.write_all(b" i32.add\n").unwrap(); + } + wat.write_all(b" drop\n").unwrap(); + + write_wat_end( + &mut wat, + number_of_loop_iterations, + number_of_ops_per_loop_iteration, + ); + + wat.to_vec() } pub fn generate_wat(scenario: Scenario, output_wat_dir_path: Option) -> Vec { From 367f77b956f6680f0131bb43bebea627cbd6366b Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 20 Dec 2024 14:44:04 -0300 Subject: [PATCH 124/187] Benchmark XorI32 --- .../tools/stylus_benchmark/src/scenario.rs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index a6c4bf4d88..ea5ff9b702 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -10,6 +10,8 @@ use strum_macros::{Display, EnumIter, EnumString}; pub enum Scenario { #[strum(serialize = "add_i32")] AddI32, + #[strum(serialize = "xor_i32")] + XorI32, } fn write_wat_beginning(wat: &mut Vec) { @@ -92,9 +94,35 @@ fn generate_add_i32_wat() -> Vec { wat.to_vec() } +fn generate_xor_i32_wat() -> Vec { + let number_of_loop_iterations = 10_000; + let number_of_ops_per_loop_iteration = 2000; + + let mut wat = Vec::new(); + + write_wat_beginning(&mut wat); + + // ops to be benchmarked + wat.write_all(b" i32.const 1231\n").unwrap(); + for _ in 0..number_of_ops_per_loop_iteration { + wat.write_all(b" i32.const 12312313\n").unwrap(); + wat.write_all(b" i32.xor\n").unwrap(); + } + wat.write_all(b" drop\n").unwrap(); + + write_wat_end( + &mut wat, + number_of_loop_iterations, + number_of_ops_per_loop_iteration, + ); + + wat.to_vec() +} + pub fn generate_wat(scenario: Scenario, output_wat_dir_path: Option) -> Vec { let wat = match scenario { Scenario::AddI32 => generate_add_i32_wat(), + Scenario::XorI32 => generate_xor_i32_wat(), }; // print wat to file if needed From 56b335466ad85da803b8c3e94020f7dcad6b9227 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 20 Dec 2024 14:55:31 -0300 Subject: [PATCH 125/187] Avoids unnecessary derivative --- arbitrator/arbutil/Cargo.toml | 1 - arbitrator/arbutil/src/benchmark.rs | 4 +--- arbitrator/tools/stylus_benchmark/Cargo.lock | 1 - 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/arbitrator/arbutil/Cargo.toml b/arbitrator/arbutil/Cargo.toml index b3fd156364..3fe1a9d134 100644 --- a/arbitrator/arbutil/Cargo.toml +++ b/arbitrator/arbutil/Cargo.toml @@ -17,4 +17,3 @@ serde = { version = "1.0.130", features = ["derive", "rc"] } num_enum = "0.7.1" sha2 = "0.10.7" sha3 = "0.10.8" -derivative = "2.2.0" diff --git a/arbitrator/arbutil/src/benchmark.rs b/arbitrator/arbutil/src/benchmark.rs index 1bc25ae999..580d0191a0 100644 --- a/arbitrator/arbutil/src/benchmark.rs +++ b/arbitrator/arbutil/src/benchmark.rs @@ -2,12 +2,10 @@ // For license information, see https://github.com/nitro/blob/master/LICENSE use crate::evm::api::Ink; -use derivative::Derivative; use std::time::{Duration, Instant}; // Benchmark is used to track the performance of blocks of code in stylus -#[derive(Derivative, Clone, Copy, Default)] -#[derivative(Debug)] +#[derive(Clone, Copy, Debug, Default)] pub struct Benchmark { pub timer: Option, pub elapsed_total: Duration, diff --git a/arbitrator/tools/stylus_benchmark/Cargo.lock b/arbitrator/tools/stylus_benchmark/Cargo.lock index c02bcf6122..fe3ff5e908 100644 --- a/arbitrator/tools/stylus_benchmark/Cargo.lock +++ b/arbitrator/tools/stylus_benchmark/Cargo.lock @@ -111,7 +111,6 @@ dependencies = [ name = "arbutil" version = "0.1.0" dependencies = [ - "derivative", "digest 0.10.7", "eyre", "fnv", From 0ae7046a3fdd45948cdc5bc58b300fca32549089 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 20 Dec 2024 15:13:59 -0300 Subject: [PATCH 126/187] Fixes user-host --- arbitrator/Cargo.lock | 1 - arbitrator/wasm-libraries/Cargo.lock | 1 - arbitrator/wasm-libraries/user-host/src/program.rs | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/arbitrator/Cargo.lock b/arbitrator/Cargo.lock index c0a957265f..2b437968fa 100644 --- a/arbitrator/Cargo.lock +++ b/arbitrator/Cargo.lock @@ -144,7 +144,6 @@ checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" name = "arbutil" version = "0.1.0" dependencies = [ - "derivative", "digest 0.10.7", "eyre", "fnv", diff --git a/arbitrator/wasm-libraries/Cargo.lock b/arbitrator/wasm-libraries/Cargo.lock index 438a0cf563..a5a066e5c9 100644 --- a/arbitrator/wasm-libraries/Cargo.lock +++ b/arbitrator/wasm-libraries/Cargo.lock @@ -68,7 +68,6 @@ dependencies = [ name = "arbutil" version = "0.1.0" dependencies = [ - "derivative", "digest 0.10.7", "eyre", "fnv", diff --git a/arbitrator/wasm-libraries/user-host/src/program.rs b/arbitrator/wasm-libraries/user-host/src/program.rs index c2af356535..a2973ce56f 100644 --- a/arbitrator/wasm-libraries/user-host/src/program.rs +++ b/arbitrator/wasm-libraries/user-host/src/program.rs @@ -170,7 +170,7 @@ impl Program { outs: vec![], evm_api: EvmApiRequestor::new(UserHostRequester::default()), evm_data, - benchmark: None, + benchmark: Benchmark::default(), module, config, early_exit: None, From cc8ba64e95ba05e65725e1c5730262f055b46492 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Fri, 20 Dec 2024 15:15:05 -0300 Subject: [PATCH 127/187] Increases number of operations --- arbitrator/tools/stylus_benchmark/src/scenario.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index ea5ff9b702..36602dbb73 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -70,7 +70,7 @@ fn write_wat_end( } fn generate_add_i32_wat() -> Vec { - let number_of_loop_iterations = 10_000; + let number_of_loop_iterations = 200_000; let number_of_ops_per_loop_iteration = 2000; let mut wat = Vec::new(); @@ -95,7 +95,7 @@ fn generate_add_i32_wat() -> Vec { } fn generate_xor_i32_wat() -> Vec { - let number_of_loop_iterations = 10_000; + let number_of_loop_iterations = 200_000; let number_of_ops_per_loop_iteration = 2000; let mut wat = Vec::new(); From 8af1b4b90c06ba588d80ba281748511a684db53f Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 23 Dec 2024 08:31:40 -0300 Subject: [PATCH 128/187] Fixes user-test --- arbitrator/wasm-libraries/user-test/src/program.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbitrator/wasm-libraries/user-test/src/program.rs b/arbitrator/wasm-libraries/user-test/src/program.rs index 602170be37..99252a38f0 100644 --- a/arbitrator/wasm-libraries/user-test/src/program.rs +++ b/arbitrator/wasm-libraries/user-test/src/program.rs @@ -97,7 +97,7 @@ impl Program { pub fn current() -> Self { Self { evm_api: MockEvmApi, - benchmark: None, + benchmark: Benchmark::default(), } } From b0e79e5ce944db433f7b4ebcefc2f05a406d8b5e Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 23 Dec 2024 09:34:19 -0300 Subject: [PATCH 129/187] Fix clippy check --- .../wasm-libraries/user-host-trait/src/lib.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index 2992921a5b..25163e25bc 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -987,17 +987,14 @@ pub trait UserHost: GasMeteredMachine { let ink_curr = self.ink_ready()?; let benchmark = self.benchmark(); - match benchmark.timer { - Some(timer) => { - benchmark.elapsed_total = benchmark.elapsed_total.saturating_add(timer.elapsed()); + if let Some(timer) = benchmark.timer { + benchmark.elapsed_total = benchmark.elapsed_total.saturating_add(timer.elapsed()); - let code_block_ink = benchmark.ink_start.unwrap().saturating_sub(ink_curr); - benchmark.ink_total = benchmark.ink_total.saturating_add(code_block_ink); + let code_block_ink = benchmark.ink_start.unwrap().saturating_sub(ink_curr); + benchmark.ink_total = benchmark.ink_total.saturating_add(code_block_ink); - benchmark.timer = None; - benchmark.ink_start = None; - } - None => {} + benchmark.timer = None; + benchmark.ink_start = None; }; Ok(()) From c270a85339b89dfc2b2d0219dde70161cb4763f7 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 23 Dec 2024 09:43:12 -0300 Subject: [PATCH 130/187] Add comment about the strategy of the programs to be benchmarked --- arbitrator/tools/stylus_benchmark/src/scenario.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index 36602dbb73..78752858d9 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -14,6 +14,11 @@ pub enum Scenario { XorI32, } +// Programs to be benchmarked have a loop in which several similar operations are executed. +// The number of operations per loop is chosen to be large enough so the overhead related to the loop is negligible, +// but not too large to avoid a big program size. +// Keeping a small program size is important to better use CPU cache, trying to keep the code in the cache. + fn write_wat_beginning(wat: &mut Vec) { wat.write_all(b"(module\n").unwrap(); wat.write_all(b" (import \"debug\" \"start_benchmark\" (func $start_benchmark))\n") From 429b0c92130fda94fd20c2b9e5765c5294bb59a4 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Mon, 23 Dec 2024 18:18:24 +0530 Subject: [PATCH 131/187] Changes based on PR comments --- execution/gethexec/api.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/execution/gethexec/api.go b/execution/gethexec/api.go index d3ff209e64..c58fbe7a1e 100644 --- a/execution/gethexec/api.go +++ b/execution/gethexec/api.go @@ -334,24 +334,26 @@ func (api *ArbTraceForwarderAPI) forward(ctx context.Context, method string, arg return resp, nil } -func (api *ArbTraceForwarderAPI) ClipToPostNitroGenesis(blockNumOrHash json.RawMessage) (json.RawMessage, error) { +func (api *ArbTraceForwarderAPI) blockSupportedByClassicNode(blockNumOrHash json.RawMessage) error { var bnh rpc.BlockNumberOrHash err := bnh.UnmarshalJSON(blockNumOrHash) if err != nil { - return nil, err + return err } blockNum, isNum := bnh.Number() if !isNum { - return blockNumOrHash, nil + return nil } blockNum, _ = api.blockchain.ClipToPostNitroGenesis(blockNum) - bnh.BlockNumber = &blockNum - return json.Marshal(bnh) + if blockNum < 0 || blockNum > rpc.BlockNumber(api.blockchain.Config().ArbitrumChainParams.GenesisBlockNum) { + return fmt.Errorf("block number %v is not supported by classic node", blockNum) + } + return nil } func (api *ArbTraceForwarderAPI) Call(ctx context.Context, callArgs json.RawMessage, traceTypes json.RawMessage, blockNumOrHash json.RawMessage) (*json.RawMessage, error) { var err error - blockNumOrHash, err = api.ClipToPostNitroGenesis(blockNumOrHash) + err = api.blockSupportedByClassicNode(blockNumOrHash) if err != nil { return nil, err } @@ -360,7 +362,7 @@ func (api *ArbTraceForwarderAPI) Call(ctx context.Context, callArgs json.RawMess func (api *ArbTraceForwarderAPI) CallMany(ctx context.Context, calls json.RawMessage, blockNumOrHash json.RawMessage) (*json.RawMessage, error) { var err error - blockNumOrHash, err = api.ClipToPostNitroGenesis(blockNumOrHash) + err = api.blockSupportedByClassicNode(blockNumOrHash) if err != nil { return nil, err } @@ -369,7 +371,7 @@ func (api *ArbTraceForwarderAPI) CallMany(ctx context.Context, calls json.RawMes func (api *ArbTraceForwarderAPI) ReplayBlockTransactions(ctx context.Context, blockNumOrHash json.RawMessage, traceTypes json.RawMessage) (*json.RawMessage, error) { var err error - blockNumOrHash, err = api.ClipToPostNitroGenesis(blockNumOrHash) + err = api.blockSupportedByClassicNode(blockNumOrHash) if err != nil { return nil, err } @@ -390,7 +392,7 @@ func (api *ArbTraceForwarderAPI) Get(ctx context.Context, txHash json.RawMessage func (api *ArbTraceForwarderAPI) Block(ctx context.Context, blockNumOrHash json.RawMessage) (*json.RawMessage, error) { var err error - blockNumOrHash, err = api.ClipToPostNitroGenesis(blockNumOrHash) + err = api.blockSupportedByClassicNode(blockNumOrHash) if err != nil { return nil, err } From 667d6ac4a426c9548493a187fdf7cd88d8e006e4 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 23 Dec 2024 09:58:09 -0300 Subject: [PATCH 132/187] Improves wat programs to be benchmarked generation --- .../tools/stylus_benchmark/src/scenario.rs | 43 +++++++------------ 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index 78752858d9..d08c749467 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -32,7 +32,7 @@ fn write_wat_beginning(wat: &mut Vec) { wat.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n") .unwrap(); - wat.write_all(b" call $start_benchmark\n") + wat.write_all(b" call $start_benchmark\n") .unwrap(); wat.write_all(b" (loop $loop\n").unwrap(); @@ -68,13 +68,13 @@ fn write_wat_end( wat.write_all(b" i32.lt_s\n").unwrap(); wat.write_all(b" br_if $loop)\n").unwrap(); - wat.write_all(b" call $end_benchmark\n").unwrap(); + wat.write_all(b" call $end_benchmark\n").unwrap(); wat.write_all(b" i32.const 0)\n").unwrap(); wat.write_all(b")").unwrap(); } -fn generate_add_i32_wat() -> Vec { +fn wat(write_wat_ops: fn(&mut Vec, usize)) -> Vec { let number_of_loop_iterations = 200_000; let number_of_ops_per_loop_iteration = 2000; @@ -82,13 +82,7 @@ fn generate_add_i32_wat() -> Vec { write_wat_beginning(&mut wat); - // ops to be benchmarked - wat.write_all(b" i32.const 0\n").unwrap(); - for _ in 0..number_of_ops_per_loop_iteration { - wat.write_all(b" i32.const 1\n").unwrap(); - wat.write_all(b" i32.add\n").unwrap(); - } - wat.write_all(b" drop\n").unwrap(); + write_wat_ops(&mut wat, number_of_ops_per_loop_iteration); write_wat_end( &mut wat, @@ -99,35 +93,28 @@ fn generate_add_i32_wat() -> Vec { wat.to_vec() } -fn generate_xor_i32_wat() -> Vec { - let number_of_loop_iterations = 200_000; - let number_of_ops_per_loop_iteration = 2000; - - let mut wat = Vec::new(); - - write_wat_beginning(&mut wat); +fn write_add_i32_wat_ops(wat: &mut Vec, number_of_ops_per_loop_iteration: usize) { + wat.write_all(b" i32.const 0\n").unwrap(); + for _ in 0..number_of_ops_per_loop_iteration { + wat.write_all(b" i32.const 1\n").unwrap(); + wat.write_all(b" i32.add\n").unwrap(); + } + wat.write_all(b" drop\n").unwrap(); +} - // ops to be benchmarked +fn write_xor_i32_wat_ops(wat: &mut Vec, number_of_ops_per_loop_iteration: usize) { wat.write_all(b" i32.const 1231\n").unwrap(); for _ in 0..number_of_ops_per_loop_iteration { wat.write_all(b" i32.const 12312313\n").unwrap(); wat.write_all(b" i32.xor\n").unwrap(); } wat.write_all(b" drop\n").unwrap(); - - write_wat_end( - &mut wat, - number_of_loop_iterations, - number_of_ops_per_loop_iteration, - ); - - wat.to_vec() } pub fn generate_wat(scenario: Scenario, output_wat_dir_path: Option) -> Vec { let wat = match scenario { - Scenario::AddI32 => generate_add_i32_wat(), - Scenario::XorI32 => generate_xor_i32_wat(), + Scenario::AddI32 => wat(write_add_i32_wat_ops), + Scenario::XorI32 => wat(write_xor_i32_wat_ops), }; // print wat to file if needed From 6aa0c918d02dbf9e5ea33b6959ee2d144942a68b Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 23 Dec 2024 09:58:47 -0300 Subject: [PATCH 133/187] Fix lint --- arbitrator/tools/stylus_benchmark/src/scenario.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs index d08c749467..348678ed69 100644 --- a/arbitrator/tools/stylus_benchmark/src/scenario.rs +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -32,8 +32,7 @@ fn write_wat_beginning(wat: &mut Vec) { wat.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n") .unwrap(); - wat.write_all(b" call $start_benchmark\n") - .unwrap(); + wat.write_all(b" call $start_benchmark\n").unwrap(); wat.write_all(b" (loop $loop\n").unwrap(); } From ccedd73a55333713dfa20a8190b023d93e758ac6 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Mon, 23 Dec 2024 18:36:20 +0530 Subject: [PATCH 134/187] Fix lint --- execution/gethexec/api.go | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/execution/gethexec/api.go b/execution/gethexec/api.go index c58fbe7a1e..f813dc6a8c 100644 --- a/execution/gethexec/api.go +++ b/execution/gethexec/api.go @@ -344,7 +344,7 @@ func (api *ArbTraceForwarderAPI) blockSupportedByClassicNode(blockNumOrHash json if !isNum { return nil } - blockNum, _ = api.blockchain.ClipToPostNitroGenesis(blockNum) + // #nosec G115 if blockNum < 0 || blockNum > rpc.BlockNumber(api.blockchain.Config().ArbitrumChainParams.GenesisBlockNum) { return fmt.Errorf("block number %v is not supported by classic node", blockNum) } @@ -352,8 +352,7 @@ func (api *ArbTraceForwarderAPI) blockSupportedByClassicNode(blockNumOrHash json } func (api *ArbTraceForwarderAPI) Call(ctx context.Context, callArgs json.RawMessage, traceTypes json.RawMessage, blockNumOrHash json.RawMessage) (*json.RawMessage, error) { - var err error - err = api.blockSupportedByClassicNode(blockNumOrHash) + err := api.blockSupportedByClassicNode(blockNumOrHash) if err != nil { return nil, err } @@ -361,8 +360,7 @@ func (api *ArbTraceForwarderAPI) Call(ctx context.Context, callArgs json.RawMess } func (api *ArbTraceForwarderAPI) CallMany(ctx context.Context, calls json.RawMessage, blockNumOrHash json.RawMessage) (*json.RawMessage, error) { - var err error - err = api.blockSupportedByClassicNode(blockNumOrHash) + err := api.blockSupportedByClassicNode(blockNumOrHash) if err != nil { return nil, err } @@ -370,8 +368,7 @@ func (api *ArbTraceForwarderAPI) CallMany(ctx context.Context, calls json.RawMes } func (api *ArbTraceForwarderAPI) ReplayBlockTransactions(ctx context.Context, blockNumOrHash json.RawMessage, traceTypes json.RawMessage) (*json.RawMessage, error) { - var err error - err = api.blockSupportedByClassicNode(blockNumOrHash) + err := api.blockSupportedByClassicNode(blockNumOrHash) if err != nil { return nil, err } @@ -391,8 +388,7 @@ func (api *ArbTraceForwarderAPI) Get(ctx context.Context, txHash json.RawMessage } func (api *ArbTraceForwarderAPI) Block(ctx context.Context, blockNumOrHash json.RawMessage) (*json.RawMessage, error) { - var err error - err = api.blockSupportedByClassicNode(blockNumOrHash) + err := api.blockSupportedByClassicNode(blockNumOrHash) if err != nil { return nil, err } From 33a80b3d1182c186b75f4d9a314c9e1a99dc9816 Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 23 Dec 2024 10:11:19 -0300 Subject: [PATCH 135/187] Fix lint --- arbitrator/stylus/src/host.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/arbitrator/stylus/src/host.rs b/arbitrator/stylus/src/host.rs index f316cd0611..67497302a1 100644 --- a/arbitrator/stylus/src/host.rs +++ b/arbitrator/stylus/src/host.rs @@ -476,8 +476,6 @@ pub(crate) fn start_benchmark>( hostio!(env, start_benchmark()) } -pub(crate) fn end_benchmark>( - mut env: WasmEnvMut, -) -> MaybeEscape { +pub(crate) fn end_benchmark>(mut env: WasmEnvMut) -> MaybeEscape { hostio!(env, end_benchmark()) } From 28c045b31b87176733ba7b518f99c37fa574107b Mon Sep 17 00:00:00 2001 From: Diego Ximenes Date: Mon, 23 Dec 2024 10:21:56 -0300 Subject: [PATCH 136/187] Fix lint --- arbitrator/tools/stylus_benchmark/src/main.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs index fc5ed16637..4b8971ecab 100644 --- a/arbitrator/tools/stylus_benchmark/src/main.rs +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -19,10 +19,7 @@ struct Args { scenario: Option, } -fn handle_scenario( - scenario: Scenario, - output_wat_dir_path: Option, -) -> eyre::Result<()> { +fn handle_scenario(scenario: Scenario, output_wat_dir_path: Option) -> eyre::Result<()> { println!("Benchmarking {}", scenario); let wat = scenario::generate_wat(scenario, output_wat_dir_path); benchmark::benchmark(wat) From 562747c4da3b75270b795434b4363609fa227b1d Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Mon, 23 Dec 2024 19:19:18 +0530 Subject: [PATCH 137/187] Add metrics for how many Stylus calls and gas used --- arbos/programs/programs.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/arbos/programs/programs.go b/arbos/programs/programs.go index 06ba6ead8c..5e08ba01ac 100644 --- a/arbos/programs/programs.go +++ b/arbos/programs/programs.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" gethParams "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbcompress" @@ -163,6 +164,21 @@ func (p Programs) ActivateProgram(evm *vm.EVM, address common.Address, arbosVers return stylusVersion, codeHash, info.moduleHash, dataFee, false, p.setProgram(codeHash, programData) } +func runModeToString(runmode core.MessageRunMode) string { + switch runmode { + case core.MessageCommitMode: + return "commit_runmode" + case core.MessageGasEstimationMode: + return "gas_estimation_runmode" + case core.MessageEthcallMode: + return "eth_call_runmode" + case core.MessageReplayMode: + return "replay_runmode" + default: + return "unknown_runmode" + } +} + func (p Programs) CallProgram( scope *vm.ScopeContext, statedb vm.StateDB, @@ -250,7 +266,10 @@ func (p Programs) CallProgram( if runmode == core.MessageCommitMode { arbos_tag = statedb.Database().WasmCacheTag() } + + metrics.GetOrRegisterCounter(fmt.Sprintf("arb/arbos/stylus/program_calls/%s", runModeToString(runmode)), nil).Inc(1) ret, err := callProgram(address, moduleHash, localAsm, scope, interpreter, tracingInfo, calldata, evmData, goParams, model, arbos_tag) + gasUsed := callCost if len(ret) > 0 && arbosVersion >= gethParams.ArbosVersion_StylusFixes { // Ensure that return data costs as least as much as it would in the EVM. evmCost := evmMemoryCost(uint64(len(ret))) @@ -260,7 +279,12 @@ func (p Programs) CallProgram( } maxGasToReturn := startingGas - evmCost contract.Gas = am.MinInt(contract.Gas, maxGasToReturn) + if evmCost > gasUsed { + gasUsed = evmCost + } } + // #nosec G115 + metrics.GetOrRegisterCounter(fmt.Sprintf("arb/arbos/stylus/gas_used/%s", runModeToString(runmode)), nil).Inc(int64(gasUsed)) return ret, err } From e3aaf054df3bb7bfb8d2cfb4f4267bde6849a2f2 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Mon, 23 Dec 2024 13:07:27 -0600 Subject: [PATCH 138/187] update submod --- bold | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bold b/bold index d3f4d600ab..53a6195bd7 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit d3f4d600abdacec800e9e27a429a730639233073 +Subproject commit 53a6195bd7bbd749a81319920429a98b0b9213d4 From ddc65ede027f33688a8d437fa5c02672d3e2ad89 Mon Sep 17 00:00:00 2001 From: Pepper Lebeck-Jobe Date: Tue, 24 Dec 2024 17:39:05 +1000 Subject: [PATCH 139/187] Fall back to the confirmed state if the agreed state is nil. This way, the block validators will get updates even for non-staked nodes. Fixes NIT-3009 --- staker/bold/bold_staker.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/staker/bold/bold_staker.go b/staker/bold/bold_staker.go index 1a8eed80fa..539eb80abf 100644 --- a/staker/bold/bold_staker.go +++ b/staker/bold/bold_staker.go @@ -260,6 +260,13 @@ func (b *BOLDStaker) Start(ctxIn context.Context) { } if confirmedGlobalState != nil { + if agreedGlobalState == nil { + // If we don't have a latest agreed global state, we should fall back to + // using the latest confirmed global state. + for _, notifier := range b.stakedNotifiers { + notifier.UpdateLatestStaked(confirmedMsgCount, *confirmedGlobalState) + } + } for _, notifier := range b.confirmedNotifiers { notifier.UpdateLatestConfirmed(confirmedMsgCount, *confirmedGlobalState) } From 944e1fe96093208b27e98d49cd3f57b0f2ba20b4 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Thu, 26 Dec 2024 19:25:56 +0530 Subject: [PATCH 140/187] Changes based on PR comments --- arbos/programs/programs.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/arbos/programs/programs.go b/arbos/programs/programs.go index 5e08ba01ac..e640728ae4 100644 --- a/arbos/programs/programs.go +++ b/arbos/programs/programs.go @@ -269,7 +269,6 @@ func (p Programs) CallProgram( metrics.GetOrRegisterCounter(fmt.Sprintf("arb/arbos/stylus/program_calls/%s", runModeToString(runmode)), nil).Inc(1) ret, err := callProgram(address, moduleHash, localAsm, scope, interpreter, tracingInfo, calldata, evmData, goParams, model, arbos_tag) - gasUsed := callCost if len(ret) > 0 && arbosVersion >= gethParams.ArbosVersion_StylusFixes { // Ensure that return data costs as least as much as it would in the EVM. evmCost := evmMemoryCost(uint64(len(ret))) @@ -279,12 +278,9 @@ func (p Programs) CallProgram( } maxGasToReturn := startingGas - evmCost contract.Gas = am.MinInt(contract.Gas, maxGasToReturn) - if evmCost > gasUsed { - gasUsed = evmCost - } } // #nosec G115 - metrics.GetOrRegisterCounter(fmt.Sprintf("arb/arbos/stylus/gas_used/%s", runModeToString(runmode)), nil).Inc(int64(gasUsed)) + metrics.GetOrRegisterCounter(fmt.Sprintf("arb/arbos/stylus/gas_used/%s", runModeToString(runmode)), nil).Inc(int64(startingGas - contract.Gas)) return ret, err } From a54d33d16b20c494e59b5dec1b918fb45a306633 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Fri, 27 Dec 2024 17:23:21 -0600 Subject: [PATCH 141/187] update geth pin --- .dockerignore | 1 + .github/workflows/arbitrator-ci.yml | 3 + .github/workflows/submodule-pin-check.yml | 6 +- arbitrator/Cargo.toml | 1 + arbitrator/arbutil/src/benchmark.rs | 14 + arbitrator/arbutil/src/lib.rs | 1 + arbitrator/jit/src/lib.rs | 51 + arbitrator/jit/src/main.rs | 51 +- arbitrator/jit/src/prepare.rs | 2 +- arbitrator/jit/src/program.rs | 63 +- arbitrator/jit/src/stylus_backend.rs | 4 + arbitrator/stylus/src/env.rs | 4 + arbitrator/stylus/src/host.rs | 15 + arbitrator/stylus/src/native.rs | 4 + arbitrator/tools/stylus_benchmark/Cargo.lock | 2670 +++++++++++++++++ arbitrator/tools/stylus_benchmark/Cargo.toml | 16 + .../tools/stylus_benchmark/src/benchmark.rs | 105 + arbitrator/tools/stylus_benchmark/src/main.rs | 44 + .../tools/stylus_benchmark/src/scenario.rs | 128 + .../wasm-libraries/user-host-trait/src/lib.rs | 37 + .../wasm-libraries/user-host/src/program.rs | 8 + .../wasm-libraries/user-test/src/program.rs | 7 + arbnode/batch_poster.go | 2 +- arbnode/delayed_sequencer.go | 56 +- arbnode/message_pruner.go | 2 +- arbos/addressSet/addressSet.go | 3 +- arbos/arbosState/arbosstate.go | 39 +- arbos/blockhash/blockhash.go | 3 +- arbos/blockhash/blockhash_test.go | 3 +- arbos/internal_tx.go | 5 +- arbos/l1pricing/l1PricingOldVersions.go | 5 +- arbos/l1pricing/l1pricing.go | 16 +- arbos/programs/native.go | 26 +- arbos/programs/testcompile.go | 26 +- arbos/tx_processor.go | 16 +- arbos/util/transfer.go | 3 +- cmd/conf/database.go | 6 +- cmd/nitro/init.go | 8 +- contracts | 2 +- execution/gethexec/executionengine.go | 3 +- go-ethereum | 2 +- precompiles/ArbGasInfo.go | 6 +- precompiles/ArbOwnerPublic.go | 3 +- precompiles/ArbOwner_test.go | 3 +- precompiles/ArbRetryableTx.go | 2 +- precompiles/ArbSys.go | 9 +- precompiles/precompile.go | 38 +- precompiles/precompile_test.go | 14 +- precompiles/wrapper.go | 3 +- staker/legacy/staker.go | 3 - system_tests/arbos_upgrade_test.go | 271 ++ system_tests/block_validator_test.go | 5 +- system_tests/debugapi_test.go | 235 ++ system_tests/estimation_test.go | 2 +- system_tests/fees_test.go | 6 +- system_tests/precompile_test.go | 54 +- system_tests/retryable_test.go | 2 +- system_tests/transfer_test.go | 5 +- 58 files changed, 3855 insertions(+), 267 deletions(-) create mode 100644 arbitrator/arbutil/src/benchmark.rs create mode 100644 arbitrator/jit/src/lib.rs create mode 100644 arbitrator/tools/stylus_benchmark/Cargo.lock create mode 100644 arbitrator/tools/stylus_benchmark/Cargo.toml create mode 100644 arbitrator/tools/stylus_benchmark/src/benchmark.rs create mode 100644 arbitrator/tools/stylus_benchmark/src/main.rs create mode 100644 arbitrator/tools/stylus_benchmark/src/scenario.rs create mode 100644 system_tests/arbos_upgrade_test.go diff --git a/.dockerignore b/.dockerignore index 51424900e8..2d5303a3be 100644 --- a/.dockerignore +++ b/.dockerignore @@ -36,6 +36,7 @@ arbitrator/tools/wasmer/target/ arbitrator/tools/wasm-tools/ arbitrator/tools/pricers/ arbitrator/tools/module_roots/ +arbitrator/tools/stylus_benchmark arbitrator/langs/rust/target/ arbitrator/langs/bf/target/ diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index 47646017ac..dd58a30571 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -171,6 +171,9 @@ jobs: - name: Rustfmt - langs/rust run: cargo fmt --all --manifest-path arbitrator/langs/rust/Cargo.toml -- --check + - name: Rustfmt - tools/stylus_benchmark + run: cargo fmt --all --manifest-path arbitrator/tools/stylus_benchmark/Cargo.toml -- --check + - name: Make proofs from test cases run: make -j test-gen-proofs diff --git a/.github/workflows/submodule-pin-check.yml b/.github/workflows/submodule-pin-check.yml index 60dd8ad827..94fa705655 100644 --- a/.github/workflows/submodule-pin-check.yml +++ b/.github/workflows/submodule-pin-check.yml @@ -25,9 +25,9 @@ jobs: run: | status_state="pending" declare -Ar exceptions=( - [contracts]=origin/develop + [contracts]=origin/pre-bold [nitro-testnode]=origin/master - + #TODO Rachel to check these are the intended branches. [arbitrator/langs/c]=origin/vm-storage-cache [arbitrator/tools/wasmer]=origin/adopt-v4.2.8 @@ -38,7 +38,7 @@ jobs: if [[ -v exceptions[$mod] ]]; then branch=${exceptions[$mod]} fi - + if ! git -C $mod merge-base --is-ancestor HEAD $branch; then echo $mod diverges from $branch divergent=1 diff --git a/arbitrator/Cargo.toml b/arbitrator/Cargo.toml index eaafb6e439..3c5228daf2 100644 --- a/arbitrator/Cargo.toml +++ b/arbitrator/Cargo.toml @@ -12,6 +12,7 @@ members = [ exclude = [ "stylus/tests/", "tools/wasmer/", + "tools/stylus_benchmark", ] resolver = "2" diff --git a/arbitrator/arbutil/src/benchmark.rs b/arbitrator/arbutil/src/benchmark.rs new file mode 100644 index 0000000000..580d0191a0 --- /dev/null +++ b/arbitrator/arbutil/src/benchmark.rs @@ -0,0 +1,14 @@ +// Copyright 2024, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE + +use crate::evm::api::Ink; +use std::time::{Duration, Instant}; + +// Benchmark is used to track the performance of blocks of code in stylus +#[derive(Clone, Copy, Debug, Default)] +pub struct Benchmark { + pub timer: Option, + pub elapsed_total: Duration, + pub ink_start: Option, + pub ink_total: Ink, +} diff --git a/arbitrator/arbutil/src/lib.rs b/arbitrator/arbutil/src/lib.rs index 9c48a9fefc..e17e8d9448 100644 --- a/arbitrator/arbutil/src/lib.rs +++ b/arbitrator/arbutil/src/lib.rs @@ -1,6 +1,7 @@ // Copyright 2022-2024, Offchain Labs, Inc. // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE +pub mod benchmark; /// cbindgen:ignore pub mod color; pub mod crypto; diff --git a/arbitrator/jit/src/lib.rs b/arbitrator/jit/src/lib.rs new file mode 100644 index 0000000000..d0ad76bd03 --- /dev/null +++ b/arbitrator/jit/src/lib.rs @@ -0,0 +1,51 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +use std::path::PathBuf; +use structopt::StructOpt; + +mod arbcompress; +mod caller_env; +pub mod machine; +mod prepare; +pub mod program; +mod socket; +pub mod stylus_backend; +mod test; +mod wasip1_stub; +mod wavmio; + +#[derive(StructOpt)] +#[structopt(name = "jit-prover")] +pub struct Opts { + #[structopt(short, long)] + binary: PathBuf, + #[structopt(long, default_value = "0")] + inbox_position: u64, + #[structopt(long, default_value = "0")] + delayed_inbox_position: u64, + #[structopt(long, default_value = "0")] + position_within_message: u64, + #[structopt(long)] + last_block_hash: Option, + #[structopt(long)] + last_send_root: Option, + #[structopt(long)] + inbox: Vec, + #[structopt(long)] + delayed_inbox: Vec, + #[structopt(long)] + preimages: Option, + #[structopt(long)] + cranelift: bool, + #[structopt(long)] + forks: bool, + #[structopt(long)] + pub debug: bool, + #[structopt(long)] + pub require_success: bool, + // JSON inputs supercede any of the command-line inputs which could + // be specified in the JSON file. + #[structopt(long)] + json_inputs: Option, +} diff --git a/arbitrator/jit/src/main.rs b/arbitrator/jit/src/main.rs index 6e44500215..e19fabc250 100644 --- a/arbitrator/jit/src/main.rs +++ b/arbitrator/jit/src/main.rs @@ -1,58 +1,13 @@ // Copyright 2022-2024, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -use crate::machine::{Escape, WasmEnv}; use arbutil::{color, Color}; use eyre::Result; -use std::path::PathBuf; +use jit::machine; +use jit::machine::{Escape, WasmEnv}; +use jit::Opts; use structopt::StructOpt; -mod arbcompress; -mod caller_env; -mod machine; -mod prepare; -mod program; -mod socket; -mod stylus_backend; -mod test; -mod wasip1_stub; -mod wavmio; - -#[derive(StructOpt)] -#[structopt(name = "jit-prover")] -pub struct Opts { - #[structopt(short, long)] - binary: PathBuf, - #[structopt(long, default_value = "0")] - inbox_position: u64, - #[structopt(long, default_value = "0")] - delayed_inbox_position: u64, - #[structopt(long, default_value = "0")] - position_within_message: u64, - #[structopt(long)] - last_block_hash: Option, - #[structopt(long)] - last_send_root: Option, - #[structopt(long)] - inbox: Vec, - #[structopt(long)] - delayed_inbox: Vec, - #[structopt(long)] - preimages: Option, - #[structopt(long)] - cranelift: bool, - #[structopt(long)] - forks: bool, - #[structopt(long)] - debug: bool, - #[structopt(long)] - require_success: bool, - // JSON inputs supercede any of the command-line inputs which could - // be specified in the JSON file. - #[structopt(long)] - json_inputs: Option, -} - fn main() -> Result<()> { let opts = Opts::from_args(); let env = match WasmEnv::cli(&opts) { diff --git a/arbitrator/jit/src/prepare.rs b/arbitrator/jit/src/prepare.rs index e7a7ba0f4d..62dd063b75 100644 --- a/arbitrator/jit/src/prepare.rs +++ b/arbitrator/jit/src/prepare.rs @@ -1,7 +1,7 @@ // Copyright 2022-2024, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE -use crate::WasmEnv; +use crate::machine::WasmEnv; use arbutil::{Bytes32, PreimageType}; use eyre::Ok; use prover::parse_input::FileData; diff --git a/arbitrator/jit/src/program.rs b/arbitrator/jit/src/program.rs index f10a059748..d80b3771c6 100644 --- a/arbitrator/jit/src/program.rs +++ b/arbitrator/jit/src/program.rs @@ -4,8 +4,8 @@ #![allow(clippy::too_many_arguments)] use crate::caller_env::JitEnv; -use crate::machine::{Escape, MaybeEscape, WasmEnvMut}; -use crate::stylus_backend::exec_wasm; +use crate::machine::{Escape, MaybeEscape, WasmEnv, WasmEnvMut}; +use crate::stylus_backend::{exec_wasm, MessageFromCothread}; use arbutil::evm::api::Gas; use arbutil::Bytes32; use arbutil::{evm::EvmData, format::DebugBytes, heapify}; @@ -16,6 +16,7 @@ use prover::{ machine::Module, programs::{config::PricingParams, prelude::*}, }; +use std::sync::Arc; const DEFAULT_STYLUS_ARBOS_VERSION: u64 = 31; @@ -130,10 +131,6 @@ pub fn new_program( let evm_data: EvmData = unsafe { *Box::from_raw(evm_data_handler as *mut EvmData) }; let config: JitConfig = unsafe { *Box::from_raw(stylus_config_handler as *mut JitConfig) }; - // buy ink - let pricing = config.stylus.pricing; - let ink = pricing.gas_to_ink(Gas(gas)); - let Some(module) = exec.module_asms.get(&compiled_hash).cloned() else { return Err(Escape::Failure(format!( "module hash {:?} not found in {:?}", @@ -142,6 +139,21 @@ pub fn new_program( ))); }; + exec_program(exec, module, calldata, config, evm_data, gas) +} + +pub fn exec_program( + exec: &mut WasmEnv, + module: Arc<[u8]>, + calldata: Vec, + config: JitConfig, + evm_data: EvmData, + gas: u64, +) -> Result { + // buy ink + let pricing = config.stylus.pricing; + let ink = pricing.gas_to_ink(Gas(gas)); + let cothread = exec_wasm( module, calldata, @@ -162,7 +174,10 @@ pub fn new_program( /// returns request_id for the first request from the program pub fn start_program(mut env: WasmEnvMut, module: u32) -> Result { let (_, exec) = env.jit_env(); + start_program_with_wasm_env(exec, module) +} +pub fn start_program_with_wasm_env(exec: &mut WasmEnv, module: u32) -> Result { if exec.threads.len() as u32 != module || module == 0 { return Escape::hostio(format!( "got request for thread {module} but len is {}", @@ -179,13 +194,18 @@ pub fn start_program(mut env: WasmEnvMut, module: u32) -> Result { /// request_id MUST be last request id returned from start_program or send_response pub fn get_request(mut env: WasmEnvMut, id: u32, len_ptr: GuestPtr) -> Result { let (mut mem, exec) = env.jit_env(); + let msg = get_last_msg(exec, id)?; + mem.write_u32(len_ptr, msg.req_data.len() as u32); + Ok(msg.req_type) +} + +pub fn get_last_msg(exec: &mut WasmEnv, id: u32) -> Result { let thread = exec.threads.last_mut().unwrap(); let msg = thread.last_message()?; if msg.1 != id { return Escape::hostio("get_request id doesn't match"); }; - mem.write_u32(len_ptr, msg.0.req_data.len() as u32); - Ok(msg.0.req_type) + Ok(msg.0) } // gets data associated with last request. @@ -193,12 +213,8 @@ pub fn get_request(mut env: WasmEnvMut, id: u32, len_ptr: GuestPtr) -> Result MaybeEscape { let (mut mem, exec) = env.jit_env(); - let thread = exec.threads.last_mut().unwrap(); - let msg = thread.last_message()?; - if msg.1 != id { - return Escape::hostio("get_request id doesn't match"); - }; - mem.write_slice(data_ptr, &msg.0.req_data); + let msg = get_last_msg(exec, id)?; + mem.write_slice(data_ptr, &msg.req_data); Ok(()) } @@ -217,11 +233,21 @@ pub fn set_response( let result = mem.read_slice(result_ptr, result_len as usize); let raw_data = mem.read_slice(raw_data_ptr, raw_data_len as usize); + set_response_with_wasm_env(exec, id, gas, result, raw_data) +} + +pub fn set_response_with_wasm_env( + exec: &mut WasmEnv, + id: u32, + gas: u64, + result: Vec, + raw_data: Vec, +) -> MaybeEscape { let thread = exec.threads.last_mut().unwrap(); thread.set_response(id, result, raw_data, Gas(gas)) } -/// sends previos response +/// sends previous response /// MUST be called right after set_response to the same id /// returns request_id for the next request pub fn send_response(mut env: WasmEnvMut, req_id: u32) -> Result { @@ -239,7 +265,10 @@ pub fn send_response(mut env: WasmEnvMut, req_id: u32) -> Result { /// removes the last created program pub fn pop(mut env: WasmEnvMut) -> MaybeEscape { let (_, exec) = env.jit_env(); + pop_with_wasm_env(exec) +} +pub fn pop_with_wasm_env(exec: &mut WasmEnv) -> MaybeEscape { match exec.threads.pop() { None => Err(Escape::Child(eyre!("no child"))), Some(mut thread) => thread.wait_done(), @@ -247,8 +276,8 @@ pub fn pop(mut env: WasmEnvMut) -> MaybeEscape { } pub struct JitConfig { - stylus: StylusConfig, - compile: CompileConfig, + pub stylus: StylusConfig, + pub compile: CompileConfig, } /// Creates a `StylusConfig` from its component parts. diff --git a/arbitrator/jit/src/stylus_backend.rs b/arbitrator/jit/src/stylus_backend.rs index 0d8c477c6c..d250780dd9 100644 --- a/arbitrator/jit/src/stylus_backend.rs +++ b/arbitrator/jit/src/stylus_backend.rs @@ -4,6 +4,7 @@ #![allow(clippy::too_many_arguments)] use crate::machine::{Escape, MaybeEscape}; +use arbutil::benchmark::Benchmark; use arbutil::evm::api::{Gas, Ink, VecReader}; use arbutil::evm::{ api::{EvmApiMethod, EVM_API_METHOD_REQ_OFFSET}, @@ -35,6 +36,7 @@ struct MessageToCothread { pub struct MessageFromCothread { pub req_type: u32, pub req_data: Vec, + pub benchmark: Benchmark, } struct CothreadRequestor { @@ -51,6 +53,7 @@ impl RequestHandler for CothreadRequestor { let msg = MessageFromCothread { req_type: req_type as u32 + EVM_API_METHOD_REQ_OFFSET, req_data: req_data.as_ref().to_vec(), + benchmark: Benchmark::default(), }; if let Err(error) = self.tx.send(msg) { @@ -169,6 +172,7 @@ pub fn exec_wasm( let msg = MessageFromCothread { req_data: output, req_type: out_kind as u32, + benchmark: instance.env().benchmark, }; instance .env_mut() diff --git a/arbitrator/stylus/src/env.rs b/arbitrator/stylus/src/env.rs index a153fb5bf1..a2c8189029 100644 --- a/arbitrator/stylus/src/env.rs +++ b/arbitrator/stylus/src/env.rs @@ -2,6 +2,7 @@ // For license information, see https://github.com/nitro/blob/master/LICENSE use arbutil::{ + benchmark::Benchmark, evm::{ api::{DataReader, EvmApi, Ink}, EvmData, @@ -48,6 +49,8 @@ pub struct WasmEnv> { pub compile: CompileConfig, /// The runtime config pub config: Option, + // Used to benchmark execution blocks of code + pub benchmark: Benchmark, // Using the unused generic parameter D in a PhantomData field _data_reader_marker: PhantomData, } @@ -68,6 +71,7 @@ impl> WasmEnv { outs: vec![], memory: None, meter: None, + benchmark: Benchmark::default(), _data_reader_marker: PhantomData, } } diff --git a/arbitrator/stylus/src/host.rs b/arbitrator/stylus/src/host.rs index c72cafc316..67497302a1 100644 --- a/arbitrator/stylus/src/host.rs +++ b/arbitrator/stylus/src/host.rs @@ -5,6 +5,7 @@ use crate::env::{Escape, HostioInfo, MaybeEscape, WasmEnv, WasmEnvMut}; use arbutil::{ + benchmark::Benchmark, evm::{ api::{DataReader, EvmApi, Gas, Ink}, EvmData, @@ -46,6 +47,10 @@ where &self.evm_data } + fn benchmark(&mut self) -> &mut Benchmark { + &mut self.env.benchmark + } + fn evm_return_data_len(&mut self) -> &mut u32 { &mut self.evm_data.return_data_len } @@ -464,3 +469,13 @@ pub(crate) fn console_tee, T: Into + Copy>( } pub(crate) fn null_host>(_: WasmEnvMut) {} + +pub(crate) fn start_benchmark>( + mut env: WasmEnvMut, +) -> MaybeEscape { + hostio!(env, start_benchmark()) +} + +pub(crate) fn end_benchmark>(mut env: WasmEnvMut) -> MaybeEscape { + hostio!(env, end_benchmark()) +} diff --git a/arbitrator/stylus/src/native.rs b/arbitrator/stylus/src/native.rs index 0fbdb342f3..a31df1034c 100644 --- a/arbitrator/stylus/src/native.rs +++ b/arbitrator/stylus/src/native.rs @@ -212,6 +212,8 @@ impl> NativeInstance { imports.define("console", "tee_f32", func!(host::console_tee::)); imports.define("console", "tee_f64", func!(host::console_tee::)); imports.define("debug", "null_host", func!(host::null_host)); + imports.define("debug", "start_benchmark", func!(host::start_benchmark)); + imports.define("debug", "end_benchmark", func!(host::end_benchmark)); } let instance = Instance::new(&mut store, &module, &imports)?; let exports = &instance.exports; @@ -429,6 +431,8 @@ pub fn module(wasm: &[u8], compile: CompileConfig, target: Target) -> Result) { + let _ = match str::from_utf8(req_data) { + Ok(v) => v, + Err(e) => panic!("Invalid UTF-8 sequence: {}", e), + }; + + match req_type { + 0 => return, + 1 => panic!("ErrExecutionReverted user revert"), + 2 => panic!("ErrExecutionReverted user failure"), + 3 => panic!("ErrOutOfGas user out of ink"), + 4 => panic!("ErrDepth user out of stack"), + _ => panic!("ErrExecutionReverted user unknown"), + } +} + +fn run(compiled_module: Vec) -> (Duration, Ink) { + let calldata = Vec::from([0u8; 32]); + let evm_data = EvmData::default(); + let config = JitConfig { + stylus: StylusConfig { + version: 2, + max_depth: 10000, + pricing: PricingParams { ink_price: 1 }, + }, + compile: CompileConfig::version(2, true), + }; + + let exec = &mut WasmEnv::default(); + + let module = jit::program::exec_program( + exec, + compiled_module.into(), + calldata, + config, + evm_data, + u64::MAX, + ) + .unwrap(); + + let req_id = jit::program::start_program_with_wasm_env(exec, module).unwrap(); + let msg = jit::program::get_last_msg(exec, req_id).unwrap(); + if msg.req_type < EVM_API_METHOD_REQ_OFFSET { + let _ = jit::program::pop_with_wasm_env(exec); + + let req_data = msg.req_data[8..].to_vec(); + check_result(msg.req_type, &req_data); + } else { + panic!("unsupported request type {:?}", msg.req_type); + } + + (msg.benchmark.elapsed_total, msg.benchmark.ink_total) +} + +pub fn benchmark(wat: Vec) -> eyre::Result<()> { + let wasm = wasmer::wat2wasm(&wat)?; + + let compiled_module = native::compile(&wasm, 2, true, Target::default())?; + + let mut durations: Vec = Vec::new(); + let mut ink_spent = Ink(0); + for i in 0..NUMBER_OF_BENCHMARK_RUNS { + print!("Run {:?}, ", i); + let (duration_run, ink_spent_run) = run(compiled_module.clone()); + durations.push(duration_run); + ink_spent = ink_spent_run; + println!( + "duration: {:?}, ink_spent: {:?}", + duration_run, ink_spent_run + ); + } + + // discard top and bottom runs + durations.sort(); + let l = NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; + let r = NUMBER_OF_BENCHMARK_RUNS as usize - NUMBER_OF_TOP_AND_BOTTOM_RUNS_TO_DISCARD as usize; + durations = durations[l..r].to_vec(); + + let avg_duration = durations.iter().sum::() / (r - l) as u32; + let avg_ink_spent_per_micro_second = ink_spent.0 / avg_duration.as_micros() as u64; + println!("After discarding top and bottom runs: "); + println!( + "avg_duration: {:?}, avg_ink_spent_per_micro_second: {:?}", + avg_duration, avg_ink_spent_per_micro_second + ); + + Ok(()) +} diff --git a/arbitrator/tools/stylus_benchmark/src/main.rs b/arbitrator/tools/stylus_benchmark/src/main.rs new file mode 100644 index 0000000000..4b8971ecab --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/src/main.rs @@ -0,0 +1,44 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +mod benchmark; +mod scenario; + +use clap::Parser; +use scenario::Scenario; +use std::path::PathBuf; +use strum::IntoEnumIterator; + +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +struct Args { + #[arg(short, long)] + output_wat_dir_path: Option, + + #[arg(short, long)] + scenario: Option, +} + +fn handle_scenario(scenario: Scenario, output_wat_dir_path: Option) -> eyre::Result<()> { + println!("Benchmarking {}", scenario); + let wat = scenario::generate_wat(scenario, output_wat_dir_path); + benchmark::benchmark(wat) +} + +fn main() -> eyre::Result<()> { + let args = Args::parse(); + + match args.scenario { + Some(scenario) => handle_scenario(scenario, args.output_wat_dir_path), + None => { + println!("No scenario specified, benchmarking all scenarios\n"); + for scenario in Scenario::iter() { + let benchmark_result = handle_scenario(scenario, args.output_wat_dir_path.clone()); + if let Err(err) = benchmark_result { + return Err(err); + } + } + Ok(()) + } + } +} diff --git a/arbitrator/tools/stylus_benchmark/src/scenario.rs b/arbitrator/tools/stylus_benchmark/src/scenario.rs new file mode 100644 index 0000000000..348678ed69 --- /dev/null +++ b/arbitrator/tools/stylus_benchmark/src/scenario.rs @@ -0,0 +1,128 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; +use strum_macros::{Display, EnumIter, EnumString}; + +#[derive(Copy, Clone, PartialEq, Eq, Debug, EnumString, Display, EnumIter)] +pub enum Scenario { + #[strum(serialize = "add_i32")] + AddI32, + #[strum(serialize = "xor_i32")] + XorI32, +} + +// Programs to be benchmarked have a loop in which several similar operations are executed. +// The number of operations per loop is chosen to be large enough so the overhead related to the loop is negligible, +// but not too large to avoid a big program size. +// Keeping a small program size is important to better use CPU cache, trying to keep the code in the cache. + +fn write_wat_beginning(wat: &mut Vec) { + wat.write_all(b"(module\n").unwrap(); + wat.write_all(b" (import \"debug\" \"start_benchmark\" (func $start_benchmark))\n") + .unwrap(); + wat.write_all(b" (import \"debug\" \"end_benchmark\" (func $end_benchmark))\n") + .unwrap(); + wat.write_all(b" (memory (export \"memory\") 0 0)\n") + .unwrap(); + wat.write_all(b" (global $ops_counter (mut i32) (i32.const 0))\n") + .unwrap(); + wat.write_all(b" (func (export \"user_entrypoint\") (param i32) (result i32)\n") + .unwrap(); + + wat.write_all(b" call $start_benchmark\n").unwrap(); + + wat.write_all(b" (loop $loop\n").unwrap(); +} + +fn write_wat_end( + wat: &mut Vec, + number_of_loop_iterations: usize, + number_of_ops_per_loop_iteration: usize, +) { + let number_of_ops = number_of_loop_iterations * number_of_ops_per_loop_iteration; + + // update ops_counter + wat.write_all(b" global.get $ops_counter\n") + .unwrap(); + wat.write_all( + format!( + " i32.const {}\n", + number_of_ops_per_loop_iteration + ) + .as_bytes(), + ) + .unwrap(); + wat.write_all(b" i32.add\n").unwrap(); + wat.write_all(b" global.set $ops_counter\n") + .unwrap(); + + // check if we need to continue looping + wat.write_all(b" global.get $ops_counter\n") + .unwrap(); + wat.write_all(format!(" i32.const {}\n", number_of_ops).as_bytes()) + .unwrap(); + wat.write_all(b" i32.lt_s\n").unwrap(); + wat.write_all(b" br_if $loop)\n").unwrap(); + + wat.write_all(b" call $end_benchmark\n").unwrap(); + + wat.write_all(b" i32.const 0)\n").unwrap(); + wat.write_all(b")").unwrap(); +} + +fn wat(write_wat_ops: fn(&mut Vec, usize)) -> Vec { + let number_of_loop_iterations = 200_000; + let number_of_ops_per_loop_iteration = 2000; + + let mut wat = Vec::new(); + + write_wat_beginning(&mut wat); + + write_wat_ops(&mut wat, number_of_ops_per_loop_iteration); + + write_wat_end( + &mut wat, + number_of_loop_iterations, + number_of_ops_per_loop_iteration, + ); + + wat.to_vec() +} + +fn write_add_i32_wat_ops(wat: &mut Vec, number_of_ops_per_loop_iteration: usize) { + wat.write_all(b" i32.const 0\n").unwrap(); + for _ in 0..number_of_ops_per_loop_iteration { + wat.write_all(b" i32.const 1\n").unwrap(); + wat.write_all(b" i32.add\n").unwrap(); + } + wat.write_all(b" drop\n").unwrap(); +} + +fn write_xor_i32_wat_ops(wat: &mut Vec, number_of_ops_per_loop_iteration: usize) { + wat.write_all(b" i32.const 1231\n").unwrap(); + for _ in 0..number_of_ops_per_loop_iteration { + wat.write_all(b" i32.const 12312313\n").unwrap(); + wat.write_all(b" i32.xor\n").unwrap(); + } + wat.write_all(b" drop\n").unwrap(); +} + +pub fn generate_wat(scenario: Scenario, output_wat_dir_path: Option) -> Vec { + let wat = match scenario { + Scenario::AddI32 => wat(write_add_i32_wat_ops), + Scenario::XorI32 => wat(write_xor_i32_wat_ops), + }; + + // print wat to file if needed + if let Some(output_wat_dir_path) = output_wat_dir_path { + let mut output_wat_path = output_wat_dir_path; + output_wat_path.push(format!("{}.wat", scenario)); + let mut file = File::create(output_wat_path).unwrap(); + file.write_all(&wat).unwrap(); + } + + wat +} diff --git a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs index 2f410849fc..25163e25bc 100644 --- a/arbitrator/wasm-libraries/user-host-trait/src/lib.rs +++ b/arbitrator/wasm-libraries/user-host-trait/src/lib.rs @@ -2,6 +2,7 @@ // For license information, see https://github.com/nitro/blob/master/LICENSE use arbutil::{ + benchmark::Benchmark, crypto, evm::{ self, @@ -21,6 +22,7 @@ use prover::{ }; use ruint2::Uint; use std::fmt::Display; +use std::time::Instant; macro_rules! be { ($int:expr) => { @@ -68,6 +70,7 @@ pub trait UserHost: GasMeteredMachine { fn evm_api(&mut self) -> &mut Self::A; fn evm_data(&self) -> &EvmData; + fn benchmark(&mut self) -> &mut Benchmark; fn evm_return_data_len(&mut self) -> &mut u32; fn read_slice(&self, ptr: GuestPtr, len: u32) -> Result, Self::MemoryErr>; @@ -962,4 +965,38 @@ pub trait UserHost: GasMeteredMachine { self.say(value.into()); Ok(value) } + + // Initializes benchmark data related to a code block. + // A code block is defined by the instructions between start_benchmark and end_benchmark calls. + // If start_benchmark is called multiple times without end_benchmark being called, + // then only the last start_benchmark before end_benchmark will be used. + // It is possible to have multiple code blocks benchmarked in the same program. + fn start_benchmark(&mut self) -> Result<(), Self::Err> { + let ink_curr = self.ink_ready()?; + + let benchmark = self.benchmark(); + benchmark.timer = Some(Instant::now()); + benchmark.ink_start = Some(ink_curr); + + Ok(()) + } + + // Updates cumulative benchmark data related to a code block. + // If end_benchmark is called without a corresponding start_benchmark nothing will happen. + fn end_benchmark(&mut self) -> Result<(), Self::Err> { + let ink_curr = self.ink_ready()?; + + let benchmark = self.benchmark(); + if let Some(timer) = benchmark.timer { + benchmark.elapsed_total = benchmark.elapsed_total.saturating_add(timer.elapsed()); + + let code_block_ink = benchmark.ink_start.unwrap().saturating_sub(ink_curr); + benchmark.ink_total = benchmark.ink_total.saturating_add(code_block_ink); + + benchmark.timer = None; + benchmark.ink_start = None; + }; + + Ok(()) + } } diff --git a/arbitrator/wasm-libraries/user-host/src/program.rs b/arbitrator/wasm-libraries/user-host/src/program.rs index 7b3782b2e5..a2973ce56f 100644 --- a/arbitrator/wasm-libraries/user-host/src/program.rs +++ b/arbitrator/wasm-libraries/user-host/src/program.rs @@ -2,6 +2,7 @@ // For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE use arbutil::{ + benchmark::Benchmark, evm::{ api::{EvmApiMethod, Gas, Ink, VecReader, EVM_API_METHOD_REQ_OFFSET}, req::{EvmApiRequestor, RequestHandler}, @@ -75,6 +76,8 @@ pub(crate) struct Program { pub evm_api: EvmApiRequestor, /// EVM Context info. pub evm_data: EvmData, + // Used to benchmark execution blocks of code + pub benchmark: Benchmark, /// WAVM module index. pub module: u32, /// Call configuration. @@ -167,6 +170,7 @@ impl Program { outs: vec![], evm_api: EvmApiRequestor::new(UserHostRequester::default()), evm_data, + benchmark: Benchmark::default(), module, config, early_exit: None, @@ -237,6 +241,10 @@ impl UserHost for Program { &self.evm_data } + fn benchmark(&mut self) -> &mut Benchmark { + &mut self.benchmark + } + fn evm_return_data_len(&mut self) -> &mut u32 { &mut self.evm_data.return_data_len } diff --git a/arbitrator/wasm-libraries/user-test/src/program.rs b/arbitrator/wasm-libraries/user-test/src/program.rs index 299fca08c3..99252a38f0 100644 --- a/arbitrator/wasm-libraries/user-test/src/program.rs +++ b/arbitrator/wasm-libraries/user-test/src/program.rs @@ -3,6 +3,7 @@ use crate::{ARGS, EVER_PAGES, EVM_DATA, KEYS, LOGS, OPEN_PAGES, OUTS}; use arbutil::{ + benchmark::Benchmark, evm::{ api::{EvmApi, Gas, Ink, VecReader}, user::UserOutcomeKind, @@ -28,6 +29,7 @@ impl From for eyre::ErrReport { /// Mock type representing a `user_host::Program` pub struct Program { evm_api: MockEvmApi, + benchmark: Benchmark, } #[allow(clippy::unit_arg)] @@ -52,6 +54,10 @@ impl UserHost for Program { &EVM_DATA } + fn benchmark(&mut self) -> &mut Benchmark { + &mut self.benchmark + } + fn evm_return_data_len(&mut self) -> &mut u32 { unimplemented!() } @@ -91,6 +97,7 @@ impl Program { pub fn current() -> Self { Self { evm_api: MockEvmApi, + benchmark: Benchmark::default(), } } diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index 45bd70c92b..70c5952042 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -1157,7 +1157,7 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) if err != nil { return false, err } - if arbOSVersion >= 20 { + if arbOSVersion >= params.ArbosVersion_20 { if config.IgnoreBlobPrice { use4844 = true } else { diff --git a/arbnode/delayed_sequencer.go b/arbnode/delayed_sequencer.go index abd24dbd12..235a747446 100644 --- a/arbnode/delayed_sequencer.go +++ b/arbnode/delayed_sequencer.go @@ -9,6 +9,7 @@ import ( "fmt" "math/big" "sync" + "time" flag "github.com/spf13/pflag" @@ -30,16 +31,17 @@ type DelayedSequencer struct { reader *InboxReader exec execution.ExecutionSequencer coordinator *SeqCoordinator - waitingForFinalizedBlock uint64 + waitingForFinalizedBlock *uint64 mutex sync.Mutex config DelayedSequencerConfigFetcher } type DelayedSequencerConfig struct { - Enable bool `koanf:"enable" reload:"hot"` - FinalizeDistance int64 `koanf:"finalize-distance" reload:"hot"` - RequireFullFinality bool `koanf:"require-full-finality" reload:"hot"` - UseMergeFinality bool `koanf:"use-merge-finality" reload:"hot"` + Enable bool `koanf:"enable" reload:"hot"` + FinalizeDistance int64 `koanf:"finalize-distance" reload:"hot"` + RequireFullFinality bool `koanf:"require-full-finality" reload:"hot"` + UseMergeFinality bool `koanf:"use-merge-finality" reload:"hot"` + RescanInterval time.Duration `koanf:"rescan-interval" reload:"hot"` } type DelayedSequencerConfigFetcher func() *DelayedSequencerConfig @@ -49,6 +51,7 @@ func DelayedSequencerConfigAddOptions(prefix string, f *flag.FlagSet) { f.Int64(prefix+".finalize-distance", DefaultDelayedSequencerConfig.FinalizeDistance, "how many blocks in the past L1 block is considered final (ignored when using Merge finality)") f.Bool(prefix+".require-full-finality", DefaultDelayedSequencerConfig.RequireFullFinality, "whether to wait for full finality before sequencing delayed messages") f.Bool(prefix+".use-merge-finality", DefaultDelayedSequencerConfig.UseMergeFinality, "whether to use The Merge's notion of finality before sequencing delayed messages") + f.Duration(prefix+".rescan-interval", DefaultDelayedSequencerConfig.RescanInterval, "frequency to rescan for new delayed messages (the parent chain reader's poll-interval config is more important than this)") } var DefaultDelayedSequencerConfig = DelayedSequencerConfig{ @@ -56,6 +59,7 @@ var DefaultDelayedSequencerConfig = DelayedSequencerConfig{ FinalizeDistance: 20, RequireFullFinality: false, UseMergeFinality: true, + RescanInterval: time.Second, } var TestDelayedSequencerConfig = DelayedSequencerConfig{ @@ -63,6 +67,7 @@ var TestDelayedSequencerConfig = DelayedSequencerConfig{ FinalizeDistance: 20, RequireFullFinality: false, UseMergeFinality: false, + RescanInterval: time.Millisecond * 100, } func NewDelayedSequencer(l1Reader *headerreader.HeaderReader, reader *InboxReader, exec execution.ExecutionSequencer, coordinator *SeqCoordinator, config DelayedSequencerConfigFetcher) (*DelayedSequencer, error) { @@ -126,13 +131,12 @@ func (d *DelayedSequencer) sequenceWithoutLockout(ctx context.Context, lastBlock finalized = uint64(currentNum - config.FinalizeDistance) } - if d.waitingForFinalizedBlock > finalized { + if d.waitingForFinalizedBlock != nil && *d.waitingForFinalizedBlock > finalized { return nil } - // Unless we find an unfinalized message (which sets waitingForBlock), - // we won't find a new finalized message until FinalizeDistance blocks in the future. - d.waitingForFinalizedBlock = lastBlockHeader.Number.Uint64() + 1 + // Reset what block we're waiting for if we've caught up + d.waitingForFinalizedBlock = nil dbDelayedCount, err := d.inbox.GetDelayedCount() if err != nil { @@ -153,8 +157,8 @@ func (d *DelayedSequencer) sequenceWithoutLockout(ctx context.Context, lastBlock return err } if parentChainBlockNumber > finalized { - // Message isn't finalized yet; stop here - d.waitingForFinalizedBlock = parentChainBlockNumber + // Message isn't finalized yet; wait for it to be + d.waitingForFinalizedBlock = &parentChainBlockNumber break } if lastDelayedAcc != (common.Hash{}) { @@ -216,20 +220,40 @@ func (d *DelayedSequencer) run(ctx context.Context) { headerChan, cancel := d.l1Reader.Subscribe(false) defer cancel() + latestHeader, err := d.l1Reader.LastHeader(ctx) + if err != nil { + log.Warn("delayed sequencer: failed to get latest header", "err", err) + latestHeader = nil + } + rescanTimer := time.NewTimer(d.config().RescanInterval) for { + if !rescanTimer.Stop() { + select { + case <-rescanTimer.C: + default: + } + } + if latestHeader != nil { + rescanTimer.Reset(d.config().RescanInterval) + } + var ok bool select { - case nextHeader, ok := <-headerChan: + case latestHeader, ok = <-headerChan: if !ok { - log.Info("delayed sequencer: header channel close") + log.Debug("delayed sequencer: header channel close") return } - if err := d.trySequence(ctx, nextHeader); err != nil { - log.Error("Delayed sequencer error", "err", err) + case <-rescanTimer.C: + if latestHeader == nil { + continue } case <-ctx.Done(): - log.Info("delayed sequencer: context done", "err", ctx.Err()) + log.Debug("delayed sequencer: context done", "err", ctx.Err()) return } + if err := d.trySequence(ctx, latestHeader); err != nil { + log.Error("Delayed sequencer error", "err", err) + } } } diff --git a/arbnode/message_pruner.go b/arbnode/message_pruner.go index 840a15f328..08f568796d 100644 --- a/arbnode/message_pruner.go +++ b/arbnode/message_pruner.go @@ -46,7 +46,7 @@ type MessagePrunerConfigFetcher func() *MessagePrunerConfig var DefaultMessagePrunerConfig = MessagePrunerConfig{ Enable: true, PruneInterval: time.Minute, - MinBatchesLeft: 2, + MinBatchesLeft: 1000, } func MessagePrunerConfigAddOptions(prefix string, f *flag.FlagSet) { diff --git a/arbos/addressSet/addressSet.go b/arbos/addressSet/addressSet.go index 4bb87e614d..ccd780aa11 100644 --- a/arbos/addressSet/addressSet.go +++ b/arbos/addressSet/addressSet.go @@ -9,6 +9,7 @@ import ( "errors" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/storage" "github.com/offchainlabs/nitro/arbos/util" @@ -185,7 +186,7 @@ func (as *AddressSet) Remove(addr common.Address, arbosVersion uint64) error { if err != nil { return err } - if arbosVersion >= 11 { + if arbosVersion >= params.ArbosVersion_11 { err = as.byAddress.Set(atSize, util.UintToHash(slot)) if err != nil { return err diff --git a/arbos/arbosState/arbosstate.go b/arbos/arbosState/arbosstate.go index a3d1ae8386..5ee070f942 100644 --- a/arbos/arbosState/arbosstate.go +++ b/arbos/arbosState/arbosstate.go @@ -63,9 +63,6 @@ type ArbosState struct { Burner burn.Burner } -const MaxArbosVersionSupported uint64 = params.ArbosVersion_StylusChargingFixes -const MaxDebugArbosVersionSupported uint64 = params.ArbosVersion_StylusChargingFixes - var ErrUninitializedArbOS = errors.New("ArbOS uninitialized") var ErrAlreadyInitialized = errors.New("ArbOS is already initialized") @@ -205,7 +202,7 @@ func InitializeArbosState(stateDB vm.StateDB, burner burn.Burner, chainConfig *p _ = sto.SetUint64ByUint64(uint64(versionOffset), 1) // initialize to version 1; upgrade at end of this func if needed _ = sto.SetUint64ByUint64(uint64(upgradeVersionOffset), 0) _ = sto.SetUint64ByUint64(uint64(upgradeTimestampOffset), 0) - if desiredArbosVersion >= 2 { + if desiredArbosVersion >= params.ArbosVersion_2 { _ = sto.SetByUint64(uint64(networkFeeAccountOffset), util.AddressToHash(initialChainOwner)) } else { _ = sto.SetByUint64(uint64(networkFeeAccountOffset), common.Hash{}) // the 0 address until an owner sets it @@ -217,7 +214,7 @@ func InitializeArbosState(stateDB vm.StateDB, burner burn.Burner, chainConfig *p _ = sto.SetUint64ByUint64(uint64(brotliCompressionLevelOffset), 0) // default brotliCompressionLevel for fast compression is 0 initialRewardsRecipient := l1pricing.BatchPosterAddress - if desiredArbosVersion >= 2 { + if desiredArbosVersion >= params.ArbosVersion_2 { initialRewardsRecipient = initialChainOwner } _ = l1pricing.InitializeL1PricingState(sto.OpenCachedSubStorage(l1PricingSubspace), initialRewardsRecipient, initMessage.InitialL1BaseFee) @@ -274,29 +271,29 @@ func (state *ArbosState) UpgradeArbosVersion( nextArbosVersion := state.arbosVersion + 1 switch nextArbosVersion { - case 2: + case params.ArbosVersion_2: ensure(state.l1PricingState.SetLastSurplus(common.Big0, 1)) - case 3: + case params.ArbosVersion_3: ensure(state.l1PricingState.SetPerBatchGasCost(0)) ensure(state.l1PricingState.SetAmortizedCostCapBips(math.MaxUint64)) - case 4: + case params.ArbosVersion_4: // no state changes needed - case 5: + case params.ArbosVersion_5: // no state changes needed - case 6: + case params.ArbosVersion_6: // no state changes needed - case 7: + case params.ArbosVersion_7: // no state changes needed - case 8: + case params.ArbosVersion_8: // no state changes needed - case 9: + case params.ArbosVersion_9: // no state changes needed - case 10: + case params.ArbosVersion_10: ensure(state.l1PricingState.SetL1FeesAvailable(stateDB.GetBalance( l1pricing.L1PricerFundsPoolAddress, ).ToBig())) - case 11: + case params.ArbosVersion_11: // Update the PerBatchGasCost to a more accurate value compared to the old v6 default. ensure(state.l1PricingState.SetPerBatchGasCost(l1pricing.InitialPerBatchGasCostV12)) @@ -316,23 +313,23 @@ func (state *ArbosState) UpgradeArbosVersion( case 12, 13, 14, 15, 16, 17, 18, 19: // these versions are left to Orbit chains for custom upgrades. - case 20: + case params.ArbosVersion_20: // Update Brotli compression level for fast compression from 0 to 1 ensure(state.SetBrotliCompressionLevel(1)) case 21, 22, 23, 24, 25, 26, 27, 28, 29: // these versions are left to Orbit chains for custom upgrades. - case 30: + case params.ArbosVersion_30: programs.Initialize(state.backingStorage.OpenSubStorage(programsSubspace)) - case 31: + case params.ArbosVersion_31: params, err := state.Programs().Params() ensure(err) ensure(params.UpgradeToVersion(2)) ensure(params.Save()) - case 32: + case params.ArbosVersion_32: // no change state needed default: @@ -353,8 +350,8 @@ func (state *ArbosState) UpgradeArbosVersion( state.arbosVersion = nextArbosVersion } - if firstTime && upgradeTo >= 6 { - if upgradeTo < 11 { + if firstTime && upgradeTo >= params.ArbosVersion_6 { + if upgradeTo < params.ArbosVersion_11 { state.Restrict(state.l1PricingState.SetPerBatchGasCost(l1pricing.InitialPerBatchGasCostV6)) } state.Restrict(state.l1PricingState.SetEquilibrationUnits(l1pricing.InitialEquilibrationUnitsV6)) diff --git a/arbos/blockhash/blockhash.go b/arbos/blockhash/blockhash.go index ff29bbca9a..df5078fd2c 100644 --- a/arbos/blockhash/blockhash.go +++ b/arbos/blockhash/blockhash.go @@ -8,6 +8,7 @@ import ( "errors" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/storage" ) @@ -56,7 +57,7 @@ func (bh *Blockhashes) RecordNewL1Block(number uint64, blockHash common.Hash, ar // fill in hashes for any "skipped over" blocks nextNumber++ var nextNumBuf [8]byte - if arbosVersion >= 8 { + if arbosVersion >= params.ArbosVersion_8 { binary.LittleEndian.PutUint64(nextNumBuf[:], nextNumber) } diff --git a/arbos/blockhash/blockhash_test.go b/arbos/blockhash/blockhash_test.go index c7cc04d966..8dec2181a3 100644 --- a/arbos/blockhash/blockhash_test.go +++ b/arbos/blockhash/blockhash_test.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/burn" "github.com/offchainlabs/nitro/arbos/storage" @@ -15,7 +16,7 @@ import ( ) func TestBlockhash(t *testing.T) { - arbosVersion := uint64(8) + arbosVersion := params.ArbosVersion_8 sto := storage.NewMemoryBacked(burn.NewSystemBurner(nil, false)) InitializeBlockhashes(sto) diff --git a/arbos/internal_tx.go b/arbos/internal_tx.go index 64dede6290..0ecdfe74cf 100644 --- a/arbos/internal_tx.go +++ b/arbos/internal_tx.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/util" @@ -56,11 +57,11 @@ func ApplyInternalTxUpdate(tx *types.ArbitrumInternalTx, state *arbosState.Arbos l1BlockNumber := util.SafeMapGet[uint64](inputs, "l1BlockNumber") timePassed := util.SafeMapGet[uint64](inputs, "timePassed") - if state.ArbOSVersion() < 3 { + if state.ArbOSVersion() < params.ArbosVersion_3 { // (incorrectly) use the L2 block number instead timePassed = util.SafeMapGet[uint64](inputs, "l2BlockNumber") } - if state.ArbOSVersion() < 8 { + if state.ArbOSVersion() < params.ArbosVersion_8 { // in old versions we incorrectly used an L1 block number one too high l1BlockNumber++ } diff --git a/arbos/l1pricing/l1PricingOldVersions.go b/arbos/l1pricing/l1PricingOldVersions.go index 1377351af3..e4cbf5e1b3 100644 --- a/arbos/l1pricing/l1PricingOldVersions.go +++ b/arbos/l1pricing/l1PricingOldVersions.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/util" am "github.com/offchainlabs/nitro/util/arbmath" @@ -24,7 +25,7 @@ func (ps *L1PricingState) _preversion10_UpdateForBatchPosterSpending( l1Basefee *big.Int, scenario util.TracingScenario, ) error { - if arbosVersion < 2 { + if arbosVersion < params.ArbosVersion_2 { return ps._preVersion2_UpdateForBatchPosterSpending(statedb, evm, updateTime, currentTime, batchPoster, weiSpent, scenario) } @@ -69,7 +70,7 @@ func (ps *L1PricingState) _preversion10_UpdateForBatchPosterSpending( } // impose cap on amortized cost, if there is one - if arbosVersion >= 3 { + if arbosVersion >= params.ArbosVersion_3 { amortizedCostCapBips, err := ps.AmortizedCostCapBips() if err != nil { return err diff --git a/arbos/l1pricing/l1pricing.go b/arbos/l1pricing/l1pricing.go index 37dae08c33..195df3708c 100644 --- a/arbos/l1pricing/l1pricing.go +++ b/arbos/l1pricing/l1pricing.go @@ -8,7 +8,6 @@ import ( "errors" "fmt" "math/big" - "sync/atomic" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -216,7 +215,7 @@ func (ps *L1PricingState) LastSurplus() (*big.Int, error) { } func (ps *L1PricingState) SetLastSurplus(val *big.Int, arbosVersion uint64) error { - if arbosVersion < 7 { + if arbosVersion < params.ArbosVersion_7 { return ps.lastSurplus.Set_preVersion7(val) } return ps.lastSurplus.SetSaturatingWithWarning(val, "L1 pricer last surplus") @@ -309,7 +308,7 @@ func (ps *L1PricingState) UpdateForBatchPosterSpending( l1Basefee *big.Int, scenario util.TracingScenario, ) error { - if arbosVersion < 10 { + if arbosVersion < params.ArbosVersion_10 { return ps._preversion10_UpdateForBatchPosterSpending(statedb, evm, arbosVersion, updateTime, currentTime, batchPoster, weiSpent, l1Basefee, scenario) } @@ -359,7 +358,7 @@ func (ps *L1PricingState) UpdateForBatchPosterSpending( } // impose cap on amortized cost, if there is one - if arbosVersion >= 3 { + if arbosVersion >= params.ArbosVersion_3 { amortizedCostCapBips, err := ps.AmortizedCostCapBips() if err != nil { return err @@ -520,10 +519,13 @@ func (ps *L1PricingState) GetPosterInfo(tx *types.Transaction, poster common.Add if poster != BatchPosterAddress { return common.Big0, 0 } - units := atomic.LoadUint64(&tx.CalldataUnits) - if units == 0 { + var units uint64 + if cachedUnits := tx.GetCachedCalldataUnits(brotliCompressionLevel); cachedUnits != nil { + units = *cachedUnits + } else { + // The cache is empty or invalid, so we need to compute the calldata units units = ps.getPosterUnitsWithoutCache(tx, poster, brotliCompressionLevel) - atomic.StoreUint64(&tx.CalldataUnits, units) + tx.SetCachedCalldataUnits(brotliCompressionLevel, units) } // Approximate the l1 fee charged for posting this tx's calldata diff --git a/arbos/programs/native.go b/arbos/programs/native.go index cfc1170c5b..a996d50d8a 100644 --- a/arbos/programs/native.go +++ b/arbos/programs/native.go @@ -109,7 +109,7 @@ func activateProgramInternal( (*u64)(gasLeft), )) - module, msg, err := status_mod.toResult(output.intoBytes(), debug) + module, msg, err := status_mod.toResult(rustBytesIntoBytes(output), debug) if err != nil { if debug { log.Warn("activation failed", "err", err, "msg", msg, "program", addressForLogging) @@ -119,7 +119,7 @@ func activateProgramInternal( } return nil, nil, err } - hash := moduleHash.toHash() + hash := bytes32ToHash(moduleHash) targets := db.Database().WasmTargets() type result struct { target ethdb.WasmTarget @@ -141,7 +141,7 @@ func activateProgramInternal( goSlice([]byte(target)), output, ) - asm := output.intoBytes() + asm := rustBytesIntoBytes(output) if status_asm != 0 { results <- result{target, nil, fmt.Errorf("%w: %s", ErrProgramActivation, string(asm))} return @@ -279,7 +279,7 @@ func callProgram( )) depth := interpreter.Depth() - data, msg, err := status.toResult(output.intoBytes(), debug) + data, msg, err := status.toResult(rustBytesIntoBytes(output), debug) if status == userFailure && debug { log.Warn("program failure", "err", err, "msg", msg, "program", address, "depth", depth) } @@ -292,7 +292,7 @@ func callProgram( //export handleReqImpl func handleReqImpl(apiId usize, req_type u32, data *rustSlice, costPtr *u64, out_response *C.GoSliceData, out_raw_data *C.GoSliceData) { api := getApi(apiId) - reqData := data.read() + reqData := readRustSlice(data) reqType := RequestType(req_type - EvmApiMethodReqOffset) response, raw_data, cost := api.handler(reqType, reqData) *costPtr = u64(cost) @@ -418,14 +418,14 @@ func SetTarget(name ethdb.WasmTarget, description string, native bool) error { cbool(native), )) if status != userSuccess { - msg := arbutil.ToStringOrHex(output.intoBytes()) + msg := arbutil.ToStringOrHex(rustBytesIntoBytes(output)) log.Error("failed to set stylus compilation target", "status", status, "msg", msg) return fmt.Errorf("failed to set stylus compilation target, status %v: %v", status, msg) } return nil } -func (value bytes32) toHash() common.Hash { +func bytes32ToHash(value *bytes32) common.Hash { hash := common.Hash{} for index, b := range value.bytes { hash[index] = byte(b) @@ -449,27 +449,27 @@ func addressToBytes20(addr common.Address) bytes20 { return value } -func (slice *rustSlice) read() []byte { +func readRustSlice(slice *rustSlice) []byte { if slice.len == 0 { return nil } return arbutil.PointerToSlice((*byte)(slice.ptr), int(slice.len)) } -func (vec *rustBytes) read() []byte { +func readRustBytes(vec *rustBytes) []byte { if vec.len == 0 { return nil } return arbutil.PointerToSlice((*byte)(vec.ptr), int(vec.len)) } -func (vec *rustBytes) intoBytes() []byte { - slice := vec.read() - vec.drop() +func rustBytesIntoBytes(vec *rustBytes) []byte { + slice := readRustBytes(vec) + dropRustBytes(vec) return slice } -func (vec *rustBytes) drop() { +func dropRustBytes(vec *rustBytes) { C.free_rust_bytes(*vec) } diff --git a/arbos/programs/testcompile.go b/arbos/programs/testcompile.go index 8a4e38444a..58afa228d5 100644 --- a/arbos/programs/testcompile.go +++ b/arbos/programs/testcompile.go @@ -35,10 +35,10 @@ func Wat2Wasm(wat []byte) ([]byte, error) { status := C.wat_to_wasm(goSlice(wat), output) if status != 0 { - return nil, fmt.Errorf("failed reading wat file: %v", string(output.intoBytes())) + return nil, fmt.Errorf("failed reading wat file: %v", string(rustBytesIntoBytes(output))) } - return output.intoBytes(), nil + return rustBytesIntoBytes(output), nil } func testCompileArch(store bool) error { @@ -66,7 +66,7 @@ func testCompileArch(store bool) error { cbool(nativeArm64)) if status != 0 { - return fmt.Errorf("failed setting compilation target arm: %v", string(output.intoBytes())) + return fmt.Errorf("failed setting compilation target arm: %v", string(rustBytesIntoBytes(output))) } status = C.stylus_target_set(goSlice(amd64CompileName), @@ -75,7 +75,7 @@ func testCompileArch(store bool) error { cbool(nativeAmd64)) if status != 0 { - return fmt.Errorf("failed setting compilation target amd: %v", string(output.intoBytes())) + return fmt.Errorf("failed setting compilation target amd: %v", string(rustBytesIntoBytes(output))) } source, err := os.ReadFile("../../arbitrator/stylus/tests/add.wat") @@ -107,7 +107,7 @@ func testCompileArch(store bool) error { output, ) if status == 0 { - return fmt.Errorf("succeeded compiling non-existent arch: %v", string(output.intoBytes())) + return fmt.Errorf("succeeded compiling non-existent arch: %v", string(rustBytesIntoBytes(output))) } status = C.stylus_compile( @@ -118,7 +118,7 @@ func testCompileArch(store bool) error { output, ) if status != 0 { - return fmt.Errorf("failed compiling native: %v", string(output.intoBytes())) + return fmt.Errorf("failed compiling native: %v", string(rustBytesIntoBytes(output))) } if store && !nativeAmd64 && !nativeArm64 { _, err := fmt.Printf("writing host file\n") @@ -126,7 +126,7 @@ func testCompileArch(store bool) error { return err } - err = os.WriteFile("../../target/testdata/host.bin", output.intoBytes(), 0644) + err = os.WriteFile("../../target/testdata/host.bin", rustBytesIntoBytes(output), 0644) if err != nil { return err } @@ -140,7 +140,7 @@ func testCompileArch(store bool) error { output, ) if status != 0 { - return fmt.Errorf("failed compiling arm: %v", string(output.intoBytes())) + return fmt.Errorf("failed compiling arm: %v", string(rustBytesIntoBytes(output))) } if store { _, err := fmt.Printf("writing arm file\n") @@ -148,7 +148,7 @@ func testCompileArch(store bool) error { return err } - err = os.WriteFile("../../target/testdata/arm64.bin", output.intoBytes(), 0644) + err = os.WriteFile("../../target/testdata/arm64.bin", rustBytesIntoBytes(output), 0644) if err != nil { return err } @@ -162,7 +162,7 @@ func testCompileArch(store bool) error { output, ) if status != 0 { - return fmt.Errorf("failed compiling amd: %v", string(output.intoBytes())) + return fmt.Errorf("failed compiling amd: %v", string(rustBytesIntoBytes(output))) } if store { _, err := fmt.Printf("writing amd64 file\n") @@ -170,7 +170,7 @@ func testCompileArch(store bool) error { return err } - err = os.WriteFile("../../target/testdata/amd64.bin", output.intoBytes(), 0644) + err = os.WriteFile("../../target/testdata/amd64.bin", rustBytesIntoBytes(output), 0644) if err != nil { return err } @@ -195,7 +195,7 @@ func resetNativeTarget() error { cbool(true)) if status != 0 { - return fmt.Errorf("failed setting compilation target arm: %v", string(output.intoBytes())) + return fmt.Errorf("failed setting compilation target arm: %v", string(rustBytesIntoBytes(output))) } return nil @@ -260,7 +260,7 @@ func testCompileLoad() error { return err } - _, msg, err := status.toResult(output.intoBytes(), true) + _, msg, err := status.toResult(rustBytesIntoBytes(output), true) if status == userFailure { err = fmt.Errorf("%w: %v", err, msg) } diff --git a/arbos/tx_processor.go b/arbos/tx_processor.go index aec08b15b5..7cebd8da37 100644 --- a/arbos/tx_processor.go +++ b/arbos/tx_processor.go @@ -307,7 +307,7 @@ func (p *TxProcessor) StartTxHook() (endTxNow bool, gasUsed uint64, err error, r // pay for the retryable's gas and update the pools gascost := arbmath.BigMulByUint(effectiveBaseFee, usergas) networkCost := gascost - if p.state.ArbOSVersion() >= 11 { + if p.state.ArbOSVersion() >= params.ArbosVersion_11 { infraFeeAccount, err := p.state.InfraFeeAccount() p.state.Restrict(err) if infraFeeAccount != (common.Address{}) { @@ -576,7 +576,7 @@ func (p *TxProcessor) EndTxHook(gasLeft uint64, success bool) { takeFunds(maxRefund, arbmath.BigMulByUint(effectiveBaseFee, gasUsed)) // Refund any unused gas, without overdrafting the L1 deposit. networkRefund := gasRefund - if p.state.ArbOSVersion() >= 11 { + if p.state.ArbOSVersion() >= params.ArbosVersion_11 { infraFeeAccount, err := p.state.InfraFeeAccount() p.state.Restrict(err) if infraFeeAccount != (common.Address{}) { @@ -629,7 +629,7 @@ func (p *TxProcessor) EndTxHook(gasLeft uint64, success bool) { } purpose := "feeCollection" - if p.state.ArbOSVersion() > 4 { + if p.state.ArbOSVersion() > params.ArbosVersion_4 { infraFeeAccount, err := p.state.InfraFeeAccount() p.state.Restrict(err) if infraFeeAccount != (common.Address{}) { @@ -646,11 +646,11 @@ func (p *TxProcessor) EndTxHook(gasLeft uint64, success bool) { util.MintBalance(&networkFeeAccount, computeCost, p.evm, scenario, purpose) } posterFeeDestination := l1pricing.L1PricerFundsPoolAddress - if p.state.ArbOSVersion() < 2 { + if p.state.ArbOSVersion() < params.ArbosVersion_2 { posterFeeDestination = p.evm.Context.Coinbase } util.MintBalance(&posterFeeDestination, p.PosterFee, p.evm, scenario, purpose) - if p.state.ArbOSVersion() >= 10 { + if p.state.ArbOSVersion() >= params.ArbosVersion_10 { if _, err := p.state.L1PricingState().AddToL1FeesAvailable(p.PosterFee); err != nil { log.Error("failed to update L1FeesAvailable: ", "err", err) } @@ -748,13 +748,13 @@ func (p *TxProcessor) L1BlockHash(blockCtx vm.BlockContext, l1BlockNumber uint64 func (p *TxProcessor) DropTip() bool { version := p.state.ArbOSVersion() - return version != 9 || p.delayedInbox + return version != params.ArbosVersion_9 || p.delayedInbox } func (p *TxProcessor) GetPaidGasPrice() *big.Int { gasPrice := p.evm.GasPrice version := p.state.ArbOSVersion() - if version != 9 { + if version != params.ArbosVersion_9 { // p.evm.Context.BaseFee is already lowered to 0 when vm runs with NoBaseFee flag and 0 gas price gasPrice = p.evm.Context.BaseFee } @@ -762,7 +762,7 @@ func (p *TxProcessor) GetPaidGasPrice() *big.Int { } func (p *TxProcessor) GasPriceOp(evm *vm.EVM) *big.Int { - if p.state.ArbOSVersion() >= 3 { + if p.state.ArbOSVersion() >= params.ArbosVersion_3 { return p.GetPaidGasPrice() } return evm.GasPrice diff --git a/arbos/util/transfer.go b/arbos/util/transfer.go index c5873b7e93..0b61868abe 100644 --- a/arbos/util/transfer.go +++ b/arbos/util/transfer.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/util/arbmath" ) @@ -66,7 +67,7 @@ func TransferBalance( if arbmath.BigLessThan(balance.ToBig(), amount) { return fmt.Errorf("%w: addr %v have %v want %v", vm.ErrInsufficientBalance, *from, balance, amount) } - if evm.Context.ArbOSVersion < 30 && amount.Sign() == 0 { + if evm.Context.ArbOSVersion < params.ArbosVersion_30 && amount.Sign() == 0 { evm.StateDB.CreateZombieIfDeleted(*from) } evm.StateDB.SubBalance(*from, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) diff --git a/cmd/conf/database.go b/cmd/conf/database.go index 8857b615f3..8d05c44500 100644 --- a/cmd/conf/database.go +++ b/cmd/conf/database.go @@ -112,16 +112,19 @@ func (c *PersistentConfig) Validate() error { } type PebbleConfig struct { + SyncMode bool `koanf:"sync-mode"` MaxConcurrentCompactions int `koanf:"max-concurrent-compactions"` Experimental PebbleExperimentalConfig `koanf:"experimental"` } var PebbleConfigDefault = PebbleConfig{ + SyncMode: false, // use NO-SYNC mode, see: https://github.com/ethereum/go-ethereum/issues/29819 MaxConcurrentCompactions: runtime.NumCPU(), Experimental: PebbleExperimentalConfigDefault, } func PebbleConfigAddOptions(prefix string, f *flag.FlagSet, defaultConfig *PebbleConfig) { + f.Bool(prefix+".sync-mode", defaultConfig.SyncMode, "if true sync mode is used (data needs to be written to WAL before the write is marked as completed)") f.Int(prefix+".max-concurrent-compactions", defaultConfig.MaxConcurrentCompactions, "maximum number of concurrent compactions") PebbleExperimentalConfigAddOptions(prefix+".experimental", f, &defaultConfig.Experimental) } @@ -180,7 +183,7 @@ var PebbleExperimentalConfigDefault = PebbleExperimentalConfig{ BlockSize: 4 << 10, // 4 KB IndexBlockSize: 4 << 10, // 4 KB TargetFileSize: 2 << 20, // 2 MB - TargetFileSizeEqualLevels: true, + TargetFileSizeEqualLevels: false, L0CompactionConcurrency: 10, CompactionDebtConcurrency: 1 << 30, // 1GB @@ -251,6 +254,7 @@ func (c *PebbleConfig) ExtraOptions(namespace string) *pebble.ExtraOptions { walDir = path.Join(walDir, namespace) } return &pebble.ExtraOptions{ + SyncMode: c.SyncMode, BytesPerSync: c.Experimental.BytesPerSync, L0CompactionFileThreshold: c.Experimental.L0CompactionFileThreshold, L0CompactionThreshold: c.Experimental.L0CompactionThreshold, diff --git a/cmd/nitro/init.go b/cmd/nitro/init.go index acad672bb0..93c51a0040 100644 --- a/cmd/nitro/init.go +++ b/cmd/nitro/init.go @@ -335,12 +335,12 @@ func validateBlockChain(blockChain *core.BlockChain, chainConfig *params.ChainCo } // Make sure we don't allow accidentally downgrading ArbOS if chainConfig.DebugMode() { - if currentArbosState.ArbOSVersion() > arbosState.MaxDebugArbosVersionSupported { - return fmt.Errorf("attempted to launch node in debug mode with ArbOS version %v on ArbOS state with version %v", arbosState.MaxDebugArbosVersionSupported, currentArbosState.ArbOSVersion()) + if currentArbosState.ArbOSVersion() > params.MaxDebugArbosVersionSupported { + return fmt.Errorf("attempted to launch node in debug mode with ArbOS version %v on ArbOS state with version %v", params.MaxDebugArbosVersionSupported, currentArbosState.ArbOSVersion()) } } else { - if currentArbosState.ArbOSVersion() > arbosState.MaxArbosVersionSupported { - return fmt.Errorf("attempted to launch node with ArbOS version %v on ArbOS state with version %v", arbosState.MaxArbosVersionSupported, currentArbosState.ArbOSVersion()) + if currentArbosState.ArbOSVersion() > params.MaxArbosVersionSupported { + return fmt.Errorf("attempted to launch node with ArbOS version %v on ArbOS state with version %v", params.MaxArbosVersionSupported, currentArbosState.ArbOSVersion()) } } diff --git a/contracts b/contracts index b140ed63ac..763bd77906 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit b140ed63acdb53cb906ffd1fa3c36fdbd474364e +Subproject commit 763bd77906b7677da691eaa31c6e195d455197a4 diff --git a/execution/gethexec/executionengine.go b/execution/gethexec/executionengine.go index 69535e82be..ffc6ceee9f 100644 --- a/execution/gethexec/executionengine.go +++ b/execution/gethexec/executionengine.go @@ -789,7 +789,8 @@ func (s *ExecutionEngine) cacheL1PriceDataOfMsg(seqNum arbutil.MessageIndex, rec gasUsedForL1 += receipts[i].GasUsedForL1 } for _, tx := range block.Transactions() { - callDataUnits += tx.CalldataUnits + _, cachedUnits := tx.GetRawCachedCalldataUnits() + callDataUnits += cachedUnits } } l1GasCharged := gasUsedForL1 * block.BaseFee().Uint64() diff --git a/go-ethereum b/go-ethereum index 313432e2a4..26b4dff616 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 313432e2a408f5d7d0f50c9ad4ccf515c8d21a56 +Subproject commit 26b4dff6165650b6963fb1b6f88958c29c059214 diff --git a/precompiles/ArbGasInfo.go b/precompiles/ArbGasInfo.go index 8d916926f3..c85ed93f39 100644 --- a/precompiles/ArbGasInfo.go +++ b/precompiles/ArbGasInfo.go @@ -29,7 +29,7 @@ func (con ArbGasInfo) GetPricesInWeiWithAggregator( evm mech, aggregator addr, ) (huge, huge, huge, huge, huge, huge, error) { - if c.State.ArbOSVersion() < 4 { + if c.State.ArbOSVersion() < params.ArbosVersion_4 { return con._preVersion4_GetPricesInWeiWithAggregator(c, evm, aggregator) } @@ -105,7 +105,7 @@ func (con ArbGasInfo) GetPricesInWei(c ctx, evm mech) (huge, huge, huge, huge, h // GetPricesInArbGasWithAggregator gets prices in ArbGas when using the provided aggregator func (con ArbGasInfo) GetPricesInArbGasWithAggregator(c ctx, evm mech, aggregator addr) (huge, huge, huge, error) { - if c.State.ArbOSVersion() < 4 { + if c.State.ArbOSVersion() < params.ArbosVersion_4 { return con._preVersion4_GetPricesInArbGasWithAggregator(c, evm, aggregator) } l1GasPrice, err := c.State.L1PricingState().PricePerUnit() @@ -220,7 +220,7 @@ func (con ArbGasInfo) GetGasBacklogTolerance(c ctx, evm mech) (uint64, error) { // GetL1PricingSurplus gets the surplus of funds for L1 batch posting payments (may be negative) func (con ArbGasInfo) GetL1PricingSurplus(c ctx, evm mech) (*big.Int, error) { - if c.State.ArbOSVersion() < 10 { + if c.State.ArbOSVersion() < params.ArbosVersion_10 { return con._preversion10_GetL1PricingSurplus(c, evm) } ps := c.State.L1PricingState() diff --git a/precompiles/ArbOwnerPublic.go b/precompiles/ArbOwnerPublic.go index 451e18e1cc..792b4bb59d 100644 --- a/precompiles/ArbOwnerPublic.go +++ b/precompiles/ArbOwnerPublic.go @@ -5,6 +5,7 @@ package precompiles import ( "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" ) // ArbOwnerPublic precompile provides non-owners with info about the current chain owners. @@ -42,7 +43,7 @@ func (con ArbOwnerPublic) GetNetworkFeeAccount(c ctx, evm mech) (addr, error) { // GetInfraFeeAccount gets the infrastructure fee collector func (con ArbOwnerPublic) GetInfraFeeAccount(c ctx, evm mech) (addr, error) { - if c.State.ArbOSVersion() < 6 { + if c.State.ArbOSVersion() < params.ArbosVersion_6 { return c.State.NetworkFeeAccount() } return c.State.InfraFeeAccount() diff --git a/precompiles/ArbOwner_test.go b/precompiles/ArbOwner_test.go index 51b2fc0cd9..74b29a79b5 100644 --- a/precompiles/ArbOwner_test.go +++ b/precompiles/ArbOwner_test.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/burn" @@ -218,7 +219,7 @@ func TestArbInfraFeeAccount(t *testing.T) { err = prec.SetInfraFeeAccount(callCtx, evm, newAddr) // this should be a no-op (because ArbOS version 0) Require(t, err) - version5 := uint64(5) + version5 := params.ArbosVersion_5 evm = newMockEVMForTestingWithVersion(&version5) callCtx = testContext(caller, evm) prec = &ArbOwner{} diff --git a/precompiles/ArbRetryableTx.go b/precompiles/ArbRetryableTx.go index 8fb5aa9391..06e5ccd352 100644 --- a/precompiles/ArbRetryableTx.go +++ b/precompiles/ArbRetryableTx.go @@ -39,7 +39,7 @@ type ArbRetryableTx struct { var ErrSelfModifyingRetryable = errors.New("retryable cannot modify itself") func (con ArbRetryableTx) oldNotFoundError(c ctx) error { - if c.State.ArbOSVersion() >= 3 { + if c.State.ArbOSVersion() >= params.ArbosVersion_3 { return con.NoTicketWithIDError() } return errors.New("ticketId not found") diff --git a/precompiles/ArbSys.go b/precompiles/ArbSys.go index 04cde46ebe..9742ed51f4 100644 --- a/precompiles/ArbSys.go +++ b/precompiles/ArbSys.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/util/arbmath" @@ -37,7 +38,7 @@ func (con *ArbSys) ArbBlockNumber(c ctx, evm mech) (huge, error) { // ArbBlockHash gets the L2 block hash, if sufficiently recent func (con *ArbSys) ArbBlockHash(c ctx, evm mech, arbBlockNumber *big.Int) (bytes32, error) { if !arbBlockNumber.IsUint64() { - if c.State.ArbOSVersion() >= 11 { + if c.State.ArbOSVersion() >= params.ArbosVersion_11 { return bytes32{}, con.InvalidBlockNumberError(arbBlockNumber, evm.Context.BlockNumber) } return bytes32{}, errors.New("invalid block number") @@ -46,7 +47,7 @@ func (con *ArbSys) ArbBlockHash(c ctx, evm mech, arbBlockNumber *big.Int) (bytes currentNumber := evm.Context.BlockNumber.Uint64() if requestedBlockNum >= currentNumber || requestedBlockNum+256 < currentNumber { - if c.State.ArbOSVersion() >= 11 { + if c.State.ArbOSVersion() >= params.ArbosVersion_11 { return common.Hash{}, con.InvalidBlockNumberError(arbBlockNumber, evm.Context.BlockNumber) } return common.Hash{}, errors.New("invalid block number for ArbBlockHAsh") @@ -84,7 +85,7 @@ func (con *ArbSys) MapL1SenderContractAddressToL2Alias(c ctx, sender addr, dest // WasMyCallersAddressAliased checks if the caller's caller was aliased func (con *ArbSys) WasMyCallersAddressAliased(c ctx, evm mech) (bool, error) { topLevel := con.isTopLevel(c, evm) - if c.State.ArbOSVersion() < 6 { + if c.State.ArbOSVersion() < params.ArbosVersion_6 { topLevel = evm.Depth() == 2 } aliased := topLevel && util.DoesTxTypeAlias(c.txProcessor.TopTxType) @@ -180,7 +181,7 @@ func (con *ArbSys) SendTxToL1(c ctx, evm mech, value huge, destination addr, cal calldataForL1, ) - if c.State.ArbOSVersion() >= 4 { + if c.State.ArbOSVersion() >= params.ArbosVersion_4 { return leafNum, nil } return sendHash.Big(), err diff --git a/precompiles/precompile.go b/precompiles/precompile.go index 5b5376a4ca..54d18a0cc9 100644 --- a/precompiles/precompile.go +++ b/precompiles/precompile.go @@ -361,7 +361,7 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr args = args[2:] version := arbosState.ArbOSVersion(state) - if callerCtx.readOnly && version >= 11 { + if callerCtx.readOnly && version >= params.ArbosVersion_11 { return []reflect.Value{reflect.ValueOf(vm.ErrWriteProtection)} } @@ -531,14 +531,14 @@ func Precompiles() map[addr]ArbosPrecompile { insert(MakePrecompile(pgen.ArbFunctionTableMetaData, &ArbFunctionTable{Address: types.ArbFunctionTableAddress})) insert(MakePrecompile(pgen.ArbosTestMetaData, &ArbosTest{Address: types.ArbosTestAddress})) ArbGasInfo := insert(MakePrecompile(pgen.ArbGasInfoMetaData, &ArbGasInfo{Address: types.ArbGasInfoAddress})) - ArbGasInfo.methodsByName["GetL1FeesAvailable"].arbosVersion = 10 - ArbGasInfo.methodsByName["GetL1RewardRate"].arbosVersion = 11 - ArbGasInfo.methodsByName["GetL1RewardRecipient"].arbosVersion = 11 - ArbGasInfo.methodsByName["GetL1PricingEquilibrationUnits"].arbosVersion = 20 - ArbGasInfo.methodsByName["GetLastL1PricingUpdateTime"].arbosVersion = 20 - ArbGasInfo.methodsByName["GetL1PricingFundsDueForRewards"].arbosVersion = 20 - ArbGasInfo.methodsByName["GetL1PricingUnitsSinceUpdate"].arbosVersion = 20 - ArbGasInfo.methodsByName["GetLastL1PricingSurplus"].arbosVersion = 20 + ArbGasInfo.methodsByName["GetL1FeesAvailable"].arbosVersion = params.ArbosVersion_10 + ArbGasInfo.methodsByName["GetL1RewardRate"].arbosVersion = params.ArbosVersion_11 + ArbGasInfo.methodsByName["GetL1RewardRecipient"].arbosVersion = params.ArbosVersion_11 + ArbGasInfo.methodsByName["GetL1PricingEquilibrationUnits"].arbosVersion = params.ArbosVersion_20 + ArbGasInfo.methodsByName["GetLastL1PricingUpdateTime"].arbosVersion = params.ArbosVersion_20 + ArbGasInfo.methodsByName["GetL1PricingFundsDueForRewards"].arbosVersion = params.ArbosVersion_20 + ArbGasInfo.methodsByName["GetL1PricingUnitsSinceUpdate"].arbosVersion = params.ArbosVersion_20 + ArbGasInfo.methodsByName["GetLastL1PricingSurplus"].arbosVersion = params.ArbosVersion_20 insert(MakePrecompile(pgen.ArbAggregatorMetaData, &ArbAggregator{Address: types.ArbAggregatorAddress})) insert(MakePrecompile(pgen.ArbStatisticsMetaData, &ArbStatistics{Address: types.ArbStatisticsAddress})) @@ -554,10 +554,10 @@ func Precompiles() map[addr]ArbosPrecompile { ArbOwnerPublicImpl := &ArbOwnerPublic{Address: types.ArbOwnerPublicAddress} ArbOwnerPublic := insert(MakePrecompile(pgen.ArbOwnerPublicMetaData, ArbOwnerPublicImpl)) - ArbOwnerPublic.methodsByName["GetInfraFeeAccount"].arbosVersion = 5 - ArbOwnerPublic.methodsByName["RectifyChainOwner"].arbosVersion = 11 - ArbOwnerPublic.methodsByName["GetBrotliCompressionLevel"].arbosVersion = 20 - ArbOwnerPublic.methodsByName["GetScheduledUpgrade"].arbosVersion = 20 + ArbOwnerPublic.methodsByName["GetInfraFeeAccount"].arbosVersion = params.ArbosVersion_5 + ArbOwnerPublic.methodsByName["RectifyChainOwner"].arbosVersion = params.ArbosVersion_11 + ArbOwnerPublic.methodsByName["GetBrotliCompressionLevel"].arbosVersion = params.ArbosVersion_20 + ArbOwnerPublic.methodsByName["GetScheduledUpgrade"].arbosVersion = params.ArbosVersion_20 ArbWasmImpl := &ArbWasm{Address: types.ArbWasmAddress} ArbWasm := insert(MakePrecompile(pgen.ArbWasmMetaData, ArbWasmImpl)) @@ -611,11 +611,11 @@ func Precompiles() map[addr]ArbosPrecompile { return ArbOwnerImpl.OwnerActs(context, evm, method, owner, data) } _, ArbOwner := MakePrecompile(pgen.ArbOwnerMetaData, ArbOwnerImpl) - ArbOwner.methodsByName["GetInfraFeeAccount"].arbosVersion = 5 - ArbOwner.methodsByName["SetInfraFeeAccount"].arbosVersion = 5 - ArbOwner.methodsByName["ReleaseL1PricerSurplusFunds"].arbosVersion = 10 - ArbOwner.methodsByName["SetChainConfig"].arbosVersion = 11 - ArbOwner.methodsByName["SetBrotliCompressionLevel"].arbosVersion = 20 + ArbOwner.methodsByName["GetInfraFeeAccount"].arbosVersion = params.ArbosVersion_5 + ArbOwner.methodsByName["SetInfraFeeAccount"].arbosVersion = params.ArbosVersion_5 + ArbOwner.methodsByName["ReleaseL1PricerSurplusFunds"].arbosVersion = params.ArbosVersion_10 + ArbOwner.methodsByName["SetChainConfig"].arbosVersion = params.ArbosVersion_11 + ArbOwner.methodsByName["SetBrotliCompressionLevel"].arbosVersion = params.ArbosVersion_20 stylusMethods := []string{ "SetInkPrice", "SetWasmMaxStackDepth", "SetWasmFreePages", "SetWasmPageGas", "SetWasmPageLimit", "SetWasmMinInitGas", "SetWasmInitCostScalar", @@ -798,7 +798,7 @@ func (p *Precompile) Call( ) } // nolint:errorlint - if arbosVersion >= 11 || errRet == vm.ErrExecutionReverted { + if arbosVersion >= params.ArbosVersion_11 || errRet == vm.ErrExecutionReverted { return nil, callerCtx.gasLeft, vm.ErrExecutionReverted } // Preserve behavior with old versions which would zero out gas on this type of error diff --git a/precompiles/precompile_test.go b/precompiles/precompile_test.go index c8b8a46b96..75fed711eb 100644 --- a/precompiles/precompile_test.go +++ b/precompiles/precompile_test.go @@ -190,13 +190,13 @@ func TestPrecompilesPerArbosVersion(t *testing.T) { log.SetDefault(log.NewLogger(glogger)) expectedNewMethodsPerArbosVersion := map[uint64]int{ - 0: 89, - 5: 3, - 10: 2, - 11: 4, - 20: 8, - 30: 38, - 31: 1, + 0: 89, + params.ArbosVersion_5: 3, + params.ArbosVersion_10: 2, + params.ArbosVersion_11: 4, + params.ArbosVersion_20: 8, + params.ArbosVersion_30: 38, + params.ArbosVersion_31: 1, } precompiles := Precompiles() diff --git a/precompiles/wrapper.go b/precompiles/wrapper.go index edc079fc5b..028aed755b 100644 --- a/precompiles/wrapper.go +++ b/precompiles/wrapper.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/arbosState" "github.com/offchainlabs/nitro/arbos/util" @@ -102,7 +103,7 @@ func (wrapper *OwnerPrecompile) Call( } version := arbosState.ArbOSVersion(evm.StateDB) - if !readOnly || version < 11 { + if !readOnly || version < params.ArbosVersion_11 { // log that the owner operation succeeded if err := wrapper.emitSuccess(evm, *(*[4]byte)(input[:4]), caller, input); err != nil { log.Error("failed to emit OwnerActs event", "err", err) diff --git a/staker/legacy/staker.go b/staker/legacy/staker.go index fa74be327f..504e8c8421 100644 --- a/staker/legacy/staker.go +++ b/staker/legacy/staker.go @@ -323,9 +323,6 @@ func NewStaker( return nil, err } stakerLastSuccessfulActionGauge.Update(time.Now().Unix()) - if config().StartValidationFromStaked && blockValidator != nil { - stakedNotifiers = append(stakedNotifiers, blockValidator) - } inactiveValidatedNodes := btree.NewG(2, func(a, b validatedNode) bool { return a.number < b.number || (a.number == b.number && a.hash.Cmp(b.hash) < 0) }) diff --git a/system_tests/arbos_upgrade_test.go b/system_tests/arbos_upgrade_test.go new file mode 100644 index 0000000000..a7103a8585 --- /dev/null +++ b/system_tests/arbos_upgrade_test.go @@ -0,0 +1,271 @@ +// Copyright 2021-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE + +package arbtest + +import ( + "context" + "math/big" + "strings" + "testing" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + + "github.com/offchainlabs/nitro/arbnode" + "github.com/offchainlabs/nitro/arbos/arbosState" + "github.com/offchainlabs/nitro/execution/gethexec" + "github.com/offchainlabs/nitro/solgen/go/mocksgen" + "github.com/offchainlabs/nitro/solgen/go/precompilesgen" +) + +func TestScheduleArbosUpgrade(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + builder := NewNodeBuilder(ctx).DefaultConfig(t, false) + cleanup := builder.Build(t) + defer cleanup() + + auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) + + arbOwnerPublic, err := precompilesgen.NewArbOwnerPublic(common.HexToAddress("0x6b"), builder.L2.Client) + Require(t, err, "could not bind ArbOwner contract") + + arbOwner, err := precompilesgen.NewArbOwner(common.HexToAddress("0x70"), builder.L2.Client) + Require(t, err, "could not bind ArbOwner contract") + + callOpts := &bind.CallOpts{Context: ctx} + scheduled, err := arbOwnerPublic.GetScheduledUpgrade(callOpts) + Require(t, err, "failed to call GetScheduledUpgrade before scheduling upgrade") + if scheduled.ArbosVersion != 0 || scheduled.ScheduledForTimestamp != 0 { + t.Errorf("expected no upgrade to be scheduled, got version %v timestamp %v", scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) + } + + // Schedule a noop upgrade, which should test GetScheduledUpgrade in the same way an already completed upgrade would. + tx, err := arbOwner.ScheduleArbOSUpgrade(&auth, 1, 1) + Require(t, err) + _, err = builder.L2.EnsureTxSucceeded(tx) + Require(t, err) + + scheduled, err = arbOwnerPublic.GetScheduledUpgrade(callOpts) + Require(t, err, "failed to call GetScheduledUpgrade after scheduling noop upgrade") + if scheduled.ArbosVersion != 0 || scheduled.ScheduledForTimestamp != 0 { + t.Errorf("expected completed scheduled upgrade to be ignored, got version %v timestamp %v", scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) + } + + // We can't test 11 -> 20 because 11 doesn't have the GetScheduledUpgrade method we want to test + var testVersion uint64 = 100 + var testTimestamp uint64 = 1 << 62 + tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, 100, 1<<62) + Require(t, err) + _, err = builder.L2.EnsureTxSucceeded(tx) + Require(t, err) + + scheduled, err = arbOwnerPublic.GetScheduledUpgrade(callOpts) + Require(t, err, "failed to call GetScheduledUpgrade after scheduling upgrade") + if scheduled.ArbosVersion != testVersion || scheduled.ScheduledForTimestamp != testTimestamp { + t.Errorf("expected upgrade to be scheduled for version %v timestamp %v, got version %v timestamp %v", testVersion, testTimestamp, scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) + } +} + +func checkArbOSVersion(t *testing.T, testClient *TestClient, expectedVersion uint64, scenario string) { + statedb, err := testClient.ExecNode.Backend.ArbInterface().BlockChain().State() + Require(t, err, "could not get statedb", scenario) + state, err := arbosState.OpenSystemArbosState(statedb, nil, true) + Require(t, err, "could not open ArbOS state", scenario) + if state.ArbOSVersion() != expectedVersion { + t.Errorf("%s: expected ArbOS version %v, got %v", scenario, expectedVersion, state.ArbOSVersion()) + } + +} + +func TestArbos11To32UpgradeWithMcopy(t *testing.T) { + t.Parallel() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + initialVersion := uint64(11) + finalVersion := uint64(32) + + builder := NewNodeBuilder(ctx). + DefaultConfig(t, true). + WithArbOSVersion(initialVersion) + cleanup := builder.Build(t) + defer cleanup() + seqTestClient := builder.L2 + + auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) + auth.GasLimit = 32000000 + + // makes Owner a chain owner + arbDebug, err := precompilesgen.NewArbDebug(types.ArbDebugAddress, seqTestClient.Client) + Require(t, err) + tx, err := arbDebug.BecomeChainOwner(&auth) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, seqTestClient.Client, tx) + Require(t, err) + + // deploys test contract + _, tx, contract, err := mocksgen.DeployArbOS11To32UpgradeTest(&auth, seqTestClient.Client) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, seqTestClient.Client, tx) + Require(t, err) + + // build replica node + replicaConfig := arbnode.ConfigDefaultL1Test() + replicaConfig.BatchPoster.Enable = false + replicaTestClient, replicaCleanup := builder.Build2ndNode(t, &SecondNodeParams{nodeConfig: replicaConfig}) + defer replicaCleanup() + + checkArbOSVersion(t, seqTestClient, initialVersion, "initial sequencer") + checkArbOSVersion(t, replicaTestClient, initialVersion, "initial replica") + + // mcopy should fail since arbos 11 doesn't support it + tx, err = contract.Mcopy(&auth) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + if (err == nil) || !strings.Contains(err.Error(), "invalid opcode: MCOPY") { + t.Errorf("expected MCOPY to fail, got %v", err) + } + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + + // upgrade arbos to final version + arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, seqTestClient.Client) + Require(t, err) + tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, finalVersion, 0) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + + // checks upgrade worked + tx, err = contract.Mcopy(&auth) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + + checkArbOSVersion(t, seqTestClient, finalVersion, "final sequencer") + checkArbOSVersion(t, replicaTestClient, finalVersion, "final replica") + + // generates more blocks + builder.L2Info.GenerateAccount("User2") + for i := 0; i < 3; i++ { + tx = builder.L2Info.PrepareTx("Owner", "User2", builder.L2Info.TransferGas, big.NewInt(1e12), nil) + err = seqTestClient.Client.SendTransaction(ctx, tx) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + } + + blockNumberSeq, err := seqTestClient.Client.BlockNumber(ctx) + Require(t, err) + blockNumberReplica, err := replicaTestClient.Client.BlockNumber(ctx) + Require(t, err) + if blockNumberSeq != blockNumberReplica { + t.Errorf("expected sequencer and replica to have same block number, got %v and %v", blockNumberSeq, blockNumberReplica) + } + // #nosec G115 + blockNumber := big.NewInt(int64(blockNumberSeq)) + + blockSeq, err := seqTestClient.Client.BlockByNumber(ctx, blockNumber) + Require(t, err) + blockReplica, err := replicaTestClient.Client.BlockByNumber(ctx, blockNumber) + Require(t, err) + if blockSeq.Hash() != blockReplica.Hash() { + t.Errorf("expected sequencer and replica to have same block hash, got %v and %v", blockSeq.Hash(), blockReplica.Hash()) + } +} + +func TestArbos11To32UpgradeWithCalldata(t *testing.T) { + t.Parallel() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + initialVersion := uint64(11) + finalVersion := uint64(32) + + builder := NewNodeBuilder(ctx). + DefaultConfig(t, true). + WithArbOSVersion(initialVersion) + builder.execConfig.TxPreChecker.Strictness = gethexec.TxPreCheckerStrictnessLikelyCompatible + cleanup := builder.Build(t) + defer cleanup() + seqTestClient := builder.L2 + + auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) + auth.GasLimit = 32000000 + + // makes Owner a chain owner + arbDebug, err := precompilesgen.NewArbDebug(types.ArbDebugAddress, seqTestClient.Client) + Require(t, err) + tx, err := arbDebug.BecomeChainOwner(&auth) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, seqTestClient.Client, tx) + Require(t, err) + + // build replica node + replicaConfig := arbnode.ConfigDefaultL1Test() + replicaConfig.BatchPoster.Enable = false + replicaTestClient, replicaCleanup := builder.Build2ndNode(t, &SecondNodeParams{nodeConfig: replicaConfig}) + defer replicaCleanup() + + checkArbOSVersion(t, seqTestClient, initialVersion, "initial sequencer") + checkArbOSVersion(t, replicaTestClient, initialVersion, "initial replica") + + // upgrade arbos to final version + arbOwner, err := precompilesgen.NewArbOwner(types.ArbOwnerAddress, seqTestClient.Client) + Require(t, err) + tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, finalVersion, 0) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + + // checks upgrade worked + var data []byte + for i := range 10 { + for range 100 { + data = append(data, byte(i)) + } + } + tx = builder.L2Info.PrepareTx("Owner", "Owner", builder.L2Info.TransferGas, big.NewInt(1e12), data) + err = seqTestClient.Client.SendTransaction(ctx, tx) + Require(t, err) + _, err = seqTestClient.EnsureTxSucceeded(tx) + Require(t, err) + _, err = WaitForTx(ctx, replicaTestClient.Client, tx.Hash(), time.Second*15) + Require(t, err) + + checkArbOSVersion(t, seqTestClient, finalVersion, "final sequencer") + checkArbOSVersion(t, replicaTestClient, finalVersion, "final replica") + + blockNumberSeq, err := seqTestClient.Client.BlockNumber(ctx) + Require(t, err) + blockNumberReplica, err := replicaTestClient.Client.BlockNumber(ctx) + Require(t, err) + if blockNumberSeq != blockNumberReplica { + t.Errorf("expected sequencer and replica to have same block number, got %v and %v", blockNumberSeq, blockNumberReplica) + } + // #nosec G115 + blockNumber := big.NewInt(int64(blockNumberSeq)) + + blockSeq, err := seqTestClient.Client.BlockByNumber(ctx, blockNumber) + Require(t, err) + blockReplica, err := replicaTestClient.Client.BlockByNumber(ctx, blockNumber) + Require(t, err) + if blockSeq.Hash() != blockReplica.Hash() { + t.Errorf("expected sequencer and replica to have same block hash, got %v and %v", blockSeq.Hash(), blockReplica.Hash()) + } +} diff --git a/system_tests/block_validator_test.go b/system_tests/block_validator_test.go index 9125c3921e..d6ae4973ac 100644 --- a/system_tests/block_validator_test.go +++ b/system_tests/block_validator_test.go @@ -19,6 +19,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbnode" "github.com/offchainlabs/nitro/arbos/l2pricing" @@ -58,7 +59,7 @@ func testBlockValidatorSimple(t *testing.T, opts Options) { chainConfig, l1NodeConfigA, lifecycleManager, _, dasSignerKey := setupConfigWithDAS(t, ctx, opts.dasModeString) defer lifecycleManager.StopAndWaitUntil(time.Second) if opts.workload == upgradeArbOs { - chainConfig.ArbitrumChainParams.InitialArbOSVersion = 10 + chainConfig.ArbitrumChainParams.InitialArbOSVersion = params.ArbosVersion_10 } var delayEvery int @@ -202,8 +203,6 @@ func testBlockValidatorSimple(t *testing.T, opts Options) { builder.L1.SendWaitTestTransactions(t, []*types.Transaction{ WrapL2ForDelayed(t, delayedTx, builder.L1Info, "User", 100000), }) - // give the inbox reader a bit of time to pick up the delayed message - time.Sleep(time.Millisecond * 500) // sending l1 messages creates l1 blocks.. make enough to get that delayed inbox message in for i := 0; i < 30; i++ { diff --git a/system_tests/debugapi_test.go b/system_tests/debugapi_test.go index 6be79ed4c9..fd1aa746a3 100644 --- a/system_tests/debugapi_test.go +++ b/system_tests/debugapi_test.go @@ -3,6 +3,8 @@ package arbtest import ( "context" "encoding/json" + "fmt" + "math/big" "testing" "github.com/ethereum/go-ethereum/common" @@ -10,10 +12,16 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/gasestimator" "github.com/ethereum/go-ethereum/eth/tracers" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" + "github.com/offchainlabs/nitro/arbos/l2pricing" + "github.com/offchainlabs/nitro/arbos/retryables" + "github.com/offchainlabs/nitro/solgen/go/node_interfacegen" "github.com/offchainlabs/nitro/solgen/go/precompilesgen" + "github.com/offchainlabs/nitro/util/arbmath" ) func TestDebugAPI(t *testing.T) { @@ -57,3 +65,230 @@ func TestDebugAPI(t *testing.T) { err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", tx.Hash(), &tracers.TraceConfig{Tracer: &flatCallTracer}) Require(t, err) } + +type account struct { + Balance *hexutil.Big `json:"balance,omitempty"` + Code []byte `json:"code,omitempty"` + Nonce uint64 `json:"nonce,omitempty"` + Storage map[common.Hash]common.Hash `json:"storage,omitempty"` +} +type prestateTrace struct { + Post map[common.Address]*account `json:"post"` + Pre map[common.Address]*account `json:"pre"` +} + +func TestPrestateTracingSimple(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + builder := NewNodeBuilder(ctx).DefaultConfig(t, true) + cleanup := builder.Build(t) + defer cleanup() + + builder.L2Info.GenerateAccount("User2") + sender := builder.L2Info.GetAddress("Owner") + receiver := builder.L2Info.GetAddress("User2") + ownerOldBalance, err := builder.L2.Client.BalanceAt(ctx, sender, nil) + Require(t, err) + user2OldBalance, err := builder.L2.Client.BalanceAt(ctx, receiver, nil) + Require(t, err) + + value := big.NewInt(1e6) + tx := builder.L2Info.PrepareTx("Owner", "User2", builder.L2Info.TransferGas, value, nil) + Require(t, builder.L2.Client.SendTransaction(ctx, tx)) + _, err = builder.L2.EnsureTxSucceeded(tx) + Require(t, err) + + l2rpc := builder.L2.Stack.Attach() + + var result prestateTrace + traceConfig := map[string]interface{}{ + "tracer": "prestateTracer", + "tracerConfig": map[string]interface{}{ + "diffMode": true, + }, + } + err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", tx.Hash(), traceConfig) + Require(t, err) + + if !arbmath.BigEquals(result.Pre[sender].Balance.ToInt(), ownerOldBalance) { + Fatal(t, "Unexpected initial balance of sender") + } + if !arbmath.BigEquals(result.Pre[receiver].Balance.ToInt(), user2OldBalance) { + Fatal(t, "Unexpected initial balance of receiver") + } + if !arbmath.BigEquals(result.Post[sender].Balance.ToInt(), arbmath.BigSub(ownerOldBalance, value)) { + Fatal(t, "Unexpected final balance of sender") + } + if !arbmath.BigEquals(result.Post[receiver].Balance.ToInt(), value) { + Fatal(t, "Unexpected final balance of receiver") + } + if result.Post[sender].Nonce != result.Pre[sender].Nonce+1 { + Fatal(t, "sender nonce increment wasn't registered") + } + if result.Post[receiver].Nonce != result.Pre[receiver].Nonce { + Fatal(t, "receiver nonce shouldn't change") + } +} + +func TestPrestateTracingComplex(t *testing.T) { + builder, delayedInbox, lookupL2Tx, ctx, teardown := retryableSetup(t) + defer teardown() + + // Test prestate tracing of a ArbitrumDepositTx type tx + faucetAddr := builder.L1Info.GetAddress("Faucet") + oldBalance, err := builder.L2.Client.BalanceAt(ctx, faucetAddr, nil) + Require(t, err) + + txOpts := builder.L1Info.GetDefaultTransactOpts("Faucet", ctx) + txOpts.Value = big.NewInt(13) + + l1tx, err := delayedInbox.DepositEth439370b1(&txOpts) + Require(t, err) + + l1Receipt, err := builder.L1.EnsureTxSucceeded(l1tx) + Require(t, err) + if l1Receipt.Status != types.ReceiptStatusSuccessful { + t.Errorf("Got transaction status: %v, want: %v", l1Receipt.Status, types.ReceiptStatusSuccessful) + } + waitForL1DelayBlocks(t, builder) + + l2Tx := lookupL2Tx(l1Receipt) + l2Receipt, err := builder.L2.EnsureTxSucceeded(l2Tx) + Require(t, err) + newBalance, err := builder.L2.Client.BalanceAt(ctx, faucetAddr, l2Receipt.BlockNumber) + Require(t, err) + if got := new(big.Int); got.Sub(newBalance, oldBalance).Cmp(txOpts.Value) != 0 { + t.Errorf("Got transferred: %v, want: %v", got, txOpts.Value) + } + + l2rpc := builder.L2.Stack.Attach() + var result prestateTrace + traceConfig := map[string]interface{}{ + "tracer": "prestateTracer", + "tracerConfig": map[string]interface{}{ + "diffMode": true, + }, + } + err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", l2Tx.Hash(), traceConfig) + Require(t, err) + + if _, ok := result.Pre[faucetAddr]; !ok { + Fatal(t, "Faucet account not found in the result of prestate tracer") + } + // Nonce shouldn't exist (in this case defaults to 0) in the Post map of the trace in DiffMode + if l2Tx.SkipAccountChecks() && result.Post[faucetAddr].Nonce != 0 { + Fatal(t, "Faucet account's nonce should remain unchanged ") + } + if !arbmath.BigEquals(result.Pre[faucetAddr].Balance.ToInt(), oldBalance) { + Fatal(t, "Unexpected initial balance of Faucet") + } + if !arbmath.BigEquals(result.Post[faucetAddr].Balance.ToInt(), arbmath.BigAdd(oldBalance, txOpts.Value)) { + Fatal(t, "Unexpected final balance of Faucet") + } + + // Test prestate tracing of a ArbitrumSubmitRetryableTx type tx + user2Address := builder.L2Info.GetAddress("User2") + beneficiaryAddress := builder.L2Info.GetAddress("Beneficiary") + + deposit := arbmath.BigMul(big.NewInt(1e12), big.NewInt(1e12)) + callValue := big.NewInt(1e6) + + nodeInterface, err := node_interfacegen.NewNodeInterface(types.NodeInterfaceAddress, builder.L2.Client) + Require(t, err, "failed to deploy NodeInterface") + + // estimate the gas needed to auto redeem the retryable + usertxoptsL2 := builder.L2Info.GetDefaultTransactOpts("Faucet", ctx) + usertxoptsL2.NoSend = true + usertxoptsL2.GasMargin = 0 + tx, err := nodeInterface.EstimateRetryableTicket( + &usertxoptsL2, + usertxoptsL2.From, + deposit, + user2Address, + callValue, + beneficiaryAddress, + beneficiaryAddress, + []byte{0x32, 0x42, 0x32, 0x88}, // increase the cost to beyond that of params.TxGas + ) + Require(t, err, "failed to estimate retryable submission") + estimate := tx.Gas() + expectedEstimate := params.TxGas + params.TxDataNonZeroGasEIP2028*4 + if float64(estimate) > float64(expectedEstimate)*(1+gasestimator.EstimateGasErrorRatio) { + t.Errorf("estimated retryable ticket at %v gas but expected %v, with error margin of %v", + estimate, + expectedEstimate, + gasestimator.EstimateGasErrorRatio, + ) + } + + // submit & auto redeem the retryable using the gas estimate + usertxoptsL1 := builder.L1Info.GetDefaultTransactOpts("Faucet", ctx) + usertxoptsL1.Value = deposit + l1tx, err = delayedInbox.CreateRetryableTicket( + &usertxoptsL1, + user2Address, + callValue, + big.NewInt(1e16), + beneficiaryAddress, + beneficiaryAddress, + arbmath.UintToBig(estimate), + big.NewInt(l2pricing.InitialBaseFeeWei*2), + []byte{0x32, 0x42, 0x32, 0x88}, + ) + Require(t, err) + + l1Receipt, err = builder.L1.EnsureTxSucceeded(l1tx) + Require(t, err) + if l1Receipt.Status != types.ReceiptStatusSuccessful { + Fatal(t, "l1Receipt indicated failure") + } + + waitForL1DelayBlocks(t, builder) + + l2Tx = lookupL2Tx(l1Receipt) + receipt, err := builder.L2.EnsureTxSucceeded(l2Tx) + Require(t, err) + if receipt.Status != types.ReceiptStatusSuccessful { + Fatal(t) + } + + l2balance, err := builder.L2.Client.BalanceAt(ctx, builder.L2Info.GetAddress("User2"), nil) + Require(t, err) + if !arbmath.BigEquals(l2balance, callValue) { + Fatal(t, "Unexpected balance:", l2balance) + } + + ticketId := receipt.Logs[0].Topics[1] + firstRetryTxId := receipt.Logs[1].Topics[2] + fmt.Println("submitretryable txid ", ticketId) + fmt.Println("auto redeem txid ", firstRetryTxId) + + // Trace ArbitrumSubmitRetryableTx + result = prestateTrace{} + err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", l2Tx.Hash(), traceConfig) + Require(t, err) + + escrowAddr := retryables.RetryableEscrowAddress(ticketId) + if _, ok := result.Pre[escrowAddr]; !ok { + Fatal(t, "Escrow account not found in the result of prestate tracer for a ArbitrumSubmitRetryableTx transaction") + } + + if !arbmath.BigEquals(result.Pre[escrowAddr].Balance.ToInt(), common.Big0) { + Fatal(t, "Unexpected initial balance of Escrow") + } + if !arbmath.BigEquals(result.Post[escrowAddr].Balance.ToInt(), callValue) { + Fatal(t, "Unexpected final balance of Escrow") + } + + // Trace ArbitrumRetryTx + result = prestateTrace{} + err = l2rpc.CallContext(ctx, &result, "debug_traceTransaction", firstRetryTxId, traceConfig) + Require(t, err) + + if !arbmath.BigEquals(result.Pre[user2Address].Balance.ToInt(), common.Big0) { + Fatal(t, "Unexpected initial balance of User2") + } + if !arbmath.BigEquals(result.Post[user2Address].Balance.ToInt(), callValue) { + Fatal(t, "Unexpected final balance of User2") + } +} diff --git a/system_tests/estimation_test.go b/system_tests/estimation_test.go index e489b1864e..37e1efe8c5 100644 --- a/system_tests/estimation_test.go +++ b/system_tests/estimation_test.go @@ -162,7 +162,7 @@ func TestDifficultyForArbOSTen(t *testing.T) { defer cancel() builder := NewNodeBuilder(ctx).DefaultConfig(t, false) - builder.chainConfig.ArbitrumChainParams.InitialArbOSVersion = 10 + builder.chainConfig.ArbitrumChainParams.InitialArbOSVersion = params.ArbosVersion_10 cleanup := builder.Build(t) defer cleanup() diff --git a/system_tests/fees_test.go b/system_tests/fees_test.go index 76de23e2cb..5540728df8 100644 --- a/system_tests/fees_test.go +++ b/system_tests/fees_test.go @@ -89,10 +89,10 @@ func TestSequencerFeePaid(t *testing.T) { feePaidForL2 := arbmath.BigMulByUint(gasPrice, gasUsedForL2) tipPaidToNet := arbmath.BigMulByUint(tipCap, receipt.GasUsedForL1) gotTip := arbmath.BigEquals(networkRevenue, arbmath.BigAdd(feePaidForL2, tipPaidToNet)) - if !gotTip && version == 9 { + if !gotTip && version == params.ArbosVersion_9 { Fatal(t, "network didn't receive expected payment", networkRevenue, feePaidForL2, tipPaidToNet) } - if gotTip && version != 9 { + if gotTip && version != params.ArbosVersion_9 { Fatal(t, "tips are somehow enabled") } @@ -110,7 +110,7 @@ func TestSequencerFeePaid(t *testing.T) { return networkRevenue, tipPaidToNet } - if version != 9 { + if version != params.ArbosVersion_9 { testFees(3) return } diff --git a/system_tests/precompile_test.go b/system_tests/precompile_test.go index 78f34df6c7..5bc6315086 100644 --- a/system_tests/precompile_test.go +++ b/system_tests/precompile_test.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/l1pricing" @@ -27,7 +28,7 @@ func TestPurePrecompileMethodCalls(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - arbosVersion := uint64(31) + arbosVersion := params.ArbosVersion_31 builder := NewNodeBuilder(ctx). DefaultConfig(t, false). WithArbOSVersion(arbosVersion) @@ -504,57 +505,6 @@ func TestGetBrotliCompressionLevel(t *testing.T) { } } -func TestScheduleArbosUpgrade(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - builder := NewNodeBuilder(ctx).DefaultConfig(t, false) - cleanup := builder.Build(t) - defer cleanup() - - auth := builder.L2Info.GetDefaultTransactOpts("Owner", ctx) - - arbOwnerPublic, err := precompilesgen.NewArbOwnerPublic(common.HexToAddress("0x6b"), builder.L2.Client) - Require(t, err, "could not bind ArbOwner contract") - - arbOwner, err := precompilesgen.NewArbOwner(common.HexToAddress("0x70"), builder.L2.Client) - Require(t, err, "could not bind ArbOwner contract") - - callOpts := &bind.CallOpts{Context: ctx} - scheduled, err := arbOwnerPublic.GetScheduledUpgrade(callOpts) - Require(t, err, "failed to call GetScheduledUpgrade before scheduling upgrade") - if scheduled.ArbosVersion != 0 || scheduled.ScheduledForTimestamp != 0 { - t.Errorf("expected no upgrade to be scheduled, got version %v timestamp %v", scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) - } - - // Schedule a noop upgrade, which should test GetScheduledUpgrade in the same way an already completed upgrade would. - tx, err := arbOwner.ScheduleArbOSUpgrade(&auth, 1, 1) - Require(t, err) - _, err = builder.L2.EnsureTxSucceeded(tx) - Require(t, err) - - scheduled, err = arbOwnerPublic.GetScheduledUpgrade(callOpts) - Require(t, err, "failed to call GetScheduledUpgrade after scheduling noop upgrade") - if scheduled.ArbosVersion != 0 || scheduled.ScheduledForTimestamp != 0 { - t.Errorf("expected completed scheduled upgrade to be ignored, got version %v timestamp %v", scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) - } - - // TODO: Once we have an ArbOS 30, test a real upgrade with it - // We can't test 11 -> 20 because 11 doesn't have the GetScheduledUpgrade method we want to test - var testVersion uint64 = 100 - var testTimestamp uint64 = 1 << 62 - tx, err = arbOwner.ScheduleArbOSUpgrade(&auth, 100, 1<<62) - Require(t, err) - _, err = builder.L2.EnsureTxSucceeded(tx) - Require(t, err) - - scheduled, err = arbOwnerPublic.GetScheduledUpgrade(callOpts) - Require(t, err, "failed to call GetScheduledUpgrade after scheduling upgrade") - if scheduled.ArbosVersion != testVersion || scheduled.ScheduledForTimestamp != testTimestamp { - t.Errorf("expected upgrade to be scheduled for version %v timestamp %v, got version %v timestamp %v", testVersion, testTimestamp, scheduled.ArbosVersion, scheduled.ScheduledForTimestamp) - } -} - func TestArbStatistics(t *testing.T) { t.Parallel() diff --git a/system_tests/retryable_test.go b/system_tests/retryable_test.go index 55d26c8372..49bba81374 100644 --- a/system_tests/retryable_test.go +++ b/system_tests/retryable_test.go @@ -316,7 +316,7 @@ func testSubmitRetryableEmptyEscrow(t *testing.T, arbosVersion uint64) { state, err := builder.L2.ExecNode.ArbInterface.BlockChain().State() Require(t, err) escrowExists := state.Exist(escrowAccount) - if escrowExists != (arbosVersion < 30) { + if escrowExists != (arbosVersion < params.ArbosVersion_30) { Fatal(t, "Escrow account existance", escrowExists, "doesn't correspond to ArbOS version", arbosVersion) } } diff --git a/system_tests/transfer_test.go b/system_tests/transfer_test.go index a49e059351..c221ecc137 100644 --- a/system_tests/transfer_test.go +++ b/system_tests/transfer_test.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" ) func TestTransfer(t *testing.T) { @@ -51,12 +52,12 @@ func TestP256Verify(t *testing.T) { }{ { desc: "p256 should not be enabled on arbOS 20", - initialVersion: 20, + initialVersion: params.ArbosVersion_20, want: nil, }, { desc: "p256 should be enabled on arbOS 20", - initialVersion: 30, + initialVersion: params.ArbosVersion_30, want: common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001"), }, } { From 2fe54e77860edc5d3dc1293cbbecc04332c5e3d5 Mon Sep 17 00:00:00 2001 From: Pepper Lebeck-Jobe Date: Mon, 30 Dec 2024 10:20:46 +0900 Subject: [PATCH 142/187] Rearrange the order of agreed and confirmed This way, the behavior of falling back to the confirmed state is more readable. --- staker/bold/bold_staker.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/staker/bold/bold_staker.go b/staker/bold/bold_staker.go index 539eb80abf..063f7b9719 100644 --- a/staker/bold/bold_staker.go +++ b/staker/bold/bold_staker.go @@ -244,29 +244,29 @@ func (b *BOLDStaker) Start(ctxIn context.Context) { if err != nil { log.Warn("error updating latest wasm module root", "err", err) } + confirmedMsgCount, confirmedGlobalState, err := b.getLatestState(ctx, true) + if err != nil { + log.Error("staker: error checking latest confirmed", "err", err) + } + agreedMsgCount, agreedGlobalState, err := b.getLatestState(ctx, false) if err != nil { log.Error("staker: error checking latest agreed", "err", err) } + if agreedGlobalState == nil { + // If we don't have a latest agreed global state, we should fall back to + // using the latest confirmed global state. + agreedGlobalState = confirmedGlobalState + agreedMsgCount = confirmedMsgCount + } if agreedGlobalState != nil { for _, notifier := range b.stakedNotifiers { notifier.UpdateLatestStaked(agreedMsgCount, *agreedGlobalState) } } - confirmedMsgCount, confirmedGlobalState, err := b.getLatestState(ctx, true) - if err != nil { - log.Error("staker: error checking latest confirmed", "err", err) - } if confirmedGlobalState != nil { - if agreedGlobalState == nil { - // If we don't have a latest agreed global state, we should fall back to - // using the latest confirmed global state. - for _, notifier := range b.stakedNotifiers { - notifier.UpdateLatestStaked(confirmedMsgCount, *confirmedGlobalState) - } - } for _, notifier := range b.confirmedNotifiers { notifier.UpdateLatestConfirmed(confirmedMsgCount, *confirmedGlobalState) } From f2bfd88fc2508e7dddda97f3f23e57eee9c30906 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Mon, 30 Dec 2024 20:37:51 -0600 Subject: [PATCH 143/187] edit bold submod --- bold | 2 +- go-ethereum | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bold b/bold index 53a6195bd7..3df1191028 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit 53a6195bd7bbd749a81319920429a98b0b9213d4 +Subproject commit 3df119102815a7c17b87251e18df6e09f6e58128 diff --git a/go-ethereum b/go-ethereum index 26b4dff616..0d33cae0dd 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 26b4dff6165650b6963fb1b6f88958c29c059214 +Subproject commit 0d33cae0dd24ce387c589532e9557911780b389c From 7fd9dba8e7cb3b9540065057c88eb51ac3f58e2f Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Mon, 30 Dec 2024 21:38:07 -0600 Subject: [PATCH 144/187] build --- arbos/util/transfer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbos/util/transfer.go b/arbos/util/transfer.go index 0b61868abe..55281fa284 100644 --- a/arbos/util/transfer.go +++ b/arbos/util/transfer.go @@ -67,7 +67,7 @@ func TransferBalance( if arbmath.BigLessThan(balance.ToBig(), amount) { return fmt.Errorf("%w: addr %v have %v want %v", vm.ErrInsufficientBalance, *from, balance, amount) } - if evm.Context.ArbOSVersion < params.ArbosVersion_30 && amount.Sign() == 0 { + if evm.Context.ArbOSVersion < params.ArbosVersion_Stylus && amount.Sign() == 0 { evm.StateDB.CreateZombieIfDeleted(*from) } evm.StateDB.SubBalance(*from, uint256.MustFromBig(amount), tracing.BalanceChangeTransfer) From a46dc68c366a76290e7f480f2d18e3c214577414 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Tue, 31 Dec 2024 10:31:30 -0600 Subject: [PATCH 145/187] geth --- go-ethereum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go-ethereum b/go-ethereum index 0d33cae0dd..26b4dff616 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 0d33cae0dd24ce387c589532e9557911780b389c +Subproject commit 26b4dff6165650b6963fb1b6f88958c29c059214 From ed825913fcf2fb65a8e08e930524aeb88845462f Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Tue, 31 Dec 2024 14:29:09 -0700 Subject: [PATCH 146/187] wasmer: check against correct branch --- .github/workflows/submodule-pin-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/submodule-pin-check.yml b/.github/workflows/submodule-pin-check.yml index 94fa705655..a6a7d9b66c 100644 --- a/.github/workflows/submodule-pin-check.yml +++ b/.github/workflows/submodule-pin-check.yml @@ -30,7 +30,7 @@ jobs: #TODO Rachel to check these are the intended branches. [arbitrator/langs/c]=origin/vm-storage-cache - [arbitrator/tools/wasmer]=origin/adopt-v4.2.8 + [arbitrator/tools/wasmer]=origin/stylus ) divergent=0 for mod in `git submodule --quiet foreach 'echo $name'`; do From 2188166608afed59ab450c995a0327b2598ad4ac Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Thu, 2 Jan 2025 20:16:17 +0530 Subject: [PATCH 147/187] Changes based on PR comments --- arbos/programs/programs.go | 1 + 1 file changed, 1 insertion(+) diff --git a/arbos/programs/programs.go b/arbos/programs/programs.go index e640728ae4..8b045ef822 100644 --- a/arbos/programs/programs.go +++ b/arbos/programs/programs.go @@ -274,6 +274,7 @@ func (p Programs) CallProgram( evmCost := evmMemoryCost(uint64(len(ret))) if startingGas < evmCost { contract.Gas = 0 + metrics.GetOrRegisterCounter(fmt.Sprintf("arb/arbos/stylus/gas_used/%s", runModeToString(runmode)), nil).Inc(int64(startingGas - contract.Gas)) return nil, vm.ErrOutOfGas } maxGasToReturn := startingGas - evmCost From 002ef4ef829c5ce26a5732555439098995e87db1 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Thu, 2 Jan 2025 20:17:08 +0530 Subject: [PATCH 148/187] Changes based on PR comments --- arbos/programs/programs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbos/programs/programs.go b/arbos/programs/programs.go index 8b045ef822..d6a2d27923 100644 --- a/arbos/programs/programs.go +++ b/arbos/programs/programs.go @@ -274,7 +274,7 @@ func (p Programs) CallProgram( evmCost := evmMemoryCost(uint64(len(ret))) if startingGas < evmCost { contract.Gas = 0 - metrics.GetOrRegisterCounter(fmt.Sprintf("arb/arbos/stylus/gas_used/%s", runModeToString(runmode)), nil).Inc(int64(startingGas - contract.Gas)) + metrics.GetOrRegisterCounter(fmt.Sprintf("arb/arbos/stylus/gas_used/%s", runModeToString(runmode)), nil).Inc(int64(startingGas)) return nil, vm.ErrOutOfGas } maxGasToReturn := startingGas - evmCost From 56dea63fdca950a7d5d1955661962015958fb699 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Thu, 2 Jan 2025 20:20:07 +0530 Subject: [PATCH 149/187] Changes based on PR comments --- execution/gethexec/api.go | 9 +++++---- execution/gethexec/node.go | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/execution/gethexec/api.go b/execution/gethexec/api.go index f813dc6a8c..574adb0ed4 100644 --- a/execution/gethexec/api.go +++ b/execution/gethexec/api.go @@ -8,6 +8,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/ethereum/go-ethereum/params" "math/big" "sync" "sync/atomic" @@ -285,16 +286,16 @@ func stateAndHeader(blockchain *core.BlockChain, block uint64) (*arbosState.Arbo type ArbTraceForwarderAPI struct { fallbackClientUrl string fallbackClientTimeout time.Duration - blockchain *core.BlockChain + blockchainConfig *params.ChainConfig initialized atomic.Bool mutex sync.Mutex fallbackClient types.FallbackClient } -func NewArbTraceForwarderAPI(blockchain *core.BlockChain, fallbackClientUrl string, fallbackClientTimeout time.Duration) *ArbTraceForwarderAPI { +func NewArbTraceForwarderAPI(blockchainConfig *params.ChainConfig, fallbackClientUrl string, fallbackClientTimeout time.Duration) *ArbTraceForwarderAPI { return &ArbTraceForwarderAPI{ - blockchain: blockchain, + blockchainConfig: blockchainConfig, fallbackClientUrl: fallbackClientUrl, fallbackClientTimeout: fallbackClientTimeout, } @@ -345,7 +346,7 @@ func (api *ArbTraceForwarderAPI) blockSupportedByClassicNode(blockNumOrHash json return nil } // #nosec G115 - if blockNum < 0 || blockNum > rpc.BlockNumber(api.blockchain.Config().ArbitrumChainParams.GenesisBlockNum) { + if blockNum < 0 || blockNum > rpc.BlockNumber(api.blockchainConfig.ArbitrumChainParams.GenesisBlockNum) { return fmt.Errorf("block number %v is not supported by classic node", blockNum) } return nil diff --git a/execution/gethexec/node.go b/execution/gethexec/node.go index b25ca5763c..16e4948723 100644 --- a/execution/gethexec/node.go +++ b/execution/gethexec/node.go @@ -284,7 +284,7 @@ func CreateExecutionNode( Namespace: "arbtrace", Version: "1.0", Service: NewArbTraceForwarderAPI( - l2BlockChain, + l2BlockChain.Config(), config.RPC.ClassicRedirect, config.RPC.ClassicRedirectTimeout, ), From 693c4066100689aaefee081b3f9a1e0c4175bdb8 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Thu, 2 Jan 2025 20:32:20 +0530 Subject: [PATCH 150/187] Changes based on PR comments --- arbnode/message_pruner.go | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/arbnode/message_pruner.go b/arbnode/message_pruner.go index 5cdd1128d0..3805bd8637 100644 --- a/arbnode/message_pruner.go +++ b/arbnode/message_pruner.go @@ -201,19 +201,21 @@ func fetchLastPrunedKey(db ethdb.Database, lastPrunedKey []byte) uint64 { hasKey, err := db.Has(lastPrunedKey) if err != nil { log.Warn("error checking for last pruned key: %w", err) - } else if hasKey { - lastPrunedValueByte, err := db.Get(lastPrunedKey) - if err != nil { - log.Warn("error fetching last pruned key: %w", err) - } else { - var lastPrunedValue uint64 - err = rlp.DecodeBytes(lastPrunedValueByte, &lastPrunedValue) - if err != nil { - log.Warn("error decoding last pruned value: %w", err) - } else { - return lastPrunedValue - } - } + return 0 + } + if !hasKey { + return 0 + } + lastPrunedValueByte, err := db.Get(lastPrunedKey) + if err != nil { + log.Warn("error fetching last pruned key: %w", err) + return 0 + } + var lastPrunedValue uint64 + err = rlp.DecodeBytes(lastPrunedValueByte, &lastPrunedValue) + if err != nil { + log.Warn("error decoding last pruned value: %w", err) + return 0 } - return 0 + return lastPrunedValue } From 205e12ed3b3191620e189e1b13b482d009724454 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Thu, 2 Jan 2025 20:33:18 +0530 Subject: [PATCH 151/187] lint --- arbos/programs/programs.go | 1 + 1 file changed, 1 insertion(+) diff --git a/arbos/programs/programs.go b/arbos/programs/programs.go index d6a2d27923..c7bb693d26 100644 --- a/arbos/programs/programs.go +++ b/arbos/programs/programs.go @@ -274,6 +274,7 @@ func (p Programs) CallProgram( evmCost := evmMemoryCost(uint64(len(ret))) if startingGas < evmCost { contract.Gas = 0 + // #nosec G115 metrics.GetOrRegisterCounter(fmt.Sprintf("arb/arbos/stylus/gas_used/%s", runModeToString(runmode)), nil).Inc(int64(startingGas)) return nil, vm.ErrOutOfGas } From 7c1b94f52513a958ade1a6cde2343519dd0e9aff Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Thu, 2 Jan 2025 20:34:40 +0530 Subject: [PATCH 152/187] lint --- execution/gethexec/api.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/execution/gethexec/api.go b/execution/gethexec/api.go index 574adb0ed4..699aa081b5 100644 --- a/execution/gethexec/api.go +++ b/execution/gethexec/api.go @@ -8,7 +8,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/ethereum/go-ethereum/params" "math/big" "sync" "sync/atomic" @@ -18,6 +17,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" "github.com/offchainlabs/nitro/arbos/arbosState" From 669c5ef052d76ac264c0ba3fed0eeb4717db1a9a Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Thu, 2 Jan 2025 21:01:43 +0530 Subject: [PATCH 153/187] Changes based on PR comments --- arbnode/message_pruner.go | 46 ++++++++++++++++++++++----------------- arbnode/schema.go | 14 +++++------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/arbnode/message_pruner.go b/arbnode/message_pruner.go index 3805bd8637..b18796a4c5 100644 --- a/arbnode/message_pruner.go +++ b/arbnode/message_pruner.go @@ -24,15 +24,13 @@ import ( type MessagePruner struct { stopwaiter.StopWaiter - transactionStreamer *TransactionStreamer - inboxTracker *InboxTracker - config MessagePrunerConfigFetcher - pruningLock sync.Mutex - lastPruneDone time.Time - cachedPrunedMessages uint64 - cachedPrunedBlockHashesInputFeed uint64 - cachedPrunedMessageResult uint64 - cachedPrunedDelayedMessages uint64 + transactionStreamer *TransactionStreamer + inboxTracker *InboxTracker + config MessagePrunerConfigFetcher + pruningLock sync.Mutex + lastPruneDone time.Time + cachedPrunedMessages uint64 + cachedPrunedDelayedMessages uint64 } type MessagePrunerConfig struct { @@ -122,7 +120,14 @@ func (m *MessagePruner) prune(ctx context.Context, count arbutil.MessageIndex, g } func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCount arbutil.MessageIndex, delayedMessageCount uint64) error { - prunedKeysRange, err := deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messageResultPrefix, lastPrunedMessageResultKey, &m.cachedPrunedMessageResult, uint64(messageCount)) + if m.cachedPrunedMessages == 0 { + m.cachedPrunedMessages = fetchLastPrunedKey(m.transactionStreamer.db, lastPrunedMessageKey) + } + if m.cachedPrunedDelayedMessages == 0 { + m.cachedPrunedDelayedMessages = fetchLastPrunedKey(m.inboxTracker.db, lastPrunedDelayedMessageKey) + } + lastPrunedMessage := m.cachedPrunedMessages + prunedKeysRange, err := deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messageResultPrefix, &lastPrunedMessage, uint64(messageCount)) if err != nil { return fmt.Errorf("error deleting message results: %w", err) } @@ -130,7 +135,8 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun log.Info("Pruned message results:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } - prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, blockHashInputFeedPrefix, lastPrunedBlockHashInputFeedKey, &m.cachedPrunedBlockHashesInputFeed, uint64(messageCount)) + lastPrunedMessage = m.cachedPrunedMessages + prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, blockHashInputFeedPrefix, &lastPrunedMessage, uint64(messageCount)) if err != nil { return fmt.Errorf("error deleting expected block hashes: %w", err) } @@ -138,32 +144,34 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun log.Info("Pruned expected block hashes:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } - prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messagePrefix, lastPrunedMessageKey, &m.cachedPrunedMessages, uint64(messageCount)) + lastPrunedMessage = m.cachedPrunedMessages + prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messagePrefix, &lastPrunedMessage, uint64(messageCount)) if err != nil { return fmt.Errorf("error deleting last batch messages: %w", err) } if len(prunedKeysRange) > 0 { log.Info("Pruned last batch messages:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } + insertLastPrunedKey(m.transactionStreamer.db, lastPrunedMessageKey, lastPrunedMessage) + m.cachedPrunedMessages = lastPrunedMessage - prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.inboxTracker.db, rlpDelayedMessagePrefix, lastPrunedRlpDelayedMessageKey, &m.cachedPrunedDelayedMessages, delayedMessageCount) + lastPrunedDelayedMessage := m.cachedPrunedDelayedMessages + prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.inboxTracker.db, rlpDelayedMessagePrefix, &lastPrunedDelayedMessage, delayedMessageCount) if err != nil { return fmt.Errorf("error deleting last batch delayed messages: %w", err) } if len(prunedKeysRange) > 0 { log.Info("Pruned last batch delayed messages:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } + insertLastPrunedKey(m.inboxTracker.db, lastPrunedDelayedMessageKey, lastPrunedMessage) + m.cachedPrunedDelayedMessages = lastPrunedDelayedMessage return nil } // deleteFromLastPrunedUptoEndKey is similar to deleteFromRange but automatically populates the start key // cachedStartMinKey must not be nil. It's set to the new start key at the end of this function if successful. -// Checks if the last pruned key is set in the database and uses it as the start key if it is. -func deleteFromLastPrunedUptoEndKey(ctx context.Context, db ethdb.Database, prefix []byte, lastPrunedKey []byte, cachedStartMinKey *uint64, endMinKey uint64) ([]uint64, error) { +func deleteFromLastPrunedUptoEndKey(ctx context.Context, db ethdb.Database, prefix []byte, cachedStartMinKey *uint64, endMinKey uint64) ([]uint64, error) { startMinKey := *cachedStartMinKey - if startMinKey == 0 { - startMinKey = fetchLastPrunedKey(db, lastPrunedKey) - } if startMinKey == 0 { startIter := db.NewIterator(prefix, uint64ToKey(1)) if !startIter.Next() { @@ -174,13 +182,11 @@ func deleteFromLastPrunedUptoEndKey(ctx context.Context, db ethdb.Database, pref } if endMinKey <= startMinKey { *cachedStartMinKey = startMinKey - insertLastPrunedKey(db, lastPrunedKey, startMinKey) return nil, nil } keys, err := deleteFromRange(ctx, db, prefix, startMinKey, endMinKey-1) if err == nil { *cachedStartMinKey = endMinKey - 1 - insertLastPrunedKey(db, lastPrunedKey, endMinKey-1) } return keys, err } diff --git a/arbnode/schema.go b/arbnode/schema.go index e06d6a75c7..88a31ce90a 100644 --- a/arbnode/schema.go +++ b/arbnode/schema.go @@ -13,14 +13,12 @@ var ( sequencerBatchMetaPrefix []byte = []byte("s") // maps a batch sequence number to BatchMetadata delayedSequencedPrefix []byte = []byte("a") // maps a delayed message count to the first sequencer batch sequence number with this delayed count - messageCountKey []byte = []byte("_messageCount") // contains the current message count - lastPrunedMessageResultKey []byte = []byte("_lastPrunedMessageResultKey") // contains the last pruned message result key - lastPrunedBlockHashInputFeedKey []byte = []byte("_lastPrunedBlockHashInputFeedPrefix") // contains the last pruned block hash input feed key - lastPrunedMessageKey []byte = []byte("_lastPrunedMessageKey") // contains the last pruned message key - lastPrunedRlpDelayedMessageKey []byte = []byte("_lastPrunedRlpDelayedMessageKey") // contains the last pruned RLP delayed message key - delayedMessageCountKey []byte = []byte("_delayedMessageCount") // contains the current delayed message count - sequencerBatchCountKey []byte = []byte("_sequencerBatchCount") // contains the current sequencer message count - dbSchemaVersion []byte = []byte("_schemaVersion") // contains a uint64 representing the database schema version + messageCountKey []byte = []byte("_messageCount") // contains the current message count + lastPrunedMessageKey []byte = []byte("_lastPrunedMessageKey") // contains the last pruned message key + lastPrunedDelayedMessageKey []byte = []byte("_lastPrunedDelayedMessageKey") // contains the last pruned RLP delayed message key + delayedMessageCountKey []byte = []byte("_delayedMessageCount") // contains the current delayed message count + sequencerBatchCountKey []byte = []byte("_sequencerBatchCount") // contains the current sequencer message count + dbSchemaVersion []byte = []byte("_schemaVersion") // contains a uint64 representing the database schema version ) const currentDbSchemaVersion uint64 = 1 From 2aa0b8001cc707cf3097517647b3354d0ea189ef Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Thu, 2 Jan 2025 21:48:54 +0530 Subject: [PATCH 154/187] Changes based on PR comments --- arbnode/node.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/arbnode/node.go b/arbnode/node.go index 37632654e7..d96c4001c4 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -601,6 +601,13 @@ func createNodeImpl( firstMessageBlock := new(big.Int).SetUint64(deployInfo.DeployedAt) if config.SnapSyncTest.Enabled { batchCount := config.SnapSyncTest.BatchCount + delayedMessageNumber, err := exec.NextDelayedMessageNumber() + if err != nil { + return nil, err + } + if batchCount > delayedMessageNumber { + batchCount = delayedMessageNumber + } // Find the first block containing the batch count. // Subtract 1 to get the block before the needed batch count, // this is done to fetch previous batch metadata needed for snap sync. @@ -796,8 +803,9 @@ func FindBlockContainingBatchCount(ctx context.Context, bridgeAddress common.Add } high := parentChainAssertionBlock low := uint64(0) - if high > 100 { - low = high - 100 + reduceBy := uint64(100) + if high > reduceBy { + low = high - reduceBy } // Reduce high and low by 100 until lowNode.InboxMaxCount < batchCount // This will give us a range (low to high) of blocks that contain the batch count. @@ -808,8 +816,9 @@ func FindBlockContainingBatchCount(ctx context.Context, bridgeAddress common.Add } if lowCount.Uint64() > batchCount { high = low - if low > 100 { - low = low - 100 + reduceBy = reduceBy * 2 + if low > reduceBy { + low = low - reduceBy } else { low = 0 } From 89cf1f87db443ccea57d9b5fbd32f7207d363750 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Thu, 2 Jan 2025 14:11:21 -0600 Subject: [PATCH 155/187] use proper bold commit --- bold | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bold b/bold index 3df1191028..eae8d51fcf 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit 3df119102815a7c17b87251e18df6e09f6e58128 +Subproject commit eae8d51fcf02002d3216a0b15f23b66f819f792d From d3de311d8ac5153ee4299b0053d7a93d84e735b3 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Thu, 2 Jan 2025 13:51:48 -0700 Subject: [PATCH 156/187] remove most occurences of log.Crit --- arbos/arbosState/arbosstate.go | 7 ++-- arbos/arbosState/initialize.go | 4 +-- arbos/programs/api.go | 10 +++--- arbos/programs/native_api.go | 5 ++- arbos/programs/programs.go | 2 +- arbstate/inbox.go | 6 ++-- precompiles/context.go | 7 ++-- precompiles/precompile.go | 59 ++++++++++++++++------------------ precompiles/precompile_test.go | 9 ------ system_tests/staker_test.go | 2 +- 10 files changed, 46 insertions(+), 65 deletions(-) diff --git a/arbos/arbosState/arbosstate.go b/arbos/arbosState/arbosstate.go index 5ee070f942..de1a970b87 100644 --- a/arbos/arbosState/arbosstate.go +++ b/arbos/arbosState/arbosstate.go @@ -13,7 +13,6 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/triedb" "github.com/ethereum/go-ethereum/triedb/hashdb" @@ -123,13 +122,13 @@ func NewArbosMemoryBackedArbOSState() (*ArbosState, *state.StateDB) { db := state.NewDatabaseWithConfig(raw, trieConfig) statedb, err := state.New(common.Hash{}, db, nil) if err != nil { - log.Crit("failed to init empty statedb", "error", err) + panic("failed to init empty statedb: " + err.Error()) } burner := burn.NewSystemBurner(nil, false) chainConfig := chaininfo.ArbitrumDevTestChainConfig() newState, err := InitializeArbosState(statedb, burner, chainConfig, arbostypes.TestInitMessage) if err != nil { - log.Crit("failed to open the ArbOS state", "error", err) + panic("failed to open the ArbOS state: " + err.Error()) } return newState, statedb } @@ -139,7 +138,7 @@ func ArbOSVersion(stateDB vm.StateDB) uint64 { backingStorage := storage.NewGeth(stateDB, burn.NewSystemBurner(nil, false)) arbosVersion, err := backingStorage.GetUint64ByUint64(uint64(versionOffset)) if err != nil { - log.Crit("failed to get the ArbOS version", "error", err) + panic("failed to get the ArbOS version: " + err.Error()) } return arbosVersion } diff --git a/arbos/arbosState/initialize.go b/arbos/arbosState/initialize.go index 8fd417c2b2..840204382c 100644 --- a/arbos/arbosState/initialize.go +++ b/arbos/arbosState/initialize.go @@ -66,7 +66,7 @@ func InitializeArbosInDatabase(db ethdb.Database, cacheConfig *core.CacheConfig, }() statedb, err := state.New(common.Hash{}, stateDatabase, nil) if err != nil { - log.Crit("failed to init empty statedb", "error", err) + panic("failed to init empty statedb :" + err.Error()) } noStateTrieChangesToCommitError := regexp.MustCompile("^triedb layer .+ is disk layer$") @@ -96,7 +96,7 @@ func InitializeArbosInDatabase(db ethdb.Database, cacheConfig *core.CacheConfig, burner := burn.NewSystemBurner(nil, false) arbosState, err := InitializeArbosState(statedb, burner, chainConfig, initMessage) if err != nil { - log.Crit("failed to open the ArbOS state", "error", err) + panic("failed to open the ArbOS state :" + err.Error()) } chainOwner, err := initData.GetChainOwner() diff --git a/arbos/programs/api.go b/arbos/programs/api.go index d8f12ffbd3..cd2143f5d0 100644 --- a/arbos/programs/api.go +++ b/arbos/programs/api.go @@ -9,7 +9,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/util" @@ -151,7 +150,7 @@ func newApiClosures( case vm.STATICCALL: ret, returnGas, err = evm.StaticCall(scope.Contract, contract, input, gas) default: - log.Crit("unsupported call type", "opcode", opcode) + panic("unsupported call type: " + opcode.String()) } interpreter.SetReturnData(ret) @@ -266,7 +265,7 @@ func newApiClosures( original := input crash := func(reason string) { - log.Crit("bad API call", "reason", reason, "request", req, "len", len(original), "remaining", len(input)) + panic("bad API call reason: " + reason + " request: " + string(req) + " len: " + string(len(original)) + " remaining: " + string(len(input))) } takeInput := func(needed int, reason string) []byte { if len(input) < needed { @@ -338,7 +337,7 @@ func newApiClosures( case StaticCall: opcode = vm.STATICCALL default: - log.Crit("unsupported call type", "opcode", opcode) + panic("unsupported call type opcode: " + opcode.String()) } contract := takeAddress() value := takeU256() @@ -414,8 +413,7 @@ func newApiClosures( captureHostio(name, args, outs, startInk, endInk) return []byte{}, nil, 0 default: - log.Crit("unsupported call type", "req", req) - return []byte{}, nil, 0 + panic("unsupported call type: " + string(req)) } } } diff --git a/arbos/programs/native_api.go b/arbos/programs/native_api.go index ab15800ef9..bf9cda658d 100644 --- a/arbos/programs/native_api.go +++ b/arbos/programs/native_api.go @@ -29,7 +29,6 @@ import ( "sync/atomic" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/log" "github.com/offchainlabs/nitro/arbos/util" "github.com/offchainlabs/nitro/arbutil" @@ -69,11 +68,11 @@ func newApi( func getApi(id usize) NativeApi { any, ok := apiObjects.Load(uintptr(id)) if !ok { - log.Crit("failed to load stylus Go API", "id", id) + panic("failed to load stylus Go API id: " + string(id)) } api, ok := any.(NativeApi) if !ok { - log.Crit("wrong type for stylus Go API", "id", id) + panic("wrong type for stylus Go API id: " + string(id)) } return api } diff --git a/arbos/programs/programs.go b/arbos/programs/programs.go index 06ba6ead8c..6b2a0c318b 100644 --- a/arbos/programs/programs.go +++ b/arbos/programs/programs.go @@ -219,7 +219,7 @@ func (p Programs) CallProgram( localAsm, err := getLocalAsm(statedb, moduleHash, contract.Address(), contract.Code, contract.CodeHash, params.PageLimit, evm.Context.Time, debugMode, program) if err != nil { - log.Crit("failed to get local wasm for activated program", "program", contract.Address()) + panic("failed to get local wasm for activated program: " + contract.Address().Hex()) return nil, err } diff --git a/arbstate/inbox.go b/arbstate/inbox.go index b58a7420b7..5539a75ce1 100644 --- a/arbstate/inbox.go +++ b/arbstate/inbox.go @@ -85,11 +85,11 @@ func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash // Matches the way keyset validation was done inside DAS readers i.e logging the error // But other daproviders might just want to return the error if errors.Is(err, daprovider.ErrSeqMsgValidation) && daprovider.IsDASMessageHeaderByte(payload[0]) { - logLevel := log.Error if keysetValidationMode == daprovider.KeysetPanicIfInvalid { - logLevel = log.Crit + panic(err.Error()) + } else { + log.Error(err.Error()) } - logLevel(err.Error()) } else { return nil, err } diff --git a/precompiles/context.go b/precompiles/context.go index 670ffa7443..86e56ffbff 100644 --- a/precompiles/context.go +++ b/precompiles/context.go @@ -9,7 +9,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/log" "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbosState" @@ -58,7 +57,7 @@ func (c *Context) GasLeft() *uint64 { } func (c *Context) Restrict(err error) { - log.Crit("A metered burner was used for access-controlled work", "error", err) + panic("A metered burner was used for access-controlled work :" + err.Error()) } func (c *Context) HandleError(err error) error { @@ -88,13 +87,13 @@ func testContext(caller addr, evm mech) *Context { } state, err := arbosState.OpenArbosState(evm.StateDB, burn.NewSystemBurner(tracingInfo, false)) if err != nil { - log.Crit("unable to open arbos state", "error", err) + panic("unable to open arbos state :" + err.Error()) } ctx.State = state var ok bool ctx.txProcessor, ok = evm.ProcessingHook.(*arbos.TxProcessor) if !ok { - log.Crit("must have tx processor") + panic("must have tx processor") } return ctx } diff --git a/precompiles/precompile.go b/precompiles/precompile.go index 54d18a0cc9..f34c418313 100644 --- a/precompiles/precompile.go +++ b/precompiles/precompile.go @@ -120,7 +120,7 @@ func (e *SolError) Error() string { func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Precompile) { source, err := abi.JSON(strings.NewReader(metadata.ABI)) if err != nil { - log.Crit("Bad ABI") + panic("Bad ABI") } implementerType := reflect.TypeOf(implementer) @@ -128,12 +128,12 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr _, ok := implementerType.Elem().FieldByName("Address") if !ok { - log.Crit("Implementer for precompile ", contract, " is missing an Address field") + panic("Implementer for precompile " + contract + " is missing an Address field") } address, ok := reflect.ValueOf(implementer).Elem().FieldByName("Address").Interface().(addr) if !ok { - log.Crit("Implementer for precompile ", contract, "'s Address field has the wrong type") + panic("Implementer for precompile " + contract + "'s Address field has the wrong type") } gethAbiFuncTypeEquality := func(actual, geth reflect.Type) bool { @@ -167,7 +167,7 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr name = capitalize + name[1:] if len(method.ID) != 4 { - log.Crit("Method ID isn't 4 bytes") + panic("Method ID isn't 4 bytes") } id := *(*[4]byte)(method.ID) @@ -175,7 +175,7 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr handler, ok := implementerType.MethodByName(name) if !ok { - log.Crit("Precompile " + contract + " must implement " + name) + panic("Precompile " + contract + " must implement " + name) } var needs = []reflect.Type{ @@ -199,7 +199,7 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr needs = append(needs, reflect.TypeOf(&big.Int{})) purity = payable default: - log.Crit("Unknown state mutability ", method.StateMutability) + panic("Unknown state mutability " + method.StateMutability) } for _, arg := range method.Inputs { @@ -215,10 +215,9 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr expectedHandlerType := reflect.FuncOf(needs, outputs, false) if !gethAbiFuncTypeEquality(handler.Type, expectedHandlerType) { - log.Crit( - "Precompile "+contract+"'s "+name+"'s implementer has the wrong type\n", - "\texpected:\t", expectedHandlerType, "\n\tbut have:\t", handler.Type, - ) + panic( + "Precompile " + contract + "'s " + name + "'s implementer has the wrong type\n" + + "\texpected:\t" + expectedHandlerType.String() + "\n\tbut have:\t" + handler.Type.String()) } method := PrecompileMethod{ @@ -237,7 +236,7 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr method := implementerType.Method(i) name := method.Name if method.IsExported() && methodsByName[name] == nil { - log.Crit(contract + " is missing a solidity interface for " + name) + panic(contract + " is missing a solidity interface for " + name) } } @@ -269,11 +268,10 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr if arg.Indexed { _, ok := supportedIndices[arg.Type.String()] if !ok { - log.Crit( - "Please change the solidity for precompile ", contract, - "'s event ", name, ":\n\tEvent indices of type ", - arg.Type.String(), " are not supported", - ) + panic( + "Please change the solidity for precompile " + contract + + "'s event " + name + ":\n\tEvent indices of type " + + arg.Type.String() + " are not supported") } } } @@ -288,23 +286,21 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr field, ok := implementerType.Elem().FieldByName(name) if !ok { - log.Crit(missing, "event ", name, " of type\n\t", expectedFieldType) + panic(missing + "event " + name + " of type\n\t" + expectedFieldType.String()) } costField, ok := implementerType.Elem().FieldByName(name + "GasCost") if !ok { - log.Crit(missing, "event ", name, "'s GasCost of type\n\t", expectedCostType) + panic(missing + "event " + name + "'s GasCost of type\n\t" + expectedCostType.String()) } if !gethAbiFuncTypeEquality(field.Type, expectedFieldType) { - log.Crit( - context, "'s field for event ", name, " has the wrong type\n", - "\texpected:\t", expectedFieldType, "\n\tbut have:\t", field.Type, - ) + panic( + context + "'s field for event " + name + " has the wrong type\n" + + "\texpected:\t" + expectedFieldType.String() + "\n\tbut have:\t" + field.Type.String()) } if !gethAbiFuncTypeEquality(costField.Type, expectedCostType) { - log.Crit( - context, "'s field for event ", name, "GasCost has the wrong type\n", - "\texpected:\t", expectedCostType, "\n\tbut have:\t", costField.Type, - ) + panic( + context + "'s field for event " + name + "GasCost has the wrong type\n" + + "\texpected:\t" + expectedCostType.String() + "\n\tbut have:\t" + costField.Type.String()) } structFields := reflect.ValueOf(implementer).Elem() @@ -464,13 +460,12 @@ func MakePrecompile(metadata *bind.MetaData, implementer interface{}) (addr, *Pr field, ok := implementerType.Elem().FieldByName(name + "Error") if !ok { - log.Crit(missing, "custom error ", name, "Error of type\n\t", expectedFieldType) + panic(missing + "custom error " + name + "Error of type\n\t" + expectedFieldType.String()) } if field.Type != expectedFieldType { - log.Crit( - context, "'s field for error ", name, "Error has the wrong type\n", - "\texpected:\t", expectedFieldType, "\n\tbut have:\t", field.Type, - ) + panic( + context + "'s field for error " + name + "Error has the wrong type\n" + + "\texpected:\t" + expectedFieldType.String() + "\n\tbut have:\t" + field.Type.String()) } structFields := reflect.ValueOf(implementer).Elem() @@ -756,7 +751,7 @@ func (p *Precompile) Call( reflectArgs = append(reflectArgs, reflect.ValueOf(evm)) reflectArgs = append(reflectArgs, reflect.ValueOf(value)) default: - log.Crit("Unknown state mutability ", method.purity) + panic("Unknown state mutability " + string(method.purity)) } args, err := method.template.Inputs.Unpack(input[4:]) diff --git a/precompiles/precompile_test.go b/precompiles/precompile_test.go index 75fed711eb..183ec1f083 100644 --- a/precompiles/precompile_test.go +++ b/precompiles/precompile_test.go @@ -5,15 +5,12 @@ package precompiles import ( "fmt" - "io" "math/big" - "os" "testing" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/offchainlabs/nitro/arbos/storage" @@ -183,12 +180,6 @@ func TestEventCosts(t *testing.T) { } func TestPrecompilesPerArbosVersion(t *testing.T) { - // Set up a logger in case log.Crit is called by Precompiles() - glogger := log.NewGlogHandler( - log.NewTerminalHandler(io.Writer(os.Stderr), false)) - glogger.Verbosity(log.LevelWarn) - log.SetDefault(log.NewLogger(glogger)) - expectedNewMethodsPerArbosVersion := map[uint64]int{ 0: 89, params.ArbosVersion_5: 3, diff --git a/system_tests/staker_test.go b/system_tests/staker_test.go index 69645d8878..55c13d664d 100644 --- a/system_tests/staker_test.go +++ b/system_tests/staker_test.go @@ -504,7 +504,7 @@ func TestGetValidatorWalletContractWithDataposterOnlyUsedToCreateValidatorWallet parentChainID, ) if err != nil { - log.Crit("error creating data poster to create validator wallet contract", "err", err) + Fatal(t, "error creating data poster to create validator wallet contract", "err", err) } getExtraGas := func() uint64 { return builder.nodeConfig.Staker.ExtraGas } From 468d6892432b23af5a77db119ab510f1541d52f4 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Thu, 2 Jan 2025 18:58:56 -0700 Subject: [PATCH 157/187] fix int to string conversions --- arbos/programs/api.go | 6 ++++-- arbos/programs/native_api.go | 5 +++-- precompiles/precompile.go | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/arbos/programs/api.go b/arbos/programs/api.go index cd2143f5d0..a622f55397 100644 --- a/arbos/programs/api.go +++ b/arbos/programs/api.go @@ -4,6 +4,8 @@ package programs import ( + "strconv" + "github.com/holiman/uint256" "github.com/ethereum/go-ethereum/common" @@ -265,7 +267,7 @@ func newApiClosures( original := input crash := func(reason string) { - panic("bad API call reason: " + reason + " request: " + string(req) + " len: " + string(len(original)) + " remaining: " + string(len(input))) + panic("bad API call reason: " + reason + " request: " + strconv.Itoa(int(req)) + " len: " + strconv.Itoa(len(original)) + " remaining: " + strconv.Itoa(len(input))) } takeInput := func(needed int, reason string) []byte { if len(input) < needed { @@ -413,7 +415,7 @@ func newApiClosures( captureHostio(name, args, outs, startInk, endInk) return []byte{}, nil, 0 default: - panic("unsupported call type: " + string(req)) + panic("unsupported call type: " + strconv.Itoa(int(req))) } } } diff --git a/arbos/programs/native_api.go b/arbos/programs/native_api.go index bf9cda658d..ad8cc0477b 100644 --- a/arbos/programs/native_api.go +++ b/arbos/programs/native_api.go @@ -25,6 +25,7 @@ import "C" import ( "runtime" + "strconv" "sync" "sync/atomic" @@ -68,11 +69,11 @@ func newApi( func getApi(id usize) NativeApi { any, ok := apiObjects.Load(uintptr(id)) if !ok { - panic("failed to load stylus Go API id: " + string(id)) + panic("failed to load stylus Go API id: " + strconv.Itoa(int(id))) } api, ok := any.(NativeApi) if !ok { - panic("wrong type for stylus Go API id: " + string(id)) + panic("wrong type for stylus Go API id: " + strconv.Itoa(int(id))) } return api } diff --git a/precompiles/precompile.go b/precompiles/precompile.go index f34c418313..7ca9d409c6 100644 --- a/precompiles/precompile.go +++ b/precompiles/precompile.go @@ -751,7 +751,7 @@ func (p *Precompile) Call( reflectArgs = append(reflectArgs, reflect.ValueOf(evm)) reflectArgs = append(reflectArgs, reflect.ValueOf(value)) default: - panic("Unknown state mutability " + string(method.purity)) + panic("Unknown state mutability " + strconv.Itoa(int(method.purity))) } args, err := method.template.Inputs.Unpack(input[4:]) From 89516a0075cb11a17b48b5ab2d9829062ffcb32a Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Thu, 2 Jan 2025 19:32:49 -0700 Subject: [PATCH 158/187] remove dead code --- arbos/programs/programs.go | 1 - 1 file changed, 1 deletion(-) diff --git a/arbos/programs/programs.go b/arbos/programs/programs.go index 6b2a0c318b..4c81de1308 100644 --- a/arbos/programs/programs.go +++ b/arbos/programs/programs.go @@ -220,7 +220,6 @@ func (p Programs) CallProgram( localAsm, err := getLocalAsm(statedb, moduleHash, contract.Address(), contract.Code, contract.CodeHash, params.PageLimit, evm.Context.Time, debugMode, program) if err != nil { panic("failed to get local wasm for activated program: " + contract.Address().Hex()) - return nil, err } evmData := &EvmData{ From 7200ff5f706693e026e3c70dcee73f640cb718b5 Mon Sep 17 00:00:00 2001 From: Aman Sanghi Date: Fri, 3 Jan 2025 18:05:45 +0530 Subject: [PATCH 159/187] Changes based on PR comments --- arbnode/message_pruner.go | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/arbnode/message_pruner.go b/arbnode/message_pruner.go index b18796a4c5..dedc579a01 100644 --- a/arbnode/message_pruner.go +++ b/arbnode/message_pruner.go @@ -126,8 +126,7 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun if m.cachedPrunedDelayedMessages == 0 { m.cachedPrunedDelayedMessages = fetchLastPrunedKey(m.inboxTracker.db, lastPrunedDelayedMessageKey) } - lastPrunedMessage := m.cachedPrunedMessages - prunedKeysRange, err := deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messageResultPrefix, &lastPrunedMessage, uint64(messageCount)) + prunedKeysRange, _, err := deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messageResultPrefix, m.cachedPrunedMessages, uint64(messageCount)) if err != nil { return fmt.Errorf("error deleting message results: %w", err) } @@ -135,8 +134,7 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun log.Info("Pruned message results:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } - lastPrunedMessage = m.cachedPrunedMessages - prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, blockHashInputFeedPrefix, &lastPrunedMessage, uint64(messageCount)) + prunedKeysRange, _, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, blockHashInputFeedPrefix, m.cachedPrunedMessages, uint64(messageCount)) if err != nil { return fmt.Errorf("error deleting expected block hashes: %w", err) } @@ -144,8 +142,7 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun log.Info("Pruned expected block hashes:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } - lastPrunedMessage = m.cachedPrunedMessages - prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messagePrefix, &lastPrunedMessage, uint64(messageCount)) + prunedKeysRange, lastPrunedMessage, err := deleteFromLastPrunedUptoEndKey(ctx, m.transactionStreamer.db, messagePrefix, m.cachedPrunedMessages, uint64(messageCount)) if err != nil { return fmt.Errorf("error deleting last batch messages: %w", err) } @@ -155,40 +152,34 @@ func (m *MessagePruner) deleteOldMessagesFromDB(ctx context.Context, messageCoun insertLastPrunedKey(m.transactionStreamer.db, lastPrunedMessageKey, lastPrunedMessage) m.cachedPrunedMessages = lastPrunedMessage - lastPrunedDelayedMessage := m.cachedPrunedDelayedMessages - prunedKeysRange, err = deleteFromLastPrunedUptoEndKey(ctx, m.inboxTracker.db, rlpDelayedMessagePrefix, &lastPrunedDelayedMessage, delayedMessageCount) + prunedKeysRange, lastPrunedDelayedMessage, err := deleteFromLastPrunedUptoEndKey(ctx, m.inboxTracker.db, rlpDelayedMessagePrefix, m.cachedPrunedDelayedMessages, delayedMessageCount) if err != nil { return fmt.Errorf("error deleting last batch delayed messages: %w", err) } if len(prunedKeysRange) > 0 { log.Info("Pruned last batch delayed messages:", "first pruned key", prunedKeysRange[0], "last pruned key", prunedKeysRange[len(prunedKeysRange)-1]) } - insertLastPrunedKey(m.inboxTracker.db, lastPrunedDelayedMessageKey, lastPrunedMessage) + insertLastPrunedKey(m.inboxTracker.db, lastPrunedDelayedMessageKey, lastPrunedDelayedMessage) m.cachedPrunedDelayedMessages = lastPrunedDelayedMessage return nil } -// deleteFromLastPrunedUptoEndKey is similar to deleteFromRange but automatically populates the start key -// cachedStartMinKey must not be nil. It's set to the new start key at the end of this function if successful. -func deleteFromLastPrunedUptoEndKey(ctx context.Context, db ethdb.Database, prefix []byte, cachedStartMinKey *uint64, endMinKey uint64) ([]uint64, error) { - startMinKey := *cachedStartMinKey +// deleteFromLastPrunedUptoEndKey is similar to deleteFromRange but automatically populates the start key if it's not set. +// It's returns the new start key (i.e. last pruned key) at the end of this function if successful. +func deleteFromLastPrunedUptoEndKey(ctx context.Context, db ethdb.Database, prefix []byte, startMinKey uint64, endMinKey uint64) ([]uint64, uint64, error) { if startMinKey == 0 { startIter := db.NewIterator(prefix, uint64ToKey(1)) if !startIter.Next() { - return nil, nil + return nil, 0, nil } startMinKey = binary.BigEndian.Uint64(bytes.TrimPrefix(startIter.Key(), prefix)) startIter.Release() } if endMinKey <= startMinKey { - *cachedStartMinKey = startMinKey - return nil, nil + return nil, startMinKey, nil } keys, err := deleteFromRange(ctx, db, prefix, startMinKey, endMinKey-1) - if err == nil { - *cachedStartMinKey = endMinKey - 1 - } - return keys, err + return keys, endMinKey - 1, err } func insertLastPrunedKey(db ethdb.Database, lastPrunedKey []byte, lastPrunedValue uint64) { From 830a9245293f296cf9bcd16286abeb4c31dd5279 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Fri, 3 Jan 2025 10:00:08 -0600 Subject: [PATCH 160/187] update bold pin to latest commit on main --- bold | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bold b/bold index 81f1b421b2..cb6922fb4f 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit 81f1b421b2dbbf96c7a2b427a9458667b07b0b27 +Subproject commit cb6922fb4f50d1cdb12af467a18ecee6f1c688a4 From f9fa7827f2e8683f6aa43f93d63a96dc3b1f10fc Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Fri, 3 Jan 2025 20:22:58 -0600 Subject: [PATCH 161/187] update bold pin --- bold | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bold b/bold index eae8d51fcf..70c9755ae1 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit eae8d51fcf02002d3216a0b15f23b66f819f792d +Subproject commit 70c9755ae1b731f1b2fdedb986461754e4da2e8f From 1fb803dafe79e59be09e31f75371c2041cc80411 Mon Sep 17 00:00:00 2001 From: Joshua Colvin Date: Tue, 7 Jan 2025 09:36:34 -0700 Subject: [PATCH 162/187] Update geth in for flatcalltracer fix Pulls in the following go-ethereum PRs https://github.com/OffchainLabs/go-ethereum/pull/372 https://github.com/OffchainLabs/go-ethereum/pull/385 https://github.com/OffchainLabs/go-ethereum/pull/393 --- go-ethereum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go-ethereum b/go-ethereum index 26b4dff616..dd32b782ed 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 26b4dff6165650b6963fb1b6f88958c29c059214 +Subproject commit dd32b782ed255c1ac20ed5beee11dd6a821f9be2 From 55c41f58fab13878c75f3a1ffad8245926360305 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Tue, 7 Jan 2025 14:09:57 -0600 Subject: [PATCH 163/187] bold submod to main --- bold | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bold b/bold index 70c9755ae1..a537dac0c5 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit 70c9755ae1b731f1b2fdedb986461754e4da2e8f +Subproject commit a537dac0c5fc95a07afe54dad4d7691121a4f484 From 7acdd8fa8dcb11d54b63746416ab5c0e1dce6d8c Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Tue, 7 Jan 2025 18:07:44 -0700 Subject: [PATCH 164/187] update nightly version and fix wasm --- .github/workflows/arbitrator-ci.yml | 2 +- .github/workflows/ci.yml | 2 +- Makefile | 26 ++++++++++++++++++++++ arbitrator/stylus/tests/.cargo/config.toml | 1 + 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index dd58a30571..d9c4618e8b 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -76,7 +76,7 @@ jobs: uses: dtolnay/rust-toolchain@nightly id: install-rust-nightly with: - toolchain: 'nightly-2024-08-06' + toolchain: 'nightly-2024-10-06' targets: 'wasm32-wasi, wasm32-unknown-unknown' components: 'rust-src, rustfmt, clippy' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1eda1d9b7e..e9e184f786 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,7 +64,7 @@ jobs: uses: dtolnay/rust-toolchain@nightly id: install-rust-nightly with: - toolchain: 'nightly-2024-08-06' + toolchain: 'nightly-2024-10-06' targets: 'wasm32-wasi, wasm32-unknown-unknown' components: 'rust-src, rustfmt, clippy' diff --git a/Makefile b/Makefile index 12dfb07cf8..39b221dcee 100644 --- a/Makefile +++ b/Makefile @@ -440,54 +440,80 @@ $(stylus_test_dir)/%.wasm: $(stylus_test_dir)/%.b $(stylus_lang_bf) $(stylus_test_keccak_wasm): $(stylus_test_keccak_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_keccak-100_wasm): $(stylus_test_keccak-100_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_fallible_wasm): $(stylus_test_fallible_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_storage_wasm): $(stylus_test_storage_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_multicall_wasm): $(stylus_test_multicall_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_log_wasm): $(stylus_test_log_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_create_wasm): $(stylus_test_create_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_math_wasm): $(stylus_test_math_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_evm-data_wasm): $(stylus_test_evm-data_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_read-return-data_wasm): $(stylus_test_read-return-data_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_sdk-storage_wasm): $(stylus_test_sdk-storage_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_erc20_wasm): $(stylus_test_erc20_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary $(stylus_test_hostio-test_wasm): $(stylus_test_hostio-test_src) $(cargo_nightly) --manifest-path $< --release --config $(stylus_cargo) + wasm2wat $@ > $@.wat #removing reference types + wat2wasm $@.wat -o $@ @touch -c $@ # cargo might decide to not rebuild the binary contracts/test/prover/proofs/float%.json: $(arbitrator_cases)/float%.wasm $(prover_bin) $(output_latest)/soft-float.wasm diff --git a/arbitrator/stylus/tests/.cargo/config.toml b/arbitrator/stylus/tests/.cargo/config.toml index 702a5c04b3..6ca5e18651 100644 --- a/arbitrator/stylus/tests/.cargo/config.toml +++ b/arbitrator/stylus/tests/.cargo/config.toml @@ -5,6 +5,7 @@ target = "wasm32-unknown-unknown" rustflags = [ "-C", "target-cpu=mvp", "-C", "link-arg=-zstack-size=8192", + "-C", "target-feature=-reference-types", # "-C", "link-arg=--export=__heap_base", # "-C", "link-arg=--export=__data_end", ] From 25ea73540716bf602e90bdb0587f35162dcf2531 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Tue, 7 Jan 2025 18:35:22 -0700 Subject: [PATCH 165/187] fix rust stable to 1.80.1 --- .github/workflows/arbitrator-ci.yml | 2 +- .github/workflows/ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index d9c4618e8b..b765acee99 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -69,7 +69,7 @@ jobs: - name: Install rust stable uses: dtolnay/rust-toolchain@stable with: - toolchain: 'stable' + toolchain: '1.80.1' components: 'llvm-tools-preview, rustfmt, clippy' - name: Install rust nightly diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e9e184f786..b943b34686 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,7 +56,7 @@ jobs: - name: Install rust stable uses: dtolnay/rust-toolchain@stable with: - toolchain: 'stable' + toolchain: '1.80.1' targets: 'wasm32-wasi, wasm32-unknown-unknown' components: 'llvm-tools-preview, rustfmt, clippy' From 6a66ea4db34886e13f1a317b97737b70f3bf3908 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Tue, 7 Jan 2025 19:44:52 -0700 Subject: [PATCH 166/187] ci: only use stable clippy --- .github/workflows/arbitrator-ci.yml | 3 ++- .github/workflows/ci.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index b765acee99..3ef8d336ff 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -67,6 +67,7 @@ jobs: cache-dependency-path: '**/yarn.lock' - name: Install rust stable + id: install-rust uses: dtolnay/rust-toolchain@stable with: toolchain: '1.80.1' @@ -78,7 +79,7 @@ jobs: with: toolchain: 'nightly-2024-10-06' targets: 'wasm32-wasi, wasm32-unknown-unknown' - components: 'rust-src, rustfmt, clippy' + components: 'rust-src, rustfmt' - name: Set STYLUS_NIGHTLY_VER environment variable run: echo "STYLUS_NIGHTLY_VER=+$(rustup toolchain list | grep '^nightly' | head -n1 | cut -d' ' -f1)" >> "$GITHUB_ENV" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b943b34686..006c01a378 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,6 +55,7 @@ jobs: - name: Install rust stable uses: dtolnay/rust-toolchain@stable + id: install-rust with: toolchain: '1.80.1' targets: 'wasm32-wasi, wasm32-unknown-unknown' @@ -66,7 +67,7 @@ jobs: with: toolchain: 'nightly-2024-10-06' targets: 'wasm32-wasi, wasm32-unknown-unknown' - components: 'rust-src, rustfmt, clippy' + components: 'rust-src, rustfmt' - name: Set STYLUS_NIGHTLY_VER environment variable run: echo "STYLUS_NIGHTLY_VER=+$(rustup toolchain list | grep '^nightly' | head -n1 | cut -d' ' -f1)" >> "$GITHUB_ENV" From fb03fe67e1bec2fe9959915448e484add6d8d61f Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Tue, 7 Jan 2025 19:31:06 -0700 Subject: [PATCH 167/187] clippy fixes: initial --- arbitrator/arbutil/src/operator.rs | 4 ++-- arbitrator/jit/src/caller_env.rs | 2 +- arbitrator/prover/src/binary.rs | 2 +- arbitrator/prover/src/programs/counter.rs | 2 +- arbitrator/prover/src/programs/depth.rs | 4 ++-- arbitrator/prover/src/programs/meter.rs | 2 +- arbitrator/prover/src/programs/mod.rs | 6 +++--- arbitrator/stylus/src/env.rs | 10 +++++----- arbitrator/stylus/src/host.rs | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/arbitrator/arbutil/src/operator.rs b/arbitrator/arbutil/src/operator.rs index cc1f684366..9abf237a66 100644 --- a/arbitrator/arbutil/src/operator.rs +++ b/arbitrator/arbutil/src/operator.rs @@ -595,13 +595,13 @@ impl Display for OperatorCode { } } -impl<'a> From> for OperatorCode { +impl From> for OperatorCode { fn from(op: Operator) -> Self { OperatorCode::from(&op) } } -impl<'a> From<&Operator<'a>> for OperatorCode { +impl From<&Operator<'_>> for OperatorCode { fn from(op: &Operator) -> Self { use Operator as O; diff --git a/arbitrator/jit/src/caller_env.rs b/arbitrator/jit/src/caller_env.rs index 41240d3d98..9fe4288d21 100644 --- a/arbitrator/jit/src/caller_env.rs +++ b/arbitrator/jit/src/caller_env.rs @@ -34,7 +34,7 @@ impl<'a> JitEnv<'a> for WasmEnvMut<'a> { } } -impl<'s> JitMemAccess<'s> { +impl JitMemAccess<'_> { fn view(&self) -> MemoryView { self.memory.view(&self.store) } diff --git a/arbitrator/prover/src/binary.rs b/arbitrator/prover/src/binary.rs index 2260f6bf48..77bc44ec4c 100644 --- a/arbitrator/prover/src/binary.rs +++ b/arbitrator/prover/src/binary.rs @@ -499,7 +499,7 @@ pub fn parse<'a>(input: &'a [u8], path: &'_ Path) -> Result> { Ok(binary) } -impl<'a> Debug for WasmBinary<'a> { +impl Debug for WasmBinary<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("WasmBinary") .field("types", &self.types) diff --git a/arbitrator/prover/src/programs/counter.rs b/arbitrator/prover/src/programs/counter.rs index cd54178cf8..4006e70ee6 100644 --- a/arbitrator/prover/src/programs/counter.rs +++ b/arbitrator/prover/src/programs/counter.rs @@ -75,7 +75,7 @@ pub struct FuncCounter<'a> { block: Vec>, } -impl<'a> FuncCounter<'a> { +impl FuncCounter<'_> { fn new(counters: Arc>>) -> Self { let block = vec![]; Self { counters, block } diff --git a/arbitrator/prover/src/programs/depth.rs b/arbitrator/prover/src/programs/depth.rs index 2000190917..fb0e0cb6d2 100644 --- a/arbitrator/prover/src/programs/depth.rs +++ b/arbitrator/prover/src/programs/depth.rs @@ -107,7 +107,7 @@ pub struct FuncDepthChecker<'a> { done: bool, } -impl<'a> FuncDepthChecker<'a> { +impl FuncDepthChecker<'_> { fn new( global: GlobalIndex, funcs: Arc>, @@ -227,7 +227,7 @@ impl<'a> FuncMiddleware<'a> for FuncDepthChecker<'a> { } } -impl<'a> FuncDepthChecker<'a> { +impl FuncDepthChecker<'_> { fn worst_case_depth(&self) -> Result { use Operator::*; diff --git a/arbitrator/prover/src/programs/meter.rs b/arbitrator/prover/src/programs/meter.rs index 0d7b3151d7..258c932944 100644 --- a/arbitrator/prover/src/programs/meter.rs +++ b/arbitrator/prover/src/programs/meter.rs @@ -122,7 +122,7 @@ pub struct FuncMeter<'a, F: OpcodePricer> { sigs: Arc, } -impl<'a, F: OpcodePricer> FuncMeter<'a, F> { +impl FuncMeter<'_, F> { fn new( ink_global: GlobalIndex, status_global: GlobalIndex, diff --git a/arbitrator/prover/src/programs/mod.rs b/arbitrator/prover/src/programs/mod.rs index a35308e7ff..517ccc1971 100644 --- a/arbitrator/prover/src/programs/mod.rs +++ b/arbitrator/prover/src/programs/mod.rs @@ -244,7 +244,7 @@ impl ModuleMod for ModuleInfo { fn drop_exports_and_names(&mut self, keep: &HashMap<&str, ExportKind>) { self.exports.retain(|name, export| { keep.get(name.as_str()) - .map_or(false, |x| *x == (*export).into()) + .is_some_and(|x| *x == (*export).into()) }); self.function_names.clear(); } @@ -263,7 +263,7 @@ impl ModuleMod for ModuleInfo { } } -impl<'a> ModuleMod for WasmBinary<'a> { +impl ModuleMod for WasmBinary<'_> { fn add_global(&mut self, name: &str, _ty: Type, init: GlobalInit) -> Result { let global = match init { GlobalInit::I32Const(x) => Value::I32(x as u32), @@ -364,7 +364,7 @@ impl<'a> ModuleMod for WasmBinary<'a> { fn drop_exports_and_names(&mut self, keep: &HashMap<&str, ExportKind>) { self.exports - .retain(|name, ty| keep.get(name.as_str()).map_or(false, |x| *x == ty.1)); + .retain(|name, ty| keep.get(name.as_str()).is_some_and(|x| *x == ty.1)); self.names.functions.clear(); } diff --git a/arbitrator/stylus/src/env.rs b/arbitrator/stylus/src/env.rs index a2c8189029..ef12d2480a 100644 --- a/arbitrator/stylus/src/env.rs +++ b/arbitrator/stylus/src/env.rs @@ -147,7 +147,7 @@ pub struct HostioInfo<'a, D: DataReader, E: EvmApi> { pub start_ink: Ink, } -impl<'a, D: DataReader, E: EvmApi> HostioInfo<'a, D, E> { +impl> HostioInfo<'_, D, E> { pub fn config(&self) -> StylusConfig { self.config.expect("no config") } @@ -172,7 +172,7 @@ impl<'a, D: DataReader, E: EvmApi> HostioInfo<'a, D, E> { } } -impl<'a, D: DataReader, E: EvmApi> MeteredMachine for HostioInfo<'a, D, E> { +impl> MeteredMachine for HostioInfo<'_, D, E> { fn ink_left(&self) -> MachineMeter { let vm = self.env.meter(); match vm.status() { @@ -188,13 +188,13 @@ impl<'a, D: DataReader, E: EvmApi> MeteredMachine for HostioInfo<'a, D, E> { } } -impl<'a, D: DataReader, E: EvmApi> GasMeteredMachine for HostioInfo<'a, D, E> { +impl> GasMeteredMachine for HostioInfo<'_, D, E> { fn pricing(&self) -> PricingParams { self.config().pricing } } -impl<'a, D: DataReader, E: EvmApi> Deref for HostioInfo<'a, D, E> { +impl> Deref for HostioInfo<'_, D, E> { type Target = WasmEnv; fn deref(&self) -> &Self::Target { @@ -202,7 +202,7 @@ impl<'a, D: DataReader, E: EvmApi> Deref for HostioInfo<'a, D, E> { } } -impl<'a, D: DataReader, E: EvmApi> DerefMut for HostioInfo<'a, D, E> { +impl> DerefMut for HostioInfo<'_, D, E> { fn deref_mut(&mut self) -> &mut Self::Target { self.env } diff --git a/arbitrator/stylus/src/host.rs b/arbitrator/stylus/src/host.rs index 67497302a1..c4fc7cea1e 100644 --- a/arbitrator/stylus/src/host.rs +++ b/arbitrator/stylus/src/host.rs @@ -22,7 +22,7 @@ use std::{ use user_host_trait::UserHost; use wasmer::{MemoryAccessError, WasmPtr}; -impl<'a, DR, A> UserHost for HostioInfo<'a, DR, A> +impl UserHost for HostioInfo<'_, DR, A> where DR: DataReader, A: EvmApi, From 00cb2f9b5ab025e13dd156c6cda346149aa10985 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Tue, 7 Jan 2025 20:30:29 -0700 Subject: [PATCH 168/187] circumvent lifetime errors from clippy --- arbitrator/prover/src/programs/meter.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/arbitrator/prover/src/programs/meter.rs b/arbitrator/prover/src/programs/meter.rs index 258c932944..cfb91e647d 100644 --- a/arbitrator/prover/src/programs/meter.rs +++ b/arbitrator/prover/src/programs/meter.rs @@ -1,5 +1,6 @@ // Copyright 2022-2023, Offchain Labs, Inc. // For license information, see https://github.com/nitro/blob/master/LICENSE +#![allow(clippy::needless_lifetimes)] use crate::{ programs::{ From 82274225c91ce0a294485cac8c5472dc468768f1 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Tue, 7 Jan 2025 20:54:53 -0700 Subject: [PATCH 169/187] ci: add nightly clippy back --- .github/workflows/arbitrator-ci.yml | 16 ++++++++-------- .github/workflows/ci.yml | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index 3ef8d336ff..45cf3c1a3d 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -66,20 +66,20 @@ jobs: cache: 'yarn' cache-dependency-path: '**/yarn.lock' - - name: Install rust stable - id: install-rust - uses: dtolnay/rust-toolchain@stable - with: - toolchain: '1.80.1' - components: 'llvm-tools-preview, rustfmt, clippy' - - name: Install rust nightly uses: dtolnay/rust-toolchain@nightly id: install-rust-nightly with: toolchain: 'nightly-2024-10-06' targets: 'wasm32-wasi, wasm32-unknown-unknown' - components: 'rust-src, rustfmt' + components: 'rust-src, rustfmt, clippy' + + - name: Install rust stable + id: install-rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: '1.80.1' + components: 'llvm-tools-preview, rustfmt, clippy' - name: Set STYLUS_NIGHTLY_VER environment variable run: echo "STYLUS_NIGHTLY_VER=+$(rustup toolchain list | grep '^nightly' | head -n1 | cut -d' ' -f1)" >> "$GITHUB_ENV" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 006c01a378..b4ce5bf27f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,7 +67,7 @@ jobs: with: toolchain: 'nightly-2024-10-06' targets: 'wasm32-wasi, wasm32-unknown-unknown' - components: 'rust-src, rustfmt' + components: 'rust-src, rustfmt, clippy' - name: Set STYLUS_NIGHTLY_VER environment variable run: echo "STYLUS_NIGHTLY_VER=+$(rustup toolchain list | grep '^nightly' | head -n1 | cut -d' ' -f1)" >> "$GITHUB_ENV" From 12c76eac50b8b30d90874452f449128a91897067 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Tue, 7 Jan 2025 21:10:09 -0700 Subject: [PATCH 170/187] arbitrator ci: stable after nightly --- .github/workflows/arbitrator-ci.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index 3ef8d336ff..0552fc4a3a 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -66,13 +66,6 @@ jobs: cache: 'yarn' cache-dependency-path: '**/yarn.lock' - - name: Install rust stable - id: install-rust - uses: dtolnay/rust-toolchain@stable - with: - toolchain: '1.80.1' - components: 'llvm-tools-preview, rustfmt, clippy' - - name: Install rust nightly uses: dtolnay/rust-toolchain@nightly id: install-rust-nightly @@ -81,6 +74,13 @@ jobs: targets: 'wasm32-wasi, wasm32-unknown-unknown' components: 'rust-src, rustfmt' + - name: Install rust stable + id: install-rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: '1.80.1' + components: 'llvm-tools-preview, rustfmt, clippy' + - name: Set STYLUS_NIGHTLY_VER environment variable run: echo "STYLUS_NIGHTLY_VER=+$(rustup toolchain list | grep '^nightly' | head -n1 | cut -d' ' -f1)" >> "$GITHUB_ENV" From ffa2f67140f44223eab539524d9019983ed32c07 Mon Sep 17 00:00:00 2001 From: Pepper Lebeck-Jobe Date: Wed, 8 Jan 2025 13:38:54 +0100 Subject: [PATCH 171/187] Add the wasm targets to the stable rust installation Without these targets the build was complaining about the missing `core` crate and suggested installing them. --- .github/workflows/arbitrator-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index 45cf3c1a3d..51c0617f3e 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -79,6 +79,7 @@ jobs: uses: dtolnay/rust-toolchain@stable with: toolchain: '1.80.1' + targets: 'wasm32-wasi, wasm32-unknown-unknown' components: 'llvm-tools-preview, rustfmt, clippy' - name: Set STYLUS_NIGHTLY_VER environment variable From 79b3af04cbe77ea8f071658968e04278c9757d93 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Wed, 8 Jan 2025 10:07:23 -0600 Subject: [PATCH 172/187] update main --- bold | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bold b/bold index a537dac0c5..290743f517 160000 --- a/bold +++ b/bold @@ -1 +1 @@ -Subproject commit a537dac0c5fc95a07afe54dad4d7691121a4f484 +Subproject commit 290743f517f7a94d62460231399fb095cb18c3a4 From 6102825e2aeb59769e496587f2dac5c6c2d35048 Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Thu, 9 Jan 2025 15:10:46 +0100 Subject: [PATCH 173/187] don't required waxm module recompilation when getting local asm --- arbos/programs/native.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arbos/programs/native.go b/arbos/programs/native.go index 8eb2aacda1..3ca3003175 100644 --- a/arbos/programs/native.go +++ b/arbos/programs/native.go @@ -272,14 +272,14 @@ func getLocalAsm(statedb vm.StateDB, moduleHash common.Hash, addressForLogging c targets := statedb.Database().WasmTargets() // we know program is activated, so it must be in correct version and not use too much memory - moduleActivationMandatory := true // TODO: refactor the parameter, always set to true + moduleActivationMandatory := false info, asmMap, err := activateProgramInternal(addressForLogging, codehash, wasm, pagelimit, program.version, zeroArbosVersion, debugMode, &zeroGas, targets, moduleActivationMandatory) if err != nil { log.Error("failed to reactivate program", "address", addressForLogging, "expected moduleHash", moduleHash, "err", err) return nil, fmt.Errorf("failed to reactivate program address: %v err: %w", addressForLogging, err) } - if info.moduleHash != moduleHash { + if info != nil && info.moduleHash != moduleHash { log.Error("failed to reactivate program", "address", addressForLogging, "expected moduleHash", moduleHash, "got", info.moduleHash) return nil, fmt.Errorf("failed to reactivate program. address: %v, expected ModuleHash: %v", addressForLogging, moduleHash) } @@ -296,7 +296,7 @@ func getLocalAsm(statedb vm.StateDB, moduleHash common.Hash, addressForLogging c } else { // program activated recently, possibly in this eth_call // store it to statedb. It will be stored to database if statedb is commited - statedb.ActivateWasm(info.moduleHash, asmMap) + statedb.ActivateWasm(moduleHash, asmMap) } asm, exists := asmMap[localTarget] if !exists { From 2275b42ff710e94d0150aef71dc19553a5c84b1b Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Thu, 9 Jan 2025 16:23:17 +0100 Subject: [PATCH 174/187] refactor activateProgramInternal --- arbos/programs/native.go | 76 +++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/arbos/programs/native.go b/arbos/programs/native.go index 3ca3003175..9d34504888 100644 --- a/arbos/programs/native.go +++ b/arbos/programs/native.go @@ -164,10 +164,12 @@ func activateProgramInternal( moduleActivationMandatory bool, ) (*activationInfo, map[ethdb.WasmTarget][]byte, error) { var wavmFound bool + var nativeTargets []ethdb.WasmTarget for _, target := range targets { if target == rawdb.TargetWavm { wavmFound = true - break + } else { + nativeTargets = append(nativeTargets, target) } } type result struct { @@ -175,59 +177,53 @@ func activateProgramInternal( asm []byte err error } - asmMap := make(map[ethdb.WasmTarget][]byte, len(targets)) - - // info can be set in separate thread, make sure to wait before reading + results := make(chan result) + // info will be set in separate thread, make sure to wait before reading var info *activationInfo - var moduleActivationStarted bool + asmMap := make(map[ethdb.WasmTarget][]byte, len(nativeTargets)+1) + if moduleActivationMandatory || wavmFound { + go func() { + var err error + var module []byte + info, module, err = activateModule(addressForLogging, codehash, wasm, page_limit, stylusVersion, arbosVersionForGas, debug, gasLeft) + results <- result{rawdb.TargetWavm, module, err} + }() + } if moduleActivationMandatory { - moduleActivationStarted = true - var err error - var module []byte - info, module, err = activateModule(addressForLogging, codehash, wasm, page_limit, stylusVersion, arbosVersionForGas, debug, gasLeft) - if err != nil { - return nil, nil, err - } - if wavmFound { - asmMap[rawdb.TargetWavm] = module + // wait for the module activation before starting compilation for other targets + res := <-results + if res.err != nil { + return info, nil, res.err + } else if wavmFound { + asmMap[res.target] = res.asm } } - results := make(chan result, len(targets)) - for _, target := range targets { + for _, target := range nativeTargets { target := target - if target == rawdb.TargetWavm { - if moduleActivationStarted { - // skip if already started or activated because of moduleActivationMandatory - results <- result{target, nil, nil} - continue - } - go func() { - var err error - var module []byte - info, module, err = activateModule(addressForLogging, codehash, wasm, page_limit, stylusVersion, arbosVersionForGas, debug, gasLeft) - results <- result{target, module, err} - }() - moduleActivationStarted = true - } else { - go func() { - asm, err := compileNative(wasm, stylusVersion, debug, target) - results <- result{target, asm, err} - }() - } + go func() { + asm, err := compileNative(wasm, stylusVersion, debug, target) + results <- result{target, asm, err} + }() } + + expectedResults := len(nativeTargets) + if !moduleActivationMandatory && wavmFound { + // we didn't wait for module activation result, so wait for it too + expectedResults++ + } + var err error - for range targets { + for i := 0; i < expectedResults; i++ { res := <-results - if res.asm == nil { - continue - } else if res.err != nil { + if res.err != nil { err = errors.Join(res.err, fmt.Errorf("%s:%w", res.target, err)) } else { asmMap[res.target] = res.asm } } - if err != nil && moduleActivationMandatory { + + if err != nil && (moduleActivationMandatory || len(asmMap[rawdb.TargetWavm]) > 0) { if info != nil { log.Error( "Compilation failed for one or more targets despite activation succeeding", From 83f572e632cc732419311d9fe512887291f43c12 Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Thu, 9 Jan 2025 16:37:48 +0100 Subject: [PATCH 175/187] simplify panic condition when moduleActivationMandatory and some native compilation fails --- arbos/programs/native.go | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/arbos/programs/native.go b/arbos/programs/native.go index 9d34504888..1abbd91158 100644 --- a/arbos/programs/native.go +++ b/arbos/programs/native.go @@ -198,7 +198,6 @@ func activateProgramInternal( asmMap[res.target] = res.asm } } - for _, target := range nativeTargets { target := target go func() { @@ -206,13 +205,11 @@ func activateProgramInternal( results <- result{target, asm, err} }() } - expectedResults := len(nativeTargets) if !moduleActivationMandatory && wavmFound { // we didn't wait for module activation result, so wait for it too expectedResults++ } - var err error for i := 0; i < expectedResults; i++ { res := <-results @@ -222,29 +219,17 @@ func activateProgramInternal( asmMap[res.target] = res.asm } } - - if err != nil && (moduleActivationMandatory || len(asmMap[rawdb.TargetWavm]) > 0) { - if info != nil { - log.Error( - "Compilation failed for one or more targets despite activation succeeding", - "address", addressForLogging, - "codehash", codehash, - "moduleHash", info.moduleHash, - "targets", targets, - "err", err, - ) - } else { - log.Error( - "Compilation failed for one or more targets despite activation succeeding", - "address", addressForLogging, - "codehash", codehash, - "targets", targets, - "err", err, - ) - } + if err != nil && moduleActivationMandatory { + log.Error( + "Compilation failed for one or more targets despite activation succeeding", + "address", addressForLogging, + "codehash", codehash, + "moduleHash", info.moduleHash, + "targets", targets, + "err", err, + ) panic(fmt.Sprintf("Compilation of %v failed for one or more targets despite activation succeeding: %v", addressForLogging, err)) } - return info, asmMap, err } From 6be86bf4eb1ae4a0a391104daf4274877d93441e Mon Sep 17 00:00:00 2001 From: Maciej Kulawik Date: Thu, 9 Jan 2025 16:54:10 +0100 Subject: [PATCH 176/187] return nil activationInfo in case of error --- arbos/programs/native.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbos/programs/native.go b/arbos/programs/native.go index 1abbd91158..5995d9dafe 100644 --- a/arbos/programs/native.go +++ b/arbos/programs/native.go @@ -193,7 +193,7 @@ func activateProgramInternal( // wait for the module activation before starting compilation for other targets res := <-results if res.err != nil { - return info, nil, res.err + return nil, nil, res.err } else if wavmFound { asmMap[res.target] = res.asm } From 79422c9640570cb3408b9ee1ba24577e3cb4e942 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Fri, 10 Jan 2025 11:23:56 -0600 Subject: [PATCH 177/187] Create a metric for local block execution time --- execution/gethexec/executionengine.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/execution/gethexec/executionengine.go b/execution/gethexec/executionengine.go index ffc6ceee9f..b4f91a1605 100644 --- a/execution/gethexec/executionengine.go +++ b/execution/gethexec/executionengine.go @@ -56,6 +56,7 @@ var ( txCountHistogram = metrics.NewRegisteredHistogram("arb/block/transactions/count", nil, metrics.NewBoundedHistogramSample()) txGasUsedHistogram = metrics.NewRegisteredHistogram("arb/block/transactions/gasused", nil, metrics.NewBoundedHistogramSample()) gasUsedSinceStartupCounter = metrics.NewRegisteredCounter("arb/gas_used", nil) + blockExecutionTimer = metrics.NewRegisteredTimer("arb/block/execution", nil) ) type L1PriceDataOfMsg struct { @@ -522,10 +523,11 @@ func (s *ExecutionEngine) sequenceTransactionsWithBlockMutex(header *arbostypes. false, core.MessageCommitMode, ) + blockCalcTime := time.Since(startTime) + blockExecutionTimer.Update(blockCalcTime) if err != nil { return nil, err } - blockCalcTime := time.Since(startTime) if len(hooks.TxErrors) != len(txes) { return nil, fmt.Errorf("unexpected number of error results: %v vs number of txes %v", len(hooks.TxErrors), len(txes)) } @@ -611,10 +613,11 @@ func (s *ExecutionEngine) sequenceDelayedMessageWithBlockMutex(message *arbostyp startTime := time.Now() block, statedb, receipts, err := s.createBlockFromNextMessage(&messageWithMeta, false) + blockCalcTime := time.Since(startTime) + blockExecutionTimer.Update(blockCalcTime) if err != nil { return nil, err } - blockCalcTime := time.Since(startTime) msgResult, err := s.resultFromHeader(block.Header()) if err != nil { @@ -875,11 +878,13 @@ func (s *ExecutionEngine) digestMessageWithBlockMutex(num arbutil.MessageIndex, } block, statedb, receipts, err := s.createBlockFromNextMessage(msg, false) + blockCalcTime := time.Since(startTime) + blockExecutionTimer.Update(blockCalcTime) if err != nil { return nil, err } - err = s.appendBlock(block, statedb, receipts, time.Since(startTime)) + err = s.appendBlock(block, statedb, receipts, blockCalcTime) if err != nil { return nil, err } From e3385d0eaa5aa8883a1b55786ec898592e7f2db2 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Fri, 10 Jan 2025 14:49:03 -0600 Subject: [PATCH 178/187] address PR comments --- execution/gethexec/executionengine.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/execution/gethexec/executionengine.go b/execution/gethexec/executionengine.go index b4f91a1605..2475c816d4 100644 --- a/execution/gethexec/executionengine.go +++ b/execution/gethexec/executionengine.go @@ -57,6 +57,7 @@ var ( txGasUsedHistogram = metrics.NewRegisteredHistogram("arb/block/transactions/gasused", nil, metrics.NewBoundedHistogramSample()) gasUsedSinceStartupCounter = metrics.NewRegisteredCounter("arb/gas_used", nil) blockExecutionTimer = metrics.NewRegisteredTimer("arb/block/execution", nil) + blockWriteToDbTimer = metrics.NewRegisteredTimer("arb/block/writetodb", nil) ) type L1PriceDataOfMsg struct { @@ -523,11 +524,11 @@ func (s *ExecutionEngine) sequenceTransactionsWithBlockMutex(header *arbostypes. false, core.MessageCommitMode, ) - blockCalcTime := time.Since(startTime) - blockExecutionTimer.Update(blockCalcTime) if err != nil { return nil, err } + blockCalcTime := time.Since(startTime) + blockExecutionTimer.Update(blockCalcTime) if len(hooks.TxErrors) != len(txes) { return nil, fmt.Errorf("unexpected number of error results: %v vs number of txes %v", len(hooks.TxErrors), len(txes)) } @@ -613,11 +614,11 @@ func (s *ExecutionEngine) sequenceDelayedMessageWithBlockMutex(message *arbostyp startTime := time.Now() block, statedb, receipts, err := s.createBlockFromNextMessage(&messageWithMeta, false) - blockCalcTime := time.Since(startTime) - blockExecutionTimer.Update(blockCalcTime) if err != nil { return nil, err } + blockCalcTime := time.Since(startTime) + blockExecutionTimer.Update(blockCalcTime) msgResult, err := s.resultFromHeader(block.Header()) if err != nil { @@ -704,6 +705,7 @@ func (s *ExecutionEngine) appendBlock(block *types.Block, statedb *state.StateDB for _, receipt := range receipts { logs = append(logs, receipt.Logs...) } + startTime := time.Now() status, err := s.bc.WriteBlockAndSetHeadWithTime(block, receipts, logs, statedb, true, duration) if err != nil { return err @@ -711,6 +713,8 @@ func (s *ExecutionEngine) appendBlock(block *types.Block, statedb *state.StateDB if status == core.SideStatTy { return errors.New("geth rejected block as non-canonical") } + blockCalcTime := time.Since(startTime) + blockWriteToDbTimer.Update(blockCalcTime) baseFeeGauge.Update(block.BaseFee().Int64()) txCountHistogram.Update(int64(len(block.Transactions()) - 1)) var blockGasused uint64 @@ -878,11 +882,11 @@ func (s *ExecutionEngine) digestMessageWithBlockMutex(num arbutil.MessageIndex, } block, statedb, receipts, err := s.createBlockFromNextMessage(msg, false) - blockCalcTime := time.Since(startTime) - blockExecutionTimer.Update(blockCalcTime) if err != nil { return nil, err } + blockCalcTime := time.Since(startTime) + blockExecutionTimer.Update(blockCalcTime) err = s.appendBlock(block, statedb, receipts, blockCalcTime) if err != nil { From 7bab83a5af5b9e67b324580de287336addb7b7de Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Fri, 10 Jan 2025 15:51:22 -0700 Subject: [PATCH 179/187] fix arbitrator-ci --- .github/workflows/arbitrator-ci.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index 0355ebb722..45cf3c1a3d 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -74,14 +74,6 @@ jobs: targets: 'wasm32-wasi, wasm32-unknown-unknown' components: 'rust-src, rustfmt, clippy' - - name: Install rust stable - id: install-rust - uses: dtolnay/rust-toolchain@stable - with: - toolchain: '1.80.1' - targets: 'wasm32-wasi, wasm32-unknown-unknown' - components: 'llvm-tools-preview, rustfmt, clippy' - - name: Install rust stable id: install-rust uses: dtolnay/rust-toolchain@stable From fe7ee6e9146054713b89ed5b4408cdc55478a5f6 Mon Sep 17 00:00:00 2001 From: Ganesh Vanahalli Date: Fri, 10 Jan 2025 16:57:18 -0600 Subject: [PATCH 180/187] fix typo --- execution/gethexec/executionengine.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/execution/gethexec/executionengine.go b/execution/gethexec/executionengine.go index 2475c816d4..7cf83c7183 100644 --- a/execution/gethexec/executionengine.go +++ b/execution/gethexec/executionengine.go @@ -713,8 +713,7 @@ func (s *ExecutionEngine) appendBlock(block *types.Block, statedb *state.StateDB if status == core.SideStatTy { return errors.New("geth rejected block as non-canonical") } - blockCalcTime := time.Since(startTime) - blockWriteToDbTimer.Update(blockCalcTime) + blockWriteToDbTimer.Update(time.Since(startTime)) baseFeeGauge.Update(block.BaseFee().Int64()) txCountHistogram.Update(int64(len(block.Transactions()) - 1)) var blockGasused uint64 From 18478e0c43a15c582cc63249c10a384cab299937 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Fri, 10 Jan 2025 16:08:31 -0700 Subject: [PATCH 181/187] add targets to arbitrator --- .github/workflows/arbitrator-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/arbitrator-ci.yml b/.github/workflows/arbitrator-ci.yml index 45cf3c1a3d..51c0617f3e 100644 --- a/.github/workflows/arbitrator-ci.yml +++ b/.github/workflows/arbitrator-ci.yml @@ -79,6 +79,7 @@ jobs: uses: dtolnay/rust-toolchain@stable with: toolchain: '1.80.1' + targets: 'wasm32-wasi, wasm32-unknown-unknown' components: 'llvm-tools-preview, rustfmt, clippy' - name: Set STYLUS_NIGHTLY_VER environment variable From f3139eaa1ed6b605aea38a4aa844e38ddd8976ae Mon Sep 17 00:00:00 2001 From: Joshua Colvin Date: Sat, 11 Jan 2025 20:37:16 -0700 Subject: [PATCH 182/187] Fix `--execution.rpc.gas-cap=0` to again mean infinite gas There was a regression introduced in v3.3.0 where specifying `--execution.rpc.gas-cap=0` would cause gas related errors. --- go-ethereum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go-ethereum b/go-ethereum index dd32b782ed..aaded574dc 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit dd32b782ed255c1ac20ed5beee11dd6a821f9be2 +Subproject commit aaded574dcf7b2f6b5851ee858603cb61335217e From 26b4c1028fdc8475c349510dbe392d99e27dc082 Mon Sep 17 00:00:00 2001 From: dashangcun <907225865@qq.com> Date: Mon, 13 Jan 2025 17:42:03 +0800 Subject: [PATCH 183/187] refactor: using slices.Contains to simplify the code Signed-off-by: dashangcun <907225865@qq.com> --- cmd/conf/init.go | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/cmd/conf/init.go b/cmd/conf/init.go index 74bd89fd16..97b31958d5 100644 --- a/cmd/conf/init.go +++ b/cmd/conf/init.go @@ -3,6 +3,7 @@ package conf import ( "fmt" "runtime" + "slices" "strings" "time" @@ -106,7 +107,7 @@ func (c *InitConfig) Validate() error { if c.Force && c.RecreateMissingStateFrom > 0 { log.Warn("force init enabled, recreate-missing-state-from will have no effect") } - if c.Latest != "" && !isAcceptedSnapshotKind(c.Latest) { + if c.Latest != "" && !slices.Contains(acceptedSnapshotKinds, c.Latest) { return fmt.Errorf("invalid value for latest option: \"%s\" %s", c.Latest, acceptedSnapshotKindsStr) } if c.Prune != "" && c.PruneThreads <= 0 { @@ -139,12 +140,3 @@ var ( acceptedSnapshotKinds = []string{"archive", "pruned", "genesis"} acceptedSnapshotKindsStr = "(accepted values: \"" + strings.Join(acceptedSnapshotKinds, "\" | \"") + "\")" ) - -func isAcceptedSnapshotKind(kind string) bool { - for _, valid := range acceptedSnapshotKinds { - if kind == valid { - return true - } - } - return false -} From c721fdbf0f6e824b25f2c78875b079bb0d2aa5ed Mon Sep 17 00:00:00 2001 From: Pepper Lebeck-Jobe Date: Mon, 13 Jan 2025 18:43:37 +0100 Subject: [PATCH 184/187] Fix typo pimative -> primitive --- ...traint-types.md => 0001-avoid-primitive-constraint-types.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/decisions/{0001-avoid-primative-constraint-types.md => 0001-avoid-primitive-constraint-types.md} (98%) diff --git a/docs/decisions/0001-avoid-primative-constraint-types.md b/docs/decisions/0001-avoid-primitive-constraint-types.md similarity index 98% rename from docs/decisions/0001-avoid-primative-constraint-types.md rename to docs/decisions/0001-avoid-primitive-constraint-types.md index b52cea8bdd..8a3ecb0632 100644 --- a/docs/decisions/0001-avoid-primative-constraint-types.md +++ b/docs/decisions/0001-avoid-primitive-constraint-types.md @@ -4,7 +4,7 @@ date: 2024-11-29 decision-makers: eljobe@ plasmapower@ --- -# Avoid primative constraint types +# Avoid primitive constraint types ## Context and Problem Statement From b7e28f2f12c8b808ade3f0103d45d780cdb19c83 Mon Sep 17 00:00:00 2001 From: Joshua Colvin Date: Mon, 13 Jan 2025 11:53:45 -0700 Subject: [PATCH 185/187] Update geth pin to pull in extra comment --- go-ethereum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go-ethereum b/go-ethereum index aaded574dc..779b669ac0 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit aaded574dcf7b2f6b5851ee858603cb61335217e +Subproject commit 779b669ac0d0020099a67a1c39fbaf66b901c1a5 From 84bfafa45edf97a50828a0d57790cdaed3999b42 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Tue, 14 Jan 2025 10:25:11 -0700 Subject: [PATCH 186/187] Enable the geth trie prefetcher for the sequencer --- execution/gethexec/executionengine.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/execution/gethexec/executionengine.go b/execution/gethexec/executionengine.go index 7cf83c7183..e606027419 100644 --- a/execution/gethexec/executionengine.go +++ b/execution/gethexec/executionengine.go @@ -508,6 +508,8 @@ func (s *ExecutionEngine) sequenceTransactionsWithBlockMutex(header *arbostypes. if err != nil { return nil, err } + statedb.StartPrefetcher("Sequencer") + defer statedb.StopPrefetcher() delayedMessagesRead := lastBlockHeader.Nonce.Uint64() From b18e8f0d8d48093c7a2986404ae78870b76c888b Mon Sep 17 00:00:00 2001 From: Joshua Colvin Date: Tue, 14 Jan 2025 14:39:00 -0700 Subject: [PATCH 187/187] Revert wasmer update New version of wasmer considers binaries created by current version of wasmer as incompatible. Will delay merging in new versions to reduce the number of times that stylus contracts will need to be recompiled. This reverts commit 93841cee1db6d2fc826c169992aa8bb73163703b, reversing changes made to 3ba8fc2dd39315e2d449f5f6666c23a472d11cf1. --- arbitrator/Cargo.lock | 61 +++++++++++----------------- arbitrator/tools/wasmer | 2 +- arbitrator/wasm-libraries/Cargo.lock | 14 +------ 3 files changed, 25 insertions(+), 52 deletions(-) diff --git a/arbitrator/Cargo.lock b/arbitrator/Cargo.lock index 9688d07229..2b437968fa 100644 --- a/arbitrator/Cargo.lock +++ b/arbitrator/Cargo.lock @@ -747,12 +747,11 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils", "hashbrown 0.14.5", "lock_api", "once_cell", @@ -975,10 +974,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] @@ -1315,6 +1312,15 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + [[package]] name = "mach2" version = "0.4.2" @@ -2552,7 +2558,7 @@ dependencies = [ [[package]] name = "wasmer" -version = "4.3.7" +version = "4.2.8" dependencies = [ "bytes", "cfg-if 1.0.0", @@ -2574,12 +2580,12 @@ dependencies = [ "wasmer-types", "wasmer-vm", "wat", - "windows-sys 0.59.0", + "winapi", ] [[package]] name = "wasmer-compiler" -version = "4.3.7" +version = "4.2.8" dependencies = [ "backtrace", "bytes", @@ -2588,7 +2594,6 @@ dependencies = [ "enumset", "lazy_static", "leb128", - "libc", "memmap2 0.5.10", "more-asserts", "region", @@ -2600,13 +2605,12 @@ dependencies = [ "wasmer-types", "wasmer-vm", "wasmparser", - "windows-sys 0.59.0", - "xxhash-rust", + "winapi", ] [[package]] name = "wasmer-compiler-cranelift" -version = "4.3.7" +version = "4.2.8" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -2623,7 +2627,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-llvm" -version = "4.3.7" +version = "4.2.8" dependencies = [ "byteorder", "cc", @@ -2645,7 +2649,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-singlepass" -version = "4.3.7" +version = "4.2.8" dependencies = [ "byteorder", "dynasm", @@ -2662,7 +2666,7 @@ dependencies = [ [[package]] name = "wasmer-derive" -version = "4.3.7" +version = "4.2.8" dependencies = [ "proc-macro-error", "proc-macro2", @@ -2672,25 +2676,21 @@ dependencies = [ [[package]] name = "wasmer-types" -version = "4.3.7" +version = "4.2.8" dependencies = [ "bytecheck", "enum-iterator 0.7.0", "enumset", - "getrandom", - "hex", "indexmap 1.9.3", "more-asserts", "rkyv", - "sha2 0.10.8", "target-lexicon", "thiserror", - "xxhash-rust", ] [[package]] name = "wasmer-vm" -version = "4.3.7" +version = "4.2.8" dependencies = [ "backtrace", "cc", @@ -2704,14 +2704,14 @@ dependencies = [ "indexmap 1.9.3", "lazy_static", "libc", - "mach2", + "mach", "memoffset", "more-asserts", "region", "scopeguard", "thiserror", "wasmer-types", - "windows-sys 0.59.0", + "winapi", ] [[package]] @@ -2830,15 +2830,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -2951,12 +2942,6 @@ dependencies = [ "tap", ] -[[package]] -name = "xxhash-rust" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" - [[package]] name = "zerocopy" version = "0.6.6" diff --git a/arbitrator/tools/wasmer b/arbitrator/tools/wasmer index 84aec79c13..6b15433d83 160000 --- a/arbitrator/tools/wasmer +++ b/arbitrator/tools/wasmer @@ -1 +1 @@ -Subproject commit 84aec79c13888bf3fb324ddbd69b3fecc22d4a8c +Subproject commit 6b15433d83f951555c24f0c56dc05e4751b0cc76 diff --git a/arbitrator/wasm-libraries/Cargo.lock b/arbitrator/wasm-libraries/Cargo.lock index e62acf43a6..a5a066e5c9 100644 --- a/arbitrator/wasm-libraries/Cargo.lock +++ b/arbitrator/wasm-libraries/Cargo.lock @@ -518,10 +518,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] @@ -1635,20 +1633,16 @@ dependencies = [ [[package]] name = "wasmer-types" -version = "4.3.7" +version = "4.2.8" dependencies = [ "bytecheck", "enum-iterator 0.7.0", "enumset", - "getrandom", - "hex", "indexmap 1.9.3", "more-asserts", "rkyv", - "sha2 0.10.8", "target-lexicon", "thiserror", - "xxhash-rust", ] [[package]] @@ -1809,12 +1803,6 @@ dependencies = [ "tap", ] -[[package]] -name = "xxhash-rust" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" - [[package]] name = "zerocopy" version = "0.7.35"