From d4051e33bd23c045e4ffe6c2e435ecc8ce3bde20 Mon Sep 17 00:00:00 2001 From: protolambda Date: Fri, 18 Aug 2023 16:52:11 -0600 Subject: [PATCH 01/20] cannon,op-challenger,dispute-game: VM Status prefix byte in claim hash --- cannon/cmd/run.go | 5 +- cannon/cmd/witness.go | 3 +- cannon/mipsevm/state.go | 41 +++++- op-challenger/fault/service.go | 128 ++++++++++++++++++ op-challenger/fault/service_test.go | 113 ++++++++++++++++ op-challenger/game/fault/loader.go | 7 +- .../game/fault/trace/alphabet/provider.go | 24 +++- .../fault/trace/alphabet/provider_test.go | 5 +- .../game/fault/trace/cannon/provider.go | 18 ++- .../game/fault/trace/cannon/provider_test.go | 11 +- op-challenger/game/fault/types/types.go | 10 ++ .../contracts-bedrock/src/cannon/MIPS.sol | 14 ++ .../src/dispute/DisputeGameFactory.sol | 4 + .../src/libraries/DisputeErrors.sol | 5 + .../test/DisputeGameFactory.t.sol | 23 ++++ .../test/FaultDisputeGame.t.sol | 2 +- 16 files changed, 388 insertions(+), 25 deletions(-) create mode 100644 op-challenger/fault/service.go create mode 100644 op-challenger/fault/service_test.go diff --git a/cannon/cmd/run.go b/cannon/cmd/run.go index 03a7083e9969..f66593a305b5 100644 --- a/cannon/cmd/run.go +++ b/cannon/cmd/run.go @@ -9,7 +9,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" @@ -331,12 +330,12 @@ func Run(ctx *cli.Context) error { } if proofAt(state) { - preStateHash := crypto.Keccak256Hash(state.EncodeWitness()) + preStateHash := state.EncodeWitness().StateHash() witness, err := stepFn(true) if err != nil { return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.PC, err) } - postStateHash := crypto.Keccak256Hash(state.EncodeWitness()) + postStateHash := state.EncodeWitness().StateHash() proof := &Proof{ Step: step, Pre: preStateHash, diff --git a/cannon/cmd/witness.go b/cannon/cmd/witness.go index be90b12d28da..ac84bb811bb3 100644 --- a/cannon/cmd/witness.go +++ b/cannon/cmd/witness.go @@ -5,7 +5,6 @@ import ( "os" "github.com/ethereum-optimism/optimism/cannon/mipsevm" - "github.com/ethereum/go-ethereum/crypto" "github.com/urfave/cli/v2" ) @@ -31,7 +30,7 @@ func Witness(ctx *cli.Context) error { return fmt.Errorf("invalid input state (%v): %w", input, err) } witness := state.EncodeWitness() - h := crypto.Keccak256Hash(witness) + h := witness.StateHash() if output != "" { if err := os.WriteFile(output, witness, 0755); err != nil { return fmt.Errorf("writing output to %v: %w", output, err) diff --git a/cannon/mipsevm/state.go b/cannon/mipsevm/state.go index 77b1a6c1962e..e83f6bbf40c6 100644 --- a/cannon/mipsevm/state.go +++ b/cannon/mipsevm/state.go @@ -5,6 +5,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/crypto" ) type State struct { @@ -37,7 +38,11 @@ type State struct { LastHint hexutil.Bytes `json:"lastHint,omitempty"` } -func (s *State) EncodeWitness() []byte { +func (s *State) VMStatus() uint8 { + return vmStatus(s.Exited, s.ExitCode) +} + +func (s *State) EncodeWitness() StateWitness { out := make([]byte, 0) memRoot := s.Memory.MerkleRoot() out = append(out, memRoot[:]...) @@ -60,3 +65,37 @@ func (s *State) EncodeWitness() []byte { } return out } + +type StateWitness []byte + +const ( + VMStatusValid = 0 + VMStatusInvalid = 1 + VMStatusPanic = 2 + VMStatusUnfinished = 3 +) + +func (sw StateWitness) StateHash() common.Hash { + hash := crypto.Keccak256Hash(sw) + offset := 32*2 + 4*6 + exited := sw[offset] + exitCode := sw[offset+1] + status := vmStatus(exited == 1, exitCode) + hash[0] = status + return hash +} + +func vmStatus(exited bool, exitCode uint8) uint8 { + if exited { + switch exitCode { + case 0: + return VMStatusValid + case 1: + return VMStatusInvalid + default: + return VMStatusPanic + } + } else { + return VMStatusUnfinished + } +} diff --git a/op-challenger/fault/service.go b/op-challenger/fault/service.go new file mode 100644 index 000000000000..e7f1be30df8b --- /dev/null +++ b/op-challenger/fault/service.go @@ -0,0 +1,128 @@ +package fault + +import ( + "context" + "fmt" + + "github.com/ethereum-optimism/optimism/op-bindings/bindings" + "github.com/ethereum-optimism/optimism/op-challenger/config" + "github.com/ethereum-optimism/optimism/op-challenger/fault/alphabet" + "github.com/ethereum-optimism/optimism/op-challenger/fault/cannon" + "github.com/ethereum-optimism/optimism/op-challenger/fault/types" + "github.com/ethereum-optimism/optimism/op-service/client" + "github.com/ethereum-optimism/optimism/op-service/txmgr" + "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/log" +) + +// Service provides a clean interface for the challenger to interact +// with the fault package. +type Service interface { + // MonitorGame monitors the fault dispute game and attempts to progress it. + MonitorGame(context.Context) error +} + +type service struct { + agent *Agent + agreeWithProposedOutput bool + caller *FaultCaller + logger log.Logger +} + +// NewService creates a new Service. +func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*service, error) { + txMgr, err := txmgr.NewSimpleTxManager("challenger", logger, &metrics.NoopTxMetrics{}, cfg.TxMgrConfig) + if err != nil { + return nil, fmt.Errorf("failed to create the transaction manager: %w", err) + } + + client, err := client.DialEthClientWithTimeout(client.DefaultDialTimeout, logger, cfg.L1EthRpc) + if err != nil { + return nil, fmt.Errorf("failed to dial L1: %w", err) + } + + contract, err := bindings.NewFaultDisputeGameCaller(cfg.GameAddress, client) + if err != nil { + return nil, fmt.Errorf("failed to bind the fault dispute game contract: %w", err) + } + + loader := NewLoader(contract) + + gameDepth, err := loader.FetchGameDepth(ctx) + if err != nil { + return nil, fmt.Errorf("failed to fetch the game depth: %w", err) + } + gameDepth = uint64(gameDepth) + + var trace types.TraceProvider + var updater types.OracleUpdater + switch cfg.TraceType { + case config.TraceTypeCannon: + trace, err = cannon.NewTraceProvider(ctx, logger, cfg, client) + if err != nil { + return nil, fmt.Errorf("create cannon trace provider: %w", err) + } + updater, err = cannon.NewOracleUpdater(ctx, logger, txMgr, cfg.GameAddress, client) + if err != nil { + return nil, fmt.Errorf("failed to create the cannon updater: %w", err) + } + case config.TraceTypeAlphabet: + trace = alphabet.NewTraceProvider(cfg.AlphabetTrace, gameDepth) + updater = alphabet.NewOracleUpdater(logger) + default: + return nil, fmt.Errorf("unsupported trace type: %v", cfg.TraceType) + } + + return newTypedService(ctx, logger, cfg, loader, gameDepth, client, trace, updater, txMgr) +} + +// newTypedService creates a new Service from a provided trace provider. +func newTypedService(ctx context.Context, logger log.Logger, cfg *config.Config, loader Loader, gameDepth uint64, client *ethclient.Client, provider types.TraceProvider, updater types.OracleUpdater, txMgr txmgr.TxManager) (*service, error) { + if err := ValidateAbsolutePrestate(ctx, provider, loader); err != nil { + return nil, fmt.Errorf("failed to validate absolute prestate: %w", err) + } + + gameLogger := logger.New("game", cfg.GameAddress) + responder, err := NewFaultResponder(gameLogger, txMgr, cfg.GameAddress) + if err != nil { + return nil, fmt.Errorf("failed to create the responder: %w", err) + } + + caller, err := NewFaultCallerFromBindings(cfg.GameAddress, client, gameLogger) + if err != nil { + return nil, fmt.Errorf("failed to bind the fault contract: %w", err) + } + + return &service{ + agent: NewAgent(loader, int(gameDepth), provider, responder, updater, cfg.AgreeWithProposedOutput, gameLogger), + agreeWithProposedOutput: cfg.AgreeWithProposedOutput, + caller: caller, + logger: gameLogger, + }, nil +} + +// ValidateAbsolutePrestate validates the absolute prestate of the fault game. +func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, loader Loader) error { + providerPrestate, err := trace.AbsolutePreState(ctx) + if err != nil { + return fmt.Errorf("failed to get the trace provider's absolute prestate: %w", err) + } + providerPrestateHash, err := trace.StateHash(ctx, providerPrestate) + if err != nil { + return fmt.Errorf("failed to compute state-hash: %w", err) + } + onchainPrestateHash, err := loader.FetchAbsolutePrestateHash(ctx) + if err != nil { + return fmt.Errorf("failed to get the onchain absolute prestate: %w", err) + } + if providerPrestateHash != onchainPrestateHash { + return fmt.Errorf("trace provider's absolute prestate does not match onchain absolute prestate") + } + return nil +} + +// MonitorGame monitors the fault dispute game and attempts to progress it. +func (s *service) MonitorGame(ctx context.Context) error { + return MonitorGame(ctx, s.logger, s.agreeWithProposedOutput, s.agent, s.caller) +} diff --git a/op-challenger/fault/service_test.go b/op-challenger/fault/service_test.go new file mode 100644 index 000000000000..5e6ff3fa5060 --- /dev/null +++ b/op-challenger/fault/service_test.go @@ -0,0 +1,113 @@ +package fault + +import ( + "context" + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + + "github.com/ethereum-optimism/optimism/op-challenger/fault/types" +) + +var ( + mockTraceProviderError = fmt.Errorf("mock trace provider error") + mockLoaderError = fmt.Errorf("mock loader error") +) + +// TestValidateAbsolutePrestate tests that the absolute prestate is validated +// correctly by the service component. +func TestValidateAbsolutePrestate(t *testing.T) { + t.Run("ValidPrestates", func(t *testing.T) { + prestate := []byte{0x00, 0x01, 0x02, 0x03} + prestateHash := mockStateHash(prestate) + mockTraceProvider := newMockTraceProvider(false, prestate) + mockLoader := newMockLoader(false, prestateHash) + err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) + require.NoError(t, err) + }) + + t.Run("TraceProviderErrors", func(t *testing.T) { + prestate := []byte{0x00, 0x01, 0x02, 0x03} + mockTraceProvider := newMockTraceProvider(true, prestate) + mockLoader := newMockLoader(false, mockStateHash(prestate)) + err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) + require.ErrorIs(t, err, mockTraceProviderError) + }) + + t.Run("LoaderErrors", func(t *testing.T) { + prestate := []byte{0x00, 0x01, 0x02, 0x03} + mockTraceProvider := newMockTraceProvider(false, prestate) + mockLoader := newMockLoader(true, mockStateHash(prestate)) + err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) + require.ErrorIs(t, err, mockLoaderError) + }) + + t.Run("PrestateMismatch", func(t *testing.T) { + mockTraceProvider := newMockTraceProvider(false, []byte{0x00, 0x01, 0x02, 0x03}) + mockLoader := newMockLoader(false, common.Hash{0x00}) + err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) + require.Error(t, err) + }) +} + +type mockTraceProvider struct { + prestateErrors bool + prestate []byte +} + +func newMockTraceProvider(prestateErrors bool, prestate []byte) *mockTraceProvider { + return &mockTraceProvider{ + prestateErrors: prestateErrors, + prestate: prestate, + } +} +func (m *mockTraceProvider) Get(ctx context.Context, i uint64) (common.Hash, error) { + panic("not implemented") +} +func (m *mockTraceProvider) GetStepData(ctx context.Context, i uint64) (prestate []byte, proofData []byte, preimageData *types.PreimageOracleData, err error) { + panic("not implemented") +} +func (m *mockTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, error) { + if m.prestateErrors { + return nil, mockTraceProviderError + } + return m.prestate, nil +} + +func mockStateHash(state []byte) common.Hash { + h := crypto.Keccak256Hash(state) + h[0] = types.VMStatusValid + return h +} + +func (m *mockTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { + return mockStateHash(state), nil +} + +type mockLoader struct { + prestateError bool + prestateHash common.Hash +} + +func newMockLoader(prestateError bool, prestateHash common.Hash) *mockLoader { + return &mockLoader{ + prestateError: prestateError, + prestateHash: prestateHash, + } +} +func (m *mockLoader) FetchClaims(ctx context.Context) ([]types.Claim, error) { + panic("not implemented") +} +func (m *mockLoader) FetchGameDepth(ctx context.Context) (uint64, error) { + panic("not implemented") +} +func (m *mockLoader) FetchAbsolutePrestateHash(ctx context.Context) (common.Hash, error) { + if m.prestateError { + return common.Hash{}, mockLoaderError + } + return m.prestateHash, nil +} diff --git a/op-challenger/game/fault/loader.go b/op-challenger/game/fault/loader.go index b0f68cc699dd..4a336052a041 100644 --- a/op-challenger/game/fault/loader.go +++ b/op-challenger/game/fault/loader.go @@ -138,16 +138,15 @@ func (l *loader) FetchClaims(ctx context.Context) ([]types.Claim, error) { } // FetchAbsolutePrestateHash fetches the hashed absolute prestate from the fault dispute game. -func (l *loader) FetchAbsolutePrestateHash(ctx context.Context) ([]byte, error) { +func (l *loader) FetchAbsolutePrestateHash(ctx context.Context) (common.Hash, error) { callOpts := bind.CallOpts{ Context: ctx, } absolutePrestate, err := l.caller.ABSOLUTEPRESTATE(&callOpts) if err != nil { - return nil, err + return common.Hash{}, err } - returnValue := absolutePrestate[:] - return returnValue, nil + return absolutePrestate, nil } diff --git a/op-challenger/game/fault/trace/alphabet/provider.go b/op-challenger/game/fault/trace/alphabet/provider.go index af434c2fa973..f2642f1e774e 100644 --- a/op-challenger/game/fault/trace/alphabet/provider.go +++ b/op-challenger/game/fault/trace/alphabet/provider.go @@ -9,6 +9,8 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + + "github.com/ethereum-optimism/optimism/op-challenger/fault/types" ) var ( @@ -58,7 +60,7 @@ func (ap *AlphabetTraceProvider) Get(ctx context.Context, i uint64) (common.Hash if err != nil { return common.Hash{}, err } - return crypto.Keccak256Hash(claimBytes), nil + return alphabetStateHash(claimBytes), nil } // AbsolutePreState returns the absolute pre-state for the alphabet trace. @@ -66,11 +68,31 @@ func (ap *AlphabetTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, return common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000060"), nil } +func (ap *AlphabetTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { + return alphabetStateHash(state), nil +} + // BuildAlphabetPreimage constructs the claim bytes for the index and state item. func BuildAlphabetPreimage(i uint64, letter string) []byte { return append(IndexToBytes(i), LetterToBytes(letter)...) } +const maxAlphabet = 26 + +func alphabetStateHash(state []byte) common.Hash { + h := crypto.Keccak256Hash(state) + // instead of the state containing an "exited" boolean, we just check if the index reached the end + i := new(big.Int).SetBytes(state[:32]) + if !i.IsUint64() || i.Uint64() > maxAlphabet { + h[0] = types.VMStatusPanic // this state should never be reached, if we increment by 1 per step + } else if i.Uint64() == maxAlphabet { + h[0] = types.VMStatusValid + } else { + h[0] = types.VMStatusUnfinished + } + return h +} + // IndexToBytes converts an index to a byte slice big endian func IndexToBytes(i uint64) []byte { big := new(big.Int) diff --git a/op-challenger/game/fault/trace/alphabet/provider_test.go b/op-challenger/game/fault/trace/alphabet/provider_test.go index f32ed8c4f757..20baa8714027 100644 --- a/op-challenger/game/fault/trace/alphabet/provider_test.go +++ b/op-challenger/game/fault/trace/alphabet/provider_test.go @@ -6,12 +6,11 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/require" ) func alphabetClaim(index uint64, letter string) common.Hash { - return crypto.Keccak256Hash(BuildAlphabetPreimage(index, letter)) + return alphabetStateHash(BuildAlphabetPreimage(index, letter)) } // TestAlphabetProvider_Get_ClaimsByTraceIndex tests the [fault.AlphabetProvider] Get function. @@ -60,7 +59,7 @@ func FuzzIndexToBytes(f *testing.F) { // returns the correct pre-image for a index. func TestGetStepData_Succeeds(t *testing.T) { ap := NewTraceProvider("abc", 2) - expected := BuildAlphabetPreimage(0, "a'") + expected := BuildAlphabetPreimage(0, "a") retrieved, proof, data, err := ap.GetStepData(context.Background(), uint64(1)) require.NoError(t, err) require.Equal(t, expected, retrieved) diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index bfd2a3cdd31f..f06b6bc02d75 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -15,9 +15,13 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/cannon/mipsevm" + "github.com/ethereum-optimism/optimism/op-bindings/bindings" + "github.com/ethereum-optimism/optimism/op-challenger/config" + "github.com/ethereum-optimism/optimism/op-challenger/fault/types" ) const ( @@ -25,7 +29,7 @@ const ( ) type proofData struct { - ClaimValue hexutil.Bytes `json:"post"` + ClaimValue common.Hash `json:"post"` StateData hexutil.Bytes `json:"state-data"` ProofData hexutil.Bytes `json:"proof-data"` OracleKey hexutil.Bytes `json:"oracle-key,omitempty"` @@ -86,7 +90,7 @@ func (p *CannonTraceProvider) Get(ctx context.Context, i uint64) (common.Hash, e if err != nil { return common.Hash{}, err } - value := common.BytesToHash(proof.ClaimValue) + value := proof.ClaimValue if value == (common.Hash{}) { return common.Hash{}, errors.New("proof missing post hash") @@ -152,8 +156,8 @@ func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*proofDa // No execution is done, so no proof-data or oracle values are required. witness := state.EncodeWitness() proof := &proofData{ - ClaimValue: crypto.Keccak256(witness), - StateData: witness, + ClaimValue: witness.StateHash(), + StateData: hexutil.Bytes(witness), ProofData: []byte{}, OracleKey: nil, OracleValue: nil, @@ -177,3 +181,7 @@ func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*proofDa } return &proof, nil } + +func (p *CannonTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { + return mipsevm.StateWitness(state).StateHash(), nil +} diff --git a/op-challenger/game/fault/trace/cannon/provider_test.go b/op-challenger/game/fault/trace/cannon/provider_test.go index b3093ab58322..151e1cddacef 100644 --- a/op-challenger/game/fault/trace/cannon/provider_test.go +++ b/op-challenger/game/fault/trace/cannon/provider_test.go @@ -15,7 +15,6 @@ import ( "github.com/ethereum-optimism/optimism/op-node/testlog" "github.com/ethereum-optimism/optimism/op-service/ioutil" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" ) @@ -43,7 +42,9 @@ func TestGet(t *testing.T) { value, err := provider.Get(context.Background(), 7000) require.NoError(t, err) require.Contains(t, generator.generated, 7000, "should have tried to generate the proof") - require.Equal(t, crypto.Keccak256Hash(generator.finalState.EncodeWitness()), value) + stateHash, err := provider.StateHash(context.Background(), generator.finalState.EncodeWitness()) + require.NoError(t, err) + require.Equal(t, stateHash, value) }) t.Run("MissingPostHash", func(t *testing.T) { @@ -86,7 +87,7 @@ func TestGetStepData(t *testing.T) { Exited: true, } generator.proof = &proofData{ - ClaimValue: common.Hash{0xaa}.Bytes(), + ClaimValue: common.Hash{0xaa}, StateData: []byte{0xbb}, ProofData: []byte{0xcc}, OracleKey: common.Hash{0xdd}.Bytes(), @@ -111,7 +112,7 @@ func TestGetStepData(t *testing.T) { Exited: true, } generator.proof = &proofData{ - ClaimValue: common.Hash{0xaa}.Bytes(), + ClaimValue: common.Hash{0xaa}, StateData: []byte{0xbb}, ProofData: []byte{0xcc}, OracleKey: common.Hash{0xdd}.Bytes(), @@ -185,7 +186,7 @@ func TestAbsolutePreState(t *testing.T) { Step: 0, Registers: [32]uint32{}, } - require.Equal(t, state.EncodeWitness(), preState) + require.Equal(t, []byte(state.EncodeWitness()), preState) }) } diff --git a/op-challenger/game/fault/types/types.go b/op-challenger/game/fault/types/types.go index 92da98d827f8..69797d457dbb 100644 --- a/op-challenger/game/fault/types/types.go +++ b/op-challenger/game/fault/types/types.go @@ -105,8 +105,18 @@ type TraceProvider interface { // AbsolutePreState is the pre-image value of the trace that transitions to the trace value at index 0 AbsolutePreState(ctx context.Context) (preimage []byte, err error) + + // StateHash computes the state-hash of the given state, or returns an error if the state is invalid. + StateHash(ctx context.Context, state []byte) (common.Hash, error) } +const ( + VMStatusValid = 0 + VMStatusInvalid = 1 + VMStatusPanic = 2 + VMStatusUnfinished = 3 +) + // ClaimData is the core of a claim. It must be unique inside a specific game. type ClaimData struct { Value common.Hash diff --git a/packages/contracts-bedrock/src/cannon/MIPS.sol b/packages/contracts-bedrock/src/cannon/MIPS.sol index 28a96fdc9181..1fc67286632a 100644 --- a/packages/contracts-bedrock/src/cannon/MIPS.sol +++ b/packages/contracts-bedrock/src/cannon/MIPS.sol @@ -103,7 +103,9 @@ contract MIPS { from, to := copyMem(from, to, 4) // lo from, to := copyMem(from, to, 4) // hi from, to := copyMem(from, to, 4) // heap + let exitCode := shr(248, mload(from)) from, to := copyMem(from, to, 1) // exitCode + let exited := shr(248, mload(from)) from, to := copyMem(from, to, 1) // exited from, to := copyMem(from, to, 8) // step from := add(from, 32) // offset to registers @@ -117,8 +119,20 @@ contract MIPS { // Log the resulting MIPS state, for debugging log0(start, sub(to, start)) + function vmStatus(_exited, _exitCode) -> status_ { + switch _exited + case 1 { + switch _exitCode + case 0 { status_ := 0 } // VMStatusValid + case 1 { status_ := 1 } // VMStatusInvalid + default { status_ := 2 } // VMStatusPanic + } default { status_ := 3 } // VMStatusUnfinished + } + let status := vmStatus(exited, exitCode) + // Compute the hash of the resulting MIPS state out_ := keccak256(start, sub(to, start)) + out_ := or(shl(248, status), and(not(shl(248, 0xff)), out_)) } } diff --git a/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol b/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol index d831ce2a6758..27ba98369f5c 100644 --- a/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol +++ b/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol @@ -91,6 +91,10 @@ contract DisputeGameFactory is OwnableUpgradeable, IDisputeGameFactory, Semver { // If there is no implementation to clone for the given `GameType`, revert. if (address(impl) == address(0)) revert NoImplementation(_gameType); + // The VMStatus must indicate (1) 'invalid', to argue that disputed thing is invalid. + // Games that agree with the existing outcome are not allowed. + if (uint8(Claim.unwrap(_rootClaim)[0]) != 1) revert UnexpectedRootClaim(_rootClaim); + // Clone the implementation contract and initialize it with the given parameters. proxy_ = IDisputeGame(address(impl).clone(abi.encodePacked(_rootClaim, _extraData))); proxy_.initialize(); diff --git a/packages/contracts-bedrock/src/libraries/DisputeErrors.sol b/packages/contracts-bedrock/src/libraries/DisputeErrors.sol index e6051da64b8e..a2ba22eb83bb 100644 --- a/packages/contracts-bedrock/src/libraries/DisputeErrors.sol +++ b/packages/contracts-bedrock/src/libraries/DisputeErrors.sol @@ -15,6 +15,11 @@ error NoImplementation(GameType gameType); /// @param uuid The UUID of the dispute game that already exists. error GameAlreadyExists(Hash uuid); +/// @notice Thrown when the root claim has an unexpected VM status. +/// Some games can only start with a root-claim with a specific status. +/// @param rootClaim is the claim that was unexpected. +error UnexpectedRootClaim(Claim rootClaim); + //////////////////////////////////////////////////////////////// // `FaultDisputeGame` Errors // //////////////////////////////////////////////////////////////// diff --git a/packages/contracts-bedrock/test/DisputeGameFactory.t.sol b/packages/contracts-bedrock/test/DisputeGameFactory.t.sol index bd78e88fecae..a93d91b712a0 100644 --- a/packages/contracts-bedrock/test/DisputeGameFactory.t.sol +++ b/packages/contracts-bedrock/test/DisputeGameFactory.t.sol @@ -36,11 +36,19 @@ contract DisputeGameFactory_Init is L2OutputOracle_Initializer { } contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init { + function changeClaimStatus(Claim claim, uint8 status) public pure returns (Claim _out) { + bytes32 hash = Claim.unwrap(claim); + hash = bytes32((uint256(hash) & (~(uint256(0xff) << 248))) | (uint256(status) << 248)); + return Claim.wrap(hash); + } + /// @dev Tests that the `create` function succeeds when creating a new dispute game /// with a `GameType` that has an implementation set. function testFuzz_create_succeeds(uint8 gameType, Claim rootClaim, bytes calldata extraData) public { // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. GameType gt = GameType.wrap(uint8(bound(gameType, 0, 2))); + // Ensure the rootClaim has a VMStatus that disagrees with the validity. + rootClaim = changeClaimStatus(rootClaim, 1); // Set all three implementations to the same `FakeClone` contract. for (uint8 i; i < 3; i++) { @@ -68,15 +76,30 @@ contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init { function testFuzz_create_noImpl_reverts(uint8 gameType, Claim rootClaim, bytes calldata extraData) public { // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. GameType gt = GameType.wrap(uint8(bound(gameType, 0, 2))); + // Ensure the rootClaim has a VMStatus that disagrees with the validity. + rootClaim = changeClaimStatus(rootClaim, 1); vm.expectRevert(abi.encodeWithSelector(NoImplementation.selector, gt)); factory.create(gt, rootClaim, extraData); } + /// @dev Tests that the `create` function reverts when the rootClaim does not disagree with the outcome. + function testFuzz_create_badRootStatus_reverts(uint8 gameType, Claim rootClaim, bytes calldata extraData) public { + // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. + GameType gt = GameType.wrap(uint8(bound(gameType, 0, 2))); + // Ensure the root claim does not have the correct VM status + if (uint8(Claim.unwrap(rootClaim)[0]) == 1) rootClaim = changeClaimStatus(rootClaim, 0); + + vm.expectRevert(abi.encodeWithSelector(UnexpectedRootClaim.selector, rootClaim)); + factory.create(gt, rootClaim, extraData); + } + /// @dev Tests that the `create` function reverts when there exists a dispute game with the same UUID. function testFuzz_create_sameUUID_reverts(uint8 gameType, Claim rootClaim, bytes calldata extraData) public { // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. GameType gt = GameType.wrap(uint8(bound(gameType, 0, 2))); + // Ensure the rootClaim has a VMStatus that disagrees with the validity. + rootClaim = changeClaimStatus(rootClaim, 1); // Set all three implementations to the same `FakeClone` contract. for (uint8 i; i < 3; i++) { diff --git a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol index 84584eb08e37..3d837942d17a 100644 --- a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol @@ -77,7 +77,7 @@ contract FaultDisputeGame_Init is DisputeGameFactory_Init { contract FaultDisputeGame_Test is FaultDisputeGame_Init { /// @dev The root claim of the game. - Claim internal constant ROOT_CLAIM = Claim.wrap(bytes32(uint256(10))); + Claim internal constant ROOT_CLAIM = Claim.wrap(bytes32((uint256(1) << 248) + uint256(10))); /// @dev The absolute prestate of the trace. Claim internal constant ABSOLUTE_PRESTATE = Claim.wrap(bytes32(uint256(0))); From cbb13433a8e53742b17529638188d8181466bc43 Mon Sep 17 00:00:00 2001 From: clabby Date: Sat, 2 Sep 2023 16:35:37 -0400 Subject: [PATCH 02/20] :broom: Resolve conflicts --- op-challenger/fault/service.go | 128 ------------------ op-challenger/fault/service_test.go | 113 ---------------- .../game/fault/trace/alphabet/provider.go | 2 - .../game/fault/trace/cannon/provider.go | 3 - 4 files changed, 246 deletions(-) delete mode 100644 op-challenger/fault/service.go delete mode 100644 op-challenger/fault/service_test.go diff --git a/op-challenger/fault/service.go b/op-challenger/fault/service.go deleted file mode 100644 index e7f1be30df8b..000000000000 --- a/op-challenger/fault/service.go +++ /dev/null @@ -1,128 +0,0 @@ -package fault - -import ( - "context" - "fmt" - - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-challenger/config" - "github.com/ethereum-optimism/optimism/op-challenger/fault/alphabet" - "github.com/ethereum-optimism/optimism/op-challenger/fault/cannon" - "github.com/ethereum-optimism/optimism/op-challenger/fault/types" - "github.com/ethereum-optimism/optimism/op-service/client" - "github.com/ethereum-optimism/optimism/op-service/txmgr" - "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/log" -) - -// Service provides a clean interface for the challenger to interact -// with the fault package. -type Service interface { - // MonitorGame monitors the fault dispute game and attempts to progress it. - MonitorGame(context.Context) error -} - -type service struct { - agent *Agent - agreeWithProposedOutput bool - caller *FaultCaller - logger log.Logger -} - -// NewService creates a new Service. -func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*service, error) { - txMgr, err := txmgr.NewSimpleTxManager("challenger", logger, &metrics.NoopTxMetrics{}, cfg.TxMgrConfig) - if err != nil { - return nil, fmt.Errorf("failed to create the transaction manager: %w", err) - } - - client, err := client.DialEthClientWithTimeout(client.DefaultDialTimeout, logger, cfg.L1EthRpc) - if err != nil { - return nil, fmt.Errorf("failed to dial L1: %w", err) - } - - contract, err := bindings.NewFaultDisputeGameCaller(cfg.GameAddress, client) - if err != nil { - return nil, fmt.Errorf("failed to bind the fault dispute game contract: %w", err) - } - - loader := NewLoader(contract) - - gameDepth, err := loader.FetchGameDepth(ctx) - if err != nil { - return nil, fmt.Errorf("failed to fetch the game depth: %w", err) - } - gameDepth = uint64(gameDepth) - - var trace types.TraceProvider - var updater types.OracleUpdater - switch cfg.TraceType { - case config.TraceTypeCannon: - trace, err = cannon.NewTraceProvider(ctx, logger, cfg, client) - if err != nil { - return nil, fmt.Errorf("create cannon trace provider: %w", err) - } - updater, err = cannon.NewOracleUpdater(ctx, logger, txMgr, cfg.GameAddress, client) - if err != nil { - return nil, fmt.Errorf("failed to create the cannon updater: %w", err) - } - case config.TraceTypeAlphabet: - trace = alphabet.NewTraceProvider(cfg.AlphabetTrace, gameDepth) - updater = alphabet.NewOracleUpdater(logger) - default: - return nil, fmt.Errorf("unsupported trace type: %v", cfg.TraceType) - } - - return newTypedService(ctx, logger, cfg, loader, gameDepth, client, trace, updater, txMgr) -} - -// newTypedService creates a new Service from a provided trace provider. -func newTypedService(ctx context.Context, logger log.Logger, cfg *config.Config, loader Loader, gameDepth uint64, client *ethclient.Client, provider types.TraceProvider, updater types.OracleUpdater, txMgr txmgr.TxManager) (*service, error) { - if err := ValidateAbsolutePrestate(ctx, provider, loader); err != nil { - return nil, fmt.Errorf("failed to validate absolute prestate: %w", err) - } - - gameLogger := logger.New("game", cfg.GameAddress) - responder, err := NewFaultResponder(gameLogger, txMgr, cfg.GameAddress) - if err != nil { - return nil, fmt.Errorf("failed to create the responder: %w", err) - } - - caller, err := NewFaultCallerFromBindings(cfg.GameAddress, client, gameLogger) - if err != nil { - return nil, fmt.Errorf("failed to bind the fault contract: %w", err) - } - - return &service{ - agent: NewAgent(loader, int(gameDepth), provider, responder, updater, cfg.AgreeWithProposedOutput, gameLogger), - agreeWithProposedOutput: cfg.AgreeWithProposedOutput, - caller: caller, - logger: gameLogger, - }, nil -} - -// ValidateAbsolutePrestate validates the absolute prestate of the fault game. -func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, loader Loader) error { - providerPrestate, err := trace.AbsolutePreState(ctx) - if err != nil { - return fmt.Errorf("failed to get the trace provider's absolute prestate: %w", err) - } - providerPrestateHash, err := trace.StateHash(ctx, providerPrestate) - if err != nil { - return fmt.Errorf("failed to compute state-hash: %w", err) - } - onchainPrestateHash, err := loader.FetchAbsolutePrestateHash(ctx) - if err != nil { - return fmt.Errorf("failed to get the onchain absolute prestate: %w", err) - } - if providerPrestateHash != onchainPrestateHash { - return fmt.Errorf("trace provider's absolute prestate does not match onchain absolute prestate") - } - return nil -} - -// MonitorGame monitors the fault dispute game and attempts to progress it. -func (s *service) MonitorGame(ctx context.Context) error { - return MonitorGame(ctx, s.logger, s.agreeWithProposedOutput, s.agent, s.caller) -} diff --git a/op-challenger/fault/service_test.go b/op-challenger/fault/service_test.go deleted file mode 100644 index 5e6ff3fa5060..000000000000 --- a/op-challenger/fault/service_test.go +++ /dev/null @@ -1,113 +0,0 @@ -package fault - -import ( - "context" - "fmt" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - - "github.com/ethereum-optimism/optimism/op-challenger/fault/types" -) - -var ( - mockTraceProviderError = fmt.Errorf("mock trace provider error") - mockLoaderError = fmt.Errorf("mock loader error") -) - -// TestValidateAbsolutePrestate tests that the absolute prestate is validated -// correctly by the service component. -func TestValidateAbsolutePrestate(t *testing.T) { - t.Run("ValidPrestates", func(t *testing.T) { - prestate := []byte{0x00, 0x01, 0x02, 0x03} - prestateHash := mockStateHash(prestate) - mockTraceProvider := newMockTraceProvider(false, prestate) - mockLoader := newMockLoader(false, prestateHash) - err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) - require.NoError(t, err) - }) - - t.Run("TraceProviderErrors", func(t *testing.T) { - prestate := []byte{0x00, 0x01, 0x02, 0x03} - mockTraceProvider := newMockTraceProvider(true, prestate) - mockLoader := newMockLoader(false, mockStateHash(prestate)) - err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) - require.ErrorIs(t, err, mockTraceProviderError) - }) - - t.Run("LoaderErrors", func(t *testing.T) { - prestate := []byte{0x00, 0x01, 0x02, 0x03} - mockTraceProvider := newMockTraceProvider(false, prestate) - mockLoader := newMockLoader(true, mockStateHash(prestate)) - err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) - require.ErrorIs(t, err, mockLoaderError) - }) - - t.Run("PrestateMismatch", func(t *testing.T) { - mockTraceProvider := newMockTraceProvider(false, []byte{0x00, 0x01, 0x02, 0x03}) - mockLoader := newMockLoader(false, common.Hash{0x00}) - err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) - require.Error(t, err) - }) -} - -type mockTraceProvider struct { - prestateErrors bool - prestate []byte -} - -func newMockTraceProvider(prestateErrors bool, prestate []byte) *mockTraceProvider { - return &mockTraceProvider{ - prestateErrors: prestateErrors, - prestate: prestate, - } -} -func (m *mockTraceProvider) Get(ctx context.Context, i uint64) (common.Hash, error) { - panic("not implemented") -} -func (m *mockTraceProvider) GetStepData(ctx context.Context, i uint64) (prestate []byte, proofData []byte, preimageData *types.PreimageOracleData, err error) { - panic("not implemented") -} -func (m *mockTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, error) { - if m.prestateErrors { - return nil, mockTraceProviderError - } - return m.prestate, nil -} - -func mockStateHash(state []byte) common.Hash { - h := crypto.Keccak256Hash(state) - h[0] = types.VMStatusValid - return h -} - -func (m *mockTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { - return mockStateHash(state), nil -} - -type mockLoader struct { - prestateError bool - prestateHash common.Hash -} - -func newMockLoader(prestateError bool, prestateHash common.Hash) *mockLoader { - return &mockLoader{ - prestateError: prestateError, - prestateHash: prestateHash, - } -} -func (m *mockLoader) FetchClaims(ctx context.Context) ([]types.Claim, error) { - panic("not implemented") -} -func (m *mockLoader) FetchGameDepth(ctx context.Context) (uint64, error) { - panic("not implemented") -} -func (m *mockLoader) FetchAbsolutePrestateHash(ctx context.Context) (common.Hash, error) { - if m.prestateError { - return common.Hash{}, mockLoaderError - } - return m.prestateHash, nil -} diff --git a/op-challenger/game/fault/trace/alphabet/provider.go b/op-challenger/game/fault/trace/alphabet/provider.go index f2642f1e774e..c16e448b7a58 100644 --- a/op-challenger/game/fault/trace/alphabet/provider.go +++ b/op-challenger/game/fault/trace/alphabet/provider.go @@ -9,8 +9,6 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" - - "github.com/ethereum-optimism/optimism/op-challenger/fault/types" ) var ( diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index f06b6bc02d75..fcbe3520c30e 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -19,9 +19,6 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/cannon/mipsevm" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-challenger/config" - "github.com/ethereum-optimism/optimism/op-challenger/fault/types" ) const ( From e4b9e3b87a25ef2f8c4729942ffb343ace7eefab Mon Sep 17 00:00:00 2001 From: clabby Date: Sat, 2 Sep 2023 16:59:57 -0400 Subject: [PATCH 03/20] Fix challenger absolute prestate type --- op-challenger/game/fault/player.go | 4 ++-- op-challenger/game/fault/player_test.go | 21 +++++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/op-challenger/game/fault/player.go b/op-challenger/game/fault/player.go index 52e501ca5d9a..8582b3ff8829 100644 --- a/op-challenger/game/fault/player.go +++ b/op-challenger/game/fault/player.go @@ -159,7 +159,7 @@ func (g *GamePlayer) logGameStatus(ctx context.Context, status types.GameStatus) } type PrestateLoader interface { - FetchAbsolutePrestateHash(ctx context.Context) ([]byte, error) + FetchAbsolutePrestateHash(ctx context.Context) (common.Hash, error) } // ValidateAbsolutePrestate validates the absolute prestate of the fault game. @@ -173,7 +173,7 @@ func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, lo if err != nil { return fmt.Errorf("failed to get the onchain absolute prestate: %w", err) } - if !bytes.Equal(providerPrestateHash, onchainPrestate) { + if !bytes.Equal(providerPrestateHash, onchainPrestate[:]) { return fmt.Errorf("trace provider's absolute prestate does not match onchain absolute prestate") } return nil diff --git a/op-challenger/game/fault/player_test.go b/op-challenger/game/fault/player_test.go index 9ec939021fc0..b31e9edfd3af 100644 --- a/op-challenger/game/fault/player_test.go +++ b/op-challenger/game/fault/player_test.go @@ -120,7 +120,7 @@ func TestValidateAbsolutePrestate(t *testing.T) { prestate := []byte{0x00, 0x01, 0x02, 0x03} prestateHash := crypto.Keccak256(prestate) mockTraceProvider := newMockTraceProvider(false, prestate) - mockLoader := newMockPrestateLoader(false, prestateHash) + mockLoader := newMockPrestateLoader(false, common.BytesToHash(prestateHash)) err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) require.NoError(t, err) }) @@ -128,7 +128,7 @@ func TestValidateAbsolutePrestate(t *testing.T) { t.Run("TraceProviderErrors", func(t *testing.T) { prestate := []byte{0x00, 0x01, 0x02, 0x03} mockTraceProvider := newMockTraceProvider(true, prestate) - mockLoader := newMockPrestateLoader(false, prestate) + mockLoader := newMockPrestateLoader(false, common.BytesToHash(prestate)) err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) require.ErrorIs(t, err, mockTraceProviderError) }) @@ -136,14 +136,14 @@ func TestValidateAbsolutePrestate(t *testing.T) { t.Run("LoaderErrors", func(t *testing.T) { prestate := []byte{0x00, 0x01, 0x02, 0x03} mockTraceProvider := newMockTraceProvider(false, prestate) - mockLoader := newMockPrestateLoader(true, prestate) + mockLoader := newMockPrestateLoader(true, common.BytesToHash(prestate)) err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) require.ErrorIs(t, err, mockLoaderError) }) t.Run("PrestateMismatch", func(t *testing.T) { mockTraceProvider := newMockTraceProvider(false, []byte{0x00, 0x01, 0x02, 0x03}) - mockLoader := newMockPrestateLoader(false, []byte{0x00}) + mockLoader := newMockPrestateLoader(false, common.BytesToHash([]byte{0x00})) err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) require.Error(t, err) }) @@ -210,20 +210,25 @@ func (m *mockTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, error return m.prestate, nil } +// StateHash computes the state-hash of the given state, or returns an error if the state is invalid. +func (m *mockTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { + panic("not implemented") +} + type mockLoader struct { prestateError bool - prestate []byte + prestate common.Hash } -func newMockPrestateLoader(prestateError bool, prestate []byte) *mockLoader { +func newMockPrestateLoader(prestateError bool, prestate common.Hash) *mockLoader { return &mockLoader{ prestateError: prestateError, prestate: prestate, } } -func (m *mockLoader) FetchAbsolutePrestateHash(ctx context.Context) ([]byte, error) { +func (m *mockLoader) FetchAbsolutePrestateHash(ctx context.Context) (common.Hash, error) { if m.prestateError { - return nil, mockLoaderError + return common.Hash{}, mockLoaderError } return m.prestate, nil } From 98bfbd8199e88cd388e1c68b8ebf3bcc6a2ae079 Mon Sep 17 00:00:00 2001 From: clabby Date: Sat, 2 Sep 2023 18:02:56 -0400 Subject: [PATCH 04/20] Fix first `MIPS` tests --- op-bindings/bindings/faultdisputegame.go | 4 ++-- op-bindings/bindings/faultdisputegame_more.go | 2 +- op-bindings/bindings/mips.go | 2 +- op-bindings/bindings/mips_more.go | 4 ++-- .../contracts-bedrock/src/cannon/MIPS.sol | 13 +++++++---- .../src/dispute/DisputeGameFactory.sol | 4 ---- .../src/dispute/FaultDisputeGame.sol | 4 ++++ .../test/DisputeGameFactory.t.sol | 23 +++++-------------- .../test/FaultDisputeGame.t.sol | 16 +++++++++++++ packages/contracts-bedrock/test/MIPS.t.sol | 21 +++++++++++++++++ 10 files changed, 62 insertions(+), 31 deletions(-) diff --git a/op-bindings/bindings/faultdisputegame.go b/op-bindings/bindings/faultdisputegame.go index 5f693b553bb9..e681bb82e298 100644 --- a/op-bindings/bindings/faultdisputegame.go +++ b/op-bindings/bindings/faultdisputegame.go @@ -37,8 +37,8 @@ type IFaultDisputeGameOutputProposal struct { // FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract. var FaultDisputeGameMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2oo\",\"type\":\"address\"},{\"internalType\":\"contractBlockOracle\",\"name\":\"_blockOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1HeadTooOld\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_ORACLE\",\"outputs\":[{\"internalType\":\"contractBlockOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l1BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposals\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"starting\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"disputed\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162002cb338038062002cb38339810160408190526200003591620000a1565b6000608081905260a052600860c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612a976200021c600039600081816105220152611e5d01526000818161035e01526116e701526000818161059b015281816114b40152818161158801526116610152600081816104ec015281816107450152611bdc0152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed701526119e30152600081816102210152611b3f01526000610d3401526000610d0b01526000610ce20152612a976000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004612338565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612389565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b4366004612338565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b6040516102069190612440565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b60405161020692919061245a565b34801561043e57600080fd5b50610395610d7e565b6101d16104553660046124c3565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d1610618366004612338565b6118bd565b34801561062957600080fd5b5061063d6106383660046124f8565b6118c9565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd36600461255a565b61193a565b3480156106ce57600080fd5b506106d7611e5b565b604051610206939291906125e4565b6000805468010000000000000000900460ff16600281111561070a5761070a61235a565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d2919061260f565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb61235a565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612674565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61268b565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611eb8565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461268b565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61268b565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612674565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e91906126ba565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c019190612701565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c8061235a565b021790556002811115610c9557610c9561235a565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000611f6d565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000611f6d565b610d587f0000000000000000000000000000000000000000000000000000000000000000611f6d565b604051602001610d6a93929190612728565b604051602081830303815290604052905090565b6060610cc6602060406120aa565b6000805468010000000000000000900460ff166002811115610db057610db061235a565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61268b565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed39190859061214116565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361268b565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff1661108191906126ba565b61108b9190612674565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361268b565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526002919081016113e57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f00642061150e60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b815260040161152c91815260200190565b602060405180830381865afa158015611549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156d919061279e565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae5576115b8600185612674565b6040518263ffffffff1660e01b81526004016115d691815260200190565b606060405180830381865afa1580156115f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116179190612806565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa1580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190612806565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b815260040161175891815260200190565b6040805180830381865afa158015611774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117989190612892565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff16116117f7576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a081018252908190810180611812600189612674565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b600281815481106118d957600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff16600281111561195e5761195e61235a565b14611995576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600287815481106119aa576119aa61268b565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611a097f000000000000000000000000000000000000000000000000000000000000000060016126ba565b611aa5826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611ae6576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611b6957611b0a836fffffffffffffffffffffffffffffffff16612149565b67ffffffffffffffff1615611b3d57611b34611b27600186612919565b865463ffffffff166121ef565b60010154611b5f565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611b83565b84600101549150611b80846001611b27919061294a565b90505b818989604051611b9492919061297e565b604051809103902014611bd3576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611c3994939291906129d7565b6020604051808303816000875af1158015611c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7c919061279e565b600284810154929091149250600091611d27906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611dc3886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611dcd9190612a09565b611dd79190612701565b67ffffffffffffffff161590508115158103611e1f576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611eb1610d7e565b9050909192565b600080611f45847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b606081600003611fb057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611fda5780611fc481612a2a565b9150611fd39050600a83612a62565b9150611fb4565b60008167ffffffffffffffff811115611ff557611ff56127b7565b6040519080825280601f01601f19166020018201604052801561201f576020820181803683370190505b5090505b84156120a257612034600183612674565b9150612041600a86612a76565b61204c9060306126ba565b60f81b8183815181106120615761206161268b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061209b600a86612a62565b9450612023565b949350505050565b606060006120e184367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036126ba565b90508267ffffffffffffffff1667ffffffffffffffff811115612106576121066127b7565b6040519080825280601f01601f191660200182016040528015612130576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806121d6837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b60008061220d846fffffffffffffffffffffffffffffffff1661228c565b9050600283815481106122225761222261268b565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461228557815460028054909163ffffffff169081106122705761227061268b565b90600052602060002090600302019150612233565b5092915050565b60008119600183011681612320827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806040838503121561234b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106123c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b838110156123e55781810151838201526020016123cd565b8381111561089f5750506000910152565b6000815180845261240e8160208601602086016123ca565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061245360208301846123f6565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612453565b803580151581146124be57600080fd5b919050565b6000806000606084860312156124d857600080fd5b83359250602084013591506124ef604085016124ae565b90509250925092565b60006020828403121561250a57600080fd5b5035919050565b60008083601f84011261252357600080fd5b50813567ffffffffffffffff81111561253b57600080fd5b60208301915083602082850101111561255357600080fd5b9250929050565b6000806000806000806080878903121561257357600080fd5b86359550612583602088016124ae565b9450604087013567ffffffffffffffff808211156125a057600080fd5b6125ac8a838b01612511565b909650945060608901359150808211156125c557600080fd5b506125d289828a01612511565b979a9699509497509295939492505050565b60ff8416815282602082015260606040820152600061260660608301846123f6565b95945050505050565b60006020828403121561262157600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461245357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561268657612686612645565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156126cd576126cd612645565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff8084168061271c5761271c6126d2565b92169190910692915050565b6000845161273a8184602089016123ca565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612776816001850160208a016123ca565b600192019182015283516127918160028401602088016123ca565b0160020195945050505050565b6000602082840312156127b057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff811681146124be57600080fd5b60006060828403121561281857600080fd5b6040516060810181811067ffffffffffffffff82111715612862577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282518152612875602084016127e6565b6020820152612886604084016127e6565b60408201529392505050565b6000604082840312156128a457600080fd5b6040516040810167ffffffffffffffff82821081831117156128ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b816040528451835260208501519150808216821461290c57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561294257612942612645565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561297557612975612645565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040815260006129eb60408301868861298e565b82810360208401526129fe81858761298e565b979650505050505050565b600067ffffffffffffffff8381169083168181101561294257612942612645565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a5b57612a5b612645565b5060010190565b600082612a7157612a716126d2565b500490565b600082612a8557612a856126d2565b50069056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2oo\",\"type\":\"address\"},{\"internalType\":\"contractBlockOracle\",\"name\":\"_blockOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1HeadTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_ORACLE\",\"outputs\":[{\"internalType\":\"contractBlockOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l1BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposals\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"starting\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"disputed\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d4a38038062002d4a8339810160408190526200003591620000a1565b6000608081905260a052600860c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b2e6200021c600039600081816105220152611ef401526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611c730152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b2e6000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123cf565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612420565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123cf565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124d7565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b6040516102069291906124f1565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461255a565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123cf565b611954565b34801561062957600080fd5b5061063d61063836600461258f565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd3660046125f1565b6119d1565b3480156106ce57600080fd5b506106d7611ef2565b6040516102069392919061267b565b6000805468010000000000000000900460ff16600281111561070a5761070a6123f1565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126a6565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb6123f1565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061270b565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612722565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f4f565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612722565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612722565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261270b565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612751565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c019190612798565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c806123f1565b021790556002811115610c9557610c956123f1565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612004565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612004565b610d587f0000000000000000000000000000000000000000000000000000000000000000612004565b604051602001610d6a939291906127bf565b604051602081830303815290604052905090565b6060610cc660206040612141565b6000805468010000000000000000900460ff166002811115610db057610db06123f1565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612722565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121d816565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612722565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612751565b61108b919061270b565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612722565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612835565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561270b565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae919061289d565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611763919061289d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612929565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961270b565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f56123f1565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612722565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612751565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121e0565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129b0565b865463ffffffff16612286565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129e1565b90505b818989604051611c2b929190612a15565b604051809103902014611c6a576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611cd09493929190612a6e565b6020604051808303816000875af1158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d139190612835565b600284810154929091149250600091611dbe906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e5a886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e649190612aa0565b611e6e9190612798565b67ffffffffffffffff161590508115158103611eb6576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f48610d7e565b9050909192565b600080611fdc847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361204757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612071578061205b81612ac1565b915061206a9050600a83612af9565b915061204b565b60008167ffffffffffffffff81111561208c5761208c61284e565b6040519080825280601f01601f1916602001820160405280156120b6576020820181803683370190505b5090505b8415612139576120cb60018361270b565b91506120d8600a86612b0d565b6120e3906030612751565b60f81b8183815181106120f8576120f8612722565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612132600a86612af9565b94506120ba565b949350505050565b6060600061217884367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612751565b90508267ffffffffffffffff1667ffffffffffffffff81111561219d5761219d61284e565b6040519080825280601f01601f1916602001820160405280156121c7576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061226d837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122a4846fffffffffffffffffffffffffffffffff16612323565b9050600283815481106122b9576122b9612722565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461231c57815460028054909163ffffffff1690811061230757612307612722565b906000526020600020906003020191506122ca565b5092915050565b600081196001830116816123b7827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123e257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061245b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561247c578181015183820152602001612464565b8381111561089f5750506000910152565b600081518084526124a5816020860160208601612461565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124ea602083018461248d565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124ea565b8035801515811461255557600080fd5b919050565b60008060006060848603121561256f57600080fd5b833592506020840135915061258660408501612545565b90509250925092565b6000602082840312156125a157600080fd5b5035919050565b60008083601f8401126125ba57600080fd5b50813567ffffffffffffffff8111156125d257600080fd5b6020830191508360208285010111156125ea57600080fd5b9250929050565b6000806000806000806080878903121561260a57600080fd5b8635955061261a60208801612545565b9450604087013567ffffffffffffffff8082111561263757600080fd5b6126438a838b016125a8565b9096509450606089013591508082111561265c57600080fd5b5061266989828a016125a8565b979a9699509497509295939492505050565b60ff8416815282602082015260606040820152600061269d606083018461248d565b95945050505050565b6000602082840312156126b857600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124ea57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561271d5761271d6126dc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612764576127646126dc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127b3576127b3612769565b92169190910692915050565b600084516127d1818460208901612461565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161280d816001850160208a01612461565b60019201918201528351612828816002840160208801612461565b0160020195945050505050565b60006020828403121561284757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461255557600080fd5b6000606082840312156128af57600080fd5b6040516060810181811067ffffffffffffffff821117156128f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261290c6020840161287d565b602082015261291d6040840161287d565b60408201529392505050565b60006040828403121561293b57600080fd5b6040516040810167ffffffffffffffff8282108183111715612986577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129a357600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129d9576129d96126dc565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a0c57612a0c6126dc565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a82604083018688612a25565b8281036020840152612a95818587612a25565b979650505050505050565b600067ffffffffffffffff838116908316818110156129d9576129d96126dc565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612af257612af26126dc565b5060010190565b600082612b0857612b08612769565b500490565b600082612b1c57612b1c612769565b50069056fea164736f6c634300080f000a", } // FaultDisputeGameABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/faultdisputegame_more.go b/op-bindings/bindings/faultdisputegame_more.go index 96c543f12ff1..b3c8a58e8c89 100644 --- a/op-bindings/bindings/faultdisputegame_more.go +++ b/op-bindings/bindings/faultdisputegame_more.go @@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr var FaultDisputeGameStorageLayout = new(solc.StorageLayout) -var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004612338565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612389565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b4366004612338565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b6040516102069190612440565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b60405161020692919061245a565b34801561043e57600080fd5b50610395610d7e565b6101d16104553660046124c3565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d1610618366004612338565b6118bd565b34801561062957600080fd5b5061063d6106383660046124f8565b6118c9565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd36600461255a565b61193a565b3480156106ce57600080fd5b506106d7611e5b565b604051610206939291906125e4565b6000805468010000000000000000900460ff16600281111561070a5761070a61235a565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d2919061260f565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb61235a565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612674565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61268b565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611eb8565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461268b565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61268b565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612674565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e91906126ba565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c019190612701565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c8061235a565b021790556002811115610c9557610c9561235a565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000611f6d565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000611f6d565b610d587f0000000000000000000000000000000000000000000000000000000000000000611f6d565b604051602001610d6a93929190612728565b604051602081830303815290604052905090565b6060610cc6602060406120aa565b6000805468010000000000000000900460ff166002811115610db057610db061235a565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61268b565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed39190859061214116565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361268b565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff1661108191906126ba565b61108b9190612674565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361268b565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526002919081016113e57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f00642061150e60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b815260040161152c91815260200190565b602060405180830381865afa158015611549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156d919061279e565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae5576115b8600185612674565b6040518263ffffffff1660e01b81526004016115d691815260200190565b606060405180830381865afa1580156115f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116179190612806565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa1580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190612806565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b815260040161175891815260200190565b6040805180830381865afa158015611774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117989190612892565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff16116117f7576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a081018252908190810180611812600189612674565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b600281815481106118d957600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff16600281111561195e5761195e61235a565b14611995576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600287815481106119aa576119aa61268b565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611a097f000000000000000000000000000000000000000000000000000000000000000060016126ba565b611aa5826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611ae6576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611b6957611b0a836fffffffffffffffffffffffffffffffff16612149565b67ffffffffffffffff1615611b3d57611b34611b27600186612919565b865463ffffffff166121ef565b60010154611b5f565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611b83565b84600101549150611b80846001611b27919061294a565b90505b818989604051611b9492919061297e565b604051809103902014611bd3576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611c3994939291906129d7565b6020604051808303816000875af1158015611c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7c919061279e565b600284810154929091149250600091611d27906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611dc3886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611dcd9190612a09565b611dd79190612701565b67ffffffffffffffff161590508115158103611e1f576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611eb1610d7e565b9050909192565b600080611f45847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b606081600003611fb057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611fda5780611fc481612a2a565b9150611fd39050600a83612a62565b9150611fb4565b60008167ffffffffffffffff811115611ff557611ff56127b7565b6040519080825280601f01601f19166020018201604052801561201f576020820181803683370190505b5090505b84156120a257612034600183612674565b9150612041600a86612a76565b61204c9060306126ba565b60f81b8183815181106120615761206161268b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061209b600a86612a62565b9450612023565b949350505050565b606060006120e184367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036126ba565b90508267ffffffffffffffff1667ffffffffffffffff811115612106576121066127b7565b6040519080825280601f01601f191660200182016040528015612130576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806121d6837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b60008061220d846fffffffffffffffffffffffffffffffff1661228c565b9050600283815481106122225761222261268b565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461228557815460028054909163ffffffff169081106122705761227061268b565b90600052602060002090600302019150612233565b5092915050565b60008119600183011681612320827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806040838503121561234b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106123c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b838110156123e55781810151838201526020016123cd565b8381111561089f5750506000910152565b6000815180845261240e8160208601602086016123ca565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061245360208301846123f6565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612453565b803580151581146124be57600080fd5b919050565b6000806000606084860312156124d857600080fd5b83359250602084013591506124ef604085016124ae565b90509250925092565b60006020828403121561250a57600080fd5b5035919050565b60008083601f84011261252357600080fd5b50813567ffffffffffffffff81111561253b57600080fd5b60208301915083602082850101111561255357600080fd5b9250929050565b6000806000806000806080878903121561257357600080fd5b86359550612583602088016124ae565b9450604087013567ffffffffffffffff808211156125a057600080fd5b6125ac8a838b01612511565b909650945060608901359150808211156125c557600080fd5b506125d289828a01612511565b979a9699509497509295939492505050565b60ff8416815282602082015260606040820152600061260660608301846123f6565b95945050505050565b60006020828403121561262157600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461245357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561268657612686612645565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156126cd576126cd612645565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff8084168061271c5761271c6126d2565b92169190910692915050565b6000845161273a8184602089016123ca565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612776816001850160208a016123ca565b600192019182015283516127918160028401602088016123ca565b0160020195945050505050565b6000602082840312156127b057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff811681146124be57600080fd5b60006060828403121561281857600080fd5b6040516060810181811067ffffffffffffffff82111715612862577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282518152612875602084016127e6565b6020820152612886604084016127e6565b60408201529392505050565b6000604082840312156128a457600080fd5b6040516040810167ffffffffffffffff82821081831117156128ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b816040528451835260208501519150808216821461290c57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561294257612942612645565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561297557612975612645565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040815260006129eb60408301868861298e565b82810360208401526129fe81858761298e565b979650505050505050565b600067ffffffffffffffff8381169083168181101561294257612942612645565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a5b57612a5b612645565b5060010190565b600082612a7157612a716126d2565b500490565b600082612a8557612a856126d2565b50069056fea164736f6c634300080f000a" +var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123cf565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612420565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123cf565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124d7565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b6040516102069291906124f1565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461255a565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123cf565b611954565b34801561062957600080fd5b5061063d61063836600461258f565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd3660046125f1565b6119d1565b3480156106ce57600080fd5b506106d7611ef2565b6040516102069392919061267b565b6000805468010000000000000000900460ff16600281111561070a5761070a6123f1565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126a6565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb6123f1565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061270b565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612722565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f4f565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612722565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612722565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261270b565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612751565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c019190612798565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c806123f1565b021790556002811115610c9557610c956123f1565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612004565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612004565b610d587f0000000000000000000000000000000000000000000000000000000000000000612004565b604051602001610d6a939291906127bf565b604051602081830303815290604052905090565b6060610cc660206040612141565b6000805468010000000000000000900460ff166002811115610db057610db06123f1565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612722565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121d816565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612722565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612751565b61108b919061270b565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612722565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612835565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561270b565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae919061289d565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611763919061289d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612929565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961270b565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f56123f1565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612722565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612751565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121e0565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129b0565b865463ffffffff16612286565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129e1565b90505b818989604051611c2b929190612a15565b604051809103902014611c6a576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611cd09493929190612a6e565b6020604051808303816000875af1158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d139190612835565b600284810154929091149250600091611dbe906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e5a886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e649190612aa0565b611e6e9190612798565b67ffffffffffffffff161590508115158103611eb6576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f48610d7e565b9050909192565b600080611fdc847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361204757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612071578061205b81612ac1565b915061206a9050600a83612af9565b915061204b565b60008167ffffffffffffffff81111561208c5761208c61284e565b6040519080825280601f01601f1916602001820160405280156120b6576020820181803683370190505b5090505b8415612139576120cb60018361270b565b91506120d8600a86612b0d565b6120e3906030612751565b60f81b8183815181106120f8576120f8612722565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612132600a86612af9565b94506120ba565b949350505050565b6060600061217884367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612751565b90508267ffffffffffffffff1667ffffffffffffffff81111561219d5761219d61284e565b6040519080825280601f01601f1916602001820160405280156121c7576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061226d837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122a4846fffffffffffffffffffffffffffffffff16612323565b9050600283815481106122b9576122b9612722565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461231c57815460028054909163ffffffff1690811061230757612307612722565b906000526020600020906003020191506122ca565b5092915050565b600081196001830116816123b7827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123e257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061245b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561247c578181015183820152602001612464565b8381111561089f5750506000910152565b600081518084526124a5816020860160208601612461565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124ea602083018461248d565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124ea565b8035801515811461255557600080fd5b919050565b60008060006060848603121561256f57600080fd5b833592506020840135915061258660408501612545565b90509250925092565b6000602082840312156125a157600080fd5b5035919050565b60008083601f8401126125ba57600080fd5b50813567ffffffffffffffff8111156125d257600080fd5b6020830191508360208285010111156125ea57600080fd5b9250929050565b6000806000806000806080878903121561260a57600080fd5b8635955061261a60208801612545565b9450604087013567ffffffffffffffff8082111561263757600080fd5b6126438a838b016125a8565b9096509450606089013591508082111561265c57600080fd5b5061266989828a016125a8565b979a9699509497509295939492505050565b60ff8416815282602082015260606040820152600061269d606083018461248d565b95945050505050565b6000602082840312156126b857600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124ea57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561271d5761271d6126dc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612764576127646126dc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127b3576127b3612769565b92169190910692915050565b600084516127d1818460208901612461565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161280d816001850160208a01612461565b60019201918201528351612828816002840160208801612461565b0160020195945050505050565b60006020828403121561284757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461255557600080fd5b6000606082840312156128af57600080fd5b6040516060810181811067ffffffffffffffff821117156128f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261290c6020840161287d565b602082015261291d6040840161287d565b60408201529392505050565b60006040828403121561293b57600080fd5b6040516040810167ffffffffffffffff8282108183111715612986577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129a357600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129d9576129d96126dc565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a0c57612a0c6126dc565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a82604083018688612a25565b8281036020840152612a95818587612a25565b979650505050505050565b600067ffffffffffffffff838116908316818110156129d9576129d96126dc565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612af257612af26126dc565b5060010190565b600082612b0857612b08612769565b500490565b600082612b1c57612b1c612769565b50069056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(FaultDisputeGameStorageLayoutJSON), FaultDisputeGameStorageLayout); err != nil { diff --git a/op-bindings/bindings/mips.go b/op-bindings/bindings/mips.go index 0c8263aa52c3..2993a8b1bc05 100644 --- a/op-bindings/bindings/mips.go +++ b/op-bindings/bindings/mips.go @@ -31,7 +31,7 @@ var ( // MIPSMetaData contains all meta data concerning the MIPS contract. var MIPSMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BRK_START\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"oracle_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b50604051611e3e380380611e3e83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051611dad61009160003960008181608501526115730152611dad6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611cb2565b6100d0565b604051908152602001610062565b60006100da611bdf565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff169052606081015160009061020390826106c1565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff168261077d565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611d1e565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611d1e565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff166010610877565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611d1e565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f6858784876108ea565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff166010610877565b9095019463fffffffc861661043a8160016106c1565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610afa565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b8961077d565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a161561127e565b8063ffffffff16600b03610546576104f3858963ffffffff8a16151561127e565b8063ffffffff16600c0361055c576104f3611364565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f381898988611898565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611d1e565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611a92565b6106038583600161127e565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c51605482015261019f5160588201526101bf5160598201526101d851605a8201526000906102009060628101835b60208110156106ac57601c8401518252602090930192600490910190600101610688565b506000815281810382a0819003902092915050565b6000806106cd83611b36565b905060038416156106dd57600080fd5b6020810190358460051c8160005b601b8110156107435760208501943583821c6001168015610713576001811461072857610739565b60008481526020839052604090209350610739565b600082815260208590526040902093505b50506001016106eb565b50608051915081811461075e57630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610787611bdf565b60809050806060015160040163ffffffff16816080015163ffffffff1614610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff90811690935285831690529085161561086657806008018261016001518663ffffffff166020811061085557610855611d1e565b63ffffffff90921660209290920201525b61086e610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b01826108d45760006108d6565b815b90861663ffffffff16179250505092915050565b60006108f4611bdf565b608090506000816060015160040163ffffffff16826080015163ffffffff161461097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f740000000000000000000000006044820152606401610807565b8663ffffffff166004148061099557508663ffffffff166005145b15610a115760008261016001518663ffffffff16602081106109b9576109b9611d1e565b602002015190508063ffffffff168563ffffffff161480156109e157508763ffffffff166004145b80610a0957508063ffffffff168563ffffffff1614158015610a0957508763ffffffff166005145b915050610a8e565b8663ffffffff16600603610a2e5760008460030b13159050610a8e565b8663ffffffff16600703610a4a5760008460030b139050610a8e565b8663ffffffff16600103610a8e57601f601087901c166000819003610a735760008560030b1291505b8063ffffffff16600103610a8c5760008560030b121591505b505b606082018051608084015163ffffffff169091528115610ad4576002610ab98861ffff166010610877565b63ffffffff90811690911b8201600401166080840152610ae6565b60808301805160040163ffffffff1690525b610aee610619565b98975050505050505050565b6000603f601a86901c16801580610b29575060088163ffffffff1610158015610b295750600f8163ffffffff16105b15610f7f57603f86168160088114610b705760098114610b7957600a8114610b8257600b8114610b8b57600c8114610b9457600d8114610b9d57600e8114610ba657610bab565b60209150610bab565b60219150610bab565b602a9150610bab565b602b9150610bab565b60249150610bab565b60259150610bab565b602691505b508063ffffffff16600003610bd25750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610bf85750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610c2e57601f600688901c16610c2463ffffffff8716821c6020839003610877565b9350505050610611565b8063ffffffff16600403610c505750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610c725750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610ca557610c9c8663ffffffff168663ffffffff16901c87602003610877565b92505050610611565b8063ffffffff16600803610cbd578592505050610611565b8063ffffffff16600903610cd5578592505050610611565b8063ffffffff16600a03610ced578592505050610611565b8063ffffffff16600b03610d05578592505050610611565b8063ffffffff16600c03610d1d578592505050610611565b8063ffffffff16600f03610d35578592505050610611565b8063ffffffff16601003610d4d578592505050610611565b8063ffffffff16601103610d65578592505050610611565b8063ffffffff16601203610d7d578592505050610611565b8063ffffffff16601303610d95578592505050610611565b8063ffffffff16601803610dad578592505050610611565b8063ffffffff16601903610dc5578592505050610611565b8063ffffffff16601a03610ddd578592505050610611565b8063ffffffff16601b03610df5578592505050610611565b8063ffffffff16602003610e0e57505050828201610611565b8063ffffffff16602103610e2757505050828201610611565b8063ffffffff16602203610e4057505050818303610611565b8063ffffffff16602303610e5957505050818303610611565b8063ffffffff16602403610e7257505050828216610611565b8063ffffffff16602503610e8b57505050828217610611565b8063ffffffff16602603610ea457505050828218610611565b8063ffffffff16602703610ebe5750505082821719610611565b8063ffffffff16602a03610eef578460030b8660030b12610ee0576000610ee3565b60015b60ff1692505050610611565b8063ffffffff16602b03610f17578463ffffffff168663ffffffff1610610ee0576000610ee3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610807565b50610f17565b8063ffffffff16601c0361100357603f86166002819003610fa557505050828202610611565b8063ffffffff1660201480610fc057508063ffffffff166021145b15610f79578063ffffffff16602003610fd7579419945b60005b6380000000871615610ff9576401fffffffe600197881b169601610fda565b9250610611915050565b8063ffffffff16600f0361102557505065ffffffff0000601083901b16610611565b8063ffffffff16602003611059576101d38560031660080260180363ffffffff168463ffffffff16901c60ff166008610877565b8063ffffffff1660210361108e576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff166010610877565b8063ffffffff166022036110bd57505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036110d45782915050610611565b8063ffffffff16602403611106578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff16602503611139578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff1660260361116b57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff166028036111a157505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff166029036111d857505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361120757505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b0361121e5783915050610611565b8063ffffffff16602e0361125057505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112675782915050610611565b8063ffffffff16603803610f175783915050610611565b6000611288611bdf565b506080602063ffffffff8616106112fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610807565b63ffffffff85161580159061130d5750825b1561134157838161016001518663ffffffff166020811061133057611330611d1e565b63ffffffff90921660209290920201525b60808101805163ffffffff8082166060850152600490910116905261086e610619565b600061136e611bdf565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036113e85781610fff8116156113b757610fff811661100003015b8363ffffffff166000036113de5760e08801805163ffffffff8382011690915295506113e2565b8395505b50611857565b8563ffffffff16610fcd036114035763400000009450611857565b8563ffffffff166110180361141b5760019450611857565b8563ffffffff166110960361145057600161012088015260ff8316610100880152611444610619565b97505050505050505090565b8563ffffffff16610fa3036116ba5763ffffffff831615611857577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016116745760006114ab8363fffffffc1660016106c1565b60208901519091508060001a6001036115185761151581600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa1580156115b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd9190611d4d565b915091506003861680600403828110156115f5578092505b5081861015611602578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116598663fffffffc16600186611a92565b60408b018051820163ffffffff16905297506116b592505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff8416016116a957809450611857565b63ffffffff9450600993505b611857565b8563ffffffff16610fa4036117ab5763ffffffff8316600114806116e4575063ffffffff83166002145b806116f5575063ffffffff83166004145b1561170257809450611857565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016116a95760006117428363fffffffc1660016106c1565b6020890151909150600384166004038381101561175d578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b17602088015260006040880152935083611857565b8563ffffffff16610fd703611857578163ffffffff1660030361184b5763ffffffff831615806117e1575063ffffffff83166005145b806117f2575063ffffffff83166003145b156118005760009450611857565b63ffffffff83166001148061181b575063ffffffff83166002145b8061182c575063ffffffff83166006145b8061183d575063ffffffff83166004145b156116a95760019450611857565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b01526004019091169052611444610619565b60006118a2611bdf565b506080600063ffffffff87166010036118c0575060c0810151611a29565b8663ffffffff166011036118df5763ffffffff861660c0830152611a29565b8663ffffffff166012036118f8575060a0810151611a29565b8663ffffffff166013036119175763ffffffff861660a0830152611a29565b8663ffffffff1660180361194b5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611a29565b8663ffffffff1660190361197c5763ffffffff86811681871602602081901c821660c08501521660a0830152611a29565b8663ffffffff16601a036119d2578460030b8660030b8161199f5761199f611d71565b0763ffffffff1660c0830152600385810b9087900b816119c1576119c1611d71565b0563ffffffff1660a0830152611a29565b8663ffffffff16601b03611a29578463ffffffff168663ffffffff16816119fb576119fb611d71565b0663ffffffff90811660c084015285811690871681611a1c57611a1c611d71565b0463ffffffff1660a08301525b63ffffffff841615611a6457808261016001518563ffffffff1660208110611a5357611a53611d1e565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611a87610619565b979650505050505050565b6000611a9d83611b36565b90506003841615611aad57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611b2b5760208401933582821c6001168015611afb5760018114611b1057611b21565b60008581526020839052604090209450611b21565b600082815260208690526040902094505b5050600101611ad3565b505060805250505050565b60ff811661038002610184810190369061050401811015611bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610807565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611c45611c4a565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611c7b57600080fd5b50813567ffffffffffffffff811115611c9357600080fd5b602083019150836020828501011115611cab57600080fd5b9250929050565b60008060008060408587031215611cc857600080fd5b843567ffffffffffffffff80821115611ce057600080fd5b611cec88838901611c69565b90965094506020870135915080821115611d0557600080fd5b50611d1287828801611c69565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611d6057600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a", + Bin: "0x60a060405234801561001057600080fd5b50604051611ed2380380611ed283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051611e4161009160003960008181608501526116070152611e416000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d46565b6100d0565b604051908152602001610062565b60006100da611c73565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff16905260608101516000906102039082610755565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff1682610811565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611db2565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611db2565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff16601061090b565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611db2565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f68587848761097e565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff16601061090b565b9095019463fffffffc861661043a816001610755565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b8e565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b89610811565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a1615611312565b8063ffffffff16600b03610546576104f3858963ffffffff8a161515611312565b8063ffffffff16600c0361055c576104f36113f8565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f38189898861192c565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611db2565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b26565b61060385836001611312565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019160f890811c91901c855b60208110156106bf57601c860151845260209095019460049093019260010161069b565b506000835283830384a0610711565b600081600181146106e2576003915061070a565b8380156106fa57600181146107035760029250610708565b60009250610708565b600192505b505b5092915050565b61071b82826106ce565b928490039093207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89290921b91909117949350505050565b60008061076183611bca565b9050600384161561077157600080fd5b6020810190358460051c8160005b601b8110156107d75760208501943583821c60011680156107a757600181146107bc576107cd565b600084815260208390526040902093506107cd565b600082815260208590526040902093505b505060010161077f565b5060805191508181146107f257630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b600061081b611c73565b60809050806060015160040163ffffffff16816080015163ffffffff16146108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108fa57806008018261016001518663ffffffff16602081106108e9576108e9611db2565b63ffffffff90921660209290920201525b610902610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b018261096857600061096a565b815b90861663ffffffff16179250505092915050565b6000610988611c73565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f74000000000000000000000000604482015260640161089b565b8663ffffffff1660041480610a2957508663ffffffff166005145b15610aa55760008261016001518663ffffffff1660208110610a4d57610a4d611db2565b602002015190508063ffffffff168563ffffffff16148015610a7557508763ffffffff166004145b80610a9d57508063ffffffff168563ffffffff1614158015610a9d57508763ffffffff166005145b915050610b22565b8663ffffffff16600603610ac25760008460030b13159050610b22565b8663ffffffff16600703610ade5760008460030b139050610b22565b8663ffffffff16600103610b2257601f601087901c166000819003610b075760008560030b1291505b8063ffffffff16600103610b205760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b68576002610b4d8861ffff16601061090b565b63ffffffff90811690911b8201600401166080840152610b7a565b60808301805160040163ffffffff1690525b610b82610619565b98975050505050505050565b6000603f601a86901c16801580610bbd575060088163ffffffff1610158015610bbd5750600f8163ffffffff16105b1561101357603f86168160088114610c045760098114610c0d57600a8114610c1657600b8114610c1f57600c8114610c2857600d8114610c3157600e8114610c3a57610c3f565b60209150610c3f565b60219150610c3f565b602a9150610c3f565b602b9150610c3f565b60249150610c3f565b60259150610c3f565b602691505b508063ffffffff16600003610c665750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c8c5750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610cc257601f600688901c16610cb863ffffffff8716821c602083900361090b565b9350505050610611565b8063ffffffff16600403610ce45750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610d065750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d3957610d308663ffffffff168663ffffffff16901c8760200361090b565b92505050610611565b8063ffffffff16600803610d51578592505050610611565b8063ffffffff16600903610d69578592505050610611565b8063ffffffff16600a03610d81578592505050610611565b8063ffffffff16600b03610d99578592505050610611565b8063ffffffff16600c03610db1578592505050610611565b8063ffffffff16600f03610dc9578592505050610611565b8063ffffffff16601003610de1578592505050610611565b8063ffffffff16601103610df9578592505050610611565b8063ffffffff16601203610e11578592505050610611565b8063ffffffff16601303610e29578592505050610611565b8063ffffffff16601803610e41578592505050610611565b8063ffffffff16601903610e59578592505050610611565b8063ffffffff16601a03610e71578592505050610611565b8063ffffffff16601b03610e89578592505050610611565b8063ffffffff16602003610ea257505050828201610611565b8063ffffffff16602103610ebb57505050828201610611565b8063ffffffff16602203610ed457505050818303610611565b8063ffffffff16602303610eed57505050818303610611565b8063ffffffff16602403610f0657505050828216610611565b8063ffffffff16602503610f1f57505050828217610611565b8063ffffffff16602603610f3857505050828218610611565b8063ffffffff16602703610f525750505082821719610611565b8063ffffffff16602a03610f83578460030b8660030b12610f74576000610f77565b60015b60ff1692505050610611565b8063ffffffff16602b03610fab578463ffffffff168663ffffffff1610610f74576000610f77565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e00000000000000000000000000604482015260640161089b565b50610fab565b8063ffffffff16601c0361109757603f8616600281900361103957505050828202610611565b8063ffffffff166020148061105457508063ffffffff166021145b1561100d578063ffffffff1660200361106b579419945b60005b638000000087161561108d576401fffffffe600197881b16960161106e565b9250610611915050565b8063ffffffff16600f036110b957505065ffffffff0000601083901b16610611565b8063ffffffff166020036110ed576101d38560031660080260180363ffffffff168463ffffffff16901c60ff16600861090b565b8063ffffffff16602103611122576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff16601061090b565b8063ffffffff1660220361115157505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111685782915050610611565b8063ffffffff1660240361119a578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111cd578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111ff57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361123557505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361126c57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361129b57505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112b25783915050610611565b8063ffffffff16602e036112e457505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112fb5782915050610611565b8063ffffffff16603803610fab5783915050610611565b600061131c611c73565b506080602063ffffffff86161061138f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c6964207265676973746572000000000000000000000000000000000000604482015260640161089b565b63ffffffff8516158015906113a15750825b156113d557838161016001518663ffffffff16602081106113c4576113c4611db2565b63ffffffff90921660209290920201525b60808101805163ffffffff80821660608501526004909101169052610902610619565b6000611402611c73565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa0361147c5781610fff81161561144b57610fff811661100003015b8363ffffffff166000036114725760e08801805163ffffffff838201169091529550611476565b8395505b506118eb565b8563ffffffff16610fcd0361149757634000000094506118eb565b8563ffffffff16611018036114af57600194506118eb565b8563ffffffff16611096036114e457600161012088015260ff83166101008801526114d8610619565b97505050505050505090565b8563ffffffff16610fa30361174e5763ffffffff8316156118eb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff84160161170857600061153f8363fffffffc166001610755565b60208901519091508060001a6001036115ac576115a981600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190611de1565b91509150600386168060040382811015611689578092505b5081861015611696578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116ed8663fffffffc16600186611b26565b60408b018051820163ffffffff169052975061174992505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161173d578094506118eb565b63ffffffff9450600993505b6118eb565b8563ffffffff16610fa40361183f5763ffffffff831660011480611778575063ffffffff83166002145b80611789575063ffffffff83166004145b15611796578094506118eb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff84160161173d5760006117d68363fffffffc166001610755565b602089015190915060038416600403838110156117f1578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118eb565b8563ffffffff16610fd7036118eb578163ffffffff166003036118df5763ffffffff83161580611875575063ffffffff83166005145b80611886575063ffffffff83166003145b1561189457600094506118eb565b63ffffffff8316600114806118af575063ffffffff83166002145b806118c0575063ffffffff83166006145b806118d1575063ffffffff83166004145b1561173d57600194506118eb565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114d8610619565b6000611936611c73565b506080600063ffffffff8716601003611954575060c0810151611abd565b8663ffffffff166011036119735763ffffffff861660c0830152611abd565b8663ffffffff1660120361198c575060a0810151611abd565b8663ffffffff166013036119ab5763ffffffff861660a0830152611abd565b8663ffffffff166018036119df5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611abd565b8663ffffffff16601903611a105763ffffffff86811681871602602081901c821660c08501521660a0830152611abd565b8663ffffffff16601a03611a66578460030b8660030b81611a3357611a33611e05565b0763ffffffff1660c0830152600385810b9087900b81611a5557611a55611e05565b0563ffffffff1660a0830152611abd565b8663ffffffff16601b03611abd578463ffffffff168663ffffffff1681611a8f57611a8f611e05565b0663ffffffff90811660c084015285811690871681611ab057611ab0611e05565b0463ffffffff1660a08301525b63ffffffff841615611af857808261016001518563ffffffff1660208110611ae757611ae7611db2565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611b1b610619565b979650505050505050565b6000611b3183611bca565b90506003841615611b4157600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611bbf5760208401933582821c6001168015611b8f5760018114611ba457611bb5565b60008581526020839052604090209450611bb5565b600082815260208690526040902094505b5050600101611b67565b505060805250505050565b60ff811661038002610184810190369061050401811015611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f6174610000000000000000000000000000000000000000000000000000000000606482015260840161089b565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cd9611cde565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611d0f57600080fd5b50813567ffffffffffffffff811115611d2757600080fd5b602083019150836020828501011115611d3f57600080fd5b9250929050565b60008060008060408587031215611d5c57600080fd5b843567ffffffffffffffff80821115611d7457600080fd5b611d8088838901611cfd565b90965094506020870135915080821115611d9957600080fd5b50611da687828801611cfd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611df457600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a", } // MIPSABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/mips_more.go b/op-bindings/bindings/mips_more.go index 4b1821d11e01..d4a715dce20f 100644 --- a/op-bindings/bindings/mips_more.go +++ b/op-bindings/bindings/mips_more.go @@ -13,9 +13,9 @@ const MIPSStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" var MIPSStorageLayout = new(solc.StorageLayout) -var MIPSDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611cb2565b6100d0565b604051908152602001610062565b60006100da611bdf565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff169052606081015160009061020390826106c1565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff168261077d565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611d1e565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611d1e565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff166010610877565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611d1e565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f6858784876108ea565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff166010610877565b9095019463fffffffc861661043a8160016106c1565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610afa565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b8961077d565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a161561127e565b8063ffffffff16600b03610546576104f3858963ffffffff8a16151561127e565b8063ffffffff16600c0361055c576104f3611364565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f381898988611898565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611d1e565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611a92565b6106038583600161127e565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c51605482015261019f5160588201526101bf5160598201526101d851605a8201526000906102009060628101835b60208110156106ac57601c8401518252602090930192600490910190600101610688565b506000815281810382a0819003902092915050565b6000806106cd83611b36565b905060038416156106dd57600080fd5b6020810190358460051c8160005b601b8110156107435760208501943583821c6001168015610713576001811461072857610739565b60008481526020839052604090209350610739565b600082815260208590526040902093505b50506001016106eb565b50608051915081811461075e57630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610787611bdf565b60809050806060015160040163ffffffff16816080015163ffffffff1614610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff90811690935285831690529085161561086657806008018261016001518663ffffffff166020811061085557610855611d1e565b63ffffffff90921660209290920201525b61086e610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b01826108d45760006108d6565b815b90861663ffffffff16179250505092915050565b60006108f4611bdf565b608090506000816060015160040163ffffffff16826080015163ffffffff161461097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f740000000000000000000000006044820152606401610807565b8663ffffffff166004148061099557508663ffffffff166005145b15610a115760008261016001518663ffffffff16602081106109b9576109b9611d1e565b602002015190508063ffffffff168563ffffffff161480156109e157508763ffffffff166004145b80610a0957508063ffffffff168563ffffffff1614158015610a0957508763ffffffff166005145b915050610a8e565b8663ffffffff16600603610a2e5760008460030b13159050610a8e565b8663ffffffff16600703610a4a5760008460030b139050610a8e565b8663ffffffff16600103610a8e57601f601087901c166000819003610a735760008560030b1291505b8063ffffffff16600103610a8c5760008560030b121591505b505b606082018051608084015163ffffffff169091528115610ad4576002610ab98861ffff166010610877565b63ffffffff90811690911b8201600401166080840152610ae6565b60808301805160040163ffffffff1690525b610aee610619565b98975050505050505050565b6000603f601a86901c16801580610b29575060088163ffffffff1610158015610b295750600f8163ffffffff16105b15610f7f57603f86168160088114610b705760098114610b7957600a8114610b8257600b8114610b8b57600c8114610b9457600d8114610b9d57600e8114610ba657610bab565b60209150610bab565b60219150610bab565b602a9150610bab565b602b9150610bab565b60249150610bab565b60259150610bab565b602691505b508063ffffffff16600003610bd25750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610bf85750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610c2e57601f600688901c16610c2463ffffffff8716821c6020839003610877565b9350505050610611565b8063ffffffff16600403610c505750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610c725750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610ca557610c9c8663ffffffff168663ffffffff16901c87602003610877565b92505050610611565b8063ffffffff16600803610cbd578592505050610611565b8063ffffffff16600903610cd5578592505050610611565b8063ffffffff16600a03610ced578592505050610611565b8063ffffffff16600b03610d05578592505050610611565b8063ffffffff16600c03610d1d578592505050610611565b8063ffffffff16600f03610d35578592505050610611565b8063ffffffff16601003610d4d578592505050610611565b8063ffffffff16601103610d65578592505050610611565b8063ffffffff16601203610d7d578592505050610611565b8063ffffffff16601303610d95578592505050610611565b8063ffffffff16601803610dad578592505050610611565b8063ffffffff16601903610dc5578592505050610611565b8063ffffffff16601a03610ddd578592505050610611565b8063ffffffff16601b03610df5578592505050610611565b8063ffffffff16602003610e0e57505050828201610611565b8063ffffffff16602103610e2757505050828201610611565b8063ffffffff16602203610e4057505050818303610611565b8063ffffffff16602303610e5957505050818303610611565b8063ffffffff16602403610e7257505050828216610611565b8063ffffffff16602503610e8b57505050828217610611565b8063ffffffff16602603610ea457505050828218610611565b8063ffffffff16602703610ebe5750505082821719610611565b8063ffffffff16602a03610eef578460030b8660030b12610ee0576000610ee3565b60015b60ff1692505050610611565b8063ffffffff16602b03610f17578463ffffffff168663ffffffff1610610ee0576000610ee3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610807565b50610f17565b8063ffffffff16601c0361100357603f86166002819003610fa557505050828202610611565b8063ffffffff1660201480610fc057508063ffffffff166021145b15610f79578063ffffffff16602003610fd7579419945b60005b6380000000871615610ff9576401fffffffe600197881b169601610fda565b9250610611915050565b8063ffffffff16600f0361102557505065ffffffff0000601083901b16610611565b8063ffffffff16602003611059576101d38560031660080260180363ffffffff168463ffffffff16901c60ff166008610877565b8063ffffffff1660210361108e576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff166010610877565b8063ffffffff166022036110bd57505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036110d45782915050610611565b8063ffffffff16602403611106578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff16602503611139578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff1660260361116b57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff166028036111a157505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff166029036111d857505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361120757505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b0361121e5783915050610611565b8063ffffffff16602e0361125057505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112675782915050610611565b8063ffffffff16603803610f175783915050610611565b6000611288611bdf565b506080602063ffffffff8616106112fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610807565b63ffffffff85161580159061130d5750825b1561134157838161016001518663ffffffff166020811061133057611330611d1e565b63ffffffff90921660209290920201525b60808101805163ffffffff8082166060850152600490910116905261086e610619565b600061136e611bdf565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036113e85781610fff8116156113b757610fff811661100003015b8363ffffffff166000036113de5760e08801805163ffffffff8382011690915295506113e2565b8395505b50611857565b8563ffffffff16610fcd036114035763400000009450611857565b8563ffffffff166110180361141b5760019450611857565b8563ffffffff166110960361145057600161012088015260ff8316610100880152611444610619565b97505050505050505090565b8563ffffffff16610fa3036116ba5763ffffffff831615611857577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016116745760006114ab8363fffffffc1660016106c1565b60208901519091508060001a6001036115185761151581600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa1580156115b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd9190611d4d565b915091506003861680600403828110156115f5578092505b5081861015611602578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116598663fffffffc16600186611a92565b60408b018051820163ffffffff16905297506116b592505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff8416016116a957809450611857565b63ffffffff9450600993505b611857565b8563ffffffff16610fa4036117ab5763ffffffff8316600114806116e4575063ffffffff83166002145b806116f5575063ffffffff83166004145b1561170257809450611857565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016116a95760006117428363fffffffc1660016106c1565b6020890151909150600384166004038381101561175d578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b17602088015260006040880152935083611857565b8563ffffffff16610fd703611857578163ffffffff1660030361184b5763ffffffff831615806117e1575063ffffffff83166005145b806117f2575063ffffffff83166003145b156118005760009450611857565b63ffffffff83166001148061181b575063ffffffff83166002145b8061182c575063ffffffff83166006145b8061183d575063ffffffff83166004145b156116a95760019450611857565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b01526004019091169052611444610619565b60006118a2611bdf565b506080600063ffffffff87166010036118c0575060c0810151611a29565b8663ffffffff166011036118df5763ffffffff861660c0830152611a29565b8663ffffffff166012036118f8575060a0810151611a29565b8663ffffffff166013036119175763ffffffff861660a0830152611a29565b8663ffffffff1660180361194b5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611a29565b8663ffffffff1660190361197c5763ffffffff86811681871602602081901c821660c08501521660a0830152611a29565b8663ffffffff16601a036119d2578460030b8660030b8161199f5761199f611d71565b0763ffffffff1660c0830152600385810b9087900b816119c1576119c1611d71565b0563ffffffff1660a0830152611a29565b8663ffffffff16601b03611a29578463ffffffff168663ffffffff16816119fb576119fb611d71565b0663ffffffff90811660c084015285811690871681611a1c57611a1c611d71565b0463ffffffff1660a08301525b63ffffffff841615611a6457808261016001518563ffffffff1660208110611a5357611a53611d1e565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611a87610619565b979650505050505050565b6000611a9d83611b36565b90506003841615611aad57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611b2b5760208401933582821c6001168015611afb5760018114611b1057611b21565b60008581526020839052604090209450611b21565b600082815260208690526040902094505b5050600101611ad3565b505060805250505050565b60ff811661038002610184810190369061050401811015611bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610807565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611c45611c4a565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611c7b57600080fd5b50813567ffffffffffffffff811115611c9357600080fd5b602083019150836020828501011115611cab57600080fd5b9250929050565b60008060008060408587031215611cc857600080fd5b843567ffffffffffffffff80821115611ce057600080fd5b611cec88838901611c69565b90965094506020870135915080821115611d0557600080fd5b50611d1287828801611c69565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611d6057600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a" +var MIPSDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d46565b6100d0565b604051908152602001610062565b60006100da611c73565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff16905260608101516000906102039082610755565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff1682610811565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611db2565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611db2565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff16601061090b565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611db2565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f68587848761097e565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff16601061090b565b9095019463fffffffc861661043a816001610755565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b8e565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b89610811565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a1615611312565b8063ffffffff16600b03610546576104f3858963ffffffff8a161515611312565b8063ffffffff16600c0361055c576104f36113f8565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f38189898861192c565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611db2565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b26565b61060385836001611312565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019160f890811c91901c855b60208110156106bf57601c860151845260209095019460049093019260010161069b565b506000835283830384a0610711565b600081600181146106e2576003915061070a565b8380156106fa57600181146107035760029250610708565b60009250610708565b600192505b505b5092915050565b61071b82826106ce565b928490039093207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89290921b91909117949350505050565b60008061076183611bca565b9050600384161561077157600080fd5b6020810190358460051c8160005b601b8110156107d75760208501943583821c60011680156107a757600181146107bc576107cd565b600084815260208390526040902093506107cd565b600082815260208590526040902093505b505060010161077f565b5060805191508181146107f257630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b600061081b611c73565b60809050806060015160040163ffffffff16816080015163ffffffff16146108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108fa57806008018261016001518663ffffffff16602081106108e9576108e9611db2565b63ffffffff90921660209290920201525b610902610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b018261096857600061096a565b815b90861663ffffffff16179250505092915050565b6000610988611c73565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f74000000000000000000000000604482015260640161089b565b8663ffffffff1660041480610a2957508663ffffffff166005145b15610aa55760008261016001518663ffffffff1660208110610a4d57610a4d611db2565b602002015190508063ffffffff168563ffffffff16148015610a7557508763ffffffff166004145b80610a9d57508063ffffffff168563ffffffff1614158015610a9d57508763ffffffff166005145b915050610b22565b8663ffffffff16600603610ac25760008460030b13159050610b22565b8663ffffffff16600703610ade5760008460030b139050610b22565b8663ffffffff16600103610b2257601f601087901c166000819003610b075760008560030b1291505b8063ffffffff16600103610b205760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b68576002610b4d8861ffff16601061090b565b63ffffffff90811690911b8201600401166080840152610b7a565b60808301805160040163ffffffff1690525b610b82610619565b98975050505050505050565b6000603f601a86901c16801580610bbd575060088163ffffffff1610158015610bbd5750600f8163ffffffff16105b1561101357603f86168160088114610c045760098114610c0d57600a8114610c1657600b8114610c1f57600c8114610c2857600d8114610c3157600e8114610c3a57610c3f565b60209150610c3f565b60219150610c3f565b602a9150610c3f565b602b9150610c3f565b60249150610c3f565b60259150610c3f565b602691505b508063ffffffff16600003610c665750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c8c5750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610cc257601f600688901c16610cb863ffffffff8716821c602083900361090b565b9350505050610611565b8063ffffffff16600403610ce45750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610d065750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d3957610d308663ffffffff168663ffffffff16901c8760200361090b565b92505050610611565b8063ffffffff16600803610d51578592505050610611565b8063ffffffff16600903610d69578592505050610611565b8063ffffffff16600a03610d81578592505050610611565b8063ffffffff16600b03610d99578592505050610611565b8063ffffffff16600c03610db1578592505050610611565b8063ffffffff16600f03610dc9578592505050610611565b8063ffffffff16601003610de1578592505050610611565b8063ffffffff16601103610df9578592505050610611565b8063ffffffff16601203610e11578592505050610611565b8063ffffffff16601303610e29578592505050610611565b8063ffffffff16601803610e41578592505050610611565b8063ffffffff16601903610e59578592505050610611565b8063ffffffff16601a03610e71578592505050610611565b8063ffffffff16601b03610e89578592505050610611565b8063ffffffff16602003610ea257505050828201610611565b8063ffffffff16602103610ebb57505050828201610611565b8063ffffffff16602203610ed457505050818303610611565b8063ffffffff16602303610eed57505050818303610611565b8063ffffffff16602403610f0657505050828216610611565b8063ffffffff16602503610f1f57505050828217610611565b8063ffffffff16602603610f3857505050828218610611565b8063ffffffff16602703610f525750505082821719610611565b8063ffffffff16602a03610f83578460030b8660030b12610f74576000610f77565b60015b60ff1692505050610611565b8063ffffffff16602b03610fab578463ffffffff168663ffffffff1610610f74576000610f77565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e00000000000000000000000000604482015260640161089b565b50610fab565b8063ffffffff16601c0361109757603f8616600281900361103957505050828202610611565b8063ffffffff166020148061105457508063ffffffff166021145b1561100d578063ffffffff1660200361106b579419945b60005b638000000087161561108d576401fffffffe600197881b16960161106e565b9250610611915050565b8063ffffffff16600f036110b957505065ffffffff0000601083901b16610611565b8063ffffffff166020036110ed576101d38560031660080260180363ffffffff168463ffffffff16901c60ff16600861090b565b8063ffffffff16602103611122576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff16601061090b565b8063ffffffff1660220361115157505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111685782915050610611565b8063ffffffff1660240361119a578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111cd578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111ff57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361123557505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361126c57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361129b57505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112b25783915050610611565b8063ffffffff16602e036112e457505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112fb5782915050610611565b8063ffffffff16603803610fab5783915050610611565b600061131c611c73565b506080602063ffffffff86161061138f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c6964207265676973746572000000000000000000000000000000000000604482015260640161089b565b63ffffffff8516158015906113a15750825b156113d557838161016001518663ffffffff16602081106113c4576113c4611db2565b63ffffffff90921660209290920201525b60808101805163ffffffff80821660608501526004909101169052610902610619565b6000611402611c73565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa0361147c5781610fff81161561144b57610fff811661100003015b8363ffffffff166000036114725760e08801805163ffffffff838201169091529550611476565b8395505b506118eb565b8563ffffffff16610fcd0361149757634000000094506118eb565b8563ffffffff16611018036114af57600194506118eb565b8563ffffffff16611096036114e457600161012088015260ff83166101008801526114d8610619565b97505050505050505090565b8563ffffffff16610fa30361174e5763ffffffff8316156118eb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff84160161170857600061153f8363fffffffc166001610755565b60208901519091508060001a6001036115ac576115a981600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190611de1565b91509150600386168060040382811015611689578092505b5081861015611696578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116ed8663fffffffc16600186611b26565b60408b018051820163ffffffff169052975061174992505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161173d578094506118eb565b63ffffffff9450600993505b6118eb565b8563ffffffff16610fa40361183f5763ffffffff831660011480611778575063ffffffff83166002145b80611789575063ffffffff83166004145b15611796578094506118eb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff84160161173d5760006117d68363fffffffc166001610755565b602089015190915060038416600403838110156117f1578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118eb565b8563ffffffff16610fd7036118eb578163ffffffff166003036118df5763ffffffff83161580611875575063ffffffff83166005145b80611886575063ffffffff83166003145b1561189457600094506118eb565b63ffffffff8316600114806118af575063ffffffff83166002145b806118c0575063ffffffff83166006145b806118d1575063ffffffff83166004145b1561173d57600194506118eb565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114d8610619565b6000611936611c73565b506080600063ffffffff8716601003611954575060c0810151611abd565b8663ffffffff166011036119735763ffffffff861660c0830152611abd565b8663ffffffff1660120361198c575060a0810151611abd565b8663ffffffff166013036119ab5763ffffffff861660a0830152611abd565b8663ffffffff166018036119df5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611abd565b8663ffffffff16601903611a105763ffffffff86811681871602602081901c821660c08501521660a0830152611abd565b8663ffffffff16601a03611a66578460030b8660030b81611a3357611a33611e05565b0763ffffffff1660c0830152600385810b9087900b81611a5557611a55611e05565b0563ffffffff1660a0830152611abd565b8663ffffffff16601b03611abd578463ffffffff168663ffffffff1681611a8f57611a8f611e05565b0663ffffffff90811660c084015285811690871681611ab057611ab0611e05565b0463ffffffff1660a08301525b63ffffffff841615611af857808261016001518563ffffffff1660208110611ae757611ae7611db2565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611b1b610619565b979650505050505050565b6000611b3183611bca565b90506003841615611b4157600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611bbf5760208401933582821c6001168015611b8f5760018114611ba457611bb5565b60008581526020839052604090209450611bb5565b600082815260208690526040902094505b5050600101611b67565b505060805250505050565b60ff811661038002610184810190369061050401811015611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f6174610000000000000000000000000000000000000000000000000000000000606482015260840161089b565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cd9611cde565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611d0f57600080fd5b50813567ffffffffffffffff811115611d2757600080fd5b602083019150836020828501011115611d3f57600080fd5b9250929050565b60008060008060408587031215611d5c57600080fd5b843567ffffffffffffffff80821115611d7457600080fd5b611d8088838901611cfd565b90965094506020870135915080821115611d9957600080fd5b50611da687828801611cfd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611df457600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a" -var MIPSDeployedSourceMap = "1131:38919:105:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1710:45;;1745:10;1710:45;;;;;188:10:257;176:23;;;158:42;;146:2;131:18;1710:45:105;;;;;;;;2448:99;;;412:42:257;2534:6:105;400:55:257;382:74;;370:2;355:18;2448:99:105;211:251:257;24930:6339:105;;;;;;:::i;:::-;;:::i;:::-;;;1687:25:257;;;1675:2;1660:18;24930:6339:105;1541:177:257;24930:6339:105;25008:7;25051:18;;:::i;:::-;25198:4;25191:5;25188:15;25178:134;;25292:1;25289;25282:12;25178:134;25348:4;25342:11;25355;25339:28;25329:137;;25446:1;25443;25436:12;25329:137;25514:3;25496:16;25493:25;25483:150;;25613:1;25610;25603:12;25483:150;25677:3;25663:12;25660:21;25650:145;;25775:1;25772;25765:12;25650:145;26055:24;;26399:4;26101:20;26457:2;26159:21;;26055:24;26217:18;26101:20;26159:21;;;26055:24;26032:21;26028:52;;;26217:18;26101:20;;;26159:21;;;26055:24;26028:52;;26101:20;;26159:21;;;26055:24;26028:52;;26217:18;26101:20;26159:21;;;26055:24;26028:52;;26217:18;26101:20;26159:21;;;26055:24;26028:52;;26217:18;26101:20;26159:21;;;26055:24;26028:52;;;26217:18;26101:20;26159:21;;;26055:24;26032:21;26028:52;;;26217:18;26101:20;26159:21;;;26055:24;26028:52;;26217:18;26101:20;26159:21;;;26055:24;26028:52;;26217:18;26101:20;27075:10;26217:18;27065:21;;;26159;;;;27173:1;27158:77;27183:2;27180:1;27177:9;27158:77;;;26055:24;;26032:21;26028:52;26101:20;;27231:1;26159:21;;;;26043:2;26217:18;;;;27201:1;27194:9;27158:77;;;27162:14;;;27313:5;:12;;;27309:71;;;27352:13;:11;:13::i;:::-;27345:20;;;;;27309:71;27394:10;;;:15;;27408:1;27394:15;;;;;27479:8;;;;-1:-1:-1;;27471:20:105;;-1:-1:-1;27471:7:105;:20::i;:::-;27457:34;-1:-1:-1;27521:10:105;27529:2;27521:10;;;;27598:1;27588:11;;;:26;;;27603:6;:11;;27613:1;27603:11;27588:26;27584:310;;;27744:13;27813:1;27791:4;27798:10;27791:17;27790:24;;;;27761:5;:12;;;27776:10;27761:25;27760:54;27744:70;;27839:40;27850:6;:11;;27860:1;27850:11;:20;;27868:2;27850:20;;;27864:1;27850:20;27839:40;;27872:6;27839:10;:40::i;:::-;27832:47;;;;;;;;27584:310;28143:15;;;;27938:9;;;;28075:4;28069:2;28061:10;;;28060:19;;;28143:15;28168:2;28160:10;;;28159:19;28143:36;;;;;;;:::i;:::-;;;;;;-1:-1:-1;28208:5:105;28232:11;;;;;:29;;;28247:6;:14;;28257:4;28247:14;28232:29;28228:832;;;28324:5;:15;;;28340:5;28324:22;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;28387:4:105;28381:2;28373:10;;;28372:19;28228:832;;;28425:4;28416:6;:13;;;28412:648;;;28546:6;:13;;28556:3;28546:13;:30;;;;28563:6;:13;;28573:3;28563:13;28546:30;:47;;;;28580:6;:13;;28590:3;28580:13;28546:47;28542:253;;;28656:4;28663:6;28656:13;28651:18;;28412:648;;28542:253;28755:21;28758:4;28765:6;28758:13;28773:2;28755;:21::i;:::-;28750:26;;28412:648;;;28829:4;28819:6;:14;;;;:32;;;;28837:6;:14;;28847:4;28837:14;28819:32;:50;;;;28855:6;:14;;28865:4;28855:14;28819:50;28815:245;;;28939:5;:15;;;28955:5;28939:22;;;;;;;;;:::i;:::-;;;;;28934:27;;29040:5;29032:13;;28815:245;29089:1;29079:6;:11;;;;:25;;;;;29103:1;29094:6;:10;;;29079:25;29078:42;;;;29109:6;:11;;29119:1;29109:11;29078:42;29074:125;;;29147:37;29160:6;29168:4;29174:5;29181:2;29147:12;:37::i;:::-;29140:44;;;;;;;;;;;29074:125;29232:13;29213:16;29384:4;29374:14;;;;29370:446;;29453:21;29456:4;29463:6;29456:13;29471:2;29453;:21::i;:::-;29447:27;;;;29511:10;29506:15;;29545:16;29506:15;29559:1;29545:7;:16::i;:::-;29539:22;;29593:4;29583:6;:14;;;;:32;;;;;29601:6;:14;;29611:4;29601:14;;29583:32;29579:223;;;29680:4;29668:16;;29782:1;29774:9;;29579:223;29390:426;29370:446;29849:10;29862:26;29870:4;29876:2;29880;29884:3;29862:7;:26::i;:::-;29891:10;29862:39;;;;-1:-1:-1;29987:4:105;29980:11;;;30019;;;:24;;;;;30042:1;30034:4;:9;;;;30019:24;:39;;;;;30054:4;30047;:11;;;30019:39;30015:847;;;30082:4;:9;;30090:1;30082:9;:22;;;;30095:4;:9;;30103:1;30095:9;30082:22;30078:144;;;30166:37;30177:4;:9;;30185:1;30177:9;:21;;30193:5;30177:21;;;30189:1;30177:21;30200:2;30166:10;:37::i;:::-;30159:44;;;;;;;;;;;;;;;30078:144;30244:4;:11;;30252:3;30244:11;30240:121;;30314:28;30323:5;30330:2;30334:7;;;;30314:8;:28::i;30240:121::-;30382:4;:11;;30390:3;30382:11;30378:121;;30452:28;30461:5;30468:2;30472:7;;;;;30452:8;:28::i;30378:121::-;30569:4;:11;;30577:3;30569:11;30565:80;;30611:15;:13;:15::i;30565:80::-;30748:4;30740;:12;;;;:27;;;;;30763:4;30756;:11;;;30740:27;30736:112;;;30798:31;30809:4;30815:2;30819;30823:5;30798:10;:31::i;30736:112::-;30922:6;:14;;30932:4;30922:14;:28;;;;-1:-1:-1;30940:10:105;;;;;30922:28;30918:93;;;30995:1;30970:5;:15;;;30986:5;30970:22;;;;;;;;;:::i;:::-;:26;;;;:22;;;;;;:26;30918:93;31057:9;:26;;31070:13;31057:26;31053:92;;31103:27;31112:9;31123:1;31126:3;31103:8;:27::i;:::-;31226:26;31235:5;31242:3;31247:4;31226:8;:26::i;:::-;31219:33;;;;;;;;;;;;;24930:6339;;;;;;;:::o;3092:1709::-;3639:4;3633:11;;3555:4;3358:31;3347:43;;3418:13;3358:31;3757:2;3457:13;;3347:43;3364:24;3358:31;3457:13;;;3347:43;;;;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3133:12;;4342:13;;3457;;;3133:12;4422:84;4447:2;4444:1;4441:9;4422:84;;;3374:13;3364:24;;3358:31;3347:43;;3378:2;3418:13;;;;4502:1;3457:13;;;;4465:1;4458:9;4422:84;;;4426:14;4569:1;4565:2;4558:13;4664:5;4660:2;4656:14;4649:5;4644:27;4770:14;;;4753:32;;;3092:1709;-1:-1:-1;;3092:1709:105:o;20985:1831::-;21058:11;21169:14;21186:24;21198:11;21186;:24::i;:::-;21169:41;;21318:1;21311:5;21307:13;21304:33;;;21333:1;21330;21323:12;21304:33;21466:2;21454:15;;;21407:20;21896:5;21893:1;21889:13;21931:4;21967:1;21952:343;21977:2;21974:1;21971:9;21952:343;;;22100:2;22088:15;;;22037:20;22135:12;;;22149:1;22131:20;22172:42;;;;22240:1;22235:42;;;;22124:153;;22172:42;21630:1;21623:12;;;21663:2;21656:13;;;21708:2;21695:16;;22181:31;;22172:42;;22235;21630:1;21623:12;;;21663:2;21656:13;;;21708:2;21695:16;;22244:31;;22124:153;-1:-1:-1;;21995:1:105;21988:9;21952:343;;;21956:14;22405:4;22399:11;22384:26;;22491:7;22485:4;22482:17;22472:124;;22533:10;22530:1;22523:21;22575:2;22572:1;22565:13;22472:124;-1:-1:-1;;22723:2:105;22712:14;;;;22700:10;22696:31;22693:1;22689:39;22757:16;;;;22775:10;22753:33;;20985:1831;-1:-1:-1;;;20985:1831:105:o;18095:823::-;18164:12;18251:18;;:::i;:::-;18319:4;18310:13;;18371:5;:8;;;18382:1;18371:12;18355:28;;:5;:12;;;:28;;;18351:95;;18403:28;;;;;2114:2:257;18403:28:105;;;2096:21:257;2153:2;2133:18;;;2126:30;2192:20;2172:18;;;2165:48;2230:18;;18403:28:105;;;;;;;;18351:95;18535:8;;;;;18568:12;;;;;18557:23;;;;;;;18594:20;;;;;18535:8;18726:13;;;18722:90;;18787:6;18796:1;18787:10;18759:5;:15;;;18775:8;18759:25;;;;;;;;;:::i;:::-;:38;;;;:25;;;;;;:38;18722:90;18888:13;:11;:13::i;:::-;18881:20;18095:823;-1:-1:-1;;;;;18095:823:105:o;2645:339::-;2706:11;2770:18;;;;2779:8;;;;2770:18;;;;;;2769:25;;;;;2786:1;2833:2;:9;;;2827:16;;;;;2826:22;;2825:32;;;;;;;2887:9;;2886:15;2769:25;2944:21;;2964:1;2944:21;;;2955:6;2944:21;2929:11;;;;;:37;;-1:-1:-1;;;2645:339:105;;;;:::o;12956:2026::-;13053:12;13139:18;;:::i;:::-;13207:4;13198:13;;13239:17;13299:5;:8;;;13310:1;13299:12;13283:28;;:5;:12;;;:28;;;13279:97;;13331:30;;;;;2461:2:257;13331:30:105;;;2443:21:257;2500:2;2480:18;;;2473:30;2539:22;2519:18;;;2512:50;2579:18;;13331:30:105;2259:344:257;13279:97:105;13446:7;:12;;13457:1;13446:12;:28;;;;13462:7;:12;;13473:1;13462:12;13446:28;13442:947;;;13494:9;13506:5;:15;;;13522:6;13506:23;;;;;;;;;:::i;:::-;;;;;13494:35;;13570:2;13563:9;;:3;:9;;;:25;;;;;13576:7;:12;;13587:1;13576:12;13563:25;13562:58;;;;13601:2;13594:9;;:3;:9;;;;:25;;;;;13607:7;:12;;13618:1;13607:12;13594:25;13547:73;;13476:159;13442:947;;;13732:7;:12;;13743:1;13732:12;13728:661;;13793:1;13785:3;13779:15;;;;13764:30;;13728:661;;;13897:7;:12;;13908:1;13897:12;13893:496;;13957:1;13950:3;13944:14;;;13929:29;;13893:496;;;14078:7;:12;;14089:1;14078:12;14074:315;;14166:4;14160:2;14151:11;;;14150:20;14136:10;14193:8;;;14189:84;;14253:1;14246:3;14240:14;;;14225:29;;14189:84;14294:3;:8;;14301:1;14294:8;14290:85;;14355:1;14347:3;14341:15;;;;14326:30;;14290:85;14092:297;14074:315;14465:8;;;;;14543:12;;;;14532:23;;;;;14699:178;;;;14790:1;14764:22;14767:5;14775:6;14767:14;14783:2;14764;:22::i;:::-;:27;;;;;;;14750:42;;14759:1;14750:42;14735:57;:12;;;:57;14699:178;;;14846:12;;;;;14861:1;14846:16;14831:31;;;;14699:178;14952:13;:11;:13::i;:::-;14945:20;12956:2026;-1:-1:-1;;;;;;;;12956:2026:105:o;31315:8733::-;31402:10;31464;31472:2;31464:10;;;;31503:11;;;:44;;;31529:1;31519:6;:11;;;;:27;;;;;31543:3;31534:6;:12;;;31519:27;31499:8490;;;31588:4;31581:11;;31712:6;31772:3;31767:25;;;;31847:3;31842:25;;;;31921:3;31916:25;;;;31996:3;31991:25;;;;32070:3;32065:25;;;;32143:3;32138:25;;;;32217:3;32212:25;;;;31705:532;;31767:25;31786:4;31778:12;;31767:25;;31842;31861:4;31853:12;;31842:25;;31916;31935:4;31927:12;;31916:25;;31991;32010:4;32002:12;;31991:25;;32065;32084:4;32076:12;;32065:25;;32138;32157:4;32149:12;;32138:25;;32212;32231:4;32223:12;;31705:532;;32300:4;:12;;32308:4;32300:12;32296:4023;;-1:-1:-1;;;32351:9:105;32343:26;;32364:4;32359:1;32351:9;;;32350:18;32343:26;32336:33;;32296:4023;32437:4;:12;;32445:4;32437:12;32433:3886;;-1:-1:-1;;;32488:9:105;32480:26;;32501:4;32496:1;32488:9;;;32487:18;32480:26;32473:33;;32433:3886;32574:4;:12;;32582:4;32574:12;32570:3749;;32639:4;32634:1;32626:9;;;32625:18;32672:27;32626:9;32675:11;;;;32688:2;:10;;;32672:2;:27::i;:::-;32665:34;;;;;;;32570:3749;32768:4;:12;;32776:4;32768:12;32764:3555;;-1:-1:-1;;;32811:17:105;;;32823:4;32818:9;;32811:17;32804:24;;32764:3555;32897:4;:11;;32905:3;32897:11;32893:3426;;-1:-1:-1;;;32939:17:105;;;32951:4;32946:9;;32939:17;32932:24;;32893:3426;33025:4;:12;;33033:4;33025:12;33021:3298;;33068:21;33077:2;33071:8;;:2;:8;;;;33086:2;33081;:7;33068:2;:21::i;:::-;33061:28;;;;;;33021:3298;33338:4;:12;;33346:4;33338:12;33334:2985;;33381:2;33374:9;;;;;;33334:2985;33452:4;:12;;33460:4;33452:12;33448:2871;;33495:2;33488:9;;;;;;33448:2871;33566:4;:12;;33574:4;33566:12;33562:2757;;33609:2;33602:9;;;;;;33562:2757;33680:4;:12;;33688:4;33680:12;33676:2643;;33723:2;33716:9;;;;;;33676:2643;33797:4;:12;;33805:4;33797:12;33793:2526;;33840:2;33833:9;;;;;;33793:2526;33957:4;:12;;33965:4;33957:12;33953:2366;;34000:2;33993:9;;;;;;33953:2366;34071:4;:12;;34079:4;34071:12;34067:2252;;34114:2;34107:9;;;;;;34067:2252;34185:4;:12;;34193:4;34185:12;34181:2138;;34228:2;34221:9;;;;;;34181:2138;34299:4;:12;;34307:4;34299:12;34295:2024;;34342:2;34335:9;;;;;;34295:2024;34413:4;:12;;34421:4;34413:12;34409:1910;;34456:2;34449:9;;;;;;34409:1910;34527:4;:12;;34535:4;34527:12;34523:1796;;34570:2;34563:9;;;;;;34523:1796;34642:4;:12;;34650:4;34642:12;34638:1681;;34685:2;34678:9;;;;;;34638:1681;34755:4;:12;;34763:4;34755:12;34751:1568;;34798:2;34791:9;;;;;;34751:1568;34869:4;:12;;34877:4;34869:12;34865:1454;;34912:2;34905:9;;;;;;34865:1454;35061:4;:12;;35069:4;35061:12;35057:1262;;-1:-1:-1;;;35105:7:105;;;35097:16;;35057:1262;35182:4;:12;;35190:4;35182:12;35178:1141;;-1:-1:-1;;;35226:7:105;;;35218:16;;35178:1141;35302:4;:12;;35310:4;35302:12;35298:1021;;-1:-1:-1;;;35346:7:105;;;35338:16;;35298:1021;35423:4;:12;;35431:4;35423:12;35419:900;;-1:-1:-1;;;35467:7:105;;;35459:16;;35419:900;35543:4;:12;;35551:4;35543:12;35539:780;;-1:-1:-1;;;35587:7:105;;;35579:16;;35539:780;35662:4;:12;;35670:4;35662:12;35658:661;;-1:-1:-1;;;35706:7:105;;;35698:16;;35658:661;35782:4;:12;;35790:4;35782:12;35778:541;;-1:-1:-1;;;35826:7:105;;;35818:16;;35778:541;35902:4;:12;;35910:4;35902:12;35898:421;;-1:-1:-1;;;35947:7:105;;;35945:10;35938:17;;35898:421;36024:4;:12;;36032:4;36024:12;36020:299;;36085:2;36067:21;;36073:2;36067:21;;;:29;;36095:1;36067:29;;;36091:1;36067:29;36060:36;;;;;;;;36020:299;36166:4;:12;;36174:4;36166:12;36162:157;;36214:2;36209:7;;:2;:7;;;:15;;36223:1;36209:15;;36162:157;36271:29;;;;;2810:2:257;36271:29:105;;;2792:21:257;2849:2;2829:18;;;2822:30;2888:21;2868:18;;;2861:49;2927:18;;36271:29:105;2608:343:257;36162:157:105;31549:4784;31499:8490;;;36389:6;:14;;36399:4;36389:14;36385:3590;;36448:4;36441:11;;36523:3;36515:11;;;36511:549;;-1:-1:-1;;;36568:21:105;;;36554:36;;36511:549;36675:4;:12;;36683:4;36675:12;:28;;;;36691:4;:12;;36699:4;36691:12;36675:28;36671:389;;;36735:4;:12;;36743:4;36735:12;36731:83;;36784:3;;;36731:83;36839:8;36877:127;36889:10;36884:15;;:20;36877:127;;36969:8;36936:3;36969:8;;;;;36936:3;36877:127;;;37036:1;-1:-1:-1;37029:8:105;;-1:-1:-1;;37029:8:105;36385:3590;37127:6;:14;;37137:4;37127:14;37123:2852;;-1:-1:-1;;37172:8:105;37178:2;37172:8;;;;37165:15;;37123:2852;37247:6;:14;;37257:4;37247:14;37243:2732;;37292:42;37310:2;37315:1;37310:6;37320:1;37309:12;37304:2;:17;37296:26;;:3;:26;;;;37326:4;37295:35;37332:1;37292:2;:42::i;37243:2732::-;37401:6;:14;;37411:4;37401:14;37397:2578;;37446:45;37464:2;37469:1;37464:6;37474:1;37463:12;37458:2;:17;37450:26;;:3;:26;;;;37480:6;37449:37;37488:2;37446;:45::i;37397:2578::-;37559:6;:14;;37569:4;37559:14;37555:2420;;-1:-1:-1;;37610:21:105;37629:1;37624;37619:6;;37618:12;37610:21;;37667:36;;;37738:5;37733:10;;37610:21;;;;;37732:18;37725:25;;37555:2420;37817:6;:14;;37827:4;37817:14;37813:2162;;37862:3;37855:10;;;;;37813:2162;37933:6;:14;;37943:4;37933:14;37929:2046;;37993:2;37998:1;37993:6;38003:1;37992:12;37987:2;:17;37979:26;;:3;:26;;;;38009:4;37978:35;37971:42;;;;;37929:2046;38082:6;:14;;38092:4;38082:14;38078:1897;;38142:2;38147:1;38142:6;38152:1;38141:12;38136:2;:17;38128:26;;:3;:26;;;;38158:6;38127:37;38120:44;;;;;38078:1897;38233:6;:14;;38243:4;38233:14;38229:1746;;-1:-1:-1;;38284:26:105;38308:1;38303;38298:6;;38297:12;38292:2;:17;38284:26;;38346:41;;;38422:5;38417:10;;38284:26;;;;;38416:18;38409:25;;38229:1746;38502:6;:14;;38512:4;38502:14;38498:1477;;-1:-1:-1;;38559:4:105;38553:34;38585:1;38580;38575:6;;38574:12;38569:2;:17;38553:34;;38643:27;;;38623:48;;;38701:10;;38554:9;;;38553:34;;38700:18;38693:25;;38498:1477;38786:6;:14;;38796:4;38786:14;38782:1193;;-1:-1:-1;;38843:6:105;38837:36;38871:1;38866;38861:6;;38860:12;38855:2;:17;38837:36;;38929:29;;;38909:50;;;38989:10;;38838:11;;;38837:36;;38988:18;38981:25;;38782:1193;39075:6;:14;;39085:4;39075:14;39071:904;;-1:-1:-1;;39126:20:105;39144:1;39139;39134:6;;39133:12;39126:20;;39182:36;;;39254:5;39248:11;;39126:20;;;;;39247:19;39240:26;;39071:904;39334:6;:14;;39344:4;39334:14;39330:645;;39379:2;39372:9;;;;;39330:645;39450:6;:14;;39460:4;39450:14;39446:529;;-1:-1:-1;;39501:25:105;39524:1;39519;39514:6;;39513:12;39508:2;:17;39501:25;;39562:41;;;39639:5;39633:11;;39501:25;;;;;39632:19;39625:26;;39446:529;39718:6;:14;;39728:4;39718:14;39714:261;;39763:3;39756:10;;;;;39714:261;39833:6;:14;;39843:4;39833:14;39829:146;;39878:2;39871:9;;;;;19199:782;19285:12;19372:18;;:::i;:::-;-1:-1:-1;19440:4:105;19547:2;19535:14;;;;19527:41;;;;;;;3158:2:257;19527:41:105;;;3140:21:257;3197:2;3177:18;;;3170:30;3236:16;3216:18;;;3209:44;3270:18;;19527:41:105;2956:338:257;19527:41:105;19664:14;;;;;;;:30;;;19682:12;19664:30;19660:102;;;19743:4;19714:5;:15;;;19730:9;19714:26;;;;;;;;;:::i;:::-;:33;;;;:26;;;;;;:33;19660:102;19817:12;;;;;19806:23;;;;:8;;;:23;19873:1;19858:16;;;19843:31;;;19951:13;:11;:13::i;4842:7728::-;4885:12;4971:18;;:::i;:::-;-1:-1:-1;5149:15:105;;:18;;;;5039:4;5309:18;;;;5353;;;;5397;;;;;5039:4;;5129:17;;;;5309:18;5353;5487;;;5501:4;5487:18;5483:6777;;5537:2;5566:4;5561:9;;:14;5557:144;;5677:4;5672:9;;5664:4;:18;5658:24;5557:144;5722:2;:7;;5728:1;5722:7;5718:161;;5758:10;;;;;5790:16;;;;;;;;5758:10;-1:-1:-1;5718:161:105;;;5858:2;5853:7;;5718:161;5507:386;5483:6777;;;5995:10;:18;;6009:4;5995:18;5991:6269;;1745:10;6033:14;;5991:6269;;;6131:10;:18;;6145:4;6131:18;6127:6133;;6174:1;6169:6;;6127:6133;;;6299:10;:18;;6313:4;6299:18;6295:5965;;6352:4;6337:12;;;:19;6374:26;;;:14;;;:26;6425:13;:11;:13::i;:::-;6418:20;;;;;;;;;4842:7728;:::o;6295:5965::-;6564:10;:18;;6578:4;6564:18;6560:5700;;6715:14;;;6711:2708;6560:5700;6711:2708;6885:22;;;;;6881:2538;;7010:10;7023:27;7031:2;7036:10;7031:15;7048:1;7023:7;:27::i;:::-;7134:17;;;;7010:40;;-1:-1:-1;7134:17:105;7112:19;7284:14;7303:1;7278:26;7274:131;;7346:36;7370:11;1277:21:106;1426:15;;;1467:8;1461:4;1454:22;1595:4;1582:18;;1602:19;1578:44;1624:11;1575:61;;1222:430;7346:36:105;7332:50;;7274:131;7491:20;;;;;7458:54;;;;;;;;3472:25:257;;;7458:54:105;3533:23:257;;;3513:18;;;3506:51;7427:11:105;;;;7458:19;:6;:19;;;;3445:18:257;;7458:54:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7426:86;;;;7739:1;7735:2;7731:10;7836:9;7833:1;7829:17;7918:6;7911:5;7908:17;7905:40;;;7938:5;7928:15;;7905:40;;8021:6;8017:2;8014:14;8011:34;;;8041:2;8031:12;;8011:34;8147:3;8142:1;8134:6;8130:14;8125:3;8121:24;8117:34;8110:41;;8247:3;8243:1;8231:9;8222:6;8219:1;8215:14;8211:30;8207:38;8203:48;8196:55;;8402:1;8398;8394;8382:9;8379:1;8375:17;8371:25;8367:33;8363:41;8529:1;8525;8521;8512:6;8500:9;8497:1;8493:17;8489:30;8485:38;8481:46;8477:54;8459:72;;8660:10;8656:15;8650:4;8646:26;8638:34;;8776:3;8768:4;8764:9;8759:3;8755:19;8752:28;8745:35;;;;8922:33;8931:2;8936:10;8931:15;8948:1;8951:3;8922:8;:33::i;:::-;8977:20;;;:38;;;;;;;;;-1:-1:-1;6881:2538:105;;-1:-1:-1;;;6881:2538:105;;9134:18;;;;;9130:289;;9304:2;9299:7;;6560:5700;;9130:289;9358:10;9353:15;;2053:3;9390:10;;9130:289;6560:5700;;;9548:10;:18;;9562:4;9548:18;9544:2716;;9702:15;;;1824:1;9702:15;;:34;;-1:-1:-1;9721:15:105;;;1859:1;9721:15;9702:34;:57;;;-1:-1:-1;9740:19:105;;;1936:1;9740:19;9702:57;9698:1593;;;9788:2;9783:7;;9544:2716;;9698:1593;9914:23;;;;;9910:1381;;9961:10;9974:27;9982:2;9987:10;9982:15;9999:1;9974:7;:27::i;:::-;10077:17;;;;9961:40;;-1:-1:-1;10320:1:105;10312:10;;10414:1;10410:17;10489:13;;;10486:32;;;10511:5;10505:11;;10486:32;10797:14;;;10603:1;10793:22;;;10789:32;;;;10686:26;10710:1;10595:10;;;10690:18;;;10686:26;10785:43;10591:20;;10893:12;11021:17;;;:23;11089:1;11066:20;;;:24;10599:2;-1:-1:-1;10599:2:105;6560:5700;;9544:2716;11493:10;:18;;11507:4;11493:18;11489:771;;11603:2;:7;;11609:1;11603:7;11599:647;;11696:14;;;;;:40;;-1:-1:-1;11714:22:105;;;1978:1;11714:22;11696:40;:62;;;-1:-1:-1;11740:18:105;;;1897:1;11740:18;11696:62;11692:404;;;11791:1;11786:6;;11599:647;;11692:404;11837:15;;;1824:1;11837:15;;:34;;-1:-1:-1;11856:15:105;;;1859:1;11856:15;11837:34;:61;;;-1:-1:-1;11875:23:105;;;2021:1;11875:23;11837:61;:84;;;-1:-1:-1;11902:19:105;;;1936:1;11902:19;11837:84;11833:263;;;11954:1;11949:6;;6560:5700;;11599:647;12147:10;12142:15;;2087:4;12179:11;;11599:647;12335:15;;;;;:23;;;;:18;;;;:23;;;;12372:15;;:23;;;:18;;;;:23;-1:-1:-1;12461:12:105;;;;12450:23;;;:8;;;:23;12517:1;12502:16;12487:31;;;;;12540:13;:11;:13::i;15323:2480::-;15417:12;15503:18;;:::i;:::-;-1:-1:-1;15571:4:105;15603:10;15711:13;;;15720:4;15711:13;15707:1705;;-1:-1:-1;15750:8:105;;;;15707:1705;;;15869:5;:13;;15878:4;15869:13;15865:1547;;15902:14;;;:8;;;:14;15865:1547;;;16032:5;:13;;16041:4;16032:13;16028:1384;;-1:-1:-1;16071:8:105;;;;16028:1384;;;16190:5;:13;;16199:4;16190:13;16186:1226;;16223:14;;;:8;;;:14;16186:1226;;;16364:5;:13;;16373:4;16364:13;16360:1052;;16491:9;16437:17;16417;;;16437;;;;16417:37;16498:2;16491:9;;;;;16473:8;;;:28;16519:22;:8;;;:22;16360:1052;;;16678:5;:13;;16687:4;16678:13;16674:738;;16745:11;16731;;;16745;;;16731:25;16800:2;16793:9;;;;;16775:8;;;:28;16821:22;:8;;;:22;16674:738;;;17002:5;:13;;17011:4;17002:13;16998:414;;17072:3;17053:23;;17059:3;17053:23;;;;;;;:::i;:::-;;17035:42;;:8;;;:42;17113:23;;;;;;;;;;;;;:::i;:::-;;17095:42;;:8;;;:42;16998:414;;;17306:5;:13;;17315:4;17306:13;17302:110;;17356:3;17350:9;;:3;:9;;;;;;;:::i;:::-;;17339:20;;;;:8;;;:20;17388:9;;;;;;;;;;;:::i;:::-;;17377:20;;:8;;;:20;17302:110;17505:14;;;;17501:85;;17568:3;17539:5;:15;;;17555:9;17539:26;;;;;;;;;:::i;:::-;:32;;;;:26;;;;;;:32;17501:85;17640:12;;;;;17629:23;;;;:8;;;:23;17696:1;17681:16;;;17666:31;;;17773:13;:11;:13::i;:::-;17766:20;15323:2480;-1:-1:-1;;;;;;;15323:2480:105:o;23152:1654::-;23328:14;23345:24;23357:11;23345;:24::i;:::-;23328:41;;23477:1;23470:5;23466:13;23463:33;;;23492:1;23489;23482:12;23463:33;23631:2;23825:15;;;23650:2;23639:14;;23627:10;23623:31;23620:1;23616:39;23781:16;;;23566:20;;23766:10;23755:22;;;23751:27;23741:38;23738:60;24267:5;24264:1;24260:13;24338:1;24323:343;24348:2;24345:1;24342:9;24323:343;;;24471:2;24459:15;;;24408:20;24506:12;;;24520:1;24502:20;24543:42;;;;24611:1;24606:42;;;;24495:153;;24543:42;21630:1;21623:12;;;21663:2;21656:13;;;21708:2;21695:16;;24552:31;;24543:42;;24606;21630:1;21623:12;;;21663:2;21656:13;;;21708:2;21695:16;;24615:31;;24495:153;-1:-1:-1;;24366:1:105;24359:9;24323:343;;;-1:-1:-1;;24765:4:105;24758:18;-1:-1:-1;;;;23152:1654:105:o;20185:586::-;20507:20;;;20531:7;20507:32;20500:3;:40;;;20613:14;;20668:17;;20662:24;;;20654:72;;;;;;;4209:2:257;20654:72:105;;;4191:21:257;4248:2;4228:18;;;4221:30;4287:34;4267:18;;;4260:62;4358:5;4338:18;;;4331:33;4381:19;;20654:72:105;4007:399:257;20654:72:105;20740:14;20185:586;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;467:347:257:-;518:8;528:6;582:3;575:4;567:6;563:17;559:27;549:55;;600:1;597;590:12;549:55;-1:-1:-1;623:20:257;;666:18;655:30;;652:50;;;698:1;695;688:12;652:50;735:4;727:6;723:17;711:29;;787:3;780:4;771:6;763;759:19;755:30;752:39;749:59;;;804:1;801;794:12;749:59;467:347;;;;;:::o;819:717::-;909:6;917;925;933;986:2;974:9;965:7;961:23;957:32;954:52;;;1002:1;999;992:12;954:52;1042:9;1029:23;1071:18;1112:2;1104:6;1101:14;1098:34;;;1128:1;1125;1118:12;1098:34;1167:58;1217:7;1208:6;1197:9;1193:22;1167:58;:::i;:::-;1244:8;;-1:-1:-1;1141:84:257;-1:-1:-1;1332:2:257;1317:18;;1304:32;;-1:-1:-1;1348:16:257;;;1345:36;;;1377:1;1374;1367:12;1345:36;;1416:60;1468:7;1457:8;1446:9;1442:24;1416:60;:::i;:::-;819:717;;;;-1:-1:-1;1495:8:257;-1:-1:-1;;;;819:717:257:o;1723:184::-;1775:77;1772:1;1765:88;1872:4;1869:1;1862:15;1896:4;1893:1;1886:15;3568:245;3647:6;3655;3708:2;3696:9;3687:7;3683:23;3679:32;3676:52;;;3724:1;3721;3714:12;3676:52;-1:-1:-1;;3747:16:257;;3803:2;3788:18;;;3782:25;3747:16;;3782:25;;-1:-1:-1;3568:245:257:o;3818:184::-;3870:77;3867:1;3860:88;3967:4;3964:1;3957:15;3991:4;3988:1;3981:15" +var MIPSDeployedSourceMap = "1131:39657:105:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1710:45;;1745:10;1710:45;;;;;188:10:257;176:23;;;158:42;;146:2;131:18;1710:45:105;;;;;;;;2448:99;;;412:42:257;2534:6:105;400:55:257;382:74;;370:2;355:18;2448:99:105;211:251:257;25668:6339:105;;;;;;:::i;:::-;;:::i;:::-;;;1687:25:257;;;1675:2;1660:18;25668:6339:105;1541:177:257;25668:6339:105;25746:7;25789:18;;:::i;:::-;25936:4;25929:5;25926:15;25916:134;;26030:1;26027;26020:12;25916:134;26086:4;26080:11;26093;26077:28;26067:137;;26184:1;26181;26174:12;26067:137;26252:3;26234:16;26231:25;26221:150;;26351:1;26348;26341:12;26221:150;26415:3;26401:12;26398:21;26388:145;;26513:1;26510;26503:12;26388:145;26793:24;;27137:4;26839:20;27195:2;26897:21;;26793:24;26955:18;26839:20;26897:21;;;26793:24;26770:21;26766:52;;;26955:18;26839:20;;;26897:21;;;26793:24;26766:52;;26839:20;;26897:21;;;26793:24;26766:52;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;;26955:18;26839:20;26897:21;;;26793:24;26770:21;26766:52;;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;26955:18;26839:20;27813:10;26955:18;27803:21;;;26897;;;;27911:1;27896:77;27921:2;27918:1;27915:9;27896:77;;;26793:24;;26770:21;26766:52;26839:20;;27969:1;26897:21;;;;26781:2;26955:18;;;;27939:1;27932:9;27896:77;;;27900:14;;;28051:5;:12;;;28047:71;;;28090:13;:11;:13::i;:::-;28083:20;;;;;28047:71;28132:10;;;:15;;28146:1;28132:15;;;;;28217:8;;;;-1:-1:-1;;28209:20:105;;-1:-1:-1;28209:7:105;:20::i;:::-;28195:34;-1:-1:-1;28259:10:105;28267:2;28259:10;;;;28336:1;28326:11;;;:26;;;28341:6;:11;;28351:1;28341:11;28326:26;28322:310;;;28482:13;28551:1;28529:4;28536:10;28529:17;28528:24;;;;28499:5;:12;;;28514:10;28499:25;28498:54;28482:70;;28577:40;28588:6;:11;;28598:1;28588:11;:20;;28606:2;28588:20;;;28602:1;28588:20;28577:40;;28610:6;28577:10;:40::i;:::-;28570:47;;;;;;;;28322:310;28881:15;;;;28676:9;;;;28813:4;28807:2;28799:10;;;28798:19;;;28881:15;28906:2;28898:10;;;28897:19;28881:36;;;;;;;:::i;:::-;;;;;;-1:-1:-1;28946:5:105;28970:11;;;;;:29;;;28985:6;:14;;28995:4;28985:14;28970:29;28966:832;;;29062:5;:15;;;29078:5;29062:22;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;29125:4:105;29119:2;29111:10;;;29110:19;28966:832;;;29163:4;29154:6;:13;;;29150:648;;;29284:6;:13;;29294:3;29284:13;:30;;;;29301:6;:13;;29311:3;29301:13;29284:30;:47;;;;29318:6;:13;;29328:3;29318:13;29284:47;29280:253;;;29394:4;29401:6;29394:13;29389:18;;29150:648;;29280:253;29493:21;29496:4;29503:6;29496:13;29511:2;29493;:21::i;:::-;29488:26;;29150:648;;;29567:4;29557:6;:14;;;;:32;;;;29575:6;:14;;29585:4;29575:14;29557:32;:50;;;;29593:6;:14;;29603:4;29593:14;29557:50;29553:245;;;29677:5;:15;;;29693:5;29677:22;;;;;;;;;:::i;:::-;;;;;29672:27;;29778:5;29770:13;;29553:245;29827:1;29817:6;:11;;;;:25;;;;;29841:1;29832:6;:10;;;29817:25;29816:42;;;;29847:6;:11;;29857:1;29847:11;29816:42;29812:125;;;29885:37;29898:6;29906:4;29912:5;29919:2;29885:12;:37::i;:::-;29878:44;;;;;;;;;;;29812:125;29970:13;29951:16;30122:4;30112:14;;;;30108:446;;30191:21;30194:4;30201:6;30194:13;30209:2;30191;:21::i;:::-;30185:27;;;;30249:10;30244:15;;30283:16;30244:15;30297:1;30283:7;:16::i;:::-;30277:22;;30331:4;30321:6;:14;;;;:32;;;;;30339:6;:14;;30349:4;30339:14;;30321:32;30317:223;;;30418:4;30406:16;;30520:1;30512:9;;30317:223;30128:426;30108:446;30587:10;30600:26;30608:4;30614:2;30618;30622:3;30600:7;:26::i;:::-;30629:10;30600:39;;;;-1:-1:-1;30725:4:105;30718:11;;;30757;;;:24;;;;;30780:1;30772:4;:9;;;;30757:24;:39;;;;;30792:4;30785;:11;;;30757:39;30753:847;;;30820:4;:9;;30828:1;30820:9;:22;;;;30833:4;:9;;30841:1;30833:9;30820:22;30816:144;;;30904:37;30915:4;:9;;30923:1;30915:9;:21;;30931:5;30915:21;;;30927:1;30915:21;30938:2;30904:10;:37::i;:::-;30897:44;;;;;;;;;;;;;;;30816:144;30982:4;:11;;30990:3;30982:11;30978:121;;31052:28;31061:5;31068:2;31072:7;;;;31052:8;:28::i;30978:121::-;31120:4;:11;;31128:3;31120:11;31116:121;;31190:28;31199:5;31206:2;31210:7;;;;;31190:8;:28::i;31116:121::-;31307:4;:11;;31315:3;31307:11;31303:80;;31349:15;:13;:15::i;31303:80::-;31486:4;31478;:12;;;;:27;;;;;31501:4;31494;:11;;;31478:27;31474:112;;;31536:31;31547:4;31553:2;31557;31561:5;31536:10;:31::i;31474:112::-;31660:6;:14;;31670:4;31660:14;:28;;;;-1:-1:-1;31678:10:105;;;;;31660:28;31656:93;;;31733:1;31708:5;:15;;;31724:5;31708:22;;;;;;;;;:::i;:::-;:26;;;;:22;;;;;;:26;31656:93;31795:9;:26;;31808:13;31795:26;31791:92;;31841:27;31850:9;31861:1;31864:3;31841:8;:27::i;:::-;31964:26;31973:5;31980:3;31985:4;31964:8;:26::i;:::-;31957:33;;;;;;;;;;;;;25668:6339;;;;;;;:::o;3092:2447::-;3639:4;3633:11;;3555:4;3358:31;3347:43;;3418:13;3358:31;3757:2;3457:13;;3347:43;3364:24;3358:31;3457:13;;;3347:43;;;;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3418:13;4194:11;3364:24;3358:31;3457:13;;;3347:43;3418:13;4299:11;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3133:12;;4440:13;;3633:11;;3457:13;;;;4189:3;4185:21;;;;4290;;3133:12;4520:84;4545:2;4542:1;4539:9;4520:84;;;3374:13;3364:24;;3358:31;3347:43;;3378:2;3418:13;;;;4600:1;3457:13;;;;4563:1;4556:9;4520:84;;;4524:14;4667:1;4663:2;4656:13;4762:5;4758:2;4754:14;4747:5;4742:27;4783:500;;;4824:7;4857;4886:1;4881:309;;;;5266:1;5255:12;;4850:419;;4881:309;4917:9;4984:23;;;;5072:1;5067:23;;;;5169:1;5158:12;;4910:262;;4984:23;5004:1;4993:12;;4984:23;;5067;5087:1;5076:12;;4910:262;;4850:419;;4783:500;;;;:::o;:::-;5310:26;5327:8;5319:6;5310:26;:::i;:::-;5435:14;;;;5418:32;;;5496:19;5492:30;5504:3;5474:16;;;;5471:52;;;;;;-1:-1:-1;;;;3092:2447:105:o;21723:1831::-;21796:11;21907:14;21924:24;21936:11;21924;:24::i;:::-;21907:41;;22056:1;22049:5;22045:13;22042:33;;;22071:1;22068;22061:12;22042:33;22204:2;22192:15;;;22145:20;22634:5;22631:1;22627:13;22669:4;22705:1;22690:343;22715:2;22712:1;22709:9;22690:343;;;22838:2;22826:15;;;22775:20;22873:12;;;22887:1;22869:20;22910:42;;;;22978:1;22973:42;;;;22862:153;;22910:42;22368:1;22361:12;;;22401:2;22394:13;;;22446:2;22433:16;;22919:31;;22910:42;;22973;22368:1;22361:12;;;22401:2;22394:13;;;22446:2;22433:16;;22982:31;;22862:153;-1:-1:-1;;22733:1:105;22726:9;22690:343;;;22694:14;23143:4;23137:11;23122:26;;23229:7;23223:4;23220:17;23210:124;;23271:10;23268:1;23261:21;23313:2;23310:1;23303:13;23210:124;-1:-1:-1;;23461:2:105;23450:14;;;;23438:10;23434:31;23431:1;23427:39;23495:16;;;;23513:10;23491:33;;21723:1831;-1:-1:-1;;;21723:1831:105:o;18833:823::-;18902:12;18989:18;;:::i;:::-;19057:4;19048:13;;19109:5;:8;;;19120:1;19109:12;19093:28;;:5;:12;;;:28;;;19089:95;;19141:28;;;;;2114:2:257;19141:28:105;;;2096:21:257;2153:2;2133:18;;;2126:30;2192:20;2172:18;;;2165:48;2230:18;;19141:28:105;;;;;;;;19089:95;19273:8;;;;;19306:12;;;;;19295:23;;;;;;;19332:20;;;;;19273:8;19464:13;;;19460:90;;19525:6;19534:1;19525:10;19497:5;:15;;;19513:8;19497:25;;;;;;;;;:::i;:::-;:38;;;;:25;;;;;;:38;19460:90;19626:13;:11;:13::i;:::-;19619:20;18833:823;-1:-1:-1;;;;;18833:823:105:o;2645:339::-;2706:11;2770:18;;;;2779:8;;;;2770:18;;;;;;2769:25;;;;;2786:1;2833:2;:9;;;2827:16;;;;;2826:22;;2825:32;;;;;;;2887:9;;2886:15;2769:25;2944:21;;2964:1;2944:21;;;2955:6;2944:21;2929:11;;;;;:37;;-1:-1:-1;;;2645:339:105;;;;:::o;13694:2026::-;13791:12;13877:18;;:::i;:::-;13945:4;13936:13;;13977:17;14037:5;:8;;;14048:1;14037:12;14021:28;;:5;:12;;;:28;;;14017:97;;14069:30;;;;;2461:2:257;14069:30:105;;;2443:21:257;2500:2;2480:18;;;2473:30;2539:22;2519:18;;;2512:50;2579:18;;14069:30:105;2259:344:257;14017:97:105;14184:7;:12;;14195:1;14184:12;:28;;;;14200:7;:12;;14211:1;14200:12;14184:28;14180:947;;;14232:9;14244:5;:15;;;14260:6;14244:23;;;;;;;;;:::i;:::-;;;;;14232:35;;14308:2;14301:9;;:3;:9;;;:25;;;;;14314:7;:12;;14325:1;14314:12;14301:25;14300:58;;;;14339:2;14332:9;;:3;:9;;;;:25;;;;;14345:7;:12;;14356:1;14345:12;14332:25;14285:73;;14214:159;14180:947;;;14470:7;:12;;14481:1;14470:12;14466:661;;14531:1;14523:3;14517:15;;;;14502:30;;14466:661;;;14635:7;:12;;14646:1;14635:12;14631:496;;14695:1;14688:3;14682:14;;;14667:29;;14631:496;;;14816:7;:12;;14827:1;14816:12;14812:315;;14904:4;14898:2;14889:11;;;14888:20;14874:10;14931:8;;;14927:84;;14991:1;14984:3;14978:14;;;14963:29;;14927:84;15032:3;:8;;15039:1;15032:8;15028:85;;15093:1;15085:3;15079:15;;;;15064:30;;15028:85;14830:297;14812:315;15203:8;;;;;15281:12;;;;15270:23;;;;;15437:178;;;;15528:1;15502:22;15505:5;15513:6;15505:14;15521:2;15502;:22::i;:::-;:27;;;;;;;15488:42;;15497:1;15488:42;15473:57;:12;;;:57;15437:178;;;15584:12;;;;;15599:1;15584:16;15569:31;;;;15437:178;15690:13;:11;:13::i;:::-;15683:20;13694:2026;-1:-1:-1;;;;;;;;13694:2026:105:o;32053:8733::-;32140:10;32202;32210:2;32202:10;;;;32241:11;;;:44;;;32267:1;32257:6;:11;;;;:27;;;;;32281:3;32272:6;:12;;;32257:27;32237:8490;;;32326:4;32319:11;;32450:6;32510:3;32505:25;;;;32585:3;32580:25;;;;32659:3;32654:25;;;;32734:3;32729:25;;;;32808:3;32803:25;;;;32881:3;32876:25;;;;32955:3;32950:25;;;;32443:532;;32505:25;32524:4;32516:12;;32505:25;;32580;32599:4;32591:12;;32580:25;;32654;32673:4;32665:12;;32654:25;;32729;32748:4;32740:12;;32729:25;;32803;32822:4;32814:12;;32803:25;;32876;32895:4;32887:12;;32876:25;;32950;32969:4;32961:12;;32443:532;;33038:4;:12;;33046:4;33038:12;33034:4023;;-1:-1:-1;;;33089:9:105;33081:26;;33102:4;33097:1;33089:9;;;33088:18;33081:26;33074:33;;33034:4023;33175:4;:12;;33183:4;33175:12;33171:3886;;-1:-1:-1;;;33226:9:105;33218:26;;33239:4;33234:1;33226:9;;;33225:18;33218:26;33211:33;;33171:3886;33312:4;:12;;33320:4;33312:12;33308:3749;;33377:4;33372:1;33364:9;;;33363:18;33410:27;33364:9;33413:11;;;;33426:2;:10;;;33410:2;:27::i;:::-;33403:34;;;;;;;33308:3749;33506:4;:12;;33514:4;33506:12;33502:3555;;-1:-1:-1;;;33549:17:105;;;33561:4;33556:9;;33549:17;33542:24;;33502:3555;33635:4;:11;;33643:3;33635:11;33631:3426;;-1:-1:-1;;;33677:17:105;;;33689:4;33684:9;;33677:17;33670:24;;33631:3426;33763:4;:12;;33771:4;33763:12;33759:3298;;33806:21;33815:2;33809:8;;:2;:8;;;;33824:2;33819;:7;33806:2;:21::i;:::-;33799:28;;;;;;33759:3298;34076:4;:12;;34084:4;34076:12;34072:2985;;34119:2;34112:9;;;;;;34072:2985;34190:4;:12;;34198:4;34190:12;34186:2871;;34233:2;34226:9;;;;;;34186:2871;34304:4;:12;;34312:4;34304:12;34300:2757;;34347:2;34340:9;;;;;;34300:2757;34418:4;:12;;34426:4;34418:12;34414:2643;;34461:2;34454:9;;;;;;34414:2643;34535:4;:12;;34543:4;34535:12;34531:2526;;34578:2;34571:9;;;;;;34531:2526;34695:4;:12;;34703:4;34695:12;34691:2366;;34738:2;34731:9;;;;;;34691:2366;34809:4;:12;;34817:4;34809:12;34805:2252;;34852:2;34845:9;;;;;;34805:2252;34923:4;:12;;34931:4;34923:12;34919:2138;;34966:2;34959:9;;;;;;34919:2138;35037:4;:12;;35045:4;35037:12;35033:2024;;35080:2;35073:9;;;;;;35033:2024;35151:4;:12;;35159:4;35151:12;35147:1910;;35194:2;35187:9;;;;;;35147:1910;35265:4;:12;;35273:4;35265:12;35261:1796;;35308:2;35301:9;;;;;;35261:1796;35380:4;:12;;35388:4;35380:12;35376:1681;;35423:2;35416:9;;;;;;35376:1681;35493:4;:12;;35501:4;35493:12;35489:1568;;35536:2;35529:9;;;;;;35489:1568;35607:4;:12;;35615:4;35607:12;35603:1454;;35650:2;35643:9;;;;;;35603:1454;35799:4;:12;;35807:4;35799:12;35795:1262;;-1:-1:-1;;;35843:7:105;;;35835:16;;35795:1262;35920:4;:12;;35928:4;35920:12;35916:1141;;-1:-1:-1;;;35964:7:105;;;35956:16;;35916:1141;36040:4;:12;;36048:4;36040:12;36036:1021;;-1:-1:-1;;;36084:7:105;;;36076:16;;36036:1021;36161:4;:12;;36169:4;36161:12;36157:900;;-1:-1:-1;;;36205:7:105;;;36197:16;;36157:900;36281:4;:12;;36289:4;36281:12;36277:780;;-1:-1:-1;;;36325:7:105;;;36317:16;;36277:780;36400:4;:12;;36408:4;36400:12;36396:661;;-1:-1:-1;;;36444:7:105;;;36436:16;;36396:661;36520:4;:12;;36528:4;36520:12;36516:541;;-1:-1:-1;;;36564:7:105;;;36556:16;;36516:541;36640:4;:12;;36648:4;36640:12;36636:421;;-1:-1:-1;;;36685:7:105;;;36683:10;36676:17;;36636:421;36762:4;:12;;36770:4;36762:12;36758:299;;36823:2;36805:21;;36811:2;36805:21;;;:29;;36833:1;36805:29;;;36829:1;36805:29;36798:36;;;;;;;;36758:299;36904:4;:12;;36912:4;36904:12;36900:157;;36952:2;36947:7;;:2;:7;;;:15;;36961:1;36947:15;;36900:157;37009:29;;;;;2810:2:257;37009:29:105;;;2792:21:257;2849:2;2829:18;;;2822:30;2888:21;2868:18;;;2861:49;2927:18;;37009:29:105;2608:343:257;36900:157:105;32287:4784;32237:8490;;;37127:6;:14;;37137:4;37127:14;37123:3590;;37186:4;37179:11;;37261:3;37253:11;;;37249:549;;-1:-1:-1;;;37306:21:105;;;37292:36;;37249:549;37413:4;:12;;37421:4;37413:12;:28;;;;37429:4;:12;;37437:4;37429:12;37413:28;37409:389;;;37473:4;:12;;37481:4;37473:12;37469:83;;37522:3;;;37469:83;37577:8;37615:127;37627:10;37622:15;;:20;37615:127;;37707:8;37674:3;37707:8;;;;;37674:3;37615:127;;;37774:1;-1:-1:-1;37767:8:105;;-1:-1:-1;;37767:8:105;37123:3590;37865:6;:14;;37875:4;37865:14;37861:2852;;-1:-1:-1;;37910:8:105;37916:2;37910:8;;;;37903:15;;37861:2852;37985:6;:14;;37995:4;37985:14;37981:2732;;38030:42;38048:2;38053:1;38048:6;38058:1;38047:12;38042:2;:17;38034:26;;:3;:26;;;;38064:4;38033:35;38070:1;38030:2;:42::i;37981:2732::-;38139:6;:14;;38149:4;38139:14;38135:2578;;38184:45;38202:2;38207:1;38202:6;38212:1;38201:12;38196:2;:17;38188:26;;:3;:26;;;;38218:6;38187:37;38226:2;38184;:45::i;38135:2578::-;38297:6;:14;;38307:4;38297:14;38293:2420;;-1:-1:-1;;38348:21:105;38367:1;38362;38357:6;;38356:12;38348:21;;38405:36;;;38476:5;38471:10;;38348:21;;;;;38470:18;38463:25;;38293:2420;38555:6;:14;;38565:4;38555:14;38551:2162;;38600:3;38593:10;;;;;38551:2162;38671:6;:14;;38681:4;38671:14;38667:2046;;38731:2;38736:1;38731:6;38741:1;38730:12;38725:2;:17;38717:26;;:3;:26;;;;38747:4;38716:35;38709:42;;;;;38667:2046;38820:6;:14;;38830:4;38820:14;38816:1897;;38880:2;38885:1;38880:6;38890:1;38879:12;38874:2;:17;38866:26;;:3;:26;;;;38896:6;38865:37;38858:44;;;;;38816:1897;38971:6;:14;;38981:4;38971:14;38967:1746;;-1:-1:-1;;39022:26:105;39046:1;39041;39036:6;;39035:12;39030:2;:17;39022:26;;39084:41;;;39160:5;39155:10;;39022:26;;;;;39154:18;39147:25;;38967:1746;39240:6;:14;;39250:4;39240:14;39236:1477;;-1:-1:-1;;39297:4:105;39291:34;39323:1;39318;39313:6;;39312:12;39307:2;:17;39291:34;;39381:27;;;39361:48;;;39439:10;;39292:9;;;39291:34;;39438:18;39431:25;;39236:1477;39524:6;:14;;39534:4;39524:14;39520:1193;;-1:-1:-1;;39581:6:105;39575:36;39609:1;39604;39599:6;;39598:12;39593:2;:17;39575:36;;39667:29;;;39647:50;;;39727:10;;39576:11;;;39575:36;;39726:18;39719:25;;39520:1193;39813:6;:14;;39823:4;39813:14;39809:904;;-1:-1:-1;;39864:20:105;39882:1;39877;39872:6;;39871:12;39864:20;;39920:36;;;39992:5;39986:11;;39864:20;;;;;39985:19;39978:26;;39809:904;40072:6;:14;;40082:4;40072:14;40068:645;;40117:2;40110:9;;;;;40068:645;40188:6;:14;;40198:4;40188:14;40184:529;;-1:-1:-1;;40239:25:105;40262:1;40257;40252:6;;40251:12;40246:2;:17;40239:25;;40300:41;;;40377:5;40371:11;;40239:25;;;;;40370:19;40363:26;;40184:529;40456:6;:14;;40466:4;40456:14;40452:261;;40501:3;40494:10;;;;;40452:261;40571:6;:14;;40581:4;40571:14;40567:146;;40616:2;40609:9;;;;;19937:782;20023:12;20110:18;;:::i;:::-;-1:-1:-1;20178:4:105;20285:2;20273:14;;;;20265:41;;;;;;;3158:2:257;20265:41:105;;;3140:21:257;3197:2;3177:18;;;3170:30;3236:16;3216:18;;;3209:44;3270:18;;20265:41:105;2956:338:257;20265:41:105;20402:14;;;;;;;:30;;;20420:12;20402:30;20398:102;;;20481:4;20452:5;:15;;;20468:9;20452:26;;;;;;;;;:::i;:::-;:33;;;;:26;;;;;;:33;20398:102;20555:12;;;;;20544:23;;;;:8;;;:23;20611:1;20596:16;;;20581:31;;;20689:13;:11;:13::i;5580:7728::-;5623:12;5709:18;;:::i;:::-;-1:-1:-1;5887:15:105;;:18;;;;5777:4;6047:18;;;;6091;;;;6135;;;;;5777:4;;5867:17;;;;6047:18;6091;6225;;;6239:4;6225:18;6221:6777;;6275:2;6304:4;6299:9;;:14;6295:144;;6415:4;6410:9;;6402:4;:18;6396:24;6295:144;6460:2;:7;;6466:1;6460:7;6456:161;;6496:10;;;;;6528:16;;;;;;;;6496:10;-1:-1:-1;6456:161:105;;;6596:2;6591:7;;6456:161;6245:386;6221:6777;;;6733:10;:18;;6747:4;6733:18;6729:6269;;1745:10;6771:14;;6729:6269;;;6869:10;:18;;6883:4;6869:18;6865:6133;;6912:1;6907:6;;6865:6133;;;7037:10;:18;;7051:4;7037:18;7033:5965;;7090:4;7075:12;;;:19;7112:26;;;:14;;;:26;7163:13;:11;:13::i;:::-;7156:20;;;;;;;;;5580:7728;:::o;7033:5965::-;7302:10;:18;;7316:4;7302:18;7298:5700;;7453:14;;;7449:2708;7298:5700;7449:2708;7623:22;;;;;7619:2538;;7748:10;7761:27;7769:2;7774:10;7769:15;7786:1;7761:7;:27::i;:::-;7872:17;;;;7748:40;;-1:-1:-1;7872:17:105;7850:19;8022:14;8041:1;8016:26;8012:131;;8084:36;8108:11;1277:21:106;1426:15;;;1467:8;1461:4;1454:22;1595:4;1582:18;;1602:19;1578:44;1624:11;1575:61;;1222:430;8084:36:105;8070:50;;8012:131;8229:20;;;;;8196:54;;;;;;;;3472:25:257;;;8196:54:105;3533:23:257;;;3513:18;;;3506:51;8165:11:105;;;;8196:19;:6;:19;;;;3445:18:257;;8196:54:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8164:86;;;;8477:1;8473:2;8469:10;8574:9;8571:1;8567:17;8656:6;8649:5;8646:17;8643:40;;;8676:5;8666:15;;8643:40;;8759:6;8755:2;8752:14;8749:34;;;8779:2;8769:12;;8749:34;8885:3;8880:1;8872:6;8868:14;8863:3;8859:24;8855:34;8848:41;;8985:3;8981:1;8969:9;8960:6;8957:1;8953:14;8949:30;8945:38;8941:48;8934:55;;9140:1;9136;9132;9120:9;9117:1;9113:17;9109:25;9105:33;9101:41;9267:1;9263;9259;9250:6;9238:9;9235:1;9231:17;9227:30;9223:38;9219:46;9215:54;9197:72;;9398:10;9394:15;9388:4;9384:26;9376:34;;9514:3;9506:4;9502:9;9497:3;9493:19;9490:28;9483:35;;;;9660:33;9669:2;9674:10;9669:15;9686:1;9689:3;9660:8;:33::i;:::-;9715:20;;;:38;;;;;;;;;-1:-1:-1;7619:2538:105;;-1:-1:-1;;;7619:2538:105;;9872:18;;;;;9868:289;;10042:2;10037:7;;7298:5700;;9868:289;10096:10;10091:15;;2053:3;10128:10;;9868:289;7298:5700;;;10286:10;:18;;10300:4;10286:18;10282:2716;;10440:15;;;1824:1;10440:15;;:34;;-1:-1:-1;10459:15:105;;;1859:1;10459:15;10440:34;:57;;;-1:-1:-1;10478:19:105;;;1936:1;10478:19;10440:57;10436:1593;;;10526:2;10521:7;;10282:2716;;10436:1593;10652:23;;;;;10648:1381;;10699:10;10712:27;10720:2;10725:10;10720:15;10737:1;10712:7;:27::i;:::-;10815:17;;;;10699:40;;-1:-1:-1;11058:1:105;11050:10;;11152:1;11148:17;11227:13;;;11224:32;;;11249:5;11243:11;;11224:32;11535:14;;;11341:1;11531:22;;;11527:32;;;;11424:26;11448:1;11333:10;;;11428:18;;;11424:26;11523:43;11329:20;;11631:12;11759:17;;;:23;11827:1;11804:20;;;:24;11337:2;-1:-1:-1;11337:2:105;7298:5700;;10282:2716;12231:10;:18;;12245:4;12231:18;12227:771;;12341:2;:7;;12347:1;12341:7;12337:647;;12434:14;;;;;:40;;-1:-1:-1;12452:22:105;;;1978:1;12452:22;12434:40;:62;;;-1:-1:-1;12478:18:105;;;1897:1;12478:18;12434:62;12430:404;;;12529:1;12524:6;;12337:647;;12430:404;12575:15;;;1824:1;12575:15;;:34;;-1:-1:-1;12594:15:105;;;1859:1;12594:15;12575:34;:61;;;-1:-1:-1;12613:23:105;;;2021:1;12613:23;12575:61;:84;;;-1:-1:-1;12640:19:105;;;1936:1;12640:19;12575:84;12571:263;;;12692:1;12687:6;;7298:5700;;12337:647;12885:10;12880:15;;2087:4;12917:11;;12337:647;13073:15;;;;;:23;;;;:18;;;;:23;;;;13110:15;;:23;;;:18;;;;:23;-1:-1:-1;13199:12:105;;;;13188:23;;;:8;;;:23;13255:1;13240:16;13225:31;;;;;13278:13;:11;:13::i;16061:2480::-;16155:12;16241:18;;:::i;:::-;-1:-1:-1;16309:4:105;16341:10;16449:13;;;16458:4;16449:13;16445:1705;;-1:-1:-1;16488:8:105;;;;16445:1705;;;16607:5;:13;;16616:4;16607:13;16603:1547;;16640:14;;;:8;;;:14;16603:1547;;;16770:5;:13;;16779:4;16770:13;16766:1384;;-1:-1:-1;16809:8:105;;;;16766:1384;;;16928:5;:13;;16937:4;16928:13;16924:1226;;16961:14;;;:8;;;:14;16924:1226;;;17102:5;:13;;17111:4;17102:13;17098:1052;;17229:9;17175:17;17155;;;17175;;;;17155:37;17236:2;17229:9;;;;;17211:8;;;:28;17257:22;:8;;;:22;17098:1052;;;17416:5;:13;;17425:4;17416:13;17412:738;;17483:11;17469;;;17483;;;17469:25;17538:2;17531:9;;;;;17513:8;;;:28;17559:22;:8;;;:22;17412:738;;;17740:5;:13;;17749:4;17740:13;17736:414;;17810:3;17791:23;;17797:3;17791:23;;;;;;;:::i;:::-;;17773:42;;:8;;;:42;17851:23;;;;;;;;;;;;;:::i;:::-;;17833:42;;:8;;;:42;17736:414;;;18044:5;:13;;18053:4;18044:13;18040:110;;18094:3;18088:9;;:3;:9;;;;;;;:::i;:::-;;18077:20;;;;:8;;;:20;18126:9;;;;;;;;;;;:::i;:::-;;18115:20;;:8;;;:20;18040:110;18243:14;;;;18239:85;;18306:3;18277:5;:15;;;18293:9;18277:26;;;;;;;;;:::i;:::-;:32;;;;:26;;;;;;:32;18239:85;18378:12;;;;;18367:23;;;;:8;;;:23;18434:1;18419:16;;;18404:31;;;18511:13;:11;:13::i;:::-;18504:20;16061:2480;-1:-1:-1;;;;;;;16061:2480:105:o;23890:1654::-;24066:14;24083:24;24095:11;24083;:24::i;:::-;24066:41;;24215:1;24208:5;24204:13;24201:33;;;24230:1;24227;24220:12;24201:33;24369:2;24563:15;;;24388:2;24377:14;;24365:10;24361:31;24358:1;24354:39;24519:16;;;24304:20;;24504:10;24493:22;;;24489:27;24479:38;24476:60;25005:5;25002:1;24998:13;25076:1;25061:343;25086:2;25083:1;25080:9;25061:343;;;25209:2;25197:15;;;25146:20;25244:12;;;25258:1;25240:20;25281:42;;;;25349:1;25344:42;;;;25233:153;;25281:42;22368:1;22361:12;;;22401:2;22394:13;;;22446:2;22433:16;;25290:31;;25281:42;;25344;22368:1;22361:12;;;22401:2;22394:13;;;22446:2;22433:16;;25353:31;;25233:153;-1:-1:-1;;25104:1:105;25097:9;25061:343;;;-1:-1:-1;;25503:4:105;25496:18;-1:-1:-1;;;;23890:1654:105:o;20923:586::-;21245:20;;;21269:7;21245:32;21238:3;:40;;;21351:14;;21406:17;;21400:24;;;21392:72;;;;;;;4209:2:257;21392:72:105;;;4191:21:257;4248:2;4228:18;;;4221:30;4287:34;4267:18;;;4260:62;4358:5;4338:18;;;4331:33;4381:19;;21392:72:105;4007:399:257;21392:72:105;21478:14;20923:586;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;467:347:257:-;518:8;528:6;582:3;575:4;567:6;563:17;559:27;549:55;;600:1;597;590:12;549:55;-1:-1:-1;623:20:257;;666:18;655:30;;652:50;;;698:1;695;688:12;652:50;735:4;727:6;723:17;711:29;;787:3;780:4;771:6;763;759:19;755:30;752:39;749:59;;;804:1;801;794:12;749:59;467:347;;;;;:::o;819:717::-;909:6;917;925;933;986:2;974:9;965:7;961:23;957:32;954:52;;;1002:1;999;992:12;954:52;1042:9;1029:23;1071:18;1112:2;1104:6;1101:14;1098:34;;;1128:1;1125;1118:12;1098:34;1167:58;1217:7;1208:6;1197:9;1193:22;1167:58;:::i;:::-;1244:8;;-1:-1:-1;1141:84:257;-1:-1:-1;1332:2:257;1317:18;;1304:32;;-1:-1:-1;1348:16:257;;;1345:36;;;1377:1;1374;1367:12;1345:36;;1416:60;1468:7;1457:8;1446:9;1442:24;1416:60;:::i;:::-;819:717;;;;-1:-1:-1;1495:8:257;-1:-1:-1;;;;819:717:257:o;1723:184::-;1775:77;1772:1;1765:88;1872:4;1869:1;1862:15;1896:4;1893:1;1886:15;3568:245;3647:6;3655;3708:2;3696:9;3687:7;3683:23;3679:32;3676:52;;;3724:1;3721;3714:12;3676:52;-1:-1:-1;;3747:16:257;;3803:2;3788:18;;;3782:25;3747:16;;3782:25;;-1:-1:-1;3568:245:257:o;3818:184::-;3870:77;3867:1;3860:88;3967:4;3964:1;3957:15;3991:4;3988:1;3981:15" func init() { if err := json.Unmarshal([]byte(MIPSStorageLayoutJSON), MIPSStorageLayout); err != nil { diff --git a/packages/contracts-bedrock/src/cannon/MIPS.sol b/packages/contracts-bedrock/src/cannon/MIPS.sol index 1fc67286632a..1b88770472bb 100644 --- a/packages/contracts-bedrock/src/cannon/MIPS.sol +++ b/packages/contracts-bedrock/src/cannon/MIPS.sol @@ -123,10 +123,15 @@ contract MIPS { switch _exited case 1 { switch _exitCode - case 0 { status_ := 0 } // VMStatusValid - case 1 { status_ := 1 } // VMStatusInvalid - default { status_ := 2 } // VMStatusPanic - } default { status_ := 3 } // VMStatusUnfinished + // VMStatusValid + case 0 { status_ := 0 } + // VMStatusInvalid + case 1 { status_ := 1 } + // VMStatusPanic + default { status_ := 2 } + } + // VMStatusUnfinished + default { status_ := 3 } } let status := vmStatus(exited, exitCode) diff --git a/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol b/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol index 27ba98369f5c..d831ce2a6758 100644 --- a/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol +++ b/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol @@ -91,10 +91,6 @@ contract DisputeGameFactory is OwnableUpgradeable, IDisputeGameFactory, Semver { // If there is no implementation to clone for the given `GameType`, revert. if (address(impl) == address(0)) revert NoImplementation(_gameType); - // The VMStatus must indicate (1) 'invalid', to argue that disputed thing is invalid. - // Games that agree with the existing outcome are not allowed. - if (uint8(Claim.unwrap(_rootClaim)[0]) != 1) revert UnexpectedRootClaim(_rootClaim); - // Clone the implementation contract and initialize it with the given parameters. proxy_ = IDisputeGame(address(impl).clone(abi.encodePacked(_rootClaim, _extraData))); proxy_.initialize(); diff --git a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol index eec76d4b03b2..d3992ac40f45 100644 --- a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol +++ b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol @@ -437,6 +437,10 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { // Implicit assumptions: // - The `gameStatus` state variable defaults to 0, which is `GameStatus.IN_PROGRESS` + // The VMStatus must indicate (1) 'invalid', to argue that disputed thing is invalid. + // Games that agree with the existing outcome are not allowed. + if (uint8(Claim.unwrap(rootClaim())[0]) != 1) revert UnexpectedRootClaim(rootClaim()); + // Set the game's starting timestamp createdAt = Timestamp.wrap(uint64(block.timestamp)); diff --git a/packages/contracts-bedrock/test/DisputeGameFactory.t.sol b/packages/contracts-bedrock/test/DisputeGameFactory.t.sol index a93d91b712a0..28f1a25d84ca 100644 --- a/packages/contracts-bedrock/test/DisputeGameFactory.t.sol +++ b/packages/contracts-bedrock/test/DisputeGameFactory.t.sol @@ -36,12 +36,6 @@ contract DisputeGameFactory_Init is L2OutputOracle_Initializer { } contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init { - function changeClaimStatus(Claim claim, uint8 status) public pure returns (Claim _out) { - bytes32 hash = Claim.unwrap(claim); - hash = bytes32((uint256(hash) & (~(uint256(0xff) << 248))) | (uint256(status) << 248)); - return Claim.wrap(hash); - } - /// @dev Tests that the `create` function succeeds when creating a new dispute game /// with a `GameType` that has an implementation set. function testFuzz_create_succeeds(uint8 gameType, Claim rootClaim, bytes calldata extraData) public { @@ -83,17 +77,6 @@ contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init { factory.create(gt, rootClaim, extraData); } - /// @dev Tests that the `create` function reverts when the rootClaim does not disagree with the outcome. - function testFuzz_create_badRootStatus_reverts(uint8 gameType, Claim rootClaim, bytes calldata extraData) public { - // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. - GameType gt = GameType.wrap(uint8(bound(gameType, 0, 2))); - // Ensure the root claim does not have the correct VM status - if (uint8(Claim.unwrap(rootClaim)[0]) == 1) rootClaim = changeClaimStatus(rootClaim, 0); - - vm.expectRevert(abi.encodeWithSelector(UnexpectedRootClaim.selector, rootClaim)); - factory.create(gt, rootClaim, extraData); - } - /// @dev Tests that the `create` function reverts when there exists a dispute game with the same UUID. function testFuzz_create_sameUUID_reverts(uint8 gameType, Claim rootClaim, bytes calldata extraData) public { // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. @@ -122,6 +105,12 @@ contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init { ); factory.create(gt, rootClaim, extraData); } + + function changeClaimStatus(Claim claim, uint8 status) public pure returns (Claim _out) { + bytes32 hash = Claim.unwrap(claim); + hash = bytes32((uint256(hash) & (~(uint256(0xff) << 248))) | (uint256(status) << 248)); + return Claim.wrap(hash); + } } contract DisputeGameFactory_SetImplementation_Test is DisputeGameFactory_Init { diff --git a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol index 3d837942d17a..82baa9ab769f 100644 --- a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol @@ -143,6 +143,16 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init { factory.create(GAME_TYPE, ROOT_CLAIM, abi.encode(1800, block.number - 1)); } + /// @dev Tests that the `create` function reverts when the rootClaim does not disagree with the outcome. + function testFuzz_initialize_badRootStatus_reverts(Claim rootClaim, bytes calldata extraData) public { + // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. + // Ensure the root claim does not have the correct VM status + if (uint8(Claim.unwrap(rootClaim)[0]) == 1) rootClaim = changeClaimStatus(rootClaim, 0); + + vm.expectRevert(abi.encodeWithSelector(UnexpectedRootClaim.selector, rootClaim)); + factory.create(GameTypes.FAULT, rootClaim, extraData); + } + /// @dev Tests that the game is initialized with the correct data. function test_initialize_correctData_succeeds() public { // Starting @@ -449,6 +459,12 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init { bytes32 h = keccak256(abi.encode(_ident | (1 << 248), address(gameProxy))); return bytes32((uint256(h) & ~uint256(0xFF << 248)) | (1 << 248)); } + + function changeClaimStatus(Claim claim, uint8 status) public pure returns (Claim _out) { + bytes32 hash = Claim.unwrap(claim); + hash = bytes32((uint256(hash) & (~(uint256(0xff) << 248))) | (uint256(status) << 248)); + return Claim.wrap(hash); + } } /// @notice A generic game player actor with a configurable trace. diff --git a/packages/contracts-bedrock/test/MIPS.t.sol b/packages/contracts-bedrock/test/MIPS.t.sol index 6557d7c12f4f..612f13ee0329 100644 --- a/packages/contracts-bedrock/test/MIPS.t.sol +++ b/packages/contracts-bedrock/test/MIPS.t.sol @@ -1553,10 +1553,31 @@ contract MIPS_Test is CommonTest { ); } + /// @dev MIPS VM status codes: + /// 0. Exited with success (Valid) + /// 1. Exited with success (Invalid) + /// 2. Exited with failure (Panic) + /// 3. Unfinished + function vmStatus(MIPS.State memory state) internal pure returns (uint8 out_) { + if (state.exited) { + if (state.exitCode == 0) { + return 0; + } else if (state.exitCode == 1) { + return 1; + } else { + return 2; + } + } else { + return 3; + } + } + function outputState(MIPS.State memory state) internal pure returns (bytes32 out_) { bytes memory enc = encodeState(state); + uint8 status = vmStatus(state); assembly { out_ := keccak256(add(enc, 0x20), 226) + out_ := or(and(not(shl(248, 0xFF)), out_), shl(248, status)) } } From f6c7fa5bf9a54b05d60b53fb6a2ff9640613dcda Mon Sep 17 00:00:00 2001 From: clabby Date: Sat, 2 Sep 2023 18:23:57 -0400 Subject: [PATCH 05/20] Fix offset bug when loading `exited` and `exitCode` --- op-bindings/bindings/mips.go | 2 +- op-bindings/bindings/mips_more.go | 4 ++-- packages/contracts-bedrock/src/cannon/MIPS.sol | 6 +++--- packages/contracts-bedrock/test/MIPS.t.sol | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/op-bindings/bindings/mips.go b/op-bindings/bindings/mips.go index 2993a8b1bc05..6a2620684114 100644 --- a/op-bindings/bindings/mips.go +++ b/op-bindings/bindings/mips.go @@ -31,7 +31,7 @@ var ( // MIPSMetaData contains all meta data concerning the MIPS contract. var MIPSMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BRK_START\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"oracle_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b50604051611ed2380380611ed283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051611e4161009160003960008181608501526116070152611e416000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d46565b6100d0565b604051908152602001610062565b60006100da611c73565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff16905260608101516000906102039082610755565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff1682610811565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611db2565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611db2565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff16601061090b565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611db2565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f68587848761097e565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff16601061090b565b9095019463fffffffc861661043a816001610755565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b8e565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b89610811565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a1615611312565b8063ffffffff16600b03610546576104f3858963ffffffff8a161515611312565b8063ffffffff16600c0361055c576104f36113f8565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f38189898861192c565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611db2565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b26565b61060385836001611312565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019160f890811c91901c855b60208110156106bf57601c860151845260209095019460049093019260010161069b565b506000835283830384a0610711565b600081600181146106e2576003915061070a565b8380156106fa57600181146107035760029250610708565b60009250610708565b600192505b505b5092915050565b61071b82826106ce565b928490039093207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89290921b91909117949350505050565b60008061076183611bca565b9050600384161561077157600080fd5b6020810190358460051c8160005b601b8110156107d75760208501943583821c60011680156107a757600181146107bc576107cd565b600084815260208390526040902093506107cd565b600082815260208590526040902093505b505060010161077f565b5060805191508181146107f257630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b600061081b611c73565b60809050806060015160040163ffffffff16816080015163ffffffff16146108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108fa57806008018261016001518663ffffffff16602081106108e9576108e9611db2565b63ffffffff90921660209290920201525b610902610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b018261096857600061096a565b815b90861663ffffffff16179250505092915050565b6000610988611c73565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f74000000000000000000000000604482015260640161089b565b8663ffffffff1660041480610a2957508663ffffffff166005145b15610aa55760008261016001518663ffffffff1660208110610a4d57610a4d611db2565b602002015190508063ffffffff168563ffffffff16148015610a7557508763ffffffff166004145b80610a9d57508063ffffffff168563ffffffff1614158015610a9d57508763ffffffff166005145b915050610b22565b8663ffffffff16600603610ac25760008460030b13159050610b22565b8663ffffffff16600703610ade5760008460030b139050610b22565b8663ffffffff16600103610b2257601f601087901c166000819003610b075760008560030b1291505b8063ffffffff16600103610b205760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b68576002610b4d8861ffff16601061090b565b63ffffffff90811690911b8201600401166080840152610b7a565b60808301805160040163ffffffff1690525b610b82610619565b98975050505050505050565b6000603f601a86901c16801580610bbd575060088163ffffffff1610158015610bbd5750600f8163ffffffff16105b1561101357603f86168160088114610c045760098114610c0d57600a8114610c1657600b8114610c1f57600c8114610c2857600d8114610c3157600e8114610c3a57610c3f565b60209150610c3f565b60219150610c3f565b602a9150610c3f565b602b9150610c3f565b60249150610c3f565b60259150610c3f565b602691505b508063ffffffff16600003610c665750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c8c5750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610cc257601f600688901c16610cb863ffffffff8716821c602083900361090b565b9350505050610611565b8063ffffffff16600403610ce45750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610d065750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d3957610d308663ffffffff168663ffffffff16901c8760200361090b565b92505050610611565b8063ffffffff16600803610d51578592505050610611565b8063ffffffff16600903610d69578592505050610611565b8063ffffffff16600a03610d81578592505050610611565b8063ffffffff16600b03610d99578592505050610611565b8063ffffffff16600c03610db1578592505050610611565b8063ffffffff16600f03610dc9578592505050610611565b8063ffffffff16601003610de1578592505050610611565b8063ffffffff16601103610df9578592505050610611565b8063ffffffff16601203610e11578592505050610611565b8063ffffffff16601303610e29578592505050610611565b8063ffffffff16601803610e41578592505050610611565b8063ffffffff16601903610e59578592505050610611565b8063ffffffff16601a03610e71578592505050610611565b8063ffffffff16601b03610e89578592505050610611565b8063ffffffff16602003610ea257505050828201610611565b8063ffffffff16602103610ebb57505050828201610611565b8063ffffffff16602203610ed457505050818303610611565b8063ffffffff16602303610eed57505050818303610611565b8063ffffffff16602403610f0657505050828216610611565b8063ffffffff16602503610f1f57505050828217610611565b8063ffffffff16602603610f3857505050828218610611565b8063ffffffff16602703610f525750505082821719610611565b8063ffffffff16602a03610f83578460030b8660030b12610f74576000610f77565b60015b60ff1692505050610611565b8063ffffffff16602b03610fab578463ffffffff168663ffffffff1610610f74576000610f77565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e00000000000000000000000000604482015260640161089b565b50610fab565b8063ffffffff16601c0361109757603f8616600281900361103957505050828202610611565b8063ffffffff166020148061105457508063ffffffff166021145b1561100d578063ffffffff1660200361106b579419945b60005b638000000087161561108d576401fffffffe600197881b16960161106e565b9250610611915050565b8063ffffffff16600f036110b957505065ffffffff0000601083901b16610611565b8063ffffffff166020036110ed576101d38560031660080260180363ffffffff168463ffffffff16901c60ff16600861090b565b8063ffffffff16602103611122576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff16601061090b565b8063ffffffff1660220361115157505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111685782915050610611565b8063ffffffff1660240361119a578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111cd578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111ff57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361123557505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361126c57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361129b57505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112b25783915050610611565b8063ffffffff16602e036112e457505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112fb5782915050610611565b8063ffffffff16603803610fab5783915050610611565b600061131c611c73565b506080602063ffffffff86161061138f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c6964207265676973746572000000000000000000000000000000000000604482015260640161089b565b63ffffffff8516158015906113a15750825b156113d557838161016001518663ffffffff16602081106113c4576113c4611db2565b63ffffffff90921660209290920201525b60808101805163ffffffff80821660608501526004909101169052610902610619565b6000611402611c73565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa0361147c5781610fff81161561144b57610fff811661100003015b8363ffffffff166000036114725760e08801805163ffffffff838201169091529550611476565b8395505b506118eb565b8563ffffffff16610fcd0361149757634000000094506118eb565b8563ffffffff16611018036114af57600194506118eb565b8563ffffffff16611096036114e457600161012088015260ff83166101008801526114d8610619565b97505050505050505090565b8563ffffffff16610fa30361174e5763ffffffff8316156118eb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff84160161170857600061153f8363fffffffc166001610755565b60208901519091508060001a6001036115ac576115a981600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190611de1565b91509150600386168060040382811015611689578092505b5081861015611696578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116ed8663fffffffc16600186611b26565b60408b018051820163ffffffff169052975061174992505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161173d578094506118eb565b63ffffffff9450600993505b6118eb565b8563ffffffff16610fa40361183f5763ffffffff831660011480611778575063ffffffff83166002145b80611789575063ffffffff83166004145b15611796578094506118eb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff84160161173d5760006117d68363fffffffc166001610755565b602089015190915060038416600403838110156117f1578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118eb565b8563ffffffff16610fd7036118eb578163ffffffff166003036118df5763ffffffff83161580611875575063ffffffff83166005145b80611886575063ffffffff83166003145b1561189457600094506118eb565b63ffffffff8316600114806118af575063ffffffff83166002145b806118c0575063ffffffff83166006145b806118d1575063ffffffff83166004145b1561173d57600194506118eb565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114d8610619565b6000611936611c73565b506080600063ffffffff8716601003611954575060c0810151611abd565b8663ffffffff166011036119735763ffffffff861660c0830152611abd565b8663ffffffff1660120361198c575060a0810151611abd565b8663ffffffff166013036119ab5763ffffffff861660a0830152611abd565b8663ffffffff166018036119df5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611abd565b8663ffffffff16601903611a105763ffffffff86811681871602602081901c821660c08501521660a0830152611abd565b8663ffffffff16601a03611a66578460030b8660030b81611a3357611a33611e05565b0763ffffffff1660c0830152600385810b9087900b81611a5557611a55611e05565b0563ffffffff1660a0830152611abd565b8663ffffffff16601b03611abd578463ffffffff168663ffffffff1681611a8f57611a8f611e05565b0663ffffffff90811660c084015285811690871681611ab057611ab0611e05565b0463ffffffff1660a08301525b63ffffffff841615611af857808261016001518563ffffffff1660208110611ae757611ae7611db2565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611b1b610619565b979650505050505050565b6000611b3183611bca565b90506003841615611b4157600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611bbf5760208401933582821c6001168015611b8f5760018114611ba457611bb5565b60008581526020839052604090209450611bb5565b600082815260208690526040902094505b5050600101611b67565b505060805250505050565b60ff811661038002610184810190369061050401811015611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f6174610000000000000000000000000000000000000000000000000000000000606482015260840161089b565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cd9611cde565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611d0f57600080fd5b50813567ffffffffffffffff811115611d2757600080fd5b602083019150836020828501011115611d3f57600080fd5b9250929050565b60008060008060408587031215611d5c57600080fd5b843567ffffffffffffffff80821115611d7457600080fd5b611d8088838901611cfd565b90965094506020870135915080821115611d9957600080fd5b50611da687828801611cfd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611df457600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a", + Bin: "0x60a060405234801561001057600080fd5b50604051611ecb380380611ecb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051611e3a61009160003960008181608501526116000152611e3a6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d3f565b6100d0565b604051908152602001610062565b60006100da611c6c565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff1690526060810151600090610203908261074e565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff168261080a565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611dab565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611dab565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff166010610904565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611dab565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f685878487610977565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff166010610904565b9095019463fffffffc861661043a81600161074e565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b87565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b8961080a565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a161561130b565b8063ffffffff16600b03610546576104f3858963ffffffff8a16151561130b565b8063ffffffff16600c0361055c576104f36113f1565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f381898988611925565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611dab565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b1f565b6106038583600161130b565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156106b857601c8601518452602090950194600490930192600101610694565b506000835283830384a061070a565b600081600181146106db5760039150610703565b8380156106f357600181146106fc5760029250610701565b60009250610701565b600192505b505b5092915050565b61071482826106c7565b928490039093207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89290921b91909117949350505050565b60008061075a83611bc3565b9050600384161561076a57600080fd5b6020810190358460051c8160005b601b8110156107d05760208501943583821c60011680156107a057600181146107b5576107c6565b600084815260208390526040902093506107c6565b600082815260208590526040902093505b5050600101610778565b5060805191508181146107eb57630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610814611c6c565b60809050806060015160040163ffffffff16816080015163ffffffff161461089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108f357806008018261016001518663ffffffff16602081106108e2576108e2611dab565b63ffffffff90921660209290920201525b6108fb610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610961576000610963565b815b90861663ffffffff16179250505092915050565b6000610981611c6c565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f740000000000000000000000006044820152606401610894565b8663ffffffff1660041480610a2257508663ffffffff166005145b15610a9e5760008261016001518663ffffffff1660208110610a4657610a46611dab565b602002015190508063ffffffff168563ffffffff16148015610a6e57508763ffffffff166004145b80610a9657508063ffffffff168563ffffffff1614158015610a9657508763ffffffff166005145b915050610b1b565b8663ffffffff16600603610abb5760008460030b13159050610b1b565b8663ffffffff16600703610ad75760008460030b139050610b1b565b8663ffffffff16600103610b1b57601f601087901c166000819003610b005760008560030b1291505b8063ffffffff16600103610b195760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b61576002610b468861ffff166010610904565b63ffffffff90811690911b8201600401166080840152610b73565b60808301805160040163ffffffff1690525b610b7b610619565b98975050505050505050565b6000603f601a86901c16801580610bb6575060088163ffffffff1610158015610bb65750600f8163ffffffff16105b1561100c57603f86168160088114610bfd5760098114610c0657600a8114610c0f57600b8114610c1857600c8114610c2157600d8114610c2a57600e8114610c3357610c38565b60209150610c38565b60219150610c38565b602a9150610c38565b602b9150610c38565b60249150610c38565b60259150610c38565b602691505b508063ffffffff16600003610c5f5750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c855750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610cbb57601f600688901c16610cb163ffffffff8716821c6020839003610904565b9350505050610611565b8063ffffffff16600403610cdd5750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610cff5750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d3257610d298663ffffffff168663ffffffff16901c87602003610904565b92505050610611565b8063ffffffff16600803610d4a578592505050610611565b8063ffffffff16600903610d62578592505050610611565b8063ffffffff16600a03610d7a578592505050610611565b8063ffffffff16600b03610d92578592505050610611565b8063ffffffff16600c03610daa578592505050610611565b8063ffffffff16600f03610dc2578592505050610611565b8063ffffffff16601003610dda578592505050610611565b8063ffffffff16601103610df2578592505050610611565b8063ffffffff16601203610e0a578592505050610611565b8063ffffffff16601303610e22578592505050610611565b8063ffffffff16601803610e3a578592505050610611565b8063ffffffff16601903610e52578592505050610611565b8063ffffffff16601a03610e6a578592505050610611565b8063ffffffff16601b03610e82578592505050610611565b8063ffffffff16602003610e9b57505050828201610611565b8063ffffffff16602103610eb457505050828201610611565b8063ffffffff16602203610ecd57505050818303610611565b8063ffffffff16602303610ee657505050818303610611565b8063ffffffff16602403610eff57505050828216610611565b8063ffffffff16602503610f1857505050828217610611565b8063ffffffff16602603610f3157505050828218610611565b8063ffffffff16602703610f4b5750505082821719610611565b8063ffffffff16602a03610f7c578460030b8660030b12610f6d576000610f70565b60015b60ff1692505050610611565b8063ffffffff16602b03610fa4578463ffffffff168663ffffffff1610610f6d576000610f70565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610894565b50610fa4565b8063ffffffff16601c0361109057603f8616600281900361103257505050828202610611565b8063ffffffff166020148061104d57508063ffffffff166021145b15611006578063ffffffff16602003611064579419945b60005b6380000000871615611086576401fffffffe600197881b169601611067565b9250610611915050565b8063ffffffff16600f036110b257505065ffffffff0000601083901b16610611565b8063ffffffff166020036110e6576101d38560031660080260180363ffffffff168463ffffffff16901c60ff166008610904565b8063ffffffff1660210361111b576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff166010610904565b8063ffffffff1660220361114a57505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111615782915050610611565b8063ffffffff16602403611193578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111c6578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111f857505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361122e57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361126557505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361129457505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112ab5783915050610611565b8063ffffffff16602e036112dd57505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112f45782915050610611565b8063ffffffff16603803610fa45783915050610611565b6000611315611c6c565b506080602063ffffffff861610611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610894565b63ffffffff85161580159061139a5750825b156113ce57838161016001518663ffffffff16602081106113bd576113bd611dab565b63ffffffff90921660209290920201525b60808101805163ffffffff808216606085015260049091011690526108fb610619565b60006113fb611c6c565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036114755781610fff81161561144457610fff811661100003015b8363ffffffff1660000361146b5760e08801805163ffffffff83820116909152955061146f565b8395505b506118e4565b8563ffffffff16610fcd0361149057634000000094506118e4565b8563ffffffff16611018036114a857600194506118e4565b8563ffffffff16611096036114dd57600161012088015260ff83166101008801526114d1610619565b97505050505050505090565b8563ffffffff16610fa3036117475763ffffffff8316156118e4577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117015760006115388363fffffffc16600161074e565b60208901519091508060001a6001036115a5576115a281600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa158015611646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166a9190611dda565b91509150600386168060040382811015611682578092505b508186101561168f578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116e68663fffffffc16600186611b1f565b60408b018051820163ffffffff169052975061174292505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff841601611736578094506118e4565b63ffffffff9450600993505b6118e4565b8563ffffffff16610fa4036118385763ffffffff831660011480611771575063ffffffff83166002145b80611782575063ffffffff83166004145b1561178f578094506118e4565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016117365760006117cf8363fffffffc16600161074e565b602089015190915060038416600403838110156117ea578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118e4565b8563ffffffff16610fd7036118e4578163ffffffff166003036118d85763ffffffff8316158061186e575063ffffffff83166005145b8061187f575063ffffffff83166003145b1561188d57600094506118e4565b63ffffffff8316600114806118a8575063ffffffff83166002145b806118b9575063ffffffff83166006145b806118ca575063ffffffff83166004145b1561173657600194506118e4565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114d1610619565b600061192f611c6c565b506080600063ffffffff871660100361194d575060c0810151611ab6565b8663ffffffff1660110361196c5763ffffffff861660c0830152611ab6565b8663ffffffff16601203611985575060a0810151611ab6565b8663ffffffff166013036119a45763ffffffff861660a0830152611ab6565b8663ffffffff166018036119d85763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611ab6565b8663ffffffff16601903611a095763ffffffff86811681871602602081901c821660c08501521660a0830152611ab6565b8663ffffffff16601a03611a5f578460030b8660030b81611a2c57611a2c611dfe565b0763ffffffff1660c0830152600385810b9087900b81611a4e57611a4e611dfe565b0563ffffffff1660a0830152611ab6565b8663ffffffff16601b03611ab6578463ffffffff168663ffffffff1681611a8857611a88611dfe565b0663ffffffff90811660c084015285811690871681611aa957611aa9611dfe565b0463ffffffff1660a08301525b63ffffffff841615611af157808261016001518563ffffffff1660208110611ae057611ae0611dab565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611b14610619565b979650505050505050565b6000611b2a83611bc3565b90506003841615611b3a57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611bb85760208401933582821c6001168015611b885760018114611b9d57611bae565b60008581526020839052604090209450611bae565b600082815260208690526040902094505b5050600101611b60565b505060805250505050565b60ff811661038002610184810190369061050401811015611c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610894565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cd2611cd7565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611d0857600080fd5b50813567ffffffffffffffff811115611d2057600080fd5b602083019150836020828501011115611d3857600080fd5b9250929050565b60008060008060408587031215611d5557600080fd5b843567ffffffffffffffff80821115611d6d57600080fd5b611d7988838901611cf6565b90965094506020870135915080821115611d9257600080fd5b50611d9f87828801611cf6565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611ded57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a", } // MIPSABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/mips_more.go b/op-bindings/bindings/mips_more.go index d4a715dce20f..30db61b75512 100644 --- a/op-bindings/bindings/mips_more.go +++ b/op-bindings/bindings/mips_more.go @@ -13,9 +13,9 @@ const MIPSStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" var MIPSStorageLayout = new(solc.StorageLayout) -var MIPSDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d46565b6100d0565b604051908152602001610062565b60006100da611c73565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff16905260608101516000906102039082610755565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff1682610811565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611db2565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611db2565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff16601061090b565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611db2565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f68587848761097e565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff16601061090b565b9095019463fffffffc861661043a816001610755565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b8e565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b89610811565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a1615611312565b8063ffffffff16600b03610546576104f3858963ffffffff8a161515611312565b8063ffffffff16600c0361055c576104f36113f8565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f38189898861192c565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611db2565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b26565b61060385836001611312565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019160f890811c91901c855b60208110156106bf57601c860151845260209095019460049093019260010161069b565b506000835283830384a0610711565b600081600181146106e2576003915061070a565b8380156106fa57600181146107035760029250610708565b60009250610708565b600192505b505b5092915050565b61071b82826106ce565b928490039093207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89290921b91909117949350505050565b60008061076183611bca565b9050600384161561077157600080fd5b6020810190358460051c8160005b601b8110156107d75760208501943583821c60011680156107a757600181146107bc576107cd565b600084815260208390526040902093506107cd565b600082815260208590526040902093505b505060010161077f565b5060805191508181146107f257630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b600061081b611c73565b60809050806060015160040163ffffffff16816080015163ffffffff16146108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108fa57806008018261016001518663ffffffff16602081106108e9576108e9611db2565b63ffffffff90921660209290920201525b610902610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b018261096857600061096a565b815b90861663ffffffff16179250505092915050565b6000610988611c73565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f74000000000000000000000000604482015260640161089b565b8663ffffffff1660041480610a2957508663ffffffff166005145b15610aa55760008261016001518663ffffffff1660208110610a4d57610a4d611db2565b602002015190508063ffffffff168563ffffffff16148015610a7557508763ffffffff166004145b80610a9d57508063ffffffff168563ffffffff1614158015610a9d57508763ffffffff166005145b915050610b22565b8663ffffffff16600603610ac25760008460030b13159050610b22565b8663ffffffff16600703610ade5760008460030b139050610b22565b8663ffffffff16600103610b2257601f601087901c166000819003610b075760008560030b1291505b8063ffffffff16600103610b205760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b68576002610b4d8861ffff16601061090b565b63ffffffff90811690911b8201600401166080840152610b7a565b60808301805160040163ffffffff1690525b610b82610619565b98975050505050505050565b6000603f601a86901c16801580610bbd575060088163ffffffff1610158015610bbd5750600f8163ffffffff16105b1561101357603f86168160088114610c045760098114610c0d57600a8114610c1657600b8114610c1f57600c8114610c2857600d8114610c3157600e8114610c3a57610c3f565b60209150610c3f565b60219150610c3f565b602a9150610c3f565b602b9150610c3f565b60249150610c3f565b60259150610c3f565b602691505b508063ffffffff16600003610c665750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c8c5750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610cc257601f600688901c16610cb863ffffffff8716821c602083900361090b565b9350505050610611565b8063ffffffff16600403610ce45750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610d065750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d3957610d308663ffffffff168663ffffffff16901c8760200361090b565b92505050610611565b8063ffffffff16600803610d51578592505050610611565b8063ffffffff16600903610d69578592505050610611565b8063ffffffff16600a03610d81578592505050610611565b8063ffffffff16600b03610d99578592505050610611565b8063ffffffff16600c03610db1578592505050610611565b8063ffffffff16600f03610dc9578592505050610611565b8063ffffffff16601003610de1578592505050610611565b8063ffffffff16601103610df9578592505050610611565b8063ffffffff16601203610e11578592505050610611565b8063ffffffff16601303610e29578592505050610611565b8063ffffffff16601803610e41578592505050610611565b8063ffffffff16601903610e59578592505050610611565b8063ffffffff16601a03610e71578592505050610611565b8063ffffffff16601b03610e89578592505050610611565b8063ffffffff16602003610ea257505050828201610611565b8063ffffffff16602103610ebb57505050828201610611565b8063ffffffff16602203610ed457505050818303610611565b8063ffffffff16602303610eed57505050818303610611565b8063ffffffff16602403610f0657505050828216610611565b8063ffffffff16602503610f1f57505050828217610611565b8063ffffffff16602603610f3857505050828218610611565b8063ffffffff16602703610f525750505082821719610611565b8063ffffffff16602a03610f83578460030b8660030b12610f74576000610f77565b60015b60ff1692505050610611565b8063ffffffff16602b03610fab578463ffffffff168663ffffffff1610610f74576000610f77565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e00000000000000000000000000604482015260640161089b565b50610fab565b8063ffffffff16601c0361109757603f8616600281900361103957505050828202610611565b8063ffffffff166020148061105457508063ffffffff166021145b1561100d578063ffffffff1660200361106b579419945b60005b638000000087161561108d576401fffffffe600197881b16960161106e565b9250610611915050565b8063ffffffff16600f036110b957505065ffffffff0000601083901b16610611565b8063ffffffff166020036110ed576101d38560031660080260180363ffffffff168463ffffffff16901c60ff16600861090b565b8063ffffffff16602103611122576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff16601061090b565b8063ffffffff1660220361115157505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111685782915050610611565b8063ffffffff1660240361119a578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111cd578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111ff57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361123557505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361126c57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361129b57505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112b25783915050610611565b8063ffffffff16602e036112e457505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112fb5782915050610611565b8063ffffffff16603803610fab5783915050610611565b600061131c611c73565b506080602063ffffffff86161061138f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c6964207265676973746572000000000000000000000000000000000000604482015260640161089b565b63ffffffff8516158015906113a15750825b156113d557838161016001518663ffffffff16602081106113c4576113c4611db2565b63ffffffff90921660209290920201525b60808101805163ffffffff80821660608501526004909101169052610902610619565b6000611402611c73565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa0361147c5781610fff81161561144b57610fff811661100003015b8363ffffffff166000036114725760e08801805163ffffffff838201169091529550611476565b8395505b506118eb565b8563ffffffff16610fcd0361149757634000000094506118eb565b8563ffffffff16611018036114af57600194506118eb565b8563ffffffff16611096036114e457600161012088015260ff83166101008801526114d8610619565b97505050505050505090565b8563ffffffff16610fa30361174e5763ffffffff8316156118eb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff84160161170857600061153f8363fffffffc166001610755565b60208901519091508060001a6001036115ac576115a981600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190611de1565b91509150600386168060040382811015611689578092505b5081861015611696578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116ed8663fffffffc16600186611b26565b60408b018051820163ffffffff169052975061174992505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161173d578094506118eb565b63ffffffff9450600993505b6118eb565b8563ffffffff16610fa40361183f5763ffffffff831660011480611778575063ffffffff83166002145b80611789575063ffffffff83166004145b15611796578094506118eb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff84160161173d5760006117d68363fffffffc166001610755565b602089015190915060038416600403838110156117f1578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118eb565b8563ffffffff16610fd7036118eb578163ffffffff166003036118df5763ffffffff83161580611875575063ffffffff83166005145b80611886575063ffffffff83166003145b1561189457600094506118eb565b63ffffffff8316600114806118af575063ffffffff83166002145b806118c0575063ffffffff83166006145b806118d1575063ffffffff83166004145b1561173d57600194506118eb565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114d8610619565b6000611936611c73565b506080600063ffffffff8716601003611954575060c0810151611abd565b8663ffffffff166011036119735763ffffffff861660c0830152611abd565b8663ffffffff1660120361198c575060a0810151611abd565b8663ffffffff166013036119ab5763ffffffff861660a0830152611abd565b8663ffffffff166018036119df5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611abd565b8663ffffffff16601903611a105763ffffffff86811681871602602081901c821660c08501521660a0830152611abd565b8663ffffffff16601a03611a66578460030b8660030b81611a3357611a33611e05565b0763ffffffff1660c0830152600385810b9087900b81611a5557611a55611e05565b0563ffffffff1660a0830152611abd565b8663ffffffff16601b03611abd578463ffffffff168663ffffffff1681611a8f57611a8f611e05565b0663ffffffff90811660c084015285811690871681611ab057611ab0611e05565b0463ffffffff1660a08301525b63ffffffff841615611af857808261016001518563ffffffff1660208110611ae757611ae7611db2565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611b1b610619565b979650505050505050565b6000611b3183611bca565b90506003841615611b4157600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611bbf5760208401933582821c6001168015611b8f5760018114611ba457611bb5565b60008581526020839052604090209450611bb5565b600082815260208690526040902094505b5050600101611b67565b505060805250505050565b60ff811661038002610184810190369061050401811015611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f6174610000000000000000000000000000000000000000000000000000000000606482015260840161089b565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cd9611cde565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611d0f57600080fd5b50813567ffffffffffffffff811115611d2757600080fd5b602083019150836020828501011115611d3f57600080fd5b9250929050565b60008060008060408587031215611d5c57600080fd5b843567ffffffffffffffff80821115611d7457600080fd5b611d8088838901611cfd565b90965094506020870135915080821115611d9957600080fd5b50611da687828801611cfd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611df457600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a" +var MIPSDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d3f565b6100d0565b604051908152602001610062565b60006100da611c6c565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff1690526060810151600090610203908261074e565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff168261080a565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611dab565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611dab565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff166010610904565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611dab565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f685878487610977565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff166010610904565b9095019463fffffffc861661043a81600161074e565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b87565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b8961080a565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a161561130b565b8063ffffffff16600b03610546576104f3858963ffffffff8a16151561130b565b8063ffffffff16600c0361055c576104f36113f1565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f381898988611925565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611dab565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b1f565b6106038583600161130b565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156106b857601c8601518452602090950194600490930192600101610694565b506000835283830384a061070a565b600081600181146106db5760039150610703565b8380156106f357600181146106fc5760029250610701565b60009250610701565b600192505b505b5092915050565b61071482826106c7565b928490039093207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89290921b91909117949350505050565b60008061075a83611bc3565b9050600384161561076a57600080fd5b6020810190358460051c8160005b601b8110156107d05760208501943583821c60011680156107a057600181146107b5576107c6565b600084815260208390526040902093506107c6565b600082815260208590526040902093505b5050600101610778565b5060805191508181146107eb57630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610814611c6c565b60809050806060015160040163ffffffff16816080015163ffffffff161461089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108f357806008018261016001518663ffffffff16602081106108e2576108e2611dab565b63ffffffff90921660209290920201525b6108fb610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610961576000610963565b815b90861663ffffffff16179250505092915050565b6000610981611c6c565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f740000000000000000000000006044820152606401610894565b8663ffffffff1660041480610a2257508663ffffffff166005145b15610a9e5760008261016001518663ffffffff1660208110610a4657610a46611dab565b602002015190508063ffffffff168563ffffffff16148015610a6e57508763ffffffff166004145b80610a9657508063ffffffff168563ffffffff1614158015610a9657508763ffffffff166005145b915050610b1b565b8663ffffffff16600603610abb5760008460030b13159050610b1b565b8663ffffffff16600703610ad75760008460030b139050610b1b565b8663ffffffff16600103610b1b57601f601087901c166000819003610b005760008560030b1291505b8063ffffffff16600103610b195760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b61576002610b468861ffff166010610904565b63ffffffff90811690911b8201600401166080840152610b73565b60808301805160040163ffffffff1690525b610b7b610619565b98975050505050505050565b6000603f601a86901c16801580610bb6575060088163ffffffff1610158015610bb65750600f8163ffffffff16105b1561100c57603f86168160088114610bfd5760098114610c0657600a8114610c0f57600b8114610c1857600c8114610c2157600d8114610c2a57600e8114610c3357610c38565b60209150610c38565b60219150610c38565b602a9150610c38565b602b9150610c38565b60249150610c38565b60259150610c38565b602691505b508063ffffffff16600003610c5f5750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c855750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610cbb57601f600688901c16610cb163ffffffff8716821c6020839003610904565b9350505050610611565b8063ffffffff16600403610cdd5750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610cff5750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d3257610d298663ffffffff168663ffffffff16901c87602003610904565b92505050610611565b8063ffffffff16600803610d4a578592505050610611565b8063ffffffff16600903610d62578592505050610611565b8063ffffffff16600a03610d7a578592505050610611565b8063ffffffff16600b03610d92578592505050610611565b8063ffffffff16600c03610daa578592505050610611565b8063ffffffff16600f03610dc2578592505050610611565b8063ffffffff16601003610dda578592505050610611565b8063ffffffff16601103610df2578592505050610611565b8063ffffffff16601203610e0a578592505050610611565b8063ffffffff16601303610e22578592505050610611565b8063ffffffff16601803610e3a578592505050610611565b8063ffffffff16601903610e52578592505050610611565b8063ffffffff16601a03610e6a578592505050610611565b8063ffffffff16601b03610e82578592505050610611565b8063ffffffff16602003610e9b57505050828201610611565b8063ffffffff16602103610eb457505050828201610611565b8063ffffffff16602203610ecd57505050818303610611565b8063ffffffff16602303610ee657505050818303610611565b8063ffffffff16602403610eff57505050828216610611565b8063ffffffff16602503610f1857505050828217610611565b8063ffffffff16602603610f3157505050828218610611565b8063ffffffff16602703610f4b5750505082821719610611565b8063ffffffff16602a03610f7c578460030b8660030b12610f6d576000610f70565b60015b60ff1692505050610611565b8063ffffffff16602b03610fa4578463ffffffff168663ffffffff1610610f6d576000610f70565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610894565b50610fa4565b8063ffffffff16601c0361109057603f8616600281900361103257505050828202610611565b8063ffffffff166020148061104d57508063ffffffff166021145b15611006578063ffffffff16602003611064579419945b60005b6380000000871615611086576401fffffffe600197881b169601611067565b9250610611915050565b8063ffffffff16600f036110b257505065ffffffff0000601083901b16610611565b8063ffffffff166020036110e6576101d38560031660080260180363ffffffff168463ffffffff16901c60ff166008610904565b8063ffffffff1660210361111b576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff166010610904565b8063ffffffff1660220361114a57505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111615782915050610611565b8063ffffffff16602403611193578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111c6578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111f857505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361122e57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361126557505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361129457505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112ab5783915050610611565b8063ffffffff16602e036112dd57505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112f45782915050610611565b8063ffffffff16603803610fa45783915050610611565b6000611315611c6c565b506080602063ffffffff861610611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610894565b63ffffffff85161580159061139a5750825b156113ce57838161016001518663ffffffff16602081106113bd576113bd611dab565b63ffffffff90921660209290920201525b60808101805163ffffffff808216606085015260049091011690526108fb610619565b60006113fb611c6c565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036114755781610fff81161561144457610fff811661100003015b8363ffffffff1660000361146b5760e08801805163ffffffff83820116909152955061146f565b8395505b506118e4565b8563ffffffff16610fcd0361149057634000000094506118e4565b8563ffffffff16611018036114a857600194506118e4565b8563ffffffff16611096036114dd57600161012088015260ff83166101008801526114d1610619565b97505050505050505090565b8563ffffffff16610fa3036117475763ffffffff8316156118e4577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117015760006115388363fffffffc16600161074e565b60208901519091508060001a6001036115a5576115a281600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa158015611646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166a9190611dda565b91509150600386168060040382811015611682578092505b508186101561168f578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116e68663fffffffc16600186611b1f565b60408b018051820163ffffffff169052975061174292505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff841601611736578094506118e4565b63ffffffff9450600993505b6118e4565b8563ffffffff16610fa4036118385763ffffffff831660011480611771575063ffffffff83166002145b80611782575063ffffffff83166004145b1561178f578094506118e4565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016117365760006117cf8363fffffffc16600161074e565b602089015190915060038416600403838110156117ea578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118e4565b8563ffffffff16610fd7036118e4578163ffffffff166003036118d85763ffffffff8316158061186e575063ffffffff83166005145b8061187f575063ffffffff83166003145b1561188d57600094506118e4565b63ffffffff8316600114806118a8575063ffffffff83166002145b806118b9575063ffffffff83166006145b806118ca575063ffffffff83166004145b1561173657600194506118e4565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114d1610619565b600061192f611c6c565b506080600063ffffffff871660100361194d575060c0810151611ab6565b8663ffffffff1660110361196c5763ffffffff861660c0830152611ab6565b8663ffffffff16601203611985575060a0810151611ab6565b8663ffffffff166013036119a45763ffffffff861660a0830152611ab6565b8663ffffffff166018036119d85763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611ab6565b8663ffffffff16601903611a095763ffffffff86811681871602602081901c821660c08501521660a0830152611ab6565b8663ffffffff16601a03611a5f578460030b8660030b81611a2c57611a2c611dfe565b0763ffffffff1660c0830152600385810b9087900b81611a4e57611a4e611dfe565b0563ffffffff1660a0830152611ab6565b8663ffffffff16601b03611ab6578463ffffffff168663ffffffff1681611a8857611a88611dfe565b0663ffffffff90811660c084015285811690871681611aa957611aa9611dfe565b0463ffffffff1660a08301525b63ffffffff841615611af157808261016001518563ffffffff1660208110611ae057611ae0611dab565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611b14610619565b979650505050505050565b6000611b2a83611bc3565b90506003841615611b3a57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611bb85760208401933582821c6001168015611b885760018114611b9d57611bae565b60008581526020839052604090209450611bae565b600082815260208690526040902094505b5050600101611b60565b505060805250505050565b60ff811661038002610184810190369061050401811015611c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610894565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cd2611cd7565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611d0857600080fd5b50813567ffffffffffffffff811115611d2057600080fd5b602083019150836020828501011115611d3857600080fd5b9250929050565b60008060008060408587031215611d5557600080fd5b843567ffffffffffffffff80821115611d6d57600080fd5b611d7988838901611cf6565b90965094506020870135915080821115611d9257600080fd5b50611d9f87828801611cf6565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611ded57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a" -var MIPSDeployedSourceMap = "1131:39657:105:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1710:45;;1745:10;1710:45;;;;;188:10:257;176:23;;;158:42;;146:2;131:18;1710:45:105;;;;;;;;2448:99;;;412:42:257;2534:6:105;400:55:257;382:74;;370:2;355:18;2448:99:105;211:251:257;25668:6339:105;;;;;;:::i;:::-;;:::i;:::-;;;1687:25:257;;;1675:2;1660:18;25668:6339:105;1541:177:257;25668:6339:105;25746:7;25789:18;;:::i;:::-;25936:4;25929:5;25926:15;25916:134;;26030:1;26027;26020:12;25916:134;26086:4;26080:11;26093;26077:28;26067:137;;26184:1;26181;26174:12;26067:137;26252:3;26234:16;26231:25;26221:150;;26351:1;26348;26341:12;26221:150;26415:3;26401:12;26398:21;26388:145;;26513:1;26510;26503:12;26388:145;26793:24;;27137:4;26839:20;27195:2;26897:21;;26793:24;26955:18;26839:20;26897:21;;;26793:24;26770:21;26766:52;;;26955:18;26839:20;;;26897:21;;;26793:24;26766:52;;26839:20;;26897:21;;;26793:24;26766:52;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;;26955:18;26839:20;26897:21;;;26793:24;26770:21;26766:52;;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;26955:18;26839:20;26897:21;;;26793:24;26766:52;;26955:18;26839:20;27813:10;26955:18;27803:21;;;26897;;;;27911:1;27896:77;27921:2;27918:1;27915:9;27896:77;;;26793:24;;26770:21;26766:52;26839:20;;27969:1;26897:21;;;;26781:2;26955:18;;;;27939:1;27932:9;27896:77;;;27900:14;;;28051:5;:12;;;28047:71;;;28090:13;:11;:13::i;:::-;28083:20;;;;;28047:71;28132:10;;;:15;;28146:1;28132:15;;;;;28217:8;;;;-1:-1:-1;;28209:20:105;;-1:-1:-1;28209:7:105;:20::i;:::-;28195:34;-1:-1:-1;28259:10:105;28267:2;28259:10;;;;28336:1;28326:11;;;:26;;;28341:6;:11;;28351:1;28341:11;28326:26;28322:310;;;28482:13;28551:1;28529:4;28536:10;28529:17;28528:24;;;;28499:5;:12;;;28514:10;28499:25;28498:54;28482:70;;28577:40;28588:6;:11;;28598:1;28588:11;:20;;28606:2;28588:20;;;28602:1;28588:20;28577:40;;28610:6;28577:10;:40::i;:::-;28570:47;;;;;;;;28322:310;28881:15;;;;28676:9;;;;28813:4;28807:2;28799:10;;;28798:19;;;28881:15;28906:2;28898:10;;;28897:19;28881:36;;;;;;;:::i;:::-;;;;;;-1:-1:-1;28946:5:105;28970:11;;;;;:29;;;28985:6;:14;;28995:4;28985:14;28970:29;28966:832;;;29062:5;:15;;;29078:5;29062:22;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;29125:4:105;29119:2;29111:10;;;29110:19;28966:832;;;29163:4;29154:6;:13;;;29150:648;;;29284:6;:13;;29294:3;29284:13;:30;;;;29301:6;:13;;29311:3;29301:13;29284:30;:47;;;;29318:6;:13;;29328:3;29318:13;29284:47;29280:253;;;29394:4;29401:6;29394:13;29389:18;;29150:648;;29280:253;29493:21;29496:4;29503:6;29496:13;29511:2;29493;:21::i;:::-;29488:26;;29150:648;;;29567:4;29557:6;:14;;;;:32;;;;29575:6;:14;;29585:4;29575:14;29557:32;:50;;;;29593:6;:14;;29603:4;29593:14;29557:50;29553:245;;;29677:5;:15;;;29693:5;29677:22;;;;;;;;;:::i;:::-;;;;;29672:27;;29778:5;29770:13;;29553:245;29827:1;29817:6;:11;;;;:25;;;;;29841:1;29832:6;:10;;;29817:25;29816:42;;;;29847:6;:11;;29857:1;29847:11;29816:42;29812:125;;;29885:37;29898:6;29906:4;29912:5;29919:2;29885:12;:37::i;:::-;29878:44;;;;;;;;;;;29812:125;29970:13;29951:16;30122:4;30112:14;;;;30108:446;;30191:21;30194:4;30201:6;30194:13;30209:2;30191;:21::i;:::-;30185:27;;;;30249:10;30244:15;;30283:16;30244:15;30297:1;30283:7;:16::i;:::-;30277:22;;30331:4;30321:6;:14;;;;:32;;;;;30339:6;:14;;30349:4;30339:14;;30321:32;30317:223;;;30418:4;30406:16;;30520:1;30512:9;;30317:223;30128:426;30108:446;30587:10;30600:26;30608:4;30614:2;30618;30622:3;30600:7;:26::i;:::-;30629:10;30600:39;;;;-1:-1:-1;30725:4:105;30718:11;;;30757;;;:24;;;;;30780:1;30772:4;:9;;;;30757:24;:39;;;;;30792:4;30785;:11;;;30757:39;30753:847;;;30820:4;:9;;30828:1;30820:9;:22;;;;30833:4;:9;;30841:1;30833:9;30820:22;30816:144;;;30904:37;30915:4;:9;;30923:1;30915:9;:21;;30931:5;30915:21;;;30927:1;30915:21;30938:2;30904:10;:37::i;:::-;30897:44;;;;;;;;;;;;;;;30816:144;30982:4;:11;;30990:3;30982:11;30978:121;;31052:28;31061:5;31068:2;31072:7;;;;31052:8;:28::i;30978:121::-;31120:4;:11;;31128:3;31120:11;31116:121;;31190:28;31199:5;31206:2;31210:7;;;;;31190:8;:28::i;31116:121::-;31307:4;:11;;31315:3;31307:11;31303:80;;31349:15;:13;:15::i;31303:80::-;31486:4;31478;:12;;;;:27;;;;;31501:4;31494;:11;;;31478:27;31474:112;;;31536:31;31547:4;31553:2;31557;31561:5;31536:10;:31::i;31474:112::-;31660:6;:14;;31670:4;31660:14;:28;;;;-1:-1:-1;31678:10:105;;;;;31660:28;31656:93;;;31733:1;31708:5;:15;;;31724:5;31708:22;;;;;;;;;:::i;:::-;:26;;;;:22;;;;;;:26;31656:93;31795:9;:26;;31808:13;31795:26;31791:92;;31841:27;31850:9;31861:1;31864:3;31841:8;:27::i;:::-;31964:26;31973:5;31980:3;31985:4;31964:8;:26::i;:::-;31957:33;;;;;;;;;;;;;25668:6339;;;;;;;:::o;3092:2447::-;3639:4;3633:11;;3555:4;3358:31;3347:43;;3418:13;3358:31;3757:2;3457:13;;3347:43;3364:24;3358:31;3457:13;;;3347:43;;;;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3418:13;4194:11;3364:24;3358:31;3457:13;;;3347:43;3418:13;4299:11;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3133:12;;4440:13;;3633:11;;3457:13;;;;4189:3;4185:21;;;;4290;;3133:12;4520:84;4545:2;4542:1;4539:9;4520:84;;;3374:13;3364:24;;3358:31;3347:43;;3378:2;3418:13;;;;4600:1;3457:13;;;;4563:1;4556:9;4520:84;;;4524:14;4667:1;4663:2;4656:13;4762:5;4758:2;4754:14;4747:5;4742:27;4783:500;;;4824:7;4857;4886:1;4881:309;;;;5266:1;5255:12;;4850:419;;4881:309;4917:9;4984:23;;;;5072:1;5067:23;;;;5169:1;5158:12;;4910:262;;4984:23;5004:1;4993:12;;4984:23;;5067;5087:1;5076:12;;4910:262;;4850:419;;4783:500;;;;:::o;:::-;5310:26;5327:8;5319:6;5310:26;:::i;:::-;5435:14;;;;5418:32;;;5496:19;5492:30;5504:3;5474:16;;;;5471:52;;;;;;-1:-1:-1;;;;3092:2447:105:o;21723:1831::-;21796:11;21907:14;21924:24;21936:11;21924;:24::i;:::-;21907:41;;22056:1;22049:5;22045:13;22042:33;;;22071:1;22068;22061:12;22042:33;22204:2;22192:15;;;22145:20;22634:5;22631:1;22627:13;22669:4;22705:1;22690:343;22715:2;22712:1;22709:9;22690:343;;;22838:2;22826:15;;;22775:20;22873:12;;;22887:1;22869:20;22910:42;;;;22978:1;22973:42;;;;22862:153;;22910:42;22368:1;22361:12;;;22401:2;22394:13;;;22446:2;22433:16;;22919:31;;22910:42;;22973;22368:1;22361:12;;;22401:2;22394:13;;;22446:2;22433:16;;22982:31;;22862:153;-1:-1:-1;;22733:1:105;22726:9;22690:343;;;22694:14;23143:4;23137:11;23122:26;;23229:7;23223:4;23220:17;23210:124;;23271:10;23268:1;23261:21;23313:2;23310:1;23303:13;23210:124;-1:-1:-1;;23461:2:105;23450:14;;;;23438:10;23434:31;23431:1;23427:39;23495:16;;;;23513:10;23491:33;;21723:1831;-1:-1:-1;;;21723:1831:105:o;18833:823::-;18902:12;18989:18;;:::i;:::-;19057:4;19048:13;;19109:5;:8;;;19120:1;19109:12;19093:28;;:5;:12;;;:28;;;19089:95;;19141:28;;;;;2114:2:257;19141:28:105;;;2096:21:257;2153:2;2133:18;;;2126:30;2192:20;2172:18;;;2165:48;2230:18;;19141:28:105;;;;;;;;19089:95;19273:8;;;;;19306:12;;;;;19295:23;;;;;;;19332:20;;;;;19273:8;19464:13;;;19460:90;;19525:6;19534:1;19525:10;19497:5;:15;;;19513:8;19497:25;;;;;;;;;:::i;:::-;:38;;;;:25;;;;;;:38;19460:90;19626:13;:11;:13::i;:::-;19619:20;18833:823;-1:-1:-1;;;;;18833:823:105:o;2645:339::-;2706:11;2770:18;;;;2779:8;;;;2770:18;;;;;;2769:25;;;;;2786:1;2833:2;:9;;;2827:16;;;;;2826:22;;2825:32;;;;;;;2887:9;;2886:15;2769:25;2944:21;;2964:1;2944:21;;;2955:6;2944:21;2929:11;;;;;:37;;-1:-1:-1;;;2645:339:105;;;;:::o;13694:2026::-;13791:12;13877:18;;:::i;:::-;13945:4;13936:13;;13977:17;14037:5;:8;;;14048:1;14037:12;14021:28;;:5;:12;;;:28;;;14017:97;;14069:30;;;;;2461:2:257;14069:30:105;;;2443:21:257;2500:2;2480:18;;;2473:30;2539:22;2519:18;;;2512:50;2579:18;;14069:30:105;2259:344:257;14017:97:105;14184:7;:12;;14195:1;14184:12;:28;;;;14200:7;:12;;14211:1;14200:12;14184:28;14180:947;;;14232:9;14244:5;:15;;;14260:6;14244:23;;;;;;;;;:::i;:::-;;;;;14232:35;;14308:2;14301:9;;:3;:9;;;:25;;;;;14314:7;:12;;14325:1;14314:12;14301:25;14300:58;;;;14339:2;14332:9;;:3;:9;;;;:25;;;;;14345:7;:12;;14356:1;14345:12;14332:25;14285:73;;14214:159;14180:947;;;14470:7;:12;;14481:1;14470:12;14466:661;;14531:1;14523:3;14517:15;;;;14502:30;;14466:661;;;14635:7;:12;;14646:1;14635:12;14631:496;;14695:1;14688:3;14682:14;;;14667:29;;14631:496;;;14816:7;:12;;14827:1;14816:12;14812:315;;14904:4;14898:2;14889:11;;;14888:20;14874:10;14931:8;;;14927:84;;14991:1;14984:3;14978:14;;;14963:29;;14927:84;15032:3;:8;;15039:1;15032:8;15028:85;;15093:1;15085:3;15079:15;;;;15064:30;;15028:85;14830:297;14812:315;15203:8;;;;;15281:12;;;;15270:23;;;;;15437:178;;;;15528:1;15502:22;15505:5;15513:6;15505:14;15521:2;15502;:22::i;:::-;:27;;;;;;;15488:42;;15497:1;15488:42;15473:57;:12;;;:57;15437:178;;;15584:12;;;;;15599:1;15584:16;15569:31;;;;15437:178;15690:13;:11;:13::i;:::-;15683:20;13694:2026;-1:-1:-1;;;;;;;;13694:2026:105:o;32053:8733::-;32140:10;32202;32210:2;32202:10;;;;32241:11;;;:44;;;32267:1;32257:6;:11;;;;:27;;;;;32281:3;32272:6;:12;;;32257:27;32237:8490;;;32326:4;32319:11;;32450:6;32510:3;32505:25;;;;32585:3;32580:25;;;;32659:3;32654:25;;;;32734:3;32729:25;;;;32808:3;32803:25;;;;32881:3;32876:25;;;;32955:3;32950:25;;;;32443:532;;32505:25;32524:4;32516:12;;32505:25;;32580;32599:4;32591:12;;32580:25;;32654;32673:4;32665:12;;32654:25;;32729;32748:4;32740:12;;32729:25;;32803;32822:4;32814:12;;32803:25;;32876;32895:4;32887:12;;32876:25;;32950;32969:4;32961:12;;32443:532;;33038:4;:12;;33046:4;33038:12;33034:4023;;-1:-1:-1;;;33089:9:105;33081:26;;33102:4;33097:1;33089:9;;;33088:18;33081:26;33074:33;;33034:4023;33175:4;:12;;33183:4;33175:12;33171:3886;;-1:-1:-1;;;33226:9:105;33218:26;;33239:4;33234:1;33226:9;;;33225:18;33218:26;33211:33;;33171:3886;33312:4;:12;;33320:4;33312:12;33308:3749;;33377:4;33372:1;33364:9;;;33363:18;33410:27;33364:9;33413:11;;;;33426:2;:10;;;33410:2;:27::i;:::-;33403:34;;;;;;;33308:3749;33506:4;:12;;33514:4;33506:12;33502:3555;;-1:-1:-1;;;33549:17:105;;;33561:4;33556:9;;33549:17;33542:24;;33502:3555;33635:4;:11;;33643:3;33635:11;33631:3426;;-1:-1:-1;;;33677:17:105;;;33689:4;33684:9;;33677:17;33670:24;;33631:3426;33763:4;:12;;33771:4;33763:12;33759:3298;;33806:21;33815:2;33809:8;;:2;:8;;;;33824:2;33819;:7;33806:2;:21::i;:::-;33799:28;;;;;;33759:3298;34076:4;:12;;34084:4;34076:12;34072:2985;;34119:2;34112:9;;;;;;34072:2985;34190:4;:12;;34198:4;34190:12;34186:2871;;34233:2;34226:9;;;;;;34186:2871;34304:4;:12;;34312:4;34304:12;34300:2757;;34347:2;34340:9;;;;;;34300:2757;34418:4;:12;;34426:4;34418:12;34414:2643;;34461:2;34454:9;;;;;;34414:2643;34535:4;:12;;34543:4;34535:12;34531:2526;;34578:2;34571:9;;;;;;34531:2526;34695:4;:12;;34703:4;34695:12;34691:2366;;34738:2;34731:9;;;;;;34691:2366;34809:4;:12;;34817:4;34809:12;34805:2252;;34852:2;34845:9;;;;;;34805:2252;34923:4;:12;;34931:4;34923:12;34919:2138;;34966:2;34959:9;;;;;;34919:2138;35037:4;:12;;35045:4;35037:12;35033:2024;;35080:2;35073:9;;;;;;35033:2024;35151:4;:12;;35159:4;35151:12;35147:1910;;35194:2;35187:9;;;;;;35147:1910;35265:4;:12;;35273:4;35265:12;35261:1796;;35308:2;35301:9;;;;;;35261:1796;35380:4;:12;;35388:4;35380:12;35376:1681;;35423:2;35416:9;;;;;;35376:1681;35493:4;:12;;35501:4;35493:12;35489:1568;;35536:2;35529:9;;;;;;35489:1568;35607:4;:12;;35615:4;35607:12;35603:1454;;35650:2;35643:9;;;;;;35603:1454;35799:4;:12;;35807:4;35799:12;35795:1262;;-1:-1:-1;;;35843:7:105;;;35835:16;;35795:1262;35920:4;:12;;35928:4;35920:12;35916:1141;;-1:-1:-1;;;35964:7:105;;;35956:16;;35916:1141;36040:4;:12;;36048:4;36040:12;36036:1021;;-1:-1:-1;;;36084:7:105;;;36076:16;;36036:1021;36161:4;:12;;36169:4;36161:12;36157:900;;-1:-1:-1;;;36205:7:105;;;36197:16;;36157:900;36281:4;:12;;36289:4;36281:12;36277:780;;-1:-1:-1;;;36325:7:105;;;36317:16;;36277:780;36400:4;:12;;36408:4;36400:12;36396:661;;-1:-1:-1;;;36444:7:105;;;36436:16;;36396:661;36520:4;:12;;36528:4;36520:12;36516:541;;-1:-1:-1;;;36564:7:105;;;36556:16;;36516:541;36640:4;:12;;36648:4;36640:12;36636:421;;-1:-1:-1;;;36685:7:105;;;36683:10;36676:17;;36636:421;36762:4;:12;;36770:4;36762:12;36758:299;;36823:2;36805:21;;36811:2;36805:21;;;:29;;36833:1;36805:29;;;36829:1;36805:29;36798:36;;;;;;;;36758:299;36904:4;:12;;36912:4;36904:12;36900:157;;36952:2;36947:7;;:2;:7;;;:15;;36961:1;36947:15;;36900:157;37009:29;;;;;2810:2:257;37009:29:105;;;2792:21:257;2849:2;2829:18;;;2822:30;2888:21;2868:18;;;2861:49;2927:18;;37009:29:105;2608:343:257;36900:157:105;32287:4784;32237:8490;;;37127:6;:14;;37137:4;37127:14;37123:3590;;37186:4;37179:11;;37261:3;37253:11;;;37249:549;;-1:-1:-1;;;37306:21:105;;;37292:36;;37249:549;37413:4;:12;;37421:4;37413:12;:28;;;;37429:4;:12;;37437:4;37429:12;37413:28;37409:389;;;37473:4;:12;;37481:4;37473:12;37469:83;;37522:3;;;37469:83;37577:8;37615:127;37627:10;37622:15;;:20;37615:127;;37707:8;37674:3;37707:8;;;;;37674:3;37615:127;;;37774:1;-1:-1:-1;37767:8:105;;-1:-1:-1;;37767:8:105;37123:3590;37865:6;:14;;37875:4;37865:14;37861:2852;;-1:-1:-1;;37910:8:105;37916:2;37910:8;;;;37903:15;;37861:2852;37985:6;:14;;37995:4;37985:14;37981:2732;;38030:42;38048:2;38053:1;38048:6;38058:1;38047:12;38042:2;:17;38034:26;;:3;:26;;;;38064:4;38033:35;38070:1;38030:2;:42::i;37981:2732::-;38139:6;:14;;38149:4;38139:14;38135:2578;;38184:45;38202:2;38207:1;38202:6;38212:1;38201:12;38196:2;:17;38188:26;;:3;:26;;;;38218:6;38187:37;38226:2;38184;:45::i;38135:2578::-;38297:6;:14;;38307:4;38297:14;38293:2420;;-1:-1:-1;;38348:21:105;38367:1;38362;38357:6;;38356:12;38348:21;;38405:36;;;38476:5;38471:10;;38348:21;;;;;38470:18;38463:25;;38293:2420;38555:6;:14;;38565:4;38555:14;38551:2162;;38600:3;38593:10;;;;;38551:2162;38671:6;:14;;38681:4;38671:14;38667:2046;;38731:2;38736:1;38731:6;38741:1;38730:12;38725:2;:17;38717:26;;:3;:26;;;;38747:4;38716:35;38709:42;;;;;38667:2046;38820:6;:14;;38830:4;38820:14;38816:1897;;38880:2;38885:1;38880:6;38890:1;38879:12;38874:2;:17;38866:26;;:3;:26;;;;38896:6;38865:37;38858:44;;;;;38816:1897;38971:6;:14;;38981:4;38971:14;38967:1746;;-1:-1:-1;;39022:26:105;39046:1;39041;39036:6;;39035:12;39030:2;:17;39022:26;;39084:41;;;39160:5;39155:10;;39022:26;;;;;39154:18;39147:25;;38967:1746;39240:6;:14;;39250:4;39240:14;39236:1477;;-1:-1:-1;;39297:4:105;39291:34;39323:1;39318;39313:6;;39312:12;39307:2;:17;39291:34;;39381:27;;;39361:48;;;39439:10;;39292:9;;;39291:34;;39438:18;39431:25;;39236:1477;39524:6;:14;;39534:4;39524:14;39520:1193;;-1:-1:-1;;39581:6:105;39575:36;39609:1;39604;39599:6;;39598:12;39593:2;:17;39575:36;;39667:29;;;39647:50;;;39727:10;;39576:11;;;39575:36;;39726:18;39719:25;;39520:1193;39813:6;:14;;39823:4;39813:14;39809:904;;-1:-1:-1;;39864:20:105;39882:1;39877;39872:6;;39871:12;39864:20;;39920:36;;;39992:5;39986:11;;39864:20;;;;;39985:19;39978:26;;39809:904;40072:6;:14;;40082:4;40072:14;40068:645;;40117:2;40110:9;;;;;40068:645;40188:6;:14;;40198:4;40188:14;40184:529;;-1:-1:-1;;40239:25:105;40262:1;40257;40252:6;;40251:12;40246:2;:17;40239:25;;40300:41;;;40377:5;40371:11;;40239:25;;;;;40370:19;40363:26;;40184:529;40456:6;:14;;40466:4;40456:14;40452:261;;40501:3;40494:10;;;;;40452:261;40571:6;:14;;40581:4;40571:14;40567:146;;40616:2;40609:9;;;;;19937:782;20023:12;20110:18;;:::i;:::-;-1:-1:-1;20178:4:105;20285:2;20273:14;;;;20265:41;;;;;;;3158:2:257;20265:41:105;;;3140:21:257;3197:2;3177:18;;;3170:30;3236:16;3216:18;;;3209:44;3270:18;;20265:41:105;2956:338:257;20265:41:105;20402:14;;;;;;;:30;;;20420:12;20402:30;20398:102;;;20481:4;20452:5;:15;;;20468:9;20452:26;;;;;;;;;:::i;:::-;:33;;;;:26;;;;;;:33;20398:102;20555:12;;;;;20544:23;;;;:8;;;:23;20611:1;20596:16;;;20581:31;;;20689:13;:11;:13::i;5580:7728::-;5623:12;5709:18;;:::i;:::-;-1:-1:-1;5887:15:105;;:18;;;;5777:4;6047:18;;;;6091;;;;6135;;;;;5777:4;;5867:17;;;;6047:18;6091;6225;;;6239:4;6225:18;6221:6777;;6275:2;6304:4;6299:9;;:14;6295:144;;6415:4;6410:9;;6402:4;:18;6396:24;6295:144;6460:2;:7;;6466:1;6460:7;6456:161;;6496:10;;;;;6528:16;;;;;;;;6496:10;-1:-1:-1;6456:161:105;;;6596:2;6591:7;;6456:161;6245:386;6221:6777;;;6733:10;:18;;6747:4;6733:18;6729:6269;;1745:10;6771:14;;6729:6269;;;6869:10;:18;;6883:4;6869:18;6865:6133;;6912:1;6907:6;;6865:6133;;;7037:10;:18;;7051:4;7037:18;7033:5965;;7090:4;7075:12;;;:19;7112:26;;;:14;;;:26;7163:13;:11;:13::i;:::-;7156:20;;;;;;;;;5580:7728;:::o;7033:5965::-;7302:10;:18;;7316:4;7302:18;7298:5700;;7453:14;;;7449:2708;7298:5700;7449:2708;7623:22;;;;;7619:2538;;7748:10;7761:27;7769:2;7774:10;7769:15;7786:1;7761:7;:27::i;:::-;7872:17;;;;7748:40;;-1:-1:-1;7872:17:105;7850:19;8022:14;8041:1;8016:26;8012:131;;8084:36;8108:11;1277:21:106;1426:15;;;1467:8;1461:4;1454:22;1595:4;1582:18;;1602:19;1578:44;1624:11;1575:61;;1222:430;8084:36:105;8070:50;;8012:131;8229:20;;;;;8196:54;;;;;;;;3472:25:257;;;8196:54:105;3533:23:257;;;3513:18;;;3506:51;8165:11:105;;;;8196:19;:6;:19;;;;3445:18:257;;8196:54:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8164:86;;;;8477:1;8473:2;8469:10;8574:9;8571:1;8567:17;8656:6;8649:5;8646:17;8643:40;;;8676:5;8666:15;;8643:40;;8759:6;8755:2;8752:14;8749:34;;;8779:2;8769:12;;8749:34;8885:3;8880:1;8872:6;8868:14;8863:3;8859:24;8855:34;8848:41;;8985:3;8981:1;8969:9;8960:6;8957:1;8953:14;8949:30;8945:38;8941:48;8934:55;;9140:1;9136;9132;9120:9;9117:1;9113:17;9109:25;9105:33;9101:41;9267:1;9263;9259;9250:6;9238:9;9235:1;9231:17;9227:30;9223:38;9219:46;9215:54;9197:72;;9398:10;9394:15;9388:4;9384:26;9376:34;;9514:3;9506:4;9502:9;9497:3;9493:19;9490:28;9483:35;;;;9660:33;9669:2;9674:10;9669:15;9686:1;9689:3;9660:8;:33::i;:::-;9715:20;;;:38;;;;;;;;;-1:-1:-1;7619:2538:105;;-1:-1:-1;;;7619:2538:105;;9872:18;;;;;9868:289;;10042:2;10037:7;;7298:5700;;9868:289;10096:10;10091:15;;2053:3;10128:10;;9868:289;7298:5700;;;10286:10;:18;;10300:4;10286:18;10282:2716;;10440:15;;;1824:1;10440:15;;:34;;-1:-1:-1;10459:15:105;;;1859:1;10459:15;10440:34;:57;;;-1:-1:-1;10478:19:105;;;1936:1;10478:19;10440:57;10436:1593;;;10526:2;10521:7;;10282:2716;;10436:1593;10652:23;;;;;10648:1381;;10699:10;10712:27;10720:2;10725:10;10720:15;10737:1;10712:7;:27::i;:::-;10815:17;;;;10699:40;;-1:-1:-1;11058:1:105;11050:10;;11152:1;11148:17;11227:13;;;11224:32;;;11249:5;11243:11;;11224:32;11535:14;;;11341:1;11531:22;;;11527:32;;;;11424:26;11448:1;11333:10;;;11428:18;;;11424:26;11523:43;11329:20;;11631:12;11759:17;;;:23;11827:1;11804:20;;;:24;11337:2;-1:-1:-1;11337:2:105;7298:5700;;10282:2716;12231:10;:18;;12245:4;12231:18;12227:771;;12341:2;:7;;12347:1;12341:7;12337:647;;12434:14;;;;;:40;;-1:-1:-1;12452:22:105;;;1978:1;12452:22;12434:40;:62;;;-1:-1:-1;12478:18:105;;;1897:1;12478:18;12434:62;12430:404;;;12529:1;12524:6;;12337:647;;12430:404;12575:15;;;1824:1;12575:15;;:34;;-1:-1:-1;12594:15:105;;;1859:1;12594:15;12575:34;:61;;;-1:-1:-1;12613:23:105;;;2021:1;12613:23;12575:61;:84;;;-1:-1:-1;12640:19:105;;;1936:1;12640:19;12575:84;12571:263;;;12692:1;12687:6;;7298:5700;;12337:647;12885:10;12880:15;;2087:4;12917:11;;12337:647;13073:15;;;;;:23;;;;:18;;;;:23;;;;13110:15;;:23;;;:18;;;;:23;-1:-1:-1;13199:12:105;;;;13188:23;;;:8;;;:23;13255:1;13240:16;13225:31;;;;;13278:13;:11;:13::i;16061:2480::-;16155:12;16241:18;;:::i;:::-;-1:-1:-1;16309:4:105;16341:10;16449:13;;;16458:4;16449:13;16445:1705;;-1:-1:-1;16488:8:105;;;;16445:1705;;;16607:5;:13;;16616:4;16607:13;16603:1547;;16640:14;;;:8;;;:14;16603:1547;;;16770:5;:13;;16779:4;16770:13;16766:1384;;-1:-1:-1;16809:8:105;;;;16766:1384;;;16928:5;:13;;16937:4;16928:13;16924:1226;;16961:14;;;:8;;;:14;16924:1226;;;17102:5;:13;;17111:4;17102:13;17098:1052;;17229:9;17175:17;17155;;;17175;;;;17155:37;17236:2;17229:9;;;;;17211:8;;;:28;17257:22;:8;;;:22;17098:1052;;;17416:5;:13;;17425:4;17416:13;17412:738;;17483:11;17469;;;17483;;;17469:25;17538:2;17531:9;;;;;17513:8;;;:28;17559:22;:8;;;:22;17412:738;;;17740:5;:13;;17749:4;17740:13;17736:414;;17810:3;17791:23;;17797:3;17791:23;;;;;;;:::i;:::-;;17773:42;;:8;;;:42;17851:23;;;;;;;;;;;;;:::i;:::-;;17833:42;;:8;;;:42;17736:414;;;18044:5;:13;;18053:4;18044:13;18040:110;;18094:3;18088:9;;:3;:9;;;;;;;:::i;:::-;;18077:20;;;;:8;;;:20;18126:9;;;;;;;;;;;:::i;:::-;;18115:20;;:8;;;:20;18040:110;18243:14;;;;18239:85;;18306:3;18277:5;:15;;;18293:9;18277:26;;;;;;;;;:::i;:::-;:32;;;;:26;;;;;;:32;18239:85;18378:12;;;;;18367:23;;;;:8;;;:23;18434:1;18419:16;;;18404:31;;;18511:13;:11;:13::i;:::-;18504:20;16061:2480;-1:-1:-1;;;;;;;16061:2480:105:o;23890:1654::-;24066:14;24083:24;24095:11;24083;:24::i;:::-;24066:41;;24215:1;24208:5;24204:13;24201:33;;;24230:1;24227;24220:12;24201:33;24369:2;24563:15;;;24388:2;24377:14;;24365:10;24361:31;24358:1;24354:39;24519:16;;;24304:20;;24504:10;24493:22;;;24489:27;24479:38;24476:60;25005:5;25002:1;24998:13;25076:1;25061:343;25086:2;25083:1;25080:9;25061:343;;;25209:2;25197:15;;;25146:20;25244:12;;;25258:1;25240:20;25281:42;;;;25349:1;25344:42;;;;25233:153;;25281:42;22368:1;22361:12;;;22401:2;22394:13;;;22446:2;22433:16;;25290:31;;25281:42;;25344;22368:1;22361:12;;;22401:2;22394:13;;;22446:2;22433:16;;25353:31;;25233:153;-1:-1:-1;;25104:1:105;25097:9;25061:343;;;-1:-1:-1;;25503:4:105;25496:18;-1:-1:-1;;;;23890:1654:105:o;20923:586::-;21245:20;;;21269:7;21245:32;21238:3;:40;;;21351:14;;21406:17;;21400:24;;;21392:72;;;;;;;4209:2:257;21392:72:105;;;4191:21:257;4248:2;4228:18;;;4221:30;4287:34;4267:18;;;4260:62;4358:5;4338:18;;;4331:33;4381:19;;21392:72:105;4007:399:257;21392:72:105;21478:14;20923:586;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;467:347:257:-;518:8;528:6;582:3;575:4;567:6;563:17;559:27;549:55;;600:1;597;590:12;549:55;-1:-1:-1;623:20:257;;666:18;655:30;;652:50;;;698:1;695;688:12;652:50;735:4;727:6;723:17;711:29;;787:3;780:4;771:6;763;759:19;755:30;752:39;749:59;;;804:1;801;794:12;749:59;467:347;;;;;:::o;819:717::-;909:6;917;925;933;986:2;974:9;965:7;961:23;957:32;954:52;;;1002:1;999;992:12;954:52;1042:9;1029:23;1071:18;1112:2;1104:6;1101:14;1098:34;;;1128:1;1125;1118:12;1098:34;1167:58;1217:7;1208:6;1197:9;1193:22;1167:58;:::i;:::-;1244:8;;-1:-1:-1;1141:84:257;-1:-1:-1;1332:2:257;1317:18;;1304:32;;-1:-1:-1;1348:16:257;;;1345:36;;;1377:1;1374;1367:12;1345:36;;1416:60;1468:7;1457:8;1446:9;1442:24;1416:60;:::i;:::-;819:717;;;;-1:-1:-1;1495:8:257;-1:-1:-1;;;;819:717:257:o;1723:184::-;1775:77;1772:1;1765:88;1872:4;1869:1;1862:15;1896:4;1893:1;1886:15;3568:245;3647:6;3655;3708:2;3696:9;3687:7;3683:23;3679:32;3676:52;;;3724:1;3721;3714:12;3676:52;-1:-1:-1;;3747:16:257;;3803:2;3788:18;;;3782:25;3747:16;;3782:25;;-1:-1:-1;3568:245:257:o;3818:184::-;3870:77;3867:1;3860:88;3967:4;3964:1;3957:15;3991:4;3988:1;3981:15" +var MIPSDeployedSourceMap = "1131:39637:105:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1710:45;;1745:10;1710:45;;;;;188:10:257;176:23;;;158:42;;146:2;131:18;1710:45:105;;;;;;;;2448:99;;;412:42:257;2534:6:105;400:55:257;382:74;;370:2;355:18;2448:99:105;211:251:257;25648:6339:105;;;;;;:::i;:::-;;:::i;:::-;;;1687:25:257;;;1675:2;1660:18;25648:6339:105;1541:177:257;25648:6339:105;25726:7;25769:18;;:::i;:::-;25916:4;25909:5;25906:15;25896:134;;26010:1;26007;26000:12;25896:134;26066:4;26060:11;26073;26057:28;26047:137;;26164:1;26161;26154:12;26047:137;26232:3;26214:16;26211:25;26201:150;;26331:1;26328;26321:12;26201:150;26395:3;26381:12;26378:21;26368:145;;26493:1;26490;26483:12;26368:145;26773:24;;27117:4;26819:20;27175:2;26877:21;;26773:24;26935:18;26819:20;26877:21;;;26773:24;26750:21;26746:52;;;26935:18;26819:20;;;26877:21;;;26773:24;26746:52;;26819:20;;26877:21;;;26773:24;26746:52;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;;26935:18;26819:20;26877:21;;;26773:24;26750:21;26746:52;;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;26935:18;26819:20;27793:10;26935:18;27783:21;;;26877;;;;27891:1;27876:77;27901:2;27898:1;27895:9;27876:77;;;26773:24;;26750:21;26746:52;26819:20;;27949:1;26877:21;;;;26761:2;26935:18;;;;27919:1;27912:9;27876:77;;;27880:14;;;28031:5;:12;;;28027:71;;;28070:13;:11;:13::i;:::-;28063:20;;;;;28027:71;28112:10;;;:15;;28126:1;28112:15;;;;;28197:8;;;;-1:-1:-1;;28189:20:105;;-1:-1:-1;28189:7:105;:20::i;:::-;28175:34;-1:-1:-1;28239:10:105;28247:2;28239:10;;;;28316:1;28306:11;;;:26;;;28321:6;:11;;28331:1;28321:11;28306:26;28302:310;;;28462:13;28531:1;28509:4;28516:10;28509:17;28508:24;;;;28479:5;:12;;;28494:10;28479:25;28478:54;28462:70;;28557:40;28568:6;:11;;28578:1;28568:11;:20;;28586:2;28568:20;;;28582:1;28568:20;28557:40;;28590:6;28557:10;:40::i;:::-;28550:47;;;;;;;;28302:310;28861:15;;;;28656:9;;;;28793:4;28787:2;28779:10;;;28778:19;;;28861:15;28886:2;28878:10;;;28877:19;28861:36;;;;;;;:::i;:::-;;;;;;-1:-1:-1;28926:5:105;28950:11;;;;;:29;;;28965:6;:14;;28975:4;28965:14;28950:29;28946:832;;;29042:5;:15;;;29058:5;29042:22;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;29105:4:105;29099:2;29091:10;;;29090:19;28946:832;;;29143:4;29134:6;:13;;;29130:648;;;29264:6;:13;;29274:3;29264:13;:30;;;;29281:6;:13;;29291:3;29281:13;29264:30;:47;;;;29298:6;:13;;29308:3;29298:13;29264:47;29260:253;;;29374:4;29381:6;29374:13;29369:18;;29130:648;;29260:253;29473:21;29476:4;29483:6;29476:13;29491:2;29473;:21::i;:::-;29468:26;;29130:648;;;29547:4;29537:6;:14;;;;:32;;;;29555:6;:14;;29565:4;29555:14;29537:32;:50;;;;29573:6;:14;;29583:4;29573:14;29537:50;29533:245;;;29657:5;:15;;;29673:5;29657:22;;;;;;;;;:::i;:::-;;;;;29652:27;;29758:5;29750:13;;29533:245;29807:1;29797:6;:11;;;;:25;;;;;29821:1;29812:6;:10;;;29797:25;29796:42;;;;29827:6;:11;;29837:1;29827:11;29796:42;29792:125;;;29865:37;29878:6;29886:4;29892:5;29899:2;29865:12;:37::i;:::-;29858:44;;;;;;;;;;;29792:125;29950:13;29931:16;30102:4;30092:14;;;;30088:446;;30171:21;30174:4;30181:6;30174:13;30189:2;30171;:21::i;:::-;30165:27;;;;30229:10;30224:15;;30263:16;30224:15;30277:1;30263:7;:16::i;:::-;30257:22;;30311:4;30301:6;:14;;;;:32;;;;;30319:6;:14;;30329:4;30319:14;;30301:32;30297:223;;;30398:4;30386:16;;30500:1;30492:9;;30297:223;30108:426;30088:446;30567:10;30580:26;30588:4;30594:2;30598;30602:3;30580:7;:26::i;:::-;30609:10;30580:39;;;;-1:-1:-1;30705:4:105;30698:11;;;30737;;;:24;;;;;30760:1;30752:4;:9;;;;30737:24;:39;;;;;30772:4;30765;:11;;;30737:39;30733:847;;;30800:4;:9;;30808:1;30800:9;:22;;;;30813:4;:9;;30821:1;30813:9;30800:22;30796:144;;;30884:37;30895:4;:9;;30903:1;30895:9;:21;;30911:5;30895:21;;;30907:1;30895:21;30918:2;30884:10;:37::i;:::-;30877:44;;;;;;;;;;;;;;;30796:144;30962:4;:11;;30970:3;30962:11;30958:121;;31032:28;31041:5;31048:2;31052:7;;;;31032:8;:28::i;30958:121::-;31100:4;:11;;31108:3;31100:11;31096:121;;31170:28;31179:5;31186:2;31190:7;;;;;31170:8;:28::i;31096:121::-;31287:4;:11;;31295:3;31287:11;31283:80;;31329:15;:13;:15::i;31283:80::-;31466:4;31458;:12;;;;:27;;;;;31481:4;31474;:11;;;31458:27;31454:112;;;31516:31;31527:4;31533:2;31537;31541:5;31516:10;:31::i;31454:112::-;31640:6;:14;;31650:4;31640:14;:28;;;;-1:-1:-1;31658:10:105;;;;;31640:28;31636:93;;;31713:1;31688:5;:15;;;31704:5;31688:22;;;;;;;;;:::i;:::-;:26;;;;:22;;;;;;:26;31636:93;31775:9;:26;;31788:13;31775:26;31771:92;;31821:27;31830:9;31841:1;31844:3;31821:8;:27::i;:::-;31944:26;31953:5;31960:3;31965:4;31944:8;:26::i;:::-;31937:33;;;;;;;;;;;;;25648:6339;;;;;;;:::o;3092:2427::-;3639:4;3633:11;;3555:4;3358:31;3347:43;;3418:13;3358:31;3757:2;3457:13;;3347:43;3364:24;3358:31;3457:13;;;3347:43;;;;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3418:13;4185:11;3364:24;3358:31;3457:13;;;3347:43;3418:13;4280:11;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3133:12;;4420:13;;3633:11;;3457:13;;;;4185:11;3133:12;4500:84;4525:2;4522:1;4519:9;4500:84;;;3374:13;3364:24;;3358:31;3347:43;;3378:2;3418:13;;;;4580:1;3457:13;;;;4543:1;4536:9;4500:84;;;4504:14;4647:1;4643:2;4636:13;4742:5;4738:2;4734:14;4727:5;4722:27;4763:500;;;4804:7;4837;4866:1;4861:309;;;;5246:1;5235:12;;4830:419;;4861:309;4897:9;4964:23;;;;5052:1;5047:23;;;;5149:1;5138:12;;4890:262;;4964:23;4984:1;4973:12;;4964:23;;5047;5067:1;5056:12;;4890:262;;4830:419;;4763:500;;;;:::o;:::-;5290:26;5307:8;5299:6;5290:26;:::i;:::-;5415:14;;;;5398:32;;;5458:19;5454:30;5490:3;5486:16;;;;5451:52;;;;;3092:2427;-1:-1:-1;;;;3092:2427:105:o;21703:1831::-;21776:11;21887:14;21904:24;21916:11;21904;:24::i;:::-;21887:41;;22036:1;22029:5;22025:13;22022:33;;;22051:1;22048;22041:12;22022:33;22184:2;22172:15;;;22125:20;22614:5;22611:1;22607:13;22649:4;22685:1;22670:343;22695:2;22692:1;22689:9;22670:343;;;22818:2;22806:15;;;22755:20;22853:12;;;22867:1;22849:20;22890:42;;;;22958:1;22953:42;;;;22842:153;;22890:42;22348:1;22341:12;;;22381:2;22374:13;;;22426:2;22413:16;;22899:31;;22890:42;;22953;22348:1;22341:12;;;22381:2;22374:13;;;22426:2;22413:16;;22962:31;;22842:153;-1:-1:-1;;22713:1:105;22706:9;22670:343;;;22674:14;23123:4;23117:11;23102:26;;23209:7;23203:4;23200:17;23190:124;;23251:10;23248:1;23241:21;23293:2;23290:1;23283:13;23190:124;-1:-1:-1;;23441:2:105;23430:14;;;;23418:10;23414:31;23411:1;23407:39;23475:16;;;;23493:10;23471:33;;21703:1831;-1:-1:-1;;;21703:1831:105:o;18813:823::-;18882:12;18969:18;;:::i;:::-;19037:4;19028:13;;19089:5;:8;;;19100:1;19089:12;19073:28;;:5;:12;;;:28;;;19069:95;;19121:28;;;;;2114:2:257;19121:28:105;;;2096:21:257;2153:2;2133:18;;;2126:30;2192:20;2172:18;;;2165:48;2230:18;;19121:28:105;;;;;;;;19069:95;19253:8;;;;;19286:12;;;;;19275:23;;;;;;;19312:20;;;;;19253:8;19444:13;;;19440:90;;19505:6;19514:1;19505:10;19477:5;:15;;;19493:8;19477:25;;;;;;;;;:::i;:::-;:38;;;;:25;;;;;;:38;19440:90;19606:13;:11;:13::i;:::-;19599:20;18813:823;-1:-1:-1;;;;;18813:823:105:o;2645:339::-;2706:11;2770:18;;;;2779:8;;;;2770:18;;;;;;2769:25;;;;;2786:1;2833:2;:9;;;2827:16;;;;;2826:22;;2825:32;;;;;;;2887:9;;2886:15;2769:25;2944:21;;2964:1;2944:21;;;2955:6;2944:21;2929:11;;;;;:37;;-1:-1:-1;;;2645:339:105;;;;:::o;13674:2026::-;13771:12;13857:18;;:::i;:::-;13925:4;13916:13;;13957:17;14017:5;:8;;;14028:1;14017:12;14001:28;;:5;:12;;;:28;;;13997:97;;14049:30;;;;;2461:2:257;14049:30:105;;;2443:21:257;2500:2;2480:18;;;2473:30;2539:22;2519:18;;;2512:50;2579:18;;14049:30:105;2259:344:257;13997:97:105;14164:7;:12;;14175:1;14164:12;:28;;;;14180:7;:12;;14191:1;14180:12;14164:28;14160:947;;;14212:9;14224:5;:15;;;14240:6;14224:23;;;;;;;;;:::i;:::-;;;;;14212:35;;14288:2;14281:9;;:3;:9;;;:25;;;;;14294:7;:12;;14305:1;14294:12;14281:25;14280:58;;;;14319:2;14312:9;;:3;:9;;;;:25;;;;;14325:7;:12;;14336:1;14325:12;14312:25;14265:73;;14194:159;14160:947;;;14450:7;:12;;14461:1;14450:12;14446:661;;14511:1;14503:3;14497:15;;;;14482:30;;14446:661;;;14615:7;:12;;14626:1;14615:12;14611:496;;14675:1;14668:3;14662:14;;;14647:29;;14611:496;;;14796:7;:12;;14807:1;14796:12;14792:315;;14884:4;14878:2;14869:11;;;14868:20;14854:10;14911:8;;;14907:84;;14971:1;14964:3;14958:14;;;14943:29;;14907:84;15012:3;:8;;15019:1;15012:8;15008:85;;15073:1;15065:3;15059:15;;;;15044:30;;15008:85;14810:297;14792:315;15183:8;;;;;15261:12;;;;15250:23;;;;;15417:178;;;;15508:1;15482:22;15485:5;15493:6;15485:14;15501:2;15482;:22::i;:::-;:27;;;;;;;15468:42;;15477:1;15468:42;15453:57;:12;;;:57;15417:178;;;15564:12;;;;;15579:1;15564:16;15549:31;;;;15417:178;15670:13;:11;:13::i;:::-;15663:20;13674:2026;-1:-1:-1;;;;;;;;13674:2026:105:o;32033:8733::-;32120:10;32182;32190:2;32182:10;;;;32221:11;;;:44;;;32247:1;32237:6;:11;;;;:27;;;;;32261:3;32252:6;:12;;;32237:27;32217:8490;;;32306:4;32299:11;;32430:6;32490:3;32485:25;;;;32565:3;32560:25;;;;32639:3;32634:25;;;;32714:3;32709:25;;;;32788:3;32783:25;;;;32861:3;32856:25;;;;32935:3;32930:25;;;;32423:532;;32485:25;32504:4;32496:12;;32485:25;;32560;32579:4;32571:12;;32560:25;;32634;32653:4;32645:12;;32634:25;;32709;32728:4;32720:12;;32709:25;;32783;32802:4;32794:12;;32783:25;;32856;32875:4;32867:12;;32856:25;;32930;32949:4;32941:12;;32423:532;;33018:4;:12;;33026:4;33018:12;33014:4023;;-1:-1:-1;;;33069:9:105;33061:26;;33082:4;33077:1;33069:9;;;33068:18;33061:26;33054:33;;33014:4023;33155:4;:12;;33163:4;33155:12;33151:3886;;-1:-1:-1;;;33206:9:105;33198:26;;33219:4;33214:1;33206:9;;;33205:18;33198:26;33191:33;;33151:3886;33292:4;:12;;33300:4;33292:12;33288:3749;;33357:4;33352:1;33344:9;;;33343:18;33390:27;33344:9;33393:11;;;;33406:2;:10;;;33390:2;:27::i;:::-;33383:34;;;;;;;33288:3749;33486:4;:12;;33494:4;33486:12;33482:3555;;-1:-1:-1;;;33529:17:105;;;33541:4;33536:9;;33529:17;33522:24;;33482:3555;33615:4;:11;;33623:3;33615:11;33611:3426;;-1:-1:-1;;;33657:17:105;;;33669:4;33664:9;;33657:17;33650:24;;33611:3426;33743:4;:12;;33751:4;33743:12;33739:3298;;33786:21;33795:2;33789:8;;:2;:8;;;;33804:2;33799;:7;33786:2;:21::i;:::-;33779:28;;;;;;33739:3298;34056:4;:12;;34064:4;34056:12;34052:2985;;34099:2;34092:9;;;;;;34052:2985;34170:4;:12;;34178:4;34170:12;34166:2871;;34213:2;34206:9;;;;;;34166:2871;34284:4;:12;;34292:4;34284:12;34280:2757;;34327:2;34320:9;;;;;;34280:2757;34398:4;:12;;34406:4;34398:12;34394:2643;;34441:2;34434:9;;;;;;34394:2643;34515:4;:12;;34523:4;34515:12;34511:2526;;34558:2;34551:9;;;;;;34511:2526;34675:4;:12;;34683:4;34675:12;34671:2366;;34718:2;34711:9;;;;;;34671:2366;34789:4;:12;;34797:4;34789:12;34785:2252;;34832:2;34825:9;;;;;;34785:2252;34903:4;:12;;34911:4;34903:12;34899:2138;;34946:2;34939:9;;;;;;34899:2138;35017:4;:12;;35025:4;35017:12;35013:2024;;35060:2;35053:9;;;;;;35013:2024;35131:4;:12;;35139:4;35131:12;35127:1910;;35174:2;35167:9;;;;;;35127:1910;35245:4;:12;;35253:4;35245:12;35241:1796;;35288:2;35281:9;;;;;;35241:1796;35360:4;:12;;35368:4;35360:12;35356:1681;;35403:2;35396:9;;;;;;35356:1681;35473:4;:12;;35481:4;35473:12;35469:1568;;35516:2;35509:9;;;;;;35469:1568;35587:4;:12;;35595:4;35587:12;35583:1454;;35630:2;35623:9;;;;;;35583:1454;35779:4;:12;;35787:4;35779:12;35775:1262;;-1:-1:-1;;;35823:7:105;;;35815:16;;35775:1262;35900:4;:12;;35908:4;35900:12;35896:1141;;-1:-1:-1;;;35944:7:105;;;35936:16;;35896:1141;36020:4;:12;;36028:4;36020:12;36016:1021;;-1:-1:-1;;;36064:7:105;;;36056:16;;36016:1021;36141:4;:12;;36149:4;36141:12;36137:900;;-1:-1:-1;;;36185:7:105;;;36177:16;;36137:900;36261:4;:12;;36269:4;36261:12;36257:780;;-1:-1:-1;;;36305:7:105;;;36297:16;;36257:780;36380:4;:12;;36388:4;36380:12;36376:661;;-1:-1:-1;;;36424:7:105;;;36416:16;;36376:661;36500:4;:12;;36508:4;36500:12;36496:541;;-1:-1:-1;;;36544:7:105;;;36536:16;;36496:541;36620:4;:12;;36628:4;36620:12;36616:421;;-1:-1:-1;;;36665:7:105;;;36663:10;36656:17;;36616:421;36742:4;:12;;36750:4;36742:12;36738:299;;36803:2;36785:21;;36791:2;36785:21;;;:29;;36813:1;36785:29;;;36809:1;36785:29;36778:36;;;;;;;;36738:299;36884:4;:12;;36892:4;36884:12;36880:157;;36932:2;36927:7;;:2;:7;;;:15;;36941:1;36927:15;;36880:157;36989:29;;;;;2810:2:257;36989:29:105;;;2792:21:257;2849:2;2829:18;;;2822:30;2888:21;2868:18;;;2861:49;2927:18;;36989:29:105;2608:343:257;36880:157:105;32267:4784;32217:8490;;;37107:6;:14;;37117:4;37107:14;37103:3590;;37166:4;37159:11;;37241:3;37233:11;;;37229:549;;-1:-1:-1;;;37286:21:105;;;37272:36;;37229:549;37393:4;:12;;37401:4;37393:12;:28;;;;37409:4;:12;;37417:4;37409:12;37393:28;37389:389;;;37453:4;:12;;37461:4;37453:12;37449:83;;37502:3;;;37449:83;37557:8;37595:127;37607:10;37602:15;;:20;37595:127;;37687:8;37654:3;37687:8;;;;;37654:3;37595:127;;;37754:1;-1:-1:-1;37747:8:105;;-1:-1:-1;;37747:8:105;37103:3590;37845:6;:14;;37855:4;37845:14;37841:2852;;-1:-1:-1;;37890:8:105;37896:2;37890:8;;;;37883:15;;37841:2852;37965:6;:14;;37975:4;37965:14;37961:2732;;38010:42;38028:2;38033:1;38028:6;38038:1;38027:12;38022:2;:17;38014:26;;:3;:26;;;;38044:4;38013:35;38050:1;38010:2;:42::i;37961:2732::-;38119:6;:14;;38129:4;38119:14;38115:2578;;38164:45;38182:2;38187:1;38182:6;38192:1;38181:12;38176:2;:17;38168:26;;:3;:26;;;;38198:6;38167:37;38206:2;38164;:45::i;38115:2578::-;38277:6;:14;;38287:4;38277:14;38273:2420;;-1:-1:-1;;38328:21:105;38347:1;38342;38337:6;;38336:12;38328:21;;38385:36;;;38456:5;38451:10;;38328:21;;;;;38450:18;38443:25;;38273:2420;38535:6;:14;;38545:4;38535:14;38531:2162;;38580:3;38573:10;;;;;38531:2162;38651:6;:14;;38661:4;38651:14;38647:2046;;38711:2;38716:1;38711:6;38721:1;38710:12;38705:2;:17;38697:26;;:3;:26;;;;38727:4;38696:35;38689:42;;;;;38647:2046;38800:6;:14;;38810:4;38800:14;38796:1897;;38860:2;38865:1;38860:6;38870:1;38859:12;38854:2;:17;38846:26;;:3;:26;;;;38876:6;38845:37;38838:44;;;;;38796:1897;38951:6;:14;;38961:4;38951:14;38947:1746;;-1:-1:-1;;39002:26:105;39026:1;39021;39016:6;;39015:12;39010:2;:17;39002:26;;39064:41;;;39140:5;39135:10;;39002:26;;;;;39134:18;39127:25;;38947:1746;39220:6;:14;;39230:4;39220:14;39216:1477;;-1:-1:-1;;39277:4:105;39271:34;39303:1;39298;39293:6;;39292:12;39287:2;:17;39271:34;;39361:27;;;39341:48;;;39419:10;;39272:9;;;39271:34;;39418:18;39411:25;;39216:1477;39504:6;:14;;39514:4;39504:14;39500:1193;;-1:-1:-1;;39561:6:105;39555:36;39589:1;39584;39579:6;;39578:12;39573:2;:17;39555:36;;39647:29;;;39627:50;;;39707:10;;39556:11;;;39555:36;;39706:18;39699:25;;39500:1193;39793:6;:14;;39803:4;39793:14;39789:904;;-1:-1:-1;;39844:20:105;39862:1;39857;39852:6;;39851:12;39844:20;;39900:36;;;39972:5;39966:11;;39844:20;;;;;39965:19;39958:26;;39789:904;40052:6;:14;;40062:4;40052:14;40048:645;;40097:2;40090:9;;;;;40048:645;40168:6;:14;;40178:4;40168:14;40164:529;;-1:-1:-1;;40219:25:105;40242:1;40237;40232:6;;40231:12;40226:2;:17;40219:25;;40280:41;;;40357:5;40351:11;;40219:25;;;;;40350:19;40343:26;;40164:529;40436:6;:14;;40446:4;40436:14;40432:261;;40481:3;40474:10;;;;;40432:261;40551:6;:14;;40561:4;40551:14;40547:146;;40596:2;40589:9;;;;;19917:782;20003:12;20090:18;;:::i;:::-;-1:-1:-1;20158:4:105;20265:2;20253:14;;;;20245:41;;;;;;;3158:2:257;20245:41:105;;;3140:21:257;3197:2;3177:18;;;3170:30;3236:16;3216:18;;;3209:44;3270:18;;20245:41:105;2956:338:257;20245:41:105;20382:14;;;;;;;:30;;;20400:12;20382:30;20378:102;;;20461:4;20432:5;:15;;;20448:9;20432:26;;;;;;;;;:::i;:::-;:33;;;;:26;;;;;;:33;20378:102;20535:12;;;;;20524:23;;;;:8;;;:23;20591:1;20576:16;;;20561:31;;;20669:13;:11;:13::i;5560:7728::-;5603:12;5689:18;;:::i;:::-;-1:-1:-1;5867:15:105;;:18;;;;5757:4;6027:18;;;;6071;;;;6115;;;;;5757:4;;5847:17;;;;6027:18;6071;6205;;;6219:4;6205:18;6201:6777;;6255:2;6284:4;6279:9;;:14;6275:144;;6395:4;6390:9;;6382:4;:18;6376:24;6275:144;6440:2;:7;;6446:1;6440:7;6436:161;;6476:10;;;;;6508:16;;;;;;;;6476:10;-1:-1:-1;6436:161:105;;;6576:2;6571:7;;6436:161;6225:386;6201:6777;;;6713:10;:18;;6727:4;6713:18;6709:6269;;1745:10;6751:14;;6709:6269;;;6849:10;:18;;6863:4;6849:18;6845:6133;;6892:1;6887:6;;6845:6133;;;7017:10;:18;;7031:4;7017:18;7013:5965;;7070:4;7055:12;;;:19;7092:26;;;:14;;;:26;7143:13;:11;:13::i;:::-;7136:20;;;;;;;;;5560:7728;:::o;7013:5965::-;7282:10;:18;;7296:4;7282:18;7278:5700;;7433:14;;;7429:2708;7278:5700;7429:2708;7603:22;;;;;7599:2538;;7728:10;7741:27;7749:2;7754:10;7749:15;7766:1;7741:7;:27::i;:::-;7852:17;;;;7728:40;;-1:-1:-1;7852:17:105;7830:19;8002:14;8021:1;7996:26;7992:131;;8064:36;8088:11;1277:21:106;1426:15;;;1467:8;1461:4;1454:22;1595:4;1582:18;;1602:19;1578:44;1624:11;1575:61;;1222:430;8064:36:105;8050:50;;7992:131;8209:20;;;;;8176:54;;;;;;;;3472:25:257;;;8176:54:105;3533:23:257;;;3513:18;;;3506:51;8145:11:105;;;;8176:19;:6;:19;;;;3445:18:257;;8176:54:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8144:86;;;;8457:1;8453:2;8449:10;8554:9;8551:1;8547:17;8636:6;8629:5;8626:17;8623:40;;;8656:5;8646:15;;8623:40;;8739:6;8735:2;8732:14;8729:34;;;8759:2;8749:12;;8729:34;8865:3;8860:1;8852:6;8848:14;8843:3;8839:24;8835:34;8828:41;;8965:3;8961:1;8949:9;8940:6;8937:1;8933:14;8929:30;8925:38;8921:48;8914:55;;9120:1;9116;9112;9100:9;9097:1;9093:17;9089:25;9085:33;9081:41;9247:1;9243;9239;9230:6;9218:9;9215:1;9211:17;9207:30;9203:38;9199:46;9195:54;9177:72;;9378:10;9374:15;9368:4;9364:26;9356:34;;9494:3;9486:4;9482:9;9477:3;9473:19;9470:28;9463:35;;;;9640:33;9649:2;9654:10;9649:15;9666:1;9669:3;9640:8;:33::i;:::-;9695:20;;;:38;;;;;;;;;-1:-1:-1;7599:2538:105;;-1:-1:-1;;;7599:2538:105;;9852:18;;;;;9848:289;;10022:2;10017:7;;7278:5700;;9848:289;10076:10;10071:15;;2053:3;10108:10;;9848:289;7278:5700;;;10266:10;:18;;10280:4;10266:18;10262:2716;;10420:15;;;1824:1;10420:15;;:34;;-1:-1:-1;10439:15:105;;;1859:1;10439:15;10420:34;:57;;;-1:-1:-1;10458:19:105;;;1936:1;10458:19;10420:57;10416:1593;;;10506:2;10501:7;;10262:2716;;10416:1593;10632:23;;;;;10628:1381;;10679:10;10692:27;10700:2;10705:10;10700:15;10717:1;10692:7;:27::i;:::-;10795:17;;;;10679:40;;-1:-1:-1;11038:1:105;11030:10;;11132:1;11128:17;11207:13;;;11204:32;;;11229:5;11223:11;;11204:32;11515:14;;;11321:1;11511:22;;;11507:32;;;;11404:26;11428:1;11313:10;;;11408:18;;;11404:26;11503:43;11309:20;;11611:12;11739:17;;;:23;11807:1;11784:20;;;:24;11317:2;-1:-1:-1;11317:2:105;7278:5700;;10262:2716;12211:10;:18;;12225:4;12211:18;12207:771;;12321:2;:7;;12327:1;12321:7;12317:647;;12414:14;;;;;:40;;-1:-1:-1;12432:22:105;;;1978:1;12432:22;12414:40;:62;;;-1:-1:-1;12458:18:105;;;1897:1;12458:18;12414:62;12410:404;;;12509:1;12504:6;;12317:647;;12410:404;12555:15;;;1824:1;12555:15;;:34;;-1:-1:-1;12574:15:105;;;1859:1;12574:15;12555:34;:61;;;-1:-1:-1;12593:23:105;;;2021:1;12593:23;12555:61;:84;;;-1:-1:-1;12620:19:105;;;1936:1;12620:19;12555:84;12551:263;;;12672:1;12667:6;;7278:5700;;12317:647;12865:10;12860:15;;2087:4;12897:11;;12317:647;13053:15;;;;;:23;;;;:18;;;;:23;;;;13090:15;;:23;;;:18;;;;:23;-1:-1:-1;13179:12:105;;;;13168:23;;;:8;;;:23;13235:1;13220:16;13205:31;;;;;13258:13;:11;:13::i;16041:2480::-;16135:12;16221:18;;:::i;:::-;-1:-1:-1;16289:4:105;16321:10;16429:13;;;16438:4;16429:13;16425:1705;;-1:-1:-1;16468:8:105;;;;16425:1705;;;16587:5;:13;;16596:4;16587:13;16583:1547;;16620:14;;;:8;;;:14;16583:1547;;;16750:5;:13;;16759:4;16750:13;16746:1384;;-1:-1:-1;16789:8:105;;;;16746:1384;;;16908:5;:13;;16917:4;16908:13;16904:1226;;16941:14;;;:8;;;:14;16904:1226;;;17082:5;:13;;17091:4;17082:13;17078:1052;;17209:9;17155:17;17135;;;17155;;;;17135:37;17216:2;17209:9;;;;;17191:8;;;:28;17237:22;:8;;;:22;17078:1052;;;17396:5;:13;;17405:4;17396:13;17392:738;;17463:11;17449;;;17463;;;17449:25;17518:2;17511:9;;;;;17493:8;;;:28;17539:22;:8;;;:22;17392:738;;;17720:5;:13;;17729:4;17720:13;17716:414;;17790:3;17771:23;;17777:3;17771:23;;;;;;;:::i;:::-;;17753:42;;:8;;;:42;17831:23;;;;;;;;;;;;;:::i;:::-;;17813:42;;:8;;;:42;17716:414;;;18024:5;:13;;18033:4;18024:13;18020:110;;18074:3;18068:9;;:3;:9;;;;;;;:::i;:::-;;18057:20;;;;:8;;;:20;18106:9;;;;;;;;;;;:::i;:::-;;18095:20;;:8;;;:20;18020:110;18223:14;;;;18219:85;;18286:3;18257:5;:15;;;18273:9;18257:26;;;;;;;;;:::i;:::-;:32;;;;:26;;;;;;:32;18219:85;18358:12;;;;;18347:23;;;;:8;;;:23;18414:1;18399:16;;;18384:31;;;18491:13;:11;:13::i;:::-;18484:20;16041:2480;-1:-1:-1;;;;;;;16041:2480:105:o;23870:1654::-;24046:14;24063:24;24075:11;24063;:24::i;:::-;24046:41;;24195:1;24188:5;24184:13;24181:33;;;24210:1;24207;24200:12;24181:33;24349:2;24543:15;;;24368:2;24357:14;;24345:10;24341:31;24338:1;24334:39;24499:16;;;24284:20;;24484:10;24473:22;;;24469:27;24459:38;24456:60;24985:5;24982:1;24978:13;25056:1;25041:343;25066:2;25063:1;25060:9;25041:343;;;25189:2;25177:15;;;25126:20;25224:12;;;25238:1;25220:20;25261:42;;;;25329:1;25324:42;;;;25213:153;;25261:42;22348:1;22341:12;;;22381:2;22374:13;;;22426:2;22413:16;;25270:31;;25261:42;;25324;22348:1;22341:12;;;22381:2;22374:13;;;22426:2;22413:16;;25333:31;;25213:153;-1:-1:-1;;25084:1:105;25077:9;25041:343;;;-1:-1:-1;;25483:4:105;25476:18;-1:-1:-1;;;;23870:1654:105:o;20903:586::-;21225:20;;;21249:7;21225:32;21218:3;:40;;;21331:14;;21386:17;;21380:24;;;21372:72;;;;;;;4209:2:257;21372:72:105;;;4191:21:257;4248:2;4228:18;;;4221:30;4287:34;4267:18;;;4260:62;4358:5;4338:18;;;4331:33;4381:19;;21372:72:105;4007:399:257;21372:72:105;21458:14;20903:586;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;467:347:257:-;518:8;528:6;582:3;575:4;567:6;563:17;559:27;549:55;;600:1;597;590:12;549:55;-1:-1:-1;623:20:257;;666:18;655:30;;652:50;;;698:1;695;688:12;652:50;735:4;727:6;723:17;711:29;;787:3;780:4;771:6;763;759:19;755:30;752:39;749:59;;;804:1;801;794:12;749:59;467:347;;;;;:::o;819:717::-;909:6;917;925;933;986:2;974:9;965:7;961:23;957:32;954:52;;;1002:1;999;992:12;954:52;1042:9;1029:23;1071:18;1112:2;1104:6;1101:14;1098:34;;;1128:1;1125;1118:12;1098:34;1167:58;1217:7;1208:6;1197:9;1193:22;1167:58;:::i;:::-;1244:8;;-1:-1:-1;1141:84:257;-1:-1:-1;1332:2:257;1317:18;;1304:32;;-1:-1:-1;1348:16:257;;;1345:36;;;1377:1;1374;1367:12;1345:36;;1416:60;1468:7;1457:8;1446:9;1442:24;1416:60;:::i;:::-;819:717;;;;-1:-1:-1;1495:8:257;-1:-1:-1;;;;819:717:257:o;1723:184::-;1775:77;1772:1;1765:88;1872:4;1869:1;1862:15;1896:4;1893:1;1886:15;3568:245;3647:6;3655;3708:2;3696:9;3687:7;3683:23;3679:32;3676:52;;;3724:1;3721;3714:12;3676:52;-1:-1:-1;;3747:16:257;;3803:2;3788:18;;;3782:25;3747:16;;3782:25;;-1:-1:-1;3568:245:257:o;3818:184::-;3870:77;3867:1;3860:88;3967:4;3964:1;3957:15;3991:4;3988:1;3981:15" func init() { if err := json.Unmarshal([]byte(MIPSStorageLayoutJSON), MIPSStorageLayout); err != nil { diff --git a/packages/contracts-bedrock/src/cannon/MIPS.sol b/packages/contracts-bedrock/src/cannon/MIPS.sol index 1b88770472bb..ac09b8733f35 100644 --- a/packages/contracts-bedrock/src/cannon/MIPS.sol +++ b/packages/contracts-bedrock/src/cannon/MIPS.sol @@ -103,9 +103,9 @@ contract MIPS { from, to := copyMem(from, to, 4) // lo from, to := copyMem(from, to, 4) // hi from, to := copyMem(from, to, 4) // heap - let exitCode := shr(248, mload(from)) + let exitCode := mload(from) from, to := copyMem(from, to, 1) // exitCode - let exited := shr(248, mload(from)) + let exited := mload(from) from, to := copyMem(from, to, 1) // exited from, to := copyMem(from, to, 8) // step from := add(from, 32) // offset to registers @@ -137,7 +137,7 @@ contract MIPS { // Compute the hash of the resulting MIPS state out_ := keccak256(start, sub(to, start)) - out_ := or(shl(248, status), and(not(shl(248, 0xff)), out_)) + out_ := or(and(not(shl(248, 0xFF)), out_), shl(248, status)) } } diff --git a/packages/contracts-bedrock/test/MIPS.t.sol b/packages/contracts-bedrock/test/MIPS.t.sol index 612f13ee0329..61f476e50dcd 100644 --- a/packages/contracts-bedrock/test/MIPS.t.sol +++ b/packages/contracts-bedrock/test/MIPS.t.sol @@ -1558,7 +1558,7 @@ contract MIPS_Test is CommonTest { /// 1. Exited with success (Invalid) /// 2. Exited with failure (Panic) /// 3. Unfinished - function vmStatus(MIPS.State memory state) internal pure returns (uint8 out_) { + function vmStatus(MIPS.State memory state) internal pure returns (uint256 out_) { if (state.exited) { if (state.exitCode == 0) { return 0; @@ -1574,7 +1574,7 @@ contract MIPS_Test is CommonTest { function outputState(MIPS.State memory state) internal pure returns (bytes32 out_) { bytes memory enc = encodeState(state); - uint8 status = vmStatus(state); + uint256 status = vmStatus(state); assembly { out_ := keccak256(add(enc, 0x20), 226) out_ := or(and(not(shl(248, 0xFF)), out_), shl(248, status)) From e13fe02b9b727d751bf4ca04fbf20f676a36148a Mon Sep 17 00:00:00 2001 From: clabby Date: Sun, 3 Sep 2023 12:32:45 -0400 Subject: [PATCH 06/20] Ignore high byte in Alphabet game --- .../game/fault/trace/alphabet/provider.go | 13 +- packages/contracts-bedrock/.gas-snapshot | 226 +++++++++--------- packages/contracts-bedrock/semver-lock.json | 2 +- .../src/dispute/FaultDisputeGame.sol | 19 +- .../test/FaultDisputeGame.t.sol | 15 +- 5 files changed, 143 insertions(+), 132 deletions(-) diff --git a/op-challenger/game/fault/trace/alphabet/provider.go b/op-challenger/game/fault/trace/alphabet/provider.go index c16e448b7a58..9b625d052156 100644 --- a/op-challenger/game/fault/trace/alphabet/provider.go +++ b/op-challenger/game/fault/trace/alphabet/provider.go @@ -75,19 +75,10 @@ func BuildAlphabetPreimage(i uint64, letter string) []byte { return append(IndexToBytes(i), LetterToBytes(letter)...) } -const maxAlphabet = 26 - func alphabetStateHash(state []byte) common.Hash { h := crypto.Keccak256Hash(state) - // instead of the state containing an "exited" boolean, we just check if the index reached the end - i := new(big.Int).SetBytes(state[:32]) - if !i.IsUint64() || i.Uint64() > maxAlphabet { - h[0] = types.VMStatusPanic // this state should never be reached, if we increment by 1 per step - } else if i.Uint64() == maxAlphabet { - h[0] = types.VMStatusValid - } else { - h[0] = types.VMStatusUnfinished - } + // In the alphabet game, we ignore the VM status code and always set it to 1. + h[0] = 1 return h } diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 799bf66af012..059174a3efbb 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -17,7 +17,7 @@ AttestationStationTest:test_attest_bulk_succeeds() (gas: 703749) AttestationStationTest:test_attest_individual_succeeds() (gas: 632087) AttestationStationTest:test_attest_single_succeeds() (gas: 651325) BlockOracle_Test:test_checkpointAndLoad_succeeds() (gas: 58341) -BlockOracle_Test:test_load_noBlockHash_reverts() (gas: 12805) +BlockOracle_Test:test_load_noBlockHash_reverts() (gas: 13659) Bytes_slice_Test:test_slice_acrossMultipleWords_works() (gas: 9413) Bytes_slice_Test:test_slice_acrossWords_works() (gas: 1430) Bytes_slice_Test:test_slice_fromNonZeroIdx_works() (gas: 17240) @@ -88,38 +88,38 @@ FaucetTest:test_nonAdmin_drip_fails() (gas: 262520) FaucetTest:test_receive_succeeds() (gas: 17401) FaucetTest:test_withdraw_nonAdmin_reverts() (gas: 13145) FaucetTest:test_withdraw_succeeds() (gas: 78359) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 498906) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 505746) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 502447) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 505644) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 504933) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 497671) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 504511) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 501212) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 502409) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 501698) -FaultDisputeGame_Test:test_addLocalData_static_succeeds() (gas: 640503) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 499188) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 506048) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 502729) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 505946) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 505215) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 497953) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 504813) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 501494) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 502711) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 501980) +FaultDisputeGame_Test:test_addLocalData_static_succeeds() (gas: 640504) FaultDisputeGame_Test:test_createdAt_succeeds() (gas: 10342) FaultDisputeGame_Test:test_extraData_succeeds() (gas: 32377) -FaultDisputeGame_Test:test_gameData_succeeds() (gas: 32829) -FaultDisputeGame_Test:test_gameType_succeeds() (gas: 8250) -FaultDisputeGame_Test:test_initialize_correctData_succeeds() (gas: 57650) -FaultDisputeGame_Test:test_initialize_firstOutput_reverts() (gas: 210554) -FaultDisputeGame_Test:test_initialize_l1HeadTooOld_reverts() (gas: 228337) -FaultDisputeGame_Test:test_move_clockCorrectness_succeeds() (gas: 415993) -FaultDisputeGame_Test:test_move_clockTimeExceeded_reverts() (gas: 23219) -FaultDisputeGame_Test:test_move_defendRoot_reverts() (gas: 13366) -FaultDisputeGame_Test:test_move_duplicateClaim_reverts() (gas: 102920) +FaultDisputeGame_Test:test_gameData_succeeds() (gas: 32804) +FaultDisputeGame_Test:test_gameType_succeeds() (gas: 8309) +FaultDisputeGame_Test:test_initialize_correctData_succeeds() (gas: 57628) +FaultDisputeGame_Test:test_initialize_firstOutput_reverts() (gas: 210609) +FaultDisputeGame_Test:test_initialize_l1HeadTooOld_reverts() (gas: 228370) +FaultDisputeGame_Test:test_move_clockCorrectness_succeeds() (gas: 415971) +FaultDisputeGame_Test:test_move_clockTimeExceeded_reverts() (gas: 23197) +FaultDisputeGame_Test:test_move_defendRoot_reverts() (gas: 13344) +FaultDisputeGame_Test:test_move_duplicateClaim_reverts() (gas: 102898) FaultDisputeGame_Test:test_move_gameDepthExceeded_reverts() (gas: 407913) -FaultDisputeGame_Test:test_move_gameNotInProgress_reverts() (gas: 11024) -FaultDisputeGame_Test:test_move_nonExistentParent_reverts() (gas: 24732) -FaultDisputeGame_Test:test_move_simpleAttack_succeeds() (gas: 107341) -FaultDisputeGame_Test:test_resolve_challengeContested_succeeds() (gas: 224906) -FaultDisputeGame_Test:test_resolve_notInProgress_reverts() (gas: 9664) -FaultDisputeGame_Test:test_resolve_rootContested_succeeds() (gas: 109856) +FaultDisputeGame_Test:test_move_gameNotInProgress_reverts() (gas: 11002) +FaultDisputeGame_Test:test_move_nonExistentParent_reverts() (gas: 24710) +FaultDisputeGame_Test:test_move_simpleAttack_succeeds() (gas: 107384) +FaultDisputeGame_Test:test_resolve_challengeContested_succeeds() (gas: 224949) +FaultDisputeGame_Test:test_resolve_notInProgress_reverts() (gas: 9686) +FaultDisputeGame_Test:test_resolve_rootContested_succeeds() (gas: 109879) FaultDisputeGame_Test:test_resolve_rootUncontestedClockNotExpired_succeeds() (gas: 21421) -FaultDisputeGame_Test:test_resolve_rootUncontested_succeeds() (gas: 27256) -FaultDisputeGame_Test:test_resolve_teamDeathmatch_succeeds() (gas: 395635) +FaultDisputeGame_Test:test_resolve_rootUncontested_succeeds() (gas: 27279) +FaultDisputeGame_Test:test_resolve_teamDeathmatch_succeeds() (gas: 395658) FaultDisputeGame_Test:test_rootClaim_succeeds() (gas: 8276) FeeVault_Test:test_constructor_succeeds() (gas: 18185) GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 354286) @@ -174,7 +174,7 @@ L1CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 12343) L1CrossDomainMessenger_Test:test_replayMessage_withValue_reverts() (gas: 33166) L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 392870) L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1669046) -L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 87043) +L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 87904) L1CrossDomainMessenger_Test:test_xDomainSender_notSet_reverts() (gas: 24253) L1ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 62677) L1ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 37273) @@ -218,7 +218,7 @@ L2CrossDomainMessenger_Test:test_relayMessage_toSystemContract_reverts() (gas: 3 L2CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 11689) L2CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 123768) L2CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 135434) -L2CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 48422) +L2CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 49281) L2CrossDomainMessenger_Test:test_xDomainSender_senderNotSet_reverts() (gas: 10590) L2ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 31428) L2ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 26826) @@ -251,12 +251,12 @@ L2OutputOracle_deleteOutputs_Test:test_deleteL2Outputs_ifNotChallenger_reverts() L2OutputOracle_deleteOutputs_Test:test_deleteL2Outputs_nonExistent_reverts() (gas: 111651) L2OutputOracle_deleteOutputs_Test:test_deleteOutputs_multipleOutputs_succeeds() (gas: 307411) L2OutputOracle_deleteOutputs_Test:test_deleteOutputs_singleOutput_succeeds() (gas: 185564) -L2OutputOracle_getter_Test:test_computeL2Timestamp_succeeds() (gas: 37341) +L2OutputOracle_getter_Test:test_computeL2Timestamp_succeeds() (gas: 38198) L2OutputOracle_getter_Test:test_getL2OutputIndexAfter_multipleOutputsExist_succeeds() (gas: 269700) L2OutputOracle_getter_Test:test_getL2OutputIndexAfter_noOutputsExis_reverts() (gas: 17892) L2OutputOracle_getter_Test:test_getL2OutputIndexAfter_previousBlock_succeeds() (gas: 98188) L2OutputOracle_getter_Test:test_getL2OutputIndexAfter_sameBlock_succeeds() (gas: 98096) -L2OutputOracle_getter_Test:test_getL2Output_succeeds() (gas: 103735) +L2OutputOracle_getter_Test:test_getL2Output_succeeds() (gas: 104600) L2OutputOracle_getter_Test:test_latestBlockNumber_succeeds() (gas: 99129) L2OutputOracle_getter_Test:test_nextBlockNumber_succeeds() (gas: 17447) L2OutputOracle_proposeL2Output_Test:test_proposeL2Output_emptyOutput_reverts() (gas: 28812) @@ -298,81 +298,81 @@ LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 12957) LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10755) LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34524) LibPosition_Test:test_pos_correctness_succeeds() (gas: 38689) -MIPS_Test:test_add_succeeds() (gas: 122197) -MIPS_Test:test_addiSign_succeeds() (gas: 122188) -MIPS_Test:test_addi_succeeds() (gas: 122385) -MIPS_Test:test_addu_succeeds() (gas: 122239) -MIPS_Test:test_addui_succeeds() (gas: 122447) -MIPS_Test:test_and_succeeds() (gas: 122258) -MIPS_Test:test_andi_succeeds() (gas: 122191) -MIPS_Test:test_beq_succeeds() (gas: 202355) -MIPS_Test:test_bgez_succeeds() (gas: 121484) -MIPS_Test:test_bgtz_succeeds() (gas: 121405) -MIPS_Test:test_blez_succeeds() (gas: 121361) -MIPS_Test:test_bltz_succeeds() (gas: 121504) -MIPS_Test:test_bne_succeeds() (gas: 121570) +MIPS_Test:test_add_succeeds() (gas: 122488) +MIPS_Test:test_addiSign_succeeds() (gas: 122479) +MIPS_Test:test_addi_succeeds() (gas: 122676) +MIPS_Test:test_addu_succeeds() (gas: 122530) +MIPS_Test:test_addui_succeeds() (gas: 122738) +MIPS_Test:test_and_succeeds() (gas: 122549) +MIPS_Test:test_andi_succeeds() (gas: 122482) +MIPS_Test:test_beq_succeeds() (gas: 202937) +MIPS_Test:test_bgez_succeeds() (gas: 121775) +MIPS_Test:test_bgtz_succeeds() (gas: 121696) +MIPS_Test:test_blez_succeeds() (gas: 121652) +MIPS_Test:test_bltz_succeeds() (gas: 121795) +MIPS_Test:test_bne_succeeds() (gas: 121861) MIPS_Test:test_branch_inDelaySlot_fails() (gas: 85999) -MIPS_Test:test_brk_succeeds() (gas: 121869) -MIPS_Test:test_clo_succeeds() (gas: 121926) -MIPS_Test:test_clone_succeeds() (gas: 121822) -MIPS_Test:test_clz_succeeds() (gas: 122397) -MIPS_Test:test_div_succeeds() (gas: 122376) -MIPS_Test:test_divu_succeeds() (gas: 122361) -MIPS_Test:test_exit_succeeds() (gas: 121746) -MIPS_Test:test_fcntl_succeeds() (gas: 203827) +MIPS_Test:test_brk_succeeds() (gas: 122160) +MIPS_Test:test_clo_succeeds() (gas: 122217) +MIPS_Test:test_clone_succeeds() (gas: 122113) +MIPS_Test:test_clz_succeeds() (gas: 122688) +MIPS_Test:test_div_succeeds() (gas: 122667) +MIPS_Test:test_divu_succeeds() (gas: 122652) +MIPS_Test:test_exit_succeeds() (gas: 122160) +MIPS_Test:test_fcntl_succeeds() (gas: 204409) MIPS_Test:test_illegal_instruction_fails() (gas: 91462) MIPS_Test:test_invalid_root_fails() (gas: 435636) -MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 120514) -MIPS_Test:test_jal_succeeds() (gas: 120503) -MIPS_Test:test_jalr_succeeds() (gas: 121622) -MIPS_Test:test_jr_succeeds() (gas: 121316) +MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 120805) +MIPS_Test:test_jal_succeeds() (gas: 120794) +MIPS_Test:test_jalr_succeeds() (gas: 121913) +MIPS_Test:test_jr_succeeds() (gas: 121607) MIPS_Test:test_jump_inDelaySlot_fails() (gas: 85367) -MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120258) -MIPS_Test:test_jump_succeeds() (gas: 120188) -MIPS_Test:test_lb_succeeds() (gas: 127429) -MIPS_Test:test_lbu_succeeds() (gas: 127327) -MIPS_Test:test_lh_succeeds() (gas: 127450) -MIPS_Test:test_lhu_succeeds() (gas: 127367) -MIPS_Test:test_ll_succeeds() (gas: 127589) -MIPS_Test:test_lui_succeeds() (gas: 121470) -MIPS_Test:test_lw_succeeds() (gas: 127218) -MIPS_Test:test_lwl_succeeds() (gas: 241600) -MIPS_Test:test_lwr_succeeds() (gas: 241888) -MIPS_Test:test_mfhi_succeeds() (gas: 121831) -MIPS_Test:test_mflo_succeeds() (gas: 121960) -MIPS_Test:test_mmap_succeeds() (gas: 118789) -MIPS_Test:test_movn_succeeds() (gas: 203027) -MIPS_Test:test_movz_succeeds() (gas: 202895) -MIPS_Test:test_mthi_succeeds() (gas: 121875) -MIPS_Test:test_mtlo_succeeds() (gas: 121983) -MIPS_Test:test_mul_succeeds() (gas: 121475) -MIPS_Test:test_mult_succeeds() (gas: 122179) -MIPS_Test:test_multu_succeeds() (gas: 122216) -MIPS_Test:test_nor_succeeds() (gas: 122308) -MIPS_Test:test_or_succeeds() (gas: 122265) -MIPS_Test:test_ori_succeeds() (gas: 122268) -MIPS_Test:test_preimage_read_succeeds() (gas: 234185) -MIPS_Test:test_preimage_write_succeeds() (gas: 126811) -MIPS_Test:test_prestate_exited_succeeds() (gas: 112992) -MIPS_Test:test_sb_succeeds() (gas: 160300) -MIPS_Test:test_sc_succeeds() (gas: 160494) -MIPS_Test:test_sh_succeeds() (gas: 160337) -MIPS_Test:test_sll_succeeds() (gas: 121436) -MIPS_Test:test_sllv_succeeds() (gas: 121665) -MIPS_Test:test_slt_succeeds() (gas: 204222) -MIPS_Test:test_sltu_succeeds() (gas: 122482) -MIPS_Test:test_sra_succeeds() (gas: 121687) -MIPS_Test:test_srav_succeeds() (gas: 121955) -MIPS_Test:test_srl_succeeds() (gas: 121518) -MIPS_Test:test_srlv_succeeds() (gas: 121683) -MIPS_Test:test_step_abi_succeeds() (gas: 58312) -MIPS_Test:test_sub_succeeds() (gas: 122292) -MIPS_Test:test_subu_succeeds() (gas: 122289) -MIPS_Test:test_sw_succeeds() (gas: 160312) -MIPS_Test:test_swl_succeeds() (gas: 160373) -MIPS_Test:test_swr_succeeds() (gas: 160448) -MIPS_Test:test_xor_succeeds() (gas: 122293) -MIPS_Test:test_xori_succeeds() (gas: 122345) +MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120549) +MIPS_Test:test_jump_succeeds() (gas: 120479) +MIPS_Test:test_lb_succeeds() (gas: 127720) +MIPS_Test:test_lbu_succeeds() (gas: 127618) +MIPS_Test:test_lh_succeeds() (gas: 127741) +MIPS_Test:test_lhu_succeeds() (gas: 127658) +MIPS_Test:test_ll_succeeds() (gas: 127880) +MIPS_Test:test_lui_succeeds() (gas: 121761) +MIPS_Test:test_lw_succeeds() (gas: 127509) +MIPS_Test:test_lwl_succeeds() (gas: 242182) +MIPS_Test:test_lwr_succeeds() (gas: 242470) +MIPS_Test:test_mfhi_succeeds() (gas: 122122) +MIPS_Test:test_mflo_succeeds() (gas: 122251) +MIPS_Test:test_mmap_succeeds() (gas: 119080) +MIPS_Test:test_movn_succeeds() (gas: 203609) +MIPS_Test:test_movz_succeeds() (gas: 203477) +MIPS_Test:test_mthi_succeeds() (gas: 122166) +MIPS_Test:test_mtlo_succeeds() (gas: 122274) +MIPS_Test:test_mul_succeeds() (gas: 121766) +MIPS_Test:test_mult_succeeds() (gas: 122470) +MIPS_Test:test_multu_succeeds() (gas: 122507) +MIPS_Test:test_nor_succeeds() (gas: 122599) +MIPS_Test:test_or_succeeds() (gas: 122556) +MIPS_Test:test_ori_succeeds() (gas: 122559) +MIPS_Test:test_preimage_read_succeeds() (gas: 234476) +MIPS_Test:test_preimage_write_succeeds() (gas: 127102) +MIPS_Test:test_prestate_exited_succeeds() (gas: 113346) +MIPS_Test:test_sb_succeeds() (gas: 160591) +MIPS_Test:test_sc_succeeds() (gas: 160785) +MIPS_Test:test_sh_succeeds() (gas: 160628) +MIPS_Test:test_sll_succeeds() (gas: 121727) +MIPS_Test:test_sllv_succeeds() (gas: 121956) +MIPS_Test:test_slt_succeeds() (gas: 204804) +MIPS_Test:test_sltu_succeeds() (gas: 122773) +MIPS_Test:test_sra_succeeds() (gas: 121978) +MIPS_Test:test_srav_succeeds() (gas: 122246) +MIPS_Test:test_srl_succeeds() (gas: 121809) +MIPS_Test:test_srlv_succeeds() (gas: 121974) +MIPS_Test:test_step_abi_succeeds() (gas: 58481) +MIPS_Test:test_sub_succeeds() (gas: 122583) +MIPS_Test:test_subu_succeeds() (gas: 122580) +MIPS_Test:test_sw_succeeds() (gas: 160603) +MIPS_Test:test_swl_succeeds() (gas: 160664) +MIPS_Test:test_swr_succeeds() (gas: 160739) +MIPS_Test:test_xor_succeeds() (gas: 122584) +MIPS_Test:test_xori_succeeds() (gas: 122636) MerkleTrie_get_Test:test_get_corruptedProof_reverts() (gas: 5733) MerkleTrie_get_Test:test_get_extraProofElements_reverts() (gas: 58889) MerkleTrie_get_Test:test_get_invalidDataRemainder_reverts() (gas: 35845) @@ -465,7 +465,7 @@ OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreat OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_succeeds() (gas: 75929) OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_succeeds() (gas: 83476) OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_succeeds() (gas: 84069) -OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 126749) +OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 127617) OptimismPortal_Test:test_minimumGasLimit_succeeds() (gas: 17430) OptimismPortal_Test:test_pause_onlyGuardian_reverts() (gas: 24487) OptimismPortal_Test:test_pause_succeeds() (gas: 27344) @@ -525,7 +525,7 @@ PreimageOracle_Test:test_loadKeccak256PreimagePart_outOfBoundsOffset_reverts() ( PreimageOracle_Test:test_loadKeccak256PreimagePart_succeeds() (gas: 76098) PreimageOracle_Test:test_loadLocalData_onePart_succeeds() (gas: 75840) PreimageOracle_Test:test_loadLocalData_outOfBoundsOffset_reverts() (gas: 8803) -ProxyAdmin_Test:test_chugsplashChangeProxyAdmin_succeeds() (gas: 35586) +ProxyAdmin_Test:test_chugsplashChangeProxyAdmin_succeeds() (gas: 36440) ProxyAdmin_Test:test_chugsplashGetProxyAdmin_succeeds() (gas: 15675) ProxyAdmin_Test:test_chugsplashGetProxyImplementation_succeeds() (gas: 51084) ProxyAdmin_Test:test_chugsplashUpgradeAndCall_succeeds() (gas: 82311) @@ -535,7 +535,7 @@ ProxyAdmin_Test:test_delegateResolvedGetProxyAdmin_succeeds() (gas: 17691) ProxyAdmin_Test:test_delegateResolvedGetProxyImplementation_succeeds() (gas: 62028) ProxyAdmin_Test:test_delegateResolvedUpgradeAndCall_succeeds() (gas: 98039) ProxyAdmin_Test:test_delegateResolvedUpgrade_succeeds() (gas: 58482) -ProxyAdmin_Test:test_erc1967ChangeProxyAdmin_succeeds() (gas: 33820) +ProxyAdmin_Test:test_erc1967ChangeProxyAdmin_succeeds() (gas: 34674) ProxyAdmin_Test:test_erc1967GetProxyAdmin_succeeds() (gas: 15616) ProxyAdmin_Test:test_erc1967GetProxyImplementation_succeeds() (gas: 52073) ProxyAdmin_Test:test_erc1967UpgradeAndCall_succeeds() (gas: 78971) @@ -553,9 +553,9 @@ Proxy_Test:test_implementationKey_succeeds() (gas: 20911) Proxy_Test:test_implementation_isZeroAddress_reverts() (gas: 47628) Proxy_Test:test_implementation_zeroAddressCaller_succeeds() (gas: 14752) Proxy_Test:test_ownerKey_succeeds() (gas: 19067) -Proxy_Test:test_ownerProxyCall_notAdmin_succeeds() (gas: 34623) +Proxy_Test:test_ownerProxyCall_notAdmin_succeeds() (gas: 35477) Proxy_Test:test_proxyCallToImp_notAdmin_succeeds() (gas: 30010) -Proxy_Test:test_upgradeToAndCall_functionDoesNotExist_reverts() (gas: 104567) +Proxy_Test:test_upgradeToAndCall_functionDoesNotExist_reverts() (gas: 107980) Proxy_Test:test_upgradeToAndCall_isPayable_succeeds() (gas: 53744) Proxy_Test:test_upgradeToAndCall_succeeds() (gas: 125192) Proxy_Test:test_upgradeTo_clashingFunctionSignatures_succeeds() (gas: 101363) @@ -648,8 +648,8 @@ StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 3307 SystemConfig_Initialize_Test:test_initialize_events_succeeds() (gas: 72060) SystemConfig_Initialize_Test:test_initialize_startBlockOverride_succeeds() (gas: 65242) SystemConfig_Initialize_Test:test_initialize_values_succeeds() (gas: 64946) -SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 55655) -SystemConfig_Initialize_TestFail:test_initialize_startBlock_reverts() (gas: 78352) +SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 57243) +SystemConfig_Initialize_TestFail:test_initialize_startBlock_reverts() (gas: 79938) SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 15607) SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 15577) SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 15676) @@ -660,9 +660,9 @@ SystemConfig_Setters_TestFail:test_setResourceConfig_notOwner_reverts() (gas: 16 SystemConfig_Setters_TestFail:test_setResourceConfig_zeroDenominator_reverts() (gas: 18578) SystemConfig_Setters_TestFail:test_setUnsafeBlockSigner_notOwner_reverts() (gas: 15590) TransactorTest:test_call_succeeds() (gas: 26709) -TransactorTest:test_call_unauthorized_reverts() (gas: 16543) +TransactorTest:test_call_unauthorized_reverts() (gas: 18117) TransactorTest:test_constructor_succeeds() (gas: 9739) TransactorTest:test_delegateCall_succeeds() (gas: 20909) -TransactorTest:test_delegateCall_unauthorized_reverts() (gas: 16550) +TransactorTest:test_delegateCall_unauthorized_reverts() (gas: 18124) TransferOnionTest:test_constructor_succeeds() (gas: 564855) TransferOnionTest:test_unwrap_succeeds() (gas: 724955) \ No newline at end of file diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index f4668719246a..9ba7c996aee2 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,7 +16,7 @@ "src/L2/L2StandardBridge.sol": "0xe025dcccbf21d48828ecf588941c9ba04c91b87bdd177a653d3f1b265b0b02a8", "src/L2/L2ToL1MessagePasser.sol": "0xda56ba2e5b2c28fa8ca2df24077d49e96155a00ecc99cd0778d681be6ed166fe", "src/L2/SequencerFeeVault.sol": "0x37816035c992d38cf7e3d5a1846b02d017dd7bdca46abe6e5c5171b9ee6225ab", - "src/dispute/FaultDisputeGame.sol": "0x72c917e8513d17f274753a391bdbddc1f4daeca1a392f79492df29a1107c3525", + "src/dispute/FaultDisputeGame.sol": "0x1ee46e383f6017c8a381c54ff26958659d54995c97144879586a0d827f4a82c8", "src/legacy/DeployerWhitelist.sol": "0xf2129ec3da75307ba8e21bc943c332bb04704642e6e263149b5c8ee92dbcb7a8", "src/legacy/L1BlockNumber.sol": "0x30aae1fc85103476af0226b6e98c71c01feebbdc35d93401390b1ad438a37be6", "src/legacy/LegacyMessagePasser.sol": "0x5c08b0a663cc49d30e4e38540f6aefab19ef287c3ecd31c8d8c3decd5f5bd497", diff --git a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol index d3992ac40f45..3071b0d6a3a4 100644 --- a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol +++ b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol @@ -85,7 +85,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { /// @param _blockOracle The block oracle, used for loading block hashes further back /// than the `BLOCKHASH` opcode allows as well as their estimated /// timestamps. - /// @custom:semver 0.0.7 + /// @custom:semver 0.0.8 constructor( GameType _gameType, Claim _absolutePrestate, @@ -149,7 +149,11 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { // INVARIANT: The prestate is always invalid if the passed `_stateData` is not the // preimage of the prestate claim hash. - if (keccak256(_stateData) != Claim.unwrap(preStateClaim)) revert InvalidPrestate(); + // We ignore the highest order byte of the digest because it is used to + // indicate the VM Status. + if (cleanHighByte(keccak256(_stateData)) != cleanHighByte(Claim.unwrap(preStateClaim))) { + revert InvalidPrestate(); + } // INVARIANT: If a step is an attack, the poststate is valid if the step produces // the same poststate hash as the parent claim's value. @@ -434,11 +438,13 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { function initialize() external { // SAFETY: Any revert in this function will bubble up to the DisputeGameFactory and // prevent the game from being created. + // // Implicit assumptions: // - The `gameStatus` state variable defaults to 0, which is `GameStatus.IN_PROGRESS` // The VMStatus must indicate (1) 'invalid', to argue that disputed thing is invalid. // Games that agree with the existing outcome are not allowed. + // NOTE(clabby): This assumption will change in Alpha Chad. if (uint8(Claim.unwrap(rootClaim())[0]) != 1) revert UnexpectedRootClaim(rootClaim()); // Set the game's starting timestamp @@ -535,4 +541,13 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { ancestor_ = claimData[ancestor_.parentIndex]; } } + + /// @notice Cleans the highest order byte of a given fixed bytes value. + /// @param _in The bytes32 value to clean. + /// @return out_ The cleaned bytes32 value. + function cleanHighByte(bytes32 _in) internal pure returns (bytes32 out_) { + assembly { + out_ := and(not(shl(248, 0xFF)), _in) + } + } } diff --git a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol index 82baa9ab769f..458922e86acd 100644 --- a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol @@ -77,7 +77,7 @@ contract FaultDisputeGame_Init is DisputeGameFactory_Init { contract FaultDisputeGame_Test is FaultDisputeGame_Init { /// @dev The root claim of the game. - Claim internal constant ROOT_CLAIM = Claim.wrap(bytes32((uint256(1) << 248) + uint256(10))); + Claim internal constant ROOT_CLAIM = Claim.wrap(bytes32((uint256(1) << 248) | uint256(10))); /// @dev The absolute prestate of the trace. Claim internal constant ABSOLUTE_PRESTATE = Claim.wrap(bytes32(uint256(0))); @@ -609,9 +609,11 @@ contract GamePlayer { /// @notice Returns the player's claim that commits to a given trace index. function claimAt(uint256 _traceIndex) public view returns (Claim claim_) { - return Claim.wrap( - keccak256(abi.encode(_traceIndex >= trace.length ? trace.length - 1 : _traceIndex, traceAt(_traceIndex))) - ); + bytes32 hash = + keccak256(abi.encode(_traceIndex >= trace.length ? trace.length - 1 : _traceIndex, traceAt(_traceIndex))); + assembly { + claim_ := or(and(hash, not(shl(248, 0xFF))), shl(248, 1)) + } } /// @notice Returns the player's claim that commits to a given trace index. @@ -631,7 +633,7 @@ contract OneVsOne_Arena is FaultDisputeGame_Init { GamePlayer internal challenger; function init(GamePlayer _defender, GamePlayer _challenger, uint256 _finalTraceIndex) public { - Claim rootClaim = Claim.wrap(keccak256(abi.encode(_finalTraceIndex, _defender.traceAt(_finalTraceIndex)))); + Claim rootClaim = _defender.claimAt(_finalTraceIndex); super.init(rootClaim, ABSOLUTE_PRESTATE_CLAIM); defender = _defender; challenger = _challenger; @@ -995,5 +997,8 @@ contract AlphabetVM is IBigStepper { } // STF: n -> n + 1 postState_ = keccak256(abi.encode(traceIndex, claim + 1)); + assembly { + postState_ := or(and(postState_, not(shl(248, 0xFF))), shl(248, 1)) + } } } From 07ebcab0616d1b7e0961f571cbc00a6e9d30cc4b Mon Sep 17 00:00:00 2001 From: clabby Date: Sun, 3 Sep 2023 14:11:37 -0400 Subject: [PATCH 07/20] Fix Cannon `StateHash` computation --- cannon/mipsevm/evm_test.go | 5 +++-- cannon/mipsevm/state.go | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cannon/mipsevm/evm_test.go b/cannon/mipsevm/evm_test.go index f4c0c9cbb4a4..d3d159d31187 100644 --- a/cannon/mipsevm/evm_test.go +++ b/cannon/mipsevm/evm_test.go @@ -15,7 +15,6 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/stretchr/testify/require" @@ -92,7 +91,9 @@ func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte { logs := m.evmState.Logs() require.Equal(t, 1, len(logs), "expecting a log with post-state") evmPost := logs[0].Data - require.Equal(t, crypto.Keccak256Hash(evmPost), postHash, "logged state must be accurate") + + stateHash := (StateWitness)(evmPost).StateHash() + require.Equal(t, stateHash, postHash, "logged state must be accurate") m.env.StateDB.RevertToSnapshot(snap) t.Logf("EVM step took %d gas, and returned stateHash %s", startingGas-leftOverGas, postHash) diff --git a/cannon/mipsevm/state.go b/cannon/mipsevm/state.go index e83f6bbf40c6..a1988fbab6de 100644 --- a/cannon/mipsevm/state.go +++ b/cannon/mipsevm/state.go @@ -78,8 +78,8 @@ const ( func (sw StateWitness) StateHash() common.Hash { hash := crypto.Keccak256Hash(sw) offset := 32*2 + 4*6 - exited := sw[offset] - exitCode := sw[offset+1] + exitCode := sw[offset] + exited := sw[offset+1] status := vmStatus(exited == 1, exitCode) hash[0] = status return hash From b3ab3ce9e1904b17a3f162bfa704eb70bc664ac1 Mon Sep 17 00:00:00 2001 From: clabby Date: Sun, 3 Sep 2023 14:14:42 -0400 Subject: [PATCH 08/20] chore: bindings chore: gas-snapshot --- cannon/mipsevm/evm_test.go | 2 +- op-bindings/bindings/alphabetvm.go | 2 +- op-bindings/bindings/alphabetvm_more.go | 2 +- op-bindings/bindings/faultdisputegame.go | 2 +- op-bindings/bindings/faultdisputegame_more.go | 2 +- packages/contracts-bedrock/.gas-snapshot | 28 +++++++++---------- 6 files changed, 19 insertions(+), 19 deletions(-) diff --git a/cannon/mipsevm/evm_test.go b/cannon/mipsevm/evm_test.go index d3d159d31187..89c8652968e0 100644 --- a/cannon/mipsevm/evm_test.go +++ b/cannon/mipsevm/evm_test.go @@ -92,7 +92,7 @@ func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte { require.Equal(t, 1, len(logs), "expecting a log with post-state") evmPost := logs[0].Data - stateHash := (StateWitness)(evmPost).StateHash() + stateHash := StateWitness(evmPost).StateHash() require.Equal(t, stateHash, postHash, "logged state must be accurate") m.env.StateDB.RevertToSnapshot(snap) diff --git a/op-bindings/bindings/alphabetvm.go b/op-bindings/bindings/alphabetvm.go index e78b98d45128..f9f6e8e6179c 100644 --- a/op-bindings/bindings/alphabetvm.go +++ b/op-bindings/bindings/alphabetvm.go @@ -31,7 +31,7 @@ var ( // AlphabetVMMetaData contains all meta data concerning the AlphabetVM contract. var AlphabetVMMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"postState_\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b50604051610a73380380610a7383398101604081905261002f91610090565b608081905260405161004090610083565b604051809103906000f08015801561005c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100a9565b6106c5806103ae83390190565b6000602082840312156100a257600080fd5b5051919050565b6080516102eb6100c3600039600060ad01526102eb6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100986100933660046101a8565b6100a6565b60405190815260200161007c565b60008060007f000000000000000000000000000000000000000000000000000000000000000087876040516100dc929190610214565b60405180910390200361010057600091506100f986880188610224565b905061011f565b61010c8688018861023d565b90925090508161011b8161028e565b9250505b8161012b8260016102c6565b6040805160208101939093528201526060016040516020818303038152906040528051906020012092505050949350505050565b60008083601f84011261017157600080fd5b50813567ffffffffffffffff81111561018957600080fd5b6020830191508360208285010111156101a157600080fd5b9250929050565b600080600080604085870312156101be57600080fd5b843567ffffffffffffffff808211156101d657600080fd5b6101e28883890161015f565b909650945060208701359150808211156101fb57600080fd5b506102088782880161015f565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561023657600080fd5b5035919050565b6000806040838503121561025057600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036102bf576102bf61025f565b5060010190565b600082198211156102d9576102d961025f565b50019056fea164736f6c634300080f000a608060405234801561001057600080fd5b506106a5806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063e03110e11161005b578063e03110e114610111578063e159261114610139578063fe4ac08e1461014e578063fef2b4ed146101c357600080fd5b806361238bde146100825780638542cf50146100c05780639a1f5e7f146100fe575b600080fd5b6100ad610090366004610551565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100ee6100ce366004610551565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100b7565b6100ad61010c366004610573565b6101e3565b61012461011f366004610551565b6102b6565b604080519283526020830191909152016100b7565b61014c6101473660046105a5565b6103a7565b005b61014c61015c366004610573565b6000838152600260209081526040808320878452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558684528252808320968352958152858220939093559283529082905291902055565b6100ad6101d1366004610621565b60006020819052908152604090205481565b60006101ee856104b0565b90506101fb836008610669565b8211806102085750602083115b1561023f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845287528083209483529386528382205581815293849052922055919050565b6000828152600260209081526040808320848452909152812054819060ff1661033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461035b816008610669565b610366856020610669565b106103845783610377826008610669565b6103819190610681565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156103c65763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161761054b81600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b92915050565b6000806040838503121561056457600080fd5b50508035926020909101359150565b6000806000806080858703121561058957600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156105ba57600080fd5b83359250602084013567ffffffffffffffff808211156105d957600080fd5b818601915086601f8301126105ed57600080fd5b8135818111156105fc57600080fd5b87602082850101111561060e57600080fd5b6020830194508093505050509250925092565b60006020828403121561063357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561067c5761067c61063a565b500190565b6000828210156106935761069361063a565b50039056fea164736f6c634300080f000a", + Bin: "0x60a060405234801561001057600080fd5b50604051610ad5380380610ad583398101604081905261002f91610090565b608081905260405161004090610083565b604051809103906000f08015801561005c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100a9565b6106c58061041083390190565b6000602082840312156100a257600080fd5b5051919050565b60805161034d6100c3600039600060ad015261034d6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61009861009336600461020a565b6100a6565b60405190815260200161007c565b60008060007f000000000000000000000000000000000000000000000000000000000000000087876040516100dc929190610276565b60405180910390200361010057600091506100f986880188610286565b905061011f565b61010c8688018861029f565b90925090508161011b816102f0565b9250505b8161012b826001610328565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017979650505050505050565b60008083601f8401126101d357600080fd5b50813567ffffffffffffffff8111156101eb57600080fd5b60208301915083602082850101111561020357600080fd5b9250929050565b6000806000806040858703121561022057600080fd5b843567ffffffffffffffff8082111561023857600080fd5b610244888389016101c1565b9096509450602087013591508082111561025d57600080fd5b5061026a878288016101c1565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561029857600080fd5b5035919050565b600080604083850312156102b257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610321576103216102c1565b5060010190565b6000821982111561033b5761033b6102c1565b50019056fea164736f6c634300080f000a608060405234801561001057600080fd5b506106a5806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063e03110e11161005b578063e03110e114610111578063e159261114610139578063fe4ac08e1461014e578063fef2b4ed146101c357600080fd5b806361238bde146100825780638542cf50146100c05780639a1f5e7f146100fe575b600080fd5b6100ad610090366004610551565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100ee6100ce366004610551565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100b7565b6100ad61010c366004610573565b6101e3565b61012461011f366004610551565b6102b6565b604080519283526020830191909152016100b7565b61014c6101473660046105a5565b6103a7565b005b61014c61015c366004610573565b6000838152600260209081526040808320878452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558684528252808320968352958152858220939093559283529082905291902055565b6100ad6101d1366004610621565b60006020819052908152604090205481565b60006101ee856104b0565b90506101fb836008610669565b8211806102085750602083115b1561023f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845287528083209483529386528382205581815293849052922055919050565b6000828152600260209081526040808320848452909152812054819060ff1661033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461035b816008610669565b610366856020610669565b106103845783610377826008610669565b6103819190610681565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156103c65763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161761054b81600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b92915050565b6000806040838503121561056457600080fd5b50508035926020909101359150565b6000806000806080858703121561058957600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156105ba57600080fd5b83359250602084013567ffffffffffffffff808211156105d957600080fd5b818601915086601f8301126105ed57600080fd5b8135818111156105fc57600080fd5b87602082850101111561060e57600080fd5b6020830194508093505050509250925092565b60006020828403121561063357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561067c5761067c61063a565b500190565b6000828210156106935761069361063a565b50039056fea164736f6c634300080f000a", } // AlphabetVMABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/alphabetvm_more.go b/op-bindings/bindings/alphabetvm_more.go index f2f41c77dbeb..c4aea38ea575 100644 --- a/op-bindings/bindings/alphabetvm_more.go +++ b/op-bindings/bindings/alphabetvm_more.go @@ -13,7 +13,7 @@ const AlphabetVMStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\": var AlphabetVMStorageLayout = new(solc.StorageLayout) -var AlphabetVMDeployedBin = "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100986100933660046101a8565b6100a6565b60405190815260200161007c565b60008060007f000000000000000000000000000000000000000000000000000000000000000087876040516100dc929190610214565b60405180910390200361010057600091506100f986880188610224565b905061011f565b61010c8688018861023d565b90925090508161011b8161028e565b9250505b8161012b8260016102c6565b6040805160208101939093528201526060016040516020818303038152906040528051906020012092505050949350505050565b60008083601f84011261017157600080fd5b50813567ffffffffffffffff81111561018957600080fd5b6020830191508360208285010111156101a157600080fd5b9250929050565b600080600080604085870312156101be57600080fd5b843567ffffffffffffffff808211156101d657600080fd5b6101e28883890161015f565b909650945060208701359150808211156101fb57600080fd5b506102088782880161015f565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561023657600080fd5b5035919050565b6000806040838503121561025057600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036102bf576102bf61025f565b5060010190565b600082198211156102d9576102d961025f565b50019056fea164736f6c634300080f000a" +var AlphabetVMDeployedBin = "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61009861009336600461020a565b6100a6565b60405190815260200161007c565b60008060007f000000000000000000000000000000000000000000000000000000000000000087876040516100dc929190610276565b60405180910390200361010057600091506100f986880188610286565b905061011f565b61010c8688018861029f565b90925090508161011b816102f0565b9250505b8161012b826001610328565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017979650505050505050565b60008083601f8401126101d357600080fd5b50813567ffffffffffffffff8111156101eb57600080fd5b60208301915083602082850101111561020357600080fd5b9250929050565b6000806000806040858703121561022057600080fd5b843567ffffffffffffffff8082111561023857600080fd5b610244888389016101c1565b9096509450602087013591508082111561025d57600080fd5b5061026a878288016101c1565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561029857600080fd5b5035919050565b600080604083850312156102b257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610321576103216102c1565b5060010190565b6000821982111561033b5761033b6102c1565b50019056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(AlphabetVMStorageLayoutJSON), AlphabetVMStorageLayout); err != nil { diff --git a/op-bindings/bindings/faultdisputegame.go b/op-bindings/bindings/faultdisputegame.go index e681bb82e298..983c619c60eb 100644 --- a/op-bindings/bindings/faultdisputegame.go +++ b/op-bindings/bindings/faultdisputegame.go @@ -38,7 +38,7 @@ type IFaultDisputeGameOutputProposal struct { // FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract. var FaultDisputeGameMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2oo\",\"type\":\"address\"},{\"internalType\":\"contractBlockOracle\",\"name\":\"_blockOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1HeadTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_ORACLE\",\"outputs\":[{\"internalType\":\"contractBlockOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l1BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposals\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"starting\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"disputed\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d4a38038062002d4a8339810160408190526200003591620000a1565b6000608081905260a052600860c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b2e6200021c600039600081816105220152611ef401526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611c730152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b2e6000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123cf565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612420565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123cf565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124d7565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b6040516102069291906124f1565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461255a565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123cf565b611954565b34801561062957600080fd5b5061063d61063836600461258f565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd3660046125f1565b6119d1565b3480156106ce57600080fd5b506106d7611ef2565b6040516102069392919061267b565b6000805468010000000000000000900460ff16600281111561070a5761070a6123f1565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126a6565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb6123f1565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061270b565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612722565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f4f565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612722565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612722565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261270b565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612751565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c019190612798565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c806123f1565b021790556002811115610c9557610c956123f1565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612004565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612004565b610d587f0000000000000000000000000000000000000000000000000000000000000000612004565b604051602001610d6a939291906127bf565b604051602081830303815290604052905090565b6060610cc660206040612141565b6000805468010000000000000000900460ff166002811115610db057610db06123f1565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612722565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121d816565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612722565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612751565b61108b919061270b565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612722565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612835565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561270b565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae919061289d565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611763919061289d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612929565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961270b565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f56123f1565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612722565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612751565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121e0565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129b0565b865463ffffffff16612286565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129e1565b90505b818989604051611c2b929190612a15565b604051809103902014611c6a576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611cd09493929190612a6e565b6020604051808303816000875af1158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d139190612835565b600284810154929091149250600091611dbe906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e5a886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e649190612aa0565b611e6e9190612798565b67ffffffffffffffff161590508115158103611eb6576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f48610d7e565b9050909192565b600080611fdc847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361204757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612071578061205b81612ac1565b915061206a9050600a83612af9565b915061204b565b60008167ffffffffffffffff81111561208c5761208c61284e565b6040519080825280601f01601f1916602001820160405280156120b6576020820181803683370190505b5090505b8415612139576120cb60018361270b565b91506120d8600a86612b0d565b6120e3906030612751565b60f81b8183815181106120f8576120f8612722565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612132600a86612af9565b94506120ba565b949350505050565b6060600061217884367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612751565b90508267ffffffffffffffff1667ffffffffffffffff81111561219d5761219d61284e565b6040519080825280601f01601f1916602001820160405280156121c7576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061226d837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122a4846fffffffffffffffffffffffffffffffff16612323565b9050600283815481106122b9576122b9612722565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461231c57815460028054909163ffffffff1690811061230757612307612722565b906000526020600020906003020191506122ca565b5092915050565b600081196001830116816123b7827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123e257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061245b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561247c578181015183820152602001612464565b8381111561089f5750506000910152565b600081518084526124a5816020860160208601612461565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124ea602083018461248d565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124ea565b8035801515811461255557600080fd5b919050565b60008060006060848603121561256f57600080fd5b833592506020840135915061258660408501612545565b90509250925092565b6000602082840312156125a157600080fd5b5035919050565b60008083601f8401126125ba57600080fd5b50813567ffffffffffffffff8111156125d257600080fd5b6020830191508360208285010111156125ea57600080fd5b9250929050565b6000806000806000806080878903121561260a57600080fd5b8635955061261a60208801612545565b9450604087013567ffffffffffffffff8082111561263757600080fd5b6126438a838b016125a8565b9096509450606089013591508082111561265c57600080fd5b5061266989828a016125a8565b979a9699509497509295939492505050565b60ff8416815282602082015260606040820152600061269d606083018461248d565b95945050505050565b6000602082840312156126b857600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124ea57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561271d5761271d6126dc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612764576127646126dc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127b3576127b3612769565b92169190910692915050565b600084516127d1818460208901612461565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161280d816001850160208a01612461565b60019201918201528351612828816002840160208801612461565b0160020195945050505050565b60006020828403121561284757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461255557600080fd5b6000606082840312156128af57600080fd5b6040516060810181811067ffffffffffffffff821117156128f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261290c6020840161287d565b602082015261291d6040840161287d565b60408201529392505050565b60006040828403121561293b57600080fd5b6040516040810167ffffffffffffffff8282108183111715612986577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129a357600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129d9576129d96126dc565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a0c57612a0c6126dc565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a82604083018688612a25565b8281036020840152612a95818587612a25565b979650505050505050565b600067ffffffffffffffff838116908316818110156129d9576129d96126dc565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612af257612af26126dc565b5060010190565b600082612b0857612b08612769565b500490565b600082612b1c57612b1c612769565b50069056fea164736f6c634300080f000a", + Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d9238038062002d928339810160408190526200003591620000a1565b6000608081905260a052600860c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b766200021c600039600081816105220152611f3c01526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611cbb0152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b766000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004612417565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612468565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b4366004612417565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b604051610206919061251f565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612539565b34801561043e57600080fd5b50610395610d7e565b6101d16104553660046125a2565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d1610618366004612417565b611954565b34801561062957600080fd5b5061063d6106383660046125d7565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612639565b6119d1565b3480156106ce57600080fd5b506106d7611f3a565b604051610206939291906126c3565b6000805468010000000000000000900460ff16600281111561070a5761070a612439565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ee565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612439565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612753565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61276a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f97565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461276a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612753565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612799565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127e0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612439565b021790556002811115610c9557610c95612439565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061204c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061204c565b610d587f000000000000000000000000000000000000000000000000000000000000000061204c565b604051602001610d6a93929190612807565b604051602081830303815290604052905090565b6060610cc660206040612189565b6000805468010000000000000000900460ff166002811115610db057610db0612439565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61276a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed39190859061222016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612799565b61108b9190612753565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361276a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061287d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612753565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128e5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128e5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612971565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612753565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612439565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161276a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612799565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff16612228565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129f8565b865463ffffffff166122ce565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe9190612a29565b90505b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611c7b8a8a604051611c4f929190612a5d565b60405180910390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b14611cb2576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611d189493929190612ab6565b6020604051808303816000875af1158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b919061287d565b600284810154929091149250600091611e06906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ea2886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611eac9190612ae8565b611eb691906127e0565b67ffffffffffffffff161590508115158103611efe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f90610d7e565b9050909192565b600080612024847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361208f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120b957806120a381612b09565b91506120b29050600a83612b41565b9150612093565b60008167ffffffffffffffff8111156120d4576120d4612896565b6040519080825280601f01601f1916602001820160405280156120fe576020820181803683370190505b5090505b841561218157612113600183612753565b9150612120600a86612b55565b61212b906030612799565b60f81b8183815181106121405761214061276a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061217a600a86612b41565b9450612102565b949350505050565b606060006121c084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612799565b90508267ffffffffffffffff1667ffffffffffffffff8111156121e5576121e5612896565b6040519080825280601f01601f19166020018201604052801561220f576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806122b5837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ec846fffffffffffffffffffffffffffffffff1661236b565b9050600283815481106123015761230161276a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461236457815460028054909163ffffffff1690811061234f5761234f61276a565b90600052602060002090600302019150612312565b5092915050565b600081196001830116816123ff827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806040838503121561242a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106124a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b838110156124c45781810151838201526020016124ac565b8381111561089f5750506000910152565b600081518084526124ed8160208601602086016124a9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061253260208301846124d5565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612532565b8035801515811461259d57600080fd5b919050565b6000806000606084860312156125b757600080fd5b83359250602084013591506125ce6040850161258d565b90509250925092565b6000602082840312156125e957600080fd5b5035919050565b60008083601f84011261260257600080fd5b50813567ffffffffffffffff81111561261a57600080fd5b60208301915083602082850101111561263257600080fd5b9250929050565b6000806000806000806080878903121561265257600080fd5b863595506126626020880161258d565b9450604087013567ffffffffffffffff8082111561267f57600080fd5b61268b8a838b016125f0565b909650945060608901359150808211156126a457600080fd5b506126b189828a016125f0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126e560608301846124d5565b95945050505050565b60006020828403121561270057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461253257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561276557612765612724565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156127ac576127ac612724565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127fb576127fb6127b1565b92169190910692915050565b600084516128198184602089016124a9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612855816001850160208a016124a9565b600192019182015283516128708160028401602088016124a9565b0160020195945050505050565b60006020828403121561288f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461259d57600080fd5b6000606082840312156128f757600080fd5b6040516060810181811067ffffffffffffffff82111715612941577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282518152612954602084016128c5565b6020820152612965604084016128c5565b60408201529392505050565b60006040828403121561298357600080fd5b6040516040810167ffffffffffffffff82821081831117156129ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129eb57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff83811690831681811015612a2157612a21612724565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a5457612a54612724565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612aca604083018688612a6d565b8281036020840152612add818587612a6d565b979650505050505050565b600067ffffffffffffffff83811690831681811015612a2157612a21612724565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3a57612b3a612724565b5060010190565b600082612b5057612b506127b1565b500490565b600082612b6457612b646127b1565b50069056fea164736f6c634300080f000a", } // FaultDisputeGameABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/faultdisputegame_more.go b/op-bindings/bindings/faultdisputegame_more.go index b3c8a58e8c89..8cc45ebb4191 100644 --- a/op-bindings/bindings/faultdisputegame_more.go +++ b/op-bindings/bindings/faultdisputegame_more.go @@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr var FaultDisputeGameStorageLayout = new(solc.StorageLayout) -var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123cf565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612420565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123cf565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124d7565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b6040516102069291906124f1565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461255a565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123cf565b611954565b34801561062957600080fd5b5061063d61063836600461258f565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd3660046125f1565b6119d1565b3480156106ce57600080fd5b506106d7611ef2565b6040516102069392919061267b565b6000805468010000000000000000900460ff16600281111561070a5761070a6123f1565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126a6565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb6123f1565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061270b565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612722565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f4f565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612722565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612722565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261270b565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612751565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c019190612798565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c806123f1565b021790556002811115610c9557610c956123f1565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612004565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612004565b610d587f0000000000000000000000000000000000000000000000000000000000000000612004565b604051602001610d6a939291906127bf565b604051602081830303815290604052905090565b6060610cc660206040612141565b6000805468010000000000000000900460ff166002811115610db057610db06123f1565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612722565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121d816565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612722565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612751565b61108b919061270b565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612722565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612835565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561270b565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae919061289d565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611763919061289d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612929565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961270b565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f56123f1565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612722565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612751565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121e0565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129b0565b865463ffffffff16612286565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129e1565b90505b818989604051611c2b929190612a15565b604051809103902014611c6a576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611cd09493929190612a6e565b6020604051808303816000875af1158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d139190612835565b600284810154929091149250600091611dbe906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e5a886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e649190612aa0565b611e6e9190612798565b67ffffffffffffffff161590508115158103611eb6576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f48610d7e565b9050909192565b600080611fdc847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361204757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612071578061205b81612ac1565b915061206a9050600a83612af9565b915061204b565b60008167ffffffffffffffff81111561208c5761208c61284e565b6040519080825280601f01601f1916602001820160405280156120b6576020820181803683370190505b5090505b8415612139576120cb60018361270b565b91506120d8600a86612b0d565b6120e3906030612751565b60f81b8183815181106120f8576120f8612722565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612132600a86612af9565b94506120ba565b949350505050565b6060600061217884367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612751565b90508267ffffffffffffffff1667ffffffffffffffff81111561219d5761219d61284e565b6040519080825280601f01601f1916602001820160405280156121c7576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061226d837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122a4846fffffffffffffffffffffffffffffffff16612323565b9050600283815481106122b9576122b9612722565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461231c57815460028054909163ffffffff1690811061230757612307612722565b906000526020600020906003020191506122ca565b5092915050565b600081196001830116816123b7827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123e257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061245b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561247c578181015183820152602001612464565b8381111561089f5750506000910152565b600081518084526124a5816020860160208601612461565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124ea602083018461248d565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124ea565b8035801515811461255557600080fd5b919050565b60008060006060848603121561256f57600080fd5b833592506020840135915061258660408501612545565b90509250925092565b6000602082840312156125a157600080fd5b5035919050565b60008083601f8401126125ba57600080fd5b50813567ffffffffffffffff8111156125d257600080fd5b6020830191508360208285010111156125ea57600080fd5b9250929050565b6000806000806000806080878903121561260a57600080fd5b8635955061261a60208801612545565b9450604087013567ffffffffffffffff8082111561263757600080fd5b6126438a838b016125a8565b9096509450606089013591508082111561265c57600080fd5b5061266989828a016125a8565b979a9699509497509295939492505050565b60ff8416815282602082015260606040820152600061269d606083018461248d565b95945050505050565b6000602082840312156126b857600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124ea57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561271d5761271d6126dc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612764576127646126dc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127b3576127b3612769565b92169190910692915050565b600084516127d1818460208901612461565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161280d816001850160208a01612461565b60019201918201528351612828816002840160208801612461565b0160020195945050505050565b60006020828403121561284757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461255557600080fd5b6000606082840312156128af57600080fd5b6040516060810181811067ffffffffffffffff821117156128f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261290c6020840161287d565b602082015261291d6040840161287d565b60408201529392505050565b60006040828403121561293b57600080fd5b6040516040810167ffffffffffffffff8282108183111715612986577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129a357600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129d9576129d96126dc565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a0c57612a0c6126dc565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a82604083018688612a25565b8281036020840152612a95818587612a25565b979650505050505050565b600067ffffffffffffffff838116908316818110156129d9576129d96126dc565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612af257612af26126dc565b5060010190565b600082612b0857612b08612769565b500490565b600082612b1c57612b1c612769565b50069056fea164736f6c634300080f000a" +var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004612417565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612468565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b4366004612417565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b604051610206919061251f565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612539565b34801561043e57600080fd5b50610395610d7e565b6101d16104553660046125a2565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d1610618366004612417565b611954565b34801561062957600080fd5b5061063d6106383660046125d7565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612639565b6119d1565b3480156106ce57600080fd5b506106d7611f3a565b604051610206939291906126c3565b6000805468010000000000000000900460ff16600281111561070a5761070a612439565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ee565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612439565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612753565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61276a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f97565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461276a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612753565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612799565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127e0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612439565b021790556002811115610c9557610c95612439565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061204c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061204c565b610d587f000000000000000000000000000000000000000000000000000000000000000061204c565b604051602001610d6a93929190612807565b604051602081830303815290604052905090565b6060610cc660206040612189565b6000805468010000000000000000900460ff166002811115610db057610db0612439565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61276a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed39190859061222016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612799565b61108b9190612753565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361276a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061287d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612753565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128e5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128e5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612971565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612753565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612439565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161276a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612799565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff16612228565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129f8565b865463ffffffff166122ce565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe9190612a29565b90505b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611c7b8a8a604051611c4f929190612a5d565b60405180910390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b14611cb2576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611d189493929190612ab6565b6020604051808303816000875af1158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b919061287d565b600284810154929091149250600091611e06906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ea2886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611eac9190612ae8565b611eb691906127e0565b67ffffffffffffffff161590508115158103611efe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f90610d7e565b9050909192565b600080612024847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361208f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120b957806120a381612b09565b91506120b29050600a83612b41565b9150612093565b60008167ffffffffffffffff8111156120d4576120d4612896565b6040519080825280601f01601f1916602001820160405280156120fe576020820181803683370190505b5090505b841561218157612113600183612753565b9150612120600a86612b55565b61212b906030612799565b60f81b8183815181106121405761214061276a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061217a600a86612b41565b9450612102565b949350505050565b606060006121c084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612799565b90508267ffffffffffffffff1667ffffffffffffffff8111156121e5576121e5612896565b6040519080825280601f01601f19166020018201604052801561220f576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806122b5837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ec846fffffffffffffffffffffffffffffffff1661236b565b9050600283815481106123015761230161276a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461236457815460028054909163ffffffff1690811061234f5761234f61276a565b90600052602060002090600302019150612312565b5092915050565b600081196001830116816123ff827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806040838503121561242a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106124a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b838110156124c45781810151838201526020016124ac565b8381111561089f5750506000910152565b600081518084526124ed8160208601602086016124a9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061253260208301846124d5565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612532565b8035801515811461259d57600080fd5b919050565b6000806000606084860312156125b757600080fd5b83359250602084013591506125ce6040850161258d565b90509250925092565b6000602082840312156125e957600080fd5b5035919050565b60008083601f84011261260257600080fd5b50813567ffffffffffffffff81111561261a57600080fd5b60208301915083602082850101111561263257600080fd5b9250929050565b6000806000806000806080878903121561265257600080fd5b863595506126626020880161258d565b9450604087013567ffffffffffffffff8082111561267f57600080fd5b61268b8a838b016125f0565b909650945060608901359150808211156126a457600080fd5b506126b189828a016125f0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126e560608301846124d5565b95945050505050565b60006020828403121561270057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461253257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561276557612765612724565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156127ac576127ac612724565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127fb576127fb6127b1565b92169190910692915050565b600084516128198184602089016124a9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612855816001850160208a016124a9565b600192019182015283516128708160028401602088016124a9565b0160020195945050505050565b60006020828403121561288f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461259d57600080fd5b6000606082840312156128f757600080fd5b6040516060810181811067ffffffffffffffff82111715612941577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282518152612954602084016128c5565b6020820152612965604084016128c5565b60408201529392505050565b60006040828403121561298357600080fd5b6040516040810167ffffffffffffffff82821081831117156129ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129eb57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff83811690831681811015612a2157612a21612724565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a5457612a54612724565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612aca604083018688612a6d565b8281036020840152612add818587612a6d565b979650505050505050565b600067ffffffffffffffff83811690831681811015612a2157612a21612724565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3a57612b3a612724565b5060010190565b600082612b5057612b506127b1565b500490565b600082612b6457612b646127b1565b50069056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(FaultDisputeGameStorageLayoutJSON), FaultDisputeGameStorageLayout); err != nil { diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 059174a3efbb..2113e5a9cb3a 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -17,7 +17,7 @@ AttestationStationTest:test_attest_bulk_succeeds() (gas: 703749) AttestationStationTest:test_attest_individual_succeeds() (gas: 632087) AttestationStationTest:test_attest_single_succeeds() (gas: 651325) BlockOracle_Test:test_checkpointAndLoad_succeeds() (gas: 58341) -BlockOracle_Test:test_load_noBlockHash_reverts() (gas: 13659) +BlockOracle_Test:test_load_noBlockHash_reverts() (gas: 12805) Bytes_slice_Test:test_slice_acrossMultipleWords_works() (gas: 9413) Bytes_slice_Test:test_slice_acrossWords_works() (gas: 1430) Bytes_slice_Test:test_slice_fromNonZeroIdx_works() (gas: 17240) @@ -174,7 +174,7 @@ L1CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 12343) L1CrossDomainMessenger_Test:test_replayMessage_withValue_reverts() (gas: 33166) L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 392870) L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1669046) -L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 87904) +L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 87043) L1CrossDomainMessenger_Test:test_xDomainSender_notSet_reverts() (gas: 24253) L1ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 62677) L1ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 37273) @@ -218,7 +218,7 @@ L2CrossDomainMessenger_Test:test_relayMessage_toSystemContract_reverts() (gas: 3 L2CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 11689) L2CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 123768) L2CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 135434) -L2CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 49281) +L2CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 48422) L2CrossDomainMessenger_Test:test_xDomainSender_senderNotSet_reverts() (gas: 10590) L2ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 31428) L2ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 26826) @@ -251,12 +251,12 @@ L2OutputOracle_deleteOutputs_Test:test_deleteL2Outputs_ifNotChallenger_reverts() L2OutputOracle_deleteOutputs_Test:test_deleteL2Outputs_nonExistent_reverts() (gas: 111651) L2OutputOracle_deleteOutputs_Test:test_deleteOutputs_multipleOutputs_succeeds() (gas: 307411) L2OutputOracle_deleteOutputs_Test:test_deleteOutputs_singleOutput_succeeds() (gas: 185564) -L2OutputOracle_getter_Test:test_computeL2Timestamp_succeeds() (gas: 38198) +L2OutputOracle_getter_Test:test_computeL2Timestamp_succeeds() (gas: 37341) L2OutputOracle_getter_Test:test_getL2OutputIndexAfter_multipleOutputsExist_succeeds() (gas: 269700) L2OutputOracle_getter_Test:test_getL2OutputIndexAfter_noOutputsExis_reverts() (gas: 17892) L2OutputOracle_getter_Test:test_getL2OutputIndexAfter_previousBlock_succeeds() (gas: 98188) L2OutputOracle_getter_Test:test_getL2OutputIndexAfter_sameBlock_succeeds() (gas: 98096) -L2OutputOracle_getter_Test:test_getL2Output_succeeds() (gas: 104600) +L2OutputOracle_getter_Test:test_getL2Output_succeeds() (gas: 103735) L2OutputOracle_getter_Test:test_latestBlockNumber_succeeds() (gas: 99129) L2OutputOracle_getter_Test:test_nextBlockNumber_succeeds() (gas: 17447) L2OutputOracle_proposeL2Output_Test:test_proposeL2Output_emptyOutput_reverts() (gas: 28812) @@ -465,7 +465,7 @@ OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreat OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_succeeds() (gas: 75929) OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_succeeds() (gas: 83476) OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_succeeds() (gas: 84069) -OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 127617) +OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 126749) OptimismPortal_Test:test_minimumGasLimit_succeeds() (gas: 17430) OptimismPortal_Test:test_pause_onlyGuardian_reverts() (gas: 24487) OptimismPortal_Test:test_pause_succeeds() (gas: 27344) @@ -525,7 +525,7 @@ PreimageOracle_Test:test_loadKeccak256PreimagePart_outOfBoundsOffset_reverts() ( PreimageOracle_Test:test_loadKeccak256PreimagePart_succeeds() (gas: 76098) PreimageOracle_Test:test_loadLocalData_onePart_succeeds() (gas: 75840) PreimageOracle_Test:test_loadLocalData_outOfBoundsOffset_reverts() (gas: 8803) -ProxyAdmin_Test:test_chugsplashChangeProxyAdmin_succeeds() (gas: 36440) +ProxyAdmin_Test:test_chugsplashChangeProxyAdmin_succeeds() (gas: 35586) ProxyAdmin_Test:test_chugsplashGetProxyAdmin_succeeds() (gas: 15675) ProxyAdmin_Test:test_chugsplashGetProxyImplementation_succeeds() (gas: 51084) ProxyAdmin_Test:test_chugsplashUpgradeAndCall_succeeds() (gas: 82311) @@ -535,7 +535,7 @@ ProxyAdmin_Test:test_delegateResolvedGetProxyAdmin_succeeds() (gas: 17691) ProxyAdmin_Test:test_delegateResolvedGetProxyImplementation_succeeds() (gas: 62028) ProxyAdmin_Test:test_delegateResolvedUpgradeAndCall_succeeds() (gas: 98039) ProxyAdmin_Test:test_delegateResolvedUpgrade_succeeds() (gas: 58482) -ProxyAdmin_Test:test_erc1967ChangeProxyAdmin_succeeds() (gas: 34674) +ProxyAdmin_Test:test_erc1967ChangeProxyAdmin_succeeds() (gas: 33820) ProxyAdmin_Test:test_erc1967GetProxyAdmin_succeeds() (gas: 15616) ProxyAdmin_Test:test_erc1967GetProxyImplementation_succeeds() (gas: 52073) ProxyAdmin_Test:test_erc1967UpgradeAndCall_succeeds() (gas: 78971) @@ -553,9 +553,9 @@ Proxy_Test:test_implementationKey_succeeds() (gas: 20911) Proxy_Test:test_implementation_isZeroAddress_reverts() (gas: 47628) Proxy_Test:test_implementation_zeroAddressCaller_succeeds() (gas: 14752) Proxy_Test:test_ownerKey_succeeds() (gas: 19067) -Proxy_Test:test_ownerProxyCall_notAdmin_succeeds() (gas: 35477) +Proxy_Test:test_ownerProxyCall_notAdmin_succeeds() (gas: 34623) Proxy_Test:test_proxyCallToImp_notAdmin_succeeds() (gas: 30010) -Proxy_Test:test_upgradeToAndCall_functionDoesNotExist_reverts() (gas: 107980) +Proxy_Test:test_upgradeToAndCall_functionDoesNotExist_reverts() (gas: 104567) Proxy_Test:test_upgradeToAndCall_isPayable_succeeds() (gas: 53744) Proxy_Test:test_upgradeToAndCall_succeeds() (gas: 125192) Proxy_Test:test_upgradeTo_clashingFunctionSignatures_succeeds() (gas: 101363) @@ -648,8 +648,8 @@ StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 3307 SystemConfig_Initialize_Test:test_initialize_events_succeeds() (gas: 72060) SystemConfig_Initialize_Test:test_initialize_startBlockOverride_succeeds() (gas: 65242) SystemConfig_Initialize_Test:test_initialize_values_succeeds() (gas: 64946) -SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 57243) -SystemConfig_Initialize_TestFail:test_initialize_startBlock_reverts() (gas: 79938) +SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 55655) +SystemConfig_Initialize_TestFail:test_initialize_startBlock_reverts() (gas: 78352) SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 15607) SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 15577) SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 15676) @@ -660,9 +660,9 @@ SystemConfig_Setters_TestFail:test_setResourceConfig_notOwner_reverts() (gas: 16 SystemConfig_Setters_TestFail:test_setResourceConfig_zeroDenominator_reverts() (gas: 18578) SystemConfig_Setters_TestFail:test_setUnsafeBlockSigner_notOwner_reverts() (gas: 15590) TransactorTest:test_call_succeeds() (gas: 26709) -TransactorTest:test_call_unauthorized_reverts() (gas: 18117) +TransactorTest:test_call_unauthorized_reverts() (gas: 16543) TransactorTest:test_constructor_succeeds() (gas: 9739) TransactorTest:test_delegateCall_succeeds() (gas: 20909) -TransactorTest:test_delegateCall_unauthorized_reverts() (gas: 18124) +TransactorTest:test_delegateCall_unauthorized_reverts() (gas: 16550) TransferOnionTest:test_constructor_succeeds() (gas: 564855) TransferOnionTest:test_unwrap_succeeds() (gas: 724955) \ No newline at end of file From 238521962f5533bdd5e1ea6bd96543a2d26f1838 Mon Sep 17 00:00:00 2001 From: clabby Date: Sun, 3 Sep 2023 14:35:05 -0400 Subject: [PATCH 09/20] Add documentation on the statehash VM status code --- specs/cannon-fault-proof-vm.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/specs/cannon-fault-proof-vm.md b/specs/cannon-fault-proof-vm.md index cfafa302e845..320a484a6d7e 100644 --- a/specs/cannon-fault-proof-vm.md +++ b/specs/cannon-fault-proof-vm.md @@ -6,6 +6,7 @@ - [Overview](#overview) - [State](#state) + - [State Hash](#state-hash) - [Memory](#memory) - [Heap](#heap) - [Delay Slots](#delay-slots) @@ -53,6 +54,34 @@ It consists of the following fields: The state is represented by packing the above fields, in order, into a 226-byte buffer. +### State Hash + +The state hash is computed by hashing the 226-byte state buffer with the Keccak256 hash function +and then setting the high-order byte to the respective VM status. + +The VM status can be derived from the state's `exited` and `exitCode` fields. + +```rs +enum VmStatus { + Valid = 0, + Invalid = 1, + Panic = 2, + Unfinished = 3, +} + +fn vm_status(exit_code: u8, exited: bool) -> u8 { + if exited { + match exit_code { + 0 => VmStatus::Valid, + 1 => VmStatus::Invalid, + _ => VmStatus::Panic, + } + } else { + VmStatus::Unfinished + } +} +``` + ## Memory Memory is represented as a binary merkle tree. From 20d41c4a446c6456db07774b96baa89ccaec9354 Mon Sep 17 00:00:00 2001 From: clabby Date: Sun, 3 Sep 2023 14:57:44 -0400 Subject: [PATCH 10/20] Fix Cannon game e2e tests --- op-e2e/faultproof_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/op-e2e/faultproof_test.go b/op-e2e/faultproof_test.go index d40a7080e53f..a3a07137e4c9 100644 --- a/op-e2e/faultproof_test.go +++ b/op-e2e/faultproof_test.go @@ -64,8 +64,8 @@ func TestMultipleCannonGames(t *testing.T) { challenger.WithAgreeProposedOutput(true), ) - game1 := gameFactory.StartCannonGame(ctx, common.Hash{0xaa}) - game2 := gameFactory.StartCannonGame(ctx, common.Hash{0xbb}) + game1 := gameFactory.StartCannonGame(ctx, common.Hash{0x01, 0xaa}) + game2 := gameFactory.StartCannonGame(ctx, common.Hash{0x01, 0xbb}) game1.WaitForClaimCount(ctx, 2) game2.WaitForClaimCount(ctx, 2) @@ -260,7 +260,7 @@ func TestCannonDisputeGame(t *testing.T) { t.Cleanup(sys.Close) disputeGameFactory := disputegame.NewFactoryHelper(t, ctx, sys.cfg.L1Deployments, l1Client) - game := disputeGameFactory.StartCannonGame(ctx, common.Hash{0xaa}) + game := disputeGameFactory.StartCannonGame(ctx, common.Hash{0x01, 0xaa}) require.NotNil(t, game) game.LogGameData(ctx) @@ -309,7 +309,7 @@ func TestCannonDefendStep(t *testing.T) { t.Cleanup(sys.Close) disputeGameFactory := disputegame.NewFactoryHelper(t, ctx, sys.cfg.L1Deployments, l1Client) - game := disputeGameFactory.StartCannonGame(ctx, common.Hash{0xaa}) + game := disputeGameFactory.StartCannonGame(ctx, common.Hash{0x01, 0xaa}) require.NotNil(t, game) game.LogGameData(ctx) From 07a0d78273431bbb7f799edf52696ef961277d7f Mon Sep 17 00:00:00 2001 From: clabby Date: Sun, 3 Sep 2023 15:07:56 -0400 Subject: [PATCH 11/20] :broom: `MIPS.sol` switch for VM status dedup --- op-bindings/bindings/faultdisputegame.go | 2 +- op-bindings/bindings/mips.go | 2 +- op-bindings/bindings/mips_more.go | 4 +- op-challenger/game/fault/player.go | 4 +- op-challenger/game/fault/player_test.go | 2 + .../game/fault/trace/alphabet/provider.go | 3 +- op-challenger/game/fault/types/types.go | 7 - packages/contracts-bedrock/.gas-snapshot | 142 +++++++++--------- packages/contracts-bedrock/semver-lock.json | 2 +- .../contracts-bedrock/src/cannon/MIPS.sol | 29 ++-- .../src/dispute/FaultDisputeGame.sol | 6 +- 11 files changed, 100 insertions(+), 103 deletions(-) diff --git a/op-bindings/bindings/faultdisputegame.go b/op-bindings/bindings/faultdisputegame.go index 983c619c60eb..212e23f35a89 100644 --- a/op-bindings/bindings/faultdisputegame.go +++ b/op-bindings/bindings/faultdisputegame.go @@ -38,7 +38,7 @@ type IFaultDisputeGameOutputProposal struct { // FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract. var FaultDisputeGameMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2oo\",\"type\":\"address\"},{\"internalType\":\"contractBlockOracle\",\"name\":\"_blockOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1HeadTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_ORACLE\",\"outputs\":[{\"internalType\":\"contractBlockOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l1BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposals\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"starting\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"disputed\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d9238038062002d928339810160408190526200003591620000a1565b6000608081905260a052600860c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b766200021c600039600081816105220152611f3c01526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611cbb0152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b766000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004612417565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612468565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b4366004612417565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b604051610206919061251f565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612539565b34801561043e57600080fd5b50610395610d7e565b6101d16104553660046125a2565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d1610618366004612417565b611954565b34801561062957600080fd5b5061063d6106383660046125d7565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612639565b6119d1565b3480156106ce57600080fd5b506106d7611f3a565b604051610206939291906126c3565b6000805468010000000000000000900460ff16600281111561070a5761070a612439565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ee565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612439565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612753565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61276a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f97565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461276a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612753565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612799565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127e0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612439565b021790556002811115610c9557610c95612439565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061204c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061204c565b610d587f000000000000000000000000000000000000000000000000000000000000000061204c565b604051602001610d6a93929190612807565b604051602081830303815290604052905090565b6060610cc660206040612189565b6000805468010000000000000000900460ff166002811115610db057610db0612439565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61276a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed39190859061222016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612799565b61108b9190612753565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361276a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061287d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612753565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128e5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128e5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612971565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612753565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612439565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161276a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612799565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff16612228565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129f8565b865463ffffffff166122ce565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe9190612a29565b90505b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611c7b8a8a604051611c4f929190612a5d565b60405180910390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b14611cb2576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611d189493929190612ab6565b6020604051808303816000875af1158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b919061287d565b600284810154929091149250600091611e06906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ea2886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611eac9190612ae8565b611eb691906127e0565b67ffffffffffffffff161590508115158103611efe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f90610d7e565b9050909192565b600080612024847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361208f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120b957806120a381612b09565b91506120b29050600a83612b41565b9150612093565b60008167ffffffffffffffff8111156120d4576120d4612896565b6040519080825280601f01601f1916602001820160405280156120fe576020820181803683370190505b5090505b841561218157612113600183612753565b9150612120600a86612b55565b61212b906030612799565b60f81b8183815181106121405761214061276a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061217a600a86612b41565b9450612102565b949350505050565b606060006121c084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612799565b90508267ffffffffffffffff1667ffffffffffffffff8111156121e5576121e5612896565b6040519080825280601f01601f19166020018201604052801561220f576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806122b5837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ec846fffffffffffffffffffffffffffffffff1661236b565b9050600283815481106123015761230161276a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461236457815460028054909163ffffffff1690811061234f5761234f61276a565b90600052602060002090600302019150612312565b5092915050565b600081196001830116816123ff827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806040838503121561242a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106124a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b838110156124c45781810151838201526020016124ac565b8381111561089f5750506000910152565b600081518084526124ed8160208601602086016124a9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061253260208301846124d5565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612532565b8035801515811461259d57600080fd5b919050565b6000806000606084860312156125b757600080fd5b83359250602084013591506125ce6040850161258d565b90509250925092565b6000602082840312156125e957600080fd5b5035919050565b60008083601f84011261260257600080fd5b50813567ffffffffffffffff81111561261a57600080fd5b60208301915083602082850101111561263257600080fd5b9250929050565b6000806000806000806080878903121561265257600080fd5b863595506126626020880161258d565b9450604087013567ffffffffffffffff8082111561267f57600080fd5b61268b8a838b016125f0565b909650945060608901359150808211156126a457600080fd5b506126b189828a016125f0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126e560608301846124d5565b95945050505050565b60006020828403121561270057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461253257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561276557612765612724565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156127ac576127ac612724565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127fb576127fb6127b1565b92169190910692915050565b600084516128198184602089016124a9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612855816001850160208a016124a9565b600192019182015283516128708160028401602088016124a9565b0160020195945050505050565b60006020828403121561288f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461259d57600080fd5b6000606082840312156128f757600080fd5b6040516060810181811067ffffffffffffffff82111715612941577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282518152612954602084016128c5565b6020820152612965604084016128c5565b60408201529392505050565b60006040828403121561298357600080fd5b6040516040810167ffffffffffffffff82821081831117156129ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129eb57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff83811690831681811015612a2157612a21612724565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a5457612a54612724565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612aca604083018688612a6d565b8281036020840152612add818587612a6d565b979650505050505050565b600067ffffffffffffffff83811690831681811015612a2157612a21612724565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3a57612b3a612724565b5060010190565b600082612b5057612b506127b1565b500490565b600082612b6457612b646127b1565b50069056fea164736f6c634300080f000a", + Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d9238038062002d928339810160408190526200003591620000a1565b6000608081905260a052600960c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b766200021c600039600081816105220152611f3c01526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611cbb0152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b766000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004612417565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612468565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b4366004612417565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b604051610206919061251f565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612539565b34801561043e57600080fd5b50610395610d7e565b6101d16104553660046125a2565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d1610618366004612417565b611954565b34801561062957600080fd5b5061063d6106383660046125d7565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612639565b6119d1565b3480156106ce57600080fd5b506106d7611f3a565b604051610206939291906126c3565b6000805468010000000000000000900460ff16600281111561070a5761070a612439565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ee565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612439565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612753565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61276a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f97565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461276a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612753565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612799565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127e0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612439565b021790556002811115610c9557610c95612439565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061204c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061204c565b610d587f000000000000000000000000000000000000000000000000000000000000000061204c565b604051602001610d6a93929190612807565b604051602081830303815290604052905090565b6060610cc660206040612189565b6000805468010000000000000000900460ff166002811115610db057610db0612439565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61276a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed39190859061222016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612799565b61108b9190612753565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361276a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061287d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612753565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128e5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128e5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612971565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612753565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612439565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161276a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612799565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff16612228565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129f8565b865463ffffffff166122ce565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe9190612a29565b90505b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611c7b8a8a604051611c4f929190612a5d565b60405180910390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b14611cb2576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611d189493929190612ab6565b6020604051808303816000875af1158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b919061287d565b600284810154929091149250600091611e06906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ea2886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611eac9190612ae8565b611eb691906127e0565b67ffffffffffffffff161590508115158103611efe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f90610d7e565b9050909192565b600080612024847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361208f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120b957806120a381612b09565b91506120b29050600a83612b41565b9150612093565b60008167ffffffffffffffff8111156120d4576120d4612896565b6040519080825280601f01601f1916602001820160405280156120fe576020820181803683370190505b5090505b841561218157612113600183612753565b9150612120600a86612b55565b61212b906030612799565b60f81b8183815181106121405761214061276a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061217a600a86612b41565b9450612102565b949350505050565b606060006121c084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612799565b90508267ffffffffffffffff1667ffffffffffffffff8111156121e5576121e5612896565b6040519080825280601f01601f19166020018201604052801561220f576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806122b5837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ec846fffffffffffffffffffffffffffffffff1661236b565b9050600283815481106123015761230161276a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461236457815460028054909163ffffffff1690811061234f5761234f61276a565b90600052602060002090600302019150612312565b5092915050565b600081196001830116816123ff827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806040838503121561242a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106124a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b838110156124c45781810151838201526020016124ac565b8381111561089f5750506000910152565b600081518084526124ed8160208601602086016124a9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061253260208301846124d5565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612532565b8035801515811461259d57600080fd5b919050565b6000806000606084860312156125b757600080fd5b83359250602084013591506125ce6040850161258d565b90509250925092565b6000602082840312156125e957600080fd5b5035919050565b60008083601f84011261260257600080fd5b50813567ffffffffffffffff81111561261a57600080fd5b60208301915083602082850101111561263257600080fd5b9250929050565b6000806000806000806080878903121561265257600080fd5b863595506126626020880161258d565b9450604087013567ffffffffffffffff8082111561267f57600080fd5b61268b8a838b016125f0565b909650945060608901359150808211156126a457600080fd5b506126b189828a016125f0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126e560608301846124d5565b95945050505050565b60006020828403121561270057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461253257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561276557612765612724565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156127ac576127ac612724565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127fb576127fb6127b1565b92169190910692915050565b600084516128198184602089016124a9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612855816001850160208a016124a9565b600192019182015283516128708160028401602088016124a9565b0160020195945050505050565b60006020828403121561288f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461259d57600080fd5b6000606082840312156128f757600080fd5b6040516060810181811067ffffffffffffffff82111715612941577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282518152612954602084016128c5565b6020820152612965604084016128c5565b60408201529392505050565b60006040828403121561298357600080fd5b6040516040810167ffffffffffffffff82821081831117156129ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129eb57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff83811690831681811015612a2157612a21612724565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a5457612a54612724565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612aca604083018688612a6d565b8281036020840152612add818587612a6d565b979650505050505050565b600067ffffffffffffffff83811690831681811015612a2157612a21612724565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3a57612b3a612724565b5060010190565b600082612b5057612b506127b1565b500490565b600082612b6457612b646127b1565b50069056fea164736f6c634300080f000a", } // FaultDisputeGameABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/mips.go b/op-bindings/bindings/mips.go index 6a2620684114..cba792eb6291 100644 --- a/op-bindings/bindings/mips.go +++ b/op-bindings/bindings/mips.go @@ -31,7 +31,7 @@ var ( // MIPSMetaData contains all meta data concerning the MIPS contract. var MIPSMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BRK_START\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"oracle_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b50604051611ecb380380611ecb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051611e3a61009160003960008181608501526116000152611e3a6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d3f565b6100d0565b604051908152602001610062565b60006100da611c6c565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff1690526060810151600090610203908261074e565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff168261080a565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611dab565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611dab565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff166010610904565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611dab565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f685878487610977565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff166010610904565b9095019463fffffffc861661043a81600161074e565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b87565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b8961080a565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a161561130b565b8063ffffffff16600b03610546576104f3858963ffffffff8a16151561130b565b8063ffffffff16600c0361055c576104f36113f1565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f381898988611925565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611dab565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b1f565b6106038583600161130b565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156106b857601c8601518452602090950194600490930192600101610694565b506000835283830384a061070a565b600081600181146106db5760039150610703565b8380156106f357600181146106fc5760029250610701565b60009250610701565b600192505b505b5092915050565b61071482826106c7565b928490039093207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89290921b91909117949350505050565b60008061075a83611bc3565b9050600384161561076a57600080fd5b6020810190358460051c8160005b601b8110156107d05760208501943583821c60011680156107a057600181146107b5576107c6565b600084815260208390526040902093506107c6565b600082815260208590526040902093505b5050600101610778565b5060805191508181146107eb57630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610814611c6c565b60809050806060015160040163ffffffff16816080015163ffffffff161461089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108f357806008018261016001518663ffffffff16602081106108e2576108e2611dab565b63ffffffff90921660209290920201525b6108fb610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610961576000610963565b815b90861663ffffffff16179250505092915050565b6000610981611c6c565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f740000000000000000000000006044820152606401610894565b8663ffffffff1660041480610a2257508663ffffffff166005145b15610a9e5760008261016001518663ffffffff1660208110610a4657610a46611dab565b602002015190508063ffffffff168563ffffffff16148015610a6e57508763ffffffff166004145b80610a9657508063ffffffff168563ffffffff1614158015610a9657508763ffffffff166005145b915050610b1b565b8663ffffffff16600603610abb5760008460030b13159050610b1b565b8663ffffffff16600703610ad75760008460030b139050610b1b565b8663ffffffff16600103610b1b57601f601087901c166000819003610b005760008560030b1291505b8063ffffffff16600103610b195760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b61576002610b468861ffff166010610904565b63ffffffff90811690911b8201600401166080840152610b73565b60808301805160040163ffffffff1690525b610b7b610619565b98975050505050505050565b6000603f601a86901c16801580610bb6575060088163ffffffff1610158015610bb65750600f8163ffffffff16105b1561100c57603f86168160088114610bfd5760098114610c0657600a8114610c0f57600b8114610c1857600c8114610c2157600d8114610c2a57600e8114610c3357610c38565b60209150610c38565b60219150610c38565b602a9150610c38565b602b9150610c38565b60249150610c38565b60259150610c38565b602691505b508063ffffffff16600003610c5f5750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c855750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610cbb57601f600688901c16610cb163ffffffff8716821c6020839003610904565b9350505050610611565b8063ffffffff16600403610cdd5750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610cff5750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d3257610d298663ffffffff168663ffffffff16901c87602003610904565b92505050610611565b8063ffffffff16600803610d4a578592505050610611565b8063ffffffff16600903610d62578592505050610611565b8063ffffffff16600a03610d7a578592505050610611565b8063ffffffff16600b03610d92578592505050610611565b8063ffffffff16600c03610daa578592505050610611565b8063ffffffff16600f03610dc2578592505050610611565b8063ffffffff16601003610dda578592505050610611565b8063ffffffff16601103610df2578592505050610611565b8063ffffffff16601203610e0a578592505050610611565b8063ffffffff16601303610e22578592505050610611565b8063ffffffff16601803610e3a578592505050610611565b8063ffffffff16601903610e52578592505050610611565b8063ffffffff16601a03610e6a578592505050610611565b8063ffffffff16601b03610e82578592505050610611565b8063ffffffff16602003610e9b57505050828201610611565b8063ffffffff16602103610eb457505050828201610611565b8063ffffffff16602203610ecd57505050818303610611565b8063ffffffff16602303610ee657505050818303610611565b8063ffffffff16602403610eff57505050828216610611565b8063ffffffff16602503610f1857505050828217610611565b8063ffffffff16602603610f3157505050828218610611565b8063ffffffff16602703610f4b5750505082821719610611565b8063ffffffff16602a03610f7c578460030b8660030b12610f6d576000610f70565b60015b60ff1692505050610611565b8063ffffffff16602b03610fa4578463ffffffff168663ffffffff1610610f6d576000610f70565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610894565b50610fa4565b8063ffffffff16601c0361109057603f8616600281900361103257505050828202610611565b8063ffffffff166020148061104d57508063ffffffff166021145b15611006578063ffffffff16602003611064579419945b60005b6380000000871615611086576401fffffffe600197881b169601611067565b9250610611915050565b8063ffffffff16600f036110b257505065ffffffff0000601083901b16610611565b8063ffffffff166020036110e6576101d38560031660080260180363ffffffff168463ffffffff16901c60ff166008610904565b8063ffffffff1660210361111b576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff166010610904565b8063ffffffff1660220361114a57505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111615782915050610611565b8063ffffffff16602403611193578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111c6578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111f857505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361122e57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361126557505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361129457505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112ab5783915050610611565b8063ffffffff16602e036112dd57505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112f45782915050610611565b8063ffffffff16603803610fa45783915050610611565b6000611315611c6c565b506080602063ffffffff861610611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610894565b63ffffffff85161580159061139a5750825b156113ce57838161016001518663ffffffff16602081106113bd576113bd611dab565b63ffffffff90921660209290920201525b60808101805163ffffffff808216606085015260049091011690526108fb610619565b60006113fb611c6c565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036114755781610fff81161561144457610fff811661100003015b8363ffffffff1660000361146b5760e08801805163ffffffff83820116909152955061146f565b8395505b506118e4565b8563ffffffff16610fcd0361149057634000000094506118e4565b8563ffffffff16611018036114a857600194506118e4565b8563ffffffff16611096036114dd57600161012088015260ff83166101008801526114d1610619565b97505050505050505090565b8563ffffffff16610fa3036117475763ffffffff8316156118e4577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117015760006115388363fffffffc16600161074e565b60208901519091508060001a6001036115a5576115a281600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa158015611646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166a9190611dda565b91509150600386168060040382811015611682578092505b508186101561168f578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116e68663fffffffc16600186611b1f565b60408b018051820163ffffffff169052975061174292505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff841601611736578094506118e4565b63ffffffff9450600993505b6118e4565b8563ffffffff16610fa4036118385763ffffffff831660011480611771575063ffffffff83166002145b80611782575063ffffffff83166004145b1561178f578094506118e4565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016117365760006117cf8363fffffffc16600161074e565b602089015190915060038416600403838110156117ea578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118e4565b8563ffffffff16610fd7036118e4578163ffffffff166003036118d85763ffffffff8316158061186e575063ffffffff83166005145b8061187f575063ffffffff83166003145b1561188d57600094506118e4565b63ffffffff8316600114806118a8575063ffffffff83166002145b806118b9575063ffffffff83166006145b806118ca575063ffffffff83166004145b1561173657600194506118e4565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114d1610619565b600061192f611c6c565b506080600063ffffffff871660100361194d575060c0810151611ab6565b8663ffffffff1660110361196c5763ffffffff861660c0830152611ab6565b8663ffffffff16601203611985575060a0810151611ab6565b8663ffffffff166013036119a45763ffffffff861660a0830152611ab6565b8663ffffffff166018036119d85763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611ab6565b8663ffffffff16601903611a095763ffffffff86811681871602602081901c821660c08501521660a0830152611ab6565b8663ffffffff16601a03611a5f578460030b8660030b81611a2c57611a2c611dfe565b0763ffffffff1660c0830152600385810b9087900b81611a4e57611a4e611dfe565b0563ffffffff1660a0830152611ab6565b8663ffffffff16601b03611ab6578463ffffffff168663ffffffff1681611a8857611a88611dfe565b0663ffffffff90811660c084015285811690871681611aa957611aa9611dfe565b0463ffffffff1660a08301525b63ffffffff841615611af157808261016001518563ffffffff1660208110611ae057611ae0611dab565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611b14610619565b979650505050505050565b6000611b2a83611bc3565b90506003841615611b3a57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611bb85760208401933582821c6001168015611b885760018114611b9d57611bae565b60008581526020839052604090209450611bae565b600082815260208690526040902094505b5050600101611b60565b505060805250505050565b60ff811661038002610184810190369061050401811015611c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610894565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cd2611cd7565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611d0857600080fd5b50813567ffffffffffffffff811115611d2057600080fd5b602083019150836020828501011115611d3857600080fd5b9250929050565b60008060008060408587031215611d5557600080fd5b843567ffffffffffffffff80821115611d6d57600080fd5b611d7988838901611cf6565b90965094506020870135915080821115611d9257600080fd5b50611d9f87828801611cf6565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611ded57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a", + Bin: "0x60a060405234801561001057600080fd5b50604051611eb2380380611eb283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051611e2161009160003960008181608501526115e70152611e216000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d26565b6100d0565b604051908152602001610062565b60006100da611c53565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff16905260608101516000906102039082610735565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff16826107f1565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611d92565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611d92565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff1660106108eb565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611d92565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f68587848761095e565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff1660106108eb565b9095019463fffffffc861661043a816001610735565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b6e565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b896107f1565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a16156112f2565b8063ffffffff16600b03610546576104f3858963ffffffff8a1615156112f2565b8063ffffffff16600c0361055c576104f36113d8565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f38189898861190c565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611d92565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b06565b610603858360016112f2565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156106b857601c8601518452602090950194600490930192600101610694565b506000835283830384a06000945080600181146106d85760039550610700565b8280156106f057600181146106f957600296506106fe565b600096506106fe565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061074183611baa565b9050600384161561075157600080fd5b6020810190358460051c8160005b601b8110156107b75760208501943583821c6001168015610787576001811461079c576107ad565b600084815260208390526040902093506107ad565b600082815260208590526040902093505b505060010161075f565b5060805191508181146107d257630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b60006107fb611c53565b60809050806060015160040163ffffffff16816080015163ffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108da57806008018261016001518663ffffffff16602081106108c9576108c9611d92565b63ffffffff90921660209290920201525b6108e2610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b018261094857600061094a565b815b90861663ffffffff16179250505092915050565b6000610968611c53565b608090506000816060015160040163ffffffff16826080015163ffffffff16146109ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f74000000000000000000000000604482015260640161087b565b8663ffffffff1660041480610a0957508663ffffffff166005145b15610a855760008261016001518663ffffffff1660208110610a2d57610a2d611d92565b602002015190508063ffffffff168563ffffffff16148015610a5557508763ffffffff166004145b80610a7d57508063ffffffff168563ffffffff1614158015610a7d57508763ffffffff166005145b915050610b02565b8663ffffffff16600603610aa25760008460030b13159050610b02565b8663ffffffff16600703610abe5760008460030b139050610b02565b8663ffffffff16600103610b0257601f601087901c166000819003610ae75760008560030b1291505b8063ffffffff16600103610b005760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b48576002610b2d8861ffff1660106108eb565b63ffffffff90811690911b8201600401166080840152610b5a565b60808301805160040163ffffffff1690525b610b62610619565b98975050505050505050565b6000603f601a86901c16801580610b9d575060088163ffffffff1610158015610b9d5750600f8163ffffffff16105b15610ff357603f86168160088114610be45760098114610bed57600a8114610bf657600b8114610bff57600c8114610c0857600d8114610c1157600e8114610c1a57610c1f565b60209150610c1f565b60219150610c1f565b602a9150610c1f565b602b9150610c1f565b60249150610c1f565b60259150610c1f565b602691505b508063ffffffff16600003610c465750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c6c5750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610ca257601f600688901c16610c9863ffffffff8716821c60208390036108eb565b9350505050610611565b8063ffffffff16600403610cc45750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610ce65750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d1957610d108663ffffffff168663ffffffff16901c876020036108eb565b92505050610611565b8063ffffffff16600803610d31578592505050610611565b8063ffffffff16600903610d49578592505050610611565b8063ffffffff16600a03610d61578592505050610611565b8063ffffffff16600b03610d79578592505050610611565b8063ffffffff16600c03610d91578592505050610611565b8063ffffffff16600f03610da9578592505050610611565b8063ffffffff16601003610dc1578592505050610611565b8063ffffffff16601103610dd9578592505050610611565b8063ffffffff16601203610df1578592505050610611565b8063ffffffff16601303610e09578592505050610611565b8063ffffffff16601803610e21578592505050610611565b8063ffffffff16601903610e39578592505050610611565b8063ffffffff16601a03610e51578592505050610611565b8063ffffffff16601b03610e69578592505050610611565b8063ffffffff16602003610e8257505050828201610611565b8063ffffffff16602103610e9b57505050828201610611565b8063ffffffff16602203610eb457505050818303610611565b8063ffffffff16602303610ecd57505050818303610611565b8063ffffffff16602403610ee657505050828216610611565b8063ffffffff16602503610eff57505050828217610611565b8063ffffffff16602603610f1857505050828218610611565b8063ffffffff16602703610f325750505082821719610611565b8063ffffffff16602a03610f63578460030b8660030b12610f54576000610f57565b60015b60ff1692505050610611565b8063ffffffff16602b03610f8b578463ffffffff168663ffffffff1610610f54576000610f57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e00000000000000000000000000604482015260640161087b565b50610f8b565b8063ffffffff16601c0361107757603f8616600281900361101957505050828202610611565b8063ffffffff166020148061103457508063ffffffff166021145b15610fed578063ffffffff1660200361104b579419945b60005b638000000087161561106d576401fffffffe600197881b16960161104e565b9250610611915050565b8063ffffffff16600f0361109957505065ffffffff0000601083901b16610611565b8063ffffffff166020036110cd576101d38560031660080260180363ffffffff168463ffffffff16901c60ff1660086108eb565b8063ffffffff16602103611102576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff1660106108eb565b8063ffffffff1660220361113157505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111485782915050610611565b8063ffffffff1660240361117a578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111ad578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111df57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361121557505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361124c57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361127b57505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112925783915050610611565b8063ffffffff16602e036112c457505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112db5782915050610611565b8063ffffffff16603803610f8b5783915050610611565b60006112fc611c53565b506080602063ffffffff86161061136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c6964207265676973746572000000000000000000000000000000000000604482015260640161087b565b63ffffffff8516158015906113815750825b156113b557838161016001518663ffffffff16602081106113a4576113a4611d92565b63ffffffff90921660209290920201525b60808101805163ffffffff808216606085015260049091011690526108e2610619565b60006113e2611c53565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa0361145c5781610fff81161561142b57610fff811661100003015b8363ffffffff166000036114525760e08801805163ffffffff838201169091529550611456565b8395505b506118cb565b8563ffffffff16610fcd0361147757634000000094506118cb565b8563ffffffff166110180361148f57600194506118cb565b8563ffffffff16611096036114c457600161012088015260ff83166101008801526114b8610619565b97505050505050505090565b8563ffffffff16610fa30361172e5763ffffffff8316156118cb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016116e857600061151f8363fffffffc166001610735565b60208901519091508060001a60010361158c5761158981600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa15801561162d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116519190611dc1565b91509150600386168060040382811015611669578092505b5081861015611676578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116cd8663fffffffc16600186611b06565b60408b018051820163ffffffff169052975061172992505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161171d578094506118cb565b63ffffffff9450600993505b6118cb565b8563ffffffff16610fa40361181f5763ffffffff831660011480611758575063ffffffff83166002145b80611769575063ffffffff83166004145b15611776578094506118cb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff84160161171d5760006117b68363fffffffc166001610735565b602089015190915060038416600403838110156117d1578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118cb565b8563ffffffff16610fd7036118cb578163ffffffff166003036118bf5763ffffffff83161580611855575063ffffffff83166005145b80611866575063ffffffff83166003145b1561187457600094506118cb565b63ffffffff83166001148061188f575063ffffffff83166002145b806118a0575063ffffffff83166006145b806118b1575063ffffffff83166004145b1561171d57600194506118cb565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114b8610619565b6000611916611c53565b506080600063ffffffff8716601003611934575060c0810151611a9d565b8663ffffffff166011036119535763ffffffff861660c0830152611a9d565b8663ffffffff1660120361196c575060a0810151611a9d565b8663ffffffff1660130361198b5763ffffffff861660a0830152611a9d565b8663ffffffff166018036119bf5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611a9d565b8663ffffffff166019036119f05763ffffffff86811681871602602081901c821660c08501521660a0830152611a9d565b8663ffffffff16601a03611a46578460030b8660030b81611a1357611a13611de5565b0763ffffffff1660c0830152600385810b9087900b81611a3557611a35611de5565b0563ffffffff1660a0830152611a9d565b8663ffffffff16601b03611a9d578463ffffffff168663ffffffff1681611a6f57611a6f611de5565b0663ffffffff90811660c084015285811690871681611a9057611a90611de5565b0463ffffffff1660a08301525b63ffffffff841615611ad857808261016001518563ffffffff1660208110611ac757611ac7611d92565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611afb610619565b979650505050505050565b6000611b1183611baa565b90506003841615611b2157600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611b9f5760208401933582821c6001168015611b6f5760018114611b8457611b95565b60008581526020839052604090209450611b95565b600082815260208690526040902094505b5050600101611b47565b505060805250505050565b60ff811661038002610184810190369061050401811015611c4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f6174610000000000000000000000000000000000000000000000000000000000606482015260840161087b565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cb9611cbe565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611cef57600080fd5b50813567ffffffffffffffff811115611d0757600080fd5b602083019150836020828501011115611d1f57600080fd5b9250929050565b60008060008060408587031215611d3c57600080fd5b843567ffffffffffffffff80821115611d5457600080fd5b611d6088838901611cdd565b90965094506020870135915080821115611d7957600080fd5b50611d8687828801611cdd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611dd457600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a", } // MIPSABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/mips_more.go b/op-bindings/bindings/mips_more.go index 30db61b75512..4e6443fb6ffc 100644 --- a/op-bindings/bindings/mips_more.go +++ b/op-bindings/bindings/mips_more.go @@ -13,9 +13,9 @@ const MIPSStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" var MIPSStorageLayout = new(solc.StorageLayout) -var MIPSDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d3f565b6100d0565b604051908152602001610062565b60006100da611c6c565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff1690526060810151600090610203908261074e565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff168261080a565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611dab565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611dab565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff166010610904565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611dab565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f685878487610977565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff166010610904565b9095019463fffffffc861661043a81600161074e565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b87565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b8961080a565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a161561130b565b8063ffffffff16600b03610546576104f3858963ffffffff8a16151561130b565b8063ffffffff16600c0361055c576104f36113f1565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f381898988611925565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611dab565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b1f565b6106038583600161130b565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156106b857601c8601518452602090950194600490930192600101610694565b506000835283830384a061070a565b600081600181146106db5760039150610703565b8380156106f357600181146106fc5760029250610701565b60009250610701565b600192505b505b5092915050565b61071482826106c7565b928490039093207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89290921b91909117949350505050565b60008061075a83611bc3565b9050600384161561076a57600080fd5b6020810190358460051c8160005b601b8110156107d05760208501943583821c60011680156107a057600181146107b5576107c6565b600084815260208390526040902093506107c6565b600082815260208590526040902093505b5050600101610778565b5060805191508181146107eb57630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610814611c6c565b60809050806060015160040163ffffffff16816080015163ffffffff161461089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108f357806008018261016001518663ffffffff16602081106108e2576108e2611dab565b63ffffffff90921660209290920201525b6108fb610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610961576000610963565b815b90861663ffffffff16179250505092915050565b6000610981611c6c565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f740000000000000000000000006044820152606401610894565b8663ffffffff1660041480610a2257508663ffffffff166005145b15610a9e5760008261016001518663ffffffff1660208110610a4657610a46611dab565b602002015190508063ffffffff168563ffffffff16148015610a6e57508763ffffffff166004145b80610a9657508063ffffffff168563ffffffff1614158015610a9657508763ffffffff166005145b915050610b1b565b8663ffffffff16600603610abb5760008460030b13159050610b1b565b8663ffffffff16600703610ad75760008460030b139050610b1b565b8663ffffffff16600103610b1b57601f601087901c166000819003610b005760008560030b1291505b8063ffffffff16600103610b195760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b61576002610b468861ffff166010610904565b63ffffffff90811690911b8201600401166080840152610b73565b60808301805160040163ffffffff1690525b610b7b610619565b98975050505050505050565b6000603f601a86901c16801580610bb6575060088163ffffffff1610158015610bb65750600f8163ffffffff16105b1561100c57603f86168160088114610bfd5760098114610c0657600a8114610c0f57600b8114610c1857600c8114610c2157600d8114610c2a57600e8114610c3357610c38565b60209150610c38565b60219150610c38565b602a9150610c38565b602b9150610c38565b60249150610c38565b60259150610c38565b602691505b508063ffffffff16600003610c5f5750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c855750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610cbb57601f600688901c16610cb163ffffffff8716821c6020839003610904565b9350505050610611565b8063ffffffff16600403610cdd5750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610cff5750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d3257610d298663ffffffff168663ffffffff16901c87602003610904565b92505050610611565b8063ffffffff16600803610d4a578592505050610611565b8063ffffffff16600903610d62578592505050610611565b8063ffffffff16600a03610d7a578592505050610611565b8063ffffffff16600b03610d92578592505050610611565b8063ffffffff16600c03610daa578592505050610611565b8063ffffffff16600f03610dc2578592505050610611565b8063ffffffff16601003610dda578592505050610611565b8063ffffffff16601103610df2578592505050610611565b8063ffffffff16601203610e0a578592505050610611565b8063ffffffff16601303610e22578592505050610611565b8063ffffffff16601803610e3a578592505050610611565b8063ffffffff16601903610e52578592505050610611565b8063ffffffff16601a03610e6a578592505050610611565b8063ffffffff16601b03610e82578592505050610611565b8063ffffffff16602003610e9b57505050828201610611565b8063ffffffff16602103610eb457505050828201610611565b8063ffffffff16602203610ecd57505050818303610611565b8063ffffffff16602303610ee657505050818303610611565b8063ffffffff16602403610eff57505050828216610611565b8063ffffffff16602503610f1857505050828217610611565b8063ffffffff16602603610f3157505050828218610611565b8063ffffffff16602703610f4b5750505082821719610611565b8063ffffffff16602a03610f7c578460030b8660030b12610f6d576000610f70565b60015b60ff1692505050610611565b8063ffffffff16602b03610fa4578463ffffffff168663ffffffff1610610f6d576000610f70565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610894565b50610fa4565b8063ffffffff16601c0361109057603f8616600281900361103257505050828202610611565b8063ffffffff166020148061104d57508063ffffffff166021145b15611006578063ffffffff16602003611064579419945b60005b6380000000871615611086576401fffffffe600197881b169601611067565b9250610611915050565b8063ffffffff16600f036110b257505065ffffffff0000601083901b16610611565b8063ffffffff166020036110e6576101d38560031660080260180363ffffffff168463ffffffff16901c60ff166008610904565b8063ffffffff1660210361111b576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff166010610904565b8063ffffffff1660220361114a57505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111615782915050610611565b8063ffffffff16602403611193578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111c6578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111f857505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361122e57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361126557505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361129457505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112ab5783915050610611565b8063ffffffff16602e036112dd57505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112f45782915050610611565b8063ffffffff16603803610fa45783915050610611565b6000611315611c6c565b506080602063ffffffff861610611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610894565b63ffffffff85161580159061139a5750825b156113ce57838161016001518663ffffffff16602081106113bd576113bd611dab565b63ffffffff90921660209290920201525b60808101805163ffffffff808216606085015260049091011690526108fb610619565b60006113fb611c6c565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036114755781610fff81161561144457610fff811661100003015b8363ffffffff1660000361146b5760e08801805163ffffffff83820116909152955061146f565b8395505b506118e4565b8563ffffffff16610fcd0361149057634000000094506118e4565b8563ffffffff16611018036114a857600194506118e4565b8563ffffffff16611096036114dd57600161012088015260ff83166101008801526114d1610619565b97505050505050505090565b8563ffffffff16610fa3036117475763ffffffff8316156118e4577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117015760006115388363fffffffc16600161074e565b60208901519091508060001a6001036115a5576115a281600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa158015611646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166a9190611dda565b91509150600386168060040382811015611682578092505b508186101561168f578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116e68663fffffffc16600186611b1f565b60408b018051820163ffffffff169052975061174292505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff841601611736578094506118e4565b63ffffffff9450600993505b6118e4565b8563ffffffff16610fa4036118385763ffffffff831660011480611771575063ffffffff83166002145b80611782575063ffffffff83166004145b1561178f578094506118e4565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016117365760006117cf8363fffffffc16600161074e565b602089015190915060038416600403838110156117ea578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118e4565b8563ffffffff16610fd7036118e4578163ffffffff166003036118d85763ffffffff8316158061186e575063ffffffff83166005145b8061187f575063ffffffff83166003145b1561188d57600094506118e4565b63ffffffff8316600114806118a8575063ffffffff83166002145b806118b9575063ffffffff83166006145b806118ca575063ffffffff83166004145b1561173657600194506118e4565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114d1610619565b600061192f611c6c565b506080600063ffffffff871660100361194d575060c0810151611ab6565b8663ffffffff1660110361196c5763ffffffff861660c0830152611ab6565b8663ffffffff16601203611985575060a0810151611ab6565b8663ffffffff166013036119a45763ffffffff861660a0830152611ab6565b8663ffffffff166018036119d85763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611ab6565b8663ffffffff16601903611a095763ffffffff86811681871602602081901c821660c08501521660a0830152611ab6565b8663ffffffff16601a03611a5f578460030b8660030b81611a2c57611a2c611dfe565b0763ffffffff1660c0830152600385810b9087900b81611a4e57611a4e611dfe565b0563ffffffff1660a0830152611ab6565b8663ffffffff16601b03611ab6578463ffffffff168663ffffffff1681611a8857611a88611dfe565b0663ffffffff90811660c084015285811690871681611aa957611aa9611dfe565b0463ffffffff1660a08301525b63ffffffff841615611af157808261016001518563ffffffff1660208110611ae057611ae0611dab565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611b14610619565b979650505050505050565b6000611b2a83611bc3565b90506003841615611b3a57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611bb85760208401933582821c6001168015611b885760018114611b9d57611bae565b60008581526020839052604090209450611bae565b600082815260208690526040902094505b5050600101611b60565b505060805250505050565b60ff811661038002610184810190369061050401811015611c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610894565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cd2611cd7565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611d0857600080fd5b50813567ffffffffffffffff811115611d2057600080fd5b602083019150836020828501011115611d3857600080fd5b9250929050565b60008060008060408587031215611d5557600080fd5b843567ffffffffffffffff80821115611d6d57600080fd5b611d7988838901611cf6565b90965094506020870135915080821115611d9257600080fd5b50611d9f87828801611cf6565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611ded57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a" +var MIPSDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d26565b6100d0565b604051908152602001610062565b60006100da611c53565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff16905260608101516000906102039082610735565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff16826107f1565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611d92565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611d92565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff1660106108eb565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611d92565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f68587848761095e565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff1660106108eb565b9095019463fffffffc861661043a816001610735565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b6e565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b896107f1565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a16156112f2565b8063ffffffff16600b03610546576104f3858963ffffffff8a1615156112f2565b8063ffffffff16600c0361055c576104f36113d8565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f38189898861190c565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611d92565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b06565b610603858360016112f2565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156106b857601c8601518452602090950194600490930192600101610694565b506000835283830384a06000945080600181146106d85760039550610700565b8280156106f057600181146106f957600296506106fe565b600096506106fe565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061074183611baa565b9050600384161561075157600080fd5b6020810190358460051c8160005b601b8110156107b75760208501943583821c6001168015610787576001811461079c576107ad565b600084815260208390526040902093506107ad565b600082815260208590526040902093505b505060010161075f565b5060805191508181146107d257630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b60006107fb611c53565b60809050806060015160040163ffffffff16816080015163ffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108da57806008018261016001518663ffffffff16602081106108c9576108c9611d92565b63ffffffff90921660209290920201525b6108e2610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b018261094857600061094a565b815b90861663ffffffff16179250505092915050565b6000610968611c53565b608090506000816060015160040163ffffffff16826080015163ffffffff16146109ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f74000000000000000000000000604482015260640161087b565b8663ffffffff1660041480610a0957508663ffffffff166005145b15610a855760008261016001518663ffffffff1660208110610a2d57610a2d611d92565b602002015190508063ffffffff168563ffffffff16148015610a5557508763ffffffff166004145b80610a7d57508063ffffffff168563ffffffff1614158015610a7d57508763ffffffff166005145b915050610b02565b8663ffffffff16600603610aa25760008460030b13159050610b02565b8663ffffffff16600703610abe5760008460030b139050610b02565b8663ffffffff16600103610b0257601f601087901c166000819003610ae75760008560030b1291505b8063ffffffff16600103610b005760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b48576002610b2d8861ffff1660106108eb565b63ffffffff90811690911b8201600401166080840152610b5a565b60808301805160040163ffffffff1690525b610b62610619565b98975050505050505050565b6000603f601a86901c16801580610b9d575060088163ffffffff1610158015610b9d5750600f8163ffffffff16105b15610ff357603f86168160088114610be45760098114610bed57600a8114610bf657600b8114610bff57600c8114610c0857600d8114610c1157600e8114610c1a57610c1f565b60209150610c1f565b60219150610c1f565b602a9150610c1f565b602b9150610c1f565b60249150610c1f565b60259150610c1f565b602691505b508063ffffffff16600003610c465750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c6c5750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610ca257601f600688901c16610c9863ffffffff8716821c60208390036108eb565b9350505050610611565b8063ffffffff16600403610cc45750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610ce65750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d1957610d108663ffffffff168663ffffffff16901c876020036108eb565b92505050610611565b8063ffffffff16600803610d31578592505050610611565b8063ffffffff16600903610d49578592505050610611565b8063ffffffff16600a03610d61578592505050610611565b8063ffffffff16600b03610d79578592505050610611565b8063ffffffff16600c03610d91578592505050610611565b8063ffffffff16600f03610da9578592505050610611565b8063ffffffff16601003610dc1578592505050610611565b8063ffffffff16601103610dd9578592505050610611565b8063ffffffff16601203610df1578592505050610611565b8063ffffffff16601303610e09578592505050610611565b8063ffffffff16601803610e21578592505050610611565b8063ffffffff16601903610e39578592505050610611565b8063ffffffff16601a03610e51578592505050610611565b8063ffffffff16601b03610e69578592505050610611565b8063ffffffff16602003610e8257505050828201610611565b8063ffffffff16602103610e9b57505050828201610611565b8063ffffffff16602203610eb457505050818303610611565b8063ffffffff16602303610ecd57505050818303610611565b8063ffffffff16602403610ee657505050828216610611565b8063ffffffff16602503610eff57505050828217610611565b8063ffffffff16602603610f1857505050828218610611565b8063ffffffff16602703610f325750505082821719610611565b8063ffffffff16602a03610f63578460030b8660030b12610f54576000610f57565b60015b60ff1692505050610611565b8063ffffffff16602b03610f8b578463ffffffff168663ffffffff1610610f54576000610f57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e00000000000000000000000000604482015260640161087b565b50610f8b565b8063ffffffff16601c0361107757603f8616600281900361101957505050828202610611565b8063ffffffff166020148061103457508063ffffffff166021145b15610fed578063ffffffff1660200361104b579419945b60005b638000000087161561106d576401fffffffe600197881b16960161104e565b9250610611915050565b8063ffffffff16600f0361109957505065ffffffff0000601083901b16610611565b8063ffffffff166020036110cd576101d38560031660080260180363ffffffff168463ffffffff16901c60ff1660086108eb565b8063ffffffff16602103611102576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff1660106108eb565b8063ffffffff1660220361113157505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111485782915050610611565b8063ffffffff1660240361117a578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111ad578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111df57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361121557505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361124c57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361127b57505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112925783915050610611565b8063ffffffff16602e036112c457505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112db5782915050610611565b8063ffffffff16603803610f8b5783915050610611565b60006112fc611c53565b506080602063ffffffff86161061136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c6964207265676973746572000000000000000000000000000000000000604482015260640161087b565b63ffffffff8516158015906113815750825b156113b557838161016001518663ffffffff16602081106113a4576113a4611d92565b63ffffffff90921660209290920201525b60808101805163ffffffff808216606085015260049091011690526108e2610619565b60006113e2611c53565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa0361145c5781610fff81161561142b57610fff811661100003015b8363ffffffff166000036114525760e08801805163ffffffff838201169091529550611456565b8395505b506118cb565b8563ffffffff16610fcd0361147757634000000094506118cb565b8563ffffffff166110180361148f57600194506118cb565b8563ffffffff16611096036114c457600161012088015260ff83166101008801526114b8610619565b97505050505050505090565b8563ffffffff16610fa30361172e5763ffffffff8316156118cb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016116e857600061151f8363fffffffc166001610735565b60208901519091508060001a60010361158c5761158981600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa15801561162d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116519190611dc1565b91509150600386168060040382811015611669578092505b5081861015611676578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116cd8663fffffffc16600186611b06565b60408b018051820163ffffffff169052975061172992505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161171d578094506118cb565b63ffffffff9450600993505b6118cb565b8563ffffffff16610fa40361181f5763ffffffff831660011480611758575063ffffffff83166002145b80611769575063ffffffff83166004145b15611776578094506118cb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff84160161171d5760006117b68363fffffffc166001610735565b602089015190915060038416600403838110156117d1578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118cb565b8563ffffffff16610fd7036118cb578163ffffffff166003036118bf5763ffffffff83161580611855575063ffffffff83166005145b80611866575063ffffffff83166003145b1561187457600094506118cb565b63ffffffff83166001148061188f575063ffffffff83166002145b806118a0575063ffffffff83166006145b806118b1575063ffffffff83166004145b1561171d57600194506118cb565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114b8610619565b6000611916611c53565b506080600063ffffffff8716601003611934575060c0810151611a9d565b8663ffffffff166011036119535763ffffffff861660c0830152611a9d565b8663ffffffff1660120361196c575060a0810151611a9d565b8663ffffffff1660130361198b5763ffffffff861660a0830152611a9d565b8663ffffffff166018036119bf5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611a9d565b8663ffffffff166019036119f05763ffffffff86811681871602602081901c821660c08501521660a0830152611a9d565b8663ffffffff16601a03611a46578460030b8660030b81611a1357611a13611de5565b0763ffffffff1660c0830152600385810b9087900b81611a3557611a35611de5565b0563ffffffff1660a0830152611a9d565b8663ffffffff16601b03611a9d578463ffffffff168663ffffffff1681611a6f57611a6f611de5565b0663ffffffff90811660c084015285811690871681611a9057611a90611de5565b0463ffffffff1660a08301525b63ffffffff841615611ad857808261016001518563ffffffff1660208110611ac757611ac7611d92565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611afb610619565b979650505050505050565b6000611b1183611baa565b90506003841615611b2157600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611b9f5760208401933582821c6001168015611b6f5760018114611b8457611b95565b60008581526020839052604090209450611b95565b600082815260208690526040902094505b5050600101611b47565b505060805250505050565b60ff811661038002610184810190369061050401811015611c4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f6174610000000000000000000000000000000000000000000000000000000000606482015260840161087b565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cb9611cbe565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611cef57600080fd5b50813567ffffffffffffffff811115611d0757600080fd5b602083019150836020828501011115611d1f57600080fd5b9250929050565b60008060008060408587031215611d3c57600080fd5b843567ffffffffffffffff80821115611d5457600080fd5b611d6088838901611cdd565b90965094506020870135915080821115611d7957600080fd5b50611d8687828801611cdd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611dd457600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a" -var MIPSDeployedSourceMap = "1131:39637:105:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1710:45;;1745:10;1710:45;;;;;188:10:257;176:23;;;158:42;;146:2;131:18;1710:45:105;;;;;;;;2448:99;;;412:42:257;2534:6:105;400:55:257;382:74;;370:2;355:18;2448:99:105;211:251:257;25648:6339:105;;;;;;:::i;:::-;;:::i;:::-;;;1687:25:257;;;1675:2;1660:18;25648:6339:105;1541:177:257;25648:6339:105;25726:7;25769:18;;:::i;:::-;25916:4;25909:5;25906:15;25896:134;;26010:1;26007;26000:12;25896:134;26066:4;26060:11;26073;26057:28;26047:137;;26164:1;26161;26154:12;26047:137;26232:3;26214:16;26211:25;26201:150;;26331:1;26328;26321:12;26201:150;26395:3;26381:12;26378:21;26368:145;;26493:1;26490;26483:12;26368:145;26773:24;;27117:4;26819:20;27175:2;26877:21;;26773:24;26935:18;26819:20;26877:21;;;26773:24;26750:21;26746:52;;;26935:18;26819:20;;;26877:21;;;26773:24;26746:52;;26819:20;;26877:21;;;26773:24;26746:52;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;;26935:18;26819:20;26877:21;;;26773:24;26750:21;26746:52;;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;26935:18;26819:20;26877:21;;;26773:24;26746:52;;26935:18;26819:20;27793:10;26935:18;27783:21;;;26877;;;;27891:1;27876:77;27901:2;27898:1;27895:9;27876:77;;;26773:24;;26750:21;26746:52;26819:20;;27949:1;26877:21;;;;26761:2;26935:18;;;;27919:1;27912:9;27876:77;;;27880:14;;;28031:5;:12;;;28027:71;;;28070:13;:11;:13::i;:::-;28063:20;;;;;28027:71;28112:10;;;:15;;28126:1;28112:15;;;;;28197:8;;;;-1:-1:-1;;28189:20:105;;-1:-1:-1;28189:7:105;:20::i;:::-;28175:34;-1:-1:-1;28239:10:105;28247:2;28239:10;;;;28316:1;28306:11;;;:26;;;28321:6;:11;;28331:1;28321:11;28306:26;28302:310;;;28462:13;28531:1;28509:4;28516:10;28509:17;28508:24;;;;28479:5;:12;;;28494:10;28479:25;28478:54;28462:70;;28557:40;28568:6;:11;;28578:1;28568:11;:20;;28586:2;28568:20;;;28582:1;28568:20;28557:40;;28590:6;28557:10;:40::i;:::-;28550:47;;;;;;;;28302:310;28861:15;;;;28656:9;;;;28793:4;28787:2;28779:10;;;28778:19;;;28861:15;28886:2;28878:10;;;28877:19;28861:36;;;;;;;:::i;:::-;;;;;;-1:-1:-1;28926:5:105;28950:11;;;;;:29;;;28965:6;:14;;28975:4;28965:14;28950:29;28946:832;;;29042:5;:15;;;29058:5;29042:22;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;29105:4:105;29099:2;29091:10;;;29090:19;28946:832;;;29143:4;29134:6;:13;;;29130:648;;;29264:6;:13;;29274:3;29264:13;:30;;;;29281:6;:13;;29291:3;29281:13;29264:30;:47;;;;29298:6;:13;;29308:3;29298:13;29264:47;29260:253;;;29374:4;29381:6;29374:13;29369:18;;29130:648;;29260:253;29473:21;29476:4;29483:6;29476:13;29491:2;29473;:21::i;:::-;29468:26;;29130:648;;;29547:4;29537:6;:14;;;;:32;;;;29555:6;:14;;29565:4;29555:14;29537:32;:50;;;;29573:6;:14;;29583:4;29573:14;29537:50;29533:245;;;29657:5;:15;;;29673:5;29657:22;;;;;;;;;:::i;:::-;;;;;29652:27;;29758:5;29750:13;;29533:245;29807:1;29797:6;:11;;;;:25;;;;;29821:1;29812:6;:10;;;29797:25;29796:42;;;;29827:6;:11;;29837:1;29827:11;29796:42;29792:125;;;29865:37;29878:6;29886:4;29892:5;29899:2;29865:12;:37::i;:::-;29858:44;;;;;;;;;;;29792:125;29950:13;29931:16;30102:4;30092:14;;;;30088:446;;30171:21;30174:4;30181:6;30174:13;30189:2;30171;:21::i;:::-;30165:27;;;;30229:10;30224:15;;30263:16;30224:15;30277:1;30263:7;:16::i;:::-;30257:22;;30311:4;30301:6;:14;;;;:32;;;;;30319:6;:14;;30329:4;30319:14;;30301:32;30297:223;;;30398:4;30386:16;;30500:1;30492:9;;30297:223;30108:426;30088:446;30567:10;30580:26;30588:4;30594:2;30598;30602:3;30580:7;:26::i;:::-;30609:10;30580:39;;;;-1:-1:-1;30705:4:105;30698:11;;;30737;;;:24;;;;;30760:1;30752:4;:9;;;;30737:24;:39;;;;;30772:4;30765;:11;;;30737:39;30733:847;;;30800:4;:9;;30808:1;30800:9;:22;;;;30813:4;:9;;30821:1;30813:9;30800:22;30796:144;;;30884:37;30895:4;:9;;30903:1;30895:9;:21;;30911:5;30895:21;;;30907:1;30895:21;30918:2;30884:10;:37::i;:::-;30877:44;;;;;;;;;;;;;;;30796:144;30962:4;:11;;30970:3;30962:11;30958:121;;31032:28;31041:5;31048:2;31052:7;;;;31032:8;:28::i;30958:121::-;31100:4;:11;;31108:3;31100:11;31096:121;;31170:28;31179:5;31186:2;31190:7;;;;;31170:8;:28::i;31096:121::-;31287:4;:11;;31295:3;31287:11;31283:80;;31329:15;:13;:15::i;31283:80::-;31466:4;31458;:12;;;;:27;;;;;31481:4;31474;:11;;;31458:27;31454:112;;;31516:31;31527:4;31533:2;31537;31541:5;31516:10;:31::i;31454:112::-;31640:6;:14;;31650:4;31640:14;:28;;;;-1:-1:-1;31658:10:105;;;;;31640:28;31636:93;;;31713:1;31688:5;:15;;;31704:5;31688:22;;;;;;;;;:::i;:::-;:26;;;;:22;;;;;;:26;31636:93;31775:9;:26;;31788:13;31775:26;31771:92;;31821:27;31830:9;31841:1;31844:3;31821:8;:27::i;:::-;31944:26;31953:5;31960:3;31965:4;31944:8;:26::i;:::-;31937:33;;;;;;;;;;;;;25648:6339;;;;;;;:::o;3092:2427::-;3639:4;3633:11;;3555:4;3358:31;3347:43;;3418:13;3358:31;3757:2;3457:13;;3347:43;3364:24;3358:31;3457:13;;;3347:43;;;;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3418:13;4185:11;3364:24;3358:31;3457:13;;;3347:43;3418:13;4280:11;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3133:12;;4420:13;;3633:11;;3457:13;;;;4185:11;3133:12;4500:84;4525:2;4522:1;4519:9;4500:84;;;3374:13;3364:24;;3358:31;3347:43;;3378:2;3418:13;;;;4580:1;3457:13;;;;4543:1;4536:9;4500:84;;;4504:14;4647:1;4643:2;4636:13;4742:5;4738:2;4734:14;4727:5;4722:27;4763:500;;;4804:7;4837;4866:1;4861:309;;;;5246:1;5235:12;;4830:419;;4861:309;4897:9;4964:23;;;;5052:1;5047:23;;;;5149:1;5138:12;;4890:262;;4964:23;4984:1;4973:12;;4964:23;;5047;5067:1;5056:12;;4890:262;;4830:419;;4763:500;;;;:::o;:::-;5290:26;5307:8;5299:6;5290:26;:::i;:::-;5415:14;;;;5398:32;;;5458:19;5454:30;5490:3;5486:16;;;;5451:52;;;;;3092:2427;-1:-1:-1;;;;3092:2427:105:o;21703:1831::-;21776:11;21887:14;21904:24;21916:11;21904;:24::i;:::-;21887:41;;22036:1;22029:5;22025:13;22022:33;;;22051:1;22048;22041:12;22022:33;22184:2;22172:15;;;22125:20;22614:5;22611:1;22607:13;22649:4;22685:1;22670:343;22695:2;22692:1;22689:9;22670:343;;;22818:2;22806:15;;;22755:20;22853:12;;;22867:1;22849:20;22890:42;;;;22958:1;22953:42;;;;22842:153;;22890:42;22348:1;22341:12;;;22381:2;22374:13;;;22426:2;22413:16;;22899:31;;22890:42;;22953;22348:1;22341:12;;;22381:2;22374:13;;;22426:2;22413:16;;22962:31;;22842:153;-1:-1:-1;;22713:1:105;22706:9;22670:343;;;22674:14;23123:4;23117:11;23102:26;;23209:7;23203:4;23200:17;23190:124;;23251:10;23248:1;23241:21;23293:2;23290:1;23283:13;23190:124;-1:-1:-1;;23441:2:105;23430:14;;;;23418:10;23414:31;23411:1;23407:39;23475:16;;;;23493:10;23471:33;;21703:1831;-1:-1:-1;;;21703:1831:105:o;18813:823::-;18882:12;18969:18;;:::i;:::-;19037:4;19028:13;;19089:5;:8;;;19100:1;19089:12;19073:28;;:5;:12;;;:28;;;19069:95;;19121:28;;;;;2114:2:257;19121:28:105;;;2096:21:257;2153:2;2133:18;;;2126:30;2192:20;2172:18;;;2165:48;2230:18;;19121:28:105;;;;;;;;19069:95;19253:8;;;;;19286:12;;;;;19275:23;;;;;;;19312:20;;;;;19253:8;19444:13;;;19440:90;;19505:6;19514:1;19505:10;19477:5;:15;;;19493:8;19477:25;;;;;;;;;:::i;:::-;:38;;;;:25;;;;;;:38;19440:90;19606:13;:11;:13::i;:::-;19599:20;18813:823;-1:-1:-1;;;;;18813:823:105:o;2645:339::-;2706:11;2770:18;;;;2779:8;;;;2770:18;;;;;;2769:25;;;;;2786:1;2833:2;:9;;;2827:16;;;;;2826:22;;2825:32;;;;;;;2887:9;;2886:15;2769:25;2944:21;;2964:1;2944:21;;;2955:6;2944:21;2929:11;;;;;:37;;-1:-1:-1;;;2645:339:105;;;;:::o;13674:2026::-;13771:12;13857:18;;:::i;:::-;13925:4;13916:13;;13957:17;14017:5;:8;;;14028:1;14017:12;14001:28;;:5;:12;;;:28;;;13997:97;;14049:30;;;;;2461:2:257;14049:30:105;;;2443:21:257;2500:2;2480:18;;;2473:30;2539:22;2519:18;;;2512:50;2579:18;;14049:30:105;2259:344:257;13997:97:105;14164:7;:12;;14175:1;14164:12;:28;;;;14180:7;:12;;14191:1;14180:12;14164:28;14160:947;;;14212:9;14224:5;:15;;;14240:6;14224:23;;;;;;;;;:::i;:::-;;;;;14212:35;;14288:2;14281:9;;:3;:9;;;:25;;;;;14294:7;:12;;14305:1;14294:12;14281:25;14280:58;;;;14319:2;14312:9;;:3;:9;;;;:25;;;;;14325:7;:12;;14336:1;14325:12;14312:25;14265:73;;14194:159;14160:947;;;14450:7;:12;;14461:1;14450:12;14446:661;;14511:1;14503:3;14497:15;;;;14482:30;;14446:661;;;14615:7;:12;;14626:1;14615:12;14611:496;;14675:1;14668:3;14662:14;;;14647:29;;14611:496;;;14796:7;:12;;14807:1;14796:12;14792:315;;14884:4;14878:2;14869:11;;;14868:20;14854:10;14911:8;;;14907:84;;14971:1;14964:3;14958:14;;;14943:29;;14907:84;15012:3;:8;;15019:1;15012:8;15008:85;;15073:1;15065:3;15059:15;;;;15044:30;;15008:85;14810:297;14792:315;15183:8;;;;;15261:12;;;;15250:23;;;;;15417:178;;;;15508:1;15482:22;15485:5;15493:6;15485:14;15501:2;15482;:22::i;:::-;:27;;;;;;;15468:42;;15477:1;15468:42;15453:57;:12;;;:57;15417:178;;;15564:12;;;;;15579:1;15564:16;15549:31;;;;15417:178;15670:13;:11;:13::i;:::-;15663:20;13674:2026;-1:-1:-1;;;;;;;;13674:2026:105:o;32033:8733::-;32120:10;32182;32190:2;32182:10;;;;32221:11;;;:44;;;32247:1;32237:6;:11;;;;:27;;;;;32261:3;32252:6;:12;;;32237:27;32217:8490;;;32306:4;32299:11;;32430:6;32490:3;32485:25;;;;32565:3;32560:25;;;;32639:3;32634:25;;;;32714:3;32709:25;;;;32788:3;32783:25;;;;32861:3;32856:25;;;;32935:3;32930:25;;;;32423:532;;32485:25;32504:4;32496:12;;32485:25;;32560;32579:4;32571:12;;32560:25;;32634;32653:4;32645:12;;32634:25;;32709;32728:4;32720:12;;32709:25;;32783;32802:4;32794:12;;32783:25;;32856;32875:4;32867:12;;32856:25;;32930;32949:4;32941:12;;32423:532;;33018:4;:12;;33026:4;33018:12;33014:4023;;-1:-1:-1;;;33069:9:105;33061:26;;33082:4;33077:1;33069:9;;;33068:18;33061:26;33054:33;;33014:4023;33155:4;:12;;33163:4;33155:12;33151:3886;;-1:-1:-1;;;33206:9:105;33198:26;;33219:4;33214:1;33206:9;;;33205:18;33198:26;33191:33;;33151:3886;33292:4;:12;;33300:4;33292:12;33288:3749;;33357:4;33352:1;33344:9;;;33343:18;33390:27;33344:9;33393:11;;;;33406:2;:10;;;33390:2;:27::i;:::-;33383:34;;;;;;;33288:3749;33486:4;:12;;33494:4;33486:12;33482:3555;;-1:-1:-1;;;33529:17:105;;;33541:4;33536:9;;33529:17;33522:24;;33482:3555;33615:4;:11;;33623:3;33615:11;33611:3426;;-1:-1:-1;;;33657:17:105;;;33669:4;33664:9;;33657:17;33650:24;;33611:3426;33743:4;:12;;33751:4;33743:12;33739:3298;;33786:21;33795:2;33789:8;;:2;:8;;;;33804:2;33799;:7;33786:2;:21::i;:::-;33779:28;;;;;;33739:3298;34056:4;:12;;34064:4;34056:12;34052:2985;;34099:2;34092:9;;;;;;34052:2985;34170:4;:12;;34178:4;34170:12;34166:2871;;34213:2;34206:9;;;;;;34166:2871;34284:4;:12;;34292:4;34284:12;34280:2757;;34327:2;34320:9;;;;;;34280:2757;34398:4;:12;;34406:4;34398:12;34394:2643;;34441:2;34434:9;;;;;;34394:2643;34515:4;:12;;34523:4;34515:12;34511:2526;;34558:2;34551:9;;;;;;34511:2526;34675:4;:12;;34683:4;34675:12;34671:2366;;34718:2;34711:9;;;;;;34671:2366;34789:4;:12;;34797:4;34789:12;34785:2252;;34832:2;34825:9;;;;;;34785:2252;34903:4;:12;;34911:4;34903:12;34899:2138;;34946:2;34939:9;;;;;;34899:2138;35017:4;:12;;35025:4;35017:12;35013:2024;;35060:2;35053:9;;;;;;35013:2024;35131:4;:12;;35139:4;35131:12;35127:1910;;35174:2;35167:9;;;;;;35127:1910;35245:4;:12;;35253:4;35245:12;35241:1796;;35288:2;35281:9;;;;;;35241:1796;35360:4;:12;;35368:4;35360:12;35356:1681;;35403:2;35396:9;;;;;;35356:1681;35473:4;:12;;35481:4;35473:12;35469:1568;;35516:2;35509:9;;;;;;35469:1568;35587:4;:12;;35595:4;35587:12;35583:1454;;35630:2;35623:9;;;;;;35583:1454;35779:4;:12;;35787:4;35779:12;35775:1262;;-1:-1:-1;;;35823:7:105;;;35815:16;;35775:1262;35900:4;:12;;35908:4;35900:12;35896:1141;;-1:-1:-1;;;35944:7:105;;;35936:16;;35896:1141;36020:4;:12;;36028:4;36020:12;36016:1021;;-1:-1:-1;;;36064:7:105;;;36056:16;;36016:1021;36141:4;:12;;36149:4;36141:12;36137:900;;-1:-1:-1;;;36185:7:105;;;36177:16;;36137:900;36261:4;:12;;36269:4;36261:12;36257:780;;-1:-1:-1;;;36305:7:105;;;36297:16;;36257:780;36380:4;:12;;36388:4;36380:12;36376:661;;-1:-1:-1;;;36424:7:105;;;36416:16;;36376:661;36500:4;:12;;36508:4;36500:12;36496:541;;-1:-1:-1;;;36544:7:105;;;36536:16;;36496:541;36620:4;:12;;36628:4;36620:12;36616:421;;-1:-1:-1;;;36665:7:105;;;36663:10;36656:17;;36616:421;36742:4;:12;;36750:4;36742:12;36738:299;;36803:2;36785:21;;36791:2;36785:21;;;:29;;36813:1;36785:29;;;36809:1;36785:29;36778:36;;;;;;;;36738:299;36884:4;:12;;36892:4;36884:12;36880:157;;36932:2;36927:7;;:2;:7;;;:15;;36941:1;36927:15;;36880:157;36989:29;;;;;2810:2:257;36989:29:105;;;2792:21:257;2849:2;2829:18;;;2822:30;2888:21;2868:18;;;2861:49;2927:18;;36989:29:105;2608:343:257;36880:157:105;32267:4784;32217:8490;;;37107:6;:14;;37117:4;37107:14;37103:3590;;37166:4;37159:11;;37241:3;37233:11;;;37229:549;;-1:-1:-1;;;37286:21:105;;;37272:36;;37229:549;37393:4;:12;;37401:4;37393:12;:28;;;;37409:4;:12;;37417:4;37409:12;37393:28;37389:389;;;37453:4;:12;;37461:4;37453:12;37449:83;;37502:3;;;37449:83;37557:8;37595:127;37607:10;37602:15;;:20;37595:127;;37687:8;37654:3;37687:8;;;;;37654:3;37595:127;;;37754:1;-1:-1:-1;37747:8:105;;-1:-1:-1;;37747:8:105;37103:3590;37845:6;:14;;37855:4;37845:14;37841:2852;;-1:-1:-1;;37890:8:105;37896:2;37890:8;;;;37883:15;;37841:2852;37965:6;:14;;37975:4;37965:14;37961:2732;;38010:42;38028:2;38033:1;38028:6;38038:1;38027:12;38022:2;:17;38014:26;;:3;:26;;;;38044:4;38013:35;38050:1;38010:2;:42::i;37961:2732::-;38119:6;:14;;38129:4;38119:14;38115:2578;;38164:45;38182:2;38187:1;38182:6;38192:1;38181:12;38176:2;:17;38168:26;;:3;:26;;;;38198:6;38167:37;38206:2;38164;:45::i;38115:2578::-;38277:6;:14;;38287:4;38277:14;38273:2420;;-1:-1:-1;;38328:21:105;38347:1;38342;38337:6;;38336:12;38328:21;;38385:36;;;38456:5;38451:10;;38328:21;;;;;38450:18;38443:25;;38273:2420;38535:6;:14;;38545:4;38535:14;38531:2162;;38580:3;38573:10;;;;;38531:2162;38651:6;:14;;38661:4;38651:14;38647:2046;;38711:2;38716:1;38711:6;38721:1;38710:12;38705:2;:17;38697:26;;:3;:26;;;;38727:4;38696:35;38689:42;;;;;38647:2046;38800:6;:14;;38810:4;38800:14;38796:1897;;38860:2;38865:1;38860:6;38870:1;38859:12;38854:2;:17;38846:26;;:3;:26;;;;38876:6;38845:37;38838:44;;;;;38796:1897;38951:6;:14;;38961:4;38951:14;38947:1746;;-1:-1:-1;;39002:26:105;39026:1;39021;39016:6;;39015:12;39010:2;:17;39002:26;;39064:41;;;39140:5;39135:10;;39002:26;;;;;39134:18;39127:25;;38947:1746;39220:6;:14;;39230:4;39220:14;39216:1477;;-1:-1:-1;;39277:4:105;39271:34;39303:1;39298;39293:6;;39292:12;39287:2;:17;39271:34;;39361:27;;;39341:48;;;39419:10;;39272:9;;;39271:34;;39418:18;39411:25;;39216:1477;39504:6;:14;;39514:4;39504:14;39500:1193;;-1:-1:-1;;39561:6:105;39555:36;39589:1;39584;39579:6;;39578:12;39573:2;:17;39555:36;;39647:29;;;39627:50;;;39707:10;;39556:11;;;39555:36;;39706:18;39699:25;;39500:1193;39793:6;:14;;39803:4;39793:14;39789:904;;-1:-1:-1;;39844:20:105;39862:1;39857;39852:6;;39851:12;39844:20;;39900:36;;;39972:5;39966:11;;39844:20;;;;;39965:19;39958:26;;39789:904;40052:6;:14;;40062:4;40052:14;40048:645;;40097:2;40090:9;;;;;40048:645;40168:6;:14;;40178:4;40168:14;40164:529;;-1:-1:-1;;40219:25:105;40242:1;40237;40232:6;;40231:12;40226:2;:17;40219:25;;40280:41;;;40357:5;40351:11;;40219:25;;;;;40350:19;40343:26;;40164:529;40436:6;:14;;40446:4;40436:14;40432:261;;40481:3;40474:10;;;;;40432:261;40551:6;:14;;40561:4;40551:14;40547:146;;40596:2;40589:9;;;;;19917:782;20003:12;20090:18;;:::i;:::-;-1:-1:-1;20158:4:105;20265:2;20253:14;;;;20245:41;;;;;;;3158:2:257;20245:41:105;;;3140:21:257;3197:2;3177:18;;;3170:30;3236:16;3216:18;;;3209:44;3270:18;;20245:41:105;2956:338:257;20245:41:105;20382:14;;;;;;;:30;;;20400:12;20382:30;20378:102;;;20461:4;20432:5;:15;;;20448:9;20432:26;;;;;;;;;:::i;:::-;:33;;;;:26;;;;;;:33;20378:102;20535:12;;;;;20524:23;;;;:8;;;:23;20591:1;20576:16;;;20561:31;;;20669:13;:11;:13::i;5560:7728::-;5603:12;5689:18;;:::i;:::-;-1:-1:-1;5867:15:105;;:18;;;;5757:4;6027:18;;;;6071;;;;6115;;;;;5757:4;;5847:17;;;;6027:18;6071;6205;;;6219:4;6205:18;6201:6777;;6255:2;6284:4;6279:9;;:14;6275:144;;6395:4;6390:9;;6382:4;:18;6376:24;6275:144;6440:2;:7;;6446:1;6440:7;6436:161;;6476:10;;;;;6508:16;;;;;;;;6476:10;-1:-1:-1;6436:161:105;;;6576:2;6571:7;;6436:161;6225:386;6201:6777;;;6713:10;:18;;6727:4;6713:18;6709:6269;;1745:10;6751:14;;6709:6269;;;6849:10;:18;;6863:4;6849:18;6845:6133;;6892:1;6887:6;;6845:6133;;;7017:10;:18;;7031:4;7017:18;7013:5965;;7070:4;7055:12;;;:19;7092:26;;;:14;;;:26;7143:13;:11;:13::i;:::-;7136:20;;;;;;;;;5560:7728;:::o;7013:5965::-;7282:10;:18;;7296:4;7282:18;7278:5700;;7433:14;;;7429:2708;7278:5700;7429:2708;7603:22;;;;;7599:2538;;7728:10;7741:27;7749:2;7754:10;7749:15;7766:1;7741:7;:27::i;:::-;7852:17;;;;7728:40;;-1:-1:-1;7852:17:105;7830:19;8002:14;8021:1;7996:26;7992:131;;8064:36;8088:11;1277:21:106;1426:15;;;1467:8;1461:4;1454:22;1595:4;1582:18;;1602:19;1578:44;1624:11;1575:61;;1222:430;8064:36:105;8050:50;;7992:131;8209:20;;;;;8176:54;;;;;;;;3472:25:257;;;8176:54:105;3533:23:257;;;3513:18;;;3506:51;8145:11:105;;;;8176:19;:6;:19;;;;3445:18:257;;8176:54:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8144:86;;;;8457:1;8453:2;8449:10;8554:9;8551:1;8547:17;8636:6;8629:5;8626:17;8623:40;;;8656:5;8646:15;;8623:40;;8739:6;8735:2;8732:14;8729:34;;;8759:2;8749:12;;8729:34;8865:3;8860:1;8852:6;8848:14;8843:3;8839:24;8835:34;8828:41;;8965:3;8961:1;8949:9;8940:6;8937:1;8933:14;8929:30;8925:38;8921:48;8914:55;;9120:1;9116;9112;9100:9;9097:1;9093:17;9089:25;9085:33;9081:41;9247:1;9243;9239;9230:6;9218:9;9215:1;9211:17;9207:30;9203:38;9199:46;9195:54;9177:72;;9378:10;9374:15;9368:4;9364:26;9356:34;;9494:3;9486:4;9482:9;9477:3;9473:19;9470:28;9463:35;;;;9640:33;9649:2;9654:10;9649:15;9666:1;9669:3;9640:8;:33::i;:::-;9695:20;;;:38;;;;;;;;;-1:-1:-1;7599:2538:105;;-1:-1:-1;;;7599:2538:105;;9852:18;;;;;9848:289;;10022:2;10017:7;;7278:5700;;9848:289;10076:10;10071:15;;2053:3;10108:10;;9848:289;7278:5700;;;10266:10;:18;;10280:4;10266:18;10262:2716;;10420:15;;;1824:1;10420:15;;:34;;-1:-1:-1;10439:15:105;;;1859:1;10439:15;10420:34;:57;;;-1:-1:-1;10458:19:105;;;1936:1;10458:19;10420:57;10416:1593;;;10506:2;10501:7;;10262:2716;;10416:1593;10632:23;;;;;10628:1381;;10679:10;10692:27;10700:2;10705:10;10700:15;10717:1;10692:7;:27::i;:::-;10795:17;;;;10679:40;;-1:-1:-1;11038:1:105;11030:10;;11132:1;11128:17;11207:13;;;11204:32;;;11229:5;11223:11;;11204:32;11515:14;;;11321:1;11511:22;;;11507:32;;;;11404:26;11428:1;11313:10;;;11408:18;;;11404:26;11503:43;11309:20;;11611:12;11739:17;;;:23;11807:1;11784:20;;;:24;11317:2;-1:-1:-1;11317:2:105;7278:5700;;10262:2716;12211:10;:18;;12225:4;12211:18;12207:771;;12321:2;:7;;12327:1;12321:7;12317:647;;12414:14;;;;;:40;;-1:-1:-1;12432:22:105;;;1978:1;12432:22;12414:40;:62;;;-1:-1:-1;12458:18:105;;;1897:1;12458:18;12414:62;12410:404;;;12509:1;12504:6;;12317:647;;12410:404;12555:15;;;1824:1;12555:15;;:34;;-1:-1:-1;12574:15:105;;;1859:1;12574:15;12555:34;:61;;;-1:-1:-1;12593:23:105;;;2021:1;12593:23;12555:61;:84;;;-1:-1:-1;12620:19:105;;;1936:1;12620:19;12555:84;12551:263;;;12672:1;12667:6;;7278:5700;;12317:647;12865:10;12860:15;;2087:4;12897:11;;12317:647;13053:15;;;;;:23;;;;:18;;;;:23;;;;13090:15;;:23;;;:18;;;;:23;-1:-1:-1;13179:12:105;;;;13168:23;;;:8;;;:23;13235:1;13220:16;13205:31;;;;;13258:13;:11;:13::i;16041:2480::-;16135:12;16221:18;;:::i;:::-;-1:-1:-1;16289:4:105;16321:10;16429:13;;;16438:4;16429:13;16425:1705;;-1:-1:-1;16468:8:105;;;;16425:1705;;;16587:5;:13;;16596:4;16587:13;16583:1547;;16620:14;;;:8;;;:14;16583:1547;;;16750:5;:13;;16759:4;16750:13;16746:1384;;-1:-1:-1;16789:8:105;;;;16746:1384;;;16908:5;:13;;16917:4;16908:13;16904:1226;;16941:14;;;:8;;;:14;16904:1226;;;17082:5;:13;;17091:4;17082:13;17078:1052;;17209:9;17155:17;17135;;;17155;;;;17135:37;17216:2;17209:9;;;;;17191:8;;;:28;17237:22;:8;;;:22;17078:1052;;;17396:5;:13;;17405:4;17396:13;17392:738;;17463:11;17449;;;17463;;;17449:25;17518:2;17511:9;;;;;17493:8;;;:28;17539:22;:8;;;:22;17392:738;;;17720:5;:13;;17729:4;17720:13;17716:414;;17790:3;17771:23;;17777:3;17771:23;;;;;;;:::i;:::-;;17753:42;;:8;;;:42;17831:23;;;;;;;;;;;;;:::i;:::-;;17813:42;;:8;;;:42;17716:414;;;18024:5;:13;;18033:4;18024:13;18020:110;;18074:3;18068:9;;:3;:9;;;;;;;:::i;:::-;;18057:20;;;;:8;;;:20;18106:9;;;;;;;;;;;:::i;:::-;;18095:20;;:8;;;:20;18020:110;18223:14;;;;18219:85;;18286:3;18257:5;:15;;;18273:9;18257:26;;;;;;;;;:::i;:::-;:32;;;;:26;;;;;;:32;18219:85;18358:12;;;;;18347:23;;;;:8;;;:23;18414:1;18399:16;;;18384:31;;;18491:13;:11;:13::i;:::-;18484:20;16041:2480;-1:-1:-1;;;;;;;16041:2480:105:o;23870:1654::-;24046:14;24063:24;24075:11;24063;:24::i;:::-;24046:41;;24195:1;24188:5;24184:13;24181:33;;;24210:1;24207;24200:12;24181:33;24349:2;24543:15;;;24368:2;24357:14;;24345:10;24341:31;24338:1;24334:39;24499:16;;;24284:20;;24484:10;24473:22;;;24469:27;24459:38;24456:60;24985:5;24982:1;24978:13;25056:1;25041:343;25066:2;25063:1;25060:9;25041:343;;;25189:2;25177:15;;;25126:20;25224:12;;;25238:1;25220:20;25261:42;;;;25329:1;25324:42;;;;25213:153;;25261:42;22348:1;22341:12;;;22381:2;22374:13;;;22426:2;22413:16;;25270:31;;25261:42;;25324;22348:1;22341:12;;;22381:2;22374:13;;;22426:2;22413:16;;25333:31;;25213:153;-1:-1:-1;;25084:1:105;25077:9;25041:343;;;-1:-1:-1;;25483:4:105;25476:18;-1:-1:-1;;;;23870:1654:105:o;20903:586::-;21225:20;;;21249:7;21225:32;21218:3;:40;;;21331:14;;21386:17;;21380:24;;;21372:72;;;;;;;4209:2:257;21372:72:105;;;4191:21:257;4248:2;4228:18;;;4221:30;4287:34;4267:18;;;4260:62;4358:5;4338:18;;;4331:33;4381:19;;21372:72:105;4007:399:257;21372:72:105;21458:14;20903:586;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;467:347:257:-;518:8;528:6;582:3;575:4;567:6;563:17;559:27;549:55;;600:1;597;590:12;549:55;-1:-1:-1;623:20:257;;666:18;655:30;;652:50;;;698:1;695;688:12;652:50;735:4;727:6;723:17;711:29;;787:3;780:4;771:6;763;759:19;755:30;752:39;749:59;;;804:1;801;794:12;749:59;467:347;;;;;:::o;819:717::-;909:6;917;925;933;986:2;974:9;965:7;961:23;957:32;954:52;;;1002:1;999;992:12;954:52;1042:9;1029:23;1071:18;1112:2;1104:6;1101:14;1098:34;;;1128:1;1125;1118:12;1098:34;1167:58;1217:7;1208:6;1197:9;1193:22;1167:58;:::i;:::-;1244:8;;-1:-1:-1;1141:84:257;-1:-1:-1;1332:2:257;1317:18;;1304:32;;-1:-1:-1;1348:16:257;;;1345:36;;;1377:1;1374;1367:12;1345:36;;1416:60;1468:7;1457:8;1446:9;1442:24;1416:60;:::i;:::-;819:717;;;;-1:-1:-1;1495:8:257;-1:-1:-1;;;;819:717:257:o;1723:184::-;1775:77;1772:1;1765:88;1872:4;1869:1;1862:15;1896:4;1893:1;1886:15;3568:245;3647:6;3655;3708:2;3696:9;3687:7;3683:23;3679:32;3676:52;;;3724:1;3721;3714:12;3676:52;-1:-1:-1;;3747:16:257;;3803:2;3788:18;;;3782:25;3747:16;;3782:25;;-1:-1:-1;3568:245:257:o;3818:184::-;3870:77;3867:1;3860:88;3967:4;3964:1;3957:15;3991:4;3988:1;3981:15" +var MIPSDeployedSourceMap = "1131:39544:105:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1710:45;;1745:10;1710:45;;;;;188:10:257;176:23;;;158:42;;146:2;131:18;1710:45:105;;;;;;;;2448:99;;;412:42:257;2534:6:105;400:55:257;382:74;;370:2;355:18;2448:99:105;211:251:257;25555:6339:105;;;;;;:::i;:::-;;:::i;:::-;;;1687:25:257;;;1675:2;1660:18;25555:6339:105;1541:177:257;25555:6339:105;25633:7;25676:18;;:::i;:::-;25823:4;25816:5;25813:15;25803:134;;25917:1;25914;25907:12;25803:134;25973:4;25967:11;25980;25964:28;25954:137;;26071:1;26068;26061:12;25954:137;26139:3;26121:16;26118:25;26108:150;;26238:1;26235;26228:12;26108:150;26302:3;26288:12;26285:21;26275:145;;26400:1;26397;26390:12;26275:145;26680:24;;27024:4;26726:20;27082:2;26784:21;;26680:24;26842:18;26726:20;26784:21;;;26680:24;26657:21;26653:52;;;26842:18;26726:20;;;26784:21;;;26680:24;26653:52;;26726:20;;26784:21;;;26680:24;26653:52;;26842:18;26726:20;26784:21;;;26680:24;26653:52;;26842:18;26726:20;26784:21;;;26680:24;26653:52;;26842:18;26726:20;26784:21;;;26680:24;26653:52;;;26842:18;26726:20;26784:21;;;26680:24;26657:21;26653:52;;;26842:18;26726:20;26784:21;;;26680:24;26653:52;;26842:18;26726:20;26784:21;;;26680:24;26653:52;;26842:18;26726:20;27700:10;26842:18;27690:21;;;26784;;;;27798:1;27783:77;27808:2;27805:1;27802:9;27783:77;;;26680:24;;26657:21;26653:52;26726:20;;27856:1;26784:21;;;;26668:2;26842:18;;;;27826:1;27819:9;27783:77;;;27787:14;;;27938:5;:12;;;27934:71;;;27977:13;:11;:13::i;:::-;27970:20;;;;;27934:71;28019:10;;;:15;;28033:1;28019:15;;;;;28104:8;;;;-1:-1:-1;;28096:20:105;;-1:-1:-1;28096:7:105;:20::i;:::-;28082:34;-1:-1:-1;28146:10:105;28154:2;28146:10;;;;28223:1;28213:11;;;:26;;;28228:6;:11;;28238:1;28228:11;28213:26;28209:310;;;28369:13;28438:1;28416:4;28423:10;28416:17;28415:24;;;;28386:5;:12;;;28401:10;28386:25;28385:54;28369:70;;28464:40;28475:6;:11;;28485:1;28475:11;:20;;28493:2;28475:20;;;28489:1;28475:20;28464:40;;28497:6;28464:10;:40::i;:::-;28457:47;;;;;;;;28209:310;28768:15;;;;28563:9;;;;28700:4;28694:2;28686:10;;;28685:19;;;28768:15;28793:2;28785:10;;;28784:19;28768:36;;;;;;;:::i;:::-;;;;;;-1:-1:-1;28833:5:105;28857:11;;;;;:29;;;28872:6;:14;;28882:4;28872:14;28857:29;28853:832;;;28949:5;:15;;;28965:5;28949:22;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;29012:4:105;29006:2;28998:10;;;28997:19;28853:832;;;29050:4;29041:6;:13;;;29037:648;;;29171:6;:13;;29181:3;29171:13;:30;;;;29188:6;:13;;29198:3;29188:13;29171:30;:47;;;;29205:6;:13;;29215:3;29205:13;29171:47;29167:253;;;29281:4;29288:6;29281:13;29276:18;;29037:648;;29167:253;29380:21;29383:4;29390:6;29383:13;29398:2;29380;:21::i;:::-;29375:26;;29037:648;;;29454:4;29444:6;:14;;;;:32;;;;29462:6;:14;;29472:4;29462:14;29444:32;:50;;;;29480:6;:14;;29490:4;29480:14;29444:50;29440:245;;;29564:5;:15;;;29580:5;29564:22;;;;;;;;;:::i;:::-;;;;;29559:27;;29665:5;29657:13;;29440:245;29714:1;29704:6;:11;;;;:25;;;;;29728:1;29719:6;:10;;;29704:25;29703:42;;;;29734:6;:11;;29744:1;29734:11;29703:42;29699:125;;;29772:37;29785:6;29793:4;29799:5;29806:2;29772:12;:37::i;:::-;29765:44;;;;;;;;;;;29699:125;29857:13;29838:16;30009:4;29999:14;;;;29995:446;;30078:21;30081:4;30088:6;30081:13;30096:2;30078;:21::i;:::-;30072:27;;;;30136:10;30131:15;;30170:16;30131:15;30184:1;30170:7;:16::i;:::-;30164:22;;30218:4;30208:6;:14;;;;:32;;;;;30226:6;:14;;30236:4;30226:14;;30208:32;30204:223;;;30305:4;30293:16;;30407:1;30399:9;;30204:223;30015:426;29995:446;30474:10;30487:26;30495:4;30501:2;30505;30509:3;30487:7;:26::i;:::-;30516:10;30487:39;;;;-1:-1:-1;30612:4:105;30605:11;;;30644;;;:24;;;;;30667:1;30659:4;:9;;;;30644:24;:39;;;;;30679:4;30672;:11;;;30644:39;30640:847;;;30707:4;:9;;30715:1;30707:9;:22;;;;30720:4;:9;;30728:1;30720:9;30707:22;30703:144;;;30791:37;30802:4;:9;;30810:1;30802:9;:21;;30818:5;30802:21;;;30814:1;30802:21;30825:2;30791:10;:37::i;:::-;30784:44;;;;;;;;;;;;;;;30703:144;30869:4;:11;;30877:3;30869:11;30865:121;;30939:28;30948:5;30955:2;30959:7;;;;30939:8;:28::i;30865:121::-;31007:4;:11;;31015:3;31007:11;31003:121;;31077:28;31086:5;31093:2;31097:7;;;;;31077:8;:28::i;31003:121::-;31194:4;:11;;31202:3;31194:11;31190:80;;31236:15;:13;:15::i;31190:80::-;31373:4;31365;:12;;;;:27;;;;;31388:4;31381;:11;;;31365:27;31361:112;;;31423:31;31434:4;31440:2;31444;31448:5;31423:10;:31::i;31361:112::-;31547:6;:14;;31557:4;31547:14;:28;;;;-1:-1:-1;31565:10:105;;;;;31547:28;31543:93;;;31620:1;31595:5;:15;;;31611:5;31595:22;;;;;;;;;:::i;:::-;:26;;;;:22;;;;;;:26;31543:93;31682:9;:26;;31695:13;31682:26;31678:92;;31728:27;31737:9;31748:1;31751:3;31728:8;:27::i;:::-;31851:26;31860:5;31867:3;31872:4;31851:8;:26::i;:::-;31844:33;;;;;;;;;;;;;25555:6339;;;;;;;:::o;3092:2334::-;3639:4;3633:11;;3555:4;3358:31;3347:43;;3418:13;3358:31;3757:2;3457:13;;3347:43;3364:24;3358:31;3457:13;;;3347:43;;;;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3418:13;4185:11;3364:24;3358:31;3457:13;;;3347:43;3418:13;4280:11;3364:24;3358:31;3457:13;;;3347:43;3364:24;3358:31;3457:13;;;3347:43;3133:12;;4420:13;;3633:11;;3457:13;;;;4185:11;3133:12;4500:84;4525:2;4522:1;4519:9;4500:84;;;3374:13;3364:24;;3358:31;3347:43;;3378:2;3418:13;;;;4580:1;3457:13;;;;4543:1;4536:9;4500:84;;;4504:14;4647:1;4643:2;4636:13;4742:5;4738:2;4734:14;4727:5;4722:27;4816:1;4802:15;;4837:6;4861:1;4856:273;;;;5196:1;5186:11;;4830:369;;4856:273;4888:8;4946:22;;;;5025:1;5020:22;;;;5112:1;5102:11;;4881:234;;4946:22;4965:1;4955:11;;4946:22;;5020;5039:1;5029:11;;4881:234;;4830:369;-1:-1:-1;;;5322:14:105;;;5305:32;;5365:19;5361:30;5397:3;5393:16;;;;5358:52;;3092:2334;-1:-1:-1;3092:2334:105:o;21610:1831::-;21683:11;21794:14;21811:24;21823:11;21811;:24::i;:::-;21794:41;;21943:1;21936:5;21932:13;21929:33;;;21958:1;21955;21948:12;21929:33;22091:2;22079:15;;;22032:20;22521:5;22518:1;22514:13;22556:4;22592:1;22577:343;22602:2;22599:1;22596:9;22577:343;;;22725:2;22713:15;;;22662:20;22760:12;;;22774:1;22756:20;22797:42;;;;22865:1;22860:42;;;;22749:153;;22797:42;22255:1;22248:12;;;22288:2;22281:13;;;22333:2;22320:16;;22806:31;;22797:42;;22860;22255:1;22248:12;;;22288:2;22281:13;;;22333:2;22320:16;;22869:31;;22749:153;-1:-1:-1;;22620:1:105;22613:9;22577:343;;;22581:14;23030:4;23024:11;23009:26;;23116:7;23110:4;23107:17;23097:124;;23158:10;23155:1;23148:21;23200:2;23197:1;23190:13;23097:124;-1:-1:-1;;23348:2:105;23337:14;;;;23325:10;23321:31;23318:1;23314:39;23382:16;;;;23400:10;23378:33;;21610:1831;-1:-1:-1;;;21610:1831:105:o;18720:823::-;18789:12;18876:18;;:::i;:::-;18944:4;18935:13;;18996:5;:8;;;19007:1;18996:12;18980:28;;:5;:12;;;:28;;;18976:95;;19028:28;;;;;2114:2:257;19028:28:105;;;2096:21:257;2153:2;2133:18;;;2126:30;2192:20;2172:18;;;2165:48;2230:18;;19028:28:105;;;;;;;;18976:95;19160:8;;;;;19193:12;;;;;19182:23;;;;;;;19219:20;;;;;19160:8;19351:13;;;19347:90;;19412:6;19421:1;19412:10;19384:5;:15;;;19400:8;19384:25;;;;;;;;;:::i;:::-;:38;;;;:25;;;;;;:38;19347:90;19513:13;:11;:13::i;:::-;19506:20;18720:823;-1:-1:-1;;;;;18720:823:105:o;2645:339::-;2706:11;2770:18;;;;2779:8;;;;2770:18;;;;;;2769:25;;;;;2786:1;2833:2;:9;;;2827:16;;;;;2826:22;;2825:32;;;;;;;2887:9;;2886:15;2769:25;2944:21;;2964:1;2944:21;;;2955:6;2944:21;2929:11;;;;;:37;;-1:-1:-1;;;2645:339:105;;;;:::o;13581:2026::-;13678:12;13764:18;;:::i;:::-;13832:4;13823:13;;13864:17;13924:5;:8;;;13935:1;13924:12;13908:28;;:5;:12;;;:28;;;13904:97;;13956:30;;;;;2461:2:257;13956:30:105;;;2443:21:257;2500:2;2480:18;;;2473:30;2539:22;2519:18;;;2512:50;2579:18;;13956:30:105;2259:344:257;13904:97:105;14071:7;:12;;14082:1;14071:12;:28;;;;14087:7;:12;;14098:1;14087:12;14071:28;14067:947;;;14119:9;14131:5;:15;;;14147:6;14131:23;;;;;;;;;:::i;:::-;;;;;14119:35;;14195:2;14188:9;;:3;:9;;;:25;;;;;14201:7;:12;;14212:1;14201:12;14188:25;14187:58;;;;14226:2;14219:9;;:3;:9;;;;:25;;;;;14232:7;:12;;14243:1;14232:12;14219:25;14172:73;;14101:159;14067:947;;;14357:7;:12;;14368:1;14357:12;14353:661;;14418:1;14410:3;14404:15;;;;14389:30;;14353:661;;;14522:7;:12;;14533:1;14522:12;14518:496;;14582:1;14575:3;14569:14;;;14554:29;;14518:496;;;14703:7;:12;;14714:1;14703:12;14699:315;;14791:4;14785:2;14776:11;;;14775:20;14761:10;14818:8;;;14814:84;;14878:1;14871:3;14865:14;;;14850:29;;14814:84;14919:3;:8;;14926:1;14919:8;14915:85;;14980:1;14972:3;14966:15;;;;14951:30;;14915:85;14717:297;14699:315;15090:8;;;;;15168:12;;;;15157:23;;;;;15324:178;;;;15415:1;15389:22;15392:5;15400:6;15392:14;15408:2;15389;:22::i;:::-;:27;;;;;;;15375:42;;15384:1;15375:42;15360:57;:12;;;:57;15324:178;;;15471:12;;;;;15486:1;15471:16;15456:31;;;;15324:178;15577:13;:11;:13::i;:::-;15570:20;13581:2026;-1:-1:-1;;;;;;;;13581:2026:105:o;31940:8733::-;32027:10;32089;32097:2;32089:10;;;;32128:11;;;:44;;;32154:1;32144:6;:11;;;;:27;;;;;32168:3;32159:6;:12;;;32144:27;32124:8490;;;32213:4;32206:11;;32337:6;32397:3;32392:25;;;;32472:3;32467:25;;;;32546:3;32541:25;;;;32621:3;32616:25;;;;32695:3;32690:25;;;;32768:3;32763:25;;;;32842:3;32837:25;;;;32330:532;;32392:25;32411:4;32403:12;;32392:25;;32467;32486:4;32478:12;;32467:25;;32541;32560:4;32552:12;;32541:25;;32616;32635:4;32627:12;;32616:25;;32690;32709:4;32701:12;;32690:25;;32763;32782:4;32774:12;;32763:25;;32837;32856:4;32848:12;;32330:532;;32925:4;:12;;32933:4;32925:12;32921:4023;;-1:-1:-1;;;32976:9:105;32968:26;;32989:4;32984:1;32976:9;;;32975:18;32968:26;32961:33;;32921:4023;33062:4;:12;;33070:4;33062:12;33058:3886;;-1:-1:-1;;;33113:9:105;33105:26;;33126:4;33121:1;33113:9;;;33112:18;33105:26;33098:33;;33058:3886;33199:4;:12;;33207:4;33199:12;33195:3749;;33264:4;33259:1;33251:9;;;33250:18;33297:27;33251:9;33300:11;;;;33313:2;:10;;;33297:2;:27::i;:::-;33290:34;;;;;;;33195:3749;33393:4;:12;;33401:4;33393:12;33389:3555;;-1:-1:-1;;;33436:17:105;;;33448:4;33443:9;;33436:17;33429:24;;33389:3555;33522:4;:11;;33530:3;33522:11;33518:3426;;-1:-1:-1;;;33564:17:105;;;33576:4;33571:9;;33564:17;33557:24;;33518:3426;33650:4;:12;;33658:4;33650:12;33646:3298;;33693:21;33702:2;33696:8;;:2;:8;;;;33711:2;33706;:7;33693:2;:21::i;:::-;33686:28;;;;;;33646:3298;33963:4;:12;;33971:4;33963:12;33959:2985;;34006:2;33999:9;;;;;;33959:2985;34077:4;:12;;34085:4;34077:12;34073:2871;;34120:2;34113:9;;;;;;34073:2871;34191:4;:12;;34199:4;34191:12;34187:2757;;34234:2;34227:9;;;;;;34187:2757;34305:4;:12;;34313:4;34305:12;34301:2643;;34348:2;34341:9;;;;;;34301:2643;34422:4;:12;;34430:4;34422:12;34418:2526;;34465:2;34458:9;;;;;;34418:2526;34582:4;:12;;34590:4;34582:12;34578:2366;;34625:2;34618:9;;;;;;34578:2366;34696:4;:12;;34704:4;34696:12;34692:2252;;34739:2;34732:9;;;;;;34692:2252;34810:4;:12;;34818:4;34810:12;34806:2138;;34853:2;34846:9;;;;;;34806:2138;34924:4;:12;;34932:4;34924:12;34920:2024;;34967:2;34960:9;;;;;;34920:2024;35038:4;:12;;35046:4;35038:12;35034:1910;;35081:2;35074:9;;;;;;35034:1910;35152:4;:12;;35160:4;35152:12;35148:1796;;35195:2;35188:9;;;;;;35148:1796;35267:4;:12;;35275:4;35267:12;35263:1681;;35310:2;35303:9;;;;;;35263:1681;35380:4;:12;;35388:4;35380:12;35376:1568;;35423:2;35416:9;;;;;;35376:1568;35494:4;:12;;35502:4;35494:12;35490:1454;;35537:2;35530:9;;;;;;35490:1454;35686:4;:12;;35694:4;35686:12;35682:1262;;-1:-1:-1;;;35730:7:105;;;35722:16;;35682:1262;35807:4;:12;;35815:4;35807:12;35803:1141;;-1:-1:-1;;;35851:7:105;;;35843:16;;35803:1141;35927:4;:12;;35935:4;35927:12;35923:1021;;-1:-1:-1;;;35971:7:105;;;35963:16;;35923:1021;36048:4;:12;;36056:4;36048:12;36044:900;;-1:-1:-1;;;36092:7:105;;;36084:16;;36044:900;36168:4;:12;;36176:4;36168:12;36164:780;;-1:-1:-1;;;36212:7:105;;;36204:16;;36164:780;36287:4;:12;;36295:4;36287:12;36283:661;;-1:-1:-1;;;36331:7:105;;;36323:16;;36283:661;36407:4;:12;;36415:4;36407:12;36403:541;;-1:-1:-1;;;36451:7:105;;;36443:16;;36403:541;36527:4;:12;;36535:4;36527:12;36523:421;;-1:-1:-1;;;36572:7:105;;;36570:10;36563:17;;36523:421;36649:4;:12;;36657:4;36649:12;36645:299;;36710:2;36692:21;;36698:2;36692:21;;;:29;;36720:1;36692:29;;;36716:1;36692:29;36685:36;;;;;;;;36645:299;36791:4;:12;;36799:4;36791:12;36787:157;;36839:2;36834:7;;:2;:7;;;:15;;36848:1;36834:15;;36787:157;36896:29;;;;;2810:2:257;36896:29:105;;;2792:21:257;2849:2;2829:18;;;2822:30;2888:21;2868:18;;;2861:49;2927:18;;36896:29:105;2608:343:257;36787:157:105;32174:4784;32124:8490;;;37014:6;:14;;37024:4;37014:14;37010:3590;;37073:4;37066:11;;37148:3;37140:11;;;37136:549;;-1:-1:-1;;;37193:21:105;;;37179:36;;37136:549;37300:4;:12;;37308:4;37300:12;:28;;;;37316:4;:12;;37324:4;37316:12;37300:28;37296:389;;;37360:4;:12;;37368:4;37360:12;37356:83;;37409:3;;;37356:83;37464:8;37502:127;37514:10;37509:15;;:20;37502:127;;37594:8;37561:3;37594:8;;;;;37561:3;37502:127;;;37661:1;-1:-1:-1;37654:8:105;;-1:-1:-1;;37654:8:105;37010:3590;37752:6;:14;;37762:4;37752:14;37748:2852;;-1:-1:-1;;37797:8:105;37803:2;37797:8;;;;37790:15;;37748:2852;37872:6;:14;;37882:4;37872:14;37868:2732;;37917:42;37935:2;37940:1;37935:6;37945:1;37934:12;37929:2;:17;37921:26;;:3;:26;;;;37951:4;37920:35;37957:1;37917:2;:42::i;37868:2732::-;38026:6;:14;;38036:4;38026:14;38022:2578;;38071:45;38089:2;38094:1;38089:6;38099:1;38088:12;38083:2;:17;38075:26;;:3;:26;;;;38105:6;38074:37;38113:2;38071;:45::i;38022:2578::-;38184:6;:14;;38194:4;38184:14;38180:2420;;-1:-1:-1;;38235:21:105;38254:1;38249;38244:6;;38243:12;38235:21;;38292:36;;;38363:5;38358:10;;38235:21;;;;;38357:18;38350:25;;38180:2420;38442:6;:14;;38452:4;38442:14;38438:2162;;38487:3;38480:10;;;;;38438:2162;38558:6;:14;;38568:4;38558:14;38554:2046;;38618:2;38623:1;38618:6;38628:1;38617:12;38612:2;:17;38604:26;;:3;:26;;;;38634:4;38603:35;38596:42;;;;;38554:2046;38707:6;:14;;38717:4;38707:14;38703:1897;;38767:2;38772:1;38767:6;38777:1;38766:12;38761:2;:17;38753:26;;:3;:26;;;;38783:6;38752:37;38745:44;;;;;38703:1897;38858:6;:14;;38868:4;38858:14;38854:1746;;-1:-1:-1;;38909:26:105;38933:1;38928;38923:6;;38922:12;38917:2;:17;38909:26;;38971:41;;;39047:5;39042:10;;38909:26;;;;;39041:18;39034:25;;38854:1746;39127:6;:14;;39137:4;39127:14;39123:1477;;-1:-1:-1;;39184:4:105;39178:34;39210:1;39205;39200:6;;39199:12;39194:2;:17;39178:34;;39268:27;;;39248:48;;;39326:10;;39179:9;;;39178:34;;39325:18;39318:25;;39123:1477;39411:6;:14;;39421:4;39411:14;39407:1193;;-1:-1:-1;;39468:6:105;39462:36;39496:1;39491;39486:6;;39485:12;39480:2;:17;39462:36;;39554:29;;;39534:50;;;39614:10;;39463:11;;;39462:36;;39613:18;39606:25;;39407:1193;39700:6;:14;;39710:4;39700:14;39696:904;;-1:-1:-1;;39751:20:105;39769:1;39764;39759:6;;39758:12;39751:20;;39807:36;;;39879:5;39873:11;;39751:20;;;;;39872:19;39865:26;;39696:904;39959:6;:14;;39969:4;39959:14;39955:645;;40004:2;39997:9;;;;;39955:645;40075:6;:14;;40085:4;40075:14;40071:529;;-1:-1:-1;;40126:25:105;40149:1;40144;40139:6;;40138:12;40133:2;:17;40126:25;;40187:41;;;40264:5;40258:11;;40126:25;;;;;40257:19;40250:26;;40071:529;40343:6;:14;;40353:4;40343:14;40339:261;;40388:3;40381:10;;;;;40339:261;40458:6;:14;;40468:4;40458:14;40454:146;;40503:2;40496:9;;;;;19824:782;19910:12;19997:18;;:::i;:::-;-1:-1:-1;20065:4:105;20172:2;20160:14;;;;20152:41;;;;;;;3158:2:257;20152:41:105;;;3140:21:257;3197:2;3177:18;;;3170:30;3236:16;3216:18;;;3209:44;3270:18;;20152:41:105;2956:338:257;20152:41:105;20289:14;;;;;;;:30;;;20307:12;20289:30;20285:102;;;20368:4;20339:5;:15;;;20355:9;20339:26;;;;;;;;;:::i;:::-;:33;;;;:26;;;;;;:33;20285:102;20442:12;;;;;20431:23;;;;:8;;;:23;20498:1;20483:16;;;20468:31;;;20576:13;:11;:13::i;5467:7728::-;5510:12;5596:18;;:::i;:::-;-1:-1:-1;5774:15:105;;:18;;;;5664:4;5934:18;;;;5978;;;;6022;;;;;5664:4;;5754:17;;;;5934:18;5978;6112;;;6126:4;6112:18;6108:6777;;6162:2;6191:4;6186:9;;:14;6182:144;;6302:4;6297:9;;6289:4;:18;6283:24;6182:144;6347:2;:7;;6353:1;6347:7;6343:161;;6383:10;;;;;6415:16;;;;;;;;6383:10;-1:-1:-1;6343:161:105;;;6483:2;6478:7;;6343:161;6132:386;6108:6777;;;6620:10;:18;;6634:4;6620:18;6616:6269;;1745:10;6658:14;;6616:6269;;;6756:10;:18;;6770:4;6756:18;6752:6133;;6799:1;6794:6;;6752:6133;;;6924:10;:18;;6938:4;6924:18;6920:5965;;6977:4;6962:12;;;:19;6999:26;;;:14;;;:26;7050:13;:11;:13::i;:::-;7043:20;;;;;;;;;5467:7728;:::o;6920:5965::-;7189:10;:18;;7203:4;7189:18;7185:5700;;7340:14;;;7336:2708;7185:5700;7336:2708;7510:22;;;;;7506:2538;;7635:10;7648:27;7656:2;7661:10;7656:15;7673:1;7648:7;:27::i;:::-;7759:17;;;;7635:40;;-1:-1:-1;7759:17:105;7737:19;7909:14;7928:1;7903:26;7899:131;;7971:36;7995:11;1277:21:106;1426:15;;;1467:8;1461:4;1454:22;1595:4;1582:18;;1602:19;1578:44;1624:11;1575:61;;1222:430;7971:36:105;7957:50;;7899:131;8116:20;;;;;8083:54;;;;;;;;3472:25:257;;;8083:54:105;3533:23:257;;;3513:18;;;3506:51;8052:11:105;;;;8083:19;:6;:19;;;;3445:18:257;;8083:54:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8051:86;;;;8364:1;8360:2;8356:10;8461:9;8458:1;8454:17;8543:6;8536:5;8533:17;8530:40;;;8563:5;8553:15;;8530:40;;8646:6;8642:2;8639:14;8636:34;;;8666:2;8656:12;;8636:34;8772:3;8767:1;8759:6;8755:14;8750:3;8746:24;8742:34;8735:41;;8872:3;8868:1;8856:9;8847:6;8844:1;8840:14;8836:30;8832:38;8828:48;8821:55;;9027:1;9023;9019;9007:9;9004:1;9000:17;8996:25;8992:33;8988:41;9154:1;9150;9146;9137:6;9125:9;9122:1;9118:17;9114:30;9110:38;9106:46;9102:54;9084:72;;9285:10;9281:15;9275:4;9271:26;9263:34;;9401:3;9393:4;9389:9;9384:3;9380:19;9377:28;9370:35;;;;9547:33;9556:2;9561:10;9556:15;9573:1;9576:3;9547:8;:33::i;:::-;9602:20;;;:38;;;;;;;;;-1:-1:-1;7506:2538:105;;-1:-1:-1;;;7506:2538:105;;9759:18;;;;;9755:289;;9929:2;9924:7;;7185:5700;;9755:289;9983:10;9978:15;;2053:3;10015:10;;9755:289;7185:5700;;;10173:10;:18;;10187:4;10173:18;10169:2716;;10327:15;;;1824:1;10327:15;;:34;;-1:-1:-1;10346:15:105;;;1859:1;10346:15;10327:34;:57;;;-1:-1:-1;10365:19:105;;;1936:1;10365:19;10327:57;10323:1593;;;10413:2;10408:7;;10169:2716;;10323:1593;10539:23;;;;;10535:1381;;10586:10;10599:27;10607:2;10612:10;10607:15;10624:1;10599:7;:27::i;:::-;10702:17;;;;10586:40;;-1:-1:-1;10945:1:105;10937:10;;11039:1;11035:17;11114:13;;;11111:32;;;11136:5;11130:11;;11111:32;11422:14;;;11228:1;11418:22;;;11414:32;;;;11311:26;11335:1;11220:10;;;11315:18;;;11311:26;11410:43;11216:20;;11518:12;11646:17;;;:23;11714:1;11691:20;;;:24;11224:2;-1:-1:-1;11224:2:105;7185:5700;;10169:2716;12118:10;:18;;12132:4;12118:18;12114:771;;12228:2;:7;;12234:1;12228:7;12224:647;;12321:14;;;;;:40;;-1:-1:-1;12339:22:105;;;1978:1;12339:22;12321:40;:62;;;-1:-1:-1;12365:18:105;;;1897:1;12365:18;12321:62;12317:404;;;12416:1;12411:6;;12224:647;;12317:404;12462:15;;;1824:1;12462:15;;:34;;-1:-1:-1;12481:15:105;;;1859:1;12481:15;12462:34;:61;;;-1:-1:-1;12500:23:105;;;2021:1;12500:23;12462:61;:84;;;-1:-1:-1;12527:19:105;;;1936:1;12527:19;12462:84;12458:263;;;12579:1;12574:6;;7185:5700;;12224:647;12772:10;12767:15;;2087:4;12804:11;;12224:647;12960:15;;;;;:23;;;;:18;;;;:23;;;;12997:15;;:23;;;:18;;;;:23;-1:-1:-1;13086:12:105;;;;13075:23;;;:8;;;:23;13142:1;13127:16;13112:31;;;;;13165:13;:11;:13::i;15948:2480::-;16042:12;16128:18;;:::i;:::-;-1:-1:-1;16196:4:105;16228:10;16336:13;;;16345:4;16336:13;16332:1705;;-1:-1:-1;16375:8:105;;;;16332:1705;;;16494:5;:13;;16503:4;16494:13;16490:1547;;16527:14;;;:8;;;:14;16490:1547;;;16657:5;:13;;16666:4;16657:13;16653:1384;;-1:-1:-1;16696:8:105;;;;16653:1384;;;16815:5;:13;;16824:4;16815:13;16811:1226;;16848:14;;;:8;;;:14;16811:1226;;;16989:5;:13;;16998:4;16989:13;16985:1052;;17116:9;17062:17;17042;;;17062;;;;17042:37;17123:2;17116:9;;;;;17098:8;;;:28;17144:22;:8;;;:22;16985:1052;;;17303:5;:13;;17312:4;17303:13;17299:738;;17370:11;17356;;;17370;;;17356:25;17425:2;17418:9;;;;;17400:8;;;:28;17446:22;:8;;;:22;17299:738;;;17627:5;:13;;17636:4;17627:13;17623:414;;17697:3;17678:23;;17684:3;17678:23;;;;;;;:::i;:::-;;17660:42;;:8;;;:42;17738:23;;;;;;;;;;;;;:::i;:::-;;17720:42;;:8;;;:42;17623:414;;;17931:5;:13;;17940:4;17931:13;17927:110;;17981:3;17975:9;;:3;:9;;;;;;;:::i;:::-;;17964:20;;;;:8;;;:20;18013:9;;;;;;;;;;;:::i;:::-;;18002:20;;:8;;;:20;17927:110;18130:14;;;;18126:85;;18193:3;18164:5;:15;;;18180:9;18164:26;;;;;;;;;:::i;:::-;:32;;;;:26;;;;;;:32;18126:85;18265:12;;;;;18254:23;;;;:8;;;:23;18321:1;18306:16;;;18291:31;;;18398:13;:11;:13::i;:::-;18391:20;15948:2480;-1:-1:-1;;;;;;;15948:2480:105:o;23777:1654::-;23953:14;23970:24;23982:11;23970;:24::i;:::-;23953:41;;24102:1;24095:5;24091:13;24088:33;;;24117:1;24114;24107:12;24088:33;24256:2;24450:15;;;24275:2;24264:14;;24252:10;24248:31;24245:1;24241:39;24406:16;;;24191:20;;24391:10;24380:22;;;24376:27;24366:38;24363:60;24892:5;24889:1;24885:13;24963:1;24948:343;24973:2;24970:1;24967:9;24948:343;;;25096:2;25084:15;;;25033:20;25131:12;;;25145:1;25127:20;25168:42;;;;25236:1;25231:42;;;;25120:153;;25168:42;22255:1;22248:12;;;22288:2;22281:13;;;22333:2;22320:16;;25177:31;;25168:42;;25231;22255:1;22248:12;;;22288:2;22281:13;;;22333:2;22320:16;;25240:31;;25120:153;-1:-1:-1;;24991:1:105;24984:9;24948:343;;;-1:-1:-1;;25390:4:105;25383:18;-1:-1:-1;;;;23777:1654:105:o;20810:586::-;21132:20;;;21156:7;21132:32;21125:3;:40;;;21238:14;;21293:17;;21287:24;;;21279:72;;;;;;;4209:2:257;21279:72:105;;;4191:21:257;4248:2;4228:18;;;4221:30;4287:34;4267:18;;;4260:62;4358:5;4338:18;;;4331:33;4381:19;;21279:72:105;4007:399:257;21279:72:105;21365:14;20810:586;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;467:347:257:-;518:8;528:6;582:3;575:4;567:6;563:17;559:27;549:55;;600:1;597;590:12;549:55;-1:-1:-1;623:20:257;;666:18;655:30;;652:50;;;698:1;695;688:12;652:50;735:4;727:6;723:17;711:29;;787:3;780:4;771:6;763;759:19;755:30;752:39;749:59;;;804:1;801;794:12;749:59;467:347;;;;;:::o;819:717::-;909:6;917;925;933;986:2;974:9;965:7;961:23;957:32;954:52;;;1002:1;999;992:12;954:52;1042:9;1029:23;1071:18;1112:2;1104:6;1101:14;1098:34;;;1128:1;1125;1118:12;1098:34;1167:58;1217:7;1208:6;1197:9;1193:22;1167:58;:::i;:::-;1244:8;;-1:-1:-1;1141:84:257;-1:-1:-1;1332:2:257;1317:18;;1304:32;;-1:-1:-1;1348:16:257;;;1345:36;;;1377:1;1374;1367:12;1345:36;;1416:60;1468:7;1457:8;1446:9;1442:24;1416:60;:::i;:::-;819:717;;;;-1:-1:-1;1495:8:257;-1:-1:-1;;;;819:717:257:o;1723:184::-;1775:77;1772:1;1765:88;1872:4;1869:1;1862:15;1896:4;1893:1;1886:15;3568:245;3647:6;3655;3708:2;3696:9;3687:7;3683:23;3679:32;3676:52;;;3724:1;3721;3714:12;3676:52;-1:-1:-1;;3747:16:257;;3803:2;3788:18;;;3782:25;3747:16;;3782:25;;-1:-1:-1;3568:245:257:o;3818:184::-;3870:77;3867:1;3860:88;3967:4;3964:1;3957:15;3991:4;3988:1;3981:15" func init() { if err := json.Unmarshal([]byte(MIPSStorageLayoutJSON), MIPSStorageLayout); err != nil { diff --git a/op-challenger/game/fault/player.go b/op-challenger/game/fault/player.go index 8582b3ff8829..c4a189e1cdab 100644 --- a/op-challenger/game/fault/player.go +++ b/op-challenger/game/fault/player.go @@ -5,6 +5,7 @@ import ( "context" "fmt" + "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/responder" @@ -169,12 +170,13 @@ func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, lo return fmt.Errorf("failed to get the trace provider's absolute prestate: %w", err) } providerPrestateHash := crypto.Keccak256(providerPrestate) + providerPrestateHash[0] = mipsevm.VMStatusUnfinished onchainPrestate, err := loader.FetchAbsolutePrestateHash(ctx) if err != nil { return fmt.Errorf("failed to get the onchain absolute prestate: %w", err) } if !bytes.Equal(providerPrestateHash, onchainPrestate[:]) { - return fmt.Errorf("trace provider's absolute prestate does not match onchain absolute prestate") + return fmt.Errorf("trace provider's absolute prestate does not match onchain absolute prestate: Provider: %s | Chain %s", common.Bytes2Hex(providerPrestateHash), onchainPrestate.Hex()) } return nil } diff --git a/op-challenger/game/fault/player_test.go b/op-challenger/game/fault/player_test.go index b31e9edfd3af..f74dfa19c791 100644 --- a/op-challenger/game/fault/player_test.go +++ b/op-challenger/game/fault/player_test.go @@ -6,6 +6,7 @@ import ( "fmt" "testing" + "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-node/testlog" "github.com/ethereum/go-ethereum/common" @@ -119,6 +120,7 @@ func TestValidateAbsolutePrestate(t *testing.T) { t.Run("ValidPrestates", func(t *testing.T) { prestate := []byte{0x00, 0x01, 0x02, 0x03} prestateHash := crypto.Keccak256(prestate) + prestateHash[0] = mipsevm.VMStatusUnfinished mockTraceProvider := newMockTraceProvider(false, prestate) mockLoader := newMockPrestateLoader(false, common.BytesToHash(prestateHash)) err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) diff --git a/op-challenger/game/fault/trace/alphabet/provider.go b/op-challenger/game/fault/trace/alphabet/provider.go index 9b625d052156..70f8931fe35d 100644 --- a/op-challenger/game/fault/trace/alphabet/provider.go +++ b/op-challenger/game/fault/trace/alphabet/provider.go @@ -6,6 +6,7 @@ import ( "math/big" "strings" + "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" @@ -78,7 +79,7 @@ func BuildAlphabetPreimage(i uint64, letter string) []byte { func alphabetStateHash(state []byte) common.Hash { h := crypto.Keccak256Hash(state) // In the alphabet game, we ignore the VM status code and always set it to 1. - h[0] = 1 + h[0] = mipsevm.VMStatusInvalid return h } diff --git a/op-challenger/game/fault/types/types.go b/op-challenger/game/fault/types/types.go index 69797d457dbb..b9c1965dbafb 100644 --- a/op-challenger/game/fault/types/types.go +++ b/op-challenger/game/fault/types/types.go @@ -110,13 +110,6 @@ type TraceProvider interface { StateHash(ctx context.Context, state []byte) (common.Hash, error) } -const ( - VMStatusValid = 0 - VMStatusInvalid = 1 - VMStatusPanic = 2 - VMStatusUnfinished = 3 -) - // ClaimData is the core of a claim. It must be unique inside a specific game. type ClaimData struct { Value common.Hash diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 2113e5a9cb3a..390f9eb0d3c8 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -298,81 +298,81 @@ LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 12957) LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10755) LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34524) LibPosition_Test:test_pos_correctness_succeeds() (gas: 38689) -MIPS_Test:test_add_succeeds() (gas: 122488) -MIPS_Test:test_addiSign_succeeds() (gas: 122479) -MIPS_Test:test_addi_succeeds() (gas: 122676) -MIPS_Test:test_addu_succeeds() (gas: 122530) -MIPS_Test:test_addui_succeeds() (gas: 122738) -MIPS_Test:test_and_succeeds() (gas: 122549) -MIPS_Test:test_andi_succeeds() (gas: 122482) -MIPS_Test:test_beq_succeeds() (gas: 202937) -MIPS_Test:test_bgez_succeeds() (gas: 121775) -MIPS_Test:test_bgtz_succeeds() (gas: 121696) -MIPS_Test:test_blez_succeeds() (gas: 121652) -MIPS_Test:test_bltz_succeeds() (gas: 121795) -MIPS_Test:test_bne_succeeds() (gas: 121861) +MIPS_Test:test_add_succeeds() (gas: 122424) +MIPS_Test:test_addiSign_succeeds() (gas: 122415) +MIPS_Test:test_addi_succeeds() (gas: 122612) +MIPS_Test:test_addu_succeeds() (gas: 122466) +MIPS_Test:test_addui_succeeds() (gas: 122674) +MIPS_Test:test_and_succeeds() (gas: 122485) +MIPS_Test:test_andi_succeeds() (gas: 122418) +MIPS_Test:test_beq_succeeds() (gas: 202809) +MIPS_Test:test_bgez_succeeds() (gas: 121711) +MIPS_Test:test_bgtz_succeeds() (gas: 121632) +MIPS_Test:test_blez_succeeds() (gas: 121588) +MIPS_Test:test_bltz_succeeds() (gas: 121731) +MIPS_Test:test_bne_succeeds() (gas: 121797) MIPS_Test:test_branch_inDelaySlot_fails() (gas: 85999) -MIPS_Test:test_brk_succeeds() (gas: 122160) -MIPS_Test:test_clo_succeeds() (gas: 122217) -MIPS_Test:test_clone_succeeds() (gas: 122113) -MIPS_Test:test_clz_succeeds() (gas: 122688) -MIPS_Test:test_div_succeeds() (gas: 122667) -MIPS_Test:test_divu_succeeds() (gas: 122652) -MIPS_Test:test_exit_succeeds() (gas: 122160) -MIPS_Test:test_fcntl_succeeds() (gas: 204409) +MIPS_Test:test_brk_succeeds() (gas: 122096) +MIPS_Test:test_clo_succeeds() (gas: 122153) +MIPS_Test:test_clone_succeeds() (gas: 122049) +MIPS_Test:test_clz_succeeds() (gas: 122624) +MIPS_Test:test_div_succeeds() (gas: 122603) +MIPS_Test:test_divu_succeeds() (gas: 122588) +MIPS_Test:test_exit_succeeds() (gas: 122096) +MIPS_Test:test_fcntl_succeeds() (gas: 204281) MIPS_Test:test_illegal_instruction_fails() (gas: 91462) MIPS_Test:test_invalid_root_fails() (gas: 435636) -MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 120805) -MIPS_Test:test_jal_succeeds() (gas: 120794) -MIPS_Test:test_jalr_succeeds() (gas: 121913) -MIPS_Test:test_jr_succeeds() (gas: 121607) +MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 120741) +MIPS_Test:test_jal_succeeds() (gas: 120730) +MIPS_Test:test_jalr_succeeds() (gas: 121849) +MIPS_Test:test_jr_succeeds() (gas: 121543) MIPS_Test:test_jump_inDelaySlot_fails() (gas: 85367) -MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120549) -MIPS_Test:test_jump_succeeds() (gas: 120479) -MIPS_Test:test_lb_succeeds() (gas: 127720) -MIPS_Test:test_lbu_succeeds() (gas: 127618) -MIPS_Test:test_lh_succeeds() (gas: 127741) -MIPS_Test:test_lhu_succeeds() (gas: 127658) -MIPS_Test:test_ll_succeeds() (gas: 127880) -MIPS_Test:test_lui_succeeds() (gas: 121761) -MIPS_Test:test_lw_succeeds() (gas: 127509) -MIPS_Test:test_lwl_succeeds() (gas: 242182) -MIPS_Test:test_lwr_succeeds() (gas: 242470) -MIPS_Test:test_mfhi_succeeds() (gas: 122122) -MIPS_Test:test_mflo_succeeds() (gas: 122251) -MIPS_Test:test_mmap_succeeds() (gas: 119080) -MIPS_Test:test_movn_succeeds() (gas: 203609) -MIPS_Test:test_movz_succeeds() (gas: 203477) -MIPS_Test:test_mthi_succeeds() (gas: 122166) -MIPS_Test:test_mtlo_succeeds() (gas: 122274) -MIPS_Test:test_mul_succeeds() (gas: 121766) -MIPS_Test:test_mult_succeeds() (gas: 122470) -MIPS_Test:test_multu_succeeds() (gas: 122507) -MIPS_Test:test_nor_succeeds() (gas: 122599) -MIPS_Test:test_or_succeeds() (gas: 122556) -MIPS_Test:test_ori_succeeds() (gas: 122559) -MIPS_Test:test_preimage_read_succeeds() (gas: 234476) -MIPS_Test:test_preimage_write_succeeds() (gas: 127102) -MIPS_Test:test_prestate_exited_succeeds() (gas: 113346) -MIPS_Test:test_sb_succeeds() (gas: 160591) -MIPS_Test:test_sc_succeeds() (gas: 160785) -MIPS_Test:test_sh_succeeds() (gas: 160628) -MIPS_Test:test_sll_succeeds() (gas: 121727) -MIPS_Test:test_sllv_succeeds() (gas: 121956) -MIPS_Test:test_slt_succeeds() (gas: 204804) -MIPS_Test:test_sltu_succeeds() (gas: 122773) -MIPS_Test:test_sra_succeeds() (gas: 121978) -MIPS_Test:test_srav_succeeds() (gas: 122246) -MIPS_Test:test_srl_succeeds() (gas: 121809) -MIPS_Test:test_srlv_succeeds() (gas: 121974) -MIPS_Test:test_step_abi_succeeds() (gas: 58481) -MIPS_Test:test_sub_succeeds() (gas: 122583) -MIPS_Test:test_subu_succeeds() (gas: 122580) -MIPS_Test:test_sw_succeeds() (gas: 160603) -MIPS_Test:test_swl_succeeds() (gas: 160664) -MIPS_Test:test_swr_succeeds() (gas: 160739) -MIPS_Test:test_xor_succeeds() (gas: 122584) -MIPS_Test:test_xori_succeeds() (gas: 122636) +MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120485) +MIPS_Test:test_jump_succeeds() (gas: 120415) +MIPS_Test:test_lb_succeeds() (gas: 127656) +MIPS_Test:test_lbu_succeeds() (gas: 127554) +MIPS_Test:test_lh_succeeds() (gas: 127677) +MIPS_Test:test_lhu_succeeds() (gas: 127594) +MIPS_Test:test_ll_succeeds() (gas: 127816) +MIPS_Test:test_lui_succeeds() (gas: 121697) +MIPS_Test:test_lw_succeeds() (gas: 127445) +MIPS_Test:test_lwl_succeeds() (gas: 242054) +MIPS_Test:test_lwr_succeeds() (gas: 242342) +MIPS_Test:test_mfhi_succeeds() (gas: 122058) +MIPS_Test:test_mflo_succeeds() (gas: 122187) +MIPS_Test:test_mmap_succeeds() (gas: 119016) +MIPS_Test:test_movn_succeeds() (gas: 203481) +MIPS_Test:test_movz_succeeds() (gas: 203349) +MIPS_Test:test_mthi_succeeds() (gas: 122102) +MIPS_Test:test_mtlo_succeeds() (gas: 122210) +MIPS_Test:test_mul_succeeds() (gas: 121702) +MIPS_Test:test_mult_succeeds() (gas: 122406) +MIPS_Test:test_multu_succeeds() (gas: 122443) +MIPS_Test:test_nor_succeeds() (gas: 122535) +MIPS_Test:test_or_succeeds() (gas: 122492) +MIPS_Test:test_ori_succeeds() (gas: 122495) +MIPS_Test:test_preimage_read_succeeds() (gas: 234412) +MIPS_Test:test_preimage_write_succeeds() (gas: 127038) +MIPS_Test:test_prestate_exited_succeeds() (gas: 113282) +MIPS_Test:test_sb_succeeds() (gas: 160527) +MIPS_Test:test_sc_succeeds() (gas: 160721) +MIPS_Test:test_sh_succeeds() (gas: 160564) +MIPS_Test:test_sll_succeeds() (gas: 121663) +MIPS_Test:test_sllv_succeeds() (gas: 121892) +MIPS_Test:test_slt_succeeds() (gas: 204676) +MIPS_Test:test_sltu_succeeds() (gas: 122709) +MIPS_Test:test_sra_succeeds() (gas: 121914) +MIPS_Test:test_srav_succeeds() (gas: 122182) +MIPS_Test:test_srl_succeeds() (gas: 121745) +MIPS_Test:test_srlv_succeeds() (gas: 121910) +MIPS_Test:test_step_abi_succeeds() (gas: 58417) +MIPS_Test:test_sub_succeeds() (gas: 122519) +MIPS_Test:test_subu_succeeds() (gas: 122516) +MIPS_Test:test_sw_succeeds() (gas: 160539) +MIPS_Test:test_swl_succeeds() (gas: 160600) +MIPS_Test:test_swr_succeeds() (gas: 160675) +MIPS_Test:test_xor_succeeds() (gas: 122520) +MIPS_Test:test_xori_succeeds() (gas: 122572) MerkleTrie_get_Test:test_get_corruptedProof_reverts() (gas: 5733) MerkleTrie_get_Test:test_get_extraProofElements_reverts() (gas: 58889) MerkleTrie_get_Test:test_get_invalidDataRemainder_reverts() (gas: 35845) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 9ba7c996aee2..956d409ecfcc 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,7 +16,7 @@ "src/L2/L2StandardBridge.sol": "0xe025dcccbf21d48828ecf588941c9ba04c91b87bdd177a653d3f1b265b0b02a8", "src/L2/L2ToL1MessagePasser.sol": "0xda56ba2e5b2c28fa8ca2df24077d49e96155a00ecc99cd0778d681be6ed166fe", "src/L2/SequencerFeeVault.sol": "0x37816035c992d38cf7e3d5a1846b02d017dd7bdca46abe6e5c5171b9ee6225ab", - "src/dispute/FaultDisputeGame.sol": "0x1ee46e383f6017c8a381c54ff26958659d54995c97144879586a0d827f4a82c8", + "src/dispute/FaultDisputeGame.sol": "0xf990d243b117e7ba7e765e1aee433adcd01cf20dcc7088065691b09ae204ae47", "src/legacy/DeployerWhitelist.sol": "0xf2129ec3da75307ba8e21bc943c332bb04704642e6e263149b5c8ee92dbcb7a8", "src/legacy/L1BlockNumber.sol": "0x30aae1fc85103476af0226b6e98c71c01feebbdc35d93401390b1ad438a37be6", "src/legacy/LegacyMessagePasser.sol": "0x5c08b0a663cc49d30e4e38540f6aefab19ef287c3ecd31c8d8c3decd5f5bd497", diff --git a/packages/contracts-bedrock/src/cannon/MIPS.sol b/packages/contracts-bedrock/src/cannon/MIPS.sol index ac09b8733f35..da9633534afa 100644 --- a/packages/contracts-bedrock/src/cannon/MIPS.sol +++ b/packages/contracts-bedrock/src/cannon/MIPS.sol @@ -119,23 +119,22 @@ contract MIPS { // Log the resulting MIPS state, for debugging log0(start, sub(to, start)) - function vmStatus(_exited, _exitCode) -> status_ { - switch _exited - case 1 { - switch _exitCode - // VMStatusValid - case 0 { status_ := 0 } - // VMStatusInvalid - case 1 { status_ := 1 } - // VMStatusPanic - default { status_ := 2 } - } - // VMStatusUnfinished - default { status_ := 3 } + // Determine the VM status + let status := 0 + switch exited + case 1 { + switch exitCode + // VMStatusValid + case 0 { status := 0 } + // VMStatusInvalid + case 1 { status := 1 } + // VMStatusPanic + default { status := 2 } } - let status := vmStatus(exited, exitCode) + // VMStatusUnfinished + default { status := 3 } - // Compute the hash of the resulting MIPS state + // Compute the hash of the resulting MIPS state and set the status byte out_ := keccak256(start, sub(to, start)) out_ := or(and(not(shl(248, 0xFF)), out_), shl(248, status)) } diff --git a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol index 3071b0d6a3a4..138f232a0002 100644 --- a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol +++ b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol @@ -85,7 +85,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { /// @param _blockOracle The block oracle, used for loading block hashes further back /// than the `BLOCKHASH` opcode allows as well as their estimated /// timestamps. - /// @custom:semver 0.0.8 + /// @custom:semver 0.0.9 constructor( GameType _gameType, Claim _absolutePrestate, @@ -95,7 +95,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { L2OutputOracle _l2oo, BlockOracle _blockOracle ) - Semver(0, 0, 8) + Semver(0, 0, 9) { GAME_TYPE = _gameType; ABSOLUTE_PRESTATE = _absolutePrestate; @@ -150,7 +150,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { // INVARIANT: The prestate is always invalid if the passed `_stateData` is not the // preimage of the prestate claim hash. // We ignore the highest order byte of the digest because it is used to - // indicate the VM Status. + // indicate the VM Status and is added after the digest is computed. if (cleanHighByte(keccak256(_stateData)) != cleanHighByte(Claim.unwrap(preStateClaim))) { revert InvalidPrestate(); } From e2c29255d9a390d081c45e7c7f16dd325add329f Mon Sep 17 00:00:00 2001 From: clabby Date: Sun, 3 Sep 2023 16:58:09 -0400 Subject: [PATCH 12/20] Fix prestate hash --- op-challenger/game/fault/player.go | 2 -- op-challenger/game/fault/player_test.go | 2 -- 2 files changed, 4 deletions(-) diff --git a/op-challenger/game/fault/player.go b/op-challenger/game/fault/player.go index c4a189e1cdab..4d3eca4fbfd3 100644 --- a/op-challenger/game/fault/player.go +++ b/op-challenger/game/fault/player.go @@ -5,7 +5,6 @@ import ( "context" "fmt" - "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/responder" @@ -170,7 +169,6 @@ func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, lo return fmt.Errorf("failed to get the trace provider's absolute prestate: %w", err) } providerPrestateHash := crypto.Keccak256(providerPrestate) - providerPrestateHash[0] = mipsevm.VMStatusUnfinished onchainPrestate, err := loader.FetchAbsolutePrestateHash(ctx) if err != nil { return fmt.Errorf("failed to get the onchain absolute prestate: %w", err) diff --git a/op-challenger/game/fault/player_test.go b/op-challenger/game/fault/player_test.go index f74dfa19c791..b31e9edfd3af 100644 --- a/op-challenger/game/fault/player_test.go +++ b/op-challenger/game/fault/player_test.go @@ -6,7 +6,6 @@ import ( "fmt" "testing" - "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-node/testlog" "github.com/ethereum/go-ethereum/common" @@ -120,7 +119,6 @@ func TestValidateAbsolutePrestate(t *testing.T) { t.Run("ValidPrestates", func(t *testing.T) { prestate := []byte{0x00, 0x01, 0x02, 0x03} prestateHash := crypto.Keccak256(prestate) - prestateHash[0] = mipsevm.VMStatusUnfinished mockTraceProvider := newMockTraceProvider(false, prestate) mockLoader := newMockPrestateLoader(false, common.BytesToHash(prestateHash)) err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) From e5014d71984ced5a8715bdba20091d20864a3037 Mon Sep 17 00:00:00 2001 From: clabby Date: Mon, 4 Sep 2023 22:49:18 -0400 Subject: [PATCH 13/20] Add VM status to alphabet game chore: gas snapshot Ignore vm status when comparing step result --- op-bindings/bindings/alphabetvm.go | 56 ++++++++++++- op-bindings/bindings/alphabetvm_more.go | 4 +- op-bindings/bindings/faultdisputegame.go | 2 +- op-bindings/bindings/faultdisputegame_more.go | 2 +- op-challenger/game/fault/player.go | 8 +- op-challenger/game/fault/player_test.go | 12 +++ op-challenger/game/fault/solver/solver.go | 3 +- .../game/fault/trace/alphabet/provider.go | 28 +++++-- .../fault/trace/alphabet/provider_test.go | 14 ++-- .../game/fault/trace/cannon/provider.go | 8 ++ op-challenger/game/fault/types/types.go | 3 + packages/contracts-bedrock/.gas-snapshot | 20 ++--- .../deploy-config/devnetL1.json | 2 +- packages/contracts-bedrock/semver-lock.json | 2 +- .../src/dispute/FaultDisputeGame.sol | 17 ++-- .../test/FaultDisputeGame.t.sol | 84 ++++++++++++++----- 16 files changed, 195 insertions(+), 70 deletions(-) diff --git a/op-bindings/bindings/alphabetvm.go b/op-bindings/bindings/alphabetvm.go index f9f6e8e6179c..39639d01eec5 100644 --- a/op-bindings/bindings/alphabetvm.go +++ b/op-bindings/bindings/alphabetvm.go @@ -30,8 +30,8 @@ var ( // AlphabetVMMetaData contains all meta data concerning the AlphabetVM contract. var AlphabetVMMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"postState_\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b50604051610ad5380380610ad583398101604081905261002f91610090565b608081905260405161004090610083565b604051809103906000f08015801561005c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100a9565b6106c58061041083390190565b6000602082840312156100a257600080fd5b5051919050565b60805161034d6100c3600039600060ad015261034d6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61009861009336600461020a565b6100a6565b60405190815260200161007c565b60008060007f000000000000000000000000000000000000000000000000000000000000000087876040516100dc929190610276565b60405180910390200361010057600091506100f986880188610286565b905061011f565b61010c8688018861029f565b90925090508161011b816102f0565b9250505b8161012b826001610328565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017979650505050505050565b60008083601f8401126101d357600080fd5b50813567ffffffffffffffff8111156101eb57600080fd5b60208301915083602082850101111561020357600080fd5b9250929050565b6000806000806040858703121561022057600080fd5b843567ffffffffffffffff8082111561023857600080fd5b610244888389016101c1565b9096509450602087013591508082111561025d57600080fd5b5061026a878288016101c1565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561029857600080fd5b5035919050565b600080604083850312156102b257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610321576103216102c1565b5060010190565b6000821982111561033b5761033b6102c1565b50019056fea164736f6c634300080f000a608060405234801561001057600080fd5b506106a5806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063e03110e11161005b578063e03110e114610111578063e159261114610139578063fe4ac08e1461014e578063fef2b4ed146101c357600080fd5b806361238bde146100825780638542cf50146100c05780639a1f5e7f146100fe575b600080fd5b6100ad610090366004610551565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100ee6100ce366004610551565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100b7565b6100ad61010c366004610573565b6101e3565b61012461011f366004610551565b6102b6565b604080519283526020830191909152016100b7565b61014c6101473660046105a5565b6103a7565b005b61014c61015c366004610573565b6000838152600260209081526040808320878452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558684528252808320968352958152858220939093559283529082905291902055565b6100ad6101d1366004610621565b60006020819052908152604090205481565b60006101ee856104b0565b90506101fb836008610669565b8211806102085750602083115b1561023f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845287528083209483529386528382205581815293849052922055919050565b6000828152600260209081526040808320848452909152812054819060ff1661033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461035b816008610669565b610366856020610669565b106103845783610377826008610669565b6103819190610681565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156103c65763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161761054b81600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b92915050565b6000806040838503121561056457600080fd5b50508035926020909101359150565b6000806000806080858703121561058957600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156105ba57600080fd5b83359250602084013567ffffffffffffffff808211156105d957600080fd5b818601915086601f8301126105ed57600080fd5b8135818111156105fc57600080fd5b87602082850101111561060e57600080fd5b6020830194508093505050509250925092565b60006020828403121561063357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561067c5761067c61063a565b500190565b6000828210156106935761069361063a565b50039056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_traceLength\",\"type\":\"uint8\"}],\"name\":\"setTraceLength\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"postState_\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"traceLength\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040526000805460ff60a01b1916600f60a01b17905534801561002357600080fd5b50604051610c04380380610c04833981016040819052610042916100a3565b608081905260405161005390610096565b604051809103906000f08015801561006f573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100bc565b6106c58061053f83390190565b6000602082840312156100b557600080fd5b5051919050565b6080516104686100d7600039600061015801526104686000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80637dc0d1d014610051578063a13060eb1461009b578063a8a8b5eb146100d2578063f8e0cb961461012e575b600080fd5b6000546100719073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6000546100c09074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610092565b61012c6100e036600461028f565b6000805460ff90921674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b005b61014161013c366004610302565b61014f565b604051908152602001610092565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b6008888860405161018b92919061036e565b6040518091039020901b036101b157600091506101aa8688018861037e565b90506101d0565b6101bd86880188610397565b9092509050816101cc816103e8565b9250505b816101dc826001610420565b60408051602081019390935282015260600160405160208183030381529060405280519060200120925060006001600060149054906101000a900460ff166102249190610438565b60ff16830361023557506001610275565b60005461025f9060019074010000000000000000000000000000000000000000900460ff16610438565b60ff1683101561027157506003610275565b5060025b8060f81b60ff60f81b198516179350505050949350505050565b6000602082840312156102a157600080fd5b813560ff811681146102b257600080fd5b9392505050565b60008083601f8401126102cb57600080fd5b50813567ffffffffffffffff8111156102e357600080fd5b6020830191508360208285010111156102fb57600080fd5b9250929050565b6000806000806040858703121561031857600080fd5b843567ffffffffffffffff8082111561033057600080fd5b61033c888389016102b9565b9096509450602087013591508082111561035557600080fd5b50610362878288016102b9565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561039057600080fd5b5035919050565b600080604083850312156103aa57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610419576104196103b9565b5060010190565b60008219821115610433576104336103b9565b500190565b600060ff821660ff841680821015610452576104526103b9565b9003939250505056fea164736f6c634300080f000a608060405234801561001057600080fd5b506106a5806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063e03110e11161005b578063e03110e114610111578063e159261114610139578063fe4ac08e1461014e578063fef2b4ed146101c357600080fd5b806361238bde146100825780638542cf50146100c05780639a1f5e7f146100fe575b600080fd5b6100ad610090366004610551565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100ee6100ce366004610551565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100b7565b6100ad61010c366004610573565b6101e3565b61012461011f366004610551565b6102b6565b604080519283526020830191909152016100b7565b61014c6101473660046105a5565b6103a7565b005b61014c61015c366004610573565b6000838152600260209081526040808320878452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558684528252808320968352958152858220939093559283529082905291902055565b6100ad6101d1366004610621565b60006020819052908152604090205481565b60006101ee856104b0565b90506101fb836008610669565b8211806102085750602083115b1561023f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845287528083209483529386528382205581815293849052922055919050565b6000828152600260209081526040808320848452909152812054819060ff1661033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461035b816008610669565b610366856020610669565b106103845783610377826008610669565b6103819190610681565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156103c65763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161761054b81600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b92915050565b6000806040838503121561056457600080fd5b50508035926020909101359150565b6000806000806080858703121561058957600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156105ba57600080fd5b83359250602084013567ffffffffffffffff808211156105d957600080fd5b818601915086601f8301126105ed57600080fd5b8135818111156105fc57600080fd5b87602082850101111561060e57600080fd5b6020830194508093505050509250925092565b60006020828403121561063357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561067c5761067c61063a565b500190565b6000828210156106935761069361063a565b50039056fea164736f6c634300080f000a", } // AlphabetVMABI is the input ABI used to generate the binding from. @@ -262,3 +262,55 @@ func (_AlphabetVM *AlphabetVMSession) Step(_stateData []byte, arg1 []byte) ([32] func (_AlphabetVM *AlphabetVMCallerSession) Step(_stateData []byte, arg1 []byte) ([32]byte, error) { return _AlphabetVM.Contract.Step(&_AlphabetVM.CallOpts, _stateData, arg1) } + +// TraceLength is a free data retrieval call binding the contract method 0xa13060eb. +// +// Solidity: function traceLength() view returns(uint8) +func (_AlphabetVM *AlphabetVMCaller) TraceLength(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _AlphabetVM.contract.Call(opts, &out, "traceLength") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// TraceLength is a free data retrieval call binding the contract method 0xa13060eb. +// +// Solidity: function traceLength() view returns(uint8) +func (_AlphabetVM *AlphabetVMSession) TraceLength() (uint8, error) { + return _AlphabetVM.Contract.TraceLength(&_AlphabetVM.CallOpts) +} + +// TraceLength is a free data retrieval call binding the contract method 0xa13060eb. +// +// Solidity: function traceLength() view returns(uint8) +func (_AlphabetVM *AlphabetVMCallerSession) TraceLength() (uint8, error) { + return _AlphabetVM.Contract.TraceLength(&_AlphabetVM.CallOpts) +} + +// SetTraceLength is a paid mutator transaction binding the contract method 0xa8a8b5eb. +// +// Solidity: function setTraceLength(uint8 _traceLength) returns() +func (_AlphabetVM *AlphabetVMTransactor) SetTraceLength(opts *bind.TransactOpts, _traceLength uint8) (*types.Transaction, error) { + return _AlphabetVM.contract.Transact(opts, "setTraceLength", _traceLength) +} + +// SetTraceLength is a paid mutator transaction binding the contract method 0xa8a8b5eb. +// +// Solidity: function setTraceLength(uint8 _traceLength) returns() +func (_AlphabetVM *AlphabetVMSession) SetTraceLength(_traceLength uint8) (*types.Transaction, error) { + return _AlphabetVM.Contract.SetTraceLength(&_AlphabetVM.TransactOpts, _traceLength) +} + +// SetTraceLength is a paid mutator transaction binding the contract method 0xa8a8b5eb. +// +// Solidity: function setTraceLength(uint8 _traceLength) returns() +func (_AlphabetVM *AlphabetVMTransactorSession) SetTraceLength(_traceLength uint8) (*types.Transaction, error) { + return _AlphabetVM.Contract.SetTraceLength(&_AlphabetVM.TransactOpts, _traceLength) +} diff --git a/op-bindings/bindings/alphabetvm_more.go b/op-bindings/bindings/alphabetvm_more.go index c4aea38ea575..93bfaa1d6c1c 100644 --- a/op-bindings/bindings/alphabetvm_more.go +++ b/op-bindings/bindings/alphabetvm_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const AlphabetVMStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"test/FaultDisputeGame.t.sol:AlphabetVM\",\"label\":\"oracle\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_contract(IPreimageOracle)1001\"}],\"types\":{\"t_contract(IPreimageOracle)1001\":{\"encoding\":\"inplace\",\"label\":\"contract IPreimageOracle\",\"numberOfBytes\":\"20\"}}}" +const AlphabetVMStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"test/FaultDisputeGame.t.sol:AlphabetVM\",\"label\":\"oracle\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_contract(IPreimageOracle)1002\"},{\"astId\":1001,\"contract\":\"test/FaultDisputeGame.t.sol:AlphabetVM\",\"label\":\"traceLength\",\"offset\":20,\"slot\":\"0\",\"type\":\"t_uint8\"}],\"types\":{\"t_contract(IPreimageOracle)1002\":{\"encoding\":\"inplace\",\"label\":\"contract IPreimageOracle\",\"numberOfBytes\":\"20\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var AlphabetVMStorageLayout = new(solc.StorageLayout) -var AlphabetVMDeployedBin = "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61009861009336600461020a565b6100a6565b60405190815260200161007c565b60008060007f000000000000000000000000000000000000000000000000000000000000000087876040516100dc929190610276565b60405180910390200361010057600091506100f986880188610286565b905061011f565b61010c8688018861029f565b90925090508161011b816102f0565b9250505b8161012b826001610328565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017979650505050505050565b60008083601f8401126101d357600080fd5b50813567ffffffffffffffff8111156101eb57600080fd5b60208301915083602082850101111561020357600080fd5b9250929050565b6000806000806040858703121561022057600080fd5b843567ffffffffffffffff8082111561023857600080fd5b610244888389016101c1565b9096509450602087013591508082111561025d57600080fd5b5061026a878288016101c1565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561029857600080fd5b5035919050565b600080604083850312156102b257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610321576103216102c1565b5060010190565b6000821982111561033b5761033b6102c1565b50019056fea164736f6c634300080f000a" +var AlphabetVMDeployedBin = "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80637dc0d1d014610051578063a13060eb1461009b578063a8a8b5eb146100d2578063f8e0cb961461012e575b600080fd5b6000546100719073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6000546100c09074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610092565b61012c6100e036600461028f565b6000805460ff90921674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b005b61014161013c366004610302565b61014f565b604051908152602001610092565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b6008888860405161018b92919061036e565b6040518091039020901b036101b157600091506101aa8688018861037e565b90506101d0565b6101bd86880188610397565b9092509050816101cc816103e8565b9250505b816101dc826001610420565b60408051602081019390935282015260600160405160208183030381529060405280519060200120925060006001600060149054906101000a900460ff166102249190610438565b60ff16830361023557506001610275565b60005461025f9060019074010000000000000000000000000000000000000000900460ff16610438565b60ff1683101561027157506003610275565b5060025b8060f81b60ff60f81b198516179350505050949350505050565b6000602082840312156102a157600080fd5b813560ff811681146102b257600080fd5b9392505050565b60008083601f8401126102cb57600080fd5b50813567ffffffffffffffff8111156102e357600080fd5b6020830191508360208285010111156102fb57600080fd5b9250929050565b6000806000806040858703121561031857600080fd5b843567ffffffffffffffff8082111561033057600080fd5b61033c888389016102b9565b9096509450602087013591508082111561035557600080fd5b50610362878288016102b9565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561039057600080fd5b5035919050565b600080604083850312156103aa57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610419576104196103b9565b5060010190565b60008219821115610433576104336103b9565b500190565b600060ff821660ff841680821015610452576104526103b9565b9003939250505056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(AlphabetVMStorageLayoutJSON), AlphabetVMStorageLayout); err != nil { diff --git a/op-bindings/bindings/faultdisputegame.go b/op-bindings/bindings/faultdisputegame.go index 212e23f35a89..86cc3dd341ef 100644 --- a/op-bindings/bindings/faultdisputegame.go +++ b/op-bindings/bindings/faultdisputegame.go @@ -38,7 +38,7 @@ type IFaultDisputeGameOutputProposal struct { // FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract. var FaultDisputeGameMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2oo\",\"type\":\"address\"},{\"internalType\":\"contractBlockOracle\",\"name\":\"_blockOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1HeadTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_ORACLE\",\"outputs\":[{\"internalType\":\"contractBlockOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l1BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposals\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"starting\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"disputed\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d9238038062002d928339810160408190526200003591620000a1565b6000608081905260a052600960c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b766200021c600039600081816105220152611f3c01526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611cbb0152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b766000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004612417565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612468565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b4366004612417565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b604051610206919061251f565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612539565b34801561043e57600080fd5b50610395610d7e565b6101d16104553660046125a2565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d1610618366004612417565b611954565b34801561062957600080fd5b5061063d6106383660046125d7565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612639565b6119d1565b3480156106ce57600080fd5b506106d7611f3a565b604051610206939291906126c3565b6000805468010000000000000000900460ff16600281111561070a5761070a612439565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ee565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612439565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612753565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61276a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f97565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461276a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612753565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612799565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127e0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612439565b021790556002811115610c9557610c95612439565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061204c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061204c565b610d587f000000000000000000000000000000000000000000000000000000000000000061204c565b604051602001610d6a93929190612807565b604051602081830303815290604052905090565b6060610cc660206040612189565b6000805468010000000000000000900460ff166002811115610db057610db0612439565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61276a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed39190859061222016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612799565b61108b9190612753565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361276a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061287d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612753565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128e5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128e5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612971565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612753565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612439565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161276a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612799565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff16612228565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129f8565b865463ffffffff166122ce565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe9190612a29565b90505b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611c7b8a8a604051611c4f929190612a5d565b60405180910390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b14611cb2576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611d189493929190612ab6565b6020604051808303816000875af1158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b919061287d565b600284810154929091149250600091611e06906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ea2886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611eac9190612ae8565b611eb691906127e0565b67ffffffffffffffff161590508115158103611efe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f90610d7e565b9050909192565b600080612024847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361208f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120b957806120a381612b09565b91506120b29050600a83612b41565b9150612093565b60008167ffffffffffffffff8111156120d4576120d4612896565b6040519080825280601f01601f1916602001820160405280156120fe576020820181803683370190505b5090505b841561218157612113600183612753565b9150612120600a86612b55565b61212b906030612799565b60f81b8183815181106121405761214061276a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061217a600a86612b41565b9450612102565b949350505050565b606060006121c084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612799565b90508267ffffffffffffffff1667ffffffffffffffff8111156121e5576121e5612896565b6040519080825280601f01601f19166020018201604052801561220f576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806122b5837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ec846fffffffffffffffffffffffffffffffff1661236b565b9050600283815481106123015761230161276a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461236457815460028054909163ffffffff1690811061234f5761234f61276a565b90600052602060002090600302019150612312565b5092915050565b600081196001830116816123ff827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806040838503121561242a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106124a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b838110156124c45781810151838201526020016124ac565b8381111561089f5750506000910152565b600081518084526124ed8160208601602086016124a9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061253260208301846124d5565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612532565b8035801515811461259d57600080fd5b919050565b6000806000606084860312156125b757600080fd5b83359250602084013591506125ce6040850161258d565b90509250925092565b6000602082840312156125e957600080fd5b5035919050565b60008083601f84011261260257600080fd5b50813567ffffffffffffffff81111561261a57600080fd5b60208301915083602082850101111561263257600080fd5b9250929050565b6000806000806000806080878903121561265257600080fd5b863595506126626020880161258d565b9450604087013567ffffffffffffffff8082111561267f57600080fd5b61268b8a838b016125f0565b909650945060608901359150808211156126a457600080fd5b506126b189828a016125f0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126e560608301846124d5565b95945050505050565b60006020828403121561270057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461253257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561276557612765612724565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156127ac576127ac612724565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127fb576127fb6127b1565b92169190910692915050565b600084516128198184602089016124a9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612855816001850160208a016124a9565b600192019182015283516128708160028401602088016124a9565b0160020195945050505050565b60006020828403121561288f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461259d57600080fd5b6000606082840312156128f757600080fd5b6040516060810181811067ffffffffffffffff82111715612941577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282518152612954602084016128c5565b6020820152612965604084016128c5565b60408201529392505050565b60006040828403121561298357600080fd5b6040516040810167ffffffffffffffff82821081831117156129ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129eb57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff83811690831681811015612a2157612a21612724565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a5457612a54612724565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612aca604083018688612a6d565b8281036020840152612add818587612a6d565b979650505050505050565b600067ffffffffffffffff83811690831681811015612a2157612a21612724565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3a57612b3a612724565b5060010190565b600082612b5057612b506127b1565b500490565b600082612b6457612b646127b1565b50069056fea164736f6c634300080f000a", + Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d5c38038062002d5c8339810160408190526200003591620000a1565b6000608081905260a052600960c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b406200021c600039600081816105220152611f0601526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611c810152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b406000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e1565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612432565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e1565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124e9565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612503565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461256c565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e1565b611954565b34801561062957600080fd5b5061063d6106383660046125a1565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612603565b6119d1565b3480156106ce57600080fd5b506106d7611f04565b6040516102069392919061268d565b6000805468010000000000000000900460ff16600281111561070a5761070a612403565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126b8565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612403565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061271d565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612734565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f61565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612734565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261271d565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612763565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127aa565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612403565b021790556002811115610c9557610c95612403565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612016565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612016565b610d587f0000000000000000000000000000000000000000000000000000000000000000612016565b604051602001610d6a939291906127d1565b604051602081830303815290604052905090565b6060610cc660206040612153565b6000805468010000000000000000900460ff166002811115610db057610db0612403565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612734565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121ea16565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612763565b61108b919061271d565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612734565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612847565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561271d565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128af565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128af565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f919061293b565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961271d565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612403565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612734565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612763565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121f2565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129c2565b865463ffffffff16612298565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129f3565b90505b600882901b60088a8a604051611c31929190612a27565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060088260010154901b60087f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968d8d8d8d6040518563ffffffff1660e01b8152600401611cde9493929190612a80565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190612847565b6002858101549190921b929092149250600091611dd0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e769190612ab2565b611e8091906127aa565b67ffffffffffffffff161590508115158103611ec8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f5a610d7e565b9050909192565b600080611fee847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612083578061206d81612ad3565b915061207c9050600a83612b0b565b915061205d565b60008167ffffffffffffffff81111561209e5761209e612860565b6040519080825280601f01601f1916602001820160405280156120c8576020820181803683370190505b5090505b841561214b576120dd60018361271d565b91506120ea600a86612b1f565b6120f5906030612763565b60f81b81838151811061210a5761210a612734565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612144600a86612b0b565b94506120cc565b949350505050565b6060600061218a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612763565b90508267ffffffffffffffff1667ffffffffffffffff8111156121af576121af612860565b6040519080825280601f01601f1916602001820160405280156121d9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061227f837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122b6846fffffffffffffffffffffffffffffffff16612335565b9050600283815481106122cb576122cb612734565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232e57815460028054909163ffffffff1690811061231957612319612734565b906000526020600020906003020191506122dc565b5092915050565b600081196001830116816123c9827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123f457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061246d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248e578181015183820152602001612476565b8381111561089f5750506000910152565b600081518084526124b7816020860160208601612473565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124fc602083018461249f565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124fc565b8035801515811461256757600080fd5b919050565b60008060006060848603121561258157600080fd5b833592506020840135915061259860408501612557565b90509250925092565b6000602082840312156125b357600080fd5b5035919050565b60008083601f8401126125cc57600080fd5b50813567ffffffffffffffff8111156125e457600080fd5b6020830191508360208285010111156125fc57600080fd5b9250929050565b6000806000806000806080878903121561261c57600080fd5b8635955061262c60208801612557565b9450604087013567ffffffffffffffff8082111561264957600080fd5b6126558a838b016125ba565b9096509450606089013591508082111561266e57600080fd5b5061267b89828a016125ba565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126af606083018461249f565b95945050505050565b6000602082840312156126ca57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561272f5761272f6126ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612776576127766126ee565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127c5576127c561277b565b92169190910692915050565b600084516127e3818460208901612473565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161281f816001850160208a01612473565b6001920191820152835161283a816002840160208801612473565b0160020195945050505050565b60006020828403121561285957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256757600080fd5b6000606082840312156128c157600080fd5b6040516060810181811067ffffffffffffffff8211171561290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291e6020840161288f565b602082015261292f6040840161288f565b60408201529392505050565b60006040828403121561294d57600080fd5b6040516040810167ffffffffffffffff8282108183111715612998577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129b557600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129eb576129eb6126ee565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1e57612a1e6126ee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a94604083018688612a37565b8281036020840152612aa7818587612a37565b979650505050505050565b600067ffffffffffffffff838116908316818110156129eb576129eb6126ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0457612b046126ee565b5060010190565b600082612b1a57612b1a61277b565b500490565b600082612b2e57612b2e61277b565b50069056fea164736f6c634300080f000a", } // FaultDisputeGameABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/faultdisputegame_more.go b/op-bindings/bindings/faultdisputegame_more.go index 8cc45ebb4191..7895d1841924 100644 --- a/op-bindings/bindings/faultdisputegame_more.go +++ b/op-bindings/bindings/faultdisputegame_more.go @@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr var FaultDisputeGameStorageLayout = new(solc.StorageLayout) -var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004612417565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612468565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b4366004612417565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b604051610206919061251f565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612539565b34801561043e57600080fd5b50610395610d7e565b6101d16104553660046125a2565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d1610618366004612417565b611954565b34801561062957600080fd5b5061063d6106383660046125d7565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612639565b6119d1565b3480156106ce57600080fd5b506106d7611f3a565b604051610206939291906126c3565b6000805468010000000000000000900460ff16600281111561070a5761070a612439565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ee565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612439565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612753565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61276a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f97565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461276a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612753565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612799565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127e0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612439565b021790556002811115610c9557610c95612439565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061204c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061204c565b610d587f000000000000000000000000000000000000000000000000000000000000000061204c565b604051602001610d6a93929190612807565b604051602081830303815290604052905090565b6060610cc660206040612189565b6000805468010000000000000000900460ff166002811115610db057610db0612439565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61276a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed39190859061222016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361276a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612799565b61108b9190612753565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361276a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061287d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612753565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128e5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128e5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612971565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612753565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612439565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161276a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612799565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff16612228565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129f8565b865463ffffffff166122ce565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe9190612a29565b90505b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611c7b8a8a604051611c4f929190612a5d565b60405180910390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b14611cb2576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611d189493929190612ab6565b6020604051808303816000875af1158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b919061287d565b600284810154929091149250600091611e06906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ea2886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611eac9190612ae8565b611eb691906127e0565b67ffffffffffffffff161590508115158103611efe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f90610d7e565b9050909192565b600080612024847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361208f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120b957806120a381612b09565b91506120b29050600a83612b41565b9150612093565b60008167ffffffffffffffff8111156120d4576120d4612896565b6040519080825280601f01601f1916602001820160405280156120fe576020820181803683370190505b5090505b841561218157612113600183612753565b9150612120600a86612b55565b61212b906030612799565b60f81b8183815181106121405761214061276a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061217a600a86612b41565b9450612102565b949350505050565b606060006121c084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612799565b90508267ffffffffffffffff1667ffffffffffffffff8111156121e5576121e5612896565b6040519080825280601f01601f19166020018201604052801561220f576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806122b5837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ec846fffffffffffffffffffffffffffffffff1661236b565b9050600283815481106123015761230161276a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461236457815460028054909163ffffffff1690811061234f5761234f61276a565b90600052602060002090600302019150612312565b5092915050565b600081196001830116816123ff827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806040838503121561242a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106124a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b838110156124c45781810151838201526020016124ac565b8381111561089f5750506000910152565b600081518084526124ed8160208601602086016124a9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061253260208301846124d5565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612532565b8035801515811461259d57600080fd5b919050565b6000806000606084860312156125b757600080fd5b83359250602084013591506125ce6040850161258d565b90509250925092565b6000602082840312156125e957600080fd5b5035919050565b60008083601f84011261260257600080fd5b50813567ffffffffffffffff81111561261a57600080fd5b60208301915083602082850101111561263257600080fd5b9250929050565b6000806000806000806080878903121561265257600080fd5b863595506126626020880161258d565b9450604087013567ffffffffffffffff8082111561267f57600080fd5b61268b8a838b016125f0565b909650945060608901359150808211156126a457600080fd5b506126b189828a016125f0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126e560608301846124d5565b95945050505050565b60006020828403121561270057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461253257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561276557612765612724565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156127ac576127ac612724565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127fb576127fb6127b1565b92169190910692915050565b600084516128198184602089016124a9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612855816001850160208a016124a9565b600192019182015283516128708160028401602088016124a9565b0160020195945050505050565b60006020828403121561288f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461259d57600080fd5b6000606082840312156128f757600080fd5b6040516060810181811067ffffffffffffffff82111715612941577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282518152612954602084016128c5565b6020820152612965604084016128c5565b60408201529392505050565b60006040828403121561298357600080fd5b6040516040810167ffffffffffffffff82821081831117156129ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129eb57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff83811690831681811015612a2157612a21612724565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a5457612a54612724565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612aca604083018688612a6d565b8281036020840152612add818587612a6d565b979650505050505050565b600067ffffffffffffffff83811690831681811015612a2157612a21612724565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3a57612b3a612724565b5060010190565b600082612b5057612b506127b1565b500490565b600082612b6457612b646127b1565b50069056fea164736f6c634300080f000a" +var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e1565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612432565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e1565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124e9565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612503565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461256c565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e1565b611954565b34801561062957600080fd5b5061063d6106383660046125a1565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612603565b6119d1565b3480156106ce57600080fd5b506106d7611f04565b6040516102069392919061268d565b6000805468010000000000000000900460ff16600281111561070a5761070a612403565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126b8565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612403565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061271d565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612734565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f61565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612734565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261271d565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612763565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127aa565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612403565b021790556002811115610c9557610c95612403565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612016565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612016565b610d587f0000000000000000000000000000000000000000000000000000000000000000612016565b604051602001610d6a939291906127d1565b604051602081830303815290604052905090565b6060610cc660206040612153565b6000805468010000000000000000900460ff166002811115610db057610db0612403565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612734565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121ea16565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612763565b61108b919061271d565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612734565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612847565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561271d565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128af565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128af565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f919061293b565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961271d565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612403565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612734565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612763565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121f2565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129c2565b865463ffffffff16612298565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129f3565b90505b600882901b60088a8a604051611c31929190612a27565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060088260010154901b60087f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968d8d8d8d6040518563ffffffff1660e01b8152600401611cde9493929190612a80565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190612847565b6002858101549190921b929092149250600091611dd0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e769190612ab2565b611e8091906127aa565b67ffffffffffffffff161590508115158103611ec8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f5a610d7e565b9050909192565b600080611fee847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612083578061206d81612ad3565b915061207c9050600a83612b0b565b915061205d565b60008167ffffffffffffffff81111561209e5761209e612860565b6040519080825280601f01601f1916602001820160405280156120c8576020820181803683370190505b5090505b841561214b576120dd60018361271d565b91506120ea600a86612b1f565b6120f5906030612763565b60f81b81838151811061210a5761210a612734565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612144600a86612b0b565b94506120cc565b949350505050565b6060600061218a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612763565b90508267ffffffffffffffff1667ffffffffffffffff8111156121af576121af612860565b6040519080825280601f01601f1916602001820160405280156121d9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061227f837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122b6846fffffffffffffffffffffffffffffffff16612335565b9050600283815481106122cb576122cb612734565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232e57815460028054909163ffffffff1690811061231957612319612734565b906000526020600020906003020191506122dc565b5092915050565b600081196001830116816123c9827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123f457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061246d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248e578181015183820152602001612476565b8381111561089f5750506000910152565b600081518084526124b7816020860160208601612473565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124fc602083018461249f565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124fc565b8035801515811461256757600080fd5b919050565b60008060006060848603121561258157600080fd5b833592506020840135915061259860408501612557565b90509250925092565b6000602082840312156125b357600080fd5b5035919050565b60008083601f8401126125cc57600080fd5b50813567ffffffffffffffff8111156125e457600080fd5b6020830191508360208285010111156125fc57600080fd5b9250929050565b6000806000806000806080878903121561261c57600080fd5b8635955061262c60208801612557565b9450604087013567ffffffffffffffff8082111561264957600080fd5b6126558a838b016125ba565b9096509450606089013591508082111561266e57600080fd5b5061267b89828a016125ba565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126af606083018461249f565b95945050505050565b6000602082840312156126ca57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561272f5761272f6126ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612776576127766126ee565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127c5576127c561277b565b92169190910692915050565b600084516127e3818460208901612473565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161281f816001850160208a01612473565b6001920191820152835161283a816002840160208801612473565b0160020195945050505050565b60006020828403121561285957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256757600080fd5b6000606082840312156128c157600080fd5b6040516060810181811067ffffffffffffffff8211171561290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291e6020840161288f565b602082015261292f6040840161288f565b60408201529392505050565b60006040828403121561294d57600080fd5b6040516040810167ffffffffffffffff8282108183111715612998577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129b557600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129eb576129eb6126ee565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1e57612a1e6126ee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a94604083018688612a37565b8281036020840152612aa7818587612a37565b979650505050505050565b600067ffffffffffffffff838116908316818110156129eb576129eb6126ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0457612b046126ee565b5060010190565b600082612b1a57612b1a61277b565b500490565b600082612b2e57612b2e61277b565b50069056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(FaultDisputeGameStorageLayoutJSON), FaultDisputeGameStorageLayout); err != nil { diff --git a/op-challenger/game/fault/player.go b/op-challenger/game/fault/player.go index 4d3eca4fbfd3..4308b3865960 100644 --- a/op-challenger/game/fault/player.go +++ b/op-challenger/game/fault/player.go @@ -15,7 +15,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" ) @@ -164,17 +163,16 @@ type PrestateLoader interface { // ValidateAbsolutePrestate validates the absolute prestate of the fault game. func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, loader PrestateLoader) error { - providerPrestate, err := trace.AbsolutePreState(ctx) + providerPrestateHash, err := trace.AbsolutePreStateCommitment(ctx) if err != nil { return fmt.Errorf("failed to get the trace provider's absolute prestate: %w", err) } - providerPrestateHash := crypto.Keccak256(providerPrestate) onchainPrestate, err := loader.FetchAbsolutePrestateHash(ctx) if err != nil { return fmt.Errorf("failed to get the onchain absolute prestate: %w", err) } - if !bytes.Equal(providerPrestateHash, onchainPrestate[:]) { - return fmt.Errorf("trace provider's absolute prestate does not match onchain absolute prestate: Provider: %s | Chain %s", common.Bytes2Hex(providerPrestateHash), onchainPrestate.Hex()) + if !bytes.Equal(providerPrestateHash[:], onchainPrestate[:]) { + return fmt.Errorf("trace provider's absolute prestate does not match onchain absolute prestate: Provider: %s | Chain %s", providerPrestateHash.Hex(), onchainPrestate.Hex()) } return nil } diff --git a/op-challenger/game/fault/player_test.go b/op-challenger/game/fault/player_test.go index b31e9edfd3af..5c553d68b755 100644 --- a/op-challenger/game/fault/player_test.go +++ b/op-challenger/game/fault/player_test.go @@ -6,6 +6,7 @@ import ( "fmt" "testing" + "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-node/testlog" "github.com/ethereum/go-ethereum/common" @@ -119,6 +120,7 @@ func TestValidateAbsolutePrestate(t *testing.T) { t.Run("ValidPrestates", func(t *testing.T) { prestate := []byte{0x00, 0x01, 0x02, 0x03} prestateHash := crypto.Keccak256(prestate) + prestateHash[0] = mipsevm.VMStatusUnfinished mockTraceProvider := newMockTraceProvider(false, prestate) mockLoader := newMockPrestateLoader(false, common.BytesToHash(prestateHash)) err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader) @@ -209,6 +211,16 @@ func (m *mockTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, error } return m.prestate, nil } +func (m *mockTraceProvider) AbsolutePreStateCommitment(ctx context.Context) (common.Hash, error) { + prestate, err := m.AbsolutePreState(ctx) + if err != nil { + return common.Hash{}, err + } + + hash := common.BytesToHash(crypto.Keccak256(prestate)) + hash[0] = mipsevm.VMStatusUnfinished + return hash, nil +} // StateHash computes the state-hash of the given state, or returns an error if the state is invalid. func (m *mockTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { diff --git a/op-challenger/game/fault/solver/solver.go b/op-challenger/game/fault/solver/solver.go index 56c2f59b3e6a..bca5d153e43a 100644 --- a/op-challenger/game/fault/solver/solver.go +++ b/op-challenger/game/fault/solver/solver.go @@ -1,6 +1,7 @@ package solver import ( + "bytes" "context" "errors" "fmt" @@ -132,7 +133,7 @@ func (s *Solver) defend(ctx context.Context, claim types.Claim) (*types.Claim, e // agreeWithClaim returns true if the claim is correct according to the internal [TraceProvider]. func (s *Solver) agreeWithClaim(ctx context.Context, claim types.ClaimData) (bool, error) { ourValue, err := s.traceAtPosition(ctx, claim.Position) - return ourValue == claim.Value, err + return bytes.Equal(ourValue[1:], claim.Value[1:]), err } // traceAtPosition returns the [common.Hash] from internal [TraceProvider] at the given [Position]. diff --git a/op-challenger/game/fault/trace/alphabet/provider.go b/op-challenger/game/fault/trace/alphabet/provider.go index 70f8931fe35d..ca02b0782fb8 100644 --- a/op-challenger/game/fault/trace/alphabet/provider.go +++ b/op-challenger/game/fault/trace/alphabet/provider.go @@ -59,7 +59,7 @@ func (ap *AlphabetTraceProvider) Get(ctx context.Context, i uint64) (common.Hash if err != nil { return common.Hash{}, err } - return alphabetStateHash(claimBytes), nil + return ap.alphabetStateHash(claimBytes), nil } // AbsolutePreState returns the absolute pre-state for the alphabet trace. @@ -67,8 +67,18 @@ func (ap *AlphabetTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, return common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000060"), nil } +func (ap *AlphabetTraceProvider) AbsolutePreStateCommitment(ctx context.Context) (common.Hash, error) { + prestate, err := ap.AbsolutePreState(ctx) + if err != nil { + return common.Hash{}, err + } + hash := common.BytesToHash(crypto.Keccak256(prestate)) + hash[0] = mipsevm.VMStatusUnfinished + return hash, nil +} + func (ap *AlphabetTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { - return alphabetStateHash(state), nil + return ap.alphabetStateHash(state), nil } // BuildAlphabetPreimage constructs the claim bytes for the index and state item. @@ -76,10 +86,18 @@ func BuildAlphabetPreimage(i uint64, letter string) []byte { return append(IndexToBytes(i), LetterToBytes(letter)...) } -func alphabetStateHash(state []byte) common.Hash { +func (ap *AlphabetTraceProvider) alphabetStateHash(state []byte) common.Hash { h := crypto.Keccak256Hash(state) - // In the alphabet game, we ignore the VM status code and always set it to 1. - h[0] = mipsevm.VMStatusInvalid + // instead of the state containing an "exited" boolean, we just check if the index reached the end + i := new(big.Int).SetBytes(state[:32]) + finalStateIdx := uint64(len(ap.state) - 1) + if !i.IsUint64() || i.Uint64() > finalStateIdx { + h[0] = mipsevm.VMStatusPanic // this state should never be reached, if we increment by 1 per step + } else if i.Uint64() == finalStateIdx { + h[0] = mipsevm.VMStatusInvalid + } else { + h[0] = mipsevm.VMStatusUnfinished + } return h } diff --git a/op-challenger/game/fault/trace/alphabet/provider_test.go b/op-challenger/game/fault/trace/alphabet/provider_test.go index 20baa8714027..748b7861a395 100644 --- a/op-challenger/game/fault/trace/alphabet/provider_test.go +++ b/op-challenger/game/fault/trace/alphabet/provider_test.go @@ -9,8 +9,8 @@ import ( "github.com/stretchr/testify/require" ) -func alphabetClaim(index uint64, letter string) common.Hash { - return alphabetStateHash(BuildAlphabetPreimage(index, letter)) +func alphabetClaim(index uint64, letter string, provider *AlphabetTraceProvider) common.Hash { + return provider.alphabetStateHash(BuildAlphabetPreimage(index, letter)) } // TestAlphabetProvider_Get_ClaimsByTraceIndex tests the [fault.AlphabetProvider] Get function. @@ -25,15 +25,15 @@ func TestAlphabetProvider_Get_ClaimsByTraceIndex(t *testing.T) { }{ { 7, - alphabetClaim(7, "h"), + alphabetClaim(7, "h", canonicalProvider), }, { 3, - alphabetClaim(3, "d"), + alphabetClaim(3, "d", canonicalProvider), }, { 5, - alphabetClaim(5, "f"), + alphabetClaim(5, "f", canonicalProvider), }, } @@ -80,7 +80,7 @@ func TestGet_Succeeds(t *testing.T) { ap := NewTraceProvider("abc", 2) claim, err := ap.Get(context.Background(), 0) require.NoError(t, err) - expected := alphabetClaim(0, "a") + expected := alphabetClaim(0, "a", ap) require.Equal(t, expected, claim) } @@ -98,6 +98,6 @@ func TestGet_Extends(t *testing.T) { ap := NewTraceProvider("abc", 2) claim, err := ap.Get(context.Background(), 3) require.NoError(t, err) - expected := alphabetClaim(2, "c") + expected := alphabetClaim(2, "c", ap) require.Equal(t, expected, claim) } diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index fcbe3520c30e..06adfdf1548f 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -123,6 +123,14 @@ func (p *CannonTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, err return state.EncodeWitness(), nil } +func (p *CannonTraceProvider) AbsolutePreStateCommitment(ctx context.Context) (common.Hash, error) { + state, err := p.AbsolutePreState(ctx) + if err != nil { + return common.Hash{}, fmt.Errorf("cannot load absolute pre-state: %w", err) + } + return mipsevm.StateWitness(state).StateHash(), nil +} + // loadProof will attempt to load or generate the proof data at the specified index // If the requested index is beyond the end of the actual trace it is extended with no-op instructions. func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*proofData, error) { diff --git a/op-challenger/game/fault/types/types.go b/op-challenger/game/fault/types/types.go index b9c1965dbafb..5237b41c69f5 100644 --- a/op-challenger/game/fault/types/types.go +++ b/op-challenger/game/fault/types/types.go @@ -106,6 +106,9 @@ type TraceProvider interface { // AbsolutePreState is the pre-image value of the trace that transitions to the trace value at index 0 AbsolutePreState(ctx context.Context) (preimage []byte, err error) + // AbsolutePreStateCommitment is the commitment of the pre-image value of the trace that transitions to the trace value at index 0 + AbsolutePreStateCommitment(ctx context.Context) (hash common.Hash, err error) + // StateHash computes the state-hash of the given state, or returns an error if the state is invalid. StateHash(ctx context.Context, state []byte) (common.Hash, error) } diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 390f9eb0d3c8..a8a43bf75c26 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -88,16 +88,16 @@ FaucetTest:test_nonAdmin_drip_fails() (gas: 262520) FaucetTest:test_receive_succeeds() (gas: 17401) FaucetTest:test_withdraw_nonAdmin_reverts() (gas: 13145) FaucetTest:test_withdraw_succeeds() (gas: 78359) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 499188) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 506048) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 502729) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 505946) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 505215) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 497953) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 504813) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 501494) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 502711) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 501980) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 509676) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 516934) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 513235) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 516475) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 514814) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 508441) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 515699) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 512000) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 513240) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 511579) FaultDisputeGame_Test:test_addLocalData_static_succeeds() (gas: 640504) FaultDisputeGame_Test:test_createdAt_succeeds() (gas: 10342) FaultDisputeGame_Test:test_extraData_succeeds() (gas: 32377) diff --git a/packages/contracts-bedrock/deploy-config/devnetL1.json b/packages/contracts-bedrock/deploy-config/devnetL1.json index 9fbf7a56d789..6ac40cc921ac 100644 --- a/packages/contracts-bedrock/deploy-config/devnetL1.json +++ b/packages/contracts-bedrock/deploy-config/devnetL1.json @@ -43,7 +43,7 @@ "eip1559Elasticity": 6, "l1GenesisBlockTimestamp": "0x64c811bf", "l2GenesisRegolithTimeOffset": "0x0", - "faultGameAbsolutePrestate": "0x41c7ae758795765c6664a5d39bf63841c71ff191e9189522bad8ebff5d4eca98", + "faultGameAbsolutePrestate": "0x03c7ae758795765c6664a5d39bf63841c71ff191e9189522bad8ebff5d4eca98", "faultGameMaxDepth": 30, "faultGameMaxDuration": 1200, "systemConfigStartBlock": 0 diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 956d409ecfcc..2a8ebd0508b6 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,7 +16,7 @@ "src/L2/L2StandardBridge.sol": "0xe025dcccbf21d48828ecf588941c9ba04c91b87bdd177a653d3f1b265b0b02a8", "src/L2/L2ToL1MessagePasser.sol": "0xda56ba2e5b2c28fa8ca2df24077d49e96155a00ecc99cd0778d681be6ed166fe", "src/L2/SequencerFeeVault.sol": "0x37816035c992d38cf7e3d5a1846b02d017dd7bdca46abe6e5c5171b9ee6225ab", - "src/dispute/FaultDisputeGame.sol": "0xf990d243b117e7ba7e765e1aee433adcd01cf20dcc7088065691b09ae204ae47", + "src/dispute/FaultDisputeGame.sol": "0xb965888c2ea9e8dda89d6b5041c05b445568c8819b6616bba15ecf61fa112045", "src/legacy/DeployerWhitelist.sol": "0xf2129ec3da75307ba8e21bc943c332bb04704642e6e263149b5c8ee92dbcb7a8", "src/legacy/L1BlockNumber.sol": "0x30aae1fc85103476af0226b6e98c71c01feebbdc35d93401390b1ad438a37be6", "src/legacy/LegacyMessagePasser.sol": "0x5c08b0a663cc49d30e4e38540f6aefab19ef287c3ecd31c8d8c3decd5f5bd497", diff --git a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol index 138f232a0002..e259b5145677 100644 --- a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol +++ b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol @@ -151,7 +151,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { // preimage of the prestate claim hash. // We ignore the highest order byte of the digest because it is used to // indicate the VM Status and is added after the digest is computed. - if (cleanHighByte(keccak256(_stateData)) != cleanHighByte(Claim.unwrap(preStateClaim))) { + if (keccak256(_stateData) << 8 != Claim.unwrap(preStateClaim) << 8) { revert InvalidPrestate(); } @@ -167,7 +167,11 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { // SAFETY: While the `attack` path does not need an extra check for the post // state's depth in relation to the parent, we don't need another // branch because (n - n) % 2 == 0. - bool validStep = VM.step(_stateData, _proof) == Claim.unwrap(postState.claim); + // We ignore the highest order byte of the digest because it is used to + // indicate the VM Status and is added after the digest is computed. The + // hash commits to the exit code and the exit status, so the VM status does + // not need to be checked for equivalence. + bool validStep = (VM.step(_stateData, _proof)) << 8 == (Claim.unwrap(postState.claim) << 8); bool parentPostAgree = (parentPos.depth() - postState.position.depth()) % 2 == 0; if (parentPostAgree == validStep) revert ValidStep(); @@ -541,13 +545,4 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { ancestor_ = claimData[ancestor_.parentIndex]; } } - - /// @notice Cleans the highest order byte of a given fixed bytes value. - /// @param _in The bytes32 value to clean. - /// @return out_ The cleaned bytes32 value. - function cleanHighByte(bytes32 _in) internal pure returns (bytes32 out_) { - assembly { - out_ := and(not(shl(248, 0xFF)), _in) - } - } } diff --git a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol index 458922e86acd..388a714b2e12 100644 --- a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol @@ -79,7 +79,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init { /// @dev The root claim of the game. Claim internal constant ROOT_CLAIM = Claim.wrap(bytes32((uint256(1) << 248) | uint256(10))); /// @dev The absolute prestate of the trace. - Claim internal constant ABSOLUTE_PRESTATE = Claim.wrap(bytes32(uint256(0))); + Claim internal constant ABSOLUTE_PRESTATE = Claim.wrap(bytes32((uint256(3) << 248) | uint256(0))); function setUp() public override { super.init(ROOT_CLAIM, ABSOLUTE_PRESTATE); @@ -515,19 +515,19 @@ contract GamePlayer { (,, Claim grandparentClaim, Position grandparentPos,) = gameProxy.claimData(grandparentIndex); Claim ourGrandparentClaim = claimAt(grandparentPos); - if (Claim.unwrap(ourParentClaim) != Claim.unwrap(parentClaim)) { + if (Claim.unwrap(ourParentClaim) << 8 != Claim.unwrap(parentClaim) << 8) { // Attack parent. movePos = parentPos.move(true); // If we also disagree with the grandparent, attack it as well. - if (Claim.unwrap(ourGrandparentClaim) != Claim.unwrap(grandparentClaim)) { + if (Claim.unwrap(ourGrandparentClaim) << 8 != Claim.unwrap(grandparentClaim) << 8) { movePos2 = grandparentPos.move(true); } // Flag the move as an attack. isAttack = true; } else if ( - Claim.unwrap(ourParentClaim) == Claim.unwrap(parentClaim) - && Claim.unwrap(ourGrandparentClaim) == Claim.unwrap(grandparentClaim) + Claim.unwrap(ourParentClaim) << 8 == Claim.unwrap(parentClaim) << 8 + && Claim.unwrap(ourGrandparentClaim) << 8 == Claim.unwrap(grandparentClaim) << 8 ) { movePos = parentPos.move(false); } @@ -611,8 +611,16 @@ contract GamePlayer { function claimAt(uint256 _traceIndex) public view returns (Claim claim_) { bytes32 hash = keccak256(abi.encode(_traceIndex >= trace.length ? trace.length - 1 : _traceIndex, traceAt(_traceIndex))); + uint256 status; + if (_traceIndex == trace.length - 1) { + status = 1; + } else if (_traceIndex < trace.length - 1) { + status = 3; + } else { + status = 2; + } assembly { - claim_ := or(and(hash, not(shl(248, 0xFF))), shl(248, 1)) + claim_ := or(and(hash, not(shl(248, 0xFF))), shl(248, status)) } } @@ -626,13 +634,21 @@ contract OneVsOne_Arena is FaultDisputeGame_Init { /// @dev The absolute prestate of the trace. bytes ABSOLUTE_PRESTATE = abi.encode(15); /// @dev The absolute prestate claim. - Claim internal constant ABSOLUTE_PRESTATE_CLAIM = Claim.wrap(keccak256(abi.encode(15))); + Claim internal constant ABSOLUTE_PRESTATE_CLAIM = + Claim.wrap(bytes32((uint256(3) << 248) | uint256(keccak256(abi.encode(15))))); /// @dev The defender. GamePlayer internal defender; /// @dev The challenger. GamePlayer internal challenger; - function init(GamePlayer _defender, GamePlayer _challenger, uint256 _finalTraceIndex) public { + function init( + bool defenderCorrect, + GamePlayer _defender, + GamePlayer _challenger, + uint256 _finalTraceIndex + ) + public + { Claim rootClaim = _defender.claimAt(_finalTraceIndex); super.init(rootClaim, ABSOLUTE_PRESTATE_CLAIM); defender = _defender; @@ -642,6 +658,11 @@ contract OneVsOne_Arena is FaultDisputeGame_Init { defender.init(gameProxy, challenger, vm); challenger.init(gameProxy, defender, vm); + // Set the expected trace length to the defender's trace length. + AlphabetVM(address(gameProxy.VM())).setTraceLength( + uint8((defenderCorrect ? _defender : _challenger).trace().length) + ); + // Label actors for trace. vm.label(address(challenger), "Challenger"); vm.label(address(defender), "Defender"); @@ -652,7 +673,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 0); - super.init(dishonest, honest, 15); + super.init(false, dishonest, honest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -673,7 +694,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot1 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 0); - super.init(honest, dishonest, 15); + super.init(true, honest, dishonest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -694,7 +715,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 7); - super.init(dishonest, honest, 15); + super.init(false, dishonest, honest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -715,7 +736,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot2 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 7); - super.init(honest, dishonest, 15); + super.init(true, honest, dishonest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -736,7 +757,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 2); - super.init(dishonest, honest, 15); + super.init(false, dishonest, honest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -757,7 +778,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot3 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 2); - super.init(honest, dishonest, 15); + super.init(true, honest, dishonest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -778,7 +799,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer_HalfTrace(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 8, 5); - super.init(dishonest, honest, 7); + super.init(false, dishonest, honest, 7); } function test_resolvesCorrectly_succeeds() public { @@ -799,7 +820,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot4 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer_HalfTrace(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 8, 5); - super.init(honest, dishonest, 7); + super.init(true, honest, dishonest, 7); } function test_resolvesCorrectly_succeeds() public { @@ -820,7 +841,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer_QuarterTrace(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 4, 3); - super.init(dishonest, honest, 3); + super.init(false, dishonest, honest, 3); } function test_resolvesCorrectly_succeeds() public { @@ -841,7 +862,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot5 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer_QuarterTrace(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 4, 3); - super.init(honest, dishonest, 3); + super.init(true, honest, dishonest, 3); } function test_resolvesCorrectly_succeeds() public { @@ -871,7 +892,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRootFuzz is OneVsOne_Arena _dishonestTraceLength, i ); - super.init(dishonest, honest, _dishonestTraceLength - 1); + super.init(false, dishonest, honest, _dishonestTraceLength - 1); // Play the game until a step is forced. challenger.play(0); @@ -892,7 +913,6 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRootFuzz is OneVsOne_Arena contract FaultDisputeGame_ResolvesCorrectly_CorrectRootFuzz is OneVsOne_Arena { function testFuzz_resolvesCorrectly_succeeds(uint256 _dishonestTraceLength) public { _dishonestTraceLength = bound(_dishonestTraceLength, 1, 16); - for (uint256 i = 0; i < _dishonestTraceLength; i++) { uint256 snapshot = vm.snapshot(); @@ -902,7 +922,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRootFuzz is OneVsOne_Arena { _dishonestTraceLength, i ); - super.init(honest, dishonest, 15); + super.init(true, honest, dishonest, 15); // Play the game until a step is forced. challenger.play(0); @@ -977,16 +997,23 @@ contract AlphabetVM is IBigStepper { Claim internal immutable ABSOLUTE_PRESTATE; IPreimageOracle public oracle; + uint8 public traceLength = 15; + constructor(Claim _absolutePrestate) { ABSOLUTE_PRESTATE = _absolutePrestate; oracle = new PreimageOracle(); } + /// @notice Sets the expected trace length. + function setTraceLength(uint8 _traceLength) public { + traceLength = _traceLength; + } + /// @inheritdoc IBigStepper function step(bytes calldata _stateData, bytes calldata) external view returns (bytes32 postState_) { uint256 traceIndex; uint256 claim; - if (keccak256(_stateData) == Claim.unwrap(ABSOLUTE_PRESTATE)) { + if ((keccak256(_stateData) << 8) == (Claim.unwrap(ABSOLUTE_PRESTATE) << 8)) { // If the state data is empty, then the absolute prestate is the claim. traceIndex = 0; (claim) = abi.decode(_stateData, (uint256)); @@ -997,8 +1024,19 @@ contract AlphabetVM is IBigStepper { } // STF: n -> n + 1 postState_ = keccak256(abi.encode(traceIndex, claim + 1)); + uint256 status; + if (traceIndex == traceLength - 1) { + // VmStatusInvalid + status = 1; + } else if (traceIndex < traceLength - 1) { + // VmStatusUnfinished + status = 3; + } else { + // VmStatusPanic + status = 2; + } assembly { - postState_ := or(and(postState_, not(shl(248, 0xFF))), shl(248, 1)) + postState_ := or(and(postState_, not(shl(248, 0xFF))), shl(248, status)) } } } From 1d230d23ceab91a3043a5f2bac18578a3916196b Mon Sep 17 00:00:00 2001 From: clabby Date: Tue, 5 Sep 2023 12:14:00 -0400 Subject: [PATCH 14/20] Add `VMStatus` type dedup --- op-bindings/bindings/faultdisputegame.go | 2 +- op-bindings/bindings/faultdisputegame_more.go | 2 +- packages/contracts-bedrock/semver-lock.json | 2 +- .../src/dispute/FaultDisputeGame.sol | 4 +++- .../src/libraries/DisputeTypes.sol | 18 ++++++++++++++++ .../test/DisputeGameFactory.t.sol | 14 ++++++------- .../test/FaultDisputeGame.t.sol | 21 ++++++++----------- packages/contracts-bedrock/test/MIPS.t.sol | 13 ++++++------ 8 files changed, 47 insertions(+), 29 deletions(-) diff --git a/op-bindings/bindings/faultdisputegame.go b/op-bindings/bindings/faultdisputegame.go index 86cc3dd341ef..d52acb9ad65e 100644 --- a/op-bindings/bindings/faultdisputegame.go +++ b/op-bindings/bindings/faultdisputegame.go @@ -38,7 +38,7 @@ type IFaultDisputeGameOutputProposal struct { // FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract. var FaultDisputeGameMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2oo\",\"type\":\"address\"},{\"internalType\":\"contractBlockOracle\",\"name\":\"_blockOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1HeadTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_ORACLE\",\"outputs\":[{\"internalType\":\"contractBlockOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l1BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposals\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"starting\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"disputed\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d5c38038062002d5c8339810160408190526200003591620000a1565b6000608081905260a052600960c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b406200021c600039600081816105220152611f0601526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611c810152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b406000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e1565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612432565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e1565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124e9565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612503565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461256c565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e1565b611954565b34801561062957600080fd5b5061063d6106383660046125a1565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612603565b6119d1565b3480156106ce57600080fd5b506106d7611f04565b6040516102069392919061268d565b6000805468010000000000000000900460ff16600281111561070a5761070a612403565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126b8565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612403565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061271d565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612734565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f61565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612734565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261271d565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612763565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127aa565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612403565b021790556002811115610c9557610c95612403565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612016565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612016565b610d587f0000000000000000000000000000000000000000000000000000000000000000612016565b604051602001610d6a939291906127d1565b604051602081830303815290604052905090565b6060610cc660206040612153565b6000805468010000000000000000900460ff166002811115610db057610db0612403565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612734565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121ea16565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612763565b61108b919061271d565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612734565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612847565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561271d565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128af565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128af565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f919061293b565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961271d565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612403565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612734565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612763565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121f2565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129c2565b865463ffffffff16612298565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129f3565b90505b600882901b60088a8a604051611c31929190612a27565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060088260010154901b60087f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968d8d8d8d6040518563ffffffff1660e01b8152600401611cde9493929190612a80565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190612847565b6002858101549190921b929092149250600091611dd0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e769190612ab2565b611e8091906127aa565b67ffffffffffffffff161590508115158103611ec8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f5a610d7e565b9050909192565b600080611fee847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612083578061206d81612ad3565b915061207c9050600a83612b0b565b915061205d565b60008167ffffffffffffffff81111561209e5761209e612860565b6040519080825280601f01601f1916602001820160405280156120c8576020820181803683370190505b5090505b841561214b576120dd60018361271d565b91506120ea600a86612b1f565b6120f5906030612763565b60f81b81838151811061210a5761210a612734565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612144600a86612b0b565b94506120cc565b949350505050565b6060600061218a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612763565b90508267ffffffffffffffff1667ffffffffffffffff8111156121af576121af612860565b6040519080825280601f01601f1916602001820160405280156121d9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061227f837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122b6846fffffffffffffffffffffffffffffffff16612335565b9050600283815481106122cb576122cb612734565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232e57815460028054909163ffffffff1690811061231957612319612734565b906000526020600020906003020191506122dc565b5092915050565b600081196001830116816123c9827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123f457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061246d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248e578181015183820152602001612476565b8381111561089f5750506000910152565b600081518084526124b7816020860160208601612473565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124fc602083018461249f565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124fc565b8035801515811461256757600080fd5b919050565b60008060006060848603121561258157600080fd5b833592506020840135915061259860408501612557565b90509250925092565b6000602082840312156125b357600080fd5b5035919050565b60008083601f8401126125cc57600080fd5b50813567ffffffffffffffff8111156125e457600080fd5b6020830191508360208285010111156125fc57600080fd5b9250929050565b6000806000806000806080878903121561261c57600080fd5b8635955061262c60208801612557565b9450604087013567ffffffffffffffff8082111561264957600080fd5b6126558a838b016125ba565b9096509450606089013591508082111561266e57600080fd5b5061267b89828a016125ba565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126af606083018461249f565b95945050505050565b6000602082840312156126ca57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561272f5761272f6126ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612776576127766126ee565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127c5576127c561277b565b92169190910692915050565b600084516127e3818460208901612473565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161281f816001850160208a01612473565b6001920191820152835161283a816002840160208801612473565b0160020195945050505050565b60006020828403121561285957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256757600080fd5b6000606082840312156128c157600080fd5b6040516060810181811067ffffffffffffffff8211171561290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291e6020840161288f565b602082015261292f6040840161288f565b60408201529392505050565b60006040828403121561294d57600080fd5b6040516040810167ffffffffffffffff8282108183111715612998577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129b557600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129eb576129eb6126ee565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1e57612a1e6126ee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a94604083018688612a37565b8281036020840152612aa7818587612a37565b979650505050505050565b600067ffffffffffffffff838116908316818110156129eb576129eb6126ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0457612b046126ee565b5060010190565b600082612b1a57612b1a61277b565b500490565b600082612b2e57612b2e61277b565b50069056fea164736f6c634300080f000a", + Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d5c38038062002d5c8339810160408190526200003591620000a1565b6000608081905260a052600960c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b406200021c600039600081816105220152611f0601526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611c810152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b406000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e1565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612432565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e1565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124e9565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612503565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461256c565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e1565b611954565b34801561062957600080fd5b5061063d6106383660046125a1565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612603565b6119d1565b3480156106ce57600080fd5b506106d7611f04565b6040516102069392919061268d565b6000805468010000000000000000900460ff16600281111561070a5761070a612403565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126b8565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612403565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061271d565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612734565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f61565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612734565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261271d565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612763565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127aa565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612403565b021790556002811115610c9557610c95612403565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612016565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612016565b610d587f0000000000000000000000000000000000000000000000000000000000000000612016565b604051602001610d6a939291906127d1565b604051602081830303815290604052905090565b6060610cc660206040612153565b6000805468010000000000000000900460ff166002811115610db057610db0612403565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612734565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121ea16565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612763565b61108b919061271d565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612734565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b6001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612847565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561271d565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128af565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128af565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f919061293b565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961271d565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612403565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612734565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612763565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121f2565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129c2565b865463ffffffff16612298565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129f3565b90505b600882901b60088a8a604051611c31929190612a27565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060088260010154901b60087f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968d8d8d8d6040518563ffffffff1660e01b8152600401611cde9493929190612a80565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190612847565b6002858101549190921b929092149250600091611dd0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e769190612ab2565b611e8091906127aa565b67ffffffffffffffff161590508115158103611ec8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f5a610d7e565b9050909192565b600080611fee847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612083578061206d81612ad3565b915061207c9050600a83612b0b565b915061205d565b60008167ffffffffffffffff81111561209e5761209e612860565b6040519080825280601f01601f1916602001820160405280156120c8576020820181803683370190505b5090505b841561214b576120dd60018361271d565b91506120ea600a86612b1f565b6120f5906030612763565b60f81b81838151811061210a5761210a612734565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612144600a86612b0b565b94506120cc565b949350505050565b6060600061218a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612763565b90508267ffffffffffffffff1667ffffffffffffffff8111156121af576121af612860565b6040519080825280601f01601f1916602001820160405280156121d9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061227f837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122b6846fffffffffffffffffffffffffffffffff16612335565b9050600283815481106122cb576122cb612734565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232e57815460028054909163ffffffff1690811061231957612319612734565b906000526020600020906003020191506122dc565b5092915050565b600081196001830116816123c9827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123f457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061246d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248e578181015183820152602001612476565b8381111561089f5750506000910152565b600081518084526124b7816020860160208601612473565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124fc602083018461249f565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124fc565b8035801515811461256757600080fd5b919050565b60008060006060848603121561258157600080fd5b833592506020840135915061259860408501612557565b90509250925092565b6000602082840312156125b357600080fd5b5035919050565b60008083601f8401126125cc57600080fd5b50813567ffffffffffffffff8111156125e457600080fd5b6020830191508360208285010111156125fc57600080fd5b9250929050565b6000806000806000806080878903121561261c57600080fd5b8635955061262c60208801612557565b9450604087013567ffffffffffffffff8082111561264957600080fd5b6126558a838b016125ba565b9096509450606089013591508082111561266e57600080fd5b5061267b89828a016125ba565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126af606083018461249f565b95945050505050565b6000602082840312156126ca57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561272f5761272f6126ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612776576127766126ee565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127c5576127c561277b565b92169190910692915050565b600084516127e3818460208901612473565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161281f816001850160208a01612473565b6001920191820152835161283a816002840160208801612473565b0160020195945050505050565b60006020828403121561285957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256757600080fd5b6000606082840312156128c157600080fd5b6040516060810181811067ffffffffffffffff8211171561290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291e6020840161288f565b602082015261292f6040840161288f565b60408201529392505050565b60006040828403121561294d57600080fd5b6040516040810167ffffffffffffffff8282108183111715612998577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129b557600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129eb576129eb6126ee565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1e57612a1e6126ee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a94604083018688612a37565b8281036020840152612aa7818587612a37565b979650505050505050565b600067ffffffffffffffff838116908316818110156129eb576129eb6126ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0457612b046126ee565b5060010190565b600082612b1a57612b1a61277b565b500490565b600082612b2e57612b2e61277b565b50069056fea164736f6c634300080f000a", } // FaultDisputeGameABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/faultdisputegame_more.go b/op-bindings/bindings/faultdisputegame_more.go index 7895d1841924..b637fbaec59c 100644 --- a/op-bindings/bindings/faultdisputegame_more.go +++ b/op-bindings/bindings/faultdisputegame_more.go @@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr var FaultDisputeGameStorageLayout = new(solc.StorageLayout) -var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e1565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612432565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e1565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124e9565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612503565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461256c565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e1565b611954565b34801561062957600080fd5b5061063d6106383660046125a1565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612603565b6119d1565b3480156106ce57600080fd5b506106d7611f04565b6040516102069392919061268d565b6000805468010000000000000000900460ff16600281111561070a5761070a612403565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126b8565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612403565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061271d565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612734565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f61565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612734565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261271d565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612763565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127aa565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612403565b021790556002811115610c9557610c95612403565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612016565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612016565b610d587f0000000000000000000000000000000000000000000000000000000000000000612016565b604051602001610d6a939291906127d1565b604051602081830303815290604052905090565b6060610cc660206040612153565b6000805468010000000000000000900460ff166002811115610db057610db0612403565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612734565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121ea16565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612763565b61108b919061271d565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612734565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a6001146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612847565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561271d565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128af565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128af565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f919061293b565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961271d565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612403565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612734565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612763565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121f2565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129c2565b865463ffffffff16612298565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129f3565b90505b600882901b60088a8a604051611c31929190612a27565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060088260010154901b60087f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968d8d8d8d6040518563ffffffff1660e01b8152600401611cde9493929190612a80565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190612847565b6002858101549190921b929092149250600091611dd0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e769190612ab2565b611e8091906127aa565b67ffffffffffffffff161590508115158103611ec8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f5a610d7e565b9050909192565b600080611fee847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612083578061206d81612ad3565b915061207c9050600a83612b0b565b915061205d565b60008167ffffffffffffffff81111561209e5761209e612860565b6040519080825280601f01601f1916602001820160405280156120c8576020820181803683370190505b5090505b841561214b576120dd60018361271d565b91506120ea600a86612b1f565b6120f5906030612763565b60f81b81838151811061210a5761210a612734565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612144600a86612b0b565b94506120cc565b949350505050565b6060600061218a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612763565b90508267ffffffffffffffff1667ffffffffffffffff8111156121af576121af612860565b6040519080825280601f01601f1916602001820160405280156121d9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061227f837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122b6846fffffffffffffffffffffffffffffffff16612335565b9050600283815481106122cb576122cb612734565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232e57815460028054909163ffffffff1690811061231957612319612734565b906000526020600020906003020191506122dc565b5092915050565b600081196001830116816123c9827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123f457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061246d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248e578181015183820152602001612476565b8381111561089f5750506000910152565b600081518084526124b7816020860160208601612473565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124fc602083018461249f565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124fc565b8035801515811461256757600080fd5b919050565b60008060006060848603121561258157600080fd5b833592506020840135915061259860408501612557565b90509250925092565b6000602082840312156125b357600080fd5b5035919050565b60008083601f8401126125cc57600080fd5b50813567ffffffffffffffff8111156125e457600080fd5b6020830191508360208285010111156125fc57600080fd5b9250929050565b6000806000806000806080878903121561261c57600080fd5b8635955061262c60208801612557565b9450604087013567ffffffffffffffff8082111561264957600080fd5b6126558a838b016125ba565b9096509450606089013591508082111561266e57600080fd5b5061267b89828a016125ba565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126af606083018461249f565b95945050505050565b6000602082840312156126ca57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561272f5761272f6126ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612776576127766126ee565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127c5576127c561277b565b92169190910692915050565b600084516127e3818460208901612473565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161281f816001850160208a01612473565b6001920191820152835161283a816002840160208801612473565b0160020195945050505050565b60006020828403121561285957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256757600080fd5b6000606082840312156128c157600080fd5b6040516060810181811067ffffffffffffffff8211171561290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291e6020840161288f565b602082015261292f6040840161288f565b60408201529392505050565b60006040828403121561294d57600080fd5b6040516040810167ffffffffffffffff8282108183111715612998577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129b557600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129eb576129eb6126ee565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1e57612a1e6126ee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a94604083018688612a37565b8281036020840152612aa7818587612a37565b979650505050505050565b600067ffffffffffffffff838116908316818110156129eb576129eb6126ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0457612b046126ee565b5060010190565b600082612b1a57612b1a61277b565b500490565b600082612b2e57612b2e61277b565b50069056fea164736f6c634300080f000a" +var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e1565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612432565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e1565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124e9565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612503565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461256c565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e1565b611954565b34801561062957600080fd5b5061063d6106383660046125a1565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612603565b6119d1565b3480156106ce57600080fd5b506106d7611f04565b6040516102069392919061268d565b6000805468010000000000000000900460ff16600281111561070a5761070a612403565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126b8565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612403565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061271d565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612734565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f61565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612734565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261271d565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612763565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127aa565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612403565b021790556002811115610c9557610c95612403565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612016565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612016565b610d587f0000000000000000000000000000000000000000000000000000000000000000612016565b604051602001610d6a939291906127d1565b604051602081830303815290604052905090565b6060610cc660206040612153565b6000805468010000000000000000900460ff166002811115610db057610db0612403565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612734565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121ea16565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612763565b61108b919061271d565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612734565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b6001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612847565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561271d565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128af565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128af565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f919061293b565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961271d565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612403565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612734565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612763565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121f2565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129c2565b865463ffffffff16612298565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129f3565b90505b600882901b60088a8a604051611c31929190612a27565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060088260010154901b60087f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968d8d8d8d6040518563ffffffff1660e01b8152600401611cde9493929190612a80565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190612847565b6002858101549190921b929092149250600091611dd0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e769190612ab2565b611e8091906127aa565b67ffffffffffffffff161590508115158103611ec8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f5a610d7e565b9050909192565b600080611fee847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612083578061206d81612ad3565b915061207c9050600a83612b0b565b915061205d565b60008167ffffffffffffffff81111561209e5761209e612860565b6040519080825280601f01601f1916602001820160405280156120c8576020820181803683370190505b5090505b841561214b576120dd60018361271d565b91506120ea600a86612b1f565b6120f5906030612763565b60f81b81838151811061210a5761210a612734565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612144600a86612b0b565b94506120cc565b949350505050565b6060600061218a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612763565b90508267ffffffffffffffff1667ffffffffffffffff8111156121af576121af612860565b6040519080825280601f01601f1916602001820160405280156121d9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061227f837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122b6846fffffffffffffffffffffffffffffffff16612335565b9050600283815481106122cb576122cb612734565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232e57815460028054909163ffffffff1690811061231957612319612734565b906000526020600020906003020191506122dc565b5092915050565b600081196001830116816123c9827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123f457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061246d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248e578181015183820152602001612476565b8381111561089f5750506000910152565b600081518084526124b7816020860160208601612473565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124fc602083018461249f565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124fc565b8035801515811461256757600080fd5b919050565b60008060006060848603121561258157600080fd5b833592506020840135915061259860408501612557565b90509250925092565b6000602082840312156125b357600080fd5b5035919050565b60008083601f8401126125cc57600080fd5b50813567ffffffffffffffff8111156125e457600080fd5b6020830191508360208285010111156125fc57600080fd5b9250929050565b6000806000806000806080878903121561261c57600080fd5b8635955061262c60208801612557565b9450604087013567ffffffffffffffff8082111561264957600080fd5b6126558a838b016125ba565b9096509450606089013591508082111561266e57600080fd5b5061267b89828a016125ba565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126af606083018461249f565b95945050505050565b6000602082840312156126ca57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561272f5761272f6126ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612776576127766126ee565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127c5576127c561277b565b92169190910692915050565b600084516127e3818460208901612473565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161281f816001850160208a01612473565b6001920191820152835161283a816002840160208801612473565b0160020195945050505050565b60006020828403121561285957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256757600080fd5b6000606082840312156128c157600080fd5b6040516060810181811067ffffffffffffffff8211171561290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291e6020840161288f565b602082015261292f6040840161288f565b60408201529392505050565b60006040828403121561294d57600080fd5b6040516040810167ffffffffffffffff8282108183111715612998577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129b557600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129eb576129eb6126ee565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1e57612a1e6126ee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a94604083018688612a37565b8281036020840152612aa7818587612a37565b979650505050505050565b600067ffffffffffffffff838116908316818110156129eb576129eb6126ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0457612b046126ee565b5060010190565b600082612b1a57612b1a61277b565b500490565b600082612b2e57612b2e61277b565b50069056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(FaultDisputeGameStorageLayoutJSON), FaultDisputeGameStorageLayout); err != nil { diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 2a8ebd0508b6..45bf146b8c81 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,7 +16,7 @@ "src/L2/L2StandardBridge.sol": "0xe025dcccbf21d48828ecf588941c9ba04c91b87bdd177a653d3f1b265b0b02a8", "src/L2/L2ToL1MessagePasser.sol": "0xda56ba2e5b2c28fa8ca2df24077d49e96155a00ecc99cd0778d681be6ed166fe", "src/L2/SequencerFeeVault.sol": "0x37816035c992d38cf7e3d5a1846b02d017dd7bdca46abe6e5c5171b9ee6225ab", - "src/dispute/FaultDisputeGame.sol": "0xb965888c2ea9e8dda89d6b5041c05b445568c8819b6616bba15ecf61fa112045", + "src/dispute/FaultDisputeGame.sol": "0x80a0571e79b452c086e5432606c26ff548d2ae4443d0836833302c2989b0a1ea", "src/legacy/DeployerWhitelist.sol": "0xf2129ec3da75307ba8e21bc943c332bb04704642e6e263149b5c8ee92dbcb7a8", "src/legacy/L1BlockNumber.sol": "0x30aae1fc85103476af0226b6e98c71c01feebbdc35d93401390b1ad438a37be6", "src/legacy/LegacyMessagePasser.sol": "0x5c08b0a663cc49d30e4e38540f6aefab19ef287c3ecd31c8d8c3decd5f5bd497", diff --git a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol index e259b5145677..c51d0312897d 100644 --- a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol +++ b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol @@ -449,7 +449,9 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { // The VMStatus must indicate (1) 'invalid', to argue that disputed thing is invalid. // Games that agree with the existing outcome are not allowed. // NOTE(clabby): This assumption will change in Alpha Chad. - if (uint8(Claim.unwrap(rootClaim())[0]) != 1) revert UnexpectedRootClaim(rootClaim()); + if (uint8(Claim.unwrap(rootClaim())[0]) != VMStatus.unwrap(VMStatuses.INVALID)) { + revert UnexpectedRootClaim(rootClaim()); + } // Set the game's starting timestamp createdAt = Timestamp.wrap(uint64(block.timestamp)); diff --git a/packages/contracts-bedrock/src/libraries/DisputeTypes.sol b/packages/contracts-bedrock/src/libraries/DisputeTypes.sol index 1080b04182fb..84a7966f206a 100644 --- a/packages/contracts-bedrock/src/libraries/DisputeTypes.sol +++ b/packages/contracts-bedrock/src/libraries/DisputeTypes.sol @@ -62,6 +62,9 @@ type Position is uint128; /// @notice A `GameType` represents the type of game being played. type GameType is uint8; +/// @notice A `VMStatus` represents the status of a VM execution. +type VMStatus is uint8; + /// @notice The current status of the dispute game. enum GameStatus // The game is currently in progress, and has not been resolved. @@ -85,3 +88,18 @@ library GameTypes { /// @dev The game will use a `IDisputeGame` implementation that utilizes attestation proofs. GameType internal constant ATTESTATION = GameType.wrap(2); } + +/// @title VMStatuses +library VMStatuses { + /// @dev The VM has executed successfully and the outcome is valid. + VMStatus internal constant VALID = VMStatus.wrap(0); + + /// @dev The VM has executed successfully and the outcome is invalid. + VMStatus internal constant INVALID = VMStatus.wrap(1); + + /// @dev The VM has paniced. + VMStatus internal constant PANIC = VMStatus.wrap(2); + + /// @dev The VM execution is still in progress. + VMStatus internal constant UNFINISHED = VMStatus.wrap(3); +} diff --git a/packages/contracts-bedrock/test/DisputeGameFactory.t.sol b/packages/contracts-bedrock/test/DisputeGameFactory.t.sol index 28f1a25d84ca..1f81c8b58b3d 100644 --- a/packages/contracts-bedrock/test/DisputeGameFactory.t.sol +++ b/packages/contracts-bedrock/test/DisputeGameFactory.t.sol @@ -42,7 +42,7 @@ contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init { // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. GameType gt = GameType.wrap(uint8(bound(gameType, 0, 2))); // Ensure the rootClaim has a VMStatus that disagrees with the validity. - rootClaim = changeClaimStatus(rootClaim, 1); + rootClaim = changeClaimStatus(rootClaim, VMStatuses.INVALID); // Set all three implementations to the same `FakeClone` contract. for (uint8 i; i < 3; i++) { @@ -71,7 +71,7 @@ contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init { // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. GameType gt = GameType.wrap(uint8(bound(gameType, 0, 2))); // Ensure the rootClaim has a VMStatus that disagrees with the validity. - rootClaim = changeClaimStatus(rootClaim, 1); + rootClaim = changeClaimStatus(rootClaim, VMStatuses.INVALID); vm.expectRevert(abi.encodeWithSelector(NoImplementation.selector, gt)); factory.create(gt, rootClaim, extraData); @@ -82,7 +82,7 @@ contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init { // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. GameType gt = GameType.wrap(uint8(bound(gameType, 0, 2))); // Ensure the rootClaim has a VMStatus that disagrees with the validity. - rootClaim = changeClaimStatus(rootClaim, 1); + rootClaim = changeClaimStatus(rootClaim, VMStatuses.INVALID); // Set all three implementations to the same `FakeClone` contract. for (uint8 i; i < 3; i++) { @@ -106,10 +106,10 @@ contract DisputeGameFactory_Create_Test is DisputeGameFactory_Init { factory.create(gt, rootClaim, extraData); } - function changeClaimStatus(Claim claim, uint8 status) public pure returns (Claim _out) { - bytes32 hash = Claim.unwrap(claim); - hash = bytes32((uint256(hash) & (~(uint256(0xff) << 248))) | (uint256(status) << 248)); - return Claim.wrap(hash); + function changeClaimStatus(Claim _claim, VMStatus _status) public pure returns (Claim out_) { + assembly { + out_ := or(and(not(shl(248, 0xFF)), _claim), shl(248, _status)) + } } } diff --git a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol index 388a714b2e12..70e2c659d586 100644 --- a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol @@ -147,7 +147,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init { function testFuzz_initialize_badRootStatus_reverts(Claim rootClaim, bytes calldata extraData) public { // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. // Ensure the root claim does not have the correct VM status - if (uint8(Claim.unwrap(rootClaim)[0]) == 1) rootClaim = changeClaimStatus(rootClaim, 0); + if (uint8(Claim.unwrap(rootClaim)[0]) == 1) rootClaim = changeClaimStatus(rootClaim, VMStatuses.VALID); vm.expectRevert(abi.encodeWithSelector(UnexpectedRootClaim.selector, rootClaim)); factory.create(GameTypes.FAULT, rootClaim, extraData); @@ -460,10 +460,10 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init { return bytes32((uint256(h) & ~uint256(0xFF << 248)) | (1 << 248)); } - function changeClaimStatus(Claim claim, uint8 status) public pure returns (Claim _out) { - bytes32 hash = Claim.unwrap(claim); - hash = bytes32((uint256(hash) & (~(uint256(0xff) << 248))) | (uint256(status) << 248)); - return Claim.wrap(hash); + function changeClaimStatus(Claim _claim, VMStatus _status) public pure returns (Claim out_) { + assembly { + out_ := or(and(not(shl(248, 0xFF)), _claim), shl(248, _status)) + } } } @@ -1024,16 +1024,13 @@ contract AlphabetVM is IBigStepper { } // STF: n -> n + 1 postState_ = keccak256(abi.encode(traceIndex, claim + 1)); - uint256 status; + VMStatus status; if (traceIndex == traceLength - 1) { - // VmStatusInvalid - status = 1; + status = VMStatuses.INVALID; } else if (traceIndex < traceLength - 1) { - // VmStatusUnfinished - status = 3; + status = VMStatuses.UNFINISHED; } else { - // VmStatusPanic - status = 2; + status = VMStatuses.PANIC; } assembly { postState_ := or(and(postState_, not(shl(248, 0xFF))), shl(248, status)) diff --git a/packages/contracts-bedrock/test/MIPS.t.sol b/packages/contracts-bedrock/test/MIPS.t.sol index 61f476e50dcd..9ac0cb5b496d 100644 --- a/packages/contracts-bedrock/test/MIPS.t.sol +++ b/packages/contracts-bedrock/test/MIPS.t.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.15; import { CommonTest } from "./CommonTest.t.sol"; import { MIPS } from "src/cannon/MIPS.sol"; import { PreimageOracle } from "src/cannon/PreimageOracle.sol"; +import "src/libraries/DisputeTypes.sol"; contract MIPS_Test is CommonTest { MIPS internal mips; @@ -1558,23 +1559,23 @@ contract MIPS_Test is CommonTest { /// 1. Exited with success (Invalid) /// 2. Exited with failure (Panic) /// 3. Unfinished - function vmStatus(MIPS.State memory state) internal pure returns (uint256 out_) { + function vmStatus(MIPS.State memory state) internal pure returns (VMStatus out_) { if (state.exited) { if (state.exitCode == 0) { - return 0; + return VMStatuses.VALID; } else if (state.exitCode == 1) { - return 1; + return VMStatuses.INVALID; } else { - return 2; + return VMStatuses.PANIC; } } else { - return 3; + return VMStatuses.UNFINISHED; } } function outputState(MIPS.State memory state) internal pure returns (bytes32 out_) { bytes memory enc = encodeState(state); - uint256 status = vmStatus(state); + VMStatus status = vmStatus(state); assembly { out_ := keccak256(add(enc, 0x20), 226) out_ := or(and(not(shl(248, 0xFF)), out_), shl(248, status)) From a0f1d5d950d0dd3f2e59f41977c2ead2c814c34e Mon Sep 17 00:00:00 2001 From: clabby Date: Wed, 6 Sep 2023 17:21:02 -0400 Subject: [PATCH 15/20] Do not ignore status byte on VM step / in the chal solver --- op-bindings/bindings/faultdisputegame.go | 2 +- op-bindings/bindings/faultdisputegame_more.go | 2 +- op-challenger/game/fault/solver/solver.go | 2 +- packages/contracts-bedrock/.gas-snapshot | 20 +++++++++---------- packages/contracts-bedrock/semver-lock.json | 2 +- .../src/dispute/FaultDisputeGame.sol | 6 +----- 6 files changed, 15 insertions(+), 19 deletions(-) diff --git a/op-bindings/bindings/faultdisputegame.go b/op-bindings/bindings/faultdisputegame.go index d52acb9ad65e..7ef612054d23 100644 --- a/op-bindings/bindings/faultdisputegame.go +++ b/op-bindings/bindings/faultdisputegame.go @@ -38,7 +38,7 @@ type IFaultDisputeGameOutputProposal struct { // FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract. var FaultDisputeGameMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2oo\",\"type\":\"address\"},{\"internalType\":\"contractBlockOracle\",\"name\":\"_blockOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1HeadTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_ORACLE\",\"outputs\":[{\"internalType\":\"contractBlockOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l1BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposals\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"starting\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"disputed\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d5c38038062002d5c8339810160408190526200003591620000a1565b6000608081905260a052600960c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b406200021c600039600081816105220152611f0601526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611c810152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b406000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e1565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612432565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e1565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124e9565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612503565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461256c565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e1565b611954565b34801561062957600080fd5b5061063d6106383660046125a1565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612603565b6119d1565b3480156106ce57600080fd5b506106d7611f04565b6040516102069392919061268d565b6000805468010000000000000000900460ff16600281111561070a5761070a612403565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126b8565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612403565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061271d565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612734565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f61565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612734565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261271d565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612763565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127aa565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612403565b021790556002811115610c9557610c95612403565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612016565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612016565b610d587f0000000000000000000000000000000000000000000000000000000000000000612016565b604051602001610d6a939291906127d1565b604051602081830303815290604052905090565b6060610cc660206040612153565b6000805468010000000000000000900460ff166002811115610db057610db0612403565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612734565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121ea16565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612763565b61108b919061271d565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612734565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b6001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612847565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561271d565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128af565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128af565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f919061293b565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961271d565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612403565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612734565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612763565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121f2565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129c2565b865463ffffffff16612298565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129f3565b90505b600882901b60088a8a604051611c31929190612a27565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060088260010154901b60087f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968d8d8d8d6040518563ffffffff1660e01b8152600401611cde9493929190612a80565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190612847565b6002858101549190921b929092149250600091611dd0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e769190612ab2565b611e8091906127aa565b67ffffffffffffffff161590508115158103611ec8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f5a610d7e565b9050909192565b600080611fee847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612083578061206d81612ad3565b915061207c9050600a83612b0b565b915061205d565b60008167ffffffffffffffff81111561209e5761209e612860565b6040519080825280601f01601f1916602001820160405280156120c8576020820181803683370190505b5090505b841561214b576120dd60018361271d565b91506120ea600a86612b1f565b6120f5906030612763565b60f81b81838151811061210a5761210a612734565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612144600a86612b0b565b94506120cc565b949350505050565b6060600061218a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612763565b90508267ffffffffffffffff1667ffffffffffffffff8111156121af576121af612860565b6040519080825280601f01601f1916602001820160405280156121d9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061227f837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122b6846fffffffffffffffffffffffffffffffff16612335565b9050600283815481106122cb576122cb612734565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232e57815460028054909163ffffffff1690811061231957612319612734565b906000526020600020906003020191506122dc565b5092915050565b600081196001830116816123c9827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123f457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061246d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248e578181015183820152602001612476565b8381111561089f5750506000910152565b600081518084526124b7816020860160208601612473565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124fc602083018461249f565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124fc565b8035801515811461256757600080fd5b919050565b60008060006060848603121561258157600080fd5b833592506020840135915061259860408501612557565b90509250925092565b6000602082840312156125b357600080fd5b5035919050565b60008083601f8401126125cc57600080fd5b50813567ffffffffffffffff8111156125e457600080fd5b6020830191508360208285010111156125fc57600080fd5b9250929050565b6000806000806000806080878903121561261c57600080fd5b8635955061262c60208801612557565b9450604087013567ffffffffffffffff8082111561264957600080fd5b6126558a838b016125ba565b9096509450606089013591508082111561266e57600080fd5b5061267b89828a016125ba565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126af606083018461249f565b95945050505050565b6000602082840312156126ca57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561272f5761272f6126ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612776576127766126ee565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127c5576127c561277b565b92169190910692915050565b600084516127e3818460208901612473565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161281f816001850160208a01612473565b6001920191820152835161283a816002840160208801612473565b0160020195945050505050565b60006020828403121561285957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256757600080fd5b6000606082840312156128c157600080fd5b6040516060810181811067ffffffffffffffff8211171561290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291e6020840161288f565b602082015261292f6040840161288f565b60408201529392505050565b60006040828403121561294d57600080fd5b6040516040810167ffffffffffffffff8282108183111715612998577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129b557600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129eb576129eb6126ee565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1e57612a1e6126ee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a94604083018688612a37565b8281036020840152612aa7818587612a37565b979650505050505050565b600067ffffffffffffffff838116908316818110156129eb576129eb6126ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0457612b046126ee565b5060010190565b600082612b1a57612b1a61277b565b500490565b600082612b2e57612b2e61277b565b50069056fea164736f6c634300080f000a", + Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d5238038062002d528339810160408190526200003591620000a1565b6000608081905260a052600960c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b366200021c600039600081816105220152611efc01526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611c7b0152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b366000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123d7565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612428565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123d7565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124df565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b6040516102069291906124f9565b34801561043e57600080fd5b50610395610d7e565b6101d1610455366004612562565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123d7565b611954565b34801561062957600080fd5b5061063d610638366004612597565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd3660046125f9565b6119d1565b3480156106ce57600080fd5b506106d7611efa565b60405161020693929190612683565b6000805468010000000000000000900460ff16600281111561070a5761070a6123f9565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ae565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb6123f9565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612713565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61272a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f57565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461272a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61272a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612713565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612759565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127a0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c806123f9565b021790556002811115610c9557610c956123f9565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061200c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061200c565b610d587f000000000000000000000000000000000000000000000000000000000000000061200c565b604051602001610d6a939291906127c7565b604051602081830303815290604052905090565b6060610cc660206040612149565b6000805468010000000000000000900460ff166002811115610db057610db06123f9565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61272a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121e016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361272a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612759565b61108b9190612713565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361272a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b6001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061283d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612713565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128a5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128a5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612931565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612713565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f56123f9565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161272a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612759565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121e8565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129b8565b865463ffffffff1661228e565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129e9565b90505b600882901b60088a8a604051611c31929190612a1d565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611cd89493929190612a76565b6020604051808303816000875af1158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b919061283d565b600284810154929091149250600091611dc6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e62886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c9190612aa8565b611e7691906127a0565b67ffffffffffffffff161590508115158103611ebe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f50610d7e565b9050909192565b600080611fe4847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361204f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612079578061206381612ac9565b91506120729050600a83612b01565b9150612053565b60008167ffffffffffffffff81111561209457612094612856565b6040519080825280601f01601f1916602001820160405280156120be576020820181803683370190505b5090505b8415612141576120d3600183612713565b91506120e0600a86612b15565b6120eb906030612759565b60f81b8183815181106121005761210061272a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061213a600a86612b01565b94506120c2565b949350505050565b6060600061218084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612759565b90508267ffffffffffffffff1667ffffffffffffffff8111156121a5576121a5612856565b6040519080825280601f01601f1916602001820160405280156121cf576020820181803683370190505b509150828160208401375092915050565b151760011b90565b600080612275837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ac846fffffffffffffffffffffffffffffffff1661232b565b9050600283815481106122c1576122c161272a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232457815460028054909163ffffffff1690811061230f5761230f61272a565b906000526020600020906003020191506122d2565b5092915050565b600081196001830116816123bf827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123ea57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612463577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248457818101518382015260200161246c565b8381111561089f5750506000910152565b600081518084526124ad816020860160208601612469565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124f26020830184612495565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124f2565b8035801515811461255d57600080fd5b919050565b60008060006060848603121561257757600080fd5b833592506020840135915061258e6040850161254d565b90509250925092565b6000602082840312156125a957600080fd5b5035919050565b60008083601f8401126125c257600080fd5b50813567ffffffffffffffff8111156125da57600080fd5b6020830191508360208285010111156125f257600080fd5b9250929050565b6000806000806000806080878903121561261257600080fd5b863595506126226020880161254d565b9450604087013567ffffffffffffffff8082111561263f57600080fd5b61264b8a838b016125b0565b9096509450606089013591508082111561266457600080fd5b5061267189828a016125b0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126a56060830184612495565b95945050505050565b6000602082840312156126c057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124f257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612725576127256126e4565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561276c5761276c6126e4565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127bb576127bb612771565b92169190910692915050565b600084516127d9818460208901612469565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612815816001850160208a01612469565b60019201918201528351612830816002840160208801612469565b0160020195945050505050565b60006020828403121561284f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461255d57600080fd5b6000606082840312156128b757600080fd5b6040516060810181811067ffffffffffffffff82111715612901577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291460208401612885565b602082015261292560408401612885565b60408201529392505050565b60006040828403121561294357600080fd5b6040516040810167ffffffffffffffff828210818311171561298e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129ab57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129e1576129e16126e4565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1457612a146126e4565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a8a604083018688612a2d565b8281036020840152612a9d818587612a2d565b979650505050505050565b600067ffffffffffffffff838116908316818110156129e1576129e16126e4565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612afa57612afa6126e4565b5060010190565b600082612b1057612b10612771565b500490565b600082612b2457612b24612771565b50069056fea164736f6c634300080f000a", } // FaultDisputeGameABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/faultdisputegame_more.go b/op-bindings/bindings/faultdisputegame_more.go index b637fbaec59c..67169f098ddb 100644 --- a/op-bindings/bindings/faultdisputegame_more.go +++ b/op-bindings/bindings/faultdisputegame_more.go @@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr var FaultDisputeGameStorageLayout = new(solc.StorageLayout) -var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e1565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612432565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e1565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124e9565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612503565b34801561043e57600080fd5b50610395610d7e565b6101d161045536600461256c565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e1565b611954565b34801561062957600080fd5b5061063d6106383660046125a1565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612603565b6119d1565b3480156106ce57600080fd5b506106d7611f04565b6040516102069392919061268d565b6000805468010000000000000000900460ff16600281111561070a5761070a612403565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126b8565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612403565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906109149060019061271d565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e612734565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f61565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a14612734565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff83164261271d565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612763565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127aa565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612403565b021790556002811115610c9557610c95612403565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f0000000000000000000000000000000000000000000000000000000000000000612016565b610d2f7f0000000000000000000000000000000000000000000000000000000000000000612016565b610d587f0000000000000000000000000000000000000000000000000000000000000000612016565b604051602001610d6a939291906127d1565b604051602081830303815290604052905090565b6060610cc660206040612153565b6000805468010000000000000000900460ff166002811115610db057610db0612403565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f612734565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121ea16565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff168154811061100357611003612734565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612763565b61108b919061271d565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e3612734565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b6001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116049190612847565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f60018561271d565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128af565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128af565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f919061293b565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a960018961271d565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f5612403565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a41612734565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612763565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121f2565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129c2565b865463ffffffff16612298565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129f3565b90505b600882901b60088a8a604051611c31929190612a27565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060088260010154901b60087f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968d8d8d8d6040518563ffffffff1660e01b8152600401611cde9493929190612a80565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190612847565b6002858101549190921b929092149250600091611dd0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e769190612ab2565b611e8091906127aa565b67ffffffffffffffff161590508115158103611ec8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f5a610d7e565b9050909192565b600080611fee847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612083578061206d81612ad3565b915061207c9050600a83612b0b565b915061205d565b60008167ffffffffffffffff81111561209e5761209e612860565b6040519080825280601f01601f1916602001820160405280156120c8576020820181803683370190505b5090505b841561214b576120dd60018361271d565b91506120ea600a86612b1f565b6120f5906030612763565b60f81b81838151811061210a5761210a612734565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612144600a86612b0b565b94506120cc565b949350505050565b6060600061218a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612763565b90508267ffffffffffffffff1667ffffffffffffffff8111156121af576121af612860565b6040519080825280601f01601f1916602001820160405280156121d9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60008061227f837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122b6846fffffffffffffffffffffffffffffffff16612335565b9050600283815481106122cb576122cb612734565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232e57815460028054909163ffffffff1690811061231957612319612734565b906000526020600020906003020191506122dc565b5092915050565b600081196001830116816123c9827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123f457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061246d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248e578181015183820152602001612476565b8381111561089f5750506000910152565b600081518084526124b7816020860160208601612473565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124fc602083018461249f565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124fc565b8035801515811461256757600080fd5b919050565b60008060006060848603121561258157600080fd5b833592506020840135915061259860408501612557565b90509250925092565b6000602082840312156125b357600080fd5b5035919050565b60008083601f8401126125cc57600080fd5b50813567ffffffffffffffff8111156125e457600080fd5b6020830191508360208285010111156125fc57600080fd5b9250929050565b6000806000806000806080878903121561261c57600080fd5b8635955061262c60208801612557565b9450604087013567ffffffffffffffff8082111561264957600080fd5b6126558a838b016125ba565b9096509450606089013591508082111561266e57600080fd5b5061267b89828a016125ba565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126af606083018461249f565b95945050505050565b6000602082840312156126ca57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561272f5761272f6126ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115612776576127766126ee565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127c5576127c561277b565b92169190910692915050565b600084516127e3818460208901612473565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161281f816001850160208a01612473565b6001920191820152835161283a816002840160208801612473565b0160020195945050505050565b60006020828403121561285957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256757600080fd5b6000606082840312156128c157600080fd5b6040516060810181811067ffffffffffffffff8211171561290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291e6020840161288f565b602082015261292f6040840161288f565b60408201529392505050565b60006040828403121561294d57600080fd5b6040516040810167ffffffffffffffff8282108183111715612998577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129b557600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129eb576129eb6126ee565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1e57612a1e6126ee565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a94604083018688612a37565b8281036020840152612aa7818587612a37565b979650505050505050565b600067ffffffffffffffff838116908316818110156129eb576129eb6126ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0457612b046126ee565b5060010190565b600082612b1a57612b1a61277b565b500490565b600082612b2e57612b2e61277b565b50069056fea164736f6c634300080f000a" +var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123d7565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612428565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123d7565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124df565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b6040516102069291906124f9565b34801561043e57600080fd5b50610395610d7e565b6101d1610455366004612562565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123d7565b611954565b34801561062957600080fd5b5061063d610638366004612597565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd3660046125f9565b6119d1565b3480156106ce57600080fd5b506106d7611efa565b60405161020693929190612683565b6000805468010000000000000000900460ff16600281111561070a5761070a6123f9565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ae565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb6123f9565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612713565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61272a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f57565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461272a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61272a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612713565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612759565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127a0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c806123f9565b021790556002811115610c9557610c956123f9565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061200c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061200c565b610d587f000000000000000000000000000000000000000000000000000000000000000061200c565b604051602001610d6a939291906127c7565b604051602081830303815290604052905090565b6060610cc660206040612149565b6000805468010000000000000000900460ff166002811115610db057610db06123f9565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61272a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121e016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361272a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612759565b61108b9190612713565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361272a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b6001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061283d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612713565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128a5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128a5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612931565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612713565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f56123f9565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161272a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612759565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121e8565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129b8565b865463ffffffff1661228e565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129e9565b90505b600882901b60088a8a604051611c31929190612a1d565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611cd89493929190612a76565b6020604051808303816000875af1158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b919061283d565b600284810154929091149250600091611dc6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e62886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c9190612aa8565b611e7691906127a0565b67ffffffffffffffff161590508115158103611ebe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f50610d7e565b9050909192565b600080611fe4847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361204f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612079578061206381612ac9565b91506120729050600a83612b01565b9150612053565b60008167ffffffffffffffff81111561209457612094612856565b6040519080825280601f01601f1916602001820160405280156120be576020820181803683370190505b5090505b8415612141576120d3600183612713565b91506120e0600a86612b15565b6120eb906030612759565b60f81b8183815181106121005761210061272a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061213a600a86612b01565b94506120c2565b949350505050565b6060600061218084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612759565b90508267ffffffffffffffff1667ffffffffffffffff8111156121a5576121a5612856565b6040519080825280601f01601f1916602001820160405280156121cf576020820181803683370190505b509150828160208401375092915050565b151760011b90565b600080612275837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ac846fffffffffffffffffffffffffffffffff1661232b565b9050600283815481106122c1576122c161272a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232457815460028054909163ffffffff1690811061230f5761230f61272a565b906000526020600020906003020191506122d2565b5092915050565b600081196001830116816123bf827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123ea57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612463577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248457818101518382015260200161246c565b8381111561089f5750506000910152565b600081518084526124ad816020860160208601612469565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124f26020830184612495565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124f2565b8035801515811461255d57600080fd5b919050565b60008060006060848603121561257757600080fd5b833592506020840135915061258e6040850161254d565b90509250925092565b6000602082840312156125a957600080fd5b5035919050565b60008083601f8401126125c257600080fd5b50813567ffffffffffffffff8111156125da57600080fd5b6020830191508360208285010111156125f257600080fd5b9250929050565b6000806000806000806080878903121561261257600080fd5b863595506126226020880161254d565b9450604087013567ffffffffffffffff8082111561263f57600080fd5b61264b8a838b016125b0565b9096509450606089013591508082111561266457600080fd5b5061267189828a016125b0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126a56060830184612495565b95945050505050565b6000602082840312156126c057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124f257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612725576127256126e4565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561276c5761276c6126e4565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127bb576127bb612771565b92169190910692915050565b600084516127d9818460208901612469565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612815816001850160208a01612469565b60019201918201528351612830816002840160208801612469565b0160020195945050505050565b60006020828403121561284f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461255d57600080fd5b6000606082840312156128b757600080fd5b6040516060810181811067ffffffffffffffff82111715612901577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291460208401612885565b602082015261292560408401612885565b60408201529392505050565b60006040828403121561294357600080fd5b6040516040810167ffffffffffffffff828210818311171561298e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129ab57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129e1576129e16126e4565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1457612a146126e4565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a8a604083018688612a2d565b8281036020840152612a9d818587612a2d565b979650505050505050565b600067ffffffffffffffff838116908316818110156129e1576129e16126e4565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612afa57612afa6126e4565b5060010190565b600082612b1057612b10612771565b500490565b600082612b2457612b24612771565b50069056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(FaultDisputeGameStorageLayoutJSON), FaultDisputeGameStorageLayout); err != nil { diff --git a/op-challenger/game/fault/solver/solver.go b/op-challenger/game/fault/solver/solver.go index bca5d153e43a..460fd72f54b1 100644 --- a/op-challenger/game/fault/solver/solver.go +++ b/op-challenger/game/fault/solver/solver.go @@ -133,7 +133,7 @@ func (s *Solver) defend(ctx context.Context, claim types.Claim) (*types.Claim, e // agreeWithClaim returns true if the claim is correct according to the internal [TraceProvider]. func (s *Solver) agreeWithClaim(ctx context.Context, claim types.ClaimData) (bool, error) { ourValue, err := s.traceAtPosition(ctx, claim.Position) - return bytes.Equal(ourValue[1:], claim.Value[1:]), err + return bytes.Equal(ourValue[:], claim.Value[:]), err } // traceAtPosition returns the [common.Hash] from internal [TraceProvider] at the given [Position]. diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index a8a43bf75c26..2a65dd26c979 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -88,16 +88,16 @@ FaucetTest:test_nonAdmin_drip_fails() (gas: 262520) FaucetTest:test_receive_succeeds() (gas: 17401) FaucetTest:test_withdraw_nonAdmin_reverts() (gas: 13145) FaucetTest:test_withdraw_succeeds() (gas: 78359) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 509676) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 516934) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 513235) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 516475) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 514814) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 508441) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 515699) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 512000) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 513240) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 511579) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 509652) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 516910) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 513211) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 516451) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 514790) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 508417) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 515675) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 511976) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 513216) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 511555) FaultDisputeGame_Test:test_addLocalData_static_succeeds() (gas: 640504) FaultDisputeGame_Test:test_createdAt_succeeds() (gas: 10342) FaultDisputeGame_Test:test_extraData_succeeds() (gas: 32377) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 45bf146b8c81..0901fa94e41a 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,7 +16,7 @@ "src/L2/L2StandardBridge.sol": "0xe025dcccbf21d48828ecf588941c9ba04c91b87bdd177a653d3f1b265b0b02a8", "src/L2/L2ToL1MessagePasser.sol": "0xda56ba2e5b2c28fa8ca2df24077d49e96155a00ecc99cd0778d681be6ed166fe", "src/L2/SequencerFeeVault.sol": "0x37816035c992d38cf7e3d5a1846b02d017dd7bdca46abe6e5c5171b9ee6225ab", - "src/dispute/FaultDisputeGame.sol": "0x80a0571e79b452c086e5432606c26ff548d2ae4443d0836833302c2989b0a1ea", + "src/dispute/FaultDisputeGame.sol": "0x43a8ef33b55a90532760cf4062038fe548aa68316457520bcf64e206a160a453", "src/legacy/DeployerWhitelist.sol": "0xf2129ec3da75307ba8e21bc943c332bb04704642e6e263149b5c8ee92dbcb7a8", "src/legacy/L1BlockNumber.sol": "0x30aae1fc85103476af0226b6e98c71c01feebbdc35d93401390b1ad438a37be6", "src/legacy/LegacyMessagePasser.sol": "0x5c08b0a663cc49d30e4e38540f6aefab19ef287c3ecd31c8d8c3decd5f5bd497", diff --git a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol index c51d0312897d..6a1a2d58426f 100644 --- a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol +++ b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol @@ -167,11 +167,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { // SAFETY: While the `attack` path does not need an extra check for the post // state's depth in relation to the parent, we don't need another // branch because (n - n) % 2 == 0. - // We ignore the highest order byte of the digest because it is used to - // indicate the VM Status and is added after the digest is computed. The - // hash commits to the exit code and the exit status, so the VM status does - // not need to be checked for equivalence. - bool validStep = (VM.step(_stateData, _proof)) << 8 == (Claim.unwrap(postState.claim) << 8); + bool validStep = VM.step(_stateData, _proof) == Claim.unwrap(postState.claim); bool parentPostAgree = (parentPos.depth() - postState.position.depth()) % 2 == 0; if (parentPostAgree == validStep) revert ValidStep(); From c04d39595c93dae985c9eb73c77e5ee6fcff1ac5 Mon Sep 17 00:00:00 2001 From: clabby Date: Wed, 6 Sep 2023 19:08:07 -0400 Subject: [PATCH 16/20] Remove concept of valid / invalid from alphabet game --- op-bindings/bindings/alphabetvm.go | 56 +--------------- op-bindings/bindings/alphabetvm_more.go | 4 +- .../game/fault/trace/alphabet/provider.go | 17 ++--- .../fault/trace/alphabet/provider_test.go | 2 +- packages/contracts-bedrock/.gas-snapshot | 20 +++--- .../test/FaultDisputeGame.t.sol | 67 ++++++------------- 6 files changed, 38 insertions(+), 128 deletions(-) diff --git a/op-bindings/bindings/alphabetvm.go b/op-bindings/bindings/alphabetvm.go index 39639d01eec5..cb757a928cb5 100644 --- a/op-bindings/bindings/alphabetvm.go +++ b/op-bindings/bindings/alphabetvm.go @@ -30,8 +30,8 @@ var ( // AlphabetVMMetaData contains all meta data concerning the AlphabetVM contract. var AlphabetVMMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_traceLength\",\"type\":\"uint8\"}],\"name\":\"setTraceLength\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"postState_\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"traceLength\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040526000805460ff60a01b1916600f60a01b17905534801561002357600080fd5b50604051610c04380380610c04833981016040819052610042916100a3565b608081905260405161005390610096565b604051809103906000f08015801561006f573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100bc565b6106c58061053f83390190565b6000602082840312156100b557600080fd5b5051919050565b6080516104686100d7600039600061015801526104686000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80637dc0d1d014610051578063a13060eb1461009b578063a8a8b5eb146100d2578063f8e0cb961461012e575b600080fd5b6000546100719073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6000546100c09074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610092565b61012c6100e036600461028f565b6000805460ff90921674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b005b61014161013c366004610302565b61014f565b604051908152602001610092565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b6008888860405161018b92919061036e565b6040518091039020901b036101b157600091506101aa8688018861037e565b90506101d0565b6101bd86880188610397565b9092509050816101cc816103e8565b9250505b816101dc826001610420565b60408051602081019390935282015260600160405160208183030381529060405280519060200120925060006001600060149054906101000a900460ff166102249190610438565b60ff16830361023557506001610275565b60005461025f9060019074010000000000000000000000000000000000000000900460ff16610438565b60ff1683101561027157506003610275565b5060025b8060f81b60ff60f81b198516179350505050949350505050565b6000602082840312156102a157600080fd5b813560ff811681146102b257600080fd5b9392505050565b60008083601f8401126102cb57600080fd5b50813567ffffffffffffffff8111156102e357600080fd5b6020830191508360208285010111156102fb57600080fd5b9250929050565b6000806000806040858703121561031857600080fd5b843567ffffffffffffffff8082111561033057600080fd5b61033c888389016102b9565b9096509450602087013591508082111561035557600080fd5b50610362878288016102b9565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561039057600080fd5b5035919050565b600080604083850312156103aa57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610419576104196103b9565b5060010190565b60008219821115610433576104336103b9565b500190565b600060ff821660ff841680821015610452576104526103b9565b9003939250505056fea164736f6c634300080f000a608060405234801561001057600080fd5b506106a5806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063e03110e11161005b578063e03110e114610111578063e159261114610139578063fe4ac08e1461014e578063fef2b4ed146101c357600080fd5b806361238bde146100825780638542cf50146100c05780639a1f5e7f146100fe575b600080fd5b6100ad610090366004610551565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100ee6100ce366004610551565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100b7565b6100ad61010c366004610573565b6101e3565b61012461011f366004610551565b6102b6565b604080519283526020830191909152016100b7565b61014c6101473660046105a5565b6103a7565b005b61014c61015c366004610573565b6000838152600260209081526040808320878452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558684528252808320968352958152858220939093559283529082905291902055565b6100ad6101d1366004610621565b60006020819052908152604090205481565b60006101ee856104b0565b90506101fb836008610669565b8211806102085750602083115b1561023f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845287528083209483529386528382205581815293849052922055919050565b6000828152600260209081526040808320848452909152812054819060ff1661033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461035b816008610669565b610366856020610669565b106103845783610377826008610669565b6103819190610681565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156103c65763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161761054b81600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b92915050565b6000806040838503121561056457600080fd5b50508035926020909101359150565b6000806000806080858703121561058957600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156105ba57600080fd5b83359250602084013567ffffffffffffffff808211156105d957600080fd5b818601915086601f8301126105ed57600080fd5b8135818111156105fc57600080fd5b87602082850101111561060e57600080fd5b6020830194508093505050509250925092565b60006020828403121561063357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561067c5761067c61063a565b500190565b6000828210156106935761069361063a565b50039056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"postState_\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b50604051610add380380610add83398101604081905261002f91610090565b608081905260405161004090610083565b604051809103906000f08015801561005c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100a9565b6106c58061041883390190565b6000602082840312156100a257600080fd5b5051919050565b6080516103556100c3600039600060af01526103556000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610212565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600888886040516100e292919061027e565b6040518091039020901b0361010857600091506101018688018861028e565b9050610127565b610114868801886102a7565b909250905081610123816102f8565b9250505b81610133826001610330565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017979650505050505050565b60008083601f8401126101db57600080fd5b50813567ffffffffffffffff8111156101f357600080fd5b60208301915083602082850101111561020b57600080fd5b9250929050565b6000806000806040858703121561022857600080fd5b843567ffffffffffffffff8082111561024057600080fd5b61024c888389016101c9565b9096509450602087013591508082111561026557600080fd5b50610272878288016101c9565b95989497509550505050565b8183823760009101908152919050565b6000602082840312156102a057600080fd5b5035919050565b600080604083850312156102ba57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610329576103296102c9565b5060010190565b60008219821115610343576103436102c9565b50019056fea164736f6c634300080f000a608060405234801561001057600080fd5b506106a5806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063e03110e11161005b578063e03110e114610111578063e159261114610139578063fe4ac08e1461014e578063fef2b4ed146101c357600080fd5b806361238bde146100825780638542cf50146100c05780639a1f5e7f146100fe575b600080fd5b6100ad610090366004610551565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100ee6100ce366004610551565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100b7565b6100ad61010c366004610573565b6101e3565b61012461011f366004610551565b6102b6565b604080519283526020830191909152016100b7565b61014c6101473660046105a5565b6103a7565b005b61014c61015c366004610573565b6000838152600260209081526040808320878452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558684528252808320968352958152858220939093559283529082905291902055565b6100ad6101d1366004610621565b60006020819052908152604090205481565b60006101ee856104b0565b90506101fb836008610669565b8211806102085750602083115b1561023f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845287528083209483529386528382205581815293849052922055919050565b6000828152600260209081526040808320848452909152812054819060ff1661033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461035b816008610669565b610366856020610669565b106103845783610377826008610669565b6103819190610681565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156103c65763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161761054b81600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b92915050565b6000806040838503121561056457600080fd5b50508035926020909101359150565b6000806000806080858703121561058957600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156105ba57600080fd5b83359250602084013567ffffffffffffffff808211156105d957600080fd5b818601915086601f8301126105ed57600080fd5b8135818111156105fc57600080fd5b87602082850101111561060e57600080fd5b6020830194508093505050509250925092565b60006020828403121561063357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561067c5761067c61063a565b500190565b6000828210156106935761069361063a565b50039056fea164736f6c634300080f000a", } // AlphabetVMABI is the input ABI used to generate the binding from. @@ -262,55 +262,3 @@ func (_AlphabetVM *AlphabetVMSession) Step(_stateData []byte, arg1 []byte) ([32] func (_AlphabetVM *AlphabetVMCallerSession) Step(_stateData []byte, arg1 []byte) ([32]byte, error) { return _AlphabetVM.Contract.Step(&_AlphabetVM.CallOpts, _stateData, arg1) } - -// TraceLength is a free data retrieval call binding the contract method 0xa13060eb. -// -// Solidity: function traceLength() view returns(uint8) -func (_AlphabetVM *AlphabetVMCaller) TraceLength(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _AlphabetVM.contract.Call(opts, &out, "traceLength") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// TraceLength is a free data retrieval call binding the contract method 0xa13060eb. -// -// Solidity: function traceLength() view returns(uint8) -func (_AlphabetVM *AlphabetVMSession) TraceLength() (uint8, error) { - return _AlphabetVM.Contract.TraceLength(&_AlphabetVM.CallOpts) -} - -// TraceLength is a free data retrieval call binding the contract method 0xa13060eb. -// -// Solidity: function traceLength() view returns(uint8) -func (_AlphabetVM *AlphabetVMCallerSession) TraceLength() (uint8, error) { - return _AlphabetVM.Contract.TraceLength(&_AlphabetVM.CallOpts) -} - -// SetTraceLength is a paid mutator transaction binding the contract method 0xa8a8b5eb. -// -// Solidity: function setTraceLength(uint8 _traceLength) returns() -func (_AlphabetVM *AlphabetVMTransactor) SetTraceLength(opts *bind.TransactOpts, _traceLength uint8) (*types.Transaction, error) { - return _AlphabetVM.contract.Transact(opts, "setTraceLength", _traceLength) -} - -// SetTraceLength is a paid mutator transaction binding the contract method 0xa8a8b5eb. -// -// Solidity: function setTraceLength(uint8 _traceLength) returns() -func (_AlphabetVM *AlphabetVMSession) SetTraceLength(_traceLength uint8) (*types.Transaction, error) { - return _AlphabetVM.Contract.SetTraceLength(&_AlphabetVM.TransactOpts, _traceLength) -} - -// SetTraceLength is a paid mutator transaction binding the contract method 0xa8a8b5eb. -// -// Solidity: function setTraceLength(uint8 _traceLength) returns() -func (_AlphabetVM *AlphabetVMTransactorSession) SetTraceLength(_traceLength uint8) (*types.Transaction, error) { - return _AlphabetVM.Contract.SetTraceLength(&_AlphabetVM.TransactOpts, _traceLength) -} diff --git a/op-bindings/bindings/alphabetvm_more.go b/op-bindings/bindings/alphabetvm_more.go index 93bfaa1d6c1c..4f7b1d776df8 100644 --- a/op-bindings/bindings/alphabetvm_more.go +++ b/op-bindings/bindings/alphabetvm_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const AlphabetVMStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"test/FaultDisputeGame.t.sol:AlphabetVM\",\"label\":\"oracle\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_contract(IPreimageOracle)1002\"},{\"astId\":1001,\"contract\":\"test/FaultDisputeGame.t.sol:AlphabetVM\",\"label\":\"traceLength\",\"offset\":20,\"slot\":\"0\",\"type\":\"t_uint8\"}],\"types\":{\"t_contract(IPreimageOracle)1002\":{\"encoding\":\"inplace\",\"label\":\"contract IPreimageOracle\",\"numberOfBytes\":\"20\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const AlphabetVMStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"test/FaultDisputeGame.t.sol:AlphabetVM\",\"label\":\"oracle\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_contract(IPreimageOracle)1001\"}],\"types\":{\"t_contract(IPreimageOracle)1001\":{\"encoding\":\"inplace\",\"label\":\"contract IPreimageOracle\",\"numberOfBytes\":\"20\"}}}" var AlphabetVMStorageLayout = new(solc.StorageLayout) -var AlphabetVMDeployedBin = "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80637dc0d1d014610051578063a13060eb1461009b578063a8a8b5eb146100d2578063f8e0cb961461012e575b600080fd5b6000546100719073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6000546100c09074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610092565b61012c6100e036600461028f565b6000805460ff90921674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b005b61014161013c366004610302565b61014f565b604051908152602001610092565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b6008888860405161018b92919061036e565b6040518091039020901b036101b157600091506101aa8688018861037e565b90506101d0565b6101bd86880188610397565b9092509050816101cc816103e8565b9250505b816101dc826001610420565b60408051602081019390935282015260600160405160208183030381529060405280519060200120925060006001600060149054906101000a900460ff166102249190610438565b60ff16830361023557506001610275565b60005461025f9060019074010000000000000000000000000000000000000000900460ff16610438565b60ff1683101561027157506003610275565b5060025b8060f81b60ff60f81b198516179350505050949350505050565b6000602082840312156102a157600080fd5b813560ff811681146102b257600080fd5b9392505050565b60008083601f8401126102cb57600080fd5b50813567ffffffffffffffff8111156102e357600080fd5b6020830191508360208285010111156102fb57600080fd5b9250929050565b6000806000806040858703121561031857600080fd5b843567ffffffffffffffff8082111561033057600080fd5b61033c888389016102b9565b9096509450602087013591508082111561035557600080fd5b50610362878288016102b9565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561039057600080fd5b5035919050565b600080604083850312156103aa57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610419576104196103b9565b5060010190565b60008219821115610433576104336103b9565b500190565b600060ff821660ff841680821015610452576104526103b9565b9003939250505056fea164736f6c634300080f000a" +var AlphabetVMDeployedBin = "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610212565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600888886040516100e292919061027e565b6040518091039020901b0361010857600091506101018688018861028e565b9050610127565b610114868801886102a7565b909250905081610123816102f8565b9250505b81610133826001610330565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017979650505050505050565b60008083601f8401126101db57600080fd5b50813567ffffffffffffffff8111156101f357600080fd5b60208301915083602082850101111561020b57600080fd5b9250929050565b6000806000806040858703121561022857600080fd5b843567ffffffffffffffff8082111561024057600080fd5b61024c888389016101c9565b9096509450602087013591508082111561026557600080fd5b50610272878288016101c9565b95989497509550505050565b8183823760009101908152919050565b6000602082840312156102a057600080fd5b5035919050565b600080604083850312156102ba57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610329576103296102c9565b5060010190565b60008219821115610343576103436102c9565b50019056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(AlphabetVMStorageLayoutJSON), AlphabetVMStorageLayout); err != nil { diff --git a/op-challenger/game/fault/trace/alphabet/provider.go b/op-challenger/game/fault/trace/alphabet/provider.go index ca02b0782fb8..13c35edb826a 100644 --- a/op-challenger/game/fault/trace/alphabet/provider.go +++ b/op-challenger/game/fault/trace/alphabet/provider.go @@ -59,7 +59,7 @@ func (ap *AlphabetTraceProvider) Get(ctx context.Context, i uint64) (common.Hash if err != nil { return common.Hash{}, err } - return ap.alphabetStateHash(claimBytes), nil + return alphabetStateHash(claimBytes), nil } // AbsolutePreState returns the absolute pre-state for the alphabet trace. @@ -78,7 +78,7 @@ func (ap *AlphabetTraceProvider) AbsolutePreStateCommitment(ctx context.Context) } func (ap *AlphabetTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { - return ap.alphabetStateHash(state), nil + return alphabetStateHash(state), nil } // BuildAlphabetPreimage constructs the claim bytes for the index and state item. @@ -86,18 +86,9 @@ func BuildAlphabetPreimage(i uint64, letter string) []byte { return append(IndexToBytes(i), LetterToBytes(letter)...) } -func (ap *AlphabetTraceProvider) alphabetStateHash(state []byte) common.Hash { +func alphabetStateHash(state []byte) common.Hash { h := crypto.Keccak256Hash(state) - // instead of the state containing an "exited" boolean, we just check if the index reached the end - i := new(big.Int).SetBytes(state[:32]) - finalStateIdx := uint64(len(ap.state) - 1) - if !i.IsUint64() || i.Uint64() > finalStateIdx { - h[0] = mipsevm.VMStatusPanic // this state should never be reached, if we increment by 1 per step - } else if i.Uint64() == finalStateIdx { - h[0] = mipsevm.VMStatusInvalid - } else { - h[0] = mipsevm.VMStatusUnfinished - } + h[0] = mipsevm.VMStatusInvalid return h } diff --git a/op-challenger/game/fault/trace/alphabet/provider_test.go b/op-challenger/game/fault/trace/alphabet/provider_test.go index 748b7861a395..c8caf3b719cf 100644 --- a/op-challenger/game/fault/trace/alphabet/provider_test.go +++ b/op-challenger/game/fault/trace/alphabet/provider_test.go @@ -10,7 +10,7 @@ import ( ) func alphabetClaim(index uint64, letter string, provider *AlphabetTraceProvider) common.Hash { - return provider.alphabetStateHash(BuildAlphabetPreimage(index, letter)) + return alphabetStateHash(BuildAlphabetPreimage(index, letter)) } // TestAlphabetProvider_Get_ClaimsByTraceIndex tests the [fault.AlphabetProvider] Get function. diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 2a65dd26c979..bbc4c87326bd 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -88,16 +88,16 @@ FaucetTest:test_nonAdmin_drip_fails() (gas: 262520) FaucetTest:test_receive_succeeds() (gas: 17401) FaucetTest:test_withdraw_nonAdmin_reverts() (gas: 13145) FaucetTest:test_withdraw_succeeds() (gas: 78359) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 509652) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 516910) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 513211) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 516451) -FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 514790) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 508417) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 515675) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 511976) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 513216) -FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 511555) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 499197) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 506057) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 502738) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 505955) +FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 505224) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 497962) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 504822) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 501503) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 502720) +FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 501989) FaultDisputeGame_Test:test_addLocalData_static_succeeds() (gas: 640504) FaultDisputeGame_Test:test_createdAt_succeeds() (gas: 10342) FaultDisputeGame_Test:test_extraData_succeeds() (gas: 32377) diff --git a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol index 70e2c659d586..f702fde5e69a 100644 --- a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol @@ -515,19 +515,19 @@ contract GamePlayer { (,, Claim grandparentClaim, Position grandparentPos,) = gameProxy.claimData(grandparentIndex); Claim ourGrandparentClaim = claimAt(grandparentPos); - if (Claim.unwrap(ourParentClaim) << 8 != Claim.unwrap(parentClaim) << 8) { + if (Claim.unwrap(ourParentClaim) != Claim.unwrap(parentClaim)) { // Attack parent. movePos = parentPos.move(true); // If we also disagree with the grandparent, attack it as well. - if (Claim.unwrap(ourGrandparentClaim) << 8 != Claim.unwrap(grandparentClaim) << 8) { + if (Claim.unwrap(ourGrandparentClaim) != Claim.unwrap(grandparentClaim)) { movePos2 = grandparentPos.move(true); } // Flag the move as an attack. isAttack = true; } else if ( - Claim.unwrap(ourParentClaim) << 8 == Claim.unwrap(parentClaim) << 8 - && Claim.unwrap(ourGrandparentClaim) << 8 == Claim.unwrap(grandparentClaim) << 8 + Claim.unwrap(ourParentClaim) == Claim.unwrap(parentClaim) + && Claim.unwrap(ourGrandparentClaim) == Claim.unwrap(grandparentClaim) ) { movePos = parentPos.move(false); } @@ -611,16 +611,8 @@ contract GamePlayer { function claimAt(uint256 _traceIndex) public view returns (Claim claim_) { bytes32 hash = keccak256(abi.encode(_traceIndex >= trace.length ? trace.length - 1 : _traceIndex, traceAt(_traceIndex))); - uint256 status; - if (_traceIndex == trace.length - 1) { - status = 1; - } else if (_traceIndex < trace.length - 1) { - status = 3; - } else { - status = 2; - } assembly { - claim_ := or(and(hash, not(shl(248, 0xFF))), shl(248, status)) + claim_ := or(and(hash, not(shl(248, 0xFF))), shl(248, 1)) } } @@ -635,14 +627,13 @@ contract OneVsOne_Arena is FaultDisputeGame_Init { bytes ABSOLUTE_PRESTATE = abi.encode(15); /// @dev The absolute prestate claim. Claim internal constant ABSOLUTE_PRESTATE_CLAIM = - Claim.wrap(bytes32((uint256(3) << 248) | uint256(keccak256(abi.encode(15))))); + Claim.wrap(bytes32((uint256(3) << 248) | (~uint256(0xFF << 248) & uint256(keccak256(abi.encode(15)))))); /// @dev The defender. GamePlayer internal defender; /// @dev The challenger. GamePlayer internal challenger; function init( - bool defenderCorrect, GamePlayer _defender, GamePlayer _challenger, uint256 _finalTraceIndex @@ -658,11 +649,6 @@ contract OneVsOne_Arena is FaultDisputeGame_Init { defender.init(gameProxy, challenger, vm); challenger.init(gameProxy, defender, vm); - // Set the expected trace length to the defender's trace length. - AlphabetVM(address(gameProxy.VM())).setTraceLength( - uint8((defenderCorrect ? _defender : _challenger).trace().length) - ); - // Label actors for trace. vm.label(address(challenger), "Challenger"); vm.label(address(defender), "Defender"); @@ -673,7 +659,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 0); - super.init(false, dishonest, honest, 15); + super.init(dishonest, honest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -694,7 +680,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot1 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 0); - super.init(true, honest, dishonest, 15); + super.init(honest, dishonest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -715,7 +701,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 7); - super.init(false, dishonest, honest, 15); + super.init(dishonest, honest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -736,7 +722,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot2 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 7); - super.init(true, honest, dishonest, 15); + super.init(honest, dishonest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -757,7 +743,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 2); - super.init(false, dishonest, honest, 15); + super.init(dishonest, honest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -778,7 +764,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot3 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 16, 2); - super.init(true, honest, dishonest, 15); + super.init(honest, dishonest, 15); } function test_resolvesCorrectly_succeeds() public { @@ -799,7 +785,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer_HalfTrace(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 8, 5); - super.init(false, dishonest, honest, 7); + super.init(dishonest, honest, 7); } function test_resolvesCorrectly_succeeds() public { @@ -820,7 +806,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot4 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer_HalfTrace(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 8, 5); - super.init(true, honest, dishonest, 7); + super.init(honest, dishonest, 7); } function test_resolvesCorrectly_succeeds() public { @@ -841,7 +827,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer_QuarterTrace(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 4, 3); - super.init(false, dishonest, honest, 3); + super.init(dishonest, honest, 3); } function test_resolvesCorrectly_succeeds() public { @@ -862,7 +848,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRoot5 is OneVsOne_Arena { function setUp() public override { GamePlayer honest = new HonestPlayer_QuarterTrace(ABSOLUTE_PRESTATE); GamePlayer dishonest = new VariableDivergentPlayer(ABSOLUTE_PRESTATE, 4, 3); - super.init(true, honest, dishonest, 3); + super.init(honest, dishonest, 3); } function test_resolvesCorrectly_succeeds() public { @@ -892,7 +878,7 @@ contract FaultDisputeGame_ResolvesCorrectly_IncorrectRootFuzz is OneVsOne_Arena _dishonestTraceLength, i ); - super.init(false, dishonest, honest, _dishonestTraceLength - 1); + super.init(dishonest, honest, _dishonestTraceLength - 1); // Play the game until a step is forced. challenger.play(0); @@ -922,7 +908,7 @@ contract FaultDisputeGame_ResolvesCorrectly_CorrectRootFuzz is OneVsOne_Arena { _dishonestTraceLength, i ); - super.init(true, honest, dishonest, 15); + super.init(honest, dishonest, 15); // Play the game until a step is forced. challenger.play(0); @@ -997,18 +983,11 @@ contract AlphabetVM is IBigStepper { Claim internal immutable ABSOLUTE_PRESTATE; IPreimageOracle public oracle; - uint8 public traceLength = 15; - constructor(Claim _absolutePrestate) { ABSOLUTE_PRESTATE = _absolutePrestate; oracle = new PreimageOracle(); } - /// @notice Sets the expected trace length. - function setTraceLength(uint8 _traceLength) public { - traceLength = _traceLength; - } - /// @inheritdoc IBigStepper function step(bytes calldata _stateData, bytes calldata) external view returns (bytes32 postState_) { uint256 traceIndex; @@ -1024,16 +1003,8 @@ contract AlphabetVM is IBigStepper { } // STF: n -> n + 1 postState_ = keccak256(abi.encode(traceIndex, claim + 1)); - VMStatus status; - if (traceIndex == traceLength - 1) { - status = VMStatuses.INVALID; - } else if (traceIndex < traceLength - 1) { - status = VMStatuses.UNFINISHED; - } else { - status = VMStatuses.PANIC; - } assembly { - postState_ := or(and(postState_, not(shl(248, 0xFF))), shl(248, status)) + postState_ := or(and(postState_, not(shl(248, 0xFF))), shl(248, 1)) } } } From b59b871073c7ec160c3b4933ca9d13e3aadb998a Mon Sep 17 00:00:00 2001 From: clabby Date: Wed, 6 Sep 2023 19:21:57 -0400 Subject: [PATCH 17/20] Add error to `StateWitness::StateHash` --- cannon/cmd/run.go | 10 ++++-- cannon/cmd/witness.go | 5 ++- cannon/mipsevm/evm_test.go | 3 +- cannon/mipsevm/state.go | 33 ++++++++++++------- .../game/fault/trace/cannon/provider.go | 18 ++++++++-- .../test/FaultDisputeGame.t.sol | 8 +---- 6 files changed, 51 insertions(+), 26 deletions(-) diff --git a/cannon/cmd/run.go b/cannon/cmd/run.go index f66593a305b5..1319c7f09563 100644 --- a/cannon/cmd/run.go +++ b/cannon/cmd/run.go @@ -330,12 +330,18 @@ func Run(ctx *cli.Context) error { } if proofAt(state) { - preStateHash := state.EncodeWitness().StateHash() + preStateHash, err := state.EncodeWitness().StateHash() + if err != nil { + return fmt.Errorf("failed to hash prestate witness: %w", err) + } witness, err := stepFn(true) if err != nil { return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.PC, err) } - postStateHash := state.EncodeWitness().StateHash() + postStateHash, err := state.EncodeWitness().StateHash() + if err != nil { + return fmt.Errorf("failed to hash poststate witness: %w", err) + } proof := &Proof{ Step: step, Pre: preStateHash, diff --git a/cannon/cmd/witness.go b/cannon/cmd/witness.go index ac84bb811bb3..d92a27779180 100644 --- a/cannon/cmd/witness.go +++ b/cannon/cmd/witness.go @@ -30,7 +30,10 @@ func Witness(ctx *cli.Context) error { return fmt.Errorf("invalid input state (%v): %w", input, err) } witness := state.EncodeWitness() - h := witness.StateHash() + h, err := witness.StateHash() + if err != nil { + return fmt.Errorf("failed to compute witness hash: %w", err) + } if output != "" { if err := os.WriteFile(output, witness, 0755); err != nil { return fmt.Errorf("writing output to %v: %w", output, err) diff --git a/cannon/mipsevm/evm_test.go b/cannon/mipsevm/evm_test.go index 89c8652968e0..22df188cd8b1 100644 --- a/cannon/mipsevm/evm_test.go +++ b/cannon/mipsevm/evm_test.go @@ -92,7 +92,8 @@ func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte { require.Equal(t, 1, len(logs), "expecting a log with post-state") evmPost := logs[0].Data - stateHash := StateWitness(evmPost).StateHash() + stateHash, err := StateWitness(evmPost).StateHash() + require.NoError(t, err, "state hash could not be computed") require.Equal(t, stateHash, postHash, "logged state must be accurate") m.env.StateDB.RevertToSnapshot(snap) diff --git a/cannon/mipsevm/state.go b/cannon/mipsevm/state.go index a1988fbab6de..086eb1468b89 100644 --- a/cannon/mipsevm/state.go +++ b/cannon/mipsevm/state.go @@ -2,12 +2,16 @@ package mipsevm import ( "encoding/binary" + "fmt" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/crypto" ) +// StateWitnessSize is the size of the state witness encoding in bytes. +var StateWitnessSize = 226 + type State struct { Memory *Memory `json:"memory"` @@ -75,27 +79,32 @@ const ( VMStatusUnfinished = 3 ) -func (sw StateWitness) StateHash() common.Hash { +func (sw StateWitness) StateHash() (common.Hash, error) { hash := crypto.Keccak256Hash(sw) offset := 32*2 + 4*6 + + if len(sw) != 226 { + return common.Hash{}, fmt.Errorf("Invalid witness length. Got %d, expected at least 88", len(sw)) + } + exitCode := sw[offset] exited := sw[offset+1] status := vmStatus(exited == 1, exitCode) hash[0] = status - return hash + return hash, nil } func vmStatus(exited bool, exitCode uint8) uint8 { - if exited { - switch exitCode { - case 0: - return VMStatusValid - case 1: - return VMStatusInvalid - default: - return VMStatusPanic - } - } else { + if !exited { return VMStatusUnfinished } + + switch exitCode { + case 0: + return VMStatusValid + case 1: + return VMStatusInvalid + default: + return VMStatusPanic + } } diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index 06adfdf1548f..05006b38a48e 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -128,7 +128,11 @@ func (p *CannonTraceProvider) AbsolutePreStateCommitment(ctx context.Context) (c if err != nil { return common.Hash{}, fmt.Errorf("cannot load absolute pre-state: %w", err) } - return mipsevm.StateWitness(state).StateHash(), nil + hash, err := mipsevm.StateWitness(state).StateHash() + if err != nil { + return common.Hash{}, fmt.Errorf("cannot hash absolute pre-state: %w", err) + } + return hash, nil } // loadProof will attempt to load or generate the proof data at the specified index @@ -160,8 +164,12 @@ func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*proofDa // Extend the trace out to the full length using a no-op instruction that doesn't change any state // No execution is done, so no proof-data or oracle values are required. witness := state.EncodeWitness() + witnessHash, err := mipsevm.StateWitness(witness).StateHash() + if err != nil { + return nil, fmt.Errorf("cannot hash witness: %w", err) + } proof := &proofData{ - ClaimValue: witness.StateHash(), + ClaimValue: witnessHash, StateData: hexutil.Bytes(witness), ProofData: []byte{}, OracleKey: nil, @@ -188,5 +196,9 @@ func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*proofDa } func (p *CannonTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { - return mipsevm.StateWitness(state).StateHash(), nil + hash, err := mipsevm.StateWitness(state).StateHash() + if err != nil { + return common.Hash{}, fmt.Errorf("cannot hash state: %w", err) + } + return hash, nil } diff --git a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol index f702fde5e69a..cebb2b134eda 100644 --- a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol @@ -633,13 +633,7 @@ contract OneVsOne_Arena is FaultDisputeGame_Init { /// @dev The challenger. GamePlayer internal challenger; - function init( - GamePlayer _defender, - GamePlayer _challenger, - uint256 _finalTraceIndex - ) - public - { + function init(GamePlayer _defender, GamePlayer _challenger, uint256 _finalTraceIndex) public { Claim rootClaim = _defender.claimAt(_finalTraceIndex); super.init(rootClaim, ABSOLUTE_PRESTATE_CLAIM); defender = _defender; From 508fbf3527e70e13a597a8e0045a5d44faa06d5d Mon Sep 17 00:00:00 2001 From: clabby Date: Wed, 6 Sep 2023 19:31:17 -0400 Subject: [PATCH 18/20] :broom: --- cannon/mipsevm/state.go | 5 ++--- op-challenger/game/fault/player_test.go | 5 ----- .../game/fault/trace/alphabet/provider.go | 4 ---- .../game/fault/trace/alphabet/provider_test.go | 12 ++++++------ .../game/fault/trace/cannon/provider.go | 8 -------- .../game/fault/trace/cannon/provider_test.go | 2 +- op-challenger/game/fault/types/types.go | 3 --- packages/contracts-bedrock/test/MIPS.t.sol | 16 +++++++--------- 8 files changed, 16 insertions(+), 39 deletions(-) diff --git a/cannon/mipsevm/state.go b/cannon/mipsevm/state.go index 086eb1468b89..f6f68914376e 100644 --- a/cannon/mipsevm/state.go +++ b/cannon/mipsevm/state.go @@ -80,13 +80,12 @@ const ( ) func (sw StateWitness) StateHash() (common.Hash, error) { - hash := crypto.Keccak256Hash(sw) - offset := 32*2 + 4*6 - if len(sw) != 226 { return common.Hash{}, fmt.Errorf("Invalid witness length. Got %d, expected at least 88", len(sw)) } + hash := crypto.Keccak256Hash(sw) + offset := 32*2 + 4*6 exitCode := sw[offset] exited := sw[offset+1] status := vmStatus(exited == 1, exitCode) diff --git a/op-challenger/game/fault/player_test.go b/op-challenger/game/fault/player_test.go index 5c553d68b755..0a7d60d228cc 100644 --- a/op-challenger/game/fault/player_test.go +++ b/op-challenger/game/fault/player_test.go @@ -222,11 +222,6 @@ func (m *mockTraceProvider) AbsolutePreStateCommitment(ctx context.Context) (com return hash, nil } -// StateHash computes the state-hash of the given state, or returns an error if the state is invalid. -func (m *mockTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { - panic("not implemented") -} - type mockLoader struct { prestateError bool prestate common.Hash diff --git a/op-challenger/game/fault/trace/alphabet/provider.go b/op-challenger/game/fault/trace/alphabet/provider.go index 13c35edb826a..e8864febbd10 100644 --- a/op-challenger/game/fault/trace/alphabet/provider.go +++ b/op-challenger/game/fault/trace/alphabet/provider.go @@ -77,10 +77,6 @@ func (ap *AlphabetTraceProvider) AbsolutePreStateCommitment(ctx context.Context) return hash, nil } -func (ap *AlphabetTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { - return alphabetStateHash(state), nil -} - // BuildAlphabetPreimage constructs the claim bytes for the index and state item. func BuildAlphabetPreimage(i uint64, letter string) []byte { return append(IndexToBytes(i), LetterToBytes(letter)...) diff --git a/op-challenger/game/fault/trace/alphabet/provider_test.go b/op-challenger/game/fault/trace/alphabet/provider_test.go index c8caf3b719cf..20baa8714027 100644 --- a/op-challenger/game/fault/trace/alphabet/provider_test.go +++ b/op-challenger/game/fault/trace/alphabet/provider_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/require" ) -func alphabetClaim(index uint64, letter string, provider *AlphabetTraceProvider) common.Hash { +func alphabetClaim(index uint64, letter string) common.Hash { return alphabetStateHash(BuildAlphabetPreimage(index, letter)) } @@ -25,15 +25,15 @@ func TestAlphabetProvider_Get_ClaimsByTraceIndex(t *testing.T) { }{ { 7, - alphabetClaim(7, "h", canonicalProvider), + alphabetClaim(7, "h"), }, { 3, - alphabetClaim(3, "d", canonicalProvider), + alphabetClaim(3, "d"), }, { 5, - alphabetClaim(5, "f", canonicalProvider), + alphabetClaim(5, "f"), }, } @@ -80,7 +80,7 @@ func TestGet_Succeeds(t *testing.T) { ap := NewTraceProvider("abc", 2) claim, err := ap.Get(context.Background(), 0) require.NoError(t, err) - expected := alphabetClaim(0, "a", ap) + expected := alphabetClaim(0, "a") require.Equal(t, expected, claim) } @@ -98,6 +98,6 @@ func TestGet_Extends(t *testing.T) { ap := NewTraceProvider("abc", 2) claim, err := ap.Get(context.Background(), 3) require.NoError(t, err) - expected := alphabetClaim(2, "c", ap) + expected := alphabetClaim(2, "c") require.Equal(t, expected, claim) } diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index 05006b38a48e..f4e14814d234 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -194,11 +194,3 @@ func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*proofDa } return &proof, nil } - -func (p *CannonTraceProvider) StateHash(ctx context.Context, state []byte) (common.Hash, error) { - hash, err := mipsevm.StateWitness(state).StateHash() - if err != nil { - return common.Hash{}, fmt.Errorf("cannot hash state: %w", err) - } - return hash, nil -} diff --git a/op-challenger/game/fault/trace/cannon/provider_test.go b/op-challenger/game/fault/trace/cannon/provider_test.go index 151e1cddacef..7d6eac134bcb 100644 --- a/op-challenger/game/fault/trace/cannon/provider_test.go +++ b/op-challenger/game/fault/trace/cannon/provider_test.go @@ -42,7 +42,7 @@ func TestGet(t *testing.T) { value, err := provider.Get(context.Background(), 7000) require.NoError(t, err) require.Contains(t, generator.generated, 7000, "should have tried to generate the proof") - stateHash, err := provider.StateHash(context.Background(), generator.finalState.EncodeWitness()) + stateHash, err := generator.finalState.EncodeWitness().StateHash() require.NoError(t, err) require.Equal(t, stateHash, value) }) diff --git a/op-challenger/game/fault/types/types.go b/op-challenger/game/fault/types/types.go index 5237b41c69f5..ff6983751cff 100644 --- a/op-challenger/game/fault/types/types.go +++ b/op-challenger/game/fault/types/types.go @@ -108,9 +108,6 @@ type TraceProvider interface { // AbsolutePreStateCommitment is the commitment of the pre-image value of the trace that transitions to the trace value at index 0 AbsolutePreStateCommitment(ctx context.Context) (hash common.Hash, err error) - - // StateHash computes the state-hash of the given state, or returns an error if the state is invalid. - StateHash(ctx context.Context, state []byte) (common.Hash, error) } // ClaimData is the core of a claim. It must be unique inside a specific game. diff --git a/packages/contracts-bedrock/test/MIPS.t.sol b/packages/contracts-bedrock/test/MIPS.t.sol index 9ac0cb5b496d..76013d14a32c 100644 --- a/packages/contracts-bedrock/test/MIPS.t.sol +++ b/packages/contracts-bedrock/test/MIPS.t.sol @@ -1560,16 +1560,14 @@ contract MIPS_Test is CommonTest { /// 2. Exited with failure (Panic) /// 3. Unfinished function vmStatus(MIPS.State memory state) internal pure returns (VMStatus out_) { - if (state.exited) { - if (state.exitCode == 0) { - return VMStatuses.VALID; - } else if (state.exitCode == 1) { - return VMStatuses.INVALID; - } else { - return VMStatuses.PANIC; - } - } else { + if (!state.exited) { return VMStatuses.UNFINISHED; + } else if (state.exitCode == 0) { + return VMStatuses.VALID; + } else if (state.exitCode == 1) { + return VMStatuses.INVALID; + } else { + return VMStatuses.PANIC; } } From 7b68fe4d75496f934405567c19409a40d3bd5101 Mon Sep 17 00:00:00 2001 From: clabby Date: Wed, 6 Sep 2023 19:48:08 -0400 Subject: [PATCH 19/20] Allow for a game to be created with a root claim committing to a paniced VM state Fix test --- op-bindings/bindings/faultdisputegame.go | 2 +- op-bindings/bindings/faultdisputegame_more.go | 2 +- packages/contracts-bedrock/.gas-snapshot | 144 +++++++++--------- packages/contracts-bedrock/semver-lock.json | 2 +- .../src/dispute/FaultDisputeGame.sol | 3 +- .../test/FaultDisputeGame.t.sol | 3 +- 6 files changed, 79 insertions(+), 77 deletions(-) diff --git a/op-bindings/bindings/faultdisputegame.go b/op-bindings/bindings/faultdisputegame.go index 7ef612054d23..2da88ef8329b 100644 --- a/op-bindings/bindings/faultdisputegame.go +++ b/op-bindings/bindings/faultdisputegame.go @@ -38,7 +38,7 @@ type IFaultDisputeGameOutputProposal struct { // FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract. var FaultDisputeGameMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2oo\",\"type\":\"address\"},{\"internalType\":\"contractBlockOracle\",\"name\":\"_blockOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1HeadTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_ORACLE\",\"outputs\":[{\"internalType\":\"contractBlockOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l1BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposals\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"starting\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"disputed\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d5238038062002d528339810160408190526200003591620000a1565b6000608081905260a052600960c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b366200021c600039600081816105220152611efc01526000818161035e015261177e01526000818161059b0152818161154b0152818161161f01526116f80152600081816104ec015281816107450152611c7b0152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a7a0152600081816102210152611bd601526000610d3401526000610d0b01526000610ce20152612b366000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123d7565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612428565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123d7565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124df565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b6040516102069291906124f9565b34801561043e57600080fd5b50610395610d7e565b6101d1610455366004612562565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123d7565b611954565b34801561062957600080fd5b5061063d610638366004612597565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd3660046125f9565b6119d1565b3480156106ce57600080fd5b506106d7611efa565b60405161020693929190612683565b6000805468010000000000000000900460ff16600281111561070a5761070a6123f9565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ae565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb6123f9565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612713565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61272a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f57565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461272a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61272a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612713565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612759565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127a0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c806123f9565b021790556002811115610c9557610c956123f9565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061200c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061200c565b610d587f000000000000000000000000000000000000000000000000000000000000000061200c565b604051602001610d6a939291906127c7565b604051602081830303815290604052905090565b6060610cc660206040612149565b6000805468010000000000000000900460ff166002811115610db057610db06123f9565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61272a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121e016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361272a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612759565b61108b9190612713565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361272a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b6001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061283d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612713565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128a5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128a5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612931565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612713565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f56123f9565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161272a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612759565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121e8565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129b8565b865463ffffffff1661228e565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129e9565b90505b600882901b60088a8a604051611c31929190612a1d565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611cd89493929190612a76565b6020604051808303816000875af1158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b919061283d565b600284810154929091149250600091611dc6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e62886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c9190612aa8565b611e7691906127a0565b67ffffffffffffffff161590508115158103611ebe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f50610d7e565b9050909192565b600080611fe4847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361204f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612079578061206381612ac9565b91506120729050600a83612b01565b9150612053565b60008167ffffffffffffffff81111561209457612094612856565b6040519080825280601f01601f1916602001820160405280156120be576020820181803683370190505b5090505b8415612141576120d3600183612713565b91506120e0600a86612b15565b6120eb906030612759565b60f81b8183815181106121005761210061272a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061213a600a86612b01565b94506120c2565b949350505050565b6060600061218084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612759565b90508267ffffffffffffffff1667ffffffffffffffff8111156121a5576121a5612856565b6040519080825280601f01601f1916602001820160405280156121cf576020820181803683370190505b509150828160208401375092915050565b151760011b90565b600080612275837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ac846fffffffffffffffffffffffffffffffff1661232b565b9050600283815481106122c1576122c161272a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232457815460028054909163ffffffff1690811061230f5761230f61272a565b906000526020600020906003020191506122d2565b5092915050565b600081196001830116816123bf827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123ea57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612463577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248457818101518382015260200161246c565b8381111561089f5750506000910152565b600081518084526124ad816020860160208601612469565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124f26020830184612495565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124f2565b8035801515811461255d57600080fd5b919050565b60008060006060848603121561257757600080fd5b833592506020840135915061258e6040850161254d565b90509250925092565b6000602082840312156125a957600080fd5b5035919050565b60008083601f8401126125c257600080fd5b50813567ffffffffffffffff8111156125da57600080fd5b6020830191508360208285010111156125f257600080fd5b9250929050565b6000806000806000806080878903121561261257600080fd5b863595506126226020880161254d565b9450604087013567ffffffffffffffff8082111561263f57600080fd5b61264b8a838b016125b0565b9096509450606089013591508082111561266457600080fd5b5061267189828a016125b0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126a56060830184612495565b95945050505050565b6000602082840312156126c057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124f257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612725576127256126e4565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561276c5761276c6126e4565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127bb576127bb612771565b92169190910692915050565b600084516127d9818460208901612469565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612815816001850160208a01612469565b60019201918201528351612830816002840160208801612469565b0160020195945050505050565b60006020828403121561284f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461255d57600080fd5b6000606082840312156128b757600080fd5b6040516060810181811067ffffffffffffffff82111715612901577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291460208401612885565b602082015261292560408401612885565b60408201529392505050565b60006040828403121561294357600080fd5b6040516040810167ffffffffffffffff828210818311171561298e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129ab57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129e1576129e16126e4565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1457612a146126e4565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a8a604083018688612a2d565b8281036020840152612a9d818587612a2d565b979650505050505050565b600067ffffffffffffffff838116908316818110156129e1576129e16126e4565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612afa57612afa6126e4565b5060010190565b600082612b1057612b10612771565b500490565b600082612b2457612b24612771565b50069056fea164736f6c634300080f000a", + Bin: "0x6101c06040523480156200001257600080fd5b5060405162002d6238038062002d628339810160408190526200003591620000a1565b6000608081905260a052600960c05260ff9096166101a05260e094909452610100929092526001600160401b0316610120526001600160a01b039081166101405290811661016052166101805262000145565b6001600160a01b03811681146200009e57600080fd5b50565b600080600080600080600060e0888a031215620000bd57600080fd5b875160ff81168114620000cf57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000fc57600080fd5b60808901519094506200010f8162000088565b60a0890151909350620001228162000088565b60c0890151909250620001358162000088565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612b466200021c600039600081816105220152611f0c01526000818161035e015261178d01526000818161059b0152818161155a0152818161162e01526117070152600081816104ec015281816107450152611c8b0152600081816105cf01528181610ab7015261109801526000818161032a015281816109bf01528181610ed70152611a8a0152600081816102210152611be601526000610d3401526000610d0b01526000610ce20152612b466000f3fe6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e7565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612438565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e7565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124ef565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612509565b34801561043e57600080fd5b50610395610d7e565b6101d1610455366004612572565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e7565b611964565b34801561062957600080fd5b5061063d6106383660046125a7565b611970565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612609565b6119e1565b3480156106ce57600080fd5b506106d7611f0a565b60405161020693929190612693565b6000805468010000000000000000900460ff16600281111561070a5761070a612409565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126be565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612409565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612723565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61273a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f67565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461273a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61273a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612723565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612769565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127b0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612409565b021790556002811115610c9557610c95612409565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061201c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061201c565b610d587f000000000000000000000000000000000000000000000000000000000000000061201c565b604051602001610d6a939291906127d7565b604051602081830303815290604052905090565b6060610cc660206040612159565b6000805468010000000000000000900460ff166002811115610db057610db0612409565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61273a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121f016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361273a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612769565b61108b9190612723565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361273a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a60018114806113a0575060ff81166002145b611406576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161148b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115b460207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115d291815260200190565b602060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611613919061284d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761165e600185612723565b6040518263ffffffff1660e01b815260040161167c91815260200190565b606060405180830381865afa158015611699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bd91906128b5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177291906128b5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117fe91815260200190565b6040805180830381865afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612941565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161189d576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118b8600189612723565b6fffffffffffffffffffffffffffffffff908116825260408881015182166020808501919091529851928101929092529183528051606081018252978216885285810151821688880152945187860152908501959095528051805181860151908716700100000000000000000000000000000000918816820217600355908401516004559084015180519481015194861694909516029290921760055591909101516006555160015550565b610cd782826001610d8c565b6002818154811061198057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff166002811115611a0557611a05612409565b14611a3c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a5157611a5161273a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611ab07f00000000000000000000000000000000000000000000000000000000000000006001612769565b611b4c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b8d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c1057611bb1836fffffffffffffffffffffffffffffffff166121f8565b67ffffffffffffffff1615611be457611bdb611bce6001866129c8565b865463ffffffff1661229e565b60010154611c06565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c2a565b84600101549150611c27846001611bce91906129f9565b90505b600882901b60088a8a604051611c41929190612a2d565b6040518091039020901b14611c82576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611ce89493929190612a86565b6020604051808303816000875af1158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b919061284d565b600284810154929091149250600091611dd6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e72886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e7c9190612ab8565b611e8691906127b0565b67ffffffffffffffff161590508115158103611ece576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f60610d7e565b9050909192565b600080611ff4847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612089578061207381612ad9565b91506120829050600a83612b11565b9150612063565b60008167ffffffffffffffff8111156120a4576120a4612866565b6040519080825280601f01601f1916602001820160405280156120ce576020820181803683370190505b5090505b8415612151576120e3600183612723565b91506120f0600a86612b25565b6120fb906030612769565b60f81b8183815181106121105761211061273a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061214a600a86612b11565b94506120d2565b949350505050565b6060600061219084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612769565b90508267ffffffffffffffff1667ffffffffffffffff8111156121b5576121b5612866565b6040519080825280601f01601f1916602001820160405280156121df576020820181803683370190505b509150828160208401375092915050565b151760011b90565b600080612285837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122bc846fffffffffffffffffffffffffffffffff1661233b565b9050600283815481106122d1576122d161273a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461233457815460028054909163ffffffff1690811061231f5761231f61273a565b906000526020600020906003020191506122e2565b5092915050565b600081196001830116816123cf827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123fa57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612473577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561249457818101518382015260200161247c565b8381111561089f5750506000910152565b600081518084526124bd816020860160208601612479565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061250260208301846124a5565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612502565b8035801515811461256d57600080fd5b919050565b60008060006060848603121561258757600080fd5b833592506020840135915061259e6040850161255d565b90509250925092565b6000602082840312156125b957600080fd5b5035919050565b60008083601f8401126125d257600080fd5b50813567ffffffffffffffff8111156125ea57600080fd5b60208301915083602082850101111561260257600080fd5b9250929050565b6000806000806000806080878903121561262257600080fd5b863595506126326020880161255d565b9450604087013567ffffffffffffffff8082111561264f57600080fd5b61265b8a838b016125c0565b9096509450606089013591508082111561267457600080fd5b5061268189828a016125c0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126b560608301846124a5565b95945050505050565b6000602082840312156126d057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461250257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612735576127356126f4565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561277c5761277c6126f4565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127cb576127cb612781565b92169190910692915050565b600084516127e9818460208901612479565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612825816001850160208a01612479565b60019201918201528351612840816002840160208801612479565b0160020195945050505050565b60006020828403121561285f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256d57600080fd5b6000606082840312156128c757600080fd5b6040516060810181811067ffffffffffffffff82111715612911577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261292460208401612895565b602082015261293560408401612895565b60408201529392505050565b60006040828403121561295357600080fd5b6040516040810167ffffffffffffffff828210818311171561299e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129bb57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129f1576129f16126f4565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a2457612a246126f4565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a9a604083018688612a3d565b8281036020840152612aad818587612a3d565b979650505050505050565b600067ffffffffffffffff838116908316818110156129f1576129f16126f4565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0a57612b0a6126f4565b5060010190565b600082612b2057612b20612781565b500490565b600082612b3457612b34612781565b50069056fea164736f6c634300080f000a", } // FaultDisputeGameABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/faultdisputegame_more.go b/op-bindings/bindings/faultdisputegame_more.go index 67169f098ddb..42a701fb4b1e 100644 --- a/op-bindings/bindings/faultdisputegame_more.go +++ b/op-bindings/bindings/faultdisputegame_more.go @@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr var FaultDisputeGameStorageLayout = new(solc.StorageLayout) -var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123d7565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612428565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123d7565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124df565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b6040516102069291906124f9565b34801561043e57600080fd5b50610395610d7e565b6101d1610455366004612562565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123d7565b611954565b34801561062957600080fd5b5061063d610638366004612597565b611960565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd3660046125f9565b6119d1565b3480156106ce57600080fd5b506106d7611efa565b60405161020693929190612683565b6000805468010000000000000000900460ff16600281111561070a5761070a6123f9565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126ae565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb6123f9565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612713565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61272a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f57565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461272a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61272a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612713565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612759565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127a0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c806123f9565b021790556002811115610c9557610c956123f9565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061200c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061200c565b610d587f000000000000000000000000000000000000000000000000000000000000000061200c565b604051602001610d6a939291906127c7565b604051602081830303815290604052905090565b6060610cc660206040612149565b6000805468010000000000000000900460ff166002811115610db057610db06123f9565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61272a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121e016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361272a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612759565b61108b9190612713565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361272a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b6001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a146113f7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161147c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115a560207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115c391815260200190565b602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061283d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761164f600185612713565b6040518263ffffffff1660e01b815260040161166d91815260200190565b606060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906128a5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906128a5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117ef91815260200190565b6040805180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612931565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161188e576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118a9600189612713565b6fffffffffffffffffffffffffffffffff9081168252604088810151821660208085019190915298519281019290925291835280516060810182529782168852858101518216888801529451878601529085019590955280518051818601519087167001000000000000000000000000000000009188168202176003559084015160045590840151805194810151948616949095160292909217600555919091015160065551600155565b610cd782826001610d8c565b6002818154811061197057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff1660028111156119f5576119f56123f9565b14611a2c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a4157611a4161272a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611aa07f00000000000000000000000000000000000000000000000000000000000000006001612759565b611b3c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b7d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c0057611ba1836fffffffffffffffffffffffffffffffff166121e8565b67ffffffffffffffff1615611bd457611bcb611bbe6001866129b8565b865463ffffffff1661228e565b60010154611bf6565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c1a565b84600101549150611c17846001611bbe91906129e9565b90505b600882901b60088a8a604051611c31929190612a1d565b6040518091039020901b14611c72576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611cd89493929190612a76565b6020604051808303816000875af1158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b919061283d565b600284810154929091149250600091611dc6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e62886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e6c9190612aa8565b611e7691906127a0565b67ffffffffffffffff161590508115158103611ebe576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f50610d7e565b9050909192565b600080611fe4847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361204f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612079578061206381612ac9565b91506120729050600a83612b01565b9150612053565b60008167ffffffffffffffff81111561209457612094612856565b6040519080825280601f01601f1916602001820160405280156120be576020820181803683370190505b5090505b8415612141576120d3600183612713565b91506120e0600a86612b15565b6120eb906030612759565b60f81b8183815181106121005761210061272a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061213a600a86612b01565b94506120c2565b949350505050565b6060600061218084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612759565b90508267ffffffffffffffff1667ffffffffffffffff8111156121a5576121a5612856565b6040519080825280601f01601f1916602001820160405280156121cf576020820181803683370190505b509150828160208401375092915050565b151760011b90565b600080612275837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122ac846fffffffffffffffffffffffffffffffff1661232b565b9050600283815481106122c1576122c161272a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461232457815460028054909163ffffffff1690811061230f5761230f61272a565b906000526020600020906003020191506122d2565b5092915050565b600081196001830116816123bf827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123ea57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612463577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561248457818101518382015260200161246c565b8381111561089f5750506000910152565b600081518084526124ad816020860160208601612469565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124f26020830184612495565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c081016124f2565b8035801515811461255d57600080fd5b919050565b60008060006060848603121561257757600080fd5b833592506020840135915061258e6040850161254d565b90509250925092565b6000602082840312156125a957600080fd5b5035919050565b60008083601f8401126125c257600080fd5b50813567ffffffffffffffff8111156125da57600080fd5b6020830191508360208285010111156125f257600080fd5b9250929050565b6000806000806000806080878903121561261257600080fd5b863595506126226020880161254d565b9450604087013567ffffffffffffffff8082111561263f57600080fd5b61264b8a838b016125b0565b9096509450606089013591508082111561266457600080fd5b5061267189828a016125b0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126a56060830184612495565b95945050505050565b6000602082840312156126c057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146124f257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612725576127256126e4565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561276c5761276c6126e4565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127bb576127bb612771565b92169190910692915050565b600084516127d9818460208901612469565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612815816001850160208a01612469565b60019201918201528351612830816002840160208801612469565b0160020195945050505050565b60006020828403121561284f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461255d57600080fd5b6000606082840312156128b757600080fd5b6040516060810181811067ffffffffffffffff82111715612901577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261291460208401612885565b602082015261292560408401612885565b60408201529392505050565b60006040828403121561294357600080fd5b6040516040810167ffffffffffffffff828210818311171561298e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129ab57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129e1576129e16126e4565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a1457612a146126e4565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a8a604083018688612a2d565b8281036020840152612a9d818587612a2d565b979650505050505050565b600067ffffffffffffffff838116908316818110156129e1576129e16126e4565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612afa57612afa6126e4565b5060010190565b600082612b1057612b10612771565b500490565b600082612b2457612b24612771565b50069056fea164736f6c634300080f000a" +var FaultDisputeGameDeployedBin = "0x6080604052600436106101ac5760003560e01c80636361506d116100ec578063c0c3a0921161008a578063c6f0308c11610064578063c6f0308c1461061d578063cf09e0d014610681578063d8cc1a3c146106a2578063fa24f743146106c257600080fd5b8063c0c3a09214610589578063c31b29ce146105bd578063c55cd0c71461060a57600080fd5b80638b85902b116100c65780638b85902b1461049a57806392931298146104da578063bbdc02db1461050e578063bcef3b551461054c57600080fd5b80636361506d1461045a5780638129fc1c146104705780638980e0cc1461048557600080fd5b8063363cc4271161015957806354fd4d501161013357806354fd4d501461038057806355ef20e6146103a2578063609d333414610432578063632247ea1461044757600080fd5b8063363cc427146102b95780634778efe814610318578063529184c91461034c57600080fd5b80632810e1d61161018a5780632810e1d614610251578063298c90051461026657806335fef567146102a657600080fd5b80631e27052a146101b1578063200d2ed2146101d3578063266198f91461020f575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046123e7565b6106e6565b005b3480156101df57600080fd5b506000546101f99068010000000000000000900460ff1681565b6040516102069190612438565b60405180910390f35b34801561021b57600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610206565b34801561025d57600080fd5b506101f96108a5565b34801561027257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360400135610243565b6101d16102b43660046123e7565b610ccb565b3480156102c557600080fd5b506000546102f3906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b34801561032457600080fd5b506102437f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50610395610cdb565b60405161020691906124ef565b3480156103ae57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104249182565b604051610206929190612509565b34801561043e57600080fd5b50610395610d7e565b6101d1610455366004612572565b610d8c565b34801561046657600080fd5b5061024360015481565b34801561047c57600080fd5b506101d1611360565b34801561049157600080fd5b50600254610243565b3480156104a657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610243565b3480156104e657600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610206565b34801561055857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610243565b34801561059557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c957600080fd5b506105f17f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610206565b6101d16106183660046123e7565b611964565b34801561062957600080fd5b5061063d6106383660046125a7565b611970565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610206565b34801561068d57600080fd5b506000546105f19067ffffffffffffffff1681565b3480156106ae57600080fd5b506101d16106bd366004612609565b6119e1565b3480156106ce57600080fd5b506106d7611f0a565b60405161020693929190612693565b6000805468010000000000000000900460ff16600281111561070a5761070a612409565b14610741576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d291906126be565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c8190526020859052909150600084600181146108395760028114610843576003811461084d576004811461085757600581146108675763ff137e656000526004601cfd5b600154915061086e565b600454915061086e565b600654915061086e565b60035460801c60c01b915061086e565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af161089f573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff1660028111156108cb576108cb612409565b14610902576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460009061091490600190612723565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156109fe5760006002828154811061094e5761094e61273a565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561099f5750610929565b60028101546000906109e3906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611f67565b9050838110156109f7578093508260010194505b5050610929565b50600060028381548110610a1457610a1461273a565b600091825260208220600390910201805490925063ffffffff90811691908214610a7e5760028281548110610a4b57610a4b61273a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610aaa565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c16610aee67ffffffffffffffff831642612723565b610b0a836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610b1e9190612769565b11610b55576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283810154610bf7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b610c0191906127b0565b67ffffffffffffffff16158015610c2857506fffffffffffffffffffffffffffffffff8414155b15610c365760029550610c3b565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610c8057610c80612409565b021790556002811115610c9557610c95612409565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b905090565b610cd782826000610d8c565b5050565b6060610d067f000000000000000000000000000000000000000000000000000000000000000061201c565b610d2f7f000000000000000000000000000000000000000000000000000000000000000061201c565b610d587f000000000000000000000000000000000000000000000000000000000000000061201c565b604051602001610d6a939291906127d7565b604051602081830303815290604052905090565b6060610cc660206040612159565b6000805468010000000000000000900460ff166002811115610db057610db0612409565b14610de7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610df3575080155b15610e2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610e3f57610e3f61273a565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610ed3919085906121f016565b90507f0000000000000000000000000000000000000000000000000000000000000000610f92826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610fd4576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614611034576002836000015163ffffffff16815481106110035761100361273a565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff164261106d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166110819190612769565b61108b9190612723565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff821611156110fe576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42179050600061111f888660009182526020526040902090565b60008181526007602052604090205490915060ff161561116b576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b9081106112e3576112e361273a565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9093169290921790915560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a60018114806113a0575060ff81166002145b611406576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff8152602081019290925260029190810161148b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206115b460207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b81526004016115d291815260200190565b602060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611613919061284d565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761165e600185612723565b6040518263ffffffff1660e01b815260040161167c91815260200190565b606060405180830381865afa158015611699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bd91906128b5565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177291906128b5565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b81526004016117fe91815260200190565b6040805180830381865afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612941565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff161161189d576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806118b8600189612723565b6fffffffffffffffffffffffffffffffff908116825260408881015182166020808501919091529851928101929092529183528051606081018252978216885285810151821688880152945187860152908501959095528051805181860151908716700100000000000000000000000000000000918816820217600355908401516004559084015180519481015194861694909516029290921760055591909101516006555160015550565b610cd782826001610d8c565b6002818154811061198057600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff166002811115611a0557611a05612409565b14611a3c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110611a5157611a5161273a565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611ab07f00000000000000000000000000000000000000000000000000000000000000006001612769565b611b4c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611b8d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611c1057611bb1836fffffffffffffffffffffffffffffffff166121f8565b67ffffffffffffffff1615611be457611bdb611bce6001866129c8565b865463ffffffff1661229e565b60010154611c06565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611c2a565b84600101549150611c27846001611bce91906129f9565b90505b600882901b60088a8a604051611c41929190612a2d565b6040518091039020901b14611c82576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611ce89493929190612a86565b6020604051808303816000875af1158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b919061284d565b600284810154929091149250600091611dd6906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e72886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e7c9190612ab8565b611e8691906127b0565b67ffffffffffffffff161590508115158103611ece576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611f60610d7e565b9050909192565b600080611ff4847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361205f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612089578061207381612ad9565b91506120829050600a83612b11565b9150612063565b60008167ffffffffffffffff8111156120a4576120a4612866565b6040519080825280601f01601f1916602001820160405280156120ce576020820181803683370190505b5090505b8415612151576120e3600183612723565b91506120f0600a86612b25565b6120fb906030612769565b60f81b8183815181106121105761211061273a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061214a600a86612b11565b94506120d2565b949350505050565b6060600061219084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612769565b90508267ffffffffffffffff1667ffffffffffffffff8111156121b5576121b5612866565b6040519080825280601f01601f1916602001820160405280156121df576020820181803683370190505b509150828160208401375092915050565b151760011b90565b600080612285837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000806122bc846fffffffffffffffffffffffffffffffff1661233b565b9050600283815481106122d1576122d161273a565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff82811691161461233457815460028054909163ffffffff1690811061231f5761231f61273a565b906000526020600020906003020191506122e2565b5092915050565b600081196001830116816123cf827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080604083850312156123fa57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612473577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60005b8381101561249457818101518382015260200161247c565b8381111561089f5750506000910152565b600081518084526124bd816020860160208601612479565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061250260208301846124a5565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c08101612502565b8035801515811461256d57600080fd5b919050565b60008060006060848603121561258757600080fd5b833592506020840135915061259e6040850161255d565b90509250925092565b6000602082840312156125b957600080fd5b5035919050565b60008083601f8401126125d257600080fd5b50813567ffffffffffffffff8111156125ea57600080fd5b60208301915083602082850101111561260257600080fd5b9250929050565b6000806000806000806080878903121561262257600080fd5b863595506126326020880161255d565b9450604087013567ffffffffffffffff8082111561264f57600080fd5b61265b8a838b016125c0565b9096509450606089013591508082111561267457600080fd5b5061268189828a016125c0565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006126b560608301846124a5565b95945050505050565b6000602082840312156126d057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461250257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612735576127356126f4565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561277c5761277c6126f4565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806127cb576127cb612781565b92169190910692915050565b600084516127e9818460208901612479565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612825816001850160208a01612479565b60019201918201528351612840816002840160208801612479565b0160020195945050505050565b60006020828403121561285f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461256d57600080fd5b6000606082840312156128c757600080fd5b6040516060810181811067ffffffffffffffff82111715612911577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251815261292460208401612895565b602082015261293560408401612895565b60408201529392505050565b60006040828403121561295357600080fd5b6040516040810167ffffffffffffffff828210818311171561299e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81604052845183526020850151915080821682146129bb57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156129f1576129f16126f4565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a2457612a246126f4565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612a9a604083018688612a3d565b8281036020840152612aad818587612a3d565b979650505050505050565b600067ffffffffffffffff838116908316818110156129f1576129f16126f4565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b0a57612b0a6126f4565b5060010190565b600082612b2057612b20612781565b500490565b600082612b3457612b34612781565b50069056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(FaultDisputeGameStorageLayoutJSON), FaultDisputeGameStorageLayout); err != nil { diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index bbc4c87326bd..c75e3d3d741f 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -104,8 +104,8 @@ FaultDisputeGame_Test:test_extraData_succeeds() (gas: 32377) FaultDisputeGame_Test:test_gameData_succeeds() (gas: 32804) FaultDisputeGame_Test:test_gameType_succeeds() (gas: 8309) FaultDisputeGame_Test:test_initialize_correctData_succeeds() (gas: 57628) -FaultDisputeGame_Test:test_initialize_firstOutput_reverts() (gas: 210609) -FaultDisputeGame_Test:test_initialize_l1HeadTooOld_reverts() (gas: 228370) +FaultDisputeGame_Test:test_initialize_firstOutput_reverts() (gas: 210629) +FaultDisputeGame_Test:test_initialize_l1HeadTooOld_reverts() (gas: 228390) FaultDisputeGame_Test:test_move_clockCorrectness_succeeds() (gas: 415971) FaultDisputeGame_Test:test_move_clockTimeExceeded_reverts() (gas: 23197) FaultDisputeGame_Test:test_move_defendRoot_reverts() (gas: 13344) @@ -298,81 +298,81 @@ LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 12957) LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10755) LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34524) LibPosition_Test:test_pos_correctness_succeeds() (gas: 38689) -MIPS_Test:test_add_succeeds() (gas: 122424) -MIPS_Test:test_addiSign_succeeds() (gas: 122415) -MIPS_Test:test_addi_succeeds() (gas: 122612) -MIPS_Test:test_addu_succeeds() (gas: 122466) -MIPS_Test:test_addui_succeeds() (gas: 122674) -MIPS_Test:test_and_succeeds() (gas: 122485) -MIPS_Test:test_andi_succeeds() (gas: 122418) -MIPS_Test:test_beq_succeeds() (gas: 202809) -MIPS_Test:test_bgez_succeeds() (gas: 121711) -MIPS_Test:test_bgtz_succeeds() (gas: 121632) -MIPS_Test:test_blez_succeeds() (gas: 121588) -MIPS_Test:test_bltz_succeeds() (gas: 121731) -MIPS_Test:test_bne_succeeds() (gas: 121797) +MIPS_Test:test_add_succeeds() (gas: 122420) +MIPS_Test:test_addiSign_succeeds() (gas: 122411) +MIPS_Test:test_addi_succeeds() (gas: 122608) +MIPS_Test:test_addu_succeeds() (gas: 122462) +MIPS_Test:test_addui_succeeds() (gas: 122670) +MIPS_Test:test_and_succeeds() (gas: 122481) +MIPS_Test:test_andi_succeeds() (gas: 122414) +MIPS_Test:test_beq_succeeds() (gas: 202801) +MIPS_Test:test_bgez_succeeds() (gas: 121707) +MIPS_Test:test_bgtz_succeeds() (gas: 121628) +MIPS_Test:test_blez_succeeds() (gas: 121584) +MIPS_Test:test_bltz_succeeds() (gas: 121727) +MIPS_Test:test_bne_succeeds() (gas: 121793) MIPS_Test:test_branch_inDelaySlot_fails() (gas: 85999) -MIPS_Test:test_brk_succeeds() (gas: 122096) -MIPS_Test:test_clo_succeeds() (gas: 122153) -MIPS_Test:test_clone_succeeds() (gas: 122049) -MIPS_Test:test_clz_succeeds() (gas: 122624) -MIPS_Test:test_div_succeeds() (gas: 122603) -MIPS_Test:test_divu_succeeds() (gas: 122588) -MIPS_Test:test_exit_succeeds() (gas: 122096) -MIPS_Test:test_fcntl_succeeds() (gas: 204281) +MIPS_Test:test_brk_succeeds() (gas: 122092) +MIPS_Test:test_clo_succeeds() (gas: 122149) +MIPS_Test:test_clone_succeeds() (gas: 122045) +MIPS_Test:test_clz_succeeds() (gas: 122620) +MIPS_Test:test_div_succeeds() (gas: 122599) +MIPS_Test:test_divu_succeeds() (gas: 122584) +MIPS_Test:test_exit_succeeds() (gas: 122094) +MIPS_Test:test_fcntl_succeeds() (gas: 204273) MIPS_Test:test_illegal_instruction_fails() (gas: 91462) MIPS_Test:test_invalid_root_fails() (gas: 435636) -MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 120741) -MIPS_Test:test_jal_succeeds() (gas: 120730) -MIPS_Test:test_jalr_succeeds() (gas: 121849) -MIPS_Test:test_jr_succeeds() (gas: 121543) +MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 120737) +MIPS_Test:test_jal_succeeds() (gas: 120726) +MIPS_Test:test_jalr_succeeds() (gas: 121845) +MIPS_Test:test_jr_succeeds() (gas: 121539) MIPS_Test:test_jump_inDelaySlot_fails() (gas: 85367) -MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120485) -MIPS_Test:test_jump_succeeds() (gas: 120415) -MIPS_Test:test_lb_succeeds() (gas: 127656) -MIPS_Test:test_lbu_succeeds() (gas: 127554) -MIPS_Test:test_lh_succeeds() (gas: 127677) -MIPS_Test:test_lhu_succeeds() (gas: 127594) -MIPS_Test:test_ll_succeeds() (gas: 127816) -MIPS_Test:test_lui_succeeds() (gas: 121697) -MIPS_Test:test_lw_succeeds() (gas: 127445) -MIPS_Test:test_lwl_succeeds() (gas: 242054) -MIPS_Test:test_lwr_succeeds() (gas: 242342) -MIPS_Test:test_mfhi_succeeds() (gas: 122058) -MIPS_Test:test_mflo_succeeds() (gas: 122187) -MIPS_Test:test_mmap_succeeds() (gas: 119016) -MIPS_Test:test_movn_succeeds() (gas: 203481) -MIPS_Test:test_movz_succeeds() (gas: 203349) -MIPS_Test:test_mthi_succeeds() (gas: 122102) -MIPS_Test:test_mtlo_succeeds() (gas: 122210) -MIPS_Test:test_mul_succeeds() (gas: 121702) -MIPS_Test:test_mult_succeeds() (gas: 122406) -MIPS_Test:test_multu_succeeds() (gas: 122443) -MIPS_Test:test_nor_succeeds() (gas: 122535) -MIPS_Test:test_or_succeeds() (gas: 122492) -MIPS_Test:test_ori_succeeds() (gas: 122495) -MIPS_Test:test_preimage_read_succeeds() (gas: 234412) -MIPS_Test:test_preimage_write_succeeds() (gas: 127038) -MIPS_Test:test_prestate_exited_succeeds() (gas: 113282) -MIPS_Test:test_sb_succeeds() (gas: 160527) -MIPS_Test:test_sc_succeeds() (gas: 160721) -MIPS_Test:test_sh_succeeds() (gas: 160564) -MIPS_Test:test_sll_succeeds() (gas: 121663) -MIPS_Test:test_sllv_succeeds() (gas: 121892) -MIPS_Test:test_slt_succeeds() (gas: 204676) -MIPS_Test:test_sltu_succeeds() (gas: 122709) -MIPS_Test:test_sra_succeeds() (gas: 121914) -MIPS_Test:test_srav_succeeds() (gas: 122182) -MIPS_Test:test_srl_succeeds() (gas: 121745) -MIPS_Test:test_srlv_succeeds() (gas: 121910) +MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120481) +MIPS_Test:test_jump_succeeds() (gas: 120411) +MIPS_Test:test_lb_succeeds() (gas: 127652) +MIPS_Test:test_lbu_succeeds() (gas: 127550) +MIPS_Test:test_lh_succeeds() (gas: 127673) +MIPS_Test:test_lhu_succeeds() (gas: 127590) +MIPS_Test:test_ll_succeeds() (gas: 127812) +MIPS_Test:test_lui_succeeds() (gas: 121693) +MIPS_Test:test_lw_succeeds() (gas: 127441) +MIPS_Test:test_lwl_succeeds() (gas: 242046) +MIPS_Test:test_lwr_succeeds() (gas: 242334) +MIPS_Test:test_mfhi_succeeds() (gas: 122054) +MIPS_Test:test_mflo_succeeds() (gas: 122183) +MIPS_Test:test_mmap_succeeds() (gas: 119012) +MIPS_Test:test_movn_succeeds() (gas: 203473) +MIPS_Test:test_movz_succeeds() (gas: 203341) +MIPS_Test:test_mthi_succeeds() (gas: 122098) +MIPS_Test:test_mtlo_succeeds() (gas: 122206) +MIPS_Test:test_mul_succeeds() (gas: 121698) +MIPS_Test:test_mult_succeeds() (gas: 122402) +MIPS_Test:test_multu_succeeds() (gas: 122439) +MIPS_Test:test_nor_succeeds() (gas: 122531) +MIPS_Test:test_or_succeeds() (gas: 122488) +MIPS_Test:test_ori_succeeds() (gas: 122491) +MIPS_Test:test_preimage_read_succeeds() (gas: 234408) +MIPS_Test:test_preimage_write_succeeds() (gas: 127034) +MIPS_Test:test_prestate_exited_succeeds() (gas: 113280) +MIPS_Test:test_sb_succeeds() (gas: 160523) +MIPS_Test:test_sc_succeeds() (gas: 160717) +MIPS_Test:test_sh_succeeds() (gas: 160560) +MIPS_Test:test_sll_succeeds() (gas: 121659) +MIPS_Test:test_sllv_succeeds() (gas: 121888) +MIPS_Test:test_slt_succeeds() (gas: 204668) +MIPS_Test:test_sltu_succeeds() (gas: 122705) +MIPS_Test:test_sra_succeeds() (gas: 121910) +MIPS_Test:test_srav_succeeds() (gas: 122178) +MIPS_Test:test_srl_succeeds() (gas: 121741) +MIPS_Test:test_srlv_succeeds() (gas: 121906) MIPS_Test:test_step_abi_succeeds() (gas: 58417) -MIPS_Test:test_sub_succeeds() (gas: 122519) -MIPS_Test:test_subu_succeeds() (gas: 122516) -MIPS_Test:test_sw_succeeds() (gas: 160539) -MIPS_Test:test_swl_succeeds() (gas: 160600) -MIPS_Test:test_swr_succeeds() (gas: 160675) -MIPS_Test:test_xor_succeeds() (gas: 122520) -MIPS_Test:test_xori_succeeds() (gas: 122572) +MIPS_Test:test_sub_succeeds() (gas: 122515) +MIPS_Test:test_subu_succeeds() (gas: 122512) +MIPS_Test:test_sw_succeeds() (gas: 160535) +MIPS_Test:test_swl_succeeds() (gas: 160596) +MIPS_Test:test_swr_succeeds() (gas: 160671) +MIPS_Test:test_xor_succeeds() (gas: 122516) +MIPS_Test:test_xori_succeeds() (gas: 122568) MerkleTrie_get_Test:test_get_corruptedProof_reverts() (gas: 5733) MerkleTrie_get_Test:test_get_extraProofElements_reverts() (gas: 58889) MerkleTrie_get_Test:test_get_invalidDataRemainder_reverts() (gas: 35845) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 0901fa94e41a..b99681585601 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,7 +16,7 @@ "src/L2/L2StandardBridge.sol": "0xe025dcccbf21d48828ecf588941c9ba04c91b87bdd177a653d3f1b265b0b02a8", "src/L2/L2ToL1MessagePasser.sol": "0xda56ba2e5b2c28fa8ca2df24077d49e96155a00ecc99cd0778d681be6ed166fe", "src/L2/SequencerFeeVault.sol": "0x37816035c992d38cf7e3d5a1846b02d017dd7bdca46abe6e5c5171b9ee6225ab", - "src/dispute/FaultDisputeGame.sol": "0x43a8ef33b55a90532760cf4062038fe548aa68316457520bcf64e206a160a453", + "src/dispute/FaultDisputeGame.sol": "0x7b8462c29d003e96a73491c644001e1a9034bcc45c5be2a7bac3caf80d521635", "src/legacy/DeployerWhitelist.sol": "0xf2129ec3da75307ba8e21bc943c332bb04704642e6e263149b5c8ee92dbcb7a8", "src/legacy/L1BlockNumber.sol": "0x30aae1fc85103476af0226b6e98c71c01feebbdc35d93401390b1ad438a37be6", "src/legacy/LegacyMessagePasser.sol": "0x5c08b0a663cc49d30e4e38540f6aefab19ef287c3ecd31c8d8c3decd5f5bd497", diff --git a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol index 6a1a2d58426f..398071d1e296 100644 --- a/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol +++ b/packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol @@ -445,7 +445,8 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { // The VMStatus must indicate (1) 'invalid', to argue that disputed thing is invalid. // Games that agree with the existing outcome are not allowed. // NOTE(clabby): This assumption will change in Alpha Chad. - if (uint8(Claim.unwrap(rootClaim())[0]) != VMStatus.unwrap(VMStatuses.INVALID)) { + uint8 vmStatus = uint8(Claim.unwrap(rootClaim())[0]); + if (!(vmStatus == VMStatus.unwrap(VMStatuses.INVALID) || vmStatus == VMStatus.unwrap(VMStatuses.PANIC))) { revert UnexpectedRootClaim(rootClaim()); } diff --git a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol index cebb2b134eda..1857404a9bad 100644 --- a/packages/contracts-bedrock/test/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/FaultDisputeGame.t.sol @@ -147,7 +147,8 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init { function testFuzz_initialize_badRootStatus_reverts(Claim rootClaim, bytes calldata extraData) public { // Ensure that the `gameType` is within the bounds of the `GameType` enum's possible values. // Ensure the root claim does not have the correct VM status - if (uint8(Claim.unwrap(rootClaim)[0]) == 1) rootClaim = changeClaimStatus(rootClaim, VMStatuses.VALID); + uint8 vmStatus = uint8(Claim.unwrap(rootClaim)[0]); + if (vmStatus == 1 || vmStatus == 2) rootClaim = changeClaimStatus(rootClaim, VMStatuses.VALID); vm.expectRevert(abi.encodeWithSelector(UnexpectedRootClaim.selector, rootClaim)); factory.create(GameTypes.FAULT, rootClaim, extraData); From df821cfbfa4fdd80b345a3a7129b56d3d16c9543 Mon Sep 17 00:00:00 2001 From: clabby Date: Wed, 6 Sep 2023 20:21:25 -0400 Subject: [PATCH 20/20] Add `TestStateHash` --- cannon/mipsevm/state_test.go | 47 ++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/cannon/mipsevm/state_test.go b/cannon/mipsevm/state_test.go index 089bd522191e..2e866cde574a 100644 --- a/cannon/mipsevm/state_test.go +++ b/cannon/mipsevm/state_test.go @@ -82,6 +82,53 @@ func TestState(t *testing.T) { } } +// Run through all permutations of `exited` / `exitCode` and ensure that the +// correct witness, state hash, and VM Status is produced. +func TestStateHash(t *testing.T) { + cases := []struct { + exited bool + exitCode uint8 + }{ + {exited: false, exitCode: 0}, + {exited: false, exitCode: 1}, + {exited: false, exitCode: 2}, + {exited: false, exitCode: 3}, + {exited: true, exitCode: 0}, + {exited: true, exitCode: 1}, + {exited: true, exitCode: 2}, + {exited: true, exitCode: 3}, + } + + exitedOffset := 32*2 + 4*6 + for _, c := range cases { + state := &State{ + Memory: NewMemory(), + Exited: c.exited, + ExitCode: c.exitCode, + } + + actualWitness := state.EncodeWitness() + actualStateHash, err := StateWitness(actualWitness).StateHash() + require.NoError(t, err, "Error hashing witness") + require.Equal(t, len(actualWitness), StateWitnessSize, "Incorrect witness size") + + expectedWitness := make(StateWitness, 226) + memRoot := state.Memory.MerkleRoot() + copy(expectedWitness[:32], memRoot[:]) + expectedWitness[exitedOffset] = c.exitCode + var exited uint8 + if c.exited { + exited = 1 + } + expectedWitness[exitedOffset+1] = uint8(exited) + require.Equal(t, expectedWitness[:], actualWitness[:], "Incorrect witness") + + expectedStateHash := crypto.Keccak256Hash(actualWitness) + expectedStateHash[0] = vmStatus(c.exited, c.exitCode) + require.Equal(t, expectedStateHash, actualStateHash, "Incorrect state hash") + } +} + func TestHello(t *testing.T) { elfProgram, err := elf.Open("../example/bin/hello.elf") require.NoError(t, err, "open ELF file")