Skip to content

Instantly share code, notes, and snippets.

@whilei
Created April 23, 2019 12:50
Show Gist options
  • Save whilei/22aebfb401036774d2661b8bc9cc086e to your computer and use it in GitHub Desktop.
Save whilei/22aebfb401036774d2661b8bc9cc086e to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
diff --git a/Dockerfile b/Dockerfile
index e87dd35d3..4b205d649 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
# Build Geth in a stock Go builder container
-FROM golang:1.11-alpine as builder
+FROM golang:1.12-alpine as builder
RUN apk add --no-cache make gcc musl-dev linux-headers
diff --git a/Dockerfile.alltools b/Dockerfile.alltools
index e984a1b09..4a4a26f8b 100644
--- a/Dockerfile.alltools
+++ b/Dockerfile.alltools
@@ -1,5 +1,5 @@
# Build Geth in a stock Go builder container
-FROM golang:1.11-alpine as builder
+FROM golang:1.12-alpine as builder
RUN apk add --no-cache make gcc musl-dev linux-headers
diff --git a/accounts/abi/abi.go b/accounts/abi/abi.go
index 08d5db979..c5fbc1e77 100644
--- a/accounts/abi/abi.go
+++ b/accounts/abi/abi.go
@@ -72,19 +72,39 @@ func (abi ABI) Pack(name string, args ...interface{}) ([]byte, error) {
}
// Unpack output in v according to the abi specification
-func (abi ABI) Unpack(v interface{}, name string, output []byte) (err error) {
- if len(output) == 0 {
+func (abi ABI) Unpack(v interface{}, name string, data []byte) (err error) {
+ if len(data) == 0 {
return fmt.Errorf("abi: unmarshalling empty output")
}
// since there can't be naming collisions with contracts and events,
// we need to decide whether we're calling a method or an event
if method, ok := abi.Methods[name]; ok {
- if len(output)%32 != 0 {
- return fmt.Errorf("abi: improperly formatted output: %s - Bytes: [%+v]", string(output), output)
+ if len(data)%32 != 0 {
+ return fmt.Errorf("abi: improperly formatted output: %s - Bytes: [%+v]", string(data), data)
}
- return method.Outputs.Unpack(v, output)
- } else if event, ok := abi.Events[name]; ok {
- return event.Inputs.Unpack(v, output)
+ return method.Outputs.Unpack(v, data)
+ }
+ if event, ok := abi.Events[name]; ok {
+ return event.Inputs.Unpack(v, data)
+ }
+ return fmt.Errorf("abi: could not locate named method or event")
+}
+
+// UnpackIntoMap unpacks a log into the provided map[string]interface{}
+func (abi ABI) UnpackIntoMap(v map[string]interface{}, name string, data []byte) (err error) {
+ if len(data) == 0 {
+ return fmt.Errorf("abi: unmarshalling empty output")
+ }
+ // since there can't be naming collisions with contracts and events,
+ // we need to decide whether we're calling a method or an event
+ if method, ok := abi.Methods[name]; ok {
+ if len(data)%32 != 0 {
+ return fmt.Errorf("abi: improperly formatted output")
+ }
+ return method.Outputs.UnpackIntoMap(v, data)
+ }
+ if event, ok := abi.Events[name]; ok {
+ return event.Inputs.UnpackIntoMap(v, data)
}
return fmt.Errorf("abi: could not locate named method or event")
}
@@ -136,7 +156,7 @@ func (abi *ABI) UnmarshalJSON(data []byte) error {
// returns nil if none found
func (abi *ABI) MethodById(sigdata []byte) (*Method, error) {
if len(sigdata) < 4 {
- return nil, fmt.Errorf("data too short (% bytes) for abi method lookup", len(sigdata))
+ return nil, fmt.Errorf("data too short (%d bytes) for abi method lookup", len(sigdata))
}
for _, method := range abi.Methods {
if bytes.Equal(method.Id(), sigdata[:4]) {
diff --git a/accounts/abi/abi_test.go b/accounts/abi/abi_test.go
index b9444f9f0..42b60a639 100644
--- a/accounts/abi/abi_test.go
+++ b/accounts/abi/abi_test.go
@@ -694,6 +694,192 @@ func TestUnpackEvent(t *testing.T) {
}
}
+func TestUnpackEventIntoMap(t *testing.T) {
+ const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]`
+ abi, err := JSON(strings.NewReader(abiJSON))
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ const hexdata = `000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158`
+ data, err := hex.DecodeString(hexdata)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(data)%32 == 0 {
+ t.Errorf("len(data) is %d, want a non-multiple of 32", len(data))
+ }
+
+ receivedMap := map[string]interface{}{}
+ expectedReceivedMap := map[string]interface{}{
+ "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"),
+ "amount": big.NewInt(1),
+ "memo": []byte{88},
+ }
+ if err := abi.UnpackIntoMap(receivedMap, "received", data); err != nil {
+ t.Error(err)
+ }
+ if len(receivedMap) != 3 {
+ t.Error("unpacked `received` map expected to have length 3")
+ }
+ if receivedMap["sender"] != expectedReceivedMap["sender"] {
+ t.Error("unpacked `received` map does not match expected map")
+ }
+ if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 {
+ t.Error("unpacked `received` map does not match expected map")
+ }
+ if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) {
+ t.Error("unpacked `received` map does not match expected map")
+ }
+
+ receivedAddrMap := map[string]interface{}{}
+ if err = abi.UnpackIntoMap(receivedAddrMap, "receivedAddr", data); err != nil {
+ t.Error(err)
+ }
+ if len(receivedAddrMap) != 1 {
+ t.Error("unpacked `receivedAddr` map expected to have length 1")
+ }
+ if receivedAddrMap["sender"] != expectedReceivedMap["sender"] {
+ t.Error("unpacked `receivedAddr` map does not match expected map")
+ }
+}
+
+func TestUnpackMethodIntoMap(t *testing.T) {
+ const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"send","outputs":[{"name":"amount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"get","outputs":[{"name":"hash","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"}]`
+ abi, err := JSON(strings.NewReader(abiJSON))
+ if err != nil {
+ t.Fatal(err)
+ }
+ const hexdata = `00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000158000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000158`
+ data, err := hex.DecodeString(hexdata)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(data)%32 != 0 {
+ t.Errorf("len(data) is %d, want a multiple of 32", len(data))
+ }
+
+ // Tests a method with no outputs
+ receiveMap := map[string]interface{}{}
+ if err = abi.UnpackIntoMap(receiveMap, "receive", data); err != nil {
+ t.Error(err)
+ }
+ if len(receiveMap) > 0 {
+ t.Error("unpacked `receive` map expected to have length 0")
+ }
+
+ // Tests a method with only outputs
+ sendMap := map[string]interface{}{}
+ if err = abi.UnpackIntoMap(sendMap, "send", data); err != nil {
+ t.Error(err)
+ }
+ if len(sendMap) != 1 {
+ t.Error("unpacked `send` map expected to have length 1")
+ }
+ if sendMap["amount"].(*big.Int).Cmp(big.NewInt(1)) != 0 {
+ t.Error("unpacked `send` map expected `amount` value of 1")
+ }
+
+ // Tests a method with outputs and inputs
+ getMap := map[string]interface{}{}
+ if err = abi.UnpackIntoMap(getMap, "get", data); err != nil {
+ t.Error(err)
+ }
+ if len(sendMap) != 1 {
+ t.Error("unpacked `get` map expected to have length 1")
+ }
+ expectedBytes := []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 88, 0}
+ if !bytes.Equal(getMap["hash"].([]byte), expectedBytes) {
+ t.Errorf("unpacked `get` map expected `hash` value of %v", expectedBytes)
+ }
+}
+
+func TestUnpackIntoMapNamingConflict(t *testing.T) {
+ // Two methods have the same name
+ var abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"get","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"send","outputs":[{"name":"amount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"get","outputs":[{"name":"hash","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"}]`
+ abi, err := JSON(strings.NewReader(abiJSON))
+ if err != nil {
+ t.Fatal(err)
+ }
+ var hexdata = `00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158`
+ data, err := hex.DecodeString(hexdata)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(data)%32 == 0 {
+ t.Errorf("len(data) is %d, want a non-multiple of 32", len(data))
+ }
+ getMap := map[string]interface{}{}
+ if err = abi.UnpackIntoMap(getMap, "get", data); err == nil {
+ t.Error("naming conflict between two methods; error expected")
+ }
+
+ // Two events have the same name
+ abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"received","type":"event"}]`
+ abi, err = JSON(strings.NewReader(abiJSON))
+ if err != nil {
+ t.Fatal(err)
+ }
+ hexdata = `000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158`
+ data, err = hex.DecodeString(hexdata)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(data)%32 == 0 {
+ t.Errorf("len(data) is %d, want a non-multiple of 32", len(data))
+ }
+ receivedMap := map[string]interface{}{}
+ if err = abi.UnpackIntoMap(receivedMap, "received", data); err != nil {
+ t.Error("naming conflict between two events; no error expected")
+ }
+ if len(receivedMap) != 1 {
+ t.Error("naming conflict between two events; event defined latest in the abi expected to be used")
+ }
+
+ // Method and event have the same name
+ abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"received","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]`
+ abi, err = JSON(strings.NewReader(abiJSON))
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(data)%32 == 0 {
+ t.Errorf("len(data) is %d, want a non-multiple of 32", len(data))
+ }
+ if err = abi.UnpackIntoMap(receivedMap, "received", data); err == nil {
+ t.Error("naming conflict between an event and a method; error expected")
+ }
+
+ // Conflict is case sensitive
+ abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"received","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]`
+ abi, err = JSON(strings.NewReader(abiJSON))
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(data)%32 == 0 {
+ t.Errorf("len(data) is %d, want a non-multiple of 32", len(data))
+ }
+ expectedReceivedMap := map[string]interface{}{
+ "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"),
+ "amount": big.NewInt(1),
+ "memo": []byte{88},
+ }
+ if err = abi.UnpackIntoMap(receivedMap, "Received", data); err != nil {
+ t.Error(err)
+ }
+ if len(receivedMap) != 3 {
+ t.Error("unpacked `received` map expected to have length 3")
+ }
+ if receivedMap["sender"] != expectedReceivedMap["sender"] {
+ t.Error("unpacked `received` map does not match expected map")
+ }
+ if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 {
+ t.Error("unpacked `received` map does not match expected map")
+ }
+ if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) {
+ t.Error("unpacked `received` map does not match expected map")
+ }
+}
+
func TestABI_MethodById(t *testing.T) {
const abiJSON = `[
{"type":"function","name":"receive","constant":false,"inputs":[{"name":"memo","type":"bytes"}],"outputs":[],"payable":true,"stateMutability":"payable"},
diff --git a/accounts/abi/argument.go b/accounts/abi/argument.go
index d0a6b035c..501cb1621 100644
--- a/accounts/abi/argument.go
+++ b/accounts/abi/argument.go
@@ -102,6 +102,16 @@ func (arguments Arguments) Unpack(v interface{}, data []byte) error {
return arguments.unpackAtomic(v, marshalledValues[0])
}
+// UnpackIntoMap performs the operation hexdata -> mapping of argument name to argument value
+func (arguments Arguments) UnpackIntoMap(v map[string]interface{}, data []byte) error {
+ marshalledValues, err := arguments.UnpackValues(data)
+ if err != nil {
+ return err
+ }
+
+ return arguments.unpackIntoMap(v, marshalledValues)
+}
+
// unpack sets the unmarshalled value to go format.
// Note the dst here must be settable.
func unpack(t *Type, dst interface{}, src interface{}) error {
@@ -160,6 +170,19 @@ func unpack(t *Type, dst interface{}, src interface{}) error {
return nil
}
+// unpackIntoMap unpacks marshalledValues into the provided map[string]interface{}
+func (arguments Arguments) unpackIntoMap(v map[string]interface{}, marshalledValues []interface{}) error {
+ // Make sure map is not nil
+ if v == nil {
+ return fmt.Errorf("abi: cannot unpack into a nil map")
+ }
+
+ for i, arg := range arguments.NonIndexed() {
+ v[arg.Name] = marshalledValues[i]
+ }
+ return nil
+}
+
// unpackAtomic unpacks ( hexdata -> go ) a single value
func (arguments Arguments) unpackAtomic(v interface{}, marshalledValues interface{}) error {
if arguments.LengthNonIndexed() == 0 {
diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go
index 6f46fc149..ac4602fe3 100644
--- a/accounts/abi/bind/backends/simulated.go
+++ b/accounts/abi/bind/backends/simulated.go
@@ -66,7 +66,7 @@ type SimulatedBackend struct {
// NewSimulatedBackend creates a new binding backend using a simulated blockchain
// for testing purposes.
func NewSimulatedBackend(alloc core.GenesisAlloc, gasLimit uint64) *SimulatedBackend {
- database := ethdb.NewMemDatabase()
+ database := rawdb.NewMemoryDatabase()
genesis := core.Genesis{Config: params.AllEthashProtocolChanges, GasLimit: gasLimit, Alloc: alloc}
genesis.MustCommit(database)
blockchain, _ := core.NewBlockChain(database, nil, genesis.Config, ethash.NewFaker(), vm.Config{}, nil)
@@ -160,10 +160,29 @@ func (b *SimulatedBackend) StorageAt(ctx context.Context, contract common.Addres
// TransactionReceipt returns the receipt of a transaction.
func (b *SimulatedBackend) TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error) {
- receipt, _, _, _ := rawdb.ReadReceipt(b.database, txHash)
+ receipt, _, _, _ := rawdb.ReadReceipt(b.database, txHash, b.config)
return receipt, nil
}
+// TransactionByHash checks the pool of pending transactions in addition to the
+// blockchain. The isPending return value indicates whether the transaction has been
+// mined yet. Note that the transaction may not be part of the canonical chain even if
+// it's not pending.
+func (b *SimulatedBackend) TransactionByHash(ctx context.Context, txHash common.Hash) (*types.Transaction, bool, error) {
+ b.mu.Lock()
+ defer b.mu.Unlock()
+
+ tx := b.pendingBlock.Transaction(txHash)
+ if tx != nil {
+ return tx, true, nil
+ }
+ tx, _, _, _ = rawdb.ReadTransaction(b.database, txHash)
+ if tx != nil {
+ return tx, false, nil
+ }
+ return nil, false, ethereum.NotFound
+}
+
// PendingCodeAt returns the code associated with an account in the pending state.
func (b *SimulatedBackend) PendingCodeAt(ctx context.Context, contract common.Address) ([]byte, error) {
b.mu.Lock()
@@ -445,7 +464,7 @@ func (fb *filterBackend) GetReceipts(ctx context.Context, hash common.Hash) (typ
if number == nil {
return nil, nil
}
- return rawdb.ReadReceipts(fb.db, hash, *number), nil
+ return rawdb.ReadReceipts(fb.db, hash, *number, fb.bc.Config()), nil
}
func (fb *filterBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*types.Log, error) {
@@ -453,7 +472,7 @@ func (fb *filterBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*ty
if number == nil {
return nil, nil
}
- receipts := rawdb.ReadReceipts(fb.db, hash, *number)
+ receipts := rawdb.ReadReceipts(fb.db, hash, *number, fb.bc.Config())
if receipts == nil {
return nil, nil
}
diff --git a/accounts/abi/bind/backends/simulated_test.go b/accounts/abi/bind/backends/simulated_test.go
new file mode 100644
index 000000000..bd75807d7
--- /dev/null
+++ b/accounts/abi/bind/backends/simulated_test.go
@@ -0,0 +1,82 @@
+// Copyright 2019 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package backends_test
+
+import (
+ "context"
+ "math/big"
+ "testing"
+
+ ethereum "github.com/ethereum/go-ethereum"
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
+ "github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core"
+ "github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/crypto"
+)
+
+func TestSimulatedBackend(t *testing.T) {
+ var gasLimit uint64 = 8000029
+ key, _ := crypto.GenerateKey() // nolint: gosec
+ auth := bind.NewKeyedTransactor(key)
+ genAlloc := make(core.GenesisAlloc)
+ genAlloc[auth.From] = core.GenesisAccount{Balance: big.NewInt(9223372036854775807)}
+
+ sim := backends.NewSimulatedBackend(genAlloc, gasLimit)
+
+ // should return an error if the tx is not found
+ txHash := common.HexToHash("2")
+ _, isPending, err := sim.TransactionByHash(context.Background(), txHash)
+
+ if isPending {
+ t.Fatal("transaction should not be pending")
+ }
+ if err != ethereum.NotFound {
+ t.Fatalf("err should be `ethereum.NotFound` but received %v", err)
+ }
+
+ // generate a transaction and confirm you can retrieve it
+ code := `6060604052600a8060106000396000f360606040526008565b00`
+ var gas uint64 = 3000000
+ tx := types.NewContractCreation(0, big.NewInt(0), gas, big.NewInt(1), common.FromHex(code))
+ tx, _ = types.SignTx(tx, types.HomesteadSigner{}, key)
+
+ err = sim.SendTransaction(context.Background(), tx)
+ if err != nil {
+ t.Fatal("error sending transaction")
+ }
+
+ txHash = tx.Hash()
+ _, isPending, err = sim.TransactionByHash(context.Background(), txHash)
+ if err != nil {
+ t.Fatalf("error getting transaction with hash: %v", txHash.String())
+ }
+ if !isPending {
+ t.Fatal("transaction should have pending status")
+ }
+
+ sim.Commit()
+ tx, isPending, err = sim.TransactionByHash(context.Background(), txHash)
+ if err != nil {
+ t.Fatalf("error getting transaction with hash: %v", txHash.String())
+ }
+ if isPending {
+ t.Fatal("transaction should not have pending status")
+ }
+
+}
diff --git a/accounts/abi/bind/base.go b/accounts/abi/bind/base.go
index c37bdf11d..f70f911d3 100644
--- a/accounts/abi/bind/base.go
+++ b/accounts/abi/bind/base.go
@@ -340,6 +340,22 @@ func (c *BoundContract) UnpackLog(out interface{}, event string, log types.Log)
return parseTopics(out, indexed, log.Topics[1:])
}
+// UnpackLogIntoMap unpacks a retrieved log into the provided map.
+func (c *BoundContract) UnpackLogIntoMap(out map[string]interface{}, event string, log types.Log) error {
+ if len(log.Data) > 0 {
+ if err := c.abi.UnpackIntoMap(out, event, log.Data); err != nil {
+ return err
+ }
+ }
+ var indexed abi.Arguments
+ for _, arg := range c.abi.Events[event].Inputs {
+ if arg.Indexed {
+ indexed = append(indexed, arg)
+ }
+ }
+ return parseTopicsIntoMap(out, indexed, log.Topics[1:])
+}
+
// ensureContext is a helper method to ensure a context is not nil, even if the
// user specified it as such.
func ensureContext(ctx context.Context) context.Context {
diff --git a/accounts/abi/bind/base_test.go b/accounts/abi/bind/base_test.go
index 8adff8b59..f65c9e9b4 100644
--- a/accounts/abi/bind/base_test.go
+++ b/accounts/abi/bind/base_test.go
@@ -1,14 +1,36 @@
+// Copyright 2019 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
package bind_test
import (
+ "bytes"
"context"
"math/big"
+ "strings"
"testing"
- ethereum "github.com/ethereum/go-ethereum"
+ "github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/crypto"
+ "github.com/ethereum/go-ethereum/rlp"
)
type mockCaller struct {
@@ -25,7 +47,6 @@ func (mc *mockCaller) CallContract(ctx context.Context, call ethereum.CallMsg, b
mc.callContractBlockNumber = blockNumber
return nil, nil
}
-
func TestPassingBlockNumber(t *testing.T) {
mc := &mockCaller{}
@@ -62,3 +83,291 @@ func TestPassingBlockNumber(t *testing.T) {
t.Fatalf("CodeAt() was passed a block number when it should not have been")
}
}
+
+const hexData = "0x000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158"
+
+func TestUnpackIndexedStringTyLogIntoMap(t *testing.T) {
+ hash := crypto.Keccak256Hash([]byte("testName"))
+ mockLog := types.Log{
+ Address: common.HexToAddress("0x0"),
+ Topics: []common.Hash{
+ common.HexToHash("0x0"),
+ hash,
+ },
+ Data: hexutil.MustDecode(hexData),
+ BlockNumber: uint64(26),
+ TxHash: common.HexToHash("0x0"),
+ TxIndex: 111,
+ BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}),
+ Index: 7,
+ Removed: false,
+ }
+
+ abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"string"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]`
+ parsedAbi, _ := abi.JSON(strings.NewReader(abiString))
+ bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil)
+
+ receivedMap := make(map[string]interface{})
+ expectedReceivedMap := map[string]interface{}{
+ "name": hash,
+ "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"),
+ "amount": big.NewInt(1),
+ "memo": []byte{88},
+ }
+ if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil {
+ t.Error(err)
+ }
+
+ if len(receivedMap) != 4 {
+ t.Fatal("unpacked map expected to have length 4")
+ }
+ if receivedMap["name"] != expectedReceivedMap["name"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["sender"] != expectedReceivedMap["sender"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 {
+ t.Error("unpacked map does not match expected map")
+ }
+ if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) {
+ t.Error("unpacked map does not match expected map")
+ }
+}
+
+func TestUnpackIndexedSliceTyLogIntoMap(t *testing.T) {
+ sliceBytes, err := rlp.EncodeToBytes([]string{"name1", "name2", "name3", "name4"})
+ if err != nil {
+ t.Fatal(err)
+ }
+ hash := crypto.Keccak256Hash(sliceBytes)
+ mockLog := types.Log{
+ Address: common.HexToAddress("0x0"),
+ Topics: []common.Hash{
+ common.HexToHash("0x0"),
+ hash,
+ },
+ Data: hexutil.MustDecode(hexData),
+ BlockNumber: uint64(26),
+ TxHash: common.HexToHash("0x0"),
+ TxIndex: 111,
+ BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}),
+ Index: 7,
+ Removed: false,
+ }
+
+ abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"names","type":"string[]"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]`
+ parsedAbi, _ := abi.JSON(strings.NewReader(abiString))
+ bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil)
+
+ receivedMap := make(map[string]interface{})
+ expectedReceivedMap := map[string]interface{}{
+ "names": hash,
+ "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"),
+ "amount": big.NewInt(1),
+ "memo": []byte{88},
+ }
+ if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil {
+ t.Error(err)
+ }
+
+ if len(receivedMap) != 4 {
+ t.Fatal("unpacked map expected to have length 4")
+ }
+ if receivedMap["names"] != expectedReceivedMap["names"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["sender"] != expectedReceivedMap["sender"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 {
+ t.Error("unpacked map does not match expected map")
+ }
+ if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) {
+ t.Error("unpacked map does not match expected map")
+ }
+}
+
+func TestUnpackIndexedArrayTyLogIntoMap(t *testing.T) {
+ arrBytes, err := rlp.EncodeToBytes([2]common.Address{common.HexToAddress("0x0"), common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2")})
+ if err != nil {
+ t.Fatal(err)
+ }
+ hash := crypto.Keccak256Hash(arrBytes)
+ mockLog := types.Log{
+ Address: common.HexToAddress("0x0"),
+ Topics: []common.Hash{
+ common.HexToHash("0x0"),
+ hash,
+ },
+ Data: hexutil.MustDecode(hexData),
+ BlockNumber: uint64(26),
+ TxHash: common.HexToHash("0x0"),
+ TxIndex: 111,
+ BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}),
+ Index: 7,
+ Removed: false,
+ }
+
+ abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"addresses","type":"address[2]"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]`
+ parsedAbi, _ := abi.JSON(strings.NewReader(abiString))
+ bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil)
+
+ receivedMap := make(map[string]interface{})
+ expectedReceivedMap := map[string]interface{}{
+ "addresses": hash,
+ "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"),
+ "amount": big.NewInt(1),
+ "memo": []byte{88},
+ }
+ if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil {
+ t.Error(err)
+ }
+
+ if len(receivedMap) != 4 {
+ t.Fatal("unpacked map expected to have length 4")
+ }
+ if receivedMap["addresses"] != expectedReceivedMap["addresses"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["sender"] != expectedReceivedMap["sender"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 {
+ t.Error("unpacked map does not match expected map")
+ }
+ if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) {
+ t.Error("unpacked map does not match expected map")
+ }
+}
+
+func TestUnpackIndexedFuncTyLogIntoMap(t *testing.T) {
+ mockAddress := common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2")
+ addrBytes := mockAddress.Bytes()
+ hash := crypto.Keccak256Hash([]byte("mockFunction(address,uint)"))
+ functionSelector := hash[:4]
+ functionTyBytes := append(addrBytes, functionSelector...)
+ var functionTy [24]byte
+ copy(functionTy[:], functionTyBytes[0:24])
+ mockLog := types.Log{
+ Address: common.HexToAddress("0x0"),
+ Topics: []common.Hash{
+ common.HexToHash("0x99b5620489b6ef926d4518936cfec15d305452712b88bd59da2d9c10fb0953e8"),
+ common.BytesToHash(functionTyBytes),
+ },
+ Data: hexutil.MustDecode(hexData),
+ BlockNumber: uint64(26),
+ TxHash: common.HexToHash("0x5c698f13940a2153440c6d19660878bc90219d9298fdcf37365aa8d88d40fc42"),
+ TxIndex: 111,
+ BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}),
+ Index: 7,
+ Removed: false,
+ }
+
+ abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"function","type":"function"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]`
+ parsedAbi, _ := abi.JSON(strings.NewReader(abiString))
+ bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil)
+
+ receivedMap := make(map[string]interface{})
+ expectedReceivedMap := map[string]interface{}{
+ "function": functionTy,
+ "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"),
+ "amount": big.NewInt(1),
+ "memo": []byte{88},
+ }
+ if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil {
+ t.Error(err)
+ }
+
+ if len(receivedMap) != 4 {
+ t.Fatal("unpacked map expected to have length 4")
+ }
+ if receivedMap["function"] != expectedReceivedMap["function"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["sender"] != expectedReceivedMap["sender"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 {
+ t.Error("unpacked map does not match expected map")
+ }
+ if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) {
+ t.Error("unpacked map does not match expected map")
+ }
+}
+
+func TestUnpackIndexedBytesTyLogIntoMap(t *testing.T) {
+ byts := []byte{1, 2, 3, 4, 5}
+ hash := crypto.Keccak256Hash(byts)
+ mockLog := types.Log{
+ Address: common.HexToAddress("0x0"),
+ Topics: []common.Hash{
+ common.HexToHash("0x99b5620489b6ef926d4518936cfec15d305452712b88bd59da2d9c10fb0953e8"),
+ hash,
+ },
+ Data: hexutil.MustDecode(hexData),
+ BlockNumber: uint64(26),
+ TxHash: common.HexToHash("0x5c698f13940a2153440c6d19660878bc90219d9298fdcf37365aa8d88d40fc42"),
+ TxIndex: 111,
+ BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}),
+ Index: 7,
+ Removed: false,
+ }
+
+ abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"content","type":"bytes"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]`
+ parsedAbi, _ := abi.JSON(strings.NewReader(abiString))
+ bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil)
+
+ receivedMap := make(map[string]interface{})
+ expectedReceivedMap := map[string]interface{}{
+ "content": hash,
+ "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"),
+ "amount": big.NewInt(1),
+ "memo": []byte{88},
+ }
+ if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil {
+ t.Error(err)
+ }
+
+ if len(receivedMap) != 4 {
+ t.Fatal("unpacked map expected to have length 4")
+ }
+ if receivedMap["content"] != expectedReceivedMap["content"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["sender"] != expectedReceivedMap["sender"] {
+ t.Error("unpacked map does not match expected map")
+ }
+ if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 {
+ t.Error("unpacked map does not match expected map")
+ }
+ if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) {
+ t.Error("unpacked map does not match expected map")
+ }
+}
+
+func TestUnpackIntoMapNamingConflict(t *testing.T) {
+ hash := crypto.Keccak256Hash([]byte("testName"))
+ mockLog := types.Log{
+ Address: common.HexToAddress("0x0"),
+ Topics: []common.Hash{
+ common.HexToHash("0x0"),
+ hash,
+ },
+ Data: hexutil.MustDecode(hexData),
+ BlockNumber: uint64(26),
+ TxHash: common.HexToHash("0x0"),
+ TxIndex: 111,
+ BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}),
+ Index: 7,
+ Removed: false,
+ }
+
+ abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"string"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"received","type":"event"}]`
+ parsedAbi, _ := abi.JSON(strings.NewReader(abiString))
+ bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil)
+ receivedMap := make(map[string]interface{})
+ if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err == nil {
+ t.Error("naming conflict between two events; error expected")
+ }
+}
diff --git a/accounts/abi/bind/bind_test.go b/accounts/abi/bind/bind_test.go
index 46e0b38d0..eae12b3f4 100644
--- a/accounts/abi/bind/bind_test.go
+++ b/accounts/abi/bind/bind_test.go
@@ -670,7 +670,7 @@ var bindTests = []struct {
`Eventer`,
`
contract Eventer {
- event SimpleEvent (
+ event SimpleEvent (
address indexed Addr,
bytes32 indexed Id,
bool indexed Flag,
@@ -698,10 +698,18 @@ var bindTests = []struct {
function raiseDynamicEvent(string str, bytes blob) {
DynamicEvent(str, blob, str, blob);
}
+
+ event FixedBytesEvent (
+ bytes24 indexed IndexedBytes,
+ bytes24 NonIndexedBytes
+ );
+ function raiseFixedBytesEvent(bytes24 blob) {
+ FixedBytesEvent(blob, blob);
+ }
}
`,
- `6060604052341561000f57600080fd5b61042c8061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063528300ff1461005c578063630c31e2146100fc578063c7d116dd14610156575b600080fd5b341561006757600080fd5b6100fa600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610194565b005b341561010757600080fd5b610154600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080351515906020019091908035906020019091905050610367565b005b341561016157600080fd5b610192600480803590602001909190803560010b90602001909190803563ffffffff169060200190919050506103c3565b005b806040518082805190602001908083835b6020831015156101ca57805182526020820191506020810190506020830392506101a5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020826040518082805190602001908083835b60208310151561022d5780518252602082019150602081019050602083039250610208565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561032757808201518184015260208101905061030c565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b81151583600019168573ffffffffffffffffffffffffffffffffffffffff167f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8846040518082815260200191505060405180910390a450505050565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820d1f8a8bbddbc5bb29f285891d6ae1eef8420c52afdc05e1573f6114d8e1714710029`,
- `[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"}]`,
+ `608060405234801561001057600080fd5b5061043f806100206000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663528300ff8114610066578063630c31e2146100ff5780636cc6b94014610138578063c7d116dd1461015b575b600080fd5b34801561007257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100fd94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506101829650505050505050565b005b34801561010b57600080fd5b506100fd73ffffffffffffffffffffffffffffffffffffffff60043516602435604435151560643561033c565b34801561014457600080fd5b506100fd67ffffffffffffffff1960043516610394565b34801561016757600080fd5b506100fd60043560243560010b63ffffffff604435166103d6565b806040518082805190602001908083835b602083106101b25780518252601f199092019160209182019101610193565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955087945090928392508401908083835b6020831061020b5780518252601f1990920191602091820191016101ec565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561029c578181015183820152602001610284565b50505050905090810190601f1680156102c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156102fc5781810151838201526020016102e4565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b60408051828152905183151591859173ffffffffffffffffffffffffffffffffffffffff8816917f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8919081900360200190a450505050565b6040805167ffffffffffffffff19831680825291517fcdc4c1b1aed5524ffb4198d7a5839a34712baef5fa06884fac7559f4a5854e0a9181900360200190a250565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820468b5843bf653145bd924b323c64ef035d3dd922c170644b44d61aa666ea6eee0029`,
+ `[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blob","type":"bytes24"}],"name":"raiseFixedBytesEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedBytes","type":"bytes24"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes24"}],"name":"FixedBytesEvent","type":"event"}]`,
`
"math/big"
"time"
@@ -812,6 +820,33 @@ var bindTests = []struct {
if err = dit.Error(); err != nil {
t.Fatalf("dynamic event iteration failed: %v", err)
}
+ // Test raising and filtering for events with fixed bytes components
+ var fblob [24]byte
+ copy(fblob[:], []byte("Fixed Bytes"))
+
+ if _, err := eventer.RaiseFixedBytesEvent(auth, fblob); err != nil {
+ t.Fatalf("failed to raise fixed bytes event: %v", err)
+ }
+ sim.Commit()
+
+ fit, err := eventer.FilterFixedBytesEvent(nil, [][24]byte{fblob})
+ if err != nil {
+ t.Fatalf("failed to filter for fixed bytes events: %v", err)
+ }
+ defer fit.Close()
+
+ if !fit.Next() {
+ t.Fatalf("fixed bytes log not found: %v", fit.Error())
+ }
+ if fit.Event.NonIndexedBytes != fblob || fit.Event.IndexedBytes != fblob {
+ t.Errorf("fixed bytes log content mismatch: have %v, want {'%x', '%x'}", fit.Event, fblob, fblob)
+ }
+ if fit.Next() {
+ t.Errorf("unexpected fixed bytes event found: %+v", fit.Event)
+ }
+ if err = fit.Error(); err != nil {
+ t.Fatalf("fixed bytes event iteration failed: %v", err)
+ }
// Test subscribing to an event and raising it afterwards
ch := make(chan *EventerSimpleEvent, 16)
sub, err := eventer.WatchSimpleEvent(nil, ch, nil, nil, nil)
diff --git a/accounts/abi/bind/topics.go b/accounts/abi/bind/topics.go
index 600dfcda9..c7657b4a4 100644
--- a/accounts/abi/bind/topics.go
+++ b/accounts/abi/bind/topics.go
@@ -17,6 +17,7 @@
package bind
import (
+ "encoding/binary"
"errors"
"fmt"
"math/big"
@@ -83,8 +84,10 @@ func makeTopics(query ...[]interface{}) ([][]common.Hash, error) {
val := reflect.ValueOf(rule)
switch {
+
+ // static byte array
case val.Kind() == reflect.Array && reflect.TypeOf(rule).Elem().Kind() == reflect.Uint8:
- reflect.Copy(reflect.ValueOf(topic[common.HashLength-val.Len():]), val)
+ reflect.Copy(reflect.ValueOf(topic[:val.Len()]), val)
default:
return nil, fmt.Errorf("unsupported indexed type: %T", rule)
@@ -175,8 +178,10 @@ func parseTopics(out interface{}, fields abi.Arguments, topics []common.Hash) er
default:
// Ran out of custom types, try the crazies
switch {
+
+ // static byte array
case arg.Type.T == abi.FixedBytesTy:
- reflect.Copy(field, reflect.ValueOf(topics[0][common.HashLength-arg.Type.Size:]))
+ reflect.Copy(field, reflect.ValueOf(topics[0][:arg.Type.Size]))
default:
return fmt.Errorf("unsupported indexed type: %v", arg.Type)
@@ -187,3 +192,50 @@ func parseTopics(out interface{}, fields abi.Arguments, topics []common.Hash) er
}
return nil
}
+
+// parseTopicsIntoMap converts the indexed topic field-value pairs into map key-value pairs
+func parseTopicsIntoMap(out map[string]interface{}, fields abi.Arguments, topics []common.Hash) error {
+ // Sanity check that the fields and topics match up
+ if len(fields) != len(topics) {
+ return errors.New("topic/field count mismatch")
+ }
+ // Iterate over all the fields and reconstruct them from topics
+ for _, arg := range fields {
+ if !arg.Indexed {
+ return errors.New("non-indexed field in topic reconstruction")
+ }
+
+ switch arg.Type.T {
+ case abi.BoolTy:
+ out[arg.Name] = topics[0][common.HashLength-1] == 1
+ case abi.IntTy, abi.UintTy:
+ num := new(big.Int).SetBytes(topics[0][:])
+ out[arg.Name] = num
+ case abi.AddressTy:
+ var addr common.Address
+ copy(addr[:], topics[0][common.HashLength-common.AddressLength:])
+ out[arg.Name] = addr
+ case abi.HashTy:
+ out[arg.Name] = topics[0]
+ case abi.FixedBytesTy:
+ out[arg.Name] = topics[0][:]
+ case abi.StringTy, abi.BytesTy, abi.SliceTy, abi.ArrayTy:
+ // Array types (including strings and bytes) have their keccak256 hashes stored in the topic- not a hash
+ // whose bytes can be decoded to the actual value- so the best we can do is retrieve that hash
+ out[arg.Name] = topics[0]
+ case abi.FunctionTy:
+ if garbage := binary.BigEndian.Uint64(topics[0][0:8]); garbage != 0 {
+ return fmt.Errorf("bind: got improperly encoded function type, got %v", topics[0].Bytes())
+ }
+ var tmp [24]byte
+ copy(tmp[:], topics[0][8:32])
+ out[arg.Name] = tmp
+ default: // Not handling tuples
+ return fmt.Errorf("unsupported indexed type: %v", arg.Type)
+ }
+
+ topics = topics[1:]
+ }
+
+ return nil
+}
diff --git a/accounts/abi/bind/topics_test.go b/accounts/abi/bind/topics_test.go
new file mode 100644
index 000000000..e6f745a15
--- /dev/null
+++ b/accounts/abi/bind/topics_test.go
@@ -0,0 +1,103 @@
+// Copyright 2018 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package bind
+
+import (
+ "reflect"
+ "testing"
+
+ "github.com/ethereum/go-ethereum/accounts/abi"
+ "github.com/ethereum/go-ethereum/common"
+)
+
+func TestMakeTopics(t *testing.T) {
+ type args struct {
+ query [][]interface{}
+ }
+ tests := []struct {
+ name string
+ args args
+ want [][]common.Hash
+ wantErr bool
+ }{
+ {
+ "support fixed byte types, right padded to 32 bytes",
+ args{[][]interface{}{{[5]byte{1, 2, 3, 4, 5}}}},
+ [][]common.Hash{{common.Hash{1, 2, 3, 4, 5}}},
+ false,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got, err := makeTopics(tt.args.query...)
+ if (err != nil) != tt.wantErr {
+ t.Errorf("makeTopics() error = %v, wantErr %v", err, tt.wantErr)
+ return
+ }
+ if !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("makeTopics() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}
+
+func TestParseTopics(t *testing.T) {
+ type bytesStruct struct {
+ StaticBytes [5]byte
+ }
+ bytesType, _ := abi.NewType("bytes5", nil)
+ type args struct {
+ createObj func() interface{}
+ resultObj func() interface{}
+ fields abi.Arguments
+ topics []common.Hash
+ }
+ tests := []struct {
+ name string
+ args args
+ wantErr bool
+ }{
+ {
+ name: "support fixed byte types, right padded to 32 bytes",
+ args: args{
+ createObj: func() interface{} { return &bytesStruct{} },
+ resultObj: func() interface{} { return &bytesStruct{StaticBytes: [5]byte{1, 2, 3, 4, 5}} },
+ fields: abi.Arguments{abi.Argument{
+ Name: "staticBytes",
+ Type: bytesType,
+ Indexed: true,
+ }},
+ topics: []common.Hash{
+ {1, 2, 3, 4, 5},
+ },
+ },
+ wantErr: false,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ createObj := tt.args.createObj()
+ if err := parseTopics(createObj, tt.args.fields, tt.args.topics); (err != nil) != tt.wantErr {
+ t.Errorf("parseTopics() error = %v, wantErr %v", err, tt.wantErr)
+ }
+ resultObj := tt.args.resultObj()
+ if !reflect.DeepEqual(createObj, resultObj) {
+ t.Errorf("parseTopics() = %v, want %v", createObj, resultObj)
+ }
+ })
+ }
+}
diff --git a/accounts/abi/type.go b/accounts/abi/type.go
index 26151dbd3..1a3718235 100644
--- a/accounts/abi/type.go
+++ b/accounts/abi/type.go
@@ -188,6 +188,7 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) {
fields = append(fields, reflect.StructField{
Name: ToCamelCase(c.Name), // reflect.StructOf will panic for any exported field.
Type: cType.Type,
+ Tag: reflect.StructTag("json:\"" + c.Name + "\""),
})
elems = append(elems, &cType)
names = append(names, c.Name)
diff --git a/accounts/abi/type_test.go b/accounts/abi/type_test.go
index 7ef47330d..5023456ae 100644
--- a/accounts/abi/type_test.go
+++ b/accounts/abi/type_test.go
@@ -95,8 +95,14 @@ func TestTypeRegexp(t *testing.T) {
// {"fixed[2]", nil, Type{}},
// {"fixed128x128[]", nil, Type{}},
// {"fixed128x128[2]", nil, Type{}},
- {"tuple", []ArgumentMarshaling{{Name: "a", Type: "int64"}}, Type{Kind: reflect.Struct, T: TupleTy, Type: reflect.TypeOf(struct{ A int64 }{}), stringKind: "(int64)",
+ {"tuple", []ArgumentMarshaling{{Name: "a", Type: "int64"}}, Type{Kind: reflect.Struct, T: TupleTy, Type: reflect.TypeOf(struct {
+ A int64 `json:"a"`
+ }{}), stringKind: "(int64)",
TupleElems: []*Type{{Kind: reflect.Int64, T: IntTy, Type: reflect.TypeOf(int64(0)), Size: 64, stringKind: "int64"}}, TupleRawNames: []string{"a"}}},
+ {"tuple with long name", []ArgumentMarshaling{{Name: "aTypicalParamName", Type: "int64"}}, Type{Kind: reflect.Struct, T: TupleTy, Type: reflect.TypeOf(struct {
+ ATypicalParamName int64 `json:"aTypicalParamName"`
+ }{}), stringKind: "(int64)",
+ TupleElems: []*Type{{Kind: reflect.Int64, T: IntTy, Type: reflect.TypeOf(int64(0)), Size: 64, stringKind: "int64"}}, TupleRawNames: []string{"aTypicalParamName"}}},
}
for _, tt := range tests {
diff --git a/accounts/abi/unpack.go b/accounts/abi/unpack.go
index 8406b09c8..b2e61d06c 100644
--- a/accounts/abi/unpack.go
+++ b/accounts/abi/unpack.go
@@ -269,7 +269,7 @@ func lengthPrefixPointsTo(index int, output []byte) (start int, length int, err
totalSize.Add(totalSize, bigOffsetEnd)
totalSize.Add(totalSize, lengthBig)
if totalSize.BitLen() > 63 {
- return 0, 0, fmt.Errorf("abi length larger than int64: %v", totalSize)
+ return 0, 0, fmt.Errorf("abi: length larger than int64: %v", totalSize)
}
if totalSize.Cmp(outputLength) > 0 {
diff --git a/accounts/accounts.go b/accounts/accounts.go
index b57f282b3..a52aa425c 100644
--- a/accounts/accounts.go
+++ b/accounts/accounts.go
@@ -104,7 +104,7 @@ type Wallet interface {
// a password to decrypt the account, or a PIN code o verify the transaction),
// an AuthNeededError instance will be returned, containing infos for the user
// about which fields or actions are needed. The user may retry by providing
- // the needed details via SignHashWithPassphrase, or by other means (e.g. unlock
+ // the needed details via SignDataWithPassphrase, or by other means (e.g. unlock
// the account in a keystore).
SignData(account Account, mimeType string, data []byte) ([]byte, error)
@@ -114,7 +114,7 @@ type Wallet interface {
// should never echo the mimetype or return the mimetype in the error-response
SignDataWithPassphrase(account Account, passphrase, mimeType string, data []byte) ([]byte, error)
- // Signtext requests the wallet to sign the hash of a given piece of data, prefixed
+ // SignText requests the wallet to sign the hash of a given piece of data, prefixed
// by the Ethereum prefix scheme
// It looks up the account specified either solely via its address contained within,
// or optionally with the aid of any location metadata from the embedded URL field.
diff --git a/accounts/external/backend.go b/accounts/external/backend.go
index 3b8d50f1b..21a313b66 100644
--- a/accounts/external/backend.go
+++ b/accounts/external/backend.go
@@ -26,7 +26,6 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/internal/ethapi"
"github.com/ethereum/go-ethereum/log"
@@ -154,13 +153,31 @@ func (api *ExternalSigner) signHash(account accounts.Account, hash []byte) ([]by
// SignData signs keccak256(data). The mimetype parameter describes the type of data being signed
func (api *ExternalSigner) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) {
- // TODO! Replace this with a call to clef SignData with correct mime-type for Clique, once we
- // have that in place
- return api.signHash(account, crypto.Keccak256(data))
+ var res hexutil.Bytes
+ var signAddress = common.NewMixedcaseAddress(account.Address)
+ if err := api.client.Call(&res, "account_signData",
+ mimeType,
+ &signAddress, // Need to use the pointer here, because of how MarshalJSON is defined
+ hexutil.Encode(data)); err != nil {
+ return nil, err
+ }
+ // If V is on 27/28-form, convert to to 0/1 for Clique
+ if mimeType == accounts.MimetypeClique && (res[64] == 27 || res[64] == 28) {
+ res[64] -= 27 // Transform V from 27/28 to 0/1 for Clique use
+ }
+ return res, nil
}
func (api *ExternalSigner) SignText(account accounts.Account, text []byte) ([]byte, error) {
- return api.signHash(account, accounts.TextHash(text))
+ var res hexutil.Bytes
+ var signAddress = common.NewMixedcaseAddress(account.Address)
+ if err := api.client.Call(&res, "account_signData",
+ accounts.MimetypeTextPlain,
+ &signAddress, // Need to use the pointer here, because of how MarshalJSON is defined
+ hexutil.Encode(text)); err != nil {
+ return nil, err
+ }
+ return res, nil
}
func (api *ExternalSigner) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) {
@@ -202,18 +219,6 @@ func (api *ExternalSigner) listAccounts() ([]common.Address, error) {
return res, nil
}
-func (api *ExternalSigner) signCliqueBlock(a common.Address, rlpBlock hexutil.Bytes) (hexutil.Bytes, error) {
- var sig hexutil.Bytes
- if err := api.client.Call(&sig, "account_signData", core.ApplicationClique.Mime, a, rlpBlock); err != nil {
- return nil, err
- }
- if sig[64] != 27 && sig[64] != 28 {
- return nil, fmt.Errorf("invalid Ethereum signature (V is not 27 or 28)")
- }
- sig[64] -= 27 // Transform V from 27/28 to 0/1 for Clique use
- return sig, nil
-}
-
func (api *ExternalSigner) pingVersion() (string, error) {
var v string
if err := api.client.Call(&v, "account_version"); err != nil {
diff --git a/accounts/hd.go b/accounts/hd.go
index 6ed631807..24aa777ae 100644
--- a/accounts/hd.go
+++ b/accounts/hd.go
@@ -17,6 +17,7 @@
package accounts
import (
+ "encoding/json"
"errors"
"fmt"
"math"
@@ -133,3 +134,19 @@ func (path DerivationPath) String() string {
}
return result
}
+
+// MarshalJSON turns a derivation path into its json-serialized string
+func (path DerivationPath) MarshalJSON() ([]byte, error) {
+ return json.Marshal(path.String())
+}
+
+// UnmarshalJSON a json-serialized string back into a derivation path
+func (path *DerivationPath) UnmarshalJSON(b []byte) error {
+ var dp string
+ var err error
+ if err = json.Unmarshal(b, &dp); err != nil {
+ return err
+ }
+ *path, err = ParseDerivationPath(dp)
+ return err
+}
diff --git a/accounts/keystore/keystore.go b/accounts/keystore/keystore.go
index 2918047cc..434e03504 100644
--- a/accounts/keystore/keystore.go
+++ b/accounts/keystore/keystore.go
@@ -137,8 +137,10 @@ func (ks *KeyStore) refreshWallets() {
accs := ks.cache.accounts()
// Transform the current list of wallets into the new one
- wallets := make([]accounts.Wallet, 0, len(accs))
- events := []accounts.WalletEvent{}
+ var (
+ wallets = make([]accounts.Wallet, 0, len(accs))
+ events []accounts.WalletEvent
+ )
for _, account := range accs {
// Drop wallets while they were in front of the next account
diff --git a/accounts/keystore/wallet.go b/accounts/keystore/wallet.go
index 632620ead..1b36b6dff 100644
--- a/accounts/keystore/wallet.go
+++ b/accounts/keystore/wallet.go
@@ -111,7 +111,7 @@ func (w *keystoreWallet) SignText(account accounts.Account, text []byte) ([]byte
return w.signHash(account, accounts.TextHash(text))
}
-// SignHashWithPassphrase implements accounts.Wallet, attempting to sign the
+// SignTextWithPassphrase implements accounts.Wallet, attempting to sign the
// given hash with the given account using passphrase as extra authentication.
func (w *keystoreWallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) {
// Make sure the requested account is contained within
diff --git a/accounts/manager.go b/accounts/manager.go
index 96ca298fc..3cf3422e7 100644
--- a/accounts/manager.go
+++ b/accounts/manager.go
@@ -24,9 +24,18 @@ import (
"github.com/ethereum/go-ethereum/event"
)
+// Config contains the settings of the global account manager.
+//
+// TODO(rjl493456442, karalabe, holiman): Get rid of this when account management
+// is removed in favor of Clef.
+type Config struct {
+ InsecureUnlockAllowed bool // Whether account unlocking in insecure environment is allowed
+}
+
// Manager is an overarching account manager that can communicate with various
// backends for signing transactions.
type Manager struct {
+ config *Config // Global account manager configurations
backends map[reflect.Type][]Backend // Index of backends currently registered
updaters []event.Subscription // Wallet update subscriptions for all backends
updates chan WalletEvent // Subscription sink for backend wallet changes
@@ -40,7 +49,7 @@ type Manager struct {
// NewManager creates a generic account manager to sign transaction via various
// supported backends.
-func NewManager(backends ...Backend) *Manager {
+func NewManager(config *Config, backends ...Backend) *Manager {
// Retrieve the initial list of wallets from the backends and sort by URL
var wallets []Wallet
for _, backend := range backends {
@@ -55,6 +64,7 @@ func NewManager(backends ...Backend) *Manager {
}
// Assemble the account manager and return
am := &Manager{
+ config: config,
backends: make(map[reflect.Type][]Backend),
updaters: subs,
updates: updates,
@@ -77,6 +87,11 @@ func (am *Manager) Close() error {
return <-errc
}
+// Config returns the configuration of account manager.
+func (am *Manager) Config() *Config {
+ return am.config
+}
+
// update is the wallet event loop listening for notifications from the backends
// and updating the cache of wallets.
func (am *Manager) update() {
diff --git a/accounts/scwallet/README.md b/accounts/scwallet/README.md
new file mode 100644
index 000000000..20519e092
--- /dev/null
+++ b/accounts/scwallet/README.md
@@ -0,0 +1,102 @@
+# Using the smartcard wallet
+
+## Requirements
+
+ * A USB smartcard reader
+ * A keycard that supports the status app
+ * PCSCD version 4.3 running on your system **Only version 4.3 is currently supported**
+
+## Preparing the smartcard
+
+ **WARNING: FOILLOWING THESE INSTRUCTIONS WILL DESTROY THE MASTER KEY ON YOUR CARD. ONLY PROCEED IF NO FUNDS ARE ASSOCIATED WITH THESE ACCOUNTS**
+
+ You can use status' [keycard-cli](https://github.com/status-im/keycard-cli) and you should get _at least_ version 2.1.1 of their [smartcard application](https://github.com/status-im/status-keycard/releases/download/2.2.1/keycard_v2.2.1.cap)
+
+ You also need to make sure that the PCSC daemon is running on your system.
+
+ Then, you can install the application to the card by typing:
+
+ ```
+ keycard install -a keycard_v2.2.1.cap && keycard init
+ ```
+
+ At the end of this process, you will be provided with a PIN, a PUK and a pairing password. Write them down, you'll need them shortly.
+
+ Start `geth` with the `console` command. You will notice the following warning:
+
+ ```
+ WARN [04-09|16:58:38.898] Failed to open wallet url=pcsc://044def09 err="smartcard: pairing password needed"
+ ```
+
+ Write down the URL (`pcsc://044def09` in this example). Then ask `geth` to open the wallet:
+
+ ```
+ > personal.openWallet("pcsc://044def09")
+ Please enter the pairing password:
+ ```
+
+ Enter the pairing password that you have received during card initialization. Same with the PIN that you will subsequently be
+ asked for.
+
+ If everything goes well, you should see your new account when typing `personal` on the console:
+
+ ```
+ > personal
+ WARN [04-09|17:02:07.330] Smartcard wallet account derivation failed url=pcsc://044def09 err="Unexpected response status Cla=0x80, Ins=0xd1, Sw=0x6985"
+ {
+ listAccounts: [],
+ listWallets: [{
+ status: "Empty, waiting for initialization",
+ url: "pcsc://044def09"
+ }],
+ ...
+ }
+ ```
+
+ So the communication with the card is working, but there is no key associated with this wallet. Let's create it:
+
+ ```
+ > personal.initializeWallet("pcsc://044def09")
+ "tilt ... impact"
+ ```
+
+ You should get a list of words, this is your seed so write them down. Your wallet should now be initialized:
+
+ ```
+ > personal.listWallets
+ [{
+ accounts: [{
+ address: "0x678b7cd55c61917defb23546a41803c5bfefbc7a",
+ url: "pcsc://044d/m/44'/60'/0'/0/0"
+ }],
+ status: "Online",
+ url: "pcsc://044def09"
+ }]
+ ```
+
+ You're all set!
+
+## Usage
+
+ 1. Start `geth` with the `console` command
+ 2. Check the card's URL by checking `personal.listWallets`:
+
+```
+ listWallets: [{
+ status: "Online, can derive public keys",
+ url: "pcsc://a4d73015"
+ }]
+```
+
+ 3. Open the wallet, you will be prompted for your pairing password, then PIN:
+
+```
+personal.openWallet("pcsc://a4d73015")
+```
+
+ 4. Check that creation was successful by typing e.g. `personal`. Then use it like a regular wallet.
+
+## Known issues
+
+ * Starting geth with a valid card seems to make firefox crash.
+ * PCSC version 4.4 should work, but is currently untested
diff --git a/accounts/scwallet/apdu.go b/accounts/scwallet/apdu.go
new file mode 100644
index 000000000..bd3660604
--- /dev/null
+++ b/accounts/scwallet/apdu.go
@@ -0,0 +1,87 @@
+// Copyright 2018 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package scwallet
+
+import (
+ "bytes"
+ "encoding/binary"
+ "fmt"
+)
+
+// commandAPDU represents an application data unit sent to a smartcard.
+type commandAPDU struct {
+ Cla, Ins, P1, P2 uint8 // Class, Instruction, Parameter 1, Parameter 2
+ Data []byte // Command data
+ Le uint8 // Command data length
+}
+
+// serialize serializes a command APDU.
+func (ca commandAPDU) serialize() ([]byte, error) {
+ buf := new(bytes.Buffer)
+
+ if err := binary.Write(buf, binary.BigEndian, ca.Cla); err != nil {
+ return nil, err
+ }
+ if err := binary.Write(buf, binary.BigEndian, ca.Ins); err != nil {
+ return nil, err
+ }
+ if err := binary.Write(buf, binary.BigEndian, ca.P1); err != nil {
+ return nil, err
+ }
+ if err := binary.Write(buf, binary.BigEndian, ca.P2); err != nil {
+ return nil, err
+ }
+ if len(ca.Data) > 0 {
+ if err := binary.Write(buf, binary.BigEndian, uint8(len(ca.Data))); err != nil {
+ return nil, err
+ }
+ if err := binary.Write(buf, binary.BigEndian, ca.Data); err != nil {
+ return nil, err
+ }
+ }
+ if err := binary.Write(buf, binary.BigEndian, ca.Le); err != nil {
+ return nil, err
+ }
+ return buf.Bytes(), nil
+}
+
+// responseAPDU represents an application data unit received from a smart card.
+type responseAPDU struct {
+ Data []byte // response data
+ Sw1, Sw2 uint8 // status words 1 and 2
+}
+
+// deserialize deserializes a response APDU.
+func (ra *responseAPDU) deserialize(data []byte) error {
+ if len(data) < 2 {
+ return fmt.Errorf("can not deserialize data: payload too short (%d < 2)", len(data))
+ }
+
+ ra.Data = make([]byte, len(data)-2)
+
+ buf := bytes.NewReader(data)
+ if err := binary.Read(buf, binary.BigEndian, &ra.Data); err != nil {
+ return err
+ }
+ if err := binary.Read(buf, binary.BigEndian, &ra.Sw1); err != nil {
+ return err
+ }
+ if err := binary.Read(buf, binary.BigEndian, &ra.Sw2); err != nil {
+ return err
+ }
+ return nil
+}
diff --git a/accounts/scwallet/hub.go b/accounts/scwallet/hub.go
new file mode 100644
index 000000000..c259f711f
--- /dev/null
+++ b/accounts/scwallet/hub.go
@@ -0,0 +1,302 @@
+// Copyright 2018 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+// This package implements support for smartcard-based hardware wallets such as
+// the one written by Status: https://github.com/status-im/hardware-wallet
+//
+// This implementation of smartcard wallets have a different interaction process
+// to other types of hardware wallet. The process works like this:
+//
+// 1. (First use with a given client) Establish a pairing between hardware
+// wallet and client. This requires a secret value called a 'pairing password'.
+// You can pair with an unpaired wallet with `personal.openWallet(URI, pairing password)`.
+// 2. (First use only) Initialize the wallet, which generates a keypair, stores
+// it on the wallet, and returns it so the user can back it up. You can
+// initialize a wallet with `personal.initializeWallet(URI)`.
+// 3. Connect to the wallet using the pairing information established in step 1.
+// You can connect to a paired wallet with `personal.openWallet(URI, PIN)`.
+// 4. Interact with the wallet as normal.
+
+package scwallet
+
+import (
+ "encoding/json"
+ "io/ioutil"
+ "os"
+ "path/filepath"
+ "sort"
+ "sync"
+ "time"
+
+ "github.com/ethereum/go-ethereum/accounts"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/event"
+ "github.com/ethereum/go-ethereum/log"
+ pcsc "github.com/gballet/go-libpcsclite"
+)
+
+// Scheme is the URI prefix for smartcard wallets.
+const Scheme = "pcsc"
+
+// refreshCycle is the maximum time between wallet refreshes (if USB hotplug
+// notifications don't work).
+const refreshCycle = time.Second
+
+// refreshThrottling is the minimum time between wallet refreshes to avoid thrashing.
+const refreshThrottling = 500 * time.Millisecond
+
+// smartcardPairing contains information about a smart card we have paired with
+// or might pair with the hub.
+type smartcardPairing struct {
+ PublicKey []byte `json:"publicKey"`
+ PairingIndex uint8 `json:"pairingIndex"`
+ PairingKey []byte `json:"pairingKey"`
+ Accounts map[common.Address]accounts.DerivationPath `json:"accounts"`
+}
+
+// Hub is a accounts.Backend that can find and handle generic PC/SC hardware wallets.
+type Hub struct {
+ scheme string // Protocol scheme prefixing account and wallet URLs.
+
+ context *pcsc.Client
+ datadir string
+ pairings map[string]smartcardPairing
+
+ refreshed time.Time // Time instance when the list of wallets was last refreshed
+ wallets map[string]*Wallet // Mapping from reader names to wallet instances
+ updateFeed event.Feed // Event feed to notify wallet additions/removals
+ updateScope event.SubscriptionScope // Subscription scope tracking current live listeners
+ updating bool // Whether the event notification loop is running
+
+ quit chan chan error
+
+ stateLock sync.RWMutex // Protects the internals of the hub from racey access
+}
+
+func (hub *Hub) readPairings() error {
+ hub.pairings = make(map[string]smartcardPairing)
+ pairingFile, err := os.Open(filepath.Join(hub.datadir, "smartcards.json"))
+ if err != nil {
+ if os.IsNotExist(err) {
+ return nil
+ }
+ return err
+ }
+
+ pairingData, err := ioutil.ReadAll(pairingFile)
+ if err != nil {
+ return err
+ }
+ var pairings []smartcardPairing
+ if err := json.Unmarshal(pairingData, &pairings); err != nil {
+ return err
+ }
+
+ for _, pairing := range pairings {
+ hub.pairings[string(pairing.PublicKey)] = pairing
+ }
+ return nil
+}
+
+func (hub *Hub) writePairings() error {
+ pairingFile, err := os.OpenFile(filepath.Join(hub.datadir, "smartcards.json"), os.O_RDWR|os.O_CREATE, 0755)
+ if err != nil {
+ return err
+ }
+ defer pairingFile.Close()
+
+ pairings := make([]smartcardPairing, 0, len(hub.pairings))
+ for _, pairing := range hub.pairings {
+ pairings = append(pairings, pairing)
+ }
+
+ pairingData, err := json.Marshal(pairings)
+ if err != nil {
+ return err
+ }
+
+ if _, err := pairingFile.Write(pairingData); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (hub *Hub) pairing(wallet *Wallet) *smartcardPairing {
+ if pairing, ok := hub.pairings[string(wallet.PublicKey)]; ok {
+ return &pairing
+ }
+ return nil
+}
+
+func (hub *Hub) setPairing(wallet *Wallet, pairing *smartcardPairing) error {
+ if pairing == nil {
+ delete(hub.pairings, string(wallet.PublicKey))
+ } else {
+ hub.pairings[string(wallet.PublicKey)] = *pairing
+ }
+ return hub.writePairings()
+}
+
+// NewHub creates a new hardware wallet manager for smartcards.
+func NewHub(scheme string, datadir string) (*Hub, error) {
+ context, err := pcsc.EstablishContext(pcsc.ScopeSystem)
+ if err != nil {
+ return nil, err
+ }
+ hub := &Hub{
+ scheme: scheme,
+ context: context,
+ datadir: datadir,
+ wallets: make(map[string]*Wallet),
+ quit: make(chan chan error),
+ }
+ if err := hub.readPairings(); err != nil {
+ return nil, err
+ }
+ hub.refreshWallets()
+ return hub, nil
+}
+
+// Wallets implements accounts.Backend, returning all the currently tracked smart
+// cards that appear to be hardware wallets.
+func (hub *Hub) Wallets() []accounts.Wallet {
+ // Make sure the list of wallets is up to date
+ hub.refreshWallets()
+
+ hub.stateLock.RLock()
+ defer hub.stateLock.RUnlock()
+
+ cpy := make([]accounts.Wallet, 0, len(hub.wallets))
+ for _, wallet := range hub.wallets {
+ cpy = append(cpy, wallet)
+ }
+ sort.Sort(accounts.WalletsByURL(cpy))
+ return cpy
+}
+
+// refreshWallets scans the devices attached to the machine and updates the
+// list of wallets based on the found devices.
+func (hub *Hub) refreshWallets() {
+ // Don't scan the USB like crazy it the user fetches wallets in a loop
+ hub.stateLock.RLock()
+ elapsed := time.Since(hub.refreshed)
+ hub.stateLock.RUnlock()
+
+ if elapsed < refreshThrottling {
+ return
+ }
+ // Retrieve all the smart card reader to check for cards
+ readers, err := hub.context.ListReaders()
+ if err != nil {
+ // This is a perverted hack, the scard library returns an error if no card
+ // readers are present instead of simply returning an empty list. We don't
+ // want to fill the user's log with errors, so filter those out.
+ if err.Error() != "scard: Cannot find a smart card reader." {
+ log.Error("Failed to enumerate smart card readers", "err", err)
+ return
+ }
+ }
+ // Transform the current list of wallets into the new one
+ hub.stateLock.Lock()
+
+ events := []accounts.WalletEvent{}
+ seen := make(map[string]struct{})
+
+ for _, reader := range readers {
+ // Mark the reader as present
+ seen[reader] = struct{}{}
+
+ // If we alreay know about this card, skip to the next reader, otherwise clean up
+ if wallet, ok := hub.wallets[reader]; ok {
+ if err := wallet.ping(); err == nil {
+ continue
+ }
+ wallet.Close()
+ events = append(events, accounts.WalletEvent{Wallet: wallet, Kind: accounts.WalletDropped})
+ delete(hub.wallets, reader)
+ }
+ // New card detected, try to connect to it
+ card, err := hub.context.Connect(reader, pcsc.ShareShared, pcsc.ProtocolAny)
+ if err != nil {
+ log.Debug("Failed to open smart card", "reader", reader, "err", err)
+ continue
+ }
+ wallet := NewWallet(hub, card)
+ if err = wallet.connect(); err != nil {
+ log.Debug("Failed to connect to smart card", "reader", reader, "err", err)
+ card.Disconnect(pcsc.LeaveCard)
+ continue
+ }
+ // Card connected, start tracking in amongs the wallets
+ hub.wallets[reader] = wallet
+ events = append(events, accounts.WalletEvent{Wallet: wallet, Kind: accounts.WalletArrived})
+ }
+ // Remove any wallets no longer present
+ for reader, wallet := range hub.wallets {
+ if _, ok := seen[reader]; !ok {
+ wallet.Close()
+ events = append(events, accounts.WalletEvent{Wallet: wallet, Kind: accounts.WalletDropped})
+ delete(hub.wallets, reader)
+ }
+ }
+ hub.refreshed = time.Now()
+ hub.stateLock.Unlock()
+
+ for _, event := range events {
+ hub.updateFeed.Send(event)
+ }
+}
+
+// Subscribe implements accounts.Backend, creating an async subscription to
+// receive notifications on the addition or removal of smart card wallets.
+func (hub *Hub) Subscribe(sink chan<- accounts.WalletEvent) event.Subscription {
+ // We need the mutex to reliably start/stop the update loop
+ hub.stateLock.Lock()
+ defer hub.stateLock.Unlock()
+
+ // Subscribe the caller and track the subscriber count
+ sub := hub.updateScope.Track(hub.updateFeed.Subscribe(sink))
+
+ // Subscribers require an active notification loop, start it
+ if !hub.updating {
+ hub.updating = true
+ go hub.updater()
+ }
+ return sub
+}
+
+// updater is responsible for maintaining an up-to-date list of wallets managed
+// by the smart card hub, and for firing wallet addition/removal events.
+func (hub *Hub) updater() {
+ for {
+ // TODO: Wait for a USB hotplug event (not supported yet) or a refresh timeout
+ // <-hub.changes
+ time.Sleep(refreshCycle)
+
+ // Run the wallet refresher
+ hub.refreshWallets()
+
+ // If all our subscribers left, stop the updater
+ hub.stateLock.Lock()
+ if hub.updateScope.Count() == 0 {
+ hub.updating = false
+ hub.stateLock.Unlock()
+ return
+ }
+ hub.stateLock.Unlock()
+ }
+}
diff --git a/accounts/scwallet/securechannel.go b/accounts/scwallet/securechannel.go
new file mode 100644
index 000000000..fad876a01
--- /dev/null
+++ b/accounts/scwallet/securechannel.go
@@ -0,0 +1,346 @@
+// Copyright 2018 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package scwallet
+
+import (
+ "bytes"
+ "crypto/aes"
+ "crypto/cipher"
+ "crypto/rand"
+ "crypto/sha256"
+ "crypto/sha512"
+ "fmt"
+
+ "github.com/ethereum/go-ethereum/crypto"
+ pcsc "github.com/gballet/go-libpcsclite"
+ "github.com/wsddn/go-ecdh"
+ "golang.org/x/crypto/pbkdf2"
+ "golang.org/x/text/unicode/norm"
+)
+
+const (
+ maxPayloadSize = 223
+ pairP1FirstStep = 0
+ pairP1LastStep = 1
+
+ scSecretLength = 32
+ scBlockSize = 16
+
+ insOpenSecureChannel = 0x10
+ insMutuallyAuthenticate = 0x11
+ insPair = 0x12
+ insUnpair = 0x13
+
+ pairingSalt = "Keycard Pairing Password Salt"
+)
+
+// SecureChannelSession enables secure communication with a hardware wallet.
+type SecureChannelSession struct {
+ card *pcsc.Card // A handle to the smartcard for communication
+ secret []byte // A shared secret generated from our ECDSA keys
+ publicKey []byte // Our own ephemeral public key
+ PairingKey []byte // A permanent shared secret for a pairing, if present
+ sessionEncKey []byte // The current session encryption key
+ sessionMacKey []byte // The current session MAC key
+ iv []byte // The current IV
+ PairingIndex uint8 // The pairing index
+}
+
+// NewSecureChannelSession creates a new secure channel for the given card and public key.
+func NewSecureChannelSession(card *pcsc.Card, keyData []byte) (*SecureChannelSession, error) {
+ // Generate an ECDSA keypair for ourselves
+ gen := ecdh.NewEllipticECDH(crypto.S256())
+ private, public, err := gen.GenerateKey(rand.Reader)
+ if err != nil {
+ return nil, err
+ }
+
+ cardPublic, ok := gen.Unmarshal(keyData)
+ if !ok {
+ return nil, fmt.Errorf("Could not unmarshal public key from card")
+ }
+
+ secret, err := gen.GenerateSharedSecret(private, cardPublic)
+ if err != nil {
+ return nil, err
+ }
+
+ return &SecureChannelSession{
+ card: card,
+ secret: secret,
+ publicKey: gen.Marshal(public),
+ }, nil
+}
+
+// Pair establishes a new pairing with the smartcard.
+func (s *SecureChannelSession) Pair(pairingPassword []byte) error {
+ secretHash := pbkdf2.Key(norm.NFKD.Bytes(pairingPassword), norm.NFKD.Bytes([]byte(pairingSalt)), 50000, 32, sha256.New)
+
+ challenge := make([]byte, 32)
+ if _, err := rand.Read(challenge); err != nil {
+ return err
+ }
+
+ response, err := s.pair(pairP1FirstStep, challenge)
+ if err != nil {
+ return err
+ }
+
+ md := sha256.New()
+ md.Write(secretHash[:])
+ md.Write(challenge)
+
+ expectedCryptogram := md.Sum(nil)
+ cardCryptogram := response.Data[:32]
+ cardChallenge := response.Data[32:64]
+
+ if !bytes.Equal(expectedCryptogram, cardCryptogram) {
+ return fmt.Errorf("Invalid card cryptogram %v != %v", expectedCryptogram, cardCryptogram)
+ }
+
+ md.Reset()
+ md.Write(secretHash[:])
+ md.Write(cardChallenge)
+ response, err = s.pair(pairP1LastStep, md.Sum(nil))
+ if err != nil {
+ return err
+ }
+
+ md.Reset()
+ md.Write(secretHash[:])
+ md.Write(response.Data[1:])
+ s.PairingKey = md.Sum(nil)
+ s.PairingIndex = response.Data[0]
+
+ return nil
+}
+
+// Unpair disestablishes an existing pairing.
+func (s *SecureChannelSession) Unpair() error {
+ if s.PairingKey == nil {
+ return fmt.Errorf("Cannot unpair: not paired")
+ }
+
+ _, err := s.transmitEncrypted(claSCWallet, insUnpair, s.PairingIndex, 0, []byte{})
+ if err != nil {
+ return err
+ }
+ s.PairingKey = nil
+ // Close channel
+ s.iv = nil
+ return nil
+}
+
+// Open initializes the secure channel.
+func (s *SecureChannelSession) Open() error {
+ if s.iv != nil {
+ return fmt.Errorf("Session already opened")
+ }
+
+ response, err := s.open()
+ if err != nil {
+ return err
+ }
+
+ // Generate the encryption/mac key by hashing our shared secret,
+ // pairing key, and the first bytes returned from the Open APDU.
+ md := sha512.New()
+ md.Write(s.secret)
+ md.Write(s.PairingKey)
+ md.Write(response.Data[:scSecretLength])
+ keyData := md.Sum(nil)
+ s.sessionEncKey = keyData[:scSecretLength]
+ s.sessionMacKey = keyData[scSecretLength : scSecretLength*2]
+
+ // The IV is the last bytes returned from the Open APDU.
+ s.iv = response.Data[scSecretLength:]
+
+ return s.mutuallyAuthenticate()
+}
+
+// mutuallyAuthenticate is an internal method to authenticate both ends of the
+// connection.
+func (s *SecureChannelSession) mutuallyAuthenticate() error {
+ data := make([]byte, scSecretLength)
+ if _, err := rand.Read(data); err != nil {
+ return err
+ }
+
+ response, err := s.transmitEncrypted(claSCWallet, insMutuallyAuthenticate, 0, 0, data)
+ if err != nil {
+ return err
+ }
+ if response.Sw1 != 0x90 || response.Sw2 != 0x00 {
+ return fmt.Errorf("Got unexpected response from MUTUALLY_AUTHENTICATE: 0x%x%x", response.Sw1, response.Sw2)
+ }
+
+ if len(response.Data) != scSecretLength {
+ return fmt.Errorf("Response from MUTUALLY_AUTHENTICATE was %d bytes, expected %d", len(response.Data), scSecretLength)
+ }
+
+ return nil
+}
+
+// open is an internal method that sends an open APDU.
+func (s *SecureChannelSession) open() (*responseAPDU, error) {
+ return transmit(s.card, &commandAPDU{
+ Cla: claSCWallet,
+ Ins: insOpenSecureChannel,
+ P1: s.PairingIndex,
+ P2: 0,
+ Data: s.publicKey,
+ Le: 0,
+ })
+}
+
+// pair is an internal method that sends a pair APDU.
+func (s *SecureChannelSession) pair(p1 uint8, data []byte) (*responseAPDU, error) {
+ return transmit(s.card, &commandAPDU{
+ Cla: claSCWallet,
+ Ins: insPair,
+ P1: p1,
+ P2: 0,
+ Data: data,
+ Le: 0,
+ })
+}
+
+// transmitEncrypted sends an encrypted message, and decrypts and returns the response.
+func (s *SecureChannelSession) transmitEncrypted(cla, ins, p1, p2 byte, data []byte) (*responseAPDU, error) {
+ if s.iv == nil {
+ return nil, fmt.Errorf("Channel not open")
+ }
+
+ data, err := s.encryptAPDU(data)
+ if err != nil {
+ return nil, err
+ }
+ meta := [16]byte{cla, ins, p1, p2, byte(len(data) + scBlockSize)}
+ if err = s.updateIV(meta[:], data); err != nil {
+ return nil, err
+ }
+
+ fulldata := make([]byte, len(s.iv)+len(data))
+ copy(fulldata, s.iv)
+ copy(fulldata[len(s.iv):], data)
+
+ response, err := transmit(s.card, &commandAPDU{
+ Cla: cla,
+ Ins: ins,
+ P1: p1,
+ P2: p2,
+ Data: fulldata,
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ rmeta := [16]byte{byte(len(response.Data))}
+ rmac := response.Data[:len(s.iv)]
+ rdata := response.Data[len(s.iv):]
+ plainData, err := s.decryptAPDU(rdata)
+ if err != nil {
+ return nil, err
+ }
+
+ if err = s.updateIV(rmeta[:], rdata); err != nil {
+ return nil, err
+ }
+ if !bytes.Equal(s.iv, rmac) {
+ return nil, fmt.Errorf("Invalid MAC in response")
+ }
+
+ rapdu := &responseAPDU{}
+ rapdu.deserialize(plainData)
+
+ if rapdu.Sw1 != sw1Ok {
+ return nil, fmt.Errorf("Unexpected response status Cla=0x%x, Ins=0x%x, Sw=0x%x%x", cla, ins, rapdu.Sw1, rapdu.Sw2)
+ }
+
+ return rapdu, nil
+}
+
+// encryptAPDU is an internal method that serializes and encrypts an APDU.
+func (s *SecureChannelSession) encryptAPDU(data []byte) ([]byte, error) {
+ if len(data) > maxPayloadSize {
+ return nil, fmt.Errorf("Payload of %d bytes exceeds maximum of %d", len(data), maxPayloadSize)
+ }
+ data = pad(data, 0x80)
+
+ ret := make([]byte, len(data))
+
+ a, err := aes.NewCipher(s.sessionEncKey)
+ if err != nil {
+ return nil, err
+ }
+ crypter := cipher.NewCBCEncrypter(a, s.iv)
+ crypter.CryptBlocks(ret, data)
+ return ret, nil
+}
+
+// pad applies message padding to a 16 byte boundary.
+func pad(data []byte, terminator byte) []byte {
+ padded := make([]byte, (len(data)/16+1)*16)
+ copy(padded, data)
+ padded[len(data)] = terminator
+ return padded
+}
+
+// decryptAPDU is an internal method that decrypts and deserializes an APDU.
+func (s *SecureChannelSession) decryptAPDU(data []byte) ([]byte, error) {
+ a, err := aes.NewCipher(s.sessionEncKey)
+ if err != nil {
+ return nil, err
+ }
+
+ ret := make([]byte, len(data))
+
+ crypter := cipher.NewCBCDecrypter(a, s.iv)
+ crypter.CryptBlocks(ret, data)
+ return unpad(ret, 0x80)
+}
+
+// unpad strips padding from a message.
+func unpad(data []byte, terminator byte) ([]byte, error) {
+ for i := 1; i <= 16; i++ {
+ switch data[len(data)-i] {
+ case 0:
+ continue
+ case terminator:
+ return data[:len(data)-i], nil
+ default:
+ return nil, fmt.Errorf("Expected end of padding, got %d", data[len(data)-i])
+ }
+ }
+ return nil, fmt.Errorf("Expected end of padding, got 0")
+}
+
+// updateIV is an internal method that updates the initialization vector after
+// each message exchanged.
+func (s *SecureChannelSession) updateIV(meta, data []byte) error {
+ data = pad(data, 0)
+ a, err := aes.NewCipher(s.sessionMacKey)
+ if err != nil {
+ return err
+ }
+ crypter := cipher.NewCBCEncrypter(a, make([]byte, 16))
+ crypter.CryptBlocks(meta, meta)
+ crypter.CryptBlocks(data, data)
+ // The first 16 bytes of the last block is the MAC
+ s.iv = data[len(data)-32 : len(data)-16]
+ return nil
+}
diff --git a/accounts/scwallet/wallet.go b/accounts/scwallet/wallet.go
new file mode 100644
index 000000000..4c9a422a3
--- /dev/null
+++ b/accounts/scwallet/wallet.go
@@ -0,0 +1,1074 @@
+// Copyright 2018 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package scwallet
+
+import (
+ "bytes"
+ "context"
+ "crypto/hmac"
+ "crypto/sha256"
+ "crypto/sha512"
+ "encoding/asn1"
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "math/big"
+ "sort"
+ "strings"
+ "sync"
+ "time"
+
+ ethereum "github.com/ethereum/go-ethereum"
+ "github.com/ethereum/go-ethereum/accounts"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/crypto"
+ "github.com/ethereum/go-ethereum/crypto/secp256k1"
+ "github.com/ethereum/go-ethereum/log"
+ pcsc "github.com/gballet/go-libpcsclite"
+ "github.com/status-im/keycard-go/derivationpath"
+)
+
+// ErrPairingPasswordNeeded is returned if opening the smart card requires pairing with a pairing
+// password. In this case, the calling application should request user input to enter
+// the pairing password and send it back.
+var ErrPairingPasswordNeeded = errors.New("smartcard: pairing password needed")
+
+// ErrPINNeeded is returned if opening the smart card requires a PIN code. In
+// this case, the calling application should request user input to enter the PIN
+// and send it back.
+var ErrPINNeeded = errors.New("smartcard: pin needed")
+
+// ErrPINUnblockNeeded is returned if opening the smart card requires a PIN code,
+// but all PIN attempts have already been exhausted. In this case the calling
+// application should request user input for the PUK and a new PIN code to set
+// fo the card.
+var ErrPINUnblockNeeded = errors.New("smartcard: pin unblock needed")
+
+// ErrAlreadyOpen is returned if the smart card is attempted to be opened, but
+// there is already a paired and unlocked session.
+var ErrAlreadyOpen = errors.New("smartcard: already open")
+
+// ErrPubkeyMismatch is returned if the public key recovered from a signature
+// does not match the one expected by the user.
+var ErrPubkeyMismatch = errors.New("smartcard: recovered public key mismatch")
+
+var (
+ appletAID = []byte{0xA0, 0x00, 0x00, 0x08, 0x04, 0x00, 0x01, 0x01, 0x01}
+ // DerivationSignatureHash is used to derive the public key from the signature of this hash
+ DerivationSignatureHash = sha256.Sum256(common.Hash{}.Bytes())
+)
+
+// List of APDU command-related constants
+const (
+ claISO7816 = 0
+ claSCWallet = 0x80
+
+ insSelect = 0xA4
+ insGetResponse = 0xC0
+ sw1GetResponse = 0x61
+ sw1Ok = 0x90
+
+ insVerifyPin = 0x20
+ insUnblockPin = 0x22
+ insExportKey = 0xC2
+ insSign = 0xC0
+ insLoadKey = 0xD0
+ insDeriveKey = 0xD1
+ insStatus = 0xF2
+)
+
+// List of ADPU command parameters
+const (
+ P1DeriveKeyFromMaster = uint8(0x00)
+ P1DeriveKeyFromParent = uint8(0x01)
+ P1DeriveKeyFromCurrent = uint8(0x10)
+ statusP1WalletStatus = uint8(0x00)
+ statusP1Path = uint8(0x01)
+ signP1PrecomputedHash = uint8(0x01)
+ signP2OnlyBlock = uint8(0x81)
+ exportP1Any = uint8(0x00)
+ exportP2Pubkey = uint8(0x01)
+)
+
+// Minimum time to wait between self derivation attempts, even it the user is
+// requesting accounts like crazy.
+const selfDeriveThrottling = time.Second
+
+// Wallet represents a smartcard wallet instance.
+type Wallet struct {
+ Hub *Hub // A handle to the Hub that instantiated this wallet.
+ PublicKey []byte // The wallet's public key (used for communication and identification, not signing!)
+
+ lock sync.Mutex // Lock that gates access to struct fields and communication with the card
+ card *pcsc.Card // A handle to the smartcard interface for the wallet.
+ session *Session // The secure communication session with the card
+ log log.Logger // Contextual logger to tag the base with its id
+
+ deriveNextPath accounts.DerivationPath // Next derivation path for account auto-discovery
+ deriveNextAddr common.Address // Next derived account address for auto-discovery
+ deriveChain ethereum.ChainStateReader // Blockchain state reader to discover used account with
+ deriveReq chan chan struct{} // Channel to request a self-derivation on
+ deriveQuit chan chan error // Channel to terminate the self-deriver with
+}
+
+// NewWallet constructs and returns a new Wallet instance.
+func NewWallet(hub *Hub, card *pcsc.Card) *Wallet {
+ wallet := &Wallet{
+ Hub: hub,
+ card: card,
+ }
+ return wallet
+}
+
+// transmit sends an APDU to the smartcard and receives and decodes the response.
+// It automatically handles requests by the card to fetch the return data separately,
+// and returns an error if the response status code is not success.
+func transmit(card *pcsc.Card, command *commandAPDU) (*responseAPDU, error) {
+ data, err := command.serialize()
+ if err != nil {
+ return nil, err
+ }
+
+ responseData, _, err := card.Transmit(data)
+ if err != nil {
+ return nil, err
+ }
+
+ response := new(responseAPDU)
+ if err = response.deserialize(responseData); err != nil {
+ return nil, err
+ }
+
+ // Are we being asked to fetch the response separately?
+ if response.Sw1 == sw1GetResponse && (command.Cla != claISO7816 || command.Ins != insGetResponse) {
+ return transmit(card, &commandAPDU{
+ Cla: claISO7816,
+ Ins: insGetResponse,
+ P1: 0,
+ P2: 0,
+ Data: nil,
+ Le: response.Sw2,
+ })
+ }
+
+ if response.Sw1 != sw1Ok {
+ return nil, fmt.Errorf("Unexpected insecure response status Cla=0x%x, Ins=0x%x, Sw=0x%x%x", command.Cla, command.Ins, response.Sw1, response.Sw2)
+ }
+
+ return response, nil
+}
+
+// applicationInfo encodes information about the smartcard application - its
+// instance UID and public key.
+type applicationInfo struct {
+ InstanceUID []byte `asn1:"tag:15"`
+ PublicKey []byte `asn1:"tag:0"`
+}
+
+// connect connects to the wallet application and establishes a secure channel with it.
+// must be called before any other interaction with the wallet.
+func (w *Wallet) connect() error {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ appinfo, err := w.doselect()
+ if err != nil {
+ return err
+ }
+
+ channel, err := NewSecureChannelSession(w.card, appinfo.PublicKey)
+ if err != nil {
+ return err
+ }
+
+ w.PublicKey = appinfo.PublicKey
+ w.log = log.New("url", w.URL())
+ w.session = &Session{
+ Wallet: w,
+ Channel: channel,
+ }
+ return nil
+}
+
+// doselect is an internal (unlocked) function to send a SELECT APDU to the card.
+func (w *Wallet) doselect() (*applicationInfo, error) {
+ response, err := transmit(w.card, &commandAPDU{
+ Cla: claISO7816,
+ Ins: insSelect,
+ P1: 4,
+ P2: 0,
+ Data: appletAID,
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ appinfo := new(applicationInfo)
+ if _, err := asn1.UnmarshalWithParams(response.Data, appinfo, "tag:4"); err != nil {
+ return nil, err
+ }
+ return appinfo, nil
+}
+
+// ping checks the card's status and returns an error if unsuccessful.
+func (w *Wallet) ping() error {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ // We can't ping if not paired
+ if !w.session.paired() {
+ return nil
+ }
+ if _, err := w.session.walletStatus(); err != nil {
+ return err
+ }
+ return nil
+}
+
+// release releases any resources held by an open wallet instance.
+func (w *Wallet) release() error {
+ if w.session != nil {
+ return w.session.release()
+ }
+ return nil
+}
+
+// pair is an internal (unlocked) function for establishing a new pairing
+// with the wallet.
+func (w *Wallet) pair(puk []byte) error {
+ if w.session.paired() {
+ return fmt.Errorf("Wallet already paired")
+ }
+ pairing, err := w.session.pair(puk)
+ if err != nil {
+ return err
+ }
+ if err = w.Hub.setPairing(w, &pairing); err != nil {
+ return err
+ }
+ return w.session.authenticate(pairing)
+}
+
+// Unpair deletes an existing wallet pairing.
+func (w *Wallet) Unpair(pin []byte) error {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ if !w.session.paired() {
+ return fmt.Errorf("wallet %x not paired", w.PublicKey)
+ }
+ if err := w.session.verifyPin(pin); err != nil {
+ return fmt.Errorf("failed to verify pin: %s", err)
+ }
+ if err := w.session.unpair(); err != nil {
+ return fmt.Errorf("failed to unpair: %s", err)
+ }
+ if err := w.Hub.setPairing(w, nil); err != nil {
+ return err
+ }
+ return nil
+}
+
+// URL retrieves the canonical path under which this wallet is reachable. It is
+// user by upper layers to define a sorting order over all wallets from multiple
+// backends.
+func (w *Wallet) URL() accounts.URL {
+ return accounts.URL{
+ Scheme: w.Hub.scheme,
+ Path: fmt.Sprintf("%x", w.PublicKey[1:5]), // Byte #0 isn't unique; 1:5 covers << 64K cards, bump to 1:9 for << 4M
+ }
+}
+
+// Status returns a textual status to aid the user in the current state of the
+// wallet. It also returns an error indicating any failure the wallet might have
+// encountered.
+func (w *Wallet) Status() (string, error) {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ // If the card is not paired, we can only wait
+ if !w.session.paired() {
+ return "Unpaired, waiting for pairing password", nil
+ }
+ // Yay, we have an encrypted session, retrieve the actual status
+ status, err := w.session.walletStatus()
+ if err != nil {
+ return fmt.Sprintf("Failed: %v", err), err
+ }
+ switch {
+ case !w.session.verified && status.PinRetryCount == 0:
+ return fmt.Sprintf("Blocked, waiting for PUK and new PIN"), nil
+ case !w.session.verified:
+ return fmt.Sprintf("Locked, waiting for PIN (%d attempts left)", status.PinRetryCount), nil
+ case !status.Initialized:
+ return fmt.Sprintf("Empty, waiting for initialization"), nil
+ default:
+ return fmt.Sprintf("Online"), nil
+ }
+}
+
+// Open initializes access to a wallet instance. It is not meant to unlock or
+// decrypt account keys, rather simply to establish a connection to hardware
+// wallets and/or to access derivation seeds.
+//
+// The passphrase parameter may or may not be used by the implementation of a
+// particular wallet instance. The reason there is no passwordless open method
+// is to strive towards a uniform wallet handling, oblivious to the different
+// backend providers.
+//
+// Please note, if you open a wallet, you must close it to release any allocated
+// resources (especially important when working with hardware wallets).
+func (w *Wallet) Open(passphrase string) error {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ // If the session is already open, bail out
+ if w.session.verified {
+ return ErrAlreadyOpen
+ }
+ // If the smart card is not yet paired, attempt to do so either from a previous
+ // pairing key or form the supplied PUK code.
+ if !w.session.paired() {
+ // If a previous pairing exists, only ever try to use that
+ if pairing := w.Hub.pairing(w); pairing != nil {
+ if err := w.session.authenticate(*pairing); err != nil {
+ return fmt.Errorf("failed to authenticate card %x: %s", w.PublicKey[:4], err)
+ }
+ // Pairing still ok, fall through to PIN checks
+ } else {
+ // If no passphrase was supplied, request the PUK from the user
+ if passphrase == "" {
+ return ErrPairingPasswordNeeded
+ }
+ // Attempt to pair the smart card with the user supplied PUK
+ if err := w.pair([]byte(passphrase)); err != nil {
+ return err
+ }
+ // Pairing succeeded, fall through to PIN checks. This will of course fail,
+ // but we can't return ErrPINNeeded directly here becase we don't know whether
+ // a PIN check or a PIN reset is needed.
+ passphrase = ""
+ }
+ }
+ // The smart card was successfully paired, retrieve its status to check whether
+ // PIN verification or unblocking is needed.
+ status, err := w.session.walletStatus()
+ if err != nil {
+ return err
+ }
+ // Request the appropriate next authentication data, or use the one supplied
+ switch {
+ case passphrase == "" && status.PinRetryCount > 0:
+ return ErrPINNeeded
+ case passphrase == "":
+ return ErrPINUnblockNeeded
+ case status.PinRetryCount > 0:
+ if err := w.session.verifyPin([]byte(passphrase)); err != nil {
+ return err
+ }
+ default:
+ if err := w.session.unblockPin([]byte(passphrase)); err != nil {
+ return err
+ }
+ }
+ // Smart card paired and unlocked, initialize and register
+ w.deriveReq = make(chan chan struct{})
+ w.deriveQuit = make(chan chan error)
+
+ go w.selfDerive(0)
+
+ // Notify anyone listening for wallet events that a new device is accessible
+ go w.Hub.updateFeed.Send(accounts.WalletEvent{Wallet: w, Kind: accounts.WalletOpened})
+
+ return nil
+}
+
+// Close stops and closes the wallet, freeing any resources.
+func (w *Wallet) Close() error {
+ // Ensure the wallet was opened
+ w.lock.Lock()
+ dQuit := w.deriveQuit
+ w.lock.Unlock()
+
+ // Terminate the self-derivations
+ var derr error
+ if dQuit != nil {
+ errc := make(chan error)
+ dQuit <- errc
+ derr = <-errc // Save for later, we *must* close the USB
+ }
+ // Terminate the device connection
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ w.deriveQuit = nil
+ w.deriveReq = nil
+
+ if err := w.release(); err != nil {
+ return err
+ }
+ return derr
+}
+
+// selfDerive is an account derivation loop that upon request attempts to find
+// new non-zero accounts. maxEmpty specifies the number of empty accounts that
+// should be derived once an initial empty account has been found.
+func (w *Wallet) selfDerive(maxEmpty int) {
+ w.log.Debug("Smart card wallet self-derivation started")
+ defer w.log.Debug("Smart card wallet self-derivation stopped")
+
+ // Execute self-derivations until termination or error
+ var (
+ reqc chan struct{}
+ errc chan error
+ err error
+ )
+ for errc == nil && err == nil {
+ // Wait until either derivation or termination is requested
+ select {
+ case errc = <-w.deriveQuit:
+ // Termination requested
+ continue
+ case reqc = <-w.deriveReq:
+ // Account discovery requested
+ }
+ // Derivation needs a chain and device access, skip if either unavailable
+ w.lock.Lock()
+ if w.session == nil || w.deriveChain == nil {
+ w.lock.Unlock()
+ reqc <- struct{}{}
+ continue
+ }
+ pairing := w.Hub.pairing(w)
+
+ // Device lock obtained, derive the next batch of accounts
+ var (
+ paths []accounts.DerivationPath
+ nextAcc accounts.Account
+
+ nextAddr = w.deriveNextAddr
+ nextPath = w.deriveNextPath
+
+ context = context.Background()
+ )
+ for empty, emptyCount := false, maxEmpty+1; !empty || emptyCount > 0; {
+ // Retrieve the next derived Ethereum account
+ if nextAddr == (common.Address{}) {
+ if nextAcc, err = w.session.derive(nextPath); err != nil {
+ w.log.Warn("Smartcard wallet account derivation failed", "err", err)
+ break
+ }
+ nextAddr = nextAcc.Address
+ }
+ // Check the account's status against the current chain state
+ var (
+ balance *big.Int
+ nonce uint64
+ )
+ balance, err = w.deriveChain.BalanceAt(context, nextAddr, nil)
+ if err != nil {
+ w.log.Warn("Smartcard wallet balance retrieval failed", "err", err)
+ break
+ }
+ nonce, err = w.deriveChain.NonceAt(context, nextAddr, nil)
+ if err != nil {
+ w.log.Warn("Smartcard wallet nonce retrieval failed", "err", err)
+ break
+ }
+ // If the next account is empty and no more empty accounts are
+ // allowed, stop self-derivation. Add the current one nonetheless.
+ if balance.Sign() == 0 && nonce == 0 {
+ empty = true
+ emptyCount--
+ }
+ // We've just self-derived a new account, start tracking it locally
+ path := make(accounts.DerivationPath, len(nextPath))
+ copy(path[:], nextPath[:])
+ paths = append(paths, path)
+
+ // Display a log message to the user for new (or previously empty accounts)
+ if _, known := pairing.Accounts[nextAddr]; !known || !empty || nextAddr != w.deriveNextAddr {
+ w.log.Info("Smartcard wallet discovered new account", "address", nextAddr, "path", path, "balance", balance, "nonce", nonce)
+ }
+ pairing.Accounts[nextAddr] = path
+
+ // Fetch the next potential account
+ if !empty || emptyCount > 0 {
+ nextAddr = common.Address{}
+ nextPath[len(nextPath)-1]++
+ }
+ }
+ // If there are new accounts, write them out
+ if len(paths) > 0 {
+ err = w.Hub.setPairing(w, pairing)
+ }
+ // Shift the self-derivation forward
+ w.deriveNextAddr = nextAddr
+ w.deriveNextPath = nextPath
+
+ // Self derivation complete, release device lock
+ w.lock.Unlock()
+
+ // Notify the user of termination and loop after a bit of time (to avoid trashing)
+ reqc <- struct{}{}
+ if err == nil {
+ select {
+ case errc = <-w.deriveQuit:
+ // Termination requested, abort
+ case <-time.After(selfDeriveThrottling):
+ // Waited enough, willing to self-derive again
+ }
+ }
+ }
+ // In case of error, wait for termination
+ if err != nil {
+ w.log.Debug("Smartcard wallet self-derivation failed", "err", err)
+ errc = <-w.deriveQuit
+ }
+ errc <- err
+}
+
+// Accounts retrieves the list of signing accounts the wallet is currently aware
+// of. For hierarchical deterministic wallets, the list will not be exhaustive,
+// rather only contain the accounts explicitly pinned during account derivation.
+func (w *Wallet) Accounts() []accounts.Account {
+ // Attempt self-derivation if it's running
+ reqc := make(chan struct{}, 1)
+ select {
+ case w.deriveReq <- reqc:
+ // Self-derivation request accepted, wait for it
+ <-reqc
+ default:
+ // Self-derivation offline, throttled or busy, skip
+ }
+
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ if pairing := w.Hub.pairing(w); pairing != nil {
+ ret := make([]accounts.Account, 0, len(pairing.Accounts))
+ for address, path := range pairing.Accounts {
+ ret = append(ret, w.makeAccount(address, path))
+ }
+ sort.Sort(accounts.AccountsByURL(ret))
+ return ret
+ }
+ return nil
+}
+
+func (w *Wallet) makeAccount(address common.Address, path accounts.DerivationPath) accounts.Account {
+ return accounts.Account{
+ Address: address,
+ URL: accounts.URL{
+ Scheme: w.Hub.scheme,
+ Path: fmt.Sprintf("%x/%s", w.PublicKey[1:3], path.String()),
+ },
+ }
+}
+
+// Contains returns whether an account is part of this particular wallet or not.
+func (w *Wallet) Contains(account accounts.Account) bool {
+ if pairing := w.Hub.pairing(w); pairing != nil {
+ _, ok := pairing.Accounts[account.Address]
+ return ok
+ }
+ return false
+}
+
+// Initialize installs a keypair generated from the provided key into the wallet.
+func (w *Wallet) Initialize(seed []byte) error {
+ go w.selfDerive(0)
+ // DO NOT lock at this stage, as the initialize
+ // function relies on Status()
+ return w.session.initialize(seed)
+}
+
+// Derive attempts to explicitly derive a hierarchical deterministic account at
+// the specified derivation path. If requested, the derived account will be added
+// to the wallet's tracked account list.
+func (w *Wallet) Derive(path accounts.DerivationPath, pin bool) (accounts.Account, error) {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ account, err := w.session.derive(path)
+ if err != nil {
+ return accounts.Account{}, err
+ }
+
+ if pin {
+ pairing := w.Hub.pairing(w)
+ pairing.Accounts[account.Address] = path
+ if err := w.Hub.setPairing(w, pairing); err != nil {
+ return accounts.Account{}, err
+ }
+ }
+
+ return account, nil
+}
+
+// SelfDerive sets a base account derivation path from which the wallet attempts
+// to discover non zero accounts and automatically add them to list of tracked
+// accounts.
+//
+// Note, self derivaton will increment the last component of the specified path
+// opposed to decending into a child path to allow discovering accounts starting
+// from non zero components.
+//
+// You can disable automatic account discovery by calling SelfDerive with a nil
+// chain state reader.
+func (w *Wallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainStateReader) {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ w.deriveNextPath = make(accounts.DerivationPath, len(base))
+ copy(w.deriveNextPath[:], base[:])
+
+ w.deriveNextAddr = common.Address{}
+ w.deriveChain = chain
+}
+
+// SignData requests the wallet to sign the hash of the given data.
+//
+// It looks up the account specified either solely via its address contained within,
+// or optionally with the aid of any location metadata from the embedded URL field.
+//
+// If the wallet requires additional authentication to sign the request (e.g.
+// a password to decrypt the account, or a PIN code o verify the transaction),
+// an AuthNeededError instance will be returned, containing infos for the user
+// about which fields or actions are needed. The user may retry by providing
+// the needed details via SignDataWithPassphrase, or by other means (e.g. unlock
+// the account in a keystore).
+func (w *Wallet) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) {
+ return w.signHash(account, crypto.Keccak256(data))
+}
+
+func (w *Wallet) signHash(account accounts.Account, hash []byte) ([]byte, error) {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ path, err := w.findAccountPath(account)
+ if err != nil {
+ return nil, err
+ }
+
+ return w.session.sign(path, hash)
+}
+
+// SignTx requests the wallet to sign the given transaction.
+//
+// It looks up the account specified either solely via its address contained within,
+// or optionally with the aid of any location metadata from the embedded URL field.
+//
+// If the wallet requires additional authentication to sign the request (e.g.
+// a password to decrypt the account, or a PIN code o verify the transaction),
+// an AuthNeededError instance will be returned, containing infos for the user
+// about which fields or actions are needed. The user may retry by providing
+// the needed details via SignTxWithPassphrase, or by other means (e.g. unlock
+// the account in a keystore).
+func (w *Wallet) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) {
+ signer := types.NewEIP155Signer(chainID)
+ hash := signer.Hash(tx)
+ sig, err := w.signHash(account, hash[:])
+ if err != nil {
+ return nil, err
+ }
+ return tx.WithSignature(signer, sig)
+}
+
+// SignDataWithPassphrase requests the wallet to sign the given hash with the
+// given passphrase as extra authentication information.
+//
+// It looks up the account specified either solely via its address contained within,
+// or optionally with the aid of any location metadata from the embedded URL field.
+func (w *Wallet) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) {
+ return w.signHashWithPassphrase(account, passphrase, crypto.Keccak256(data))
+}
+
+func (w *Wallet) signHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) {
+ if !w.session.verified {
+ if err := w.Open(passphrase); err != nil {
+ return nil, err
+ }
+ }
+
+ return w.signHash(account, hash)
+}
+
+// SignText requests the wallet to sign the hash of a given piece of data, prefixed
+// by the Ethereum prefix scheme
+// It looks up the account specified either solely via its address contained within,
+// or optionally with the aid of any location metadata from the embedded URL field.
+//
+// If the wallet requires additional authentication to sign the request (e.g.
+// a password to decrypt the account, or a PIN code o verify the transaction),
+// an AuthNeededError instance will be returned, containing infos for the user
+// about which fields or actions are needed. The user may retry by providing
+// the needed details via SignHashWithPassphrase, or by other means (e.g. unlock
+// the account in a keystore).
+func (w *Wallet) SignText(account accounts.Account, text []byte) ([]byte, error) {
+ return w.signHash(account, accounts.TextHash(text))
+}
+
+// SignTextWithPassphrase implements accounts.Wallet, attempting to sign the
+// given hash with the given account using passphrase as extra authentication
+func (w *Wallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) {
+ return w.signHashWithPassphrase(account, passphrase, crypto.Keccak256(accounts.TextHash(text)))
+}
+
+// SignTxWithPassphrase requests the wallet to sign the given transaction, with the
+// given passphrase as extra authentication information.
+//
+// It looks up the account specified either solely via its address contained within,
+// or optionally with the aid of any location metadata from the embedded URL field.
+func (w *Wallet) SignTxWithPassphrase(account accounts.Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) {
+ if !w.session.verified {
+ if err := w.Open(passphrase); err != nil {
+ return nil, err
+ }
+ }
+ return w.SignTx(account, tx, chainID)
+}
+
+// findAccountPath returns the derivation path for the provided account.
+// It first checks for the address in the list of pinned accounts, and if it is
+// not found, attempts to parse the derivation path from the account's URL.
+func (w *Wallet) findAccountPath(account accounts.Account) (accounts.DerivationPath, error) {
+ pairing := w.Hub.pairing(w)
+ if path, ok := pairing.Accounts[account.Address]; ok {
+ return path, nil
+ }
+
+ // Look for the path in the URL
+ if account.URL.Scheme != w.Hub.scheme {
+ return nil, fmt.Errorf("Scheme %s does not match wallet scheme %s", account.URL.Scheme, w.Hub.scheme)
+ }
+
+ parts := strings.SplitN(account.URL.Path, "/", 2)
+ if len(parts) != 2 {
+ return nil, fmt.Errorf("Invalid URL format: %s", account.URL)
+ }
+
+ if parts[0] != fmt.Sprintf("%x", w.PublicKey[1:3]) {
+ return nil, fmt.Errorf("URL %s is not for this wallet", account.URL)
+ }
+
+ return accounts.ParseDerivationPath(parts[1])
+}
+
+// Session represents a secured communication session with the wallet.
+type Session struct {
+ Wallet *Wallet // A handle to the wallet that opened the session
+ Channel *SecureChannelSession // A secure channel for encrypted messages
+ verified bool // Whether the pin has been verified in this session.
+}
+
+// pair establishes a new pairing over this channel, using the provided secret.
+func (s *Session) pair(secret []byte) (smartcardPairing, error) {
+ err := s.Channel.Pair(secret)
+ if err != nil {
+ return smartcardPairing{}, err
+ }
+
+ return smartcardPairing{
+ PublicKey: s.Wallet.PublicKey,
+ PairingIndex: s.Channel.PairingIndex,
+ PairingKey: s.Channel.PairingKey,
+ Accounts: make(map[common.Address]accounts.DerivationPath),
+ }, nil
+}
+
+// unpair deletes an existing pairing.
+func (s *Session) unpair() error {
+ if !s.verified {
+ return fmt.Errorf("Unpair requires that the PIN be verified")
+ }
+ return s.Channel.Unpair()
+}
+
+// verifyPin unlocks a wallet with the provided pin.
+func (s *Session) verifyPin(pin []byte) error {
+ if _, err := s.Channel.transmitEncrypted(claSCWallet, insVerifyPin, 0, 0, pin); err != nil {
+ return err
+ }
+ s.verified = true
+ return nil
+}
+
+// unblockPin unblocks a wallet with the provided puk and resets the pin to the
+// new one specified.
+func (s *Session) unblockPin(pukpin []byte) error {
+ if _, err := s.Channel.transmitEncrypted(claSCWallet, insUnblockPin, 0, 0, pukpin); err != nil {
+ return err
+ }
+ s.verified = true
+ return nil
+}
+
+// release releases resources associated with the channel.
+func (s *Session) release() error {
+ return s.Wallet.card.Disconnect(pcsc.LeaveCard)
+}
+
+// paired returns true if a valid pairing exists.
+func (s *Session) paired() bool {
+ return s.Channel.PairingKey != nil
+}
+
+// authenticate uses an existing pairing to establish a secure channel.
+func (s *Session) authenticate(pairing smartcardPairing) error {
+ if !bytes.Equal(s.Wallet.PublicKey, pairing.PublicKey) {
+ return fmt.Errorf("Cannot pair using another wallet's pairing; %x != %x", s.Wallet.PublicKey, pairing.PublicKey)
+ }
+ s.Channel.PairingKey = pairing.PairingKey
+ s.Channel.PairingIndex = pairing.PairingIndex
+ return s.Channel.Open()
+}
+
+// walletStatus describes a smartcard wallet's status information.
+type walletStatus struct {
+ PinRetryCount int // Number of remaining PIN retries
+ PukRetryCount int // Number of remaining PUK retries
+ Initialized bool // Whether the card has been initialized with a private key
+}
+
+// walletStatus fetches the wallet's status from the card.
+func (s *Session) walletStatus() (*walletStatus, error) {
+ response, err := s.Channel.transmitEncrypted(claSCWallet, insStatus, statusP1WalletStatus, 0, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ status := new(walletStatus)
+ if _, err := asn1.UnmarshalWithParams(response.Data, status, "tag:3"); err != nil {
+ return nil, err
+ }
+ return status, nil
+}
+
+// derivationPath fetches the wallet's current derivation path from the card.
+func (s *Session) derivationPath() (accounts.DerivationPath, error) {
+ response, err := s.Channel.transmitEncrypted(claSCWallet, insStatus, statusP1Path, 0, nil)
+ if err != nil {
+ return nil, err
+ }
+ buf := bytes.NewReader(response.Data)
+ path := make(accounts.DerivationPath, len(response.Data)/4)
+ return path, binary.Read(buf, binary.BigEndian, &path)
+}
+
+// initializeData contains data needed to initialize the smartcard wallet.
+type initializeData struct {
+ PublicKey []byte `asn1:"tag:0"`
+ PrivateKey []byte `asn1:"tag:1"`
+ ChainCode []byte `asn1:"tag:2"`
+}
+
+// initialize initializes the card with new key data.
+func (s *Session) initialize(seed []byte) error {
+ // Check that the wallet isn't currently initialized,
+ // otherwise the key would be overwritten.
+ status, err := s.Wallet.Status()
+ if err != nil {
+ return err
+ }
+ if status == "Online" {
+ return fmt.Errorf("card is already initialized, cowardly refusing to proceed")
+ }
+
+ s.Wallet.lock.Lock()
+ defer s.Wallet.lock.Unlock()
+
+ // HMAC the seed to produce the private key and chain code
+ mac := hmac.New(sha512.New, []byte("Bitcoin seed"))
+ mac.Write(seed)
+ seed = mac.Sum(nil)
+
+ key, err := crypto.ToECDSA(seed[:32])
+ if err != nil {
+ return err
+ }
+
+ id := initializeData{}
+ id.PublicKey = crypto.FromECDSAPub(&key.PublicKey)
+ id.PrivateKey = seed[:32]
+ id.ChainCode = seed[32:]
+ data, err := asn1.Marshal(id)
+ if err != nil {
+ return err
+ }
+
+ // Nasty hack to force the top-level struct tag to be context-specific
+ data[0] = 0xA1
+
+ _, err = s.Channel.transmitEncrypted(claSCWallet, insLoadKey, 0x02, 0, data)
+ return err
+}
+
+// derive derives a new HD key path on the card.
+func (s *Session) derive(path accounts.DerivationPath) (accounts.Account, error) {
+ startingPoint, path, err := derivationpath.Decode(path.String())
+ if err != nil {
+ return accounts.Account{}, err
+ }
+
+ var p1 uint8
+ switch startingPoint {
+ case derivationpath.StartingPointMaster:
+ p1 = P1DeriveKeyFromMaster
+ case derivationpath.StartingPointParent:
+ p1 = P1DeriveKeyFromParent
+ case derivationpath.StartingPointCurrent:
+ p1 = P1DeriveKeyFromCurrent
+ default:
+ return accounts.Account{}, fmt.Errorf("invalid startingPoint %d", startingPoint)
+ }
+
+ data := new(bytes.Buffer)
+ for _, segment := range path {
+ if err := binary.Write(data, binary.BigEndian, segment); err != nil {
+ return accounts.Account{}, err
+ }
+ }
+
+ _, err = s.Channel.transmitEncrypted(claSCWallet, insDeriveKey, p1, 0, data.Bytes())
+ if err != nil {
+ return accounts.Account{}, err
+ }
+
+ response, err := s.Channel.transmitEncrypted(claSCWallet, insSign, 0, 0, DerivationSignatureHash[:])
+ if err != nil {
+ return accounts.Account{}, err
+ }
+
+ sigdata := new(signatureData)
+ if _, err := asn1.UnmarshalWithParams(response.Data, sigdata, "tag:0"); err != nil {
+ return accounts.Account{}, err
+ }
+ rbytes, sbytes := sigdata.Signature.R.Bytes(), sigdata.Signature.S.Bytes()
+ sig := make([]byte, 65)
+ copy(sig[32-len(rbytes):32], rbytes)
+ copy(sig[64-len(sbytes):64], sbytes)
+
+ pubkey, err := determinePublicKey(sig, sigdata.PublicKey)
+ if err != nil {
+ return accounts.Account{}, err
+ }
+
+ pub, err := crypto.UnmarshalPubkey(pubkey)
+ if err != nil {
+ return accounts.Account{}, err
+ }
+ return s.Wallet.makeAccount(crypto.PubkeyToAddress(*pub), path), nil
+}
+
+// keyExport contains information on an exported keypair.
+type keyExport struct {
+ PublicKey []byte `asn1:"tag:0"`
+ PrivateKey []byte `asn1:"tag:1,optional"`
+}
+
+// publicKey returns the public key for the current derivation path.
+func (s *Session) publicKey() ([]byte, error) {
+ response, err := s.Channel.transmitEncrypted(claSCWallet, insExportKey, exportP1Any, exportP2Pubkey, nil)
+ if err != nil {
+ return nil, err
+ }
+ keys := new(keyExport)
+ if _, err := asn1.UnmarshalWithParams(response.Data, keys, "tag:1"); err != nil {
+ return nil, err
+ }
+ return keys.PublicKey, nil
+}
+
+// signatureData contains information on a signature - the signature itself and
+// the corresponding public key.
+type signatureData struct {
+ PublicKey []byte `asn1:"tag:0"`
+ Signature struct {
+ R *big.Int
+ S *big.Int
+ }
+}
+
+// sign asks the card to sign a message, and returns a valid signature after
+// recovering the v value.
+func (s *Session) sign(path accounts.DerivationPath, hash []byte) ([]byte, error) {
+ startTime := time.Now()
+ _, err := s.derive(path)
+ if err != nil {
+ return nil, err
+ }
+ deriveTime := time.Now()
+
+ response, err := s.Channel.transmitEncrypted(claSCWallet, insSign, signP1PrecomputedHash, signP2OnlyBlock, hash)
+ if err != nil {
+ return nil, err
+ }
+ sigdata := new(signatureData)
+ if _, err := asn1.UnmarshalWithParams(response.Data, sigdata, "tag:0"); err != nil {
+ return nil, err
+ }
+ // Serialize the signature
+ rbytes, sbytes := sigdata.Signature.R.Bytes(), sigdata.Signature.S.Bytes()
+ sig := make([]byte, 65)
+ copy(sig[32-len(rbytes):32], rbytes)
+ copy(sig[64-len(sbytes):64], sbytes)
+
+ // Recover the V value.
+ sig, err = makeRecoverableSignature(hash, sig, sigdata.PublicKey)
+ if err != nil {
+ return nil, err
+ }
+ log.Debug("Signed using smartcard", "deriveTime", deriveTime.Sub(startTime), "signingTime", time.Since(deriveTime))
+
+ return sig, nil
+}
+
+// determinePublicKey uses a signature and the X component of a public key to
+// recover the entire public key.
+func determinePublicKey(sig, pubkeyX []byte) ([]byte, error) {
+ for v := 0; v < 2; v++ {
+ sig[64] = byte(v)
+ pubkey, err := crypto.Ecrecover(DerivationSignatureHash[:], sig)
+ if err == nil {
+ if bytes.Equal(pubkey, pubkeyX) {
+ return pubkey, nil
+ }
+ } else if v == 1 || err != secp256k1.ErrRecoverFailed {
+ return nil, err
+ }
+ }
+ return nil, ErrPubkeyMismatch
+}
+
+// makeRecoverableSignature uses a signature and an expected public key to
+// recover the v value and produce a recoverable signature.
+func makeRecoverableSignature(hash, sig, expectedPubkey []byte) ([]byte, error) {
+ for v := 0; v < 2; v++ {
+ sig[64] = byte(v)
+ pubkey, err := crypto.Ecrecover(hash, sig)
+ if err == nil {
+ if bytes.Equal(pubkey, expectedPubkey) {
+ return sig, nil
+ }
+ } else if v == 1 || err != secp256k1.ErrRecoverFailed {
+ return nil, err
+ }
+ }
+ return nil, ErrPubkeyMismatch
+}
diff --git a/accounts/sort.go b/accounts/sort.go
new file mode 100644
index 000000000..f46762114
--- /dev/null
+++ b/accounts/sort.go
@@ -0,0 +1,31 @@
+// Copyright 2018 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package accounts
+
+// AccountsByURL implements sort.Interface for []Account based on the URL field.
+type AccountsByURL []Account
+
+func (a AccountsByURL) Len() int { return len(a) }
+func (a AccountsByURL) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+func (a AccountsByURL) Less(i, j int) bool { return a[i].URL.Cmp(a[j].URL) < 0 }
+
+// WalletsByURL implements sort.Interface for []Wallet based on the URL field.
+type WalletsByURL []Wallet
+
+func (w WalletsByURL) Len() int { return len(w) }
+func (w WalletsByURL) Swap(i, j int) { w[i], w[j] = w[j], w[i] }
+func (w WalletsByURL) Less(i, j int) bool { return w[i].URL().Cmp(w[j].URL()) < 0 }
diff --git a/accounts/usbwallet/hub.go b/accounts/usbwallet/hub.go
index 640320bc9..a91340b4f 100644
--- a/accounts/usbwallet/hub.go
+++ b/accounts/usbwallet/hub.go
@@ -150,8 +150,10 @@ func (hub *Hub) refreshWallets() {
// Transform the current list of wallets into the new one
hub.stateLock.Lock()
- wallets := make([]accounts.Wallet, 0, len(devices))
- events := []accounts.WalletEvent{}
+ var (
+ wallets = make([]accounts.Wallet, 0, len(devices))
+ events []accounts.WalletEvent
+ )
for _, device := range devices {
url := accounts.URL{Scheme: hub.scheme, Path: device.Path}
diff --git a/accounts/usbwallet/wallet.go b/accounts/usbwallet/wallet.go
index feab505c9..2ddfa30a6 100644
--- a/accounts/usbwallet/wallet.go
+++ b/accounts/usbwallet/wallet.go
@@ -274,9 +274,7 @@ func (w *wallet) close() error {
w.device = nil
w.accounts, w.paths = nil, nil
- w.driver.Close()
-
- return nil
+ return w.driver.Close()
}
// Accounts implements accounts.Wallet, returning the list of accounts pinned to
diff --git a/build/ci-notes.md b/build/ci-notes.md
index ba27cdb1d..13e1fd230 100644
--- a/build/ci-notes.md
+++ b/build/ci-notes.md
@@ -23,18 +23,18 @@ variables `PPA_SIGNING_KEY` and `PPA_SSH_KEY` on Travis.
We want to build go-ethereum with the most recent version of Go, irrespective of the Go
version that is available in the main Ubuntu repository. In order to make this possible,
our PPA depends on the ~gophers/ubuntu/archive PPA. Our source package build-depends on
-golang-1.10, which is co-installable alongside the regular golang package. PPA dependencies
+golang-1.11, which is co-installable alongside the regular golang package. PPA dependencies
can be edited at https://launchpad.net/%7Eethereum/+archive/ubuntu/ethereum/+edit-dependencies
## Building Packages Locally (for testing)
You need to run Ubuntu to do test packaging.
-Add the gophers PPA and install Go 1.10 and Debian packaging tools:
+Add the gophers PPA and install Go 1.11 and Debian packaging tools:
$ sudo apt-add-repository ppa:gophers/ubuntu/archive
$ sudo apt-get update
- $ sudo apt-get install build-essential golang-1.10 devscripts debhelper python-bzrlib python-paramiko
+ $ sudo apt-get install build-essential golang-1.11 devscripts debhelper python-bzrlib python-paramiko
Create the source packages:
diff --git a/build/ci.go b/build/ci.go
index 4ee76ced5..f5553fd30 100644
--- a/build/ci.go
+++ b/build/ci.go
@@ -80,6 +80,7 @@ var (
executablePath("puppeth"),
executablePath("rlpdump"),
executablePath("wnode"),
+ executablePath("clef"),
}
// Files that end up in the swarm*.zip archive.
@@ -118,6 +119,10 @@ var (
BinaryName: "wnode",
Description: "Ethereum Whisper diagnostic tool",
},
+ {
+ BinaryName: "clef",
+ Description: "Ethereum account management tool.",
+ },
}
// A debian package is created for all executables listed here.
@@ -156,7 +161,7 @@ var (
// Note: yakkety is unsupported because it was officially deprecated on lanchpad.
// Note: zesty is unsupported because it was officially deprecated on lanchpad.
// Note: artful is unsupported because it was officially deprecated on lanchpad.
- debDistros = []string{"trusty", "xenial", "bionic", "cosmic"}
+ debDistros = []string{"trusty", "xenial", "bionic", "cosmic", "disco"}
)
var GOBIN, _ = filepath.Abs(filepath.Join("build", "bin"))
@@ -800,12 +805,8 @@ func doAndroidArchive(cmdline []string) {
if os.Getenv("ANDROID_HOME") == "" {
log.Fatal("Please ensure ANDROID_HOME points to your Android SDK")
}
- if os.Getenv("ANDROID_NDK") == "" {
- log.Fatal("Please ensure ANDROID_NDK points to your Android NDK")
- }
// Build the Android archive and Maven resources
build.MustRun(goTool("get", "golang.org/x/mobile/cmd/gomobile", "golang.org/x/mobile/cmd/gobind"))
- build.MustRun(gomobileTool("init", "--ndk", os.Getenv("ANDROID_NDK")))
build.MustRun(gomobileTool("bind", "-ldflags", "-s -w", "--target", "android", "--javapkg", "org.ethereum", "-v", "github.com/ethereum/go-ethereum/mobile"))
if *local {
diff --git a/build/deb/ethereum-swarm/deb.control b/build/deb/ethereum-swarm/deb.control
index 8cd325bf5..b0ced141b 100644
--- a/build/deb/ethereum-swarm/deb.control
+++ b/build/deb/ethereum-swarm/deb.control
@@ -2,7 +2,7 @@ Source: {{.Name}}
Section: science
Priority: extra
Maintainer: {{.Author}}
-Build-Depends: debhelper (>= 8.0.0), golang-1.10
+Build-Depends: debhelper (>= 8.0.0), golang-1.11
Standards-Version: 3.9.5
Homepage: https://ethereum.org
Vcs-Git: git://github.com/ethereum/go-ethereum.git
diff --git a/build/deb/ethereum-swarm/deb.rules b/build/deb/ethereum-swarm/deb.rules
index 7f286569e..5280e0e55 100644
--- a/build/deb/ethereum-swarm/deb.rules
+++ b/build/deb/ethereum-swarm/deb.rules
@@ -4,8 +4,11 @@
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
+# Launchpad rejects Go's access to $HOME/.cache, use custom folder
+export GOCACHE=/tmp/go-build
+
override_dh_auto_build:
- build/env.sh /usr/lib/go-1.10/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}}
+ build/env.sh /usr/lib/go-1.11/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}}
override_dh_auto_test:
diff --git a/build/deb/ethereum/deb.control b/build/deb/ethereum/deb.control
index defb106fe..018067a19 100644
--- a/build/deb/ethereum/deb.control
+++ b/build/deb/ethereum/deb.control
@@ -2,7 +2,7 @@ Source: {{.Name}}
Section: science
Priority: extra
Maintainer: {{.Author}}
-Build-Depends: debhelper (>= 8.0.0), golang-1.10
+Build-Depends: debhelper (>= 8.0.0), golang-1.11
Standards-Version: 3.9.5
Homepage: https://ethereum.org
Vcs-Git: git://github.com/ethereum/go-ethereum.git
diff --git a/build/deb/ethereum/deb.rules b/build/deb/ethereum/deb.rules
index 7f286569e..5280e0e55 100644
--- a/build/deb/ethereum/deb.rules
+++ b/build/deb/ethereum/deb.rules
@@ -4,8 +4,11 @@
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
+# Launchpad rejects Go's access to $HOME/.cache, use custom folder
+export GOCACHE=/tmp/go-build
+
override_dh_auto_build:
- build/env.sh /usr/lib/go-1.10/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}}
+ build/env.sh /usr/lib/go-1.11/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}}
override_dh_auto_test:
diff --git a/build/deploy.sh b/build/deploy.sh
deleted file mode 100755
index 04d0dbd90..000000000
--- a/build/deploy.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-
-GETH_ARCHIVE_NAME="multi-geth-$TRAVIS_OS_NAME"
-zip -j "$GETH_ARCHIVE_NAME.zip" build/bin/geth
-
-shasum -a 256 $GETH_ARCHIVE_NAME.zip
-shasum -a 256 $GETH_ARCHIVE_NAME.zip > $GETH_ARCHIVE_NAME.zip.sha256
-
-ALLTOOLS_ARCHIVE_NAME="multi-geth-alltools-$TRAVIS_OS_NAME"
-zip -j "$ALLTOOLS_ARCHIVE_NAME.zip" build/bin/*
-
-shasum -a 256 $ALLTOOLS_ARCHIVE_NAME.zip
-shasum -a 256 $ALLTOOLS_ARCHIVE_NAME.zip > $ALLTOOLS_ARCHIVE_NAME.zip.sha256
-
diff --git a/build/travis_keepalive.sh b/build/travis_keepalive.sh
new file mode 100755
index 000000000..77cc623ea
--- /dev/null
+++ b/build/travis_keepalive.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+
+# travis_keepalive runs the given command and preserves its return value,
+# while it forks a child process what periodically produces a log line,
+# so that Travis won't abort the build after 10 minutes.
+
+# Why?
+# `t.Log()` in Go holds the buffer until the test does not pass or fail,
+# and `-race` can increase the execution time by 2-20x.
+
+set -euo pipefail
+
+readonly KEEPALIVE_INTERVAL=300 # seconds => 5m
+
+main() {
+ keepalive
+ $@
+}
+
+# Keepalive produces a log line in each KEEPALIVE_INTERVAL.
+keepalive() {
+ local child_pid
+ # Note: We fork here!
+ repeat "keepalive" &
+ child_pid=$!
+ ensureChildOnEXIT "${child_pid}"
+}
+
+repeat() {
+ local this="$1"
+ while true; do
+ echo "${this}"
+ sleep "${KEEPALIVE_INTERVAL}"
+ done
+}
+
+# Ensures that the child gets killed on normal program exit.
+ensureChildOnEXIT() {
+ # Note: SIGINT and SIGTERM are forwarded to the child process by Bash
+ # automatically, so we don't have to deal with signals.
+
+ local child_pid="$1"
+ trap "kill ${child_pid}" EXIT
+}
+
+main "$@"
diff --git a/cmd/abigen/main.go b/cmd/abigen/main.go
index d19164b18..b6ec04ce1 100644
--- a/cmd/abigen/main.go
+++ b/cmd/abigen/main.go
@@ -1,4 +1,4 @@
-// Copyright 2016 The go-ethereum Authors
+// Copyright 2019 The go-ethereum Authors
// This file is part of go-ethereum.
//
// go-ethereum is free software: you can redistribute it and/or modify
@@ -37,6 +37,9 @@ var (
solcFlag = flag.String("solc", "solc", "Solidity compiler to use if source builds are requested")
excFlag = flag.String("exc", "", "Comma separated types to exclude from binding")
+ vyFlag = flag.String("vy", "", "Path to the Ethereum contract Vyper source to build and bind")
+ vyperFlag = flag.String("vyper", "vyper", "Vyper compiler to use if source builds are requested")
+
pkgFlag = flag.String("pkg", "", "Package name to generate the binding into")
outFlag = flag.String("out", "", "Output file for the generated binding (default = stdout)")
langFlag = flag.String("lang", "go", "Destination language for the bindings (go, java, objc)")
@@ -46,11 +49,14 @@ func main() {
// Parse and ensure all needed inputs are specified
flag.Parse()
- if *abiFlag == "" && *solFlag == "" {
- fmt.Printf("No contract ABI (--abi) or Solidity source (--sol) specified\n")
+ if *abiFlag == "" && *solFlag == "" && *vyFlag == "" {
+ fmt.Printf("No contract ABI (--abi), Solidity source (--sol), or Vyper source (--vy) specified\n")
+ os.Exit(-1)
+ } else if (*abiFlag != "" || *binFlag != "" || *typFlag != "") && (*solFlag != "" || *vyFlag != "") {
+ fmt.Printf("Contract ABI (--abi), bytecode (--bin) and type (--type) flags are mutually exclusive with the Solidity (--sol) and Vyper (--vy) flags\n")
os.Exit(-1)
- } else if (*abiFlag != "" || *binFlag != "" || *typFlag != "") && *solFlag != "" {
- fmt.Printf("Contract ABI (--abi), bytecode (--bin) and type (--type) flags are mutually exclusive with the Solidity source (--sol) flag\n")
+ } else if *solFlag != "" && *vyFlag != "" {
+ fmt.Printf("Solidity (--sol) and Vyper (--vy) flags are mutually exclusive\n")
os.Exit(-1)
}
if *pkgFlag == "" {
@@ -75,7 +81,7 @@ func main() {
bins []string
types []string
)
- if *solFlag != "" || (*abiFlag == "-" && *pkgFlag == "") {
+ if *solFlag != "" || *vyFlag != "" || (*abiFlag == "-" && *pkgFlag == "") {
// Generate the list of types to exclude from binding
exclude := make(map[string]bool)
for _, kind := range strings.Split(*excFlag, ",") {
@@ -84,13 +90,21 @@ func main() {
var contracts map[string]*compiler.Contract
var err error
- if *solFlag != "" {
+
+ switch {
+ case *solFlag != "":
contracts, err = compiler.CompileSolidity(*solcFlag, *solFlag)
if err != nil {
fmt.Printf("Failed to build Solidity contract: %v\n", err)
os.Exit(-1)
}
- } else {
+ case *vyFlag != "":
+ contracts, err = compiler.CompileVyper(*vyperFlag, *vyFlag)
+ if err != nil {
+ fmt.Printf("Failed to build Vyper contract: %v\n", err)
+ os.Exit(-1)
+ }
+ default:
contracts, err = contractsFromStdin()
if err != nil {
fmt.Printf("Failed to read input ABIs from STDIN: %v\n", err)
@@ -102,7 +116,11 @@ func main() {
if exclude[strings.ToLower(name)] {
continue
}
- abi, _ := json.Marshal(contract.Info.AbiDefinition) // Flatten the compiler parse
+ abi, err := json.Marshal(contract.Info.AbiDefinition) // Flatten the compiler parse
+ if err != nil {
+ fmt.Printf("Failed to parse ABIs from compiler output: %v\n", err)
+ os.Exit(-1)
+ }
abis = append(abis, string(abi))
bins = append(bins, contract.Code)
@@ -124,7 +142,7 @@ func main() {
}
abis = append(abis, string(abi))
- bin := []byte{}
+ var bin []byte
if *binFlag != "" {
if bin, err = ioutil.ReadFile(*binFlag); err != nil {
fmt.Printf("Failed to read input bytecode: %v\n", err)
diff --git a/cmd/clef/4byte.json b/cmd/clef/4byte.json
deleted file mode 100644
index 5603d5931..000000000
--- a/cmd/clef/4byte.json
+++ /dev/null
@@ -1 +0,0 @@
-{"0x22ec1244": "shaBid(bytes32,address,uint256,bytes32)", "0xcae9ca51": "approveAndCall(address,uint256,bytes)", "0x4fb2e45d": "transferOwner(address)", "0x7741b4ec": "RandomNumberFromSeed(uint256)", "0x267127ec": "getTokenSettings()", "0xb7213bd4": "readLog(uint256)", "0x3018205f": "getController()", "0xc8edf65e": "GetAndReduceFeesByFraction(uint256)", "0xeec2b628": "beforeExecute(address)", "0xfc0c546a": "token()", "0x40a3d246": "toggle()", "0x70983e91": "startBoardProposal(uint256,address)", "0x6b5caec4": "setBot(address)", "0x78524b2e": "halveMinQuorum()", "0x2c60a055": "MapTest()", "0xc2fb8f36": "TinyHuman(address,address,address)", "0x6822abae": "getMinimumCallCost(uint256)", "0x6f9fb98a": "getContractBalance()", "0x5c17f9f4": "approve(address,uint256,bytes)", "0x504ac982": "transfer(string,string)", "0x06e53f47": "whichChainIsThis()", "0xf359671c": "withdrawWithReference(address,uint256,string)", "0xf97d0591": "parseTimestamp(uint256)", "0xd3c0715b": "vote(uint256,bool,string)", "0x6b069710": "scheduleCall(address,bytes,uint256,uint256,uint8)", "0x37ae43a3": "BetOnHashV81()", "0xab519020": "calcShare(uint256,uint256)", "0x6572ae13": "calculateWinner(uint256,uint256)", "0x6aaba012": "ErrorGenerator()", "0xfe05e8b1": "assertFact(uint256,string)", "0x6e940a29": "changeHost(address)", "0x669ee827": "RegisterDevice()", "0x6f4dd69c": "testSetBalanceUpdatesSupply()", "0x4401a6e4": "safeSend(address)", "0x27dc297e": "__callback(bytes32,string)", "0xe4dedc7f": "DeleteContract()", "0x7fef036e": "totalEntries()", "0x64325ddb": "currentClaimPrice()", "0x2fc0aad3": "isNumericString(string)", "0xbc45d789": "setConfigUint(int256,bytes32,uint256)", "0xee95feaf": "isSeller(address)", "0x358d5dc2": "getIsCashed(uint256,uint256)", "0x1397fdbd": "getShares(address,bytes,int256[])", "0x2d8c1c35": "level_up()", "0x24600fc3": "withdrawFunds()", "0x05f8b6f5": "_rewireIdentities(bytes32[],uint256,uint256,uint32)", "0x1840f0ca": "countVotes(uint256)", "0xd44aadf7": "initROS()", "0xca1d209d": "fund(uint256)", "0x5fa513d5": "findPtr(uint256,uint256,uint256,uint256)", "0x3c314a91": "playerGetPendingTxByAddress(address)", "0xd5582205": "getCertifiedStudentAtIndex(uint256)", "0xe45ebe93": "checkVoteStatus()", "0xcd9380d5": "testSetBalanceSetsSupplyCumulatively()", "0x637e86eb": "totBOTs()", "0x5bb47808": "setFactory(address)", "0x674cc1f5": "getMarketHashes(bytes32[])", "0x648bf774": "recover(address,address)", "0x0221038a": "payOut(address,uint256)", "0x4016535a": "parseBlock(bytes,uint256)", "0xa3908e1b": "convert(uint256)", "0xd9e7ee1c": "new_game(uint256,uint256)", "0x929e626e": "getShareDistribution(bytes32)", "0xa20495d3": "Managed()", "0xd409ddda": "EtherizationUtils()", "0xcb2b9031": "addressToBytes(address,address)", "0xfff3c457": "readMessages(uint256)", "0x043753ba": "makeDecision(uint256,bool)", "0x85b4bb53": "getSettings()", "0x60726abb": "copy()", "0xe50d0473": "SetRank(uint8,address,uint16)", "0x54ae8492": "CustodialForward()", "0xd6d02c51": "whois(string)", "0xcb712535": "_transferFrom(address,address,uint256)", "0xb152f19e": "getFirstSchedulableBlock()", "0x9334ab61": "Infos()", "0x88a49164": "testErrorUnauthorizedTransfer()", "0x17db59a4": "dEthereumlotteryNet(address,address,address)", "0xf85aefba": "testBitsSetFailIndexOOB()", "0xae99847b": "daylimit(uint256)", "0xd93e7573": "disown(bytes32)", "0xa5468081": "Pyramid(address)", "0x00e7d289": "registerListening(address)", "0x57ee24af": "getNum(bytes32,uint256)", "0xdaea85c5": "approve(address)", "0x36ffa905": "getMyProposals()", "0x7143059f": "getParticipant(address)", "0x55ff440a": "castStringToUInt(string)", "0x6a4a6b6e": "_myAddressHelper()", "0xb67fabdf": "scheduleTransaction(address,uint256,uint256,bytes)", "0xbcca1fd3": "changeVotingRules(uint256,uint256,int256)", "0x1d3390a1": "carefulSendWithFixedGas(address,uint256,uint256)", "0x45104b16": "EXECUTION_GAS_OVERHEAD()", "0xa26759cb": "addFunds()", "0x232523e8": "forceDivestOfAllInvestors()", "0x7e904a48": "getNumContents(uint256)", "0xb69c0896": "BaseScheduler(address,address,uint256)", "0xc6ed8e1b": "getApprovedProxys()", "0x4d1f8c31": "owner(uint64)", "0x17c65aa7": "getMaxLossAfterTrade(address,uint256,int256,int256)", "0x2c02d622": "precalculate()", "0xa035b1fe": "price()", "0x43b0e8df": "set(uint256,uint256,uint256)", "0x9b5fde7d": "payOut(uint256,string)", "0x89fcd099": "getApproval(address,address)", "0x4c0eceb5": "plusOnePonzi()", "0x880cdc31": "updateOwner(address)", "0xdab80d6f": "addSponsor(address)", "0x0fcda174": "getAccountTokenBalance(address,address)", "0xa55cab95": "getName(uint8,uint8)", "0x934db458": "Big()", "0xeb782d8c": "ContentSeries(address)", "0xdbfef710": "getDefaultRequiredGas()", "0x4f09eba7": "proxyApprove(address,uint256,bytes32)", "0xf4c5ab7c": "validateCallGas(uint256,uint256)", "0x376fe102": "userId(address)", "0x922dd59a": "icapTransfer(bytes,address,bytes,uint256)", "0x7318b453": "setVotetUntil(uint8)", "0xb8c86aa6": "getArraySettingResult()", "0x37bdc99b": "release(uint256)", "0x7cbcc254": "__reset__()", "0x37664643": "retractLatestRevision(bytes32)", "0x4b031d0f": "shortSellShares(bytes,uint8,uint256,uint256)", "0xad8d5f48": "exec(address,bytes,uint256)", "0x2f95b833": "requiredStackDepth()", "0xe3848e5b": "thing(string,string,string)", "0xaa272d4b": "getNodeIndexId(bytes)", "0xd7f746ce": "tickingBomb()", "0x3b84edbd": "setRNG(address)", "0x1fb2f2a0": "testUpdateLatestRevision()", "0xb7fba4d3": "getProxy(address)", "0x4b8e1ba8": "isMinter(int256,address)", "0xba4c206e": "removeCertificationDocumentInternal(address,bytes32)", "0x884b5dc2": "fill(uint256[])", "0x88017e05": "setContribution(uint256)", "0x1ff517ff": "totalDebt(address)", "0xd0315658": "getShareDistributionWithTimestamp(bytes)", "0x7d03f5f3": "newGame()", "0xb7538f3e": "ChangeClient(address)", "0xbf4d89b5": "parseInt(string,uint256)", "0x7b55c8b5": "scheduleCall(address,bytes4,bytes,uint8,uint256[4])", "0x350d141e": "getWasApprovedBeforeDeadline()", "0x27960c5f": "validateEndowment(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0xb774d3d7": "BankOwner_GetDonationsBalance()", "0x267b6922": "entries(bytes32)", "0x08b7c13b": "getExists(bytes20)", "0x7e7a2fbf": "contribute_toTheGame()", "0x5b86914d": "bet_value()", "0x0e1087c3": "getMarketMakerFunds()", "0xf7149220": "RNG()", "0x345006b6": "getGenerationForCall(address)", "0xc4b14e0b": "getSignature(bytes32)", "0x419945f8": "ExpiringMarket(uint256)", "0x41868769": "CallAborted(address,bytes)", "0x29092d0e": "remove(address)", "0x746c9171": "m_required()", "0x5020dcf4": "convertToEach(uint256,string,uint256)", "0xa06db7dc": "gracePeriod()", "0xbf8fc670": "sendToAggregation(uint256)", "0xf14fcbc8": "commit(bytes32)", "0xa538d287": "getMinMax()", "0xcae523c1": "testOwnedTryAuthUnauthorized()", "0x04d10f1c": "isValidChainyJson(string)", "0x9ba5b4e9": "getEventHashes(bytes32[])", "0xfedfd535": "Config()", "0x42ce0f30": "testThrowUpdateLatestRevisionNotOwner()", "0x31be6985": "testBitXorSuccess()", "0x173cb7de": "getNumReleasesForNameHash(bytes32)", "0xd90a88cd": "getContentReplies(uint256,uint256)", "0x92eefe9b": "setController(address)", "0x052b81c7": "releaseBadges()", "0xb2855b4f": "setFeeAddr(address)", "0x19a9c2f1": "generateId(string)", "0xfa9acb05": "addressInArray(address,address)", "0x3da5c3ce": "puzzle(address,bytes32)", "0x7a427d98": "forceReturn()", "0x70e71ea3": "etherandomSeedWithGasLimit(uint256)", "0xd7a58658": "changeHouseedge(uint8)", "0x72b75585": "getOriginalClient()", "0xf802075f": "requiredEndowment()", "0x7997b997": "doMelt(uint256,uint256)", "0x6d5433e6": "max(uint256,uint256)", "0xb651cbaf": "add_level(address,bytes)", "0xb4d6d4c7": "getPackageData(bytes32)", "0x90e3c278": "getShares(uint256[128])", "0x179b73da": "killBoardProposal(uint256,address)", "0xc944a38e": "CharlyLifeLog(string,int256)", "0xe1c66292": "Create(uint32,address)", "0x69c8b344": "ownedToken(address)", "0xabcf1328": "InterestBank()", "0x532e7e6a": "calcEarningsSelling(bytes,uint256,uint256[],uint8,uint256)", "0x43d24a5e": "addUpdater(address)", "0xd1feca67": "addSpendingRequest(address)", "0x2d34ba79": "setup(address,address)", "0xcb14d93b": "getHash(bytes,address,uint256)", "0x309424fe": "get_all_names()", "0x96c52fc3": "____forward(address,uint256,uint256,bytes)", "0xde39acea": "get32(bytes,uint256)", "0xf3dd3d8a": "newCurrency(string,string,uint8)", "0x2432eb23": "testThrowRetractLatestRevisionNotUpdatable()", "0x7fcf3a2f": "throwFooBar()", "0xabe9f569": "oraclize_getPrice(string,uint256)", "0x41ee903e": "clear(uint256,uint256)", "0xd249a52e": "update(bytes,uint256[],uint256[])", "0xc3d014d6": "setContent(bytes32,bytes32)", "0x3ac5cb73": "GeometricPonzi()", "0x4a1aa767": "claim_victory(uint256,uint8,uint8,uint8)", "0xce592586": "setThresold(uint256,uint256)", "0x63deb2c5": "changeMemberAddress(address)", "0x2e6e504a": "trusteeWithdraw()", "0xcfed9199": "timePassed(uint256)", "0xb782fc9b": "getFirstActiveDuel2()", "0x35b28153": "addAuthorization(address)", "0x46f7a883": "BuyTicket(uint8,uint8,uint8)", "0x83c51a38": "thesimplegame()", "0xfa28ba0d": "validateReleaseLockfileURI(string)", "0xa7b2d4cb": "remove(int256,address)", "0x010731c0": "sendCryptedHand(bytes32)", "0xe9e99d81": "getChannelFeed(address,uint256,uint256,uint256)", "0x4e30a66c": "safeToAdd(uint256,uint256)", "0x2c4e591b": "totalGames()", "0xa3221c8e": "step8()", "0x783ce458": "expmod(uint256,uint256,uint256)", "0xe417291b": "undelegateDAOTokens(uint256)", "0x8e5d97a2": "releasePendingTransfer(uint256)", "0xbc5ff5e1": "oraclize_query(string,string[4],uint256)", "0x38f77d69": "getDistributeProfitsInfo()", "0xbb510a77": "createChannel(address,uint256)", "0x650955d4": "HashToken()", "0xa8484938": "doApprove(address,uint256)", "0x64ed31fe": "authVotes(address)", "0xf7ae9421": "checkInvestorBalance(address)", "0xba904eed": "removeRegistrar(address)", "0xdce4a447": "at(address)", "0xdb4cacec": "Other()", "0x3647b87a": "buildFactory()", "0xa51aea2d": "changeMaxMultiplier(uint256)", "0x4974bc27": "download()", "0xf8a8fd6d": "test()", "0xd8c90762": "addTrustedIssuer(address,string)", "0xdf6c13c3": "getMinFunding()", "0x867904b4": "issue(address,uint256)", "0x1531c267": "fipsRegisterMulti(uint256,address,bytes)", "0x40a49a96": "searchSmallestInvestor()", "0x61bffe01": "addIdentities(bytes32[],bytes32[])", "0xf77a0923": "BitcoinProcessor(address)", "0xd02528e6": "GetGameIndexesToProcess()", "0x9f927be7": "getNextCall(uint256)", "0xd8162db7": "lockedUntilBlock()", "0x36dfe260": "payOneTimeReward()", "0xc5b1a53c": "deposit(bytes16[],uint64)", "0xc2b6b58c": "isClosed()", "0xc88cc6ac": "getCertification(address)", "0x77ac3da5": "oraclize_query(uint256,string,string[1],uint256)", "0x70ab8ba8": "creditUpdate()", "0xd3ea3322": "testBuildTokenSystemCost()", "0x72388610": "paybackAll()", "0xca6d56dc": "addMember(address)", "0x0994a0a0": "DSTokenTest()", "0xe53e04a5": "refillGas()", "0xc1d5e84f": "addNewUser(address)", "0x89ed0b30": "setOraclizeGas(uint32)", "0x02ba8742": "sendCoins(address,uint256)", "0xb0de1cb7": "publish(uint64,bytes,uint64)", "0x0e13b9af": "getValue(uint8,uint8)", "0xb3dfcdc3": "Contribution(uint256)", "0xa9b35240": "packageExists(bytes32)", "0xd1d3bb92": "testSetPkg()", "0x97297467": "checkAndVerify(bytes)", "0xe31bfa00": "next_id()", "0x9948e493": "calcMarketFee(bytes,uint256)", "0xd148288f": "setHoldingPeriod(uint256)", "0xc032dc30": "execute(uint256,address)", "0xdad99989": "burnCoins(address)", "0xb1999937": "leapYearsBefore(uint256)", "0xa6cbcdd5": "numSignatures(bytes4)", "0xaca66aec": "DVIP()", "0x20bf0c52": "Derived(uint256)", "0x693ec85e": "get(string)", "0x0411bca8": "getChallengeAnswerResult(uint256)", "0x61584936": "sealedBids(bytes32)", "0x2f1927cb": "prepareRoll(uint256,uint256,uint256)", "0xeaa1f9fe": "reqisterListening(address)", "0xb623f5e5": "checkSetCosignerAddress(address)", "0xa88c5ef7": "NextPayout()", "0x66ad484c": "newfirst_player(address)", "0xb4022950": "collectFeesInEther(uint256)", "0xbff0fbb8": "calculateMeat(uint256)", "0xd62b255b": "setOwner(address,string)", "0x2fd6d40b": "getBetValueByGamble(uint8)", "0x3b0506f7": "getVoteByAddress(address,uint256)", "0xbddd3a6b": "step7()", "0x67fbd289": "destroyTokens(uint256)", "0x9844347b": "createCertificate(bytes,bytes,uint256,bytes)", "0x5e68ac2c": "Kingdom(string,address,address,address,uint256,uint256,uint256,uint256,uint256)", "0x8ba9f354": "testClearBitSuccess()", "0x48027610": "transferPaidOut(address,address,uint256)", "0x912de8de": "fixBalance()", "0x04509918": "scheduleCall(address)", "0x7cf0ffcb": "forceDivestAll()", "0x3b3b57de": "addr(bytes32)", "0xeb7c6f72": "step6()", "0xfe6f0d82": "testConstructorEvent()", "0x55b62dcf": "getThresold(uint256)", "0xfbae5e7d": "Investors(uint256)", "0x29e206bd": "forceDivestAll(bool)", "0x6a226a49": "addMessage(string)", "0x8e2a6470": "allocateShares(address,uint256)", "0xe6e7237f": "claim_time_victory(uint256)", "0x17a601b5": "MAX_STACK_DEPTH_REQUIREMENT()", "0x87fd0421": "TheEthereumLottery()", "0xc17e6817": "sendSafe(address,uint256)", "0xa5dfee67": "testThrowsCreateNewRevisionNotUpdatable()", "0xb35893f3": "setExporter()", "0x1ceea715": "GetMyInvestFee()", "0xb78bd4a5": "breakCookie(string)", "0x05215b2f": "createStandardToken(uint256)", "0x2632bf20": "unblockMe()", "0x5292af1f": "sendBalance(address)", "0xc2e9fab3": "SubUser()", "0x6493d7fc": "CircuitBreaker(address,address,uint256,uint256)", "0x4f896d4f": "resolve(uint256)", "0x16870257": "getTileDescription(uint8,uint8)", "0x3ef87414": "getRevisionCount(bytes20)", "0x747586b8": "setInt(int256)", "0x5714f6a1": "getTotalAvailableRelays()", "0x99154b49": "ARK()", "0x1efb17ee": "changeHouseAddress(address)", "0x354d7e40": "Payout()", "0x2da0d1ea": "etherSold()", "0xea46193e": "getEtherBalance()", "0x11fe773d": "memcpy(uint256,uint256,uint256)", "0x1e701780": "MICRODAO(address,uint256,uint256,uint256,address)", "0x1c31f710": "setBeneficiary(address)", "0x0a4caed0": "getChannelByRank(address,uint256)", "0xf3125a1f": "deposit(address,uint256,bytes,uint256)", "0x00e46700": "setMinimumPassPercentage(uint8)", "0x92d282c1": "Send()", "0x89d59ee5": "createPersonalDepositAddress()", "0xbe1c766b": "getLength()", "0x70a08231": "balanceOf(address)", "0xae0a6b28": "signature(string,bytes32)", "0xb3485dca": "UpdatePrice(uint8,uint32)", "0xf8ec4bf2": "setAllowTransactions(bool)", "0x53d97e65": "setPrizes(uint32[])", "0xd1b1a22b": "set(string,uint256[],uint256[],uint256[],bool[],uint256[])", "0x96286cc9": "isTokenOwner(address)", "0x154af6b1": "sendShares(uint256,uint8,uint256,address)", "0xbe2430fe": "sendValues()", "0x57a373a1": "uintInArray(uint256,uint256,int256,uint256[],uint256)", "0x8fd28bcf": "testFailAuthorityAuth()", "0x89ef40e7": "numberOfHealthyGenerations()", "0x23e9c216": "setBounty(address,string,uint256)", "0x71dd99fe": "BigRisk()", "0x1e9fcc77": "activateAllowance(address,address)", "0x561e91a1": "makeBet()", "0x32d2fb9f": "getRefRemainingTime(uint256)", "0x992c870d": "transferName(bytes,address)", "0x6b3fdc5a": "oraclize_setNetwork(uint8)", "0x2ea459b8": "claimThrone(bytes)", "0x33a99e04": "selectWinner()", "0x3b49a77b": "hasConfirmed(bytes,address)", "0xa352f1a8": "calcSHA3(bytes)", "0x4bb4b260": "cashAllOut()", "0xb89a73cb": "isShareholder(address)", "0xba5a2d33": "exitPool(address)", "0xddd41ef6": "transferDirector(address)", "0xa06cab79": "Registrar(address,bytes32)", "0x871113c3": "oraclize_query(string,string[1],uint256)", "0x1f0f711f": "discontinue()", "0x632f0ba6": "descriptionHashes(bytes)", "0x980e8c81": "FutureBlockCall(address,uint256,uint8,address,bytes,uint256,uint256,uint256)", "0x4ae8c55f": "getWwLength()", "0x82fc49b8": "setCosignerAddress(address)", "0xc4bd8ebc": "num_monsters()", "0x0381cb3b": "setRowcol(uint256,uint256[2])", "0x124eaee6": "Identity()", "0x3f4be889": "callContractAddress()", "0xef3a6031": "testBaseToken()", "0x954ab4b2": "say()", "0x1b855044": "getHash(uint256,uint256)", "0xd9d73887": "Diana()", "0x5103a5a3": "certify(address,bytes32)", "0x51560da9": "topDogInfo()", "0xf3ee6305": "removeCertificationDocument(address,bytes32)", "0x049ae734": "scheduleCall(address,bytes4,uint256,uint256,uint8)", "0xd8a8e03a": "move(uint256,address)", "0xc3c5a547": "isRegistered(address)", "0x06005754": "nameRegAddress()", "0xbe592488": "validateName(bytes)", "0x0eecae21": "draw()", "0xac3e7d24": "addChainyData(string)", "0xfd83f3e3": "QueueUserMayBeDeliveryDroneCotnrol()", "0x7772a380": "isInGeneration(address,uint256)", "0xeb1ff845": "changeId(uint256,uint256,uint256)", "0x9cc9299e": "killSwap()", "0x1e2ca0f3": "updateLeftLottery(address)", "0x998446a8": "acceptRequest(uint256,bytes)", "0x8e1ffb19": "testThrowsRetractLatestRevisionEnforceRevisions()", "0x9935935f": "setResolveHandler(bytes,address)", "0xcd4b6914": "getRandom(uint256)", "0xc08dd1dc": "IOU(string,string,uint8)", "0xbe4054b9": "commitReading(address,uint256,uint256,string)", "0xbc21ce9d": "Aggregation()", "0x6e173a7f": "storeBlockHeader(bytes,bytes)", "0x114d69b2": "setCRLaddr(address)", "0x3fa4f245": "value()", "0x69573648": "remove(bytes,bytes)", "0x7fee4ecb": "GAS_PER_DEPTH()", "0x591c515f": "append(string,string)", "0x727b1cd6": "next_draw(bytes32,uint256,uint256,uint256,uint256,uint256)", "0xc60ce271": "findNextMinute(uint256,bytes)", "0xd337616e": "resetLottery()", "0xdacaeb07": "pledge(bool,uint256)", "0xb29c2493": "token(uint256,string,uint8,string)", "0x61047ff4": "fibonacci(uint256)", "0x8f367001": "numTokensAbleToPurchase()", "0x12cc08f2": "getPackageReleaseHashes(string,uint256,uint256)", "0x67a59d91": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8)", "0xe6c3b4ab": "testBalanceAuth()", "0xd526b9bd": "_allow()", "0x29de91db": "setMsg(address,uint256)", "0xd1cf113e": "multiAccessSetRecipient(address)", "0xc2412676": "Token()", "0x391f2e96": "InvestCancel()", "0xc0ae6a3a": "ultimateOutcomes(bytes)", "0x202d6eaf": "addInvestorsValue(uint256)", "0x30b9af98": "withdrawFunding()", "0xe80bd3e5": "addCertificationDocumentToSelf(bytes32)", "0xf4e36afd": "findThroneByNameHash(uint256)", "0x30677b83": "multiplierFactor()", "0x590528a9": "sellShares(uint256,uint8,uint256,uint256)", "0x01cceb38": "setExpiry(uint256)", "0x779beca0": "getNumOfSalesWithSameId(bytes)", "0xac940823": "betOnLowHigh(bool)", "0x06961560": "DAO(address,uint256,uint256,uint256,address)", "0xd42bf301": "doTriggerTryAuth()", "0xfa566ddd": "doAllowance(address,address)", "0x6677febe": "get_all_accepted()", "0xaa67c919": "depositFor(address)", "0xf28386bf": "Nexium()", "0x77e4fb04": "testFailNotEnoughValue()", "0x12b58349": "getTotalBalance()", "0xc0d2834b": "DataSource()", "0x3e82055a": "addSignature(uint256,bytes16,bytes)", "0xcff2fa42": "_returnFee(address,uint256)", "0xa056469a": "extractFeeLength()", "0xc98031be": "hintURL(int256,bytes32,string)", "0x6ebbe863": "updatePublishContract(address)", "0x08216c0f": "createHumanStandardToken(uint256,string,uint8,string)", "0xc36af460": "getLatest()", "0xdb5b4183": "oracleOutcomes(bytes,address)", "0x0b5ab3d5": "destroyDeed()", "0xe1c7392a": "init()", "0x4ca1fad8": "addRequest(uint256)", "0x305b73d9": "configure(address,address,uint256,uint8,bytes32,bytes32)", "0x9077dcfd": "submitCoding(string,uint256)", "0x38fff2d0": "getPoolId()", "0x07bc6fad": "withdraw(address,uint256,bytes32,uint256)", "0xfbf58b3e": "transfer(string,address)", "0x1d8b70da": "order_received(string)", "0x0b3ed536": "claimDonations(uint256)", "0x6f374a12": "setBool()", "0x0ca35682": "recover(uint256)", "0x3ae7cdfa": "fipsLegacyRegister(bytes20[],address)", "0xe6c1beb4": "prepend(address)", "0x776d62f6": "costs()", "0xe4690a0b": "popRequest()", "0x74eb9b68": "isAccountLocked(address)", "0x7d32e7bd": "transfer(address,bytes32)", "0xdf2f0a4a": "getDecisionBlockNumber(uint256,uint256)", "0xc494f71a": "LedgerFund(uint32,uint32,uint64,uint64)", "0x446d5aa4": "getAttributes(address)", "0x4cdc6a73": "Marriage()", "0x677cee54": "SafeConditionalHFTransfer()", "0x7b48ba20": "testThrowDisownNotOwner()", "0x1288c42a": "Prism()", "0xe8b13c44": "getChainyTimestamp(string)", "0xe4c2db06": "getPreviousFile(bytes)", "0xf0586f0d": "doThrow(bool)", "0xc1b06513": "registerEvent(bytes32[])", "0x521eb273": "wallet()", "0x32254992": "getPrevHash(int256)", "0x1fd96b69": "ManagedAccount(address,bool)", "0xabf74a93": "pitFee()", "0xa480ca79": "collectFees(address)", "0xa0bde7e8": "getShareDistributionWithTimestamp(bytes32)", "0xff27c476": "shiftBitsRight(bytes,uint256)", "0x172d8a30": "setDirectorLock(uint256,uint256)", "0xf262de8c": "add_staircase(uint16)", "0x990f3f53": "computeResponseSecondHalf(uint256,uint16)", "0x26745909": "PRNG_Challenge()", "0xcacc24eb": "transferFromViaProxy(address,address,address,uint256)", "0x94f3f81d": "removeAuthorization(address)", "0x3f0ec70b": "RequestFactory(address)", "0xa2a8336f": "claimEtherSigner(uint256)", "0xaa5d4719": "getTransferable(bytes20)", "0x23cd7cd5": "Model()", "0x3fb0b2c9": "CancelRoundAndRefundAll()", "0xd5fa2b00": "setAddr(bytes32,address)", "0xa0f61310": "FakeRelay(bytes)", "0x4ea66c38": "buyinInternal(address,uint256)", "0xbe040fb0": "redeem()", "0xb845c9a2": "WEI()", "0x26a7985a": "getMaximumCallGas()", "0x06661abd": "count()", "0xc89f8f08": "testGetController()", "0x81baf820": "BlockScheduler(address)", "0x9801cb8e": "ProofOfExistence()", "0xeb7492d1": "testTotalSupply()", "0x3dfb4843": "renewDeed(bytes32)", "0xc3fa5f93": "BlockScheduler(address,address)", "0x7958533a": "meta(uint256,bytes32)", "0xa1a66e56": "deductFunds(uint256)", "0xaf92a693": "addRegistrar(address)", "0xb2aac51f": "lookupUser(string)", "0xd70cf105": "moveBalance(address,address,uint256)", "0x2afb21bc": "InvestWithdraw()", "0x6d09e2ec": "commitCurrency(address,uint256,uint256)", "0x7b1a4909": "transferETH(address,uint256)", "0x96c824a8": "createAccountFundContract()", "0xe0a70811": "restart(bytes20,bytes)", "0x22057bc7": "getAllRevisionBlockNumbers(bytes20)", "0x6af2da2f": "testKeyedHash()", "0x7f6d8955": "RegisterOne(uint32,address,address)", "0x65f27bea": "testSubBalanceFailsBelowZero()", "0xa2f16d80": "dexWithdrawCollectedFees()", "0xc179520c": "ManageAccount()", "0x2672b3e2": "SplitterEtcToEth()", "0xe839e65e": "query2(string,string,string)", "0x39f64b52": "calcTokenPrice()", "0x4ef5710a": "WatchNumberOfPlayerInCurrentRound()", "0x3017fe24": "callAPIVersion()", "0x2977b1b1": "testAllowanceStartsAtZero()", "0x531c1b33": "getOperatingBudget()", "0xb7f2f33c": "transferRightIfApproved(address,bytes)", "0x00873367": "comparisonchr(string)", "0x2a0d79ef": "totalSupply(bytes)", "0xa715ff59": "EtherandomProxy()", "0xd6ca8ccb": "disown(bytes20)", "0x6ad2a0b3": "buildContract(address)", "0x45596e2e": "setFeeRate(uint256)", "0x0e97cfdf": "placeOrder(uint256,uint256,uint256)", "0x9549355e": "oracalizeReading(uint256)", "0x8d7af473": "numberOfProposals()", "0x728af7ec": "getInterest(uint256,uint256)", "0x11b9fee8": "ForkChecker(uint256,bytes32)", "0xd850288b": "etherlist_top()", "0xf4dc2d21": "Deed(uint256)", "0xf8b11853": "getGenerationStartAt(uint256)", "0x7c7a52bf": "newChallenge(uint256,address)", "0xd2d4bd72": "getCrossRate(bytes,bytes)", "0xe9b93569": "OwnerGetFee()", "0xfb72d24e": "shift_right(uint64,uint256)", "0x112e39a8": "scheduleCall(uint256)", "0x6c494843": "multiAccessChangeOwnerD(address,address,address)", "0x313ce567": "decimals()", "0x9bac8602": "testFailAddBalanceAboveOverflow()", "0xa70a9ad7": "switchDeity(address)", "0x6a61e5fc": "setTokenPrice(uint256)", "0x990c8f79": "returnValue()", "0xa4136862": "setGreeting(string)", "0x0af4626d": "testRetract()", "0x5e11544b": "newPeriod()", "0xdc206e5f": "oraclize_query(uint256,string,string[])", "0xcaa648b4": "getTotalValue()", "0x20bfec70": "WatchFees()", "0x62a0b56b": "testUnset()", "0x42f6e389": "isModule(address)", "0x769796fe": "resetAction(uint256)", "0x402e6230": "getTotalGambles()", "0xe8a1c08f": "nibbleToChar(uint256)", "0x1aa3a008": "register()", "0x96d02099": "rsplit()", "0x83324e8c": "numGroups()", "0x72c7c85a": "minority()", "0xb8d94b95": "buildDSNullMap()", "0xe039e4a1": "getOwner(uint8,uint8)", "0x625cc465": "baseDonation()", "0x77372213": "setName(bytes32,string)", "0xa7dfc874": "unregister(bytes,address,uint256,bytes)", "0x37f4c00e": "anchorGasPrice()", "0xb2bfd948": "checkNumbers(uint8[3])", "0x512f1e64": "orderBookLength()", "0xafed762b": "toSlice(string)", "0xbb6a1427": "testThrowRestartEnforceRevisions()", "0x734d8287": "unclaimedFees()", "0xf295206f": "_unsafeSend(address,uint256)", "0x69d01268": "concatUInt(uint256)", "0x0494630f": "oraclize_query(uint256,string,string[4],uint256)", "0x13fc6ac2": "getEventData(bytes32)", "0xbff974e8": "getContentReplies(uint256)", "0x18921de4": "addSignature(string,uint256[],uint256[],uint256[],bool[],uint256[])", "0xa87e7552": "isValid(bytes,bytes)", "0xb8d3bfe3": "MeatGrindersAssociation(address,address,uint256,uint256,uint256,address)", "0x61461954": "execute()", "0xecb0256b": "relayTx(bytes,int256,int256[],int256,int256,bytes,int256,int256[],int256,int256)", "0x7cdbae63": "addRegistryIntoTagsIndex(address)", "0x1f4e996b": "challenge(bool)", "0x0eb0afa6": "createDebt(address,address,uint256)", "0x5f6a1301": "clearPending()", "0x305a762a": "getTicketsCountByBuyer(uint256,address)", "0x724ae9d0": "getMinInvestment()", "0x1e39499d": "scheduleCall(address,bytes,uint256)", "0x4f197ee7": "transferPackageOwner(string,address)", "0x7e3faec1": "GoldTxFeePool(address,address,bytes)", "0x8d68cf59": "sendFunds()", "0x83eed3d5": "queryN(uint256,string,bytes)", "0x15c91115": "pbkdf2(bytes,bytes,uint256)", "0xeb121e2f": "update(uint256,uint256[101][])", "0x5e44daf3": "vote(uint256,int256)", "0xac562666": "freezeCoin()", "0xb0166b04": "testTransferringMkr()", "0x631de4d6": "replace(address,address)", "0x4bd70ea3": "testFailGetUnset()", "0xf738e5ca": "ownerTakeProfit()", "0xc6236a5c": "scheduleCall(bytes,uint256,uint256,uint8,uint256)", "0x119aa5c8": "checkForward(bytes)", "0x541aea0f": "put(uint256,uint256)", "0x6386c1c7": "getUserInfo(address)", "0x4e209678": "testFailBreach()", "0xe9fe799e": "registrantRemove(address)", "0x2aee19c7": "testCreateWithNonce()", "0xa0ec4e09": "getUltimateOutcomes(bytes32[])", "0x4d9e4e22": "Etheria()", "0xa6b513ee": "finalPrice()", "0x82f0d875": "makeHash()", "0x78ae88d1": "newDeal(uint256,uint256,uint256,uint256,uint256)", "0x177766e6": "getOptionChain(uint256)", "0xf1173928": "RemovedFromGeneration(address,uint256)", "0xea2ea847": "testChallengeFinalize()", "0xbd35d570": "GAS_TO_COMPLETE_EXECUTION()", "0x364ea9e7": "set(uint256,uint256,bool[],uint256[])", "0x17ff0caa": "WeatherBet(uint256,address,address,address)", "0x4e23a144": "fundUser(address,uint256)", "0x144267e0": "refundSecurity(address,uint256,uint256)", "0x31c6c4cf": "transferFromWithReference(address,address,uint256,bytes32,string)", "0x2eb5c61f": "testThrowsUpdateLatestRevisionEnforceRevisions()", "0xde640e19": "Investment(uint256)", "0x9cb8a26a": "selfDestruct()", "0x9c43d950": "registration(uint256,uint256,uint256)", "0xe2fdcc17": "escrow()", "0xc618d15f": "ConvertNumbers(bytes5)", "0x8c98117c": "getBill(uint256,uint256)", "0x2d7788db": "rejectRequest(uint256)", "0xfaab9d39": "setRegistrar(address)", "0xa289673b": "fipsChangeOwner(bytes20,address,address)", "0x54d9d6f8": "findNextDay(uint256,bytes)", "0x008a745d": "claimDividendShare(uint256)", "0x6f4812e2": "testFailControllerInsufficientFundsTransfer()", "0x5e983d08": "setPrices()", "0x798974dd": "getNumProposals()", "0x4ca168cf": "register(bytes,uint256,address,string,uint256)", "0xa1e4d3c2": "MembershipRoster()", "0xd4065763": "returnRemainingMoney()", "0x0c4326a0": "getMajorMinorPatch(bytes32)", "0xeece1e1f": "scheduleShuffling()", "0x226685ee": "Visit()", "0x323082d7": "Vote(string)", "0x0b15650b": "randInt(uint256,uint256)", "0xc9cfac55": "refundCurrency(address,uint256,uint256)", "0xfe4a3ac9": "setExecPrice(uint256)", "0x6a0e605f": "MyToken(uint256,string,uint8,string,address)", "0xb549793d": "scheduleCall(bytes4,bytes,uint256,uint256,uint8,uint256)", "0x85e68531": "revokeAccess(address)", "0x01991313": "scheduleCall(address,bytes4,uint256)", "0x0a6be0e7": "BalancedPonzi()", "0xf463edd1": "createDocument(uint256)", "0xa20c404f": "ModifySettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x560bb612": "SignatureValidator(address)", "0xf7654176": "split()", "0x48f05187": "scheduleCall(address,bytes4,bytes,uint256)", "0xf2b904c3": "checkBetColumn(uint8,address,bytes32,bytes32)", "0x7bc0ff20": "setupExportFee(address,uint256)", "0xeb06e65e": "allowanceFromProxy(address,address,address)", "0xfe757fb5": "lastClaimPrice()", "0xa5d0bab1": "buyPartial(uint256,uint256)", "0xda7d0082": "isCertification(address,bytes32)", "0xe570be18": "DVIPBackend(address,address)", "0x54738157": "OwnerCloseContract()", "0xc1e5304a": "CreateNewDraw(uint256,bytes)", "0x0c26e42e": "getReleaseHashForNameHash(bytes32,uint256)", "0x0f7d6673": "Channel()", "0x54ea4000": "identify(address[])", "0x69307c80": "rotateBits(bytes,int256)", "0x78f0161a": "setGreyGreenPrice(uint8)", "0x23b872dd": "transferFrom(address,address,uint256)", "0x578bcc20": "reduceDebt(address,address,uint256)", "0x59e148fc": "getLastOfferId()", "0xb5299ca6": "giveMeat()", "0xae30d35d": "ARK_TROGLOg_1_00()", "0x2d2c44f2": "Vault()", "0xce19419b": "testThrowsSetNotUpdatableNotOwner()", "0xffcf21a9": "eventOracles(bytes,uint256)", "0xf46c50dc": "doFail()", "0x73b55eaf": "registerData(address,int256,bytes32,address)", "0x53770f9a": "isStateless()", "0x4d47feaa": "ShareholderDB(uint256)", "0x40b31937": "pledgeDecline(uint256)", "0x01cb3b20": "checkGoalReached()", "0x62e05175": "setMotionDB(address)", "0xf362d78f": "testBitNotEqualSuccess()", "0xd2531590": "CANCEL_EXTRA_GAS()", "0x9a92b7e7": "EthVenturesFinal()", "0x79b0797c": "AmIPlayer1()", "0x6241bfd1": "Token(uint256)", "0x94a1710d": "testNonOwnerCantBreach()", "0xb466b76f": "fresh()", "0x4a5dddd2": "proxyPurchase(address)", "0xc0a1a949": "x15()", "0xc3b8bfe5": "transferIfNoHF(address)", "0x4a7e049e": "getFullCompany(address,uint256)", "0x481b659d": "permitPermanentApproval(address)", "0x16ce8a69": "setBuilding(uint256,uint256)", "0x1593a8c7": "endLottery()", "0x078c3fa4": "_transferToICAPWithReference(bytes32,uint256,string)", "0xfa3f1e99": "testBlobStoreRegistered()", "0x0b9e9817": "CanaryV7FastTestnet()", "0x6663bbec": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", "0x273bc3c9": "numberOfThrones()", "0x3c84f868": "set(int256,address,uint256)", "0x1ac61e8c": "testBlobCreate()", "0x5ccc3eaa": "roundMoneyUpToWholeFinney(uint256)", "0x0ccec396": "getNumReleases()", "0x6ac6205c": "addDataPoint(int256,uint256,bool,string)", "0x1d124fe4": "setUtils2(address)", "0x4c471cde": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8,uint256)", "0x52a554a1": "voteBoardProposal(uint256,address,bool)", "0x745a8be2": "flip32(bytes)", "0xbac1e2e0": "testBitsAndSuccess()", "0x25fda176": "notify(address,uint256)", "0x3b8e6f2e": "balanceAt(address,uint256)", "0x60585358": "getByte()", "0xc853c03d": "newDraw(uint256,uint8[3],uint256,uint256,uint256,uint256)", "0x741273d6": "testThrowRegisterContractAgain()", "0x8f2c44a2": "UnicornMilker()", "0x59d96db5": "terminate(uint256,string)", "0x483ba09e": "setBitcoinBridge(address)", "0x74fbbc86": "rate(uint256,uint256,string)", "0x83ea0620": "packageExists(string)", "0xd917deb5": "Donate()", "0x3fc6bc94": "payDAO()", "0x6558488a": "scheduleSetBool(address,uint256,bool)", "0x83e78b31": "bet(uint8,bool,uint8)", "0xeccb15bc": "SatPosition(int256,int256)", "0x7daa10ce": "getMyInfo()", "0x3e4565d2": "testErrorUnauthorizedNameRegister2()", "0x2143da91": "GameOfThrones()", "0xb29f0835": "doIt()", "0xdcc0ccf3": "Dao(address)", "0x70d53be5": "find()", "0x9a828a71": "oracalizeReading(uint256,string)", "0x6a6d31db": "externalEnter()", "0xf8b71c64": "rewardTo(address,uint256)", "0x0399c357": "assignFreeReadings(address,uint8)", "0x81ade307": "query(string,string)", "0xdb83694c": "getSaleInfo()", "0xa6bf3df0": "oraclize_query(string,string[2],uint256)", "0x29605e77": "transferOperator(address)", "0xf29d2f28": "setTokenHolder(address)", "0xa96f8668": "releaseTokens()", "0x8a3bc2bc": "iPropose(bytes,uint256,bool)", "0xd18611d6": "reactivate()", "0x7620a65b": "Publisher()", "0xa268b332": "testBitXorFailIndexOOB()", "0x6b1781b6": "Emergency()", "0x1003e2d2": "add(uint256)", "0x1209b1f6": "ticketPrice()", "0xe5a27038": "Pluton(uint256,string,uint8,string)", "0x22bc3b8e": "getArgument(uint256)", "0x47bdb7f4": "transferDisable(bytes20)", "0x13137731": "testThrowsUpdateLatestRevisionNotUpdatable()", "0x3f3935d1": "confirmReverse(string)", "0xecb4136e": "NotAnotherPonzi()", "0x49e347ae": "getContents(uint256[],uint256)", "0x669dafe8": "toWei(uint256)", "0xc233e870": "isLatestPatchTree(bytes32,bytes32)", "0x7b789b3d": "agreement(bytes,bytes,bytes)", "0x682d3bb0": "pdfCertificateProof(bytes)", "0x42346c5e": "parseInt(string)", "0x3177029f": "approveAndCall(address,uint256)", "0x71ffcb16": "changeFeeAccount(address)", "0xc971442c": "getDBs()", "0x362e2565": "returnDeposits()", "0xe10e274a": "CrazyEarning()", "0x6d705ebb": "register(address,uint256)", "0xbe9a6555": "start()", "0x1ce624d6": "Crypted_RPS()", "0x2c4cb4be": "removeRegistryFromNameIndex(address)", "0x68742da6": "withdrawFunds(address)", "0x18f3fae1": "setOversight(address)", "0x061ea8cc": "countByOwner(address)", "0xd6d22fa4": "MetaCoin()", "0x85654c9c": "setMembershipRoster(address)", "0x8aa33776": "setMsgPrice(uint256)", "0x4dd850fb": "UfoPonzi()", "0x07e00bcb": "kissBTCCallback(uint256,uint256)", "0xa1b7ae62": "setdirectorName(string)", "0xb4d9cc3a": "profitDisperser()", "0x0f24f5c8": "doTransfer(address,uint256)", "0x8d72a473": "deductFunds(address,uint256)", "0x28f03554": "ProcessDividend()", "0x98391c94": "muteMe(bool)", "0x346cabbc": "scheduleCall(address,bytes4,uint256,bytes,uint256)", "0xa42e36c6": "scheduleTransaction(address,bytes,uint8,uint256[5],uint256)", "0x21b36a08": "setFee(uint64,uint256)", "0xd94073d4": "PT()", "0xe8580dd4": "Survey(address,uint256,string,bytes32[])", "0x1f0c1e0c": "getEventTokenAddress(bytes32,uint256)", "0xce8b7151": "isHF()", "0x9bee757b": "requestExecution(bytes,uint256)", "0x775dec49": "keccak()", "0x6673ce2b": "Results_of_the_last_round()", "0x9f87acd0": "exec(bytes32,bytes32,uint256)", "0x02394872": "getLastBlockHeight()", "0x615664ba": "Market()", "0x0d7af726": "addGame(address,string,string)", "0xf4aa1291": "withdrawFundsAdvanced(address,uint256,uint256)", "0x8ed67a44": "setPrice(uint16)", "0x84ebde52": "Under_the_Hood()", "0x5a28340a": "accessOperatingBudget(uint256)", "0x9a89ad65": "within6Confirms(int256,int256)", "0xdfce8ac3": "fipsLegacyRegister(bytes20,address,bytes)", "0x73f310df": "multiAccessRemoveOwner(address)", "0x4cbee813": "logout(string)", "0xd992bd5b": "testResultNotZero()", "0x05b34410": "creationDate()", "0xfed4614b": "funeral(bytes,int256)", "0x58cb7323": "MainnetETCSurvey()", "0xbb504317": "divest(address,uint256)", "0x82381c96": "WatchCurrentMultiplier()", "0xcce81927": "EtherDice(address,address)", "0x70961774": "getBlockCreatedOn()", "0x84a7b223": "Canary(address)", "0x9378a9e2": "setUInt(uint256)", "0xe4360fc8": "getFileListElement(bytes)", "0xe597f402": "create(bytes1,bytes32,bytes)", "0x95d5a1be": "SignatureReg()", "0x33ce7787": "transferInvestorAccount(address,address)", "0x46c52b1a": "blockHexCoordsValid(int8,int8)", "0x3092afd5": "removeMinter(address)", "0x30945443": "update(address,string,string)", "0xc37ff3d9": "sha(uint256,uint256)", "0x29a6f31b": "oraclize_query(uint256,string,string[2],uint256)", "0x227f9633": "addOption(string,address,uint256)", "0x38eaf913": "setDirectorNode(string)", "0xab67aa58": "transferFrom(address,address,uint256,bytes)", "0x0ce3151c": "personUpdateRelation(uint256,string)", "0x216ef940": "proxyUpgrade(address,address,bytes)", "0x76bc21d9": "fireEventLog2Anonym()", "0xf004073a": "performAction(uint256)", "0xdba7ef7d": "Bookie(address,address)", "0xa0469b02": "inputToDigit(uint256)", "0x1d007f5f": "changeDAO(address)", "0x9dcb5c65": "resultsWeightedByEther()", "0x14ab9038": "setTTL(bytes32,uint64)", "0xf4d94699": "EndowmentRetriever()", "0xe74b9d11": "safeToSubtract(uint256,uint256)", "0xd7504385": "validateToAddress(address)", "0x57e2880d": "scheduleTransaction(uint256,uint256)", "0xe73a914c": "setDAO(address)", "0xc47bc007": "add_funds()", "0x37881810": "setCallbackAddress(address)", "0x686f2c90": "collectAllFees()", "0x278b8c0e": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "0xfac34ff6": "throwFoo()", "0x6d98e9fc": "totalWei()", "0xb0bcc610": "scheduleTransaction(address)", "0x665bcc32": "ProcessGames(uint256[],bool)", "0x3fd1f232": "LookAtAllTheseTastyFees()", "0xdd727ea6": "runJackpot()", "0x0acc4382": "getMinDailyWithdrawLimit()", "0x46b207b8": "checkExpiry()", "0xde5d953a": "logSingleIndex(bytes,bytes,uint256)", "0xf504e0da": "load_level(uint16)", "0x4b63e601": "scheduleCall(address,uint256,bytes)", "0x4a71d469": "collectRev()", "0x80db79d9": "StructAndFor()", "0x090637a1": "GetPart(bytes,uint256)", "0xc003b082": "getMyPlayerID()", "0x00a7d6b3": "checkTransferFromToICAP(address,bytes32,uint256)", "0xdcf8113e": "campaignEndedSuccessfully()", "0xd1af8a5a": "LinkerExample()", "0x01fd89a4": "getFlags(bytes20)", "0xa39a45b7": "replaceOwner(address)", "0x0a3b1cd2": "setHotwallet(address)", "0x075fe877": "scheduleCall(address,bytes,uint256,uint256)", "0x3e5fd9b5": "dEthereumlotteryNet(address,address,bool,address)", "0xa6403636": "resolve(uint8,bytes32,bytes32,bytes32)", "0x0b2acb3f": "add(address,bytes)", "0x6d522b19": "multiAccessChangeRequirementD(uint256,address)", "0x4311de8f": "ownerWithdraw()", "0xa99e7e29": "register(bytes,address)", "0x1ed6f423": "changeDescription(address,string)", "0xcd50d44f": "CheckRepresentment()", "0x4c0e207a": "__outputCallback(uint256)", "0xea8a1af0": "cancel()", "0x67387d6b": "testThrowCreateWithNonceExistingNonce()", "0xdc583801": "doubleyour5()", "0xb8077e28": "getTxOrigin()", "0xbfbc793c": "computeNameFuzzyHash(string)", "0x79baa8a9": "BasicIncome_CoFund()", "0xf4dbeb9d": "getCredRanksByContents(address,uint256[])", "0x227185d6": "Send1Get2()", "0x75c4aaa6": "addUnderDog(uint256)", "0xa7abc124": "activate(bool,bool)", "0x8df554b3": "Dividend()", "0x092b25e9": "setOwner(string,address)", "0x67af26fb": "transferOtherFrom(address,address,address,uint256)", "0x4bb278f3": "finalize()", "0xd1e15045": "sendBack()", "0xa4699cad": "resetWithdrawls()", "0xb61d27f6": "execute(address,uint256,bytes)", "0x9772c982": "scheduleCall(address,bytes4,bytes,uint256,uint256)", "0x1b3a8e6f": "directionCount(int256,int256,int256,int256)", "0xd499555b": "getFirstActiveDuel()", "0xb738169c": "betOnOddEven(bool,bool)", "0x411c4e72": "ModifyFeeFraction(uint256)", "0x06f36cc9": "helpBlue()", "0x9e65c7e5": "updateLatestRevision(bytes20,bytes)", "0xb47fa7e0": "DepositLimit(uint256)", "0xf1736d86": "m_dailyLimit()", "0x62ea82db": "bids(address)", "0x4166c1fd": "getElevation(uint8,uint8)", "0x8702735c": "setCapitol(uint256,uint256)", "0x3cc7790a": "GSI()", "0x83f6d9a4": "validateNameInternal(string)", "0x8d99b2eb": "endPoll()", "0x8bbda7e3": "setContent(string,bytes)", "0x52efea6e": "clear()", "0x2581c674": "testBitsOrFailIndexOOB()", "0x05d87fe2": "issueLetterOfCredit(uint256,uint256,uint256)", "0xcbf0b0c0": "kill(address)", "0xf83d96c1": "InsuranceAgent()", "0x8dd5e298": "canEnterPool(address)", "0x2d580ef6": "add(address,bytes32)", "0xeeda149c": "Register(address)", "0xcc25decd": "SampleOffer(address,bytes,uint256,uint256,uint256,uint256,uint256)", "0x428d64bd": "getShares(address,bytes32[])", "0x3c9a4baa": "requestOutput(bytes)", "0x8cae1374": "editBlock(uint8,uint8,uint256,int8[5])", "0x419db07b": "generousFee()", "0x202e3924": "getOperation(uint256)", "0x5ee345e4": "computeEndowment(uint256,uint256,uint256,uint256,uint256,uint256)", "0x7df23b6a": "ReleaseOracle(address[])", "0x9b2ea4bd": "setAddress(string,address)", "0x65093661": "newCommunity(address)", "0x33637d5a": "getPendingBlock(uint256)", "0x7910085d": "fipsIsRegistered(bytes20)", "0x730720b8": "testControllerValidTransfers()", "0xb0c80972": "setBalance(uint256,bool)", "0xdcf537b1": "multiply7(int256)", "0xdf5cc291": "get4(bytes,uint256)", "0x9ae4e388": "ChangeClientTokenAccount(address,bool)", "0x3121369d": "validateRequiredStackDepth(uint256)", "0x1747dfd4": "ContractPlay()", "0x598647f8": "bid(uint256,uint256)", "0xc368109c": "monster_hp(uint256)", "0x7fa22001": "assertEq0(bytes,bytes,bytes)", "0x8e280dce": "findNextYear(uint256,bytes)", "0x39d1f908": "actualBalance()", "0x8143f8a8": "totalGas(bytes)", "0xfe55932a": "setName(uint256,string)", "0x0fbf7151": "startsWith()", "0x4f20f35a": "payExpenses(address,uint256)", "0x705eeb90": "MultipleConstructorTest(bool)", "0x2df8e00d": "becomeMortal(uint256)", "0x645dce72": "updateRelease(uint32,uint32,uint32,bytes20,bool)", "0x1f6e5117": "getCallbackAddress()", "0xf51cbc72": "Level()", "0x64edfbf0": "purchase()", "0x35930e13": "setMinimalRewardedBalance(uint256)", "0x015e4f3a": "getConfigUint(int256,bytes)", "0x2c329e99": "Last_block_number_and_bloctime_used()", "0x6f3a7561": "SimpleAuction(address)", "0x6de00927": "GetUserRank(uint8,address)", "0xbe600276": "move(uint16)", "0x27d6c032": "unregister(bytes)", "0x4188d79c": "releaseExists(string,uint32,uint32,uint32,string,string)", "0x7ba38916": "changeAdminFromBoard(address)", "0x3369dace": "flipTheCoinAndWin()", "0xfa8dc33a": "checkRecordExists(bytes)", "0xebaf7f2f": "returnReward(uint256)", "0xc88961da": "createKingdom(string,address,address,address)", "0x21970c0c": "pay_royalty()", "0xb4a5ef58": "updateDefaultTimeoutPeriod(uint256)", "0x57bcccb6": "revokePermanentApproval(address)", "0xd1d1c8ae": "ConvertNumbers(bytes)", "0xc1c0e9c4": "exec()", "0xcc131be1": "CreateNewDraw(uint256)", "0x75f96ead": "Guess(uint256)", "0x8a5fb3ca": "currentFeePercentage()", "0x550bcd8d": "testThrowUpdateLatestRevisionEnforceRevisions()", "0xa6780857": "fireEventLog0Anonym()", "0x2d0104a5": "updateFirstDuel1(uint256)", "0xcbf1304d": "balances(address,uint256)", "0xdda9939c": "Store(address[])", "0xf41bfa9e": "mint(int256,uint256,string)", "0x044215c6": "token(uint256)", "0x1f903037": "getBytes32()", "0xa6f9dae1": "changeOwner(address)", "0xf9391d24": "AllPayAuction()", "0xabebb7f3": "MarketsContract()", "0x9e1e6528": "uncertify(address)", "0x81788e2b": "addAllowedAddress(address)", "0x4f44728d": "ownerChangeOwner(address)", "0x3da0ac79": "compare()", "0x96e438a1": "reclaimDeposit(uint256)", "0x5fe22c8b": "testFailTransferWithoutApproval()", "0x6835f32c": "build(bytes)", "0x5cac8b27": "amazing()", "0xad605729": "getParticipantCount()", "0xb6294bde": "AdminGetFee()", "0xec81e22e": "returnmoneycreator(uint8,uint256)", "0xc535165f": "revealAndPayout(bytes,bytes)", "0x6e0bd282": "destroy(bytes32)", "0xdda44b10": "buyRecipient(address,uint8,bytes32,bytes32)", "0xd4859dbc": "UniversalFunctionSecure(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", "0xd2602930": "RockPaperScissors()", "0xa08b3367": "EC()", "0x92d66313": "getYear(uint256)", "0xe49dcee9": "fixTokens()", "0x36555b85": "add(string,uint256)", "0x25010816": "get_length(uint256,uint256)", "0x610d5de8": "validateEndowment(uint256,uint256,uint256,uint256,uint256)", "0x79ce9fac": "transfer(bytes32,address)", "0x3ced516c": "descriptionHashes(bytes32)", "0xcf69df28": "getDataRequestLength()", "0x706dfe54": "getIssueState(uint256,bytes32)", "0x5af77fff": "Contract()", "0x66e5cb50": "stopTransfer(uint256)", "0x5f72f450": "check(uint256)", "0xf3b50c04": "rescind()", "0x57aee888": "_eraseNodeHierarchy(uint256,bytes32[],bytes32)", "0xaacc5a17": "getRandom()", "0x40275f85": "getPersonalDepositAddress(address)", "0x75700437": "query1_withGasLimit(uint256,string,string,uint256)", "0x6eb7b4c2": "underdogInfo(uint256)", "0x0f3eb785": "add(string,uint256,uint256,uint256)", "0xdc19266f": "Total_of_Players()", "0x9743dfc1": "jesterAutomaticCollectFee()", "0x6618b008": "cancelSellOrder(address)", "0x65538c73": "fireEventLog0()", "0xa4502cb8": "setExportFee(address,uint256)", "0x97bb2a63": "newvow(uint256,address)", "0xb400d149": "betOnNumber(uint8)", "0x030d406b": "entryPayout(uint256)", "0x1d71a1cd": "newIncome(string)", "0x85dd2148": "getSaleDate(bytes16)", "0x29917954": "exitPool()", "0xa25057de": "_transferToICAP(bytes32,uint256)", "0x24fc65ed": "getId(uint256,uint256)", "0x938199a5": "getDateOfLastPayment()", "0x04bb754c": "TradeFinancing()", "0xe37aa618": "distributeValue()", "0x547916ea": "finishRound()", "0xed01bf29": "budget()", "0x95ee1221": "isCancelled()", "0xfe777bcd": "etherForSale()", "0xffe302d1": "setPlz(string)", "0x891de9ed": "fromTLA(string)", "0x84734476": "copyBytes(bytes,uint256,uint256,bytes,uint256)", "0xfb114f57": "oraclize_query(uint256,string,string[3],uint256)", "0xceebe28d": "repoInterfaceVersion()", "0xb0ad38c4": "buildCity(string,uint256[2],uint256[2])", "0xefa7e56b": "GameEnds()", "0xcc3471af": "maxClaimBlock()", "0xa7c5052e": "buildDSTokenRegistry()", "0x6831c169": "totalPayedOut()", "0x98f3b81a": "getShares(address,bytes32[],int256[])", "0x2d077ad0": "Latch()", "0x0ac28725": "requestTradeDeal(uint256,uint256,string)", "0xb311ee0c": "refundClaimDeposit()", "0xadd82871": "strEqual(string,string)", "0x7879e19e": "CollectAllFees()", "0x5bd74490": "regProxy(address,address)", "0xd2b0d554": "getDisclaimer()", "0x0b74edc6": "testFinalHash()", "0x6cf761d4": "getMinConfirmationsByAddr(address)", "0x4cedf74e": "get_party1()", "0x4adcbd19": "isThisHardforkedVersion()", "0xefdecd9b": "check_withdrawdao()", "0x996a8046": "__callback(bytes32,string,bool)", "0x7c9cd7df": "changeDeveloper_only_Dev(address)", "0x3f77b560": "newDocument(bytes)", "0x06b5f02d": "calcWinnings(uint256,uint256)", "0x0a2282ae": "JackPot()", "0x378a2178": "tallyVotes()", "0xd8915fc5": "DCAssetBackend(bytes32,bytes32)", "0x0f590c36": "emergencyFixGameResult(uint64,uint256)", "0xea4af029": "ConferenceCertification()", "0x769dc523": "GetCategoryNumber(bytes4)", "0xd5df7559": "removeDocument(uint256)", "0x749aa2d9": "endRound()", "0xd8e5ae6a": "Etheramid()", "0xc0576b73": "monsters(uint256)", "0x32fefb4c": "add_account(address,address)", "0x7d619d9b": "holdCoin(address,address)", "0x5b067cce": "testCreateCostMain()", "0x384b1393": "follow(uint256)", "0x4162169f": "dao()", "0x5d8227e6": "FactoryBase(string,string,string)", "0x6bf52ffa": "Vote()", "0xeb5904c0": "setProfitDistributionContract(address)", "0x366a68dc": "setBlockLock(uint256)", "0x80d9eaa6": "refCount()", "0x89b8b492": "read(uint64)", "0x46b5e202": "set_num_levels(uint256,uint256)", "0xd96de4ce": "AdminDrawError()", "0x47b47102": "bakeCookie(string)", "0x1d7b5baf": "setUint(int256,bytes32,string,uint256)", "0x0699d07d": "updateMaxVal()", "0xfa544161": "getOwner(address)", "0x638560cf": "registerBool(address,bool)", "0x7c25f260": "Government()", "0x24a852c6": "unset(bytes)", "0xa32f0f41": "testFailControllerUnapprovedTransferFrom()", "0x0968f264": "withdraw(bytes)", "0x5f52e9fd": "WithdrawCashForHardwareReturn(uint256)", "0xc0f68859": "getMinimumGracePeriod()", "0x1bf6c21b": "USD()", "0x0fe234ed": "testSetController()", "0x05a17fc6": "getAccountFeed(address,uint256,uint256,uint256)", "0x673448dd": "isApproved(address)", "0x59dac714": "hashTo256(bytes)", "0x5a09f2f4": "setHouseFee(uint256)", "0x013cf08b": "proposals(uint256)", "0xeebf9808": "PiggyBank()", "0xadd43c59": "EtherTopDog()", "0xf909d60d": "getMinimumGasLimit()", "0xeb045789": "ChannelSeries(address)", "0x66d38203": "setup(address)", "0xe8641652": "strCompare(string,string)", "0x1959a002": "userInfo(address)", "0x737c8ea1": "_getRevisionBlockNumber(bytes32,uint256)", "0x127714c7": "getBudget()", "0x97daa043": "register(bytes,address,address,uint256,bytes)", "0xb5784f6f": "testMultiplePackages()", "0x0ce46c43": "scheduleCall(address,bytes4,bytes,uint16,uint8,uint256[5])", "0xe5782fd5": "setFeeStructure(uint256,uint256,uint256)", "0xa9f6def0": "HonestDice()", "0xeb7cdb56": "rankDown(uint256,uint256)", "0xb17b94c1": "testSystem()", "0xdd36e18b": "ContractStatus()", "0xee0dc478": "testSetEnforceRevisions()", "0x918359c6": "needsBirth()", "0xa5b1e13d": "settle(address,address,uint256,uint256)", "0x6b76484e": "swap(address,address)", "0x68402460": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256)", "0x733480b7": "transferToICAP(bytes32,uint256)", "0x567dbf18": "__forward(address,uint256,uint256,bytes)", "0x73e1743a": "buildDSBasicAuthority()", "0x482961e1": "updateReading(uint256,uint256)", "0x4e6ba0a9": "testCreateCostMultisig()", "0x8d7108e5": "isValidLocation(uint8,uint8,int8[5],int8[24])", "0x10142785": "assign(bytes,uint256,bytes1)", "0xfe97ee88": "hasPhone(address)", "0xe2861c8d": "cashOutProfit()", "0x0fa9ced4": "emergencyFuneral()", "0x8389f353": "setNumCities(uint256)", "0xdba1ac3d": "getEnforceRevisions(bytes20)", "0x1b4fa6ab": "getDefaultStackCheck()", "0x79be02af": "Read(address)", "0x70844f7a": "sendBadge(address,uint256)", "0x7bfaad96": "addNode(bytes,address)", "0x4d782cbc": "executeSellOrder()", "0xbe71248a": "payWinner()", "0x41304fac": "log(string)", "0x4f059a43": "getClaimAmountForBlock()", "0x6d2cb794": "airaTransfer(address,address,uint256)", "0x5a5383ac": "canExitPool()", "0xcabd27de": "Motion(address)", "0x433d4aab": "resolve(uint8,uint8)", "0x7d89ae63": "__findRef(string)", "0x4e1053cc": "RobinHoodPonzi()", "0x0220a5b4": "terminate(string)", "0x419ffa03": "fipsRegister(address)", "0x77a7e6be": "getRefTotal(uint256)", "0xed64bea4": "JamCoin()", "0x3cf885c4": "isBitSet(uint256,uint8)", "0xf2da67db": "setMany(uint256,int256,uint256,bytes20,address,bytes)", "0xe26c8434": "AdminStartDraw(string,bytes)", "0x13df7091": "mintAll(int256)", "0x8a46bf6d": "testFallback()", "0x29bed3bf": "EthereumRoulette()", "0xf869b11a": "declareVictor(uint256,uint256)", "0x45c41478": "getMarkets(bytes,address)", "0x90cf581c": "voteYes()", "0x9ec35352": "returnRandom()", "0x5025b9ae": "expire(uint256,uint256,uint8,bytes,bytes,bytes)", "0x338a1379": "_setPackedBlockNumber(bytes20,uint256)", "0xdb641ab4": "Game_balance_in_Ethers()", "0xbc0e7adb": "testThrowsDisownNotOwner()", "0x302d350e": "firstChainedCallback(uint256)", "0x5af73f3f": "getMinimalBalance(uint256,address)", "0x4c488dac": "getChannelValidUntil(bytes)", "0xa1616429": "testBitOrSuccess()", "0xaa64c43b": "transferPool(address,address,uint256)", "0x78e97925": "startTime()", "0xa0355f4e": "decline(uint256)", "0x02556de3": "updateMajorTree(bytes32)", "0x01984892": "name(address)", "0xfad4b99a": "updateChannelMinimum(address,uint256)", "0x4f39ca59": "drop(bytes32)", "0x61591a7c": "personUpdateDOB(uint256,int256)", "0x17b3a34b": "_addIdentities(uint256,bytes32[])", "0x91d8b14e": "BuyTickets()", "0x1aadcc34": "convertGreyGreen(uint8,uint8)", "0x9a863892": "NewProposal(uint256)", "0xc5487661": "proxyTransferToICAPWithReference(bytes32,uint256,string)", "0x85f8c16d": "claimHours(int256)", "0xa71f94c8": "scheduleSetUInt(address,uint256,uint256)", "0x7ef09476": "transfer(uint64,address)", "0x94bcdb4c": "Example2()", "0x37930615": "extend(bytes16[],uint64)", "0xfb09b1ac": "testBalanceOfReflectsTransfer()", "0x19a278b9": "getBAddress()", "0xc0a239e3": "valuePerShare()", "0xa039e3c7": "testSetNotTransferable()", "0x22593300": "Small(address)", "0xe21608be": "ReserveToken()", "0xc2985578": "foo()", "0xb463bcde": "testThrowsSetNotTransferableNotOwner()", "0x88d695b2": "batchTransfer(address[],uint256[])", "0x37b0574a": "isClassic()", "0x1da6822c": "testThrowsTransferEnableNotTransferable()", "0xdcfa9cc0": "testProxyCall()", "0x478aa69e": "unauthorizeUser(address)", "0x102accc1": "fireEventLog2()", "0xed62cf1f": "setCanCall(address,address,bytes,bool)", "0x15f73331": "invalidateName(string)", "0x73e30e49": "majorEventFunc(uint256,bytes,bytes)", "0x00c721ab": "setHand(uint256)", "0xf9e27106": "investmentEntryCost()", "0x4c7f74df": "EtherDelta(address,address,address,uint256,uint256,uint256)", "0xb74e452b": "today()", "0xd3118a5a": "addDoc(string,string)", "0xc204f9f1": "_transferFromToICAP(address,bytes32,uint256)", "0xf50d3914": "resetFoundationtList()", "0xe67cdfb7": "moveOldUser(uint256)", "0x98eaca94": "inKissBTC(uint256)", "0xc633084f": "sendGreeting(address,string)", "0xde10f04b": "eraseNode(bytes32[])", "0xd50495f4": "addTransaction(bytes)", "0x96cff3df": "getMinimumCallCost(uint256,uint256)", "0xce373b95": "heroOfThePit()", "0x39e525f9": "resolveCallback(uint256)", "0x942b90d3": "getRewardTable()", "0xedca914c": "buyTicket()", "0x5fcb568c": "release(string,uint32,uint32,uint32,string,string,string)", "0x6c9c2faf": "getSupply()", "0xf1448e10": "requestExecution(bytes)", "0x0c08bf88": "terminate()", "0x08aba5aa": "setAccountBalance(uint256)", "0x2c46d8d5": "EndRound(uint256)", "0x3d5db1c2": "incrUserOnholdBal(address,uint256,bool)", "0xf2f254c7": "getLatestMinorTree(bytes32,uint32)", "0x373a1bc3": "scheduleCall(address,bytes4)", "0x3a96fdd7": "compare(string,string)", "0x738ddabe": "getContentIndexedAccountCred(uint256,address,address)", "0x5acce36b": "getEndowmentBalance()", "0x1ca60aeb": "setMeltingContract(address)", "0x52375093": "m_lastDay()", "0x565a2e2c": "getBeneficiary()", "0x9d5c6061": "getMsgGas()", "0x41d31feb": "get_read_only_keys()", "0x796b89b9": "getBlockTimestamp()", "0x4a41e045": "getUint8(int8)", "0x38e48f06": "save(string)", "0x1cda37f2": "eraseRecords(bytes32)", "0xae978f08": "getLatestTweet()", "0x20909fa0": "communityCurrency()", "0xafbec8df": "TheGrid()", "0x1c14179a": "GavCoin()", "0x0b6142fc": "breach()", "0x3ab1e703": "roundMoneyDown3SF(uint256)", "0x414ceac0": "investorAddFee(uint256)", "0x82a62137": "activateAccount(address)", "0x4ca7fbd0": "updateTokenPriceWeekTwo()", "0x2551858e": "getFlags(bytes32)", "0x4ad07b0e": "oracleOutcomes(bytes32,address)", "0x60b431a4": "testGetSig()", "0xa5f8cdbb": "buyTicket(address)", "0x64aabe92": "tryExec(address,bytes,uint256)", "0xa6c01cfd": "isInGeneration(uint256)", "0x149c5066": "ChanceOfWinning(uint256)", "0xc068eae0": "player_collect_winnings(uint256)", "0x8129fc1c": "initialize()", "0xcf832ce2": "ownerRefundPlayer(bytes32,address,uint256,uint256)", "0x3517a740": "getNodeParent(bytes)", "0xec6afc22": "oraclize_query(uint256,string,string[3])", "0x50944a8f": "setMembership(address)", "0x85b1423e": "returnAll()", "0xd95a2d42": "lendGovernmentMoney(address)", "0x347632e8": "getShareholderAdressByID(uint256)", "0xbb39a960": "trade(address,uint256,address,uint256)", "0x8abadb6b": "setAccountLevel(address,uint256)", "0xa502aae8": "getNextGenerationId()", "0xb5bfdd73": "addDSource(string,bytes1,uint256)", "0x28d3ad3f": "getPot(uint256)", "0x08933d11": "getJoinBlock(address)", "0x8383bfc8": "EscrowFoundry()", "0x2ca15122": "sign()", "0xf340fa01": "deposit(address)", "0x9ed93318": "create(address)", "0xa1c0539d": "scheduleCall(address,bytes4,bytes)", "0xced92670": "changeMultiplier(uint256)", "0xb2c652f3": "getMarkets(uint256[128])", "0x69b144eb": "testThrowsCreateNewRevisionNotOwner()", "0x16c72721": "forked()", "0x712ca0f8": "getOrder(string)", "0x0cf45ba5": "updateFirstDuel2(uint256)", "0x4173b181": "setWeiPrice(uint256)", "0x689b3e2d": "Moonraker(address,address)", "0x8691162a": "TlcCoin()", "0x432ced04": "reserve(bytes32)", "0x38178fbe": "addString(string,string)", "0x8f1327c0": "getRound(uint256)", "0xa9eed530": "reduceOrderQty(uint256,uint256)", "0x408938d0": "testUpdatePackageDb()", "0x56105a08": "DgxSwap()", "0xc43d0575": "scheduleCall(bytes4,uint256)", "0xdba21657": "askForEther(uint256)", "0xca3b5c91": "hasRelation(bytes,bytes,address)", "0xc71cbcf3": "recoverAccount(address,address)", "0xb010d94a": "canExitPool(address)", "0x0a16697a": "targetBlock()", "0xff1f7046": "requiresAuction(string)", "0x0b811cb6": "executeProposal(uint256,bytes32)", "0xbb8be064": "HardwareToken()", "0xe2b05077": "getSaleDate(bytes,uint256)", "0x1e9a6950": "redeem(address,uint256)", "0xd21b84ac": "createNewDAO(address)", "0xd644e356": "index(uint256,address,uint256,uint256)", "0xea27a881": "getMinimumEndowment(uint256,uint256,uint256,uint256)", "0x99a88ec4": "upgrade(address,address)", "0xc8e4acef": "playerByAddress(address)", "0x0b7abf77": "TOTAL_TOKENS()", "0xfb5d7376": "step4()", "0xc0aa18e7": "History()", "0xe2233ada": "smartDoor(address[])", "0xd6006e88": "send(address[],uint256[],uint256)", "0x95671958": "getFileListTail()", "0x16bac350": "overthrow(string)", "0x5cb18a6d": "fipsLegacyRegisterMulti(bytes20[],address,bytes)", "0x60116397": "Registrar(address,bytes32,uint256)", "0x60fe47b1": "set(uint256)", "0x5f8f0483": "buyBankerAgreementFromImporterBank()", "0x4c8cc20b": "toContentID(address,string,string,address,uint256)", "0x45ca25ed": "changeName(address,string)", "0xb21bce4c": "vote(bytes,bool)", "0x334dc700": "CanaryV7Testnet()", "0xc31d0031": "CrowdFundDAO(string,uint8,string)", "0xf3d91708": "isEligibleForUpgrade(address)", "0x0ee07836": "adjustDifficulty(uint256)", "0xf6232556": "Security_GetNumberOfAttemptsToConnectBankAccountToANewOwnerAddress()", "0xb2d37e95": "remove_order(uint32)", "0x691d58e7": "_applyRefund(uint256)", "0x1c2353e1": "isCertifier(address)", "0xcf158fe9": "scheduleTransaction(uint256,uint256,uint256)", "0x5d96ec65": "setAdministrator(address,string,bool)", "0x0651844e": "activateBalance(address)", "0x217311ac": "getWords(uint64)", "0xc127c247": "addMember(address,string)", "0x40c0bcb9": "checkBetNumber(uint8,address,bytes32,bytes32)", "0xb633620c": "getTimestamp(uint256)", "0x5b764811": "_jMul(uint256,uint256,uint256,uint256)", "0xfe029156": "swap(address,address,uint256,uint256)", "0x31db4b95": "doTriggerAuth()", "0x203c03fa": "Coinflip()", "0x209a5b8a": "moneySumAtSettlement(address,uint256,int256,uint256)", "0xf10ae2ab": "__dig_then_proxy(uint256,address,bytes)", "0xd532e481": "activateFrozenAccount(address)", "0xe9a9c1b4": "get_party1_balance()", "0x8fcc9cfb": "setMinDeposit(uint256)", "0xe5c7e509": "testThrowTransferDisableNotEnabled()", "0x4e077f2a": "addGasEther()", "0xb7c93330": "ResourcePoolTester()", "0x82661dc4": "splitDAO(uint256,address)", "0x0e554bd8": "scheduleCall(bytes,uint256,uint256,uint8)", "0x49041903": "getGame(uint64)", "0x0e1da6c3": "claimTimeout()", "0xc53ad76f": "Kardashian()", "0x8b7bcc86": "numWinners()", "0x1043dcdf": "LastIsMe(uint256,uint256)", "0x6cd22eaf": "updateAuthority(address,bool)", "0xb796a339": "addRegistryIntoOwnerIndex(address,address)", "0x308d6613": "getSignData(uint256,uint8)", "0xed88c68e": "donate()", "0xb719d1d0": "getRegInfo(address)", "0xac8d6030": "removeRequest(address)", "0x46f0975a": "signers()", "0x434cb64c": "startNextGeneration()", "0x6cb3d30a": "triggerTryAuth()", "0x3c067945": "fundBalance()", "0x26c7edaa": "flip4(bytes)", "0xf76f950e": "uint2str(uint256)", "0x860e9960": "BetPriceLimit()", "0xb0ecca8f": "LookAtLastTimePerZone(uint256)", "0xa35cfa22": "make_move(uint256,uint8,uint8,uint8,uint8)", "0x3f74fecb": "DSTrueFallbackTest()", "0xdd2ad311": "scheduleCall(bytes,uint256)", "0x0ae5e739": "grantAccess(address)", "0x7d5fec5a": "setOwner(uint8,uint8,address)", "0x6a4b6aa5": "untrustedChildWithdraw()", "0x332f93a9": "nextPayoutGoal()", "0xc5ae6e0e": "Kernal()", "0x75438e49": "fillGas()", "0x51404cbe": "forceDivestOfOneInvestor(address)", "0xeacfc0ae": "Authorized()", "0xe59d843a": "Replicator(bytes,uint256,uint256,address)", "0xf00e8651": "createRequest(address[2],address,uint256[11],uint256,bytes)", "0x02acdb44": "setAnyoneCanCall(address,bytes4,bool)", "0x2a24f46c": "auctionEnd()", "0x7ef1925b": "getShareRange(uint256,uint8)", "0x2fac1a54": "newOrder(bool,uint256,uint256,uint256,uint256)", "0x56b8c724": "transfer(address,uint256,string)", "0x33fd066d": "doBalanceFor(address)", "0xf29617da": "registrationDeposit(address)", "0x2b297f9e": "registerDao(address)", "0x79cce1c5": "getReleaseHashes(uint256,uint256)", "0xbed1b8b9": "convertToInt(string)", "0xef5daf01": "_dumpToCompany()", "0x23dc42e7": "query1(uint256,string,string)", "0xa53b1c1e": "setInt256(int256)", "0xb8cf14e7": "updateStatusPlayer()", "0x61aa8d93": "processFee()", "0x10f41715": "updateMintingData(uint256,uint256)", "0x048e2e94": "getAccountSize(address,uint256)", "0x7c47965e": "isInCurrentGeneration()", "0x420a8ac8": "NanoPyramid()", "0xe56556a9": "getPlayerID(address)", "0x5cd2f4d3": "approve(address,bytes32)", "0x8da4d776": "newCommune(address)", "0x4d30b6be": "balanceOf(address,bytes32)", "0x4a606c53": "_db()", "0x4956eaf0": "deploy(address,uint256)", "0xf1fe42b8": "TransactionRequest(address[3],address,uint256[11],uint256,bytes)", "0x63e38ff3": "id_for_nym(uint256)", "0x0e757a2e": "testSetAndGet()", "0x3facd57c": "registerBill(uint256,address,address,uint256,uint256,uint256)", "0xe548cf13": "betOnColumn(bool,bool,bool)", "0x2f1e4968": "makeNewProposal(string,uint256)", "0x0b467b9b": "revoke(bytes)", "0x74bfb965": "addNewProxy(address)", "0x02de2cf3": "isLatestPreReleaseTree(bytes32,bytes32)", "0xfc1f7652": "_isBoardMember(address)", "0xefef39a1": "purchase(uint256)", "0x3ae9b510": "getLatestMajorTree(bytes32)", "0xc24924d6": "setQueryFee(uint256)", "0x839930ba": "getMinimumBet()", "0x8f5e9ca7": "acceptTOS(address,bool)", "0xd1100691": "BookCafe()", "0x839849c0": "changeBaseMultiplier(uint256)", "0x758971e8": "ownerTakeProfit(bool)", "0x2b785960": "testBitAndSuccess()", "0xd96a094a": "buy(uint256)", "0x379607f5": "claim(uint256)", "0x88e072b2": "checkTransfer(address,uint256)", "0x05fefda7": "setPrices(uint256,uint256)", "0xfc63d4fb": "order(bool,uint32,uint128)", "0x5718b994": "checkEvent(address,bytes,bytes,uint256)", "0x0c0662a8": "getLastWithdrawal()", "0xeb947f19": "ExampleResourcePool()", "0xb51c4f96": "getCodeSize(address)", "0x702fc7da": "ReviewModel()", "0xc6cb7a96": "orderMatchTest(uint256,uint256,int256,uint256,uint256,address,address,uint256,int256)", "0xb7760c8f": "transfer(uint256,address)", "0x32b12eac": "setFallback(address)", "0x0a4d564c": "TieUpLooseEnds()", "0xc3ad5ecb": "getTweet(uint256)", "0xe86afde0": "description(uint64)", "0xd0549602": "scheduleTransaction(address,uint256,uint256,uint256)", "0xbf2e694f": "getPreviousRequest(address,address)", "0x2525f5c1": "cancelBid(address,bytes32)", "0x19f02ceb": "set(address,address,uint256)", "0xf00acc47": "prepareRoll(uint256,uint256)", "0x29d28aad": "Broker(address)", "0x041d0c0b": "MyTokenLoad(uint256,string,uint8,string,address)", "0xd81ab0c1": "invoke(uint256,address,address,bytes)", "0xab09ee80": "respond(uint256,uint256,uint256,uint256)", "0xd985f122": "RelayToolsTest()", "0xbe0638e4": "WealthShare()", "0x5263ba87": "getLatestPatchTree(bytes32,uint32,uint32)", "0xb7bae9b7": "exists(bytes,bytes)", "0x0b80f8d3": "invmod(uint256,uint256)", "0xbb4d7cd1": "tag(uint256,string)", "0xadf54e0c": "betOnLowHigh(bool,bool)", "0xed54746e": "lastAuction()", "0xf158458c": "getMinimumEndowment(uint256,uint256)", "0x5fcc2edb": "IndividualityTokenRoot(address)", "0x7cc48875": "Slots()", "0x2885b593": "extractMasterKeyIndexLength()", "0x8940aebe": "publicKey(uint256)", "0x0aece23c": "getFeeAmount(int256)", "0x72c3015c": "mint(int256,address,string)", "0xd6a619e3": "transferIfPuritanical(address)", "0xe30443bc": "setBalance(address,uint256)", "0x1277e24f": "payOneTimeFee()", "0xb958a5e1": "getPhoneByAddress(address)", "0x4e71d92d": "claim()", "0x3e0d4f4a": "ApproveContractorProposal()", "0x18160ddd": "totalSupply()", "0x150ad2a8": "owner_transfer_ownership(address)", "0xa2b5591c": "oraclize_query(uint256,string,string[],uint256)", "0x8d227fc0": "getPeriodInfo()", "0x1c0b6367": "processTransaction(bytes,uint256)", "0xf245b9e4": "DVIP(address)", "0x392327b5": "owner_set_fraction(uint256)", "0xadaccd74": "getNickname(address)", "0x2e0ef395": "voteOnNewEntryFees_only_VIP(uint8)", "0x89c19ddb": "concat(string,string)", "0xcef8d343": "buyShare(uint256,bool)", "0xd224118f": "PrepareDraw()", "0x4269d8ef": "_safeSend(address,uint256)", "0xda1441cd": "KudosBank(uint256)", "0x7ccfd45a": "removeSubUser(address)", "0xcc70bb1a": "publish(string,string,string,address)", "0x708f29a6": "getTotalPayments()", "0x05459f42": "WeeklyLotteryB(address)", "0x452d44dc": "checkBothNotNull()", "0x659fb968": "getOracleOutcomes(bytes32[],address[])", "0x3570c2ee": "PosRewards()", "0xbca86986": "testSetup()", "0xff49b26e": "createEvent(uint256,uint256,uint8,uint32,address,uint256,uint8)", "0x541d920c": "commit(bytes,string)", "0xa6a20ff6": "DSEasyMultisig(uint256,uint256,uint256,uint256)", "0x0f5381f1": "testUserCanIncreaseVersionNumber()", "0xf8f46b5f": "getCurrentMinerAddress()", "0xfcfff16f": "open()", "0x5a9b0b89": "getInfo()", "0xb8017221": "get_party2_balance()", "0x514dcfe3": "seller_accept()", "0x2004dff6": "Basics()", "0x0b6d8d52": "createDAO(address,uint256,uint256)", "0xf18d20be": "adminWithdraw()", "0x8f9df278": "newEntry(int256,bool,uint256,int256,string,bytes32,address,uint256[])", "0x75949c13": "sendHalf(address)", "0x64ac2c4a": "WavesPresale()", "0x8946d33f": "SplitterEthToEtc()", "0x11400d8e": "priv_fastGetBlockHash__(int256,int256)", "0x7266f4a4": "X3()", "0xb189ad2a": "testErrorUnauthorizedAfterTransfer()", "0x31c2bd0b": "propose(address,bytes,uint256)", "0x100c8ada": "setCAmodulus(bytes)", "0x296ed88f": "testFailControllerInsufficientFundsTransferFrom()", "0xd5dbb1ad": "solveBet(address,uint8,bool,uint8,bytes32,bytes32)", "0x8a9ffb90": "transfer(string,string,bool)", "0x968908a3": "createMarketMaker(uint256,uint16,uint256)", "0x7b02b2c9": "sendMsg(address,string)", "0xa33dd801": "setTreasuryBalance(uint256)", "0x2f553d31": "isCreated(bytes32)", "0xf712d7ff": "testFailControllerTransferFromWithoutApproval()", "0xe51ff1fc": "iterateOverThings()", "0x60fd902c": "gnosisToken()", "0x2ef875fb": "div10(uint256,uint8)", "0x640f244b": "findSuitableGen()", "0x16cb9a01": "assertFalse(bool,bytes)", "0xe671f510": "onEtherandomExec(bytes32,bytes32,uint256)", "0x758b5172": "setPlayersPerRound(uint256)", "0x6423db34": "Reset()", "0x21958a50": "AddressSeries(address)", "0xfb87d5ea": "TransactionRequest(address[4],address,uint256[11],uint256,bytes)", "0xfb279ef3": "tip(uint256,address,uint256)", "0x338cdca1": "request()", "0x4e7ad367": "fireEventLog1Anonym()", "0xbd9335c0": "scheduleHangouts()", "0x4cb85356": "BranchSender(uint256,bytes32)", "0x1d7e1f68": "getContentRank(address,uint256)", "0x1a1df394": "Play(bool)", "0x468129a5": "setUnit(uint256,uint256,uint256)", "0xecb70fb7": "hasEnded()", "0x2d49ffcd": "getLocked()", "0x2e06c756": "post(string,string,string,uint256,uint256,address)", "0x73f93a48": "getAccountContentTip(address,uint256)", "0xf6a3d24e": "exists(address)", "0x5fbddcf3": "isLivingMonarch()", "0x6d568c43": "weiToCents(uint256)", "0xacf4280c": "buildDSApprovalDB()", "0xf3541901": "execute(address,bytes,uint256,uint256)", "0x88eb7af7": "_isHuman()", "0x48a490fb": "transferFromTreasury(address,uint256)", "0x5e03d393": "setAccountFrozenStatus(address,bool)", "0xfc687311": "betOn(int8)", "0x5bbfe9b6": "_myGroupHelper()", "0x5629c6d9": "doExecution(address)", "0xe3a9b508": "EnableDisableTokenProxy()", "0x9229c504": "new_mainPlayer(address)", "0x6f6c0244": "generateShortLink()", "0x33613cbe": "getBondBalance(address)", "0x4229616d": "collectPercentOfFees(uint256)", "0x4ed3885e": "set(string)", "0x043bb5e7": "getIdentities(address[])", "0xad2fea7c": "removeMinter(int256,address)", "0x0b7e9c44": "payout(address)", "0x17f5de95": "MAX_TOKENS_SOLD()", "0x50ea1932": "lookupISO3116_1_alpha_2(bytes)", "0x96f7807a": "getDuel2(uint256)", "0xa97ffd5e": "safeToSell(uint256)", "0x2f4ee5d4": "registerThrone(bytes,uint256,address,uint256,uint256)", "0x4c0bcfe5": "getTransferableBalance(address)", "0x0d17bc2e": "_disallow()", "0x0ca7395f": "returnFund(address,uint256)", "0x69fe0e2d": "setFee(uint256)", "0xfaf27bca": "greeter(string)", "0x0c7de59d": "edit(address,bytes,bool)", "0x16e27349": "getFeeRecipient(int256,int256)", "0x37751b35": "doTransfer(address,address,uint256)", "0x67fc1c6a": "validateProposedMonarchName(string)", "0xf59f99ee": "createNextGeneration()", "0x6be505f5": "selectWinner(bytes32)", "0xf6bd5893": "getGas(uint256)", "0x35b09a6e": "someFunction()", "0xb3aaa277": "validate(address[4],address,uint256[11],uint256,bytes,uint256)", "0x4f052648": "XaurumDataContract()", "0x117b4705": "retract(bytes32)", "0x2145e36c": "testBitSetFailIndexOOB()", "0x3d750b28": "found()", "0x1334a5e2": "eventCallback(uint8,address,address,uint256)", "0x3c2c21a0": "scheduleCall(address,uint256,bytes4)", "0x82996d9f": "rent()", "0xaf640d0f": "id()", "0xdaf22f4d": "identify(bytes32)", "0xfe4667e9": "getMaxLossAfterTrade(address,uint256,uint256,int256,int256)", "0xfc108f70": "GamblerPerAddress(address)", "0x89f4ed7a": "getLastTag(uint256)", "0xfcc11241": "addOrder(uint256,uint256,uint256,uint256,uint256,uint8)", "0x43243797": "fundsOf(address)", "0x892c0214": "NumberOfCurrentBlockMiners()", "0xb5a6c525": "extractFrozenAccountLength()", "0x1acb2719": "getNextRequest(address,address)", "0xa89a4f09": "creatorBalanceChecker()", "0x1e83409a": "claim(address)", "0x5e1d7ae4": "changeFeeRebate(uint256)", "0xb7482509": "deposit(address,string)", "0xfb47a067": "_getRevisionBlockNumber(bytes20,uint256)", "0x5dcdddd1": "testSafeToAddFix()", "0x9aa26f06": "registerBytes32(address,bytes)", "0xd085e66e": "GetPart(bytes32,uint256)", "0x2cd78450": "activateExportFeeChargeRecord(address)", "0x35d129f6": "untag(string)", "0x1a7a98e2": "getDomain(uint256)", "0x877653f0": "_storeBalanceRecord(address)", "0x446fbcd1": "CredSign()", "0xfae8f9a2": "setInitialParent(int256,int256,int256,int256,int256,int256)", "0xc1b056b0": "getNodeLeftChild(bytes)", "0x71f297cc": "XaurumToken(address)", "0xe3ffc9a3": "sendEtherToOwner()", "0xeccf1b29": "CrystalDoubler()", "0x57f4d5ec": "processDividends(address,uint256)", "0x75c589a0": "getMinimumCallCost()", "0x66772438": "computeResponse(uint16)", "0x7fefde53": "WillRegistry()", "0x8f4fb958": "calculateRandomNumberByBlockhash(uint256,address)", "0xed498fa8": "userTokens(address)", "0x5601eaea": "execute(uint256,uint256)", "0x8dd8596c": "sendDonation()", "0x15a0df43": "testThrowCreateNewRevisionNotOwner()", "0x0382c254": "CheckHash(uint8,uint8,uint8,uint8,bytes32)", "0x157f8f51": "feePaid(int256,int256,int256,int256)", "0xf00aac7f": "ArrayRR()", "0x7b7d7225": "_approve(address,uint256)", "0x54ed7b6e": "addHash(bytes)", "0x235c002d": "transferOther(address,address,uint256)", "0x7057c20d": "CFD(address)", "0xd5563f31": "createAuction(uint256)", "0x46c3166f": "testThrowRetractLatestRevisionNotOwner()", "0x4420e486": "register(address)", "0x9a969768": "distributeProfits(uint256)", "0x464f37c9": "trustedChildRefund()", "0x5d495aea": "pickWinner()", "0xdf55b41a": "owner(string)", "0x10e6e06c": "vote(bool,uint256)", "0xe7faecec": "testFailInsufficientFundsTransfers()", "0xea98e540": "proxyTransferFromToICAPWithReference(address,bytes32,uint256,string)", "0xfff78f9c": "doThrow()", "0x9bb01b5f": "ElcoinDb(address)", "0xdc6dd152": "playerRollDice(uint256)", "0x5d0be9de": "softWithdrawRevenueFor(address)", "0xcd591822": "CanaryV7Fast()", "0x36e6b92e": "taskProcessedWithCosting(uint256,uint256)", "0x7bb6a4c6": "uno(uint256)", "0x03427656": "getDefaultSoftResolutionBlocks()", "0xc1fd4339": "createMarket(bytes32,uint256,uint256,address)", "0xeb95b7d5": "Bounty(address,address)", "0x4dd49ab4": "get(bytes,uint256)", "0xfa6d373c": "LeaderHash()", "0x8c8d98a0": "toTimestamp(uint16,uint8,uint8)", "0x9a79f4a8": "testFailHeaderInsufficientFee()", "0xdd90c403": "getAccountFeed(address,uint256,uint256)", "0x58e59c32": "get_entry(uint256,uint256,uint256)", "0xfd747c0b": "rsaVerify(bytes,bytes,uint256,bytes)", "0x0f4cf692": "numMessages()", "0x18433bb7": "DrawPrepare()", "0x1dea0c57": "getRealBet(uint256)", "0x7d60e343": "getFileListSize()", "0xd24ddcfe": "buyKissBTC()", "0xa055fe64": "_projectCommitNew(address)", "0x5f17114e": "TimeDeposit()", "0x85fe0448": "testThrowRestartNotUpdatable()", "0x901717d1": "one()", "0x528fd7b0": "manualPayExpiredDuel()", "0x85952454": "newOwner(address)", "0xf34c7010": "commitSecurity(address,uint256,uint256)", "0x3bf2313d": "__transferToICAPWithReference(bytes32,uint256,string)", "0x67b830ad": "fillOrder(uint256)", "0x73fac6f0": "confirmReceived()", "0xf1b3f968": "getRaceEndBlock()", "0xf99fc046": "dEthereumlotteryNet()", "0xb409da05": "logDoubleIndex(bytes,bytes,bytes,uint256)", "0x9e920587": "testOwnedAuth()", "0x8e7cb6e1": "getIndex(uint256)", "0xe2f8a017": "payInstallment(uint256)", "0xac3e6b2f": "testSetNotRetractable()", "0x8fbc3ecd": "BUFFER()", "0x4b729aff": "buyNumber(uint256)", "0x166c4b85": "len(bytes32)", "0x6299f8cf": "stop(uint256)", "0xd767aee0": "bbb()", "0x29090202": "Resolver(address)", "0xcc2c2bcf": "MotionFactory(string,string,string)", "0xfd260dfc": "getCertificationDbStatus(address)", "0x30aceb89": "validateRequestParams(address[3],address,uint256[11],uint256,bytes,uint256)", "0xd11f13df": "numberOfParticipantsWaitingForPayout()", "0xd05c78da": "safeMul(uint256,uint256)", "0x69953501": "setUtils(address)", "0xff7f5f2a": "EtherizationUtils2()", "0xde4b3262": "setBasePrice(uint256)", "0x6cf9cc58": "registerResource(bytes,uint256,bytes,string)", "0x7ac37d58": "ownerTransferEther(address,uint256)", "0x0121b93f": "vote(uint256)", "0x07b6f631": "testTestHarnessAuth()", "0x869b3f6a": "testThrowsRetractNotOwner()", "0x18253234": "ticketsAvailable()", "0x5581004d": "createThrone(bytes,uint256,uint256,uint256,uint256)", "0x7102c138": "Standard_Token(uint256)", "0xce5566c5": "cash(uint256,uint256)", "0x16a25cbd": "ttl(bytes32)", "0x0c9fcec9": "setApproval(address,address,uint256)", "0xe6d95eb8": "DSAuthorized()", "0x34c0d654": "setPackageDb(address)", "0x0ee79fb3": "closeReferendums()", "0xe2cdd42a": "vote(uint256,address,bool)", "0xd3f297d6": "claimLiquidityReward()", "0xf37b437b": "scheduleCall(address,bytes,uint256,uint256,uint8,uint256,uint256)", "0x2090cf8b": "consultBalance(address)", "0xc9296d14": "scheduleTransaction(address,uint256,uint256,uint256,bytes)", "0x7993e5c2": "Devcon2TokenForTesting()", "0x268bb78e": "propose(address,bytes,uint256,uint256)", "0x2b16b56a": "setIndex(uint256,uint256)", "0x6d15f208": "reject(string,uint256,uint16,address,uint256)", "0xc4ff3614": "Wallet(address[],uint256,uint256)", "0xb47d89ad": "Details()", "0x0ae08793": "confirmAndCheck(bytes32)", "0x061e494f": "getBet(uint256)", "0x314e99a2": "abdicate()", "0xe487eb58": "getOwner(bytes20)", "0x7ee65635": "LookAtDepositsToPlay()", "0x9e9d3aa4": "FirstBloodToken(address,address,uint256,uint256)", "0x4dfd1b02": "setUint8(int8,uint8)", "0x82fbdc9c": "register(bytes)", "0xa8b60b93": "ackMsg(uint256,string)", "0x081e806d": "PayOut(uint256)", "0x8bab8791": "testPkgUpdate()", "0xc262df45": "isKnownRequest(address,address)", "0x4123cb6b": "m_numOwners()", "0x62be3172": "Message(address,address,address,string)", "0x0d368fee": "deverify(address)", "0x5f1231ea": "getMemberInfo(address)", "0xa07daa65": "newRequest(uint256)", "0xa4406bcd": "placeSellOrder(uint256,uint256)", "0x5b7d47a9": "betOnColor(bool,bool)", "0x9c6034a7": "sendIfNotForked()", "0x26a4861c": "CROWDFUNDING_PERIOD()", "0xbaac5300": "createTokenProxy(address)", "0xfc72c1ef": "ERC20Base(uint256)", "0x316b08a0": "scheduleTransaction(address,bytes,uint256[7],uint256)", "0x0b590c6b": "SingularDTVToken()", "0x750e443a": "voteAgainst(uint256)", "0xfc7b9c18": "totalDebt()", "0x7ff9b596": "tokenPrice()", "0xd67cbec9": "release(uint32,uint32,uint32,bytes20)", "0x553cc48d": "Player(string)", "0x579cdf17": "getAdminName(address)", "0x7e1c4205": "query2(uint256,string,string,string,uint256)", "0x54107401": "declareLove(string,string)", "0xea4ba8eb": "getOutcome(bytes)", "0x9b5adea2": "setMinter()", "0x185061da": "undoIt()", "0x90c3a370": "AuctionMaster()", "0xbd02e4f6": "calcRandomNumberAndGetPreliminaryGameResult(uint256,uint64)", "0xbc126ba1": "totalCents()", "0xa3747fef": "register(bytes,bytes)", "0x805210b7": "AmIPlayer2()", "0x4e05ded6": "ClassicCheck()", "0xec2ac54e": "deposit(address,uint256,bytes32,uint256)", "0x49c15bd9": "Purchase()", "0x87bb7ae0": "getTicketPrice()", "0xf2f03877": "commit(uint256,bytes32)", "0x167d3e9c": "SetOwner(address)", "0x5c634241": "CanaryV6()", "0xba15e52e": "getInfo(bytes20)", "0x06c1df7b": "checkBetColumn(uint8)", "0xf7bc39bf": "owns(address)", "0x27b752b8": "sha3HexAddress(address)", "0x5ac801fe": "setName(bytes32)", "0x1ae460e5": "isInPool()", "0x85c7a953": "WithdrawFullBalanceFromBankAccount()", "0x755b5b75": "setNumUnits(uint256,uint256)", "0xaefc8c72": "unsealBid(bytes32,address,uint256,bytes32)", "0xfab43cb1": "getPongAddress()", "0x9e997121": "getConfigAddress(bytes)", "0xda2b7416": "testBitsAndFailIndexOOB()", "0xd0e30db0": "deposit()", "0x4a0d89ba": "getSwap(uint256)", "0x63a9c3d7": "verify(address)", "0x337b1cf9": "setIpfsHash(bytes)", "0xbaf00f76": "removeAllSubUsers()", "0x1b370abb": "getPreviousNode(bytes)", "0x741e2345": "registerMany(address,uint256,int256,uint256,bytes20,address,bytes)", "0xb3760c80": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", "0x73ffd969": "setMap(uint256,uint256,uint256)", "0x50b44712": "tickets(uint256)", "0x6a9d2afd": "playToWinTest(uint256)", "0x644998ae": "maintain(int256,uint256,uint256)", "0x2203ab56": "ABI(bytes32,uint256)", "0x9c67f06f": "registryStarted()", "0x93423e9c": "getAccountBalance(address)", "0x524e4e61": "testDistribution()", "0xa17042cc": "getMsgValue()", "0x4f9d719e": "testEvent()", "0xcbcaacab": "checkTransferWithReference(address,uint256,string)", "0x1bcf5758": "getOccupies(uint8)", "0x1d4b0796": "updateTxStats()", "0xd173707d": "hasPhysicalAddress(address)", "0xa54a2b8b": "testBlockHashFetch()", "0xc51bf934": "CEILING()", "0x0e54b872": "registerUser(string,address)", "0xba51a6df": "changeRequirement(uint256)", "0x6bd92f7c": "activateAllowanceRecord(address,address)", "0x90daaf67": "getMinimalDeposit()", "0x85d5c971": "logTransfer(address,address,bytes32)", "0x8b9e5385": "MeterSlock(uint256,uint256,address)", "0x7bcd7fad": "getRecordAtIndex(uint256)", "0x8e035ac1": "BetOnHashV82()", "0x5dbe47e8": "contains(address)", "0x21bb79fe": "luckyDogInfo()", "0xdd467064": "lock(uint256)", "0xa4beffa7": "increaseInvestment()", "0x8400c307": "isRecipientAllowed(address)", "0x0965bf7d": "processProposals()", "0x4b5dc8cb": "roundMoneyDown3SFExt(uint256)", "0x777feff5": "getCertificationDbAtIndex(uint256)", "0x9462eae5": "ChangeContractor(address)", "0x4c6d1d9e": "checkOutTag(string)", "0x09a399a7": "personAdd(string,int256,int256,string)", "0x31380c89": "TokenSale()", "0xd0bff051": "testSetBalanceDb()", "0x4c738909": "getMyBalance()", "0xb2310cc5": "payRequstedSum(uint256,uint256)", "0xda3c300d": "currentFee()", "0x6ed7c013": "move_monsters()", "0x4f073130": "takeOrder(bool,uint256,uint256)", "0x6860fd58": "Fees(uint256)", "0x214c9d50": "WritedrawStatus()", "0xf314bf46": "setReleaseDb(address)", "0x561a4873": "buyAd(string,string,string,uint256,uint8,address)", "0xf249cf19": "get_all_challenges()", "0xbbed7177": "getContentTimestamp(uint256)", "0xc864e760": "recordCommissionEarned(uint256)", "0x1896f70a": "setResolver(bytes32,address)", "0xfd35e71b": "entryPayoutDue(uint256)", "0x5a58cd4c": "deleteContract()", "0xb29b5366": "setRentable(bool)", "0xad5c613d": "purchase(bytes)", "0x6949a058": "sendOwnerEther()", "0xc03e382f": "calculateShare()", "0xf5bade66": "setDeposit(uint256)", "0x384e5018": "etherandomCallbackAddress()", "0xf06186c7": "testReality()", "0x677342ce": "sqrt(uint256)", "0x10e89b22": "remove_deal(uint32)", "0xf2b445ad": "rowround(uint256,uint256)", "0xd7ed7453": "redeemWinnings(uint256)", "0x92b4bb50": "rps()", "0x089327de": "MyToken()", "0x87ebd76c": "initContract(string,string,uint256,uint256)", "0xdbc45228": "newProposal(address,uint256,bytes,bytes)", "0x6b1feeeb": "get_my_sig()", "0x6837ff1e": "newContract(address)", "0x9f181b5e": "tokenCount()", "0x92ba4ba6": "GridMember(string,uint256,bool,address,address)", "0x45755dd6": "returnFunds(uint256)", "0xb4b9d1f1": "lookup(uint256,uint256)", "0x98024f18": "testThrowsTransferDisableNotEnabled()", "0x9e7b8d61": "giveRightToVote(address)", "0x8112821f": "EthVentures()", "0xe65d6b49": "getCommission()", "0x068c966b": "DrawDetails(uint256)", "0x9bb5239a": "CheckPrize(address,uint256)", "0xff08d2b0": "PayMiners()", "0x9be1fcee": "BankOwner_DisableConnectBankAccountToNewOwnerAddress()", "0x5f972df8": "_jDiv(uint256,uint256,uint256,uint256)", "0xfe8b6642": "setEnforceRevisions(bytes32)", "0xe4cc1161": "seedWithGasLimit(uint256)", "0x5fd4b08a": "getName(address)", "0xaa51793c": "isLosingBet(uint256)", "0x31757f2e": "collisionCount()", "0xe1f5ebc5": "_projectAddNew(address,uint256)", "0x64228857": "getRevisionCount(bytes32)", "0x5ca3400c": "WithBeneficiary(address)", "0x39f4debc": "fillOrderAuto()", "0xcc2c5453": "add_sword(uint16)", "0x0a19b14a": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", "0x4d207d9a": "identify(address)", "0x3e83fe36": "getMyShares()", "0x8bb0faee": "setRef(string,string)", "0x38bbfa50": "__callback(bytes32,string,bytes)", "0xcee6f93c": "getResultOfLastFlip()", "0xbbba3333": "safer_ecrecover(bytes32,uint8,bytes32,bytes32)", "0x8e19899e": "withdraw(bytes32)", "0xd8389dc5": "hash(bytes32)", "0x8a4068dd": "transfer()", "0xea9e107a": "acceptRegistrarTransfer(bytes32,address,uint256)", "0x8f4ffcb1": "receiveApproval(address,uint256,address,bytes)", "0xf67abd87": "entryDetails(uint256)", "0x67acd805": "lowerMinWager(uint256)", "0xec035393": "_getAllRevisionBlockNumbers(bytes20)", "0xbd858288": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", "0x112c7075": "ManualDeposit()", "0xd81a91e9": "get_party2()", "0xc52bd836": "setDappOwner(bytes32,address)", "0xf84f420b": "getRandomNumber(address,uint256)", "0xcfe9a7b8": "getPackageName(uint256)", "0xe97dcb62": "enter()", "0x48db5f89": "player()", "0x6bdbf8e6": "concat()", "0x3c959aca": "CheckTickets()", "0x3aa5f4f7": "changeTokenSettings(uint16,uint256,uint256)", "0xac20902e": "NormalizeMoney()", "0x2fac1d36": "isReadyFor(address)", "0xdcaa5620": "findNextWeekday(uint256,bytes)", "0xf9909915": "bulkStoreHeader(bytes,int256,bytes,int256)", "0xcd2cdd5b": "claimOwnershi()", "0xcfae3217": "greet()", "0xf5c8d71b": "forceMove(address,address,uint256)", "0x9718b524": "newTreasury(address)", "0xd0679d34": "send(address,uint256)", "0x1301ee02": "transferringETC(address)", "0x60eb2826": "Badge()", "0x0d0c2008": "TwoAndAHalfPonzi()", "0x17e1bfb7": "addInstitution(address,string)", "0x06394c9b": "changeOperator(address)", "0x80c951bf": "currentClaimPriceInFinney()", "0xd063f55f": "toLittleEndian(uint64)", "0x53f818d6": "checkBetValue()", "0x9205fbc2": "testAuthorityAuth()", "0x3e4c0c82": "player_1(uint256)", "0xe571c35e": "ReverseRegistrar(address,bytes32)", "0x24804cef": "Deed()", "0x622e88cb": "testBitsXorSuccess()", "0xdfca2f53": "LookAtPrizes()", "0xafa293d4": "getSource()", "0x755f99c2": "AddNewSmallContract(address)", "0x7137ed47": "setProxyContract(address)", "0x835b42fc": "testThrowUpdateLatestRevisionNotUpdatable()", "0xdd34e129": "PriceTest()", "0xedb27f4e": "switchWizard(address)", "0x1c5d9faa": "setNickname(string)", "0x4746cef8": "_confirmAndCheck(address,bytes32)", "0x189c94ae": "testFallbackStaticSig()", "0x0cb749b6": "FutureBlockCall(address,uint256,uint8,address,bytes,bytes,uint256,uint256,uint16,uint256,uint256)", "0x2b25a7e4": "giveKudos(address,uint256)", "0x294f3d4d": "setUpLimit(uint256)", "0x2cce81aa": "getBlockHash(int256)", "0x4cd11943": "NewManualInvestor(address,uint256)", "0x7eaef50c": "over()", "0x8ac4e1d8": "TemperatureOracle()", "0xf108a7d2": "withdraw(uint256,address,string)", "0x00a676f9": "getExists(bytes32)", "0xb8d4efb5": "validate_percent(uint8)", "0xc7489441": "closeMarketMaker(uint256)", "0x3def449b": "FipsNotary()", "0x5687f2b8": "emitApproval(address,address,uint256)", "0xa9f8ec6c": "AlarmClockTipFaucet()", "0xd8e5c048": "scheduleCall(address,uint256,uint256)", "0x135217e7": "requires_depth()", "0x0aa46c12": "testClearBitFailIndexOOB()", "0x77d32e94": "ecrecovery(bytes32,bytes)", "0xace523c4": "createReferendum(string,string,uint256,uint256)", "0x5ca8bc52": "returnIt()", "0xdb318833": "_ecAdd(uint256,uint256,uint256,uint256,uint256,uint256)", "0x623195b0": "setABI(bytes32,uint256,bytes)", "0xd7bb99ba": "contribute()", "0x2880ebe7": "underdogPayoutMarkup()", "0x4ce01d86": "totalBetValue()", "0x837a7ba5": "testThrowTransferDisabled()", "0x386fcda8": "testCreateCostToken()", "0x0e850239": "scheduleCall(bytes4,bytes)", "0x163aba3c": "getQueryFee()", "0x9941e3d0": "setCallAddress(address)", "0x23637e60": "votePrice(uint256,bool)", "0xde78e78a": "tokenLaunched()", "0xe3579ea5": "publish(string,string,address,uint256)", "0x59a547b0": "recordCommission(uint256)", "0x1aa86370": "updateXIPFSPublicKey(string)", "0x97fcb54e": "transfer_eth(address,uint256)", "0x05d2f92a": "check_depth(address,uint256)", "0xdfcbb794": "TrustFund(address,uint256,address)", "0xb7dd1d17": "getAllRevisionBlockNumbers(bytes32)", "0x75862df4": "TokenWithEStop(address)", "0xd22057a9": "register(bytes32,address)", "0x29d017b5": "TestWithConstructor(address,uint256[])", "0xd216d55d": "etherandomExec(bytes32,bytes32,uint256)", "0xfba06849": "fipsPublishDataMulti(bytes20[],bytes)", "0xa37fd390": "setHomeAdv(uint256,string)", "0xcf2e3efc": "GetBankAccountBalance()", "0x423e7e79": "_dispatchEarnings()", "0x74087040": "testBitsNotEqualSuccess()", "0x61d585da": "state(bytes32)", "0xcfb3a493": "getMyBounty(uint256)", "0x5afeb106": "Sqrt()", "0xf9e84395": "unexempt(address)", "0x5669c94f": "issueToken(address,string)", "0x19b05f49": "accept(uint256)", "0x3ae01f84": "USDOracle()", "0x8c172fa2": "getEvent(bytes32)", "0x4671e65e": "proposeEmergencyWithdrawal(address)", "0xc27d7721": "create(uint256[101][])", "0x5c52e51e": "processPayout()", "0xf7a0fa0a": "getShareDistribution(bytes)", "0x31a3a506": "closeFunding()", "0x465e759b": "testRestart()", "0xb60d4288": "fund()", "0x52200a13": "getNumHolders(uint256)", "0xf2c298be": "register(string)", "0x7bc25372": "UserCheckBalance(address)", "0x104d5fdd": "getPriceProxy()", "0x447cd682": "scheduleTransaction(address,uint256)", "0xa045fdff": "scheduleCall(address,bytes)", "0x4757f1d2": "redeemAllOutcomes(uint256,uint256)", "0x5e855f14": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x5d3c1d4c": "_getRequest(uint256)", "0x416c8701": "beyond()", "0x63aea3e0": "PlayerInfo(uint256)", "0xa163a624": "Test()", "0xedede601": "testBalance()", "0x13651124": "WithdrawAmountFromBankAccount(uint256)", "0x893d20e8": "getOwner()", "0x90b5561d": "insert(uint256)", "0xf9983a12": "GetMyInvestmentBalance()", "0xb71c47a2": "surrender()", "0xf2a75fe4": "empty()", "0x804ba97a": "tryGet(bytes)", "0x6506b623": "rotateBitsLeft(bytes,uint256)", "0x3ef8ec78": "announce_numbers(uint8,uint8,uint8,uint8,uint32,bytes32)", "0x73abecbb": "kill1()", "0xd5171523": "euroteambet()", "0x8e52cb51": "getRecordKey(bytes,bytes,bytes)", "0x7adbf973": "setOracle(address)", "0x4aa16737": "enter(uint8)", "0xf0cb556c": "updateLatestRevision(bytes32,bytes)", "0xbc8fbbf8": "nuke()", "0xc8e55708": "oraclize_query(string,string[1])", "0x7332b520": "getRewardsCount(uint256)", "0xf7c2b38c": "seconds_left()", "0xba344743": "_rawTransfer(address,address,uint256)", "0xcab5c0f1": "_incrementState()", "0xe044c2de": "newLoan(bytes,address,uint256,uint256,uint256,uint256,uint256,uint256)", "0x76abc03b": "getShareDistribution(uint256)", "0xf0da84f8": "getTransferable(bytes32)", "0xcde99727": "calculateROI()", "0x155dd5ee": "withdrawFunds(uint256)", "0x8b543b80": "maximumCredit(address)", "0x340ddda6": "MeatConversionCalculator(uint256,uint256)", "0x524f3889": "getPrice(string)", "0x84054d3d": "cashout()", "0x856f3080": "WhatWasMyHash(bytes32)", "0x0386a016": "closeProposal(uint256)", "0xcebce72d": "token(uint64)", "0x7f480f9d": "processDividends(address)", "0x11d12402": "testEasyPropose()", "0x2f695053": "getCertifierAtIndex(uint256)", "0xd9fcb31f": "comm_channel()", "0x141c4e60": "challenge(uint256,address)", "0x4ff13571": "x2()", "0xa01bc729": "monster_attack(uint256)", "0x2fe9541f": "addIssueBounty(string,uint256)", "0x5503a659": "smallponzi()", "0xdfc765dc": "getMatchers_by_index(uint256)", "0x0b7623ba": "abs(int8)", "0xcde0a4f8": "setRegulator(address)", "0xf95b5a58": "getInitialAnswer(uint256)", "0x66b42dcb": "register(address,string,uint256,string)", "0x9f2ce678": "vote(bytes32,bool)", "0xb3559460": "getGenerationSize(uint256)", "0x5ddae283": "transferRegistrars(bytes32)", "0x59dc735c": "getClient()", "0xc258ff74": "List()", "0x4fb4bcec": "step5()", "0xed684cc6": "trigger(uint256)", "0x09405164": "getOpenCandidates()", "0x5c5d625e": "getProof()", "0x9f5f7c7f": "tokenSplit(address,address,address,uint256)", "0x0e38901a": "unvault(uint256)", "0x75160a20": "pay_royalties()", "0x15398afe": "compareNumericStrings(string,string)", "0xbbd8b602": "getOracleOutcomes(bytes,address[])", "0xebae35a6": "DAOTokenCreationProxyTransferer(address,address)", "0x15abc160": "createValidatedRequest(address[3],address,uint256[11],uint256,bytes)", "0x830953ab": "claimAmount()", "0x26b916b4": "Set_Interest_Rate(uint256)", "0x1fb291cb": "registerInt(address,int256)", "0x505fb46c": "add(uint256,uint256,uint256)", "0xf00d4b5d": "changeOwner(address,address)", "0x034187fd": "setEthToCents(uint256)", "0x94d9cf8f": "CreateProxyWithControllerAndRecovery(address,address[],uint256,uint256)", "0xacbf98a7": "endsWith()", "0xfc2c3e08": "getIteration()", "0x6d7da0b1": "MyContract()", "0x1558ae4d": "Etheroll()", "0x42cbb15c": "getBlockNumber()", "0x29cd62ea": "setPubkey(bytes32,bytes32,bytes32)", "0x2030f721": "num_objects()", "0xbc08afd9": "WebOfTrustToken(address,uint256)", "0x8cdfb1e6": "transferIfHF(address)", "0xa0bd3c0f": "scheduleCall(address,bytes,bytes,uint256)", "0x4e71e0c8": "claimOwnership()", "0xc1cc0775": "calculateFeeDynamic(uint256,uint256)", "0x50c42921": "replicate()", "0x25495998": "getMinimumConsumerDeposit()", "0x3d8e2947": "getFileAddress(bytes)", "0x1f794436": "getBlockHeader(int256)", "0x7d380265": "addOptionChain(uint256,string,uint256,uint256,bytes32,address,int256[])", "0xec0b4153": "getMoneyness(int256,uint256,uint256)", "0x01775f23": "_closeBooks()", "0x9d063ed8": "FIFSRegistrar(address,bytes32)", "0x083b2732": "callback()", "0xa1920586": "offer(uint256,uint256)", "0x19c47214": "getBlockVersion(bytes)", "0xa293d1e8": "safeSub(uint256,uint256)", "0xfe73e3ec": "preliminaryGameResult(uint64)", "0xf004b12b": "CrowdFund(uint256,uint256,address)", "0x54d03b5c": "changeFeeMake(uint256)", "0x9dbc4f9b": "participantDetails(uint256)", "0xd002462b": "setDeploymentFee(uint256)", "0xed2b8e0b": "getPoolRotationDelay()", "0xf697a0ed": "ppb(uint256,uint256)", "0x964c836c": "receiveExecutionNotification()", "0x5e0e2957": "dumpOut()", "0x33232609": "blake2b(uint64[],uint64[],uint64)", "0x88f53db1": "getDataRequest(uint256)", "0x0caf9d39": "testFailTooManyMembers()", "0x1f2e886c": "testControllerTransferTriggersEvent()", "0x586a69fa": "getMaximumStackCheck()", "0xf64fca2e": "getNodeId(bytes)", "0x8b95ec0c": "testAddBalance()", "0x32e7c5bf": "B()", "0x57e6c2f4": "isAuthorized()", "0xb2f2588b": "sortNumbers(uint8[3])", "0xe95bee59": "checkFormat(string)", "0xcef887b0": "storeBlockWithFee(bytes,int256)", "0xbe26733c": "Kill()", "0xe82f7dd4": "testThrowsRetractLatestRevisionNotUpdatable()", "0xfd7ac203": "TestToken()", "0x6d052f56": "testBitsSetSuccess()", "0xf65c4d42": "Participate(uint256)", "0x432c685f": "trustClient(address)", "0xb0171fa4": "getCurrentGenerationId()", "0x03251a08": "setMin(uint256,uint256)", "0x58d3b617": "Notifier(string)", "0x15dacbea": "transferFrom(address,address,address,uint256)", "0x83f7b8e1": "getNumberOfPhotos()", "0xf1076703": "getVerificationId(address,bytes,bytes)", "0x752a3df6": "transferIfHardForked(address)", "0xaf93afdd": "Shipment(bytes,bytes,bytes,bytes,string,bytes,uint256,uint256,bytes,bytes,uint256,uint256,string,bytes,bytes,bytes)", "0x7fcf532c": "Withdrawal(address,uint256)", "0x72ea4b8c": "getNumInvestors()", "0x7df52ba8": "Arbitrate(uint32,uint32,bool)", "0xea25f24a": "TokenCreation(uint256,uint256,address)", "0xf74100e3": "getBits(bytes)", "0x63bfe3d8": "SkillBeatsLuck()", "0x80599e4b": "remove(string)", "0x6c050eae": "look()", "0xf9a794ad": "EtherLovers()", "0x501e8428": "getPart(bytes,uint256)", "0xf446c1d0": "A()", "0x2d67bb91": "World()", "0xeef547d7": "deal_details(uint32)", "0xa6cb9e64": "scheduleCall(address,bytes,bytes)", "0x659010e7": "m_spentToday()", "0x9b0b9c07": "acceptBankDraft()", "0x315e2f1b": "setTestString(string)", "0x69bcdb7d": "getCommitment(uint256)", "0xe1376da2": "updateFirstActiveGamble(uint256)", "0xc70d169d": "answerRequest(uint256,bytes)", "0xa094a031": "isReady()", "0x74e60a48": "cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "0x1b5ee6ae": "mintToken(int256,address,uint256)", "0x7f791833": "toTimestamp(uint16,uint8,uint8,uint8)", "0x5e6ad49d": "_setCosignerAddress(address)", "0xb2e85b67": "getPlayerStatus(address,uint256)", "0x30a24abd": "create(bytes4,bytes)", "0x9f0e3107": "get_timestamp(bytes32)", "0x33397816": "withdrawAccountBalance(address)", "0x0da3e613": "EthFactory()", "0xa5f3c23b": "add(int256,int256)", "0xc1829a14": "testFailTooFewConfirms()", "0x5322f0c5": "getChannelOwner(bytes)", "0x0fd1f94e": "firstClaimBlock()", "0x639d57f2": "testGetBitSuccess()", "0xd3aa22c7": "transferTLA(string,address)", "0x86314af9": "BetOnHashV84()", "0x3059ac30": "Escrow(address,address)", "0x0efafd01": "getPlayerGainLossOnLastFlip()", "0x49bf66d3": "addRegistryIntoNameIndex(address)", "0x3af39c21": "undefined()", "0xb660d77c": "switchMPO(address,address)", "0x0fdb468f": "fee(uint64)", "0x72479140": "CreateTicket(address,uint8,uint8,uint8)", "0xe79a198f": "unregister()", "0x688dcfd7": "setProofType(bytes1)", "0xfb9a4595": "GitHubBounty()", "0xd02a9889": "getDateOfFirstPayment()", "0xca35271c": "numDebtors(address)", "0x08714bfa": "TestContract()", "0x16d960b5": "createThing(bytes32[],bytes32[],uint88)", "0x17961d0f": "ord()", "0x62ba9687": "toTimestamp(uint16,uint8,uint8,uint8,uint8)", "0xbba91ea7": "getHomeadvIndex(uint256)", "0xb45105b2": "post(string,address,string)", "0xa7e25683": "testShortOutput()", "0xa068e8d3": "convict(uint256,uint256,uint256,uint256)", "0x09a69f57": "getRewardAmount()", "0xe7334156": "processNextDeposit(address)", "0x62ee6d29": "changeHashtoLowOrHigh(uint256)", "0xa80d4e9a": "EtherAuction(uint256)", "0x18489f50": "thingExist(bytes32[])", "0x5323c6cf": "calcCostsBuying(bytes,uint256,uint256[],uint8,uint256)", "0x9a777d5d": "buyCoins()", "0x36344022": "testAuthorizedTransfer()", "0x8b863095": "setContractorProposal(uint256,bytes)", "0xd10e99fe": "mint(int256,bytes32)", "0x12c82bcc": "sendRobust(address,uint256)", "0x0bf75567": "voteSuperQuorum(uint256,bool)", "0xf5f6ea26": "EthOne()", "0x14918f5e": "performInitialWithdrawal()", "0xdf32754b": "owned()", "0x1632070c": "setRewardDivisor(uint256)", "0xe50a3bb1": "oraclize_query(string,string[],uint256)", "0x9b619d3b": "_deleteAllPackedRevisionBlockNumbers(bytes32)", "0x3b751f7f": "claimThroneRP(string)", "0xd55ec697": "upgrade()", "0x43703b0e": "getEventData(bytes)", "0xd1bf9aba": "nextRune()", "0x76849376": "addNode(bytes32,address)", "0xfd958695": "isAlphaNumeric(bytes1)", "0x9fa5e5d5": "setARKowner(address)", "0x6e2cde85": "drawPot(string,string)", "0x4d5b080c": "scheduleTransaction(uint256,address,uint256)", "0xf1e4a540": "unsetCoordinator()", "0x364f4896": "emission(address,address,uint256,uint16,uint16)", "0x9183fd01": "getSeedPrice()", "0x9832ee65": "resultsWeightedByTokens()", "0xdd5244b4": "testTryProxyCallWithValue()", "0xec2ec781": "testFailGetUnsetToken()", "0x7db9743b": "Registry()", "0x1adf2d1a": "Offer(address,address,bytes,uint256,uint256,uint128,uint256)", "0x1ba326c4": "calcShare(uint256,uint256,uint256)", "0x3ced842b": "make_offer()", "0xea295ec2": "calcRevenue(address)", "0x3c894475": "scheduleTransaction(address,bytes,uint8,uint256[6],uint256)", "0x477bddaa": "setContractAddress(address)", "0xed180443": "getUint256(int256)", "0xee725d44": "toChannelID(string)", "0xa4898fd5": "deployContract(address)", "0x75ee85bd": "salsa20_8(uint256,uint256)", "0xbe7c29c1": "getNewDAOAddress(uint256)", "0xfe01f1ff": "TokenTester()", "0x6103d915": "Winners(uint256)", "0xa30b5c69": "AttributeModel()", "0x81064e2d": "getCreditorAmounts()", "0x23584a21": "initStats(string,address,uint256)", "0xe2894a8a": "OwnerAnnounce(string)", "0xa84c5330": "createNewRevision(bytes20,bytes)", "0xb742398b": "trade(address,uint256,bytes,address,uint256,bytes)", "0x3211bb90": "OwnerAddFunds()", "0xa0befa94": "getStake(uint256,uint256)", "0x6dc3edcf": "executeExecutable(uint256,uint256)", "0x17e875e3": "Transparancy()", "0x6939864b": "lotteryState()", "0x3b107682": "DualIndex()", "0x51b3d7b9": "_transferWithReference(address,uint256,string)", "0xdf7cec28": "cancelBid(bytes32)", "0x1e74a2d3": "getMinimumEndowment()", "0x39b333d9": "Play(uint8,uint8,uint8,uint8)", "0xcbd08c8c": "config(uint256,uint256,uint256,uint256)", "0xca6ad1e4": "setCustomGasPrice(uint256)", "0x510f44cb": "TestFactoryUser()", "0xcee6ee38": "aEthereumlotteryNet()", "0x11610c25": "bet()", "0xb73405a9": "roundMoneyDownNicely(uint256)", "0xb8851fea": "endDateStart()", "0xa4325485": "getCreatorBalance()", "0x2c181929": "getChainWork()", "0xffb4c857": "_confirmAndCheck(bytes32)", "0x9e66cd38": "free(uint64)", "0x44e43cb8": "depositRevenue()", "0xa553a597": "configure(uint256,uint256,uint8,address)", "0xc47f0027": "setName(string)", "0x565a2ecf": "classicTransfer(address)", "0x1da0fb1b": "updateSettings(uint256,uint256,uint256,uint256,uint256,bool)", "0xa5ebf389": "getMoneyTotals()", "0x7f445c24": "subRegistrar(string)", "0x9ad4f98e": "BlocksureInfo()", "0xd6b4ec12": "getDailyWithdrawalLimit()", "0xe0886f90": "at(uint256)", "0x5dc77e26": "andThen(string,address)", "0xe7d50e5c": "FarmShare()", "0x3f2965f0": "registerSeller(address)", "0x85b73d3c": "testCreateNewRevision()", "0x49437210": "getUpdatable(bytes32)", "0xe1a9109d": "setSeedPrice(uint256)", "0x95978868": "strConcat(string,string,string,string,string)", "0x511b1df9": "addr(string)", "0xc5b1d9aa": "newRound()", "0xecf6eb22": "setConfigAddress(bytes,address)", "0x9a9c9c53": "DepositToBankAccount()", "0x27ea6f2b": "setLimit(uint256)", "0xd2dc0869": "add(string,uint256,string,string,address)", "0xc86a90fe": "sendCoin(uint256,address)", "0x5dfc2e4a": "noop()", "0xd81e8423": "get(address,address)", "0x4cad42d3": "testWager()", "0xd120a284": "getBytesFromNumbers(uint8[3])", "0x991ffd4e": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8,uint256)", "0x60c311fd": "doBurnFromContract(address,uint256)", "0xbb6a0853": "GreedPit()", "0xc27b2c2d": "collectEarnings()", "0x446294ad": "multiAccessGetOwners()", "0x5bec9e67": "infinite()", "0x47e7ef24": "deposit(address,uint256)", "0x8d216186": "roll(uint256,bytes32)", "0xdf300b46": "getThing(bytes32[])", "0x5a6c787e": "updateWithMPO()", "0x1f2dc5ef": "divisor()", "0x421aeda6": "Set_your_game_number(string)", "0xba1162d7": "getFmLength()", "0x853255cc": "sum()", "0x20768ee8": "getProposalID()", "0xf5c57382": "nameOf(address)", "0x4e417a98": "callData()", "0xc90d080a": "registerEvent(bytes)", "0x0b1e400a": "_transferFromToICAPWithReference(address,bytes32,uint256,string)", "0xe420264a": "g(uint256)", "0x8a00a82f": "withdrawRewardFor(address)", "0x06638e92": "GetNumbersFromHash(bytes32)", "0xf63da25b": "Emailer()", "0xc01706dd": "getContentByRank(address,uint256,uint256)", "0xe1108706": "rfind()", "0xffd10e07": "enterPool(address)", "0xc4254c7b": "CoreWallet()", "0x30e0789e": "_transfer(address,address,uint256)", "0x992ae976": "isSafePunctuation(bytes1)", "0x4afce471": "test_requires_depth(uint16)", "0xda7fc24f": "setBackend(address)", "0xeb7402f5": "multiAccessHasConfirmed(bytes32,address)", "0x6c1a5b8c": "TOKEN_TARGET()", "0xb3a2a999": "nextWithdrawal(bytes16)", "0x4a420138": "scheduleHeartbeat()", "0xb1233451": "setTerm(uint256,string)", "0x266710ca": "manualUpdateBalances_only_Dev()", "0x98866c1a": "personUpdateDOD(uint256,int256)", "0xaa6be303": "debtors(address)", "0xda5c0a7c": "testDisown()", "0x8757a2cd": "test_depth(uint256,uint256)", "0xe1bedf2a": "AlarmTester(address)", "0x5dcbac7a": "registerBytes(address,bytes)", "0xa587da29": "setPackage(bytes,uint8,uint8,uint8,bytes)", "0xc3da42b8": "c()", "0x4b8772c1": "buyUnit(uint256,uint256)", "0x67f12ecf": "validate(address,uint256,uint256[101][])", "0x0bd089ab": "MyAdvancedToken(uint256,string,uint8,string,address)", "0x32829a23": "OpenBankAccount()", "0xdea06188": "NumberOfBlockAlreadyMined()", "0x61e539da": "testFailWrongAccountTransfers()", "0x8a3e44d4": "assetMoveInformation(address,address)", "0x1327d3d8": "setValidator(address)", "0x207c64fb": "validate(address)", "0x80acaafb": "profitDistribution()", "0x90b98a11": "sendCoin(address,uint256)", "0x8b147245": "update(bytes32)", "0x920c94df": "BuyTicketForOther(address,uint8,uint8,uint8)", "0x6f698fb5": "setMinimumQuorum(uint256)", "0xac5e81a9": "historyPayout(address)", "0x70d084c0": "SingularDTVCrowdfunding()", "0x67ce940d": "getOverhead()", "0x7a791524": "setNextFeePercentage(uint8)", "0xd6d902c4": "claimThroneFor(bytes,address)", "0xc71e48d6": "setOutcome(bytes32,bytes32[])", "0xef41e06f": "testThrowSetEnforceRevisionsNotOwner()", "0x70be4ffa": "testErrorUnauthorizedSetPackage()", "0x6d12301c": "getBetValue(bytes32,uint8)", "0x4e69d560": "getStatus()", "0x55234ec0": "remaining()", "0x5cfd8c24": "ResetPonzi()", "0xe29fb547": "scheduleCall(bytes4,uint256,uint256,uint8,uint256)", "0xbd119967": "add_rating(uint256,uint256)", "0x966acb38": "testThrowTransferNotTransferable()", "0x5c665f89": "getFunds(address,bool)", "0xa59d6986": "recoverLostFunds()", "0x403abbc7": "updateFirstActiveGamble()", "0x0230a07c": "releaseDeed(bytes32)", "0x2d116186": "deityBalance()", "0x602acca1": "InchainICO(address[],uint256)", "0xd393c871": "register(string,address,uint256)", "0xe0fe075e": "payoutReady()", "0xf3e3c629": "testBalanceOfStartsAtZero()", "0x48cd4cb1": "startBlock()", "0x669459a7": "removeRegistryFromOwnerIndex(address)", "0x74d89c47": "testUpdateNameDb()", "0x182db370": "getWhatHappened()", "0xf363441f": "getCreatorDotBalance()", "0x6896fabf": "getAccountBalance()", "0xb29a0308": "logAnonymous(bytes,bytes,bytes,uint256)", "0x3023d0c4": "Ethstick()", "0x1077f06c": "makeClaim(uint256)", "0x8a519fb9": "BlockChainEnterprise()", "0xbffbe61c": "node(address)", "0xe20bbd8d": "RecoveryWithTenant()", "0x03bda14e": "raiseMaxNumBets(uint256)", "0xe1041d86": "__throw()", "0x3d79d1c8": "bal()", "0xbd3f0965": "AiraEtherFunds(string,string)", "0xc388cca6": "testBitAndFailIndexOOB()", "0x921f98bb": "resolveFailVote()", "0x4bbb216c": "_target(address)", "0x10922cc1": "testTransferCost()", "0xeceb2945": "checkProposalCode(uint256,address,uint256,bytes)", "0x3df4ddf4": "first()", "0x21a49ec2": "LCoin()", "0x6d1f00a6": "ThroneMaker(uint256)", "0xcaed4f9f": "DataService()", "0x5cff876b": "carrotsCaught()", "0x3a7fb796": "mintGreen(int256,address,uint256)", "0x370b6939": "AdminSetDrawer(address)", "0x2d9a37d3": "getMaxPayout()", "0x739f888c": "setNewEstimate(int256,int256)", "0x04dd69fa": "getGenerationIdForCall(address)", "0xb764e273": "failSend()", "0xd4dfadbf": "getMarket(address)", "0xa0e67e2b": "getOwners()", "0x2d592a34": "sellKissBTC(uint256)", "0x8a341c83": "testErrorRootAuthorityChangeUnownedPackage()", "0xfcc6b5d5": "fillTheirOrder(address)", "0x61649472": "getPoolFreezePeriod()", "0x3dd297da": "safeMultiply(uint256,uint256)", "0x5d3278f0": "LooneyFifty()", "0x7399646a": "theRun()", "0x3e450fff": "adminDeleteAccount()", "0x93cc9162": "taskRejected(uint256,uint256)", "0xbc5d0f65": "beginExecution()", "0x1934d55a": "isPermanentlyApproved(address,address)", "0xf1cff4b5": "testBitsNotSetSuccess()", "0xf240f7c3": "dispute()", "0xf6d5959b": "getActionStatus(uint256)", "0x0f23cbaa": "recycle()", "0x74f8d96e": "getRevisionBlockNumber(bytes20,uint256)", "0x0bad342a": "EscrowContract(address,address,address,address,uint256,uint256,uint256,uint256)", "0xa6afd5fd": "getBets()", "0x84ad6ff3": "ReversibleDemo()", "0x62b3b833": "createCoupon(string)", "0x523ccfa8": "isKnownCall(address)", "0xacc8cb18": "pushTerm(string)", "0xa753d6f2": "CreateProposal(string,string,string,string,string,string,uint32,uint32)", "0xc5699d68": "_compare(int256,bytes,int256)", "0xe2faf044": "createDAO(address,uint256,uint256,uint256)", "0xa15afb48": "Replicator()", "0x352d2790": "UUID4()", "0x7dee2cad": "CancelMyInvestment()", "0xbeabacc8": "transfer(address,address,uint256)", "0x674f220f": "previousOwner()", "0x4b3b6168": "SetNewBigContract(address)", "0x54ba7daa": "enter(bytes,bytes)", "0x06fdde03": "name()", "0x5944427b": "getRequestResult(uint256)", "0x983ef725": "getDifficulty(uint256)", "0x9287c877": "getNavLength()", "0xa987d654": "restoreItem(uint256)", "0x05433a26": "GetNumbersFromHash(bytes)", "0xd04bfc9c": "buyer_pay()", "0x4a9b3f95": "personUpdateName(uint256,string)", "0xe6b972f5": "userName(address)", "0x88782386": "UnicornMilk()", "0x74580e2f": "changeCreator(address)", "0x1785f53c": "removeAdmin(address)", "0xad544dcb": "testSetNotUpdatable()", "0xafd09bab": "quadrupler()", "0x77bc222c": "_eraseSingleNode(bytes32)", "0x09957e69": "newSale(bytes,uint256,uint256)", "0xa21931ea": "CreateProposal(string,string,string,uint32,string,string,string,uint32,uint32)", "0xbb6b4619": "SendETC(address)", "0x3aa94b1d": "getCoinStats(uint256)", "0x9e2262f5": "testCreateCostData()", "0x2bf4e53d": "getCurrentShareholders()", "0x6111dd02": "calcCostsSelling(uint256,uint8,uint8,uint256)", "0x6b9b1006": "TransactionRecorder()", "0x83b23b40": "cEthereumlotteryNet()", "0x770c6cbb": "WithDrawPreForkChildDAO()", "0x67080f6e": "testThrowsSetEnforceRevisionsNotOwner()", "0xa10bee85": "_transferFromWithReference(address,address,uint256,string)", "0x49cc954b": "twoYearsPassed()", "0x88c3ba85": "ParallelGambling()", "0x03985426": "getMode(bytes32)", "0xad8ed335": "__proxy(address)", "0x306387a4": "dealStatus(uint256)", "0x0343dfa0": "checkInvariants()", "0x23df9df5": "_refund(uint256)", "0x837e7cc6": "rollDice()", "0x98b1e06a": "deposit(bytes)", "0xa0440426": "purchaseProduct(uint256,uint256)", "0x4cb71b9b": "getAllReleaseHashes()", "0x3a7d280c": "login(string)", "0xb9a904f9": "testUnauthorizedSetBetaPackage()", "0xe94a4db1": "isSuitableGen(uint256,uint256)", "0x60f8af90": "refundRound()", "0x43bf718e": "getHashOfTheProposalDocument()", "0x4a30f976": "censorship(uint256,bool,bool)", "0x47e46806": "toString()", "0x8d59cc02": "register(address,string,string)", "0xb3fb14ad": "getGameResult()", "0x4a23dc52": "FileStore()", "0x8da5cb5b": "owner()", "0x3cc8daf7": "setNameOwner(bytes,address)", "0x14cbdb54": "EspCoin()", "0xc47cf5de": "getAddress(bytes)", "0x71e11354": "updateRegistration(string,string)", "0x8b2e6dcf": "publish(bytes32)", "0x12d00c2e": "soloWithdraw(uint256)", "0xd68199dc": "gameStats()", "0xf0f967e8": "canCall(address,address,bytes)", "0xe0c7c117": "Randao()", "0xddeae033": "claimFor(address)", "0xcec7260b": "move_monster(uint16,uint16)", "0xe51ace16": "record(string)", "0x4f76cb02": "testGetBitFailIndexOOB()", "0x942385eb": "getPayroll()", "0x46d667db": "setBytes32(bytes)", "0x35a063b4": "abort()", "0xb1d51d31": "pay(uint64,address)", "0x7140bdf3": "get_all_best_offers()", "0x0380e2f3": "getHashOfTheSignedDocument()", "0x2feda2fa": "POI()", "0x3c0870ae": "challenge(uint256,uint256,uint256,bool)", "0x27a5c7c6": "voteDecline(uint256)", "0xafd8c8c4": "GasProxy(address,address)", "0x8de93222": "purchase(address,uint256)", "0x087e055a": "getConfigBool(bytes)", "0xbaccc92b": "RegulatorIfc(address)", "0x8c546f81": "GNT()", "0x57cb2fc4": "getInt8()", "0xe3083fb5": "removeFromContribution(uint256)", "0x1a092541": "getDescription()", "0x7486a8e3": "get_publisher(bytes32)", "0x089e0ad0": "buildDSMap()", "0x29161820": "Base(uint256)", "0xe2f8feb2": "internal_tester(int256)", "0x1d2dbb22": "CancelMyInvest()", "0x726ab4ef": "getParentHash(bytes)", "0x83d8a90f": "theDonkeyKing()", "0x9babdad6": "removeShareholder(address)", "0xdeb931a2": "getOwner(bytes32)", "0x90cb04e1": "buy(string,uint256,uint16)", "0x2ff92323": "oraclize_query(uint256,string,string[4])", "0xf91a792e": "decryptHand(string,uint256,uint256,uint256)", "0xebf6e91d": "hit(uint256)", "0xb085b9a5": "Example()", "0x07b2779f": "BasicRegulator(address,uint256,uint256)", "0xe10e5dce": "_build(bytes)", "0x3e239e1a": "getHour(uint256)", "0xacc5a0dc": "GetPrize()", "0xa79deb4f": "acceptTradeDeal()", "0xd7c26adb": "oraclize_setProof(bytes1)", "0xc6a17d2b": "pow10(uint256,uint8)", "0xa87d942c": "getCount()", "0xe706918c": "testToggleBitSuccess()", "0xc1812b15": "reorganizeOwners()", "0x7c7c7695": "getAccountID(address)", "0x1a26ed1c": "validateReservedWindowSize(uint256,uint256)", "0x87393bc6": "verifyFirstHalf(uint256[4],uint256[4])", "0x2e52d606": "n()", "0x2037fcbf": "withdrawInvestment(uint256)", "0x77228659": "query2(uint256,string,string,string)", "0xf67a1d37": "BlockChainChallenge()", "0xc67146a5": "check_bet(uint256,address,uint8)", "0xc89f2ce4": "funds()", "0x58e29e17": "initiateProof()", "0xf0e10c0d": "play(address,uint256)", "0x480b70bd": "scheduleCall(address,bytes4,uint256,uint256)", "0x5294157f": "sendWithAllOurGasExceptExt(address,uint256,uint256)", "0xad447a19": "getBalanceDB()", "0x41095b60": "voteForUltimateOutcome(bytes,uint16)", "0x5521d17b": "betOnColor(bool)", "0xc8f8d75d": "Config(uint8,address)", "0x10ae4ce2": "setReleaseValidator(address)", "0x9fd4f7d1": "replaceWizard(address)", "0x77c78df9": "getCurrentLevel()", "0x1dda5c7d": "testFailSubBalanceBelowZero()", "0x21e5383a": "addBalance(address,uint256)", "0xb0414a2d": "setMinimumGasLimit(uint256)", "0x919840ad": "check()", "0xf651bf44": "move_to(uint16)", "0x0b97bc86": "startDate()", "0x29f1bff4": "withdrawFromChildDAO(uint256)", "0x7a02dc06": "getInfo(bytes32)", "0xe5bf93b9": "balanceEther(uint256)", "0x288c6ed2": "getSeedCost(uint256)", "0x4db3da83": "scheduleCall(bytes4)", "0x270cfee1": "getTokenAccount()", "0xb5d03751": "YoutubeViews()", "0x27e056a5": "addMinter(int256,address)", "0xfa7d68f1": "getAccountInfo(uint256,uint256)", "0x09fc8f6d": "isTokenUpgraded(bytes32)", "0xa5b9e922": "getContentTimetamp(uint256)", "0x1f8947c1": "extractUint(int256,bytes,uint256,uint256)", "0xbcc941b6": "totalWinners()", "0x1db71ffb": "doLoops(uint256)", "0x35ae41c9": "godAutomaticCollectFee()", "0x42cf0e72": "searchByOwner(address)", "0x69f18967": "testSetBitFailIndexOOB()", "0x57b07cd9": "getReleaseHash(uint256)", "0x2baf4f22": "_safeFalse()", "0x3133f2a7": "outstandingBalance()", "0x773c84ee": "exec(address,bytes,uint256,uint256)", "0x9070b18d": "_getAllRevisionBlockNumbers(bytes32)", "0x476e04c7": "NewMessage(string)", "0x3b91ceef": "setMax(uint256,uint256)", "0xe6cb9013": "safeAdd(uint256,uint256)", "0xc2038560": "setOutcome(bytes,bytes)", "0xbed34bba": "compareStrings(string,string)", "0xba8661a2": "TimestampScheduler(address)", "0x4c4aea87": "getReleaseData(bytes32)", "0x1177892f": "getBalanceByAdress(address)", "0x126a710e": "dnsrr(bytes32)", "0x60913244": "botOnSale(uint256,uint256)", "0x5731f357": "oraclize_query(uint256,string,string,string)", "0x3e58c58c": "send(address)", "0x2187a833": "setGreenToken()", "0x5f09952e": "voteAllowTransactions(bool)", "0xf2b26d8f": "nextEtherForSale()", "0x1f201e39": "etherandomExecWithGasLimit(bytes32,bytes32,uint256,uint256)", "0x43d726d6": "close()", "0x6cdf4c90": "ownerSetMinBet(uint256)", "0xe6e8c692": "computeResponseFirstHalf(uint256,uint16)", "0xd1d80fdf": "setAddr(address)", "0x6da1833c": "getInstitutionByName(string)", "0x7682e6ff": "getTrustSetting(address)", "0x8f6f988c": "setUltimateOutcome(bytes)", "0xe299beb3": "SimpleIndex()", "0xa2bb5d48": "get_username(address)", "0x780900dc": "create(uint256)", "0x78710d37": "seven()", "0x2b20e397": "registrar()", "0x4094ef5e": "addDataRequest(string)", "0xc630f92b": "canEnterPool()", "0xdd114c22": "publish(address,uint256,address,uint256)", "0x57006864": "checkBetParity(uint8)", "0x45788ce2": "prev(address)", "0xee8ff562": "setMaxProfit()", "0xdc63a62c": "getFileListHead()", "0x9447fd0a": "until()", "0xb303dcbd": "Owned()", "0x0ecaea73": "create(address,uint256)", "0x20339891": "addGridMember(address)", "0xc8c01a55": "request(address,uint256)", "0x76f10ad0": "getSnapshot(uint256)", "0xc06c4474": "get_burned(bytes32)", "0x67cb61b6": "getChoice()", "0xca708230": "funnel()", "0x08b7fa31": "PriceFeed()", "0xac6bc853": "startSpin()", "0xf4bbfd6a": "scheduleCall(bytes,bytes)", "0xab73e316": "next(address)", "0xba0179b5": "confirm(uint256)", "0x1e62be25": "Bytes32Passer()", "0xb950556a": "setThingValid(bytes32[],bool)", "0xb61c0503": "fireEventLog1()", "0x79a85e6c": "getProductInfo(uint256)", "0x959ac484": "push(uint256)", "0x78e80b39": "UserGetPrize()", "0xff74927b": "strConcat(string,string)", "0xd207e757": "ownerSetOraclizeSafeGas(uint32)", "0x5819dde2": "getNumbersFromBytes(bytes3)", "0xf34ed4e6": "RanDAOPlus(address)", "0x3943807b": "insert(bytes,bytes,int256)", "0x38cc4831": "getAddress()", "0x12a7b914": "getBool()", "0xa4fd6f56": "isEnded()", "0x6c86888b": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", "0x0bebd0f9": "addAddressToGeneration(address,uint256)", "0x003074ff": "getFrontend()", "0x2776a859": "computeResponseSecondHalf(uint16)", "0xadfe6b80": "InvestAdd()", "0x6981b5f4": "getLength(string)", "0x4a994eef": "setDelegate(address,bool)", "0xbac1e9f6": "getChannelSize(address,uint256)", "0xbdfdb519": "accept(string,uint256,uint16)", "0x68f5aa0f": "setShareholderDB(address)", "0xafb95eed": "logApproval(address,address,bytes32)", "0xae152cf4": "oraclize_query(string,string,uint256)", "0xe3b26a8c": "SocialNetwork()", "0x54204ad4": "triple()", "0xbc8f3bcb": "ZeroDollarHomePage()", "0xf0350c04": "transfer_ownership(address)", "0xfde9ba41": "transfer(bytes,address,uint256)", "0xfa2acd87": "G(uint64[16],uint256,uint256,uint256,uint256,uint64,uint64)", "0x3a76abff": "_eraseNode(uint256,bytes32[],bytes32)", "0x0acf473b": "AdminCloseContract()", "0x299e7318": "resolveVoting()", "0xb414d4b6": "frozenAccount(address)", "0x8d375da2": "testMakeItFail()", "0x6e8dad74": "retrieveAccountBalance(bytes,bytes)", "0xd3aa831f": "testOwnedTryAuth()", "0x13220305": "doTransferOther(address,address,address,uint256)", "0xb0c7f709": "kingAutomaticCollectFee()", "0x2dabbeed": "reclaim(uint256)", "0x5c19a95c": "delegate(address)", "0xbc2a4dd6": "doBalanceOf(address)", "0x8e7ea5b2": "getWinner()", "0xdb37e42f": "multisetProofType(uint256[],address[])", "0xa6b197aa": "Order(address,uint256)", "0x8cf4dbfb": "collectBalance()", "0xd0821b0e": "bet(uint8)", "0xa02b161e": "unregister(uint256)", "0x09dd0e81": "getBlockchainHead()", "0x8a0807b7": "indexOf(string,string)", "0xe3914699": "dEthereumlotteryNetWinners(address)", "0x44d75fa9": "updateMinorTree(bytes32)", "0x3c21db0a": "theGames(uint256)", "0xf0e959f9": "TokenSales(address)", "0x696bda86": "submitProposal(uint256,bytes)", "0x3b343a13": "getNodeAddress(bytes)", "0x2812f8b8": "FutureCall(address,uint256,uint16,address,bytes4,bytes,uint256,uint256,uint256)", "0xbf32bf97": "FailGuyTax()", "0x89ced196": "setNotUpdatable(bytes32)", "0xb94e962a": "allocateTickets(uint256)", "0x7a479160": "getRequestArgs(uint256)", "0x5a825cbb": "getPayment(uint256,uint256)", "0x4ca8b0d0": "registerExistingThrone(bytes,address,uint256,uint256)", "0x82afd23b": "isActive(uint256)", "0x6ebf10fe": "storeHeader(bytes,address)", "0x1437f9a3": "Set_your_game_number(uint16)", "0xd98d011d": "getCandidateKey(bytes,bytes,bytes,bytes)", "0x8b676ae8": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256,uint256)", "0x90fd53ec": "farmTile(uint8,uint8,int8)", "0x46e44f63": "getCheckRecordTS(bytes)", "0x1de38038": "makercoin(uint256)", "0xc038a38e": "totals()", "0xfa80918b": "computeNodeId(bytes,bytes)", "0xc76a4bfb": "relayReceiveApproval(address,address,uint256,bytes)", "0x2406cedb": "setPackageOwner(bytes32,address)", "0xb7297cf3": "gameSettings()", "0xe94acf0e": "TinyRouter(address)", "0x4a2b0c38": "DividendProfit()", "0x0e3f732a": "TheGame()", "0xd62457f6": "callValue()", "0x4961b40c": "getReleaseValidator()", "0x540cafe0": "storeHeaderWithFee(bytes,int256,address)", "0x7ff729fc": "fillUpProject(uint256,uint256)", "0x253459e3": "feesSeperateFromBalanceApproximately()", "0x930a80b4": "testAuthorizedSetPackage()", "0xb3cb8885": "nextUnderdogPayout()", "0x62c7855b": "getConfigBytes(bytes32)", "0x4f28af6a": "handleBet(uint256)", "0x103f9251": "transferFrom(address,address)", "0x9b19251a": "whitelist(address)", "0x9928811b": "testBroken()", "0xb33a8a11": "setTokenReference(address)", "0x27f06fff": "requestFillUp(uint256)", "0x2f570a23": "test(bytes)", "0x96ef7aa0": "cash_transfered(string)", "0x3983d5c4": "calcBaseFee(uint256)", "0xec0f1025": "testBitsOrSuccess()", "0xd35f4a99": "mint(int256,address,uint256)", "0x09dfdc71": "currentPyramidBalanceApproximately()", "0xac4e73f9": "proposeReverse(string,address)", "0xac4bd53a": "currentLeader()", "0x5a2ee019": "m()", "0xeba36dbd": "setAddr(uint256,address)", "0x0358d965": "addPayout(uint256)", "0xd7206124": "setInvestorLock(bool)", "0xe916d0f0": "doBalance(address)", "0x67c2a360": "authorizeUser(address)", "0x828d671c": "dyn_sig()", "0xaf6fe8e2": "testGetToken()", "0x283a4576": "Tomeka()", "0x8ac0ca36": "buyViaJohan()", "0xcc872b66": "issue(uint256)", "0xd826f88f": "reset()", "0x2aa3177a": "self_store()", "0x53b7b2e9": "cEthereumlotteryNet(bytes)", "0xce88b145": "getAccount(uint256)", "0x1fa03a2b": "isApprovedFor(address,address)", "0xe42d5be0": "getPaymentOf(address)", "0xb722a9ef": "getPreviousShareholder(address)", "0xfadf87b1": "testGetBitsSuccess()", "0xd26c8a8a": "coinBalance()", "0x30ccebb5": "getStatus(address)", "0x47799da8": "last()", "0x4a5db3b5": "authorizeAddress(address)", "0x22686250": "index(int256,uint256)", "0x07ef99a0": "demintTokens(int256,address,uint8)", "0xea2d4cf8": "__DeployerFunctions(address,address,uint256)", "0x092a2e37": "multiAccessAddOwnerD(address,address)", "0x671fa0a0": "Inscription(string)", "0xa10edc55": "GeneralPurposeProfitSplitter()", "0xd9c67404": "getMerkleRoot(bytes)", "0xdc419fd8": "cancelOrder(bool,uint256)", "0xc9734ebd": "WatchLastPayout()", "0xc7d6faf1": "easyPropose(address,uint256)", "0xfe63300a": "registerExternalBill(uint256,address,address,uint256,uint256,uint256)", "0xd3437fe0": "assertFact(uint256,bytes)", "0x5fb3e119": "Auction()", "0x665beae7": "ExecutableBase(bytes)", "0xc8bb73ef": "testGetBitsFailIndexOOB()", "0xc1d4f708": "getMwLength()", "0x22b0f6ee": "getStatusOfPayout(uint256)", "0x21520c5f": "calculatePayout(uint8,bool,uint256)", "0x66e98c31": "createCoin(string,uint256,uint256,string,string,address)", "0x7b352962": "isFinished()", "0x48d9614d": "GetFee()", "0xfe0d94c1": "execute(uint256)", "0xe4547f98": "documentExists(bytes)", "0x4e10c3ee": "transferWithoutReward(address,uint256)", "0x58ae8bcf": "voteInMasterKey(address)", "0x1dcb304b": "fipsGenerate()", "0xb595181f": "ShapeshiftBot()", "0xe02426c1": "getSignatureHash(bytes4,uint256)", "0x67546967": "EthBtcEscrow()", "0x85b31d7b": "myInfo()", "0xaa677354": "register(address,address)", "0x1d2e2cc4": "ENS()", "0x1097e579": "Enter()", "0x13a396d8": "getRequiredDeposit(bytes)", "0x6df3edef": "getSavedBytes()", "0x09b30ed5": "afterExecute(address)", "0x718e6302": "play(string)", "0x8e46fbb2": "testBitsXorFailIndexOOB()", "0x0d87a7c0": "WLBDrawsDB()", "0xbbe42771": "closeDeed(uint256)", "0xedfbf7b6": "setVotingDeadline(uint256)", "0x299e6b07": "Wallet(address)", "0x5cbc85d0": "returnBounty(uint256)", "0xe5225381": "collect()", "0x94f60a63": "getKudosLeft(address)", "0xd6960697": "confirmPurchase()", "0x4a1f0bf6": "inheritToNextGeneration(address)", "0x244ded7a": "ChangeOwnership(address)", "0x39b35753": "authCancel(address)", "0x75cb2672": "configure(address)", "0x938ae4cc": "testThrowDisownNotTransferable()", "0x04fc11d5": "getActual()", "0xacab021c": "getTOS(address)", "0x812cddf2": "getSavedString()", "0x8ae475a9": "notorize(string)", "0xb1d05422": "SendEmail(string,string)", "0x0fffbb54": "changeRankingSize(uint256)", "0xb6ed9f15": "PFOffer(address,address,bytes,uint256,uint256,uint128)", "0xda333ca6": "payOut(uint256)", "0x652f1f16": "addSignature(string)", "0x983b2d56": "addMinter(address)", "0x5e1936d4": "testThrowSetNotTransferableNotOwner()", "0x4ac1ad78": "getWeekday(uint256)", "0x6ba0b4f2": "isKnownSelector(bytes4)", "0x7c4c27c8": "isThisPuritanicalVersion()", "0x7ae2b5c7": "min(uint256,uint256)", "0x63bd1d4a": "payout()", "0x3fd94686": "changeEligibleDonkeys(uint256)", "0x7fe0518a": "asyncSend(address,uint256)", "0x5a8dd79f": "getDesignatedCaller(address,uint256)", "0x2635f4de": "registerLibrary(bytes,address)", "0x1335ff36": "createEventAndMarketMaker(uint256,uint256,uint8,uint32,address,uint256,uint8,uint16,uint256)", "0x181be00d": "getValue(uint8)", "0x9c1500f0": "registerMany(address,uint256,int256,uint256,bytes,address,bytes)", "0x16f9ce49": "_slotCommitNew(address)", "0x8ca4eef6": "getBuild(bytes32)", "0x8ee21b8e": "get_default_keys()", "0xa66f7ad6": "signRelease(uint256)", "0x414053be": "best_adjustment_for(bool,uint128)", "0x83a51ad0": "oraclize_setConfig(bytes32)", "0x262c0b72": "getPayoutFreezePeriod()", "0x499af77c": "current_spin_number()", "0x4209fff1": "isUser(address)", "0x6e1b6bcc": "checkMyBet(address)", "0xb46300ec": "send()", "0x6b1cb549": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", "0x58d9fa04": "addUser(uint256,address)", "0x24c93343": "error(string)", "0xa95d017d": "getRevisionBlockNumber(bytes32,uint256)", "0x46af23f5": "InstantLottery(address,address,bool,address)", "0x29ef56b1": "getAskOrderBookStats()", "0xe97db66e": "setJackpot()", "0x4b59e880": "puzzle(address,bytes32,bytes32)", "0xc7f86c37": "withdrawFundsRP()", "0x57d4021b": "nextPayoutWhenPyramidBalanceTotalsApproximately()", "0xf1c760ae": "fixBalanceInternal(address)", "0x0908178f": "NoFeePonzi()", "0x22ebb3ac": "DieselPricePeg()", "0xb39a64cd": "getNumCalled()", "0x1c02708d": "killContract()", "0x65228934": "setOperationsCallGas(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x3397ca17": "numBalanceRecords(address)", "0xe436bdf3": "Draws(uint256)", "0xaf55bba0": "removeRegistryFromTagsIndex(address)", "0x11103599": "Token_Offer(address,address,uint16)", "0xb3a2a6c0": "setOfficialWebsite(string)", "0xb06eb03f": "DSEasyMultisig(uint256,uint256,uint256)", "0x775c300c": "deploy()", "0xb1c6517a": "LookAtNumberOfPlayers()", "0xc19d93fb": "state()", "0xac9873c7": "CanaryV7()", "0x750cae6a": "enableBetting_only_Dev()", "0xdf3c8620": "num_challenges()", "0xbb00fc55": "bookEarnings()", "0x0bd2ae1c": "ERW()", "0x580bdf3c": "disableBetting_only_Dev()", "0x5c3f9765": "endDateClose()", "0xc4128b6d": "upgradeCount()", "0x140b4465": "executeSpendingRequests()", "0xfaa1a8ff": "getOwnedBot(address,uint256)", "0x40e58ee5": "cancel(uint256)", "0xf4ea95b9": "validateReleaseVersion(uint32[3])", "0x2ba0b09f": "AddNewCategory(bytes4,uint8,uint8,address)", "0x55db4092": "setTOS(address,bool)", "0xf9cc0605": "getAvailable()", "0x3f2f46b4": "revealRock(string)", "0x2af7ceff": "testPrice(uint256)", "0xcaaf2dd7": "getInitialAnswerResult(uint256)", "0x6f36ce79": "insert_deal(address,address,uint64,uint128,uint32)", "0xa18c751e": "set(bytes,bytes)", "0x4d536fe3": "doit()", "0x3197cbb6": "endTime()", "0xb83069c5": "getStemPrice()", "0x3f15457f": "ens()", "0x81ebdeea": "testThrowCreateWithNonceRetracted()", "0x249b4d0b": "removeTrustedIssuer(address,bytes)", "0xe7b48f74": "get(int256,address)", "0x089d5c4a": "repr()", "0x3a9e7433": "scheduleCall(bytes4,uint256,uint256,uint8)", "0x504f1671": "getSize(address)", "0xf3a44fe1": "withdrawForWorkshop()", "0x7a837213": "setAllowedAccount(address)", "0x4551b1d7": "ProxyPayment(address,address)", "0x5dac1601": "SimpleStablecoin()", "0x87914c6f": "prolongateContract()", "0xe3ceb06d": "YesNo(bytes32,address,string,address,uint256)", "0x42a745cb": "testBitEqualSuccess()", "0xaa8dea8c": "fipsAddToLedger(bytes20,address,bytes)", "0x986dcd4d": "setCycleLimit(uint256)", "0x1e44c112": "find_strike(uint64,uint32,uint32)", "0x1ecfe64d": "_jSub(uint256,uint256,uint256,uint256)", "0x4ae85627": "grindUnicorns(uint256)", "0x200ebe34": "addTokensToGive(address)", "0x7b632c41": "TimestampScheduler(address,address)", "0x979b6f6f": "RoundInfo()", "0xb3ea3924": "PointlessCoin(int256,uint256,string,uint8,string,address)", "0x1d834a1b": "insert(uint256,uint256)", "0x931df75f": "validateProposedThroneName(bytes)", "0x6189be15": "columnround(uint256,uint256)", "0xdf5dd1a5": "addOracle(address)", "0x22d8cf5b": "CheckUserVote(uint8,uint8)", "0xdd62ed3e": "allowance(address,address)", "0xc0eb2325": "scheduleTransaction(address,bytes,uint256)", "0x038461ea": "getCertifiedStudentsCount()", "0x9ee035c9": "lookupCanonicalFormat(bytes)", "0x0ab58ead": "SingularDTVFund()", "0x550ed1f0": "getMaxBetAmount()", "0x6e63015c": "getCertifiersCount()", "0xbbd4f854": "buyShares(bytes32,uint8,uint256,uint256)", "0x306b031d": "getGenerationEndAt(uint256)", "0x1bd9c46e": "setImporter()", "0xc80c28a2": "getNumberOfParticipants()", "0xcb553ac9": "sweepWizardCommission(uint256)", "0x6389654e": "changeDailyWithdrawalLimit(uint256)", "0xc0a963c9": "notifyWinner(address,uint256)", "0x3c335b0e": "getRetractable(bytes20)", "0x017972af": "getNumbersFromHash(bytes32)", "0x07da68f5": "stop()", "0x1e8c72b4": "incrUserAvailBal(address,uint256,bool)", "0x0df71602": "setWinner(uint256)", "0x85e5bb3a": "Security_AddPasswordSha3HashToBankAccount(bytes32)", "0x2ade6c36": "getNodeAddress(bytes32)", "0xb33926cb": "owner_withdraw(uint256)", "0x57764094": "getRate(uint256)", "0x13827950": "getShareholderDB()", "0x26826bf8": "setImage(bytes)", "0x76d438b0": "sendReward(uint256,uint256)", "0x51d6e547": "getNonce(bytes)", "0x4f24186a": "newProposal(string)", "0x1a695230": "transfer(address)", "0xe820a32f": "vetoPayout(uint256,uint256)", "0xfb3a1fb2": "getReleaseDb()", "0x6bae05cf": "preRegister(address)", "0xae2df7b3": "setImporterBank()", "0x56d73ad1": "getCertifierDb()", "0x8396392d": "add(string,string,string,address)", "0xeb08b304": "changeMeatProvider(address)", "0xb60e72cc": "log(string,uint256)", "0x76999896": "KingOfTheEtherThrone()", "0xea851885": "buyStake(bool)", "0xa5982885": "assertFalse(bool)", "0xfbf1f78a": "unapprove(address)", "0xc2ba5b40": "getPackageData(string)", "0x83d51a38": "concatString(string)", "0x68af4971": "registerListening()", "0x14ba5c09": "getDay()", "0xe4849b32": "sell(uint256)", "0x44dd4b3b": "lookupGeneration(uint256)", "0x3fda1281": "get_keys()", "0x09241200": "wasSuccessful()", "0xbc9147a4": "Foundation()", "0xe33734fd": "changeProposalDeposit(uint256)", "0x2cce4abe": "_finishNoCallback()", "0x45e965cd": "strConcat(string,string,string,string)", "0xd4245e5b": "transferringETH(address)", "0x10082bff": "getActorBillXdetail(address,uint256,bool)", "0xc831391d": "getPoolOverlapSize()", "0x15e33901": "digest(bytes,uint256)", "0x5f0edfb8": "create(bytes,bytes32,bytes1)", "0xadd4c784": "getResult(bytes32)", "0x3233c686": "claimerDeposit()", "0x187a62d5": "voteEmergencyWithdrawal(bool)", "0x5404bbf7": "getEntropy()", "0x3f5b7675": "periodTwo()", "0x7ec0f30d": "ack(string)", "0xd30a512e": "betOnColumnOrDozen(bool,bool,bool)", "0x9fcbc738": "setIntermediate(address)", "0x539e2bfb": "secondChainedCallback(uint256)", "0xe724529c": "freezeAccount(address,bool)", "0x5aa97eeb": "getMarkets(bytes32[],address)", "0xc51be90f": "query_withGasLimit(uint256,string,string,uint256)", "0x531b97d7": "oneCentOfWei()", "0xeace4827": "player_make_bet(uint8)", "0x9c851ebc": "new_entry()", "0x98c9cdf4": "getMinimumCallGas()", "0xd8f012c6": "StatelessFactory(string,string,string)", "0xceeafd9d": "withdrawFundsAdvancedRP(address,uint256,uint256)", "0xd6d7d525": "get(bytes)", "0xbf55486b": "Tanya()", "0xd35ada32": "addParticipant(address,address)", "0xa8239d0b": "getPrice(string,address)", "0x12514bba": "transfer(uint256)", "0xb00140aa": "getHash(bytes)", "0x36f66528": "EtherDelta(address,uint256,uint256)", "0x279e0912": "getDownloadPrice()", "0x8173b813": "setNumCities(uint256,uint256)", "0xb98fdc36": "IconomiToken(uint256,string,uint8,string,uint256)", "0x3c7a3aff": "commit()", "0xcac77df7": "__transferFromToICAPWithReference(address,bytes32,uint256,string)", "0xfbeaebc6": "murder()", "0x2fa7cbfb": "getExecCost(uint256)", "0xe44d3084": "testFailure()", "0xede8acdb": "startAuction(bytes32)", "0xd5544f94": "getFundsAndAvailable(address)", "0x3824d8ee": "buy100DaoFor1Eth()", "0xbe3945e4": "getFee(address,address,uint256)", "0x1917ab5c": "activate(string)", "0x23509e69": "donkeysEligibleForFees()", "0xf460590b": "updateSigner(address,bool)", "0xc55c1cb6": "queryN_withGasLimit(uint256,string,bytes,uint256)", "0xd96d7ea2": "PRE_EXECUTION_GAS()", "0x1f7b6d32": "length()", "0xacf8bf2a": "channelCount()", "0x18968a03": "finalize(uint256,address,address)", "0x5674a3ed": "runLottery()", "0xe3280126": "addOrder(string,bool)", "0x32afa2f9": "claimEtherOwner(uint256)", "0x355474d2": "commitReading(address)", "0x00601d6c": "board(uint256,uint8,uint8)", "0x2667f407": "__proxy(address,bytes)", "0x79716e43": "confirmTransaction(bytes32)", "0x272cda88": "EternalDB()", "0x76ca0c77": "scheduleCall(address,bytes,uint256,bytes,uint256)", "0x338b5dea": "depositToken(address,uint256)", "0xfa93f883": "getMinute(uint256)", "0xafc4a982": "PathCost(uint16,uint32)", "0xf7d97577": "setPrice(uint256,uint256)", "0x842bc37b": "GetSmallCotractIndex(address)", "0x75f40f40": "underdogPayoutFund()", "0x23a1c271": "setPongval(int8)", "0x02571be3": "owner(bytes32)", "0xf79b22e0": "betOnATeam(uint256)", "0x10cf5d47": "awaitingPayout()", "0x1b00fe51": "testHypothesis()", "0xd449ce7c": "Administered()", "0x455259cb": "getGasPrice()", "0x975057e7": "store()", "0xdfdb5f17": "doBurn(address,uint256)", "0xaa497b9d": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8)", "0xcabfb934": "replace(address)", "0x1f1f5e76": "addValueToContribution(uint256)", "0xa0eda9f2": "_transferFee(address,uint256,string)", "0xa8d95fb2": "claim(address,string)", "0x03ee8f08": "getCoeff(uint16)", "0x9872a20a": "registerUInt(address,uint256)", "0xb20d30a9": "setDailyLimit(uint256)", "0xe116b17e": "getKudosLeftForProject(address,address)", "0xf7c9f74a": "insert_contribution(address,uint256)", "0xc7a1865b": "play(bytes32)", "0x356594ab": "EtherTransfer()", "0xe22b0c46": "verify(uint256,uint256,uint8,bytes,bytes)", "0x2fea7b81": "getIdentity(address)", "0x6fa8de90": "changeMeatParameters(uint256,uint256)", "0x37c390e3": "allow_move(uint16)", "0xd22c391a": "validateProposedThroneRules(uint256,uint256,uint256,uint256,uint256)", "0xf6d339e4": "setAddress(bytes32,string,address)", "0xd7cc8362": "isLatestMajorTree(bytes32,bytes32)", "0xdd012a15": "setIt(uint256)", "0x254c91b3": "testBitNotSetSuccess()", "0x47e40553": "nextRound()", "0xa6b206bf": "doSomething(uint256)", "0xac996e7e": "resolvePledging()", "0x71e2d919": "lol()", "0x07d5b826": "buyAllOutcomes(bytes32,uint256)", "0x5f68804e": "SimpleLotto()", "0xa510f776": "setCompany()", "0x0d48e8d0": "doBalance()", "0xd21d7950": "changeGasLimitOfSafeSend(uint256)", "0x3358d2d3": "buildDSTokenFrontend()", "0xec93cfae": "FountainOfWealth()", "0x65b1fdf4": "scheduleIssuePOIs()", "0xdc3080f2": "spentAllowance(address,address)", "0xd1f0bb2d": "populateAllowedFreeExchanges()", "0xd591221f": "testTransfer()", "0xf24b5779": "removeTrustedIssuer(address,string)", "0xed4b1d0d": "scheduleTransaction(uint256)", "0xa83627de": "updatePeriod()", "0xf597a499": "UserDatabase(uint256)", "0x21f8a721": "getAddress(bytes32)", "0x5548c837": "Deposit(address,address,uint256)", "0x55b775ea": "setFeed(address)", "0x01b869f1": "release(uint32,uint32,uint32,bytes)", "0x609ff1bd": "winningProposal()", "0xdf98ef33": "getResource(bytes,uint256,bytes)", "0xd39eb301": "getStatus(uint8,uint8)", "0x2cc0b254": "init(address,bytes32)", "0x4228974c": "Videos()", "0xc431f885": "addToContribution()", "0x00e43ee9": "setMigrationStatus(uint256,address)", "0xd9f8a4e2": "calcCurrentTokenPrice()", "0xb9e6f1d9": "get_amount()", "0x6b3a87d2": "WatchWinningPot()", "0xef4592fb": "getResult(bytes)", "0x41b9dc2b": "has(bytes32,bytes32)", "0x3b9901cc": "getChannelsByRanks(address,uint256,uint256)", "0x83876bc9": "newProposalInWei(address,uint256,string,bytes)", "0x50a3bd39": "enterPool()", "0xc976bbbb": "_compare(int256,bytes2,int256)", "0x0e47c76f": "rotate(uint64,uint256)", "0x6f85c7e4": "WAITING_PERIOD()", "0x7075b1d8": "latestMonarchInternal()", "0x9209b3c0": "getCrtDetails(bytes)", "0x305075db": "NormalizeRanks()", "0xb6b55f25": "deposit(uint256)", "0xf09ea2a6": "offer(uint256,address,uint256,address)", "0xf1320af2": "exempt(address)", "0xc813c30e": "testThrowSomething()", "0x4faa2d54": "getTimeElapsed()", "0x22017c5f": "DSTokenBase(uint256)", "0x6637b882": "setDao(address)", "0xd0b52156": "getIpfsHash(address,address)", "0x13bd4e2c": "_prepareAndSendReward()", "0xdb7ca38a": "XaurmProxyContract()", "0x1bad1d2e": "monitorWallet(address)", "0x691f3431": "name(bytes32)", "0x3169ff3e": "LooneyLottery()", "0x446a7974": "Fokitol()", "0xdc3ab866": "checkEarnings(address)", "0xfad9bf9e": "storeBlockWithFeeAndRecipient(bytes,int256,int256,bytes,int256,int256)", "0xaf408d89": "setStatus(bytes)", "0xd02bf162": "spinTheWheel()", "0x9a36f932": "feeDivisor()", "0xca77ab8a": "getNextFile(bytes)", "0xc8e49707": "activateExportFee(address)", "0x502414e4": "marketMaker(string)", "0x78ec81a0": "sendEarnings(address)", "0x14167bf0": "oraclize_query(string,string[])", "0xba13a572": "lottery()", "0x299ed37a": "emergencyCall()", "0x6ec3af26": "addTrustedIssuer(address,bytes)", "0x3d69b403": "isOutcomeSet(bytes)", "0x9a19a953": "setInt8(int8)", "0x7817a60f": "acceptMember(address,string)", "0x1e223143": "getFirst()", "0x5437b39b": "hasUnprocessedDividends(address)", "0x8f0c724c": "setOperationsCallGas(uint256)", "0x3c925f16": "getAccountHolder()", "0x477801b1": "getLastRoundResults_by_index(uint256)", "0x3d21aa42": "sendApproval(address,uint256,address)", "0xd2b8035a": "draw(uint256,uint256)", "0x19c32e0b": "hmacsha256(bytes,bytes)", "0x28f90e4b": "Etheramid2()", "0xe87df70e": "fivetimes()", "0xc028df06": "offer()", "0xacb6c69b": "setTrustedClient(address)", "0xac7ffae3": "updt(uint256,string,uint256,uint256,string,string,address)", "0x0e5ffb3c": "hashVersion(uint32,uint32,uint32,string,string)", "0x4ac6b2be": "getCheckRecordCreator(bytes)", "0x93dafba2": "getSubpot(uint256)", "0x592685d5": "getWindowStart(address,address)", "0xc24a0f8b": "endDate()", "0x3f9b250a": "getDocument(uint256)", "0xd845a4b3": "request(uint256)", "0xa5bfa9a9": "claimToken(bytes32)", "0x8e3957d9": "RandomNumber()", "0x62fb09b2": "getRefDescr(uint256)", "0x9f35d3b2": "start(string,string,uint256,uint256,uint256,uint256)", "0xea1bf386": "getNextSellerBOTdata(uint256)", "0xe27fe50f": "startAuctions(bytes32[])", "0x031d973e": "closeMarket(bytes32)", "0x754dea40": "setBackendOwner(address)", "0xd83a8d11": "testProposing()", "0xf24a534e": "Oracle()", "0xd08275f1": "WolframAlpha()", "0x932db761": "profitsFromBitnationDebitCard()", "0xd96aee49": "MultipleConstructorTest()", "0x4594d06a": "delMinter(int256,address)", "0xb9f256cd": "newProposalInEther(address,uint256,string,bytes)", "0x1d2bca17": "MyToken(uint256,string,uint8,string)", "0x6edbd134": "hasHash()", "0x847f8a10": "Refund(uint32)", "0xb0604a26": "schedule()", "0x6676871d": "reserved_funds()", "0x05888fcd": "tradeBalances(address,uint256,address,uint256,address,uint256)", "0xe771066f": "marriageProof(bytes)", "0x7e32a592": "repairTheCastle()", "0xbab2f552": "currentCycle()", "0x45a3b0bf": "resolveFailPledge()", "0x070a888f": "updateRewardDuration(uint256)", "0x20d9822e": "setAnyoneCanCall(address,string,bool)", "0x224993c2": "setTimeBlock(uint256)", "0x01bd4051": "disown(string)", "0x4bc2a657": "setVoter(address)", "0x522103fa": "changeUnicorn(uint256,address)", "0xc988d70f": "getDailyWithdrawLimit()", "0x2f7f3ecf": "findNextHour(uint256,bytes)", "0x1b769e74": "testThrowsRestartNotUpdatable()", "0x4d561721": "etherandomSetNetwork()", "0x92a781d8": "changeBaseValue(uint256)", "0xf0a78538": "scheduleTransaction(uint256,bytes)", "0x64ef212e": "proxyTransferWithReference(address,uint256,bytes32,string)", "0x97c3ccd8": "ban(address)", "0xdeb6930c": "PriceTicker()", "0x6cc5fdaa": "setBytes32(bytes,bytes)", "0x92c8eb96": "DSFalseFallbackTest()", "0x6534b4e2": "IsPayoutReady__InfoFunction(bytes32)", "0x15e812ad": "getBaseFee()", "0xf5b53e17": "getInt256()", "0x081bf263": "isOOB(uint8,uint8)", "0xd2fb8787": "recordExists(bytes)", "0x86c57fcc": "b32ToBytes(bytes)", "0xe3a199d6": "testThrowCreateNewRevisionNotUpdatable()", "0x57cfeeee": "transfer(address,uint256,bytes32)", "0xb72e717d": "fromAddress(address)", "0x61b20d8c": "retrieveFunds()", "0xf4b103d4": "SimpleStorage(uint256)", "0xe2056c46": "ExtraBalToken()", "0xc3ee6311": "lockAndCall(string)", "0x136af582": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes)", "0xc5d5997c": "changeSubUser(address,address)", "0xf8018a79": "prepend(address,address)", "0xf6b4dfb4": "contractAddress()", "0x9450b1c8": "addCharityFundation(string,string,string)", "0xd1a8d447": "get_all_bet_values()", "0x66d8c463": "reveal(bytes32,string)", "0xbb963c8a": "transferLibOwnership(bytes,address)", "0xd56b2889": "finish()", "0x9fb25d9e": "LeaderMessage()", "0x6ad50ed4": "investmentEntryInfos()", "0xa4d575ce": "_forward(address,bytes)", "0xa3ec5616": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes,uint256)", "0x0db73c72": "noevent()", "0xf449619e": "collectPrize(uint256)", "0x1afccfa5": "Proposal(address,address,address,bytes,bool)", "0x4788cabf": "getContractId()", "0x4112987c": "strConcat(string,string,string)", "0x928a00d2": "deleteCoin(uint256)", "0xd9ec0508": "testThrowTransferNotEnabled()", "0x9aaf442c": "applyCensorship(uint256)", "0x49407a44": "claimEther(uint256)", "0x4fcf8210": "eraseRecord(bytes32)", "0x5ed84aa6": "getNymCenterAPIURL()", "0xa3c2c462": "totalReceived()", "0x5938748e": "changeVotingRules(address,address,uint256,uint256,uint256)", "0x6fc9d5e4": "changeCompareTo(uint256)", "0xe2ee9941": "tap(bytes20)", "0x0ff4f160": "oraclize_query(uint256,string,string[1])", "0x43ec3f38": "toSliceB32(bytes32)", "0x3288eb0b": "ChineseCookies()", "0x373c98a2": "authCall(address,bytes32)", "0x6ea056a9": "sweep(address,uint256)", "0x8dc45377": "getDuel1(uint256)", "0xd4625a3a": "equals()", "0x616fca9b": "adopt(address)", "0x32cea83e": "birth(bytes)", "0x002a5cc9": "getTicketHolders(uint256)", "0x31119b4d": "changeDeveloper(address)", "0x69569a51": "setFrontend(address)", "0xb7e24979": "addThing(bytes)", "0x164e68de": "withdrawFees(address)", "0x42bf4431": "orderMatchTest(uint256,uint256,uint256,int256,uint256,uint256,address,address,int256)", "0x5dd672ec": "latestBid()", "0x45fe6e2a": "Scheduler()", "0x55cc4e57": "setIssuer(address)", "0x1df5e755": "Etherandom()", "0x8f70009d": "id_for_address(address,address)", "0x39b50688": "cancelSellOrder()", "0x40953102": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8,uint256)", "0x677913e9": "setAmount(int32)", "0x66671c71": "BaseScheduler(address,address)", "0xfe71aec5": "LittleCactus()", "0x879d46fd": "DAOTrust(address,address,bytes,uint256,uint256,uint128)", "0x3b143184": "Congress(uint256,uint256,int256,address)", "0x7370a38d": "getNumPackages()", "0xfee35ff8": "newInvest(uint256,address,uint256)", "0x57dc9760": "DaoChallenge()", "0x8ac78c80": "Docsign()", "0x76d66f5d": "_Transfer(address,address,bytes32)", "0x9dc2c8f5": "fireEventLog4Anonym()", "0x43114842": "acceptChallenge(uint256,uint256,uint256)", "0x2043285d": "getMarketMakers()", "0xfb32f4f5": "ARK_FLAGGER_1_00()", "0x69431ab6": "TokenCreation(uint256,uint256,address,string,string,uint8)", "0x045c6ce0": "voteForProposal(uint256)", "0xa140e79c": "setMinimumDebatePeriod(uint256)", "0x331a72d1": "getRetractable(bytes32)", "0x87cc1e1c": "setExporterBank()", "0x7183616c": "notarize(string)", "0xce79add1": "givableBalanceOf(address)", "0x6f0cfab6": "DNSResolver()", "0x1c2f38ff": "paid(uint64)", "0xb7de47d3": "getIndex(uint256,uint256)", "0x04a2b2c2": "testOwnerCanBreach()", "0x65a4dfb3": "oraclize_query(uint256,string,string,string,uint256)", "0xf2ddc772": "confirm(bytes)", "0xa00ce377": "getIsContractValid()", "0xfe9fbb80": "isAuthorized(address)", "0xbbd39ac0": "coinBalanceOf(address)", "0xa4fde8bc": "player_declare_taking_too_long()", "0xd052fbf6": "getHistory(string,uint256)", "0xd205ad7d": "proposeDissolve(bytes)", "0x5a3b7e42": "standard()", "0xf27197ab": "getIsAvailable()", "0x00a94b6e": "oraclize_query(uint256,string,string[5],uint256)", "0x971c803f": "getMinimumStackCheck()", "0x5168afa4": "getPackageHash(bytes,uint8,uint8,uint8)", "0xaef99eef": "Game()", "0x7f924c4e": "testDeposit()", "0xb1adc241": "BalanceDB()", "0x6a704d7b": "AddedToGeneration(address,uint256)", "0xb9f37c86": "Registrar()", "0xc631b292": "closeVoting()", "0x19350aea": "nameFor(address)", "0x85dee34c": "query2_withGasLimit(uint256,string,string,string,uint256)", "0xbf187478": "shift_left(uint64,uint256)", "0x5b6b431d": "Withdraw(uint256)", "0xe5dd90a5": "HumanStandardToken(uint256,string,uint8,string)", "0xbf8c50ff": "scheduleTransaction()", "0x013d64bd": "setCanCall(address,address,string,bool)", "0xb870ecbb": "testNormalWhitelistAdd()", "0xbcd3d8ca": "Collector(address,address,uint256)", "0x4401ff5c": "sellShares(bytes,uint8,uint256,uint256)", "0x3e0dfbdf": "getInvestorByAddress(address)", "0xcb3e64fd": "unhalt()", "0xafc24e3d": "getChallengeAnswer(uint256)", "0xa36c8ec2": "UpdateContractorAddress(address)", "0xd5a4a3c6": "findRecentBet(address)", "0xb028ee13": "s2b(string)", "0x692ad3a9": "round(uint256,uint256,uint256,uint256)", "0x0a7493b4": "Etheropt(uint256,string,uint256,uint256,bytes,address,int256[])", "0x60689557": "Rock()", "0x717fedf0": "getFirstActiveDuel1()", "0xe837ab59": "getParticipantByAddress(address)", "0x32d5fe98": "revealCampaign(uint256,uint256)", "0x0178b8bf": "resolver(bytes32)", "0x44faa139": "Withdraw(uint32)", "0x418cf199": "setEstimateCost(uint256,uint256)", "0xae45850b": "schedulerAddress()", "0xd4871517": "BTCLotto(address,uint256)", "0xfbffb355": "testBitsEqualFailIndexOOB()", "0x2be6d43c": "ARKTagger_1_00()", "0x1df47aad": "ReplayProtection()", "0xb36a0b15": "getSignDetails(uint256,uint8)", "0x9c4baf27": "Skywalker(address,address)", "0xfb34fc6f": "WatchNextBlockReward()", "0xceba30b5": "scheduleTransaction(address,bytes,uint256[4],uint256)", "0xfc94dd18": "verifyHumanStandardToken(address)", "0x1ff13086": "size(int256)", "0xce92dced": "newBid(bytes32)", "0x231944e2": "moveUnits(uint256,uint256,uint256[])", "0x784813e0": "lookupBet(uint256,uint256)", "0xe0e3ba5a": "getLosesShare(address)", "0x5c1b3ca1": "getConfigUint(int256,bytes32)", "0x91060168": "fetchString(address,bytes4,bytes32)", "0x354b2735": "testDeploy()", "0xb88eef53": "registryCreated()", "0x8e3d4e5e": "Fibonacci(bytes)", "0x64bd87d6": "scheduleCall(address,bytes,bytes,uint256,uint256)", "0x5c3d005d": "demote(address)", "0xb6509c12": "Ethereum_twelve_bagger()", "0xe87508be": "investorDeposit()", "0xcb96012e": "hashTo256(bytes32)", "0x314e0fb6": "scheduleTransaction(address,bytes,uint256[3],uint256)", "0x5b6a54bc": "adjustTransactionFee(uint256)", "0x5f515226": "checkBalance(address)", "0x76cd7cbc": "sign(bytes)", "0xce220ecf": "testAddBalanceFailsAboveOverflow()", "0x922fc84b": "taskProcessedNoCosting(uint256)", "0xf8b2cb4f": "getBalance(address)", "0x7a29332d": "buyAllOutcomes(uint256,uint256)", "0x04106c8b": "startGeneration()", "0x8eaa1e29": "getContentByData(address,uint256,string,string)", "0x5a7a8850": "rollWithSeed(bytes32)", "0x2facc4e8": "depositGovernance(uint256,address)", "0xf2561a43": "voteSuicide(address)", "0xee1b4828": "closeBooks()", "0x18f303a1": "SetInternalValues(uint8,uint256)", "0xce60f78d": "createMarriage(bytes,bytes,uint256,bytes,bytes)", "0x18b749c4": "payEther(uint256)", "0xbbc6eb1f": "getDefaultDonation()", "0x0b1ca49a": "removeMember(address)", "0xccf4f413": "setSubRegistrar(string,address)", "0x4616caa9": "pushCoin(uint256,address,string)", "0xd69450d5": "setUUID4Bytes(bytes)", "0xc98165b6": "createTarget()", "0x8c79a24d": "refName(uint256)", "0x56d88e27": "len()", "0xbfc3d84b": "CT()", "0xc7f2e6af": "Contribute(bytes20)", "0xd7e11e9d": "AddTicket(bytes)", "0x2d06177a": "addManager(address)", "0xd588acc4": "claimMiningReward()", "0x2ffb9e64": "updateGasForXaurData(uint256,uint256)", "0xf896503a": "getConfigAddress(bytes32)", "0x9af8c4ba": "respond(uint256,address,bytes)", "0x82a5285d": "getMinBetAmount()", "0x3ead67b5": "changeContractOwner(address)", "0xb29d7914": "getRefResults(uint256)", "0x135128c2": "CounterPartyDeposit()", "0x795b9a6f": "scheduleCall(address,bytes4,uint256,bytes)", "0x83197ef0": "destroy()", "0x433836dc": "scheduleTransaction(address,bytes,uint8,uint256[3],uint256)", "0xf009347d": "KudosProxy(address)", "0xf2fde38b": "transferOwnership(address)", "0x62c99e84": "_Approval(address,address,bytes32)", "0x1b83b823": "notifyPlayer(uint256)", "0xe56c8552": "spinTheWheel(address)", "0x93eec1fb": "setName(uint8,uint8,string)", "0x11af3c68": "divest(address)", "0x8279c7db": "setReceiverAddress(address)", "0x44691f7e": "hasStarted()", "0x349501b7": "checkDepth(uint256)", "0xe8beef5b": "fireEventLog3Anonym()", "0x0870607b": "addSubUser(address)", "0x063925c8": "scheduleCall(bytes,uint256,uint256)", "0xa23744f0": "tryCreateCheckRecord(bytes)", "0x35d79fad": "CertificationDb(address,uint256,address)", "0x44691f2b": "Dispute()", "0xd7ccc2c3": "getLastPayment()", "0x152583de": "getAttributes()", "0x1a9360dd": "checkDate()", "0x420ef2b3": "TargetHash()", "0xf0caea2b": "SmartRoulette()", "0x5d268629": "Refund()", "0x23385089": "emitApprove(address,address,uint256)", "0x7648c929": "returnRemainingEther()", "0x5d5bc4cb": "BetOnRed()", "0xde8fa431": "getSize()", "0xda6b31b9": "testErrorTransferToNullAuthority()", "0x444dd6f3": "Elcoin()", "0xe1fa8e84": "register(bytes32)", "0x3e0a322d": "setStartTime(uint256)", "0x21bacf28": "getDefaultFee()", "0xb1662d58": "setModule(address,bool)", "0x5b0fc9c3": "setOwner(bytes32,address)", "0x40193d17": "getPongvalConstant()", "0xfb95adeb": "testFailBlockhashInsuffiecientFee()", "0x8ecc0950": "returnToOwner()", "0x34b7ac9b": "END_MINTING()", "0xeaa37394": "create(bytes,bytes32,bool,bool,bool,bool,bool)", "0xd7bc23af": "newParameters(int256,uint256,uint256,uint256)", "0x97709cde": "ARK_VOTER_1_00(uint256,uint256,uint256,uint256,uint256,uint256)", "0xcf4a1612": "scheduleTransaction(uint256,address,bytes,uint256)", "0x40695625": "testRetractLatestRevision()", "0x90c3f38f": "setDescription(string)", "0x5fdf05d7": "two()", "0xaaac50bd": "transferDisable(bytes32)", "0x206a44f3": "getNum(bytes,uint256)", "0x7ac26aeb": "getTag(string,uint256)", "0xdc3f65d3": "createdByMe()", "0xe99543aa": "Trash(uint256)", "0x1bcad37a": "getTotalCost()", "0xa7f43779": "remove()", "0x3416f9d4": "subtractSafely(uint256,uint256)", "0x3bcf7d22": "newBribedCitizen(address)", "0x918f1bb5": "ProjectKudos()", "0xcf09e6e1": "SetBigContract(address)", "0x23add736": "claim(uint256,uint256,uint8,bytes,bytes)", "0x8ac6a869": "isObsolete()", "0x2324c67c": "getAllSignatureHashes(bytes4)", "0x981a60f5": "extractNameFromData(bytes)", "0xc018d0e6": "getFeeAmount(int256,int256)", "0x50e06b57": "Etherization()", "0x49e65440": "setSymbol(bytes32)", "0xfaee13b9": "set(int8)", "0x01ffc9a7": "supportsInterface(bytes4)", "0xc0b92612": "changePig(address)", "0x3f9f5b68": "setPreviousID(uint256,int256)", "0x2e9c5e77": "doStackExtension(uint256)", "0xc83be888": "single_move(uint256,uint8,uint8)", "0xef19c332": "_checkSigned(bytes32,uint256,uint8,bytes32,bytes32)", "0x2f30c6f6": "set(uint256,address)", "0x62986e27": "Canary(address,uint16)", "0x44dfdce0": "getNameOwner(bytes)", "0x4b7fcee7": "ownerPausePayouts(bool)", "0x84dac46e": "Fucksign()", "0x0878bc51": "getAttachesto(uint8)", "0x42d16748": "getMinDailyWithdrawalLimit()", "0x4ecd73e2": "DistributeDividends(uint256)", "0x03750d94": "serverSeed(address,bytes32)", "0xea0a5237": "announce(string)", "0x611daa7e": "EmergencyBalanceReset(uint256)", "0x2ae87a70": "getNumContents(address,uint256)", "0x5ec01e4d": "random()", "0xfd735602": "executeN()", "0xfebefd61": "startAuctionsAndBid(bytes32[],bytes32)", "0x8b64d70e": "owner_set_time_limit(uint256)", "0x2839e928": "ackermann(uint256,uint256)", "0xaf29e720": "remainingGasFund(uint256)", "0x9eee85fe": "bookEarnings(address,uint256)", "0x3733ffca": "convertTo(uint256,string,string)", "0xdbde1988": "transferFromWithoutReward(address,address,uint256)", "0xd3edcb5b": "getCreditorAddresses()", "0x77fcb91d": "forward(address,bool)", "0xf062e26b": "check_darkdao()", "0xdef2489b": "convert(address)", "0xccbda1af": "getChannelByName(string)", "0x267c8507": "authorizeManager(address)", "0xf1c30ec0": "reclaim(bytes)", "0xe6470fbe": "updateDefaultPayment()", "0x8fe58eb9": "Triger()", "0xd6b44859": "scheduleUndoIt(uint256)", "0x0eb8ed07": "transferEnable(bytes32)", "0xfc1f2a70": "Add(uint256,string,string)", "0x058026d0": "checkTransferToICAPWithReference(bytes32,uint256,string)", "0xaf27c7b3": "Security_HasPasswordSha3HashBeenAddedToBankAccount()", "0x5b151fd2": "fifty_fifty()", "0x531d1974": "testThrowRetractLatestRevisionEnforceRevisions()", "0x60213b88": "getInitialWithdrawal()", "0x29e94503": "VersionedBlob()", "0x9c5d7030": "reimburseGas(uint256,address,uint256,uint256)", "0xcd9a3c98": "any(bool[7])", "0xb484e532": "getMyMsg()", "0xd1f59db9": "isLatestMinorTree(bytes32,bytes32)", "0xe0c6190d": "checkTime()", "0xaf5610dd": "isThisPreforkVersion()", "0xfa968eea": "minBetAmount()", "0x003538c5": "TestRegistrar(address,bytes32)", "0x71c59097": "MainnetSurvey(uint256,string,bytes32[])", "0xc82aac47": "searchByTag(bytes32)", "0xeca5c793": "testErrorUnauthorizedNameRegister()", "0xdc75f2db": "multiowned(address[],uint256)", "0x4c9ed763": "requestTokensBack()", "0xbd9a5673": "oraclize_query(string,string[5])", "0xb11e3b82": "createEvent(bytes32,bool,int256,int256,uint8,address,address,bytes32[])", "0x86e4e178": "CheckTickets(address,uint256,uint256)", "0x53c84526": "setSmartAffiliateContract(address)", "0x89029d8c": "get_all(uint256,uint256)", "0xc25e6908": "ultimateOutcomes(bytes32)", "0x6b1e564a": "challengeWinningOutcome(bytes32,uint16)", "0x1c895915": "getNumberOfPayments(uint256)", "0x244fcd03": "removeRelease(bytes32,string)", "0x2ca6d2c0": "getAccountSize(address)", "0xfe67a54b": "endAuction()", "0x756fb8c9": "getOptionChain()", "0x88102583": "safeCastSigned(uint256)", "0x60063887": "transferDebt(address,address,address,uint256)", "0x16216f39": "return13()", "0x8089d001": "getHashOfBlock(uint256)", "0x27bc39c0": "submitCanonicalCandidate(bytes,bytes,bytes,bytes)", "0xb29ae23f": "getDateOfSignature()", "0xdd729530": "add_shield(uint16)", "0x38557648": "executeSellOrder(address)", "0xe2a71f12": "accountDelete()", "0xce869a64": "fails()", "0x69bdfd3a": "toContractDie(bytes,bytes,uint256)", "0x99aeade3": "iterateTable(uint256,uint256)", "0x46bdca9a": "equal(string,string)", "0x5e07f240": "shiftBitsLeft(bytes,uint256)", "0x76285b5b": "_is360thDay()", "0x594151e0": "Dice()", "0x4dc43eaf": "setTreasury(uint256,uint256)", "0xec727000": "getApprovalDB()", "0xb144adfb": "balance_of(address)", "0x63052d82": "getOwnersIndex(address)", "0x833b4596": "testApproveSetsAllowance()", "0xc67d376d": "getClosedCandidates()", "0xcf03f5f4": "activateMasterKey(address)", "0x7ca55e00": "etherandomVerify(bytes32,bytes32,bytes32,uint256,uint256)", "0xd92ebe46": "createDAO(address,uint256,uint256,uint256,string,string,uint8)", "0x3773930e": "ConfigureFunction(address,uint256,uint16,uint16,uint16)", "0xfee6d28c": "addSnapshot(string)", "0xe71264fa": "addNewTokens(uint256)", "0xc4d9102f": "setNextID(uint256,int256)", "0xa6f0e577": "isLeapYear(uint16)", "0xc7102df7": "__stopBlock()", "0xfa93019c": "getBlocks(uint8,uint8)", "0xe9794dc1": "CreateHash(uint8,string)", "0x5460ef10": "sendWithExtraGas(address,uint256,uint256)", "0x2f62a6ff": "fipsRegister(uint256,address,bytes)", "0xd630bd53": "pledgeApprove(uint256)", "0x3448c7d6": "createHistory(bytes,address,address)", "0xdda3342b": "ReplicatorFactory()", "0x0cd865ec": "recover(address)", "0xb9f28076": "historyIdx(address)", "0x4dda1764": "CafeMaker()", "0x883ba26b": "getIsSettled()", "0x3f5e268f": "convictInitial(uint256,uint256)", "0x4a3b0eec": "authorizeOpen(uint256,bool,string)", "0xee6d2641": "sendWithExtraGasExt(address,uint256,uint256)", "0xde14bbf7": "randomGen(uint256,uint256)", "0x7f3bd56e": "disburse(address,uint256)", "0x20d8741f": "Feed()", "0x60c6b3a5": "claim(bytes,address,uint256,uint8,bytes,bytes)", "0xda4b5e29": "contains()", "0xb3c25835": "addUser(address,string,string,uint256)", "0xee2af3fb": "set_factory(address)", "0xb821f815": "pay_winner(uint256)", "0x138cc941": "testErrorTransferToRejectAuthority()", "0xc0b6f0c2": "NextRoundAndEvents()", "0xc7e67360": "GAS_BUFFER()", "0x058d7433": "setAlliesContract(address)", "0xd810f298": "computeSettlementAmount()", "0xa24d23eb": "ProcessGame(uint256,uint256)", "0x7ac91cc2": "testFailOwnedAuth()", "0x79c3ddc1": "isPackageOwner(string,address,address)", "0x478ae93c": "playToWin(uint256)", "0x6632a507": "testSetupPrecondition()", "0xb6013cef": "finalize(uint256,uint256)", "0x37b7bf11": "Tile(int256,int256)", "0xecfc7ecc": "placeBid()", "0x70b1d9d4": "requestCanonicalFormat(bytes)", "0x315fdea3": "TreasureChest()", "0xc5575ef0": "checkTransferFrom(address,address,uint256)", "0x65c72840": "getDay(uint256)", "0xd6eafd08": "scheduleCall(address,bytes,bytes,uint8,uint256[4])", "0x350fbe2e": "calcNextDrawTime()", "0x8af784dc": "expectEventsExact(address)", "0x2db89533": "Auth(uint8,address)", "0x9f203255": "setAuditor(address)", "0x2526d960": "clawback()", "0x3fbd40fd": "ProcessDraw()", "0xface030b": "SpinTheWheel(address)", "0x648621ec": "xnotify(string)", "0x22dc36e2": "processed(uint64)", "0x6f52167d": "payDuel(address,string,address,string)", "0x8f70bfa0": "processDeposit()", "0x25ea269e": "Scissors()", "0x93feb13b": "ForceSendHelper(address)", "0xb688a363": "join()", "0x89859b50": "updateLatestTree(bytes32)", "0xf83d08ba": "lock()", "0x7d287697": "testTryGetUnset()", "0x98d5fdca": "getPrice()", "0xfe72e717": "toDie(bytes)", "0xb3c06f50": "transferFrom(address,address,bytes32)", "0x1465aa97": "testingContract()", "0x069d6d1c": "closeOrder(uint256)", "0xa79f26dc": "force()", "0xf2371fb3": "grantGiveableKudos(address,uint256)", "0xaa7dcd84": "testUpdateAuthorityEvent()", "0x0d8b5fa2": "testControllerValidTransferFrom()", "0x0e0f55d0": "RewardOrder(uint256,uint256)", "0x9ea1b79d": "getContentChannel(uint256)", "0x4a67fa7d": "setLotteryFee(uint256)", "0xdb006a75": "redeem(uint256)", "0x8f4ed333": "step2()", "0x1a10cfc3": "delete_entry(uint256,uint256,uint256)", "0xd422e4e0": "takeFee(address,uint256,string)", "0x61a00f6d": "Ballot(bytes32[])", "0x9c30936f": "removeCertificationDocumentFromSelf(bytes32)", "0xa5f4af33": "playerWithdrawPendingTransactions()", "0x07ad9ecb": "safeSend(address,uint256)", "0x8f99ea43": "setDividendDB(address)", "0x1df473bc": "newContract(bytes)", "0xea5ea470": "payFunding(uint256)", "0x743e0c9b": "receiveTokens(uint256)", "0x21835af6": "__dig(uint256)", "0x47448e8a": "set(bytes32,string,bytes32)", "0x9b1ad792": "destroyToken(address,uint256)", "0xf765088f": "UpdateClientAddress(address)", "0xddbbc35c": "searchByName(string)", "0x5ed7ca5b": "halt()", "0x97950740": "roomForBirth()", "0xfc01abbe": "stringToBytes32(string,string)", "0xea3d508a": "selector()", "0x8c88752a": "ContributorList(uint256)", "0x5837e083": "move_history(uint256)", "0xf7c3ee7a": "immortality()", "0x1b9f9647": "accessMyWallet(address)", "0xc8691b2a": "getHistory(uint256)", "0x91e8d3dc": "testBitOrFailIndexOOB()", "0x5c89c10d": "setBannedCycles(uint256[])", "0x4500054f": "isCancellable()", "0x334ef224": "testThrowsUpdateLatestRevisionNotOwner()", "0x763a738c": "allNames()", "0x45590ec8": "addTag(uint256,string)", "0xe7740cf9": "revealPaper(string)", "0xd9d2d058": "Splitter()", "0xb412d4d6": "CafeDelivered()", "0x8365172c": "num_levels()", "0x41c0e1b5": "kill()", "0x3106fea0": "voteOnProposal(uint256,bool,uint256)", "0x82ab890a": "update(uint256)", "0x4636a159": "newPhoneToAddr(address,uint256)", "0x2f29d8c5": "elapsed()", "0x1bf20668": "testAdminTransfer()", "0xf709dd51": "getTrademark()", "0x8b859409": "setRelease(bytes32,bytes32,string)", "0x03959bb7": "setDataContract(address)", "0x4247f52d": "DoRoll()", "0x31ab4066": "testAuthorityTryAuth()", "0xac4b2bae": "newParameters(int256,uint256,int256,uint256)", "0x57eaeddf": "_isContract()", "0x4a3a87e2": "CreateProxyWithControllerAndRecoveryKey(address,address,uint256,uint256)", "0xd116c8c4": "releasePayment()", "0x6615dd83": "setSeedSourceB(address)", "0xb8aca90b": "CurrentGame()", "0xc124e2ea": "checkBetDozen(uint8)", "0x4b0bbf84": "addEntropy()", "0x452fbc41": "USN(address,address,bytes,uint256,uint256,uint128)", "0xcdb6753b": "setNav(uint32)", "0xbb5d40eb": "isValid()", "0xd6f42038": "PhoneToAddress()", "0x6bc3e0f0": "verifySecondHalf(uint256[4],uint256[4],uint256[4])", "0x33893071": "checkMyWithdraw(address)", "0xfb46d4c5": "tweet(string)", "0x248582b0": "receivePaymentForGoodsSoldEarly()", "0x766a3f2e": "Security_ConnectBankAccountToNewOwnerAddress(uint32,string)", "0x1c8d5d38": "allowance(address,address,bytes32)", "0x6b256f57": "DAOSecurity(address,address,bytes,uint256,uint256,uint128)", "0xe8d1e961": "lockAccount(uint256)", "0x152fb125": "SimpleMixer()", "0xf72457af": "CertifierDb()", "0xe8a5282d": "setConfig(bytes32)", "0xbeb92f55": "setCaller(address)", "0x9a571d9f": "isAlphaLower(bytes1)", "0x46a2679a": "getSubpotsCount(uint256)", "0xd62d3115": "testCreate()", "0xb6ed0632": "cancelOrder(uint256,uint256)", "0xc95e81cb": "MyBet(uint8,address)", "0x1d5a9f3f": "object_types(uint256)", "0xa49d53a1": "SmartRevshare()", "0x5b65b9ab": "setFee(uint256,uint256,uint256)", "0x116c6eab": "getProfitShare(address)", "0x8e46afa9": "getDefaultGracePeriod()", "0xdabc706e": "getProposalCost()", "0x3fbb539d": "scheduleCall(address,bytes,uint256,bytes)", "0x86269a88": "checkBetNumber(uint8)", "0xb6ac24df": "updatePatchTree(bytes32)", "0x4637d827": "trust(address)", "0x1c1b8772": "update(address)", "0x5a9f2def": "scheduleCall(bytes4,bytes,uint256,uint256)", "0x81a60c0d": "getResults(uint256)", "0xd1b4ff7e": "multiAccessRevokeD(bytes32,address)", "0x92b7d5b9": "getCurrentGaslimit()", "0x77ceded8": "mintGrey(int256,address,uint256)", "0x2a095fbe": "unlinkEID(bytes,bytes,address)", "0xa6e16ba2": "testThrowsRetractLatestRevisionNotOwner()", "0x4579268a": "getOffer(uint256)", "0xcabb3a3a": "isAlphaNumeric(string)", "0xfadc51cf": "isAlpha(bytes1)", "0xf2022905": "toldYouItWouldWork()", "0x686e8aaa": "GetMoney()", "0x07718a3b": "BankOwner_WithdrawDonations()", "0xc58343ef": "getRequest(uint256)", "0x7b1a547c": "registerAs(address,string,uint256,string,address)", "0x213b9eb8": "setAddr(string,address)", "0x75090ebf": "changeDomain(uint256,uint256,uint256,address)", "0xdbbdf083": "register(uint256,address)", "0xfa4e5e5a": "notify(uint8,string,string)", "0x86a5ff97": "changeStatus(string)", "0xb8f71f26": "scheduleTransaction(uint256,address)", "0xa2ec191a": "addDSource(string,uint256)", "0x18b31f94": "registerLengthFunction(string,string,address)", "0x7b395487": "voteForUltimateOutcome(bytes32,uint16)", "0x39246d75": "VersionModel()", "0xd500dd6a": "challengeTimeout(uint256,bool,address)", "0xd1da09ee": "extractImportFeeChargeLength()", "0xc74e907b": "commit(address,uint256,uint256)", "0x4b09ebb2": "e_exp(uint256)", "0xec3af4a9": "getProjectKudos(address)", "0x714064f3": "BreakableBond(address,address,uint256)", "0xc4bc5da5": "resumeContract()", "0xf7888aec": "balanceOf(address,address)", "0x2f597e71": "testLongInput()", "0x7212b67e": "add_potion(uint16)", "0x9a15f4f3": "getBlockHeader(int256,int256)", "0x6eacd48a": "ownerPauseGame(bool)", "0xf739ed4c": "id_for_user_version(uint256,uint256)", "0xfaf0952b": "testThrowRestartNotOwner()", "0x88a1e895": "test2Fails()", "0x237e9492": "executeProposal(uint256,bytes)", "0x7cb97b2b": "set_owner(address)", "0x2bb685bc": "kill2()", "0xdc52696f": "tokenSupplyChanged()", "0x83d852d9": "shutdownTransactions()", "0x525b25b1": "getDeploymentReward()", "0xeac116c4": "createKingdom(string,address,address,address,address)", "0x014e5fde": "ARKController_1_00()", "0xc6ae3b57": "dEthereumlotteryNet(address,address)", "0xcddbe729": "game(uint256)", "0x8823a9c0": "changeFeeTake(uint256)", "0x021991e7": "getBetsLocked()", "0x3015394c": "cancelRequest(uint256)", "0x9d118770": "destroy(uint256)", "0xe854dfb4": "Order(address,uint256,uint256)", "0x8435be4b": "getLastFarm(uint8,uint8)", "0x27fbcac5": "getChannelFeed(address,uint256,uint256)", "0xc1be4031": "XaurumProxyERC20()", "0x8e25071a": "setProxyCurrator(address)", "0x4f139314": "compensateLatestMonarch(uint256)", "0x85c78fac": "retryOraclizeRequest(uint256)", "0x478e25bf": "resetAction(bytes32)", "0xc74c251f": "addSafely(uint256,uint256)", "0x058aace1": "divest()", "0x6d1da953": "createWithNonce(bytes32,bytes)", "0x30c0f8d6": "scheduleTransaction(address,bytes)", "0x69a5e902": "multiAccessCall(address,uint256,bytes)", "0x6f8b44b0": "setMaxSupply(uint256)", "0x919edc7c": "getChainySender(string)", "0x0b7ad54c": "getContent(uint256)", "0x5bfdc700": "registerData(address,int256,bytes,address)", "0x0d1fce42": "getBankroll()", "0x739b47ca": "recordWin(address)", "0xa5ea11da": "getParameters()", "0xf8af9e6f": "setAdv(uint256,string,string)", "0xe32e9f22": "setDeploymentReward(uint256)", "0x0baaaed9": "setConfigBytes(bytes,bytes)", "0x99f4b251": "mine()", "0x362af076": "createRequest(address[3],address,uint256[11],uint256,bytes)", "0x7fd238ba": "doCoinage(address[],uint256[],uint256,uint256,uint256)", "0x3adb2de7": "bet_this_spin()", "0xa311dd70": "setArray(uint8[10])", "0xc5bf339c": "getLastNonPublished()", "0x9d1bbd7e": "CancelRoundAndRefundAll(uint256)", "0x89790192": "WithFee(address,uint256)", "0x1c879c47": "getMarketHashes(bytes)", "0xbb84d362": "splitProfitVIP_only_Dev()", "0xffb1a6cb": "getWins(address)", "0x3b355af6": "baseData()", "0xb181a8fc": "resetContract()", "0x7d3d6522": "goalReached()", "0xd4c2b6b1": "scheduleTransaction(address,bytes,uint256[5],uint256)", "0xd65ab5f2": "startGame()", "0x4c4766e8": "KittenRegistry()", "0x77e5bf84": "getTxGasprice()", "0xff981099": "getVotes(uint256)", "0x4a7b26ec": "join_game(uint256)", "0xcccf7a8e": "has(uint256)", "0xa525f42c": "transferFromToICAP(address,bytes32,uint256)", "0xeef8e35f": "setChainyURL(string)", "0x557ed1ba": "getTime()", "0x595da94d": "has_owners(uint256)", "0x12511c14": "transferEnable(bytes20)", "0x2b291eb6": "UserAddTicket(bytes)", "0x50baa622": "withdrawToken(uint256)", "0xc01a8c84": "confirmTransaction(uint256)", "0x671dacdc": "CalculateSqrt(uint256)", "0xe74ffbd5": "getPart(bytes32,uint256)", "0xdd54a62f": "content(string)", "0x4025b293": "redeemAllOutcomes(bytes32,uint256)", "0xa8659216": "setInitialLockinDays(uint256)", "0x00b5b223": "computeResponse(uint256,uint16)", "0x2ef761d3": "buyTile(uint8,uint8)", "0x0a874df6": "lookup(uint256)", "0x42c69566": "get_address(address,string)", "0x02dc2e1d": "queuePayment(bytes)", "0x86bb7121": "getBlocksPerRound()", "0xacfdfd1c": "deploy(uint256,string,string,address)", "0x7d298ee3": "beforeExecute(address,uint256)", "0x5023d124": "TestFactory()", "0x827ef325": "_parseMsgData(bytes)", "0xd35b9d83": "codeAt(address)", "0x26161670": "donkeyRanking(uint256)", "0xe0834ea4": "WatchBalanceInEther()", "0xd44f2d3d": "getInitialWithdrawalDone()", "0x4f223fe3": "StatefulFactory(string,string,string)", "0x91cd242d": "setMeta(bytes32,bytes32,bytes32)", "0x9a97043b": "depositIdx(address)", "0x85db2dda": "PayoutQueueSize()", "0x423e1298": "setDoNotAutoRefundTo(bool)", "0xb7a97a2b": "isValidChannel(uint256)", "0xc1441172": "setBlackFlagRequest(uint256,uint256)", "0x53d9d910": "create(address[],uint256,uint256)", "0x64d905c0": "awaitingParticipants()", "0x718bd6dd": "setRequestUntil(uint8)", "0x5a353193": "KrakenPriceTicker()", "0xfb099c84": "newInvestor()", "0xd264e05e": "forward()", "0xcd9f05b8": "balanceEtherAddress(address)", "0xa1da2fb9": "retrieveDAOReward(bool)", "0x60708ae3": "issueAndCommit(address,address,uint256,uint256)", "0x109df68e": "rotateBitsRight(bytes,uint256)", "0x793cd71e": "cashOut()", "0xd3017193": "addUser(address,uint256)", "0xaacf5328": "setVideoID(string,uint256)", "0xb56e1bca": "setExchangeToken()", "0x9341231c": "sendOrThrow(address,uint256)", "0xaed8f3da": "partsPerBillion(uint256,uint256)", "0xdcff5581": "NewFeeAddress(address)", "0xbbe4fd50": "getNow()", "0x3df16377": "make_move_and_claim_victory(uint256,uint8,uint8,uint8,uint8,uint8,uint8,uint8)", "0x5ae5df8f": "deleteRef(string)", "0x6d853ab6": "isSubUser(address)", "0x28472c6c": "claimComputation(bytes,bytes)", "0x2c215998": "updateStatus(string)", "0x7eff1465": "setAccountAllowance(address,address,uint256)", "0xd5089396": "Token(string,string,uint8,uint256)", "0xd1f7a4e4": "createCertificate(bytes)", "0x8c0e2a31": "regProxy(address)", "0xa819819b": "sweepDeityCommission(uint256)", "0x2b861629": "storeBlockHeader(bytes)", "0x25d4bdeb": "LookAtCollectedFees()", "0x5dddea66": "updateState(uint256,uint8,uint256)", "0x3ccfd60b": "withdraw()", "0x6795dbcd": "getAddress(bytes32,string)", "0x9b9ba572": "oraclize_query(string,string[3])", "0xa925d85e": "Exchange(address,address)", "0xbfe8c107": "betOnDozen(bool,bool,bool)", "0x1af716ba": "transferFrom(address,address,uint256,string)", "0x67eae672": "sendCoinFrom(address,uint256,address)", "0x311d5a2a": "recordBalance(address)", "0x7ca823d5": "getAverageChainWork()", "0x19483cd1": "checkHash()", "0xd366fbab": "startLottery(bytes32,uint256,uint256,uint256,uint256,bool)", "0x4d70d1d7": "generateId(uint256)", "0xe13dc28b": "testValidTransfers()", "0x12065fe0": "getBalance()", "0xdd67a360": "OrderLifeCycle()", "0xd7c23572": "historyTimesPlayed(address)", "0x2675c123": "CloseContract()", "0x1381e400": "cancel(uint32)", "0xa48a663c": "transferFromToICAPWithReference(address,bytes32,uint256,string)", "0xb03260be": "scheduleTransaction(uint256,address,bytes)", "0xb37217a4": "getRandomNumber(uint256)", "0x5c54305e": "InsufficientFunds(address,uint256,uint256)", "0x17e1b09b": "minimumDeposit(uint256)", "0x10c4e8b0": "all()", "0xa31d5580": "Registrar(address,bytes32,address)", "0xbe6307c8": "getDraw(uint256)", "0xc985c221": "get_all_levels()", "0x91b7f5ed": "setPrice(uint256)", "0xe42def21": "CryptoHill()", "0x738486bd": "BeerCoin(uint256)", "0xe422ebe9": "getBot()", "0x67dd74ca": "buyTicket(uint256)", "0x276b94e1": "copypaste()", "0x39aaba25": "get_status()", "0x7ed19af9": "multiAccessRevoke(bytes32)", "0x4c1b2446": "transmitInteger(address,bytes,bytes,uint256,uint16)", "0xd014c01f": "enter(address)", "0x1d49e081": "EXECUTE_EXTRA_GAS()", "0x9dafbc13": "initBlock(uint256)", "0xc7e22ac4": "setOracleGas(uint256)", "0xa3053236": "SafeInvestments()", "0xf42ac1de": "minQuorum(uint256)", "0x04d91c6a": "testFail()", "0x0e662cf0": "buyTokens(uint16)", "0x1ef0625b": "player_2(uint256)", "0xcec1365a": "ShortLimit(uint256)", "0x340f5e4e": "get_all_num_levels()", "0x3e2729bf": "isRevocated(bytes)", "0x5a1cc358": "getChannelRank(address,uint256)", "0x4d366398": "runPeerBalance()", "0xaf9a3f9b": "hashName(string)", "0x33298e25": "invoke(uint256,uint256)", "0x63def590": "untrustClient(address)", "0x836d6d66": "WeeklyLotteryB(address,uint256)", "0x7f497550": "scheduleTransfer(address,uint256,uint256)", "0xf9e05ed9": "sha(uint128)", "0xf6458c6a": "toZ1(uint256[3],uint256)", "0xf41017fc": "finalize(uint24)", "0xeeb57139": "CollectMoney(uint256)", "0xfdacd576": "setCompleted(uint256)", "0xb7266456": "StandardToken()", "0x6a8c2437": "totalRescues()", "0x1fdf6e0c": "protectKingdom()", "0xcf31e9fe": "getOutputHash()", "0xc8117b5b": "extractBalanceOfLength()", "0x0674763c": "assert(bool)", "0x87def081": "getFeeRecipient(int256)", "0xc63ff8dd": "claim(bytes)", "0x329bfc33": "getCurrentWinner()", "0x3d6a3664": "setNewOracle(address)", "0xdaa21e0e": "testBitSetSuccess()", "0xbf8783e0": "callAndGetReturn(address,bytes,uint256)", "0xb06df18e": "transfer(bytes20,address)", "0x00100a18": "NewPoll(string,string,uint256,uint256)", "0x2ffb8631": "getReleaseLockfileURI(bytes32)", "0x6716a692": "setDVIP(address)", "0xe8223468": "sha3clone(bytes)", "0x0aeacb5e": "getTotalRecords()", "0x29e30910": "testThrowCreateExistingNonce()", "0x240ecad5": "transferViaProxy(address,address,uint256)", "0xa33d4968": "Tripler()", "0x8caaaae6": "totalWeiPrice()", "0xf28a7912": "quick2()", "0xcbe9ef39": "BasicCoin(uint256,address)", "0xea3d2827": "selectWinner(string)", "0x92e9fd5e": "ColdWallet(address,address)", "0xcd5e3c5d": "roll()", "0x4a82534b": "create(address,address,address,uint256,uint8,uint8,uint256)", "0x5ccd2f9b": "_deleteAllPackedRevisionBlockNumbers(bytes20)", "0x9380b8e7": "testFailAddingMembers()", "0x31b0795c": "registerAddress(address,address)", "0xb76e4890": "Tester()", "0x29c08ba2": "payPremium()", "0xd7f31eb9": "forward(address,uint256,bytes)", "0xd7ef1356": "best_adjustment(bool)", "0x48d9a374": "blockTransfer(address,uint256)", "0x88b9e10e": "seizeTokens(address,uint256)", "0x8736fd16": "getRefStatus(uint256)", "0x2b30d2b8": "invoke(uint256)", "0xd4e78272": "Draw()", "0x0257c48c": "meta(bytes32,bytes32)", "0xc1246d39": "simulatePathwayFromBeneficiary()", "0x699b328a": "randomize()", "0xa200dc73": "getNextShareholder(address)", "0x9a7a7c11": "makeRoll(uint256)", "0x2bf1f9da": "restart(bytes32,bytes)", "0x943a32bc": "Relay(address)", "0x93503337": "isAllowed(bytes32,uint256)", "0xe97b2190": "add_wall(uint16)", "0x0448f79f": "addOptionChain(uint256,string,uint256,uint256,bytes,address,int256[])", "0xc0df77d0": "getRefName(uint256)", "0x27121069": "verify(bytes,uint8,bytes,bytes)", "0xb7009613": "canCall(address,address,bytes4)", "0x0295d71b": "currentDepositLimit()", "0x35ee2783": "Alarm()", "0x71b6663e": "play1(address,uint256)", "0x0178fe3f": "getData(uint256)", "0x489306eb": "oraclize_query(string,string)", "0xfce59d0c": "MangoRepo()", "0x8efc777f": "isBeta(bytes)", "0x1f7b8622": "getVotingDeadline()", "0x76da5667": "admin_kill()", "0x152cf9db": "getDataPoint(int256,uint256,uint256)", "0xd09de08a": "increment()", "0x64ee49fe": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8)", "0xd9fe60f3": "DTHPool(address,address,uint256,string,string,string)", "0x6b4dd158": "getPrice(bytes)", "0x0a80ef45": "getIsClosed()", "0x51fdaf92": "checkExpiredfunds()", "0x694e0d5b": "StringPasser(uint8[])", "0x0e1d88fc": "addTender(uint256,uint256,address,uint256)", "0x53850db3": "getParticipantById(uint256)", "0xb6cb405b": "getContractor()", "0x4c6b25b1": "results(bytes32)", "0x1c4e6cd0": "NameReg()", "0x53aab434": "buyIn()", "0x1ebe5c0f": "sendWithAllOurGasExcept(address,uint256,uint256)", "0xd98b9bb5": "placeBid(address,uint256)", "0x02e8d8c0": "scheduleTransaction(address,uint256,uint256)", "0x8a120dc9": "testBitEqualFailIndexOOB()", "0x33f707d1": "ownerWithdraw(uint256)", "0x98e00e54": "getCallWindowSize()", "0x4da74ee6": "setVoteIntention(uint256,bool,bool,string)", "0x6617e11a": "NiceGuyTax()", "0xfe13a823": "computeResponseFirstHalf(uint16)", "0xf7bd2361": "LookAtBalance()", "0xb09bc3bf": "try_to_get()", "0x0cee22e9": "testSetBalanceSetsSupply()", "0xae404996": "oraclize_query(string,string[3],uint256)", "0x2ad95786": "winner(address)", "0xe5fe4f31": "buy(uint8,bytes32,bytes32)", "0xe23941bc": "testDepositWithdraw()", "0xfc89aff6": "submitVerifiedUsers(address[])", "0xddf187b0": "dogFight()", "0xb5f5962a": "CALL_GAS_CEILING(uint256)", "0x92093dd6": "getLastResult()", "0xbfad16f4": "new_offer(uint256,uint256)", "0x01df7f30": "validateProposedThroneConfig(uint256,uint256,uint256,uint256)", "0x4054f5de": "EthVentures3()", "0x244c23ee": "Token(uint256,string,uint8,string)", "0xc3daab96": "withdrawBond(uint256)", "0x5fa21f1f": "enableBetting()", "0x3b591ea7": "AmountToForgeTheNextBlock()", "0x8c3c4b34": "getSaleStatus()", "0x7429f1eb": "multiAccessSetRecipientD(address,address)", "0xf99ff4df": "paged(uint256,uint256)", "0x2a64fb63": "getSaleDate(bytes)", "0x749f9889": "changeAllowedRecipients(address,bool)", "0x053c351b": "oraclize_getPrice(string)", "0x19663f7f": "TransferAmountFromBankAccountToAddress(uint256,address)", "0x5292c1a9": "testThrowsRestartEnforceRevisions()", "0x68f2ab8e": "Currency(string,string)", "0xd6e0bf29": "OwnerDeposit()", "0x94c3fa2e": "getLastBlockHashUsed()", "0x45362978": "query1(string,string)", "0xaff21c65": "getMinimumEndowment(uint256)", "0xe33c7ae2": "scheduleTransaction(uint256,uint256,bytes)", "0x9eb9dd3b": "getBetsProcessed()", "0x3807ba1b": "poi()", "0x7281854d": "GetCategoryValue(uint8)", "0x45ee49b9": "getUltimateOutcomes(bytes)", "0x0109f22e": "CrowdSale()", "0x98596726": "note(uint224)", "0x06900c41": "ZeroPonzi()", "0x3df76482": "fipsPublishData(bytes20,bytes)", "0xe0429b6c": "ShinySquirrels()", "0xa4a7cf5c": "redeemWinnings(bytes32)", "0x2e898ddc": "validateTemporalUnit(uint256)", "0x3af75ee1": "storeBlockWithFee(bytes,int256,bytes,int256)", "0x43e6125d": "Badge(address)", "0x75a6a332": "testThrowRetractNotRetractable()", "0xbed411a0": "CheckPrize(address)", "0x16f3cb5e": "__kill()", "0xe8efc1a0": "updatedValue(bytes32)", "0x9c7264d7": "fillOrder(address,uint256)", "0x9a0af2ec": "getStLength()", "0xf62cce34": "_clearRecordHierarchy(uint256,bytes32[],bytes32)", "0x940f851c": "Ballot(uint8)", "0xd96e5565": "testThrowsRetractNotRetractable()", "0x3a314b24": "SendETH(address)", "0xbd8c1d33": "checkTransferFromToICAPWithReference(address,bytes32,uint256,string)", "0x01da73ff": "isValidChannel(bytes)", "0x8f8bde82": "MicroDAO()", "0x2973e372": "isAlphaUpper(bytes1)", "0x1d2b7155": "activateImportFeeChargeRecord(address)", "0x06ab5923": "setSubnodeOwner(bytes32,bytes32,address)", "0x9d7d6667": "multipliers()", "0x8af49ab7": "maintain(uint256,uint256)", "0x1f3a3a53": "mint(int256,uint256)", "0x74389991": "breakit()", "0x64371977": "set(uint256,string)", "0x3fa6497f": "AdminAddFunds()", "0xba7dc45f": "_removeOperation(bytes32)", "0xf81d087d": "prepareLottery()", "0xd239ea8b": "getSchemasLenght()", "0xa2f3ede2": "computeNameHash(bytes)", "0xa28ecf0b": "sendCryptedHand(bytes)", "0x003b9d88": "setLowerFeePercentage(uint8)", "0x98ea5fca": "depositEther()", "0xb9a0a708": "testChargesAmountApproved()", "0x55291dbd": "claimEther()", "0x2d2800f1": "react()", "0xa9d2293d": "lastClaimBlock()", "0xc45aa04c": "queryShareholders(bytes,uint256)", "0x67af1c81": "getRoundIndex()", "0x50b7b7a2": "setRating(bytes32,uint256)", "0x0aa7881a": "MintableToken(int256,uint256)", "0x0eb3f5a0": "sweepCommission(uint256)", "0x97d47a60": "registerAccountant(bytes,address)", "0xe2c61114": "setImportFee(address,uint256)", "0x6dbe31eb": "testSubBalance()", "0xf5c98aff": "GreeterB(bytes)", "0x79216f5f": "add_monster(uint16,uint16,uint16)", "0x023c23db": "getSize(uint256)", "0x0e1ca8a5": "Oraclize()", "0xa05e822a": "howManyOwners()", "0x313b7b19": "finance()", "0x51a5f2f2": "ConsultingHalf(address,address)", "0x1fb6e99d": "paymentNeeded(uint64)", "0x2bffc7ed": "add(string,address)", "0x5c52c2f5": "resetSpentToday()", "0x39cdde32": "ecverify(bytes32,bytes,address)", "0x64e24f4b": "UpdateClientTokenAccount(address)", "0x0d2560ee": "addMe()", "0xd8589be3": "CoinFlipper()", "0x3b46a7df": "ivote(bool)", "0xa6823189": "parseAddr(string)", "0xd0c24e93": "setNotUpdatable(bytes20)", "0x1f13de92": "inEther(uint256)", "0xb6ce5581": "oraclize_query(string,string[5],uint256)", "0x31ae0019": "KissBTC()", "0xdabf7dc8": "PayoutDividendEarly(uint256,bool)", "0xe3da41b5": "sortWinningNumbers(uint8[5])", "0x8ea98117": "setCoordinator(address)", "0xeff6be2f": "changeBaseFee(uint256)", "0x483a83df": "setKYC(address)", "0xf98a4eca": "executeVote(uint256)", "0x776d1a01": "unvest(uint256,uint256,uint256,uint256,uint256,bool)", "0x1cf52f2b": "isActiveRegistrant(address)", "0x24c9bf5e": "Prizes()", "0xb3822da8": "getContents(uint256[])", "0x999a9965": "setMany(uint256,int256,uint256,bytes,address,bytes)", "0xbade6033": "propose(bytes,uint256)", "0xd38159b8": "testPass()", "0xdabf7ec4": "helper(uint256)", "0xf4993bbd": "executeEmergencyWithdrawal()", "0x46ddb7db": "setAccountBalance(address,uint256)", "0xc12af1ce": "fipsRegister(uint256,bytes)", "0x8f420866": "DEFAULT_SEND_GAS()", "0x62770252": "needsFuneral(uint256)", "0x32921690": "checkDepth(address,uint256)", "0xb3c1a588": "parseMsgData(bytes)", "0x29cd5777": "_tryEraseSingleNode(bytes32)", "0xc6e0c908": "checkTransferFromWithReference(address,address,uint256,string)", "0x9bd99195": "multiAccessChangeOwner(address,address)", "0xa360b26f": "Migrations()", "0x6c6f1d93": "getContractCreationValue()", "0x5445e38c": "_isCycleValid(uint256)", "0x2c85f8e0": "oraclize_query(string,string,string,uint256)", "0xcdda62ad": "FutureBlockCall(address,uint256,uint8,address,bytes4,bytes,uint256,uint256,uint16,uint256,uint256)", "0xc8fdc891": "numberOfMonarchs()", "0xf578fd85": "assertEq0(bytes,bytes)", "0xda311588": "getCoin(uint256)", "0x9a35f886": "__dig_then_proxy(uint256)", "0xfa14df6b": "getChangeRecipientFee()", "0x95f0684b": "getPackageNameHash(uint256)", "0x42909a9e": "create_game()", "0x51582ef3": "sendProxyTransaction(address,uint256,uint256,bytes)", "0xc4e41b22": "getTotalSupply()", "0x110df916": "getChannelID(uint256)", "0x4dc3141b": "CalcAll()", "0xb88a802f": "claimReward()", "0x82b2e257": "getTokenBalance()", "0x9bb0e4df": "getUint(int256,bytes32,string)", "0xc1ae4044": "checkBetColor(uint8)", "0x4a8b5389": "allocateBountyAndEcosystemTokens()", "0xdf06f906": "numBets()", "0xdeb80111": "transfer_asset(address,uint256)", "0x5216aeec": "totalInvested()", "0xe2deaa81": "set_reference(uint256,uint256,uint256)", "0x2ffda1e0": "setBlackflag(uint256,bool)", "0xba45b0b8": "transfer(address,address)", "0x7d7c2a1c": "rebalance()", "0xf32efd3c": "recoverUser(address,address,uint256,uint8,bytes32,bytes32)", "0x4571d4c4": "FutureCall(address,uint256,uint16,address,bytes,bytes,uint256,uint256,uint256)", "0x5fc5d48b": "burnUnsoldCoins(address)", "0x4da47ba0": "TokenSale(address,uint256)", "0x3d9ce89b": "scheduleCall(bytes4,bytes,uint256)", "0x6662e4be": "isWinningBet(uint256)", "0xa501e88d": "Content()", "0x4b70cec4": "getTime(address)", "0x12253a6c": "stopContract()", "0x173825d9": "removeOwner(address)", "0x26121ff0": "f()", "0x7b647652": "LittleEthereumDoubler()", "0x0c5c2ca3": "getIndexName(bytes)", "0x90f2c86d": "convertToWei(uint256,string)", "0x83f95f13": "openClaim(string)", "0xe8b5e51f": "invest()", "0xfdc4b338": "authorizeExtension(uint256,bool,string)", "0x4e116eb8": "unRegisterCertificationDb(address)", "0x5c8a1053": "extend(string)", "0xa932ed0d": "whitelistRemove(address)", "0xa1188e56": "getCurrentDifficulty()", "0xbf1fe420": "setGasPrice(uint256)", "0xead710c4": "greet(string)", "0x144fa6d7": "setToken(address)", "0x42402c2c": "fipsTransferMulti(bytes20[],address)", "0x93e84cd9": "play()", "0x741b3c39": "depositBond()", "0x23306ed6": "getMinimumBond()", "0x5f2e686d": "Ethereum_eight_bagger()", "0x9890220b": "drain()", "0x233120aa": "getChainyURL()", "0xe9dc0614": "vote(bytes)", "0x4df53a0f": "testSetApprovalDb()", "0x5fe27ab0": "createHKG(address)", "0xb56b2627": "add_owner(uint256,address)", "0x6f9a023c": "theultimatepyramid()", "0xc8796572": "collectFees()", "0xea3ebae6": "getConfigBool(bytes32)", "0x213ac932": "addUser(address,uint256,uint8,bytes32,bytes32)", "0xfae9d06d": "calculateTxFee(uint256,address)", "0x45d27edf": "forward_method(bytes,address,uint256,bytes)", "0x8e9ccd04": "computeIndexId(address,bytes)", "0x2f6ae467": "transferDocument(bytes,address)", "0x6e353a1d": "emergencyWithdrawal(address)", "0x7dd56411": "ownerOf(bytes32)", "0x9dc35799": "updateReading(uint256)", "0x246c02e6": "check_depth(uint16)", "0x03d22885": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8,uint256)", "0x881be8f7": "undo()", "0x953307d8": "revealScissors(string)", "0x7af30442": "testToggleBitFailIndexOOB()", "0x1e0c7ed4": "setConfigBool(bytes32,bool)", "0x2e3be78d": "setPrecisionDirect(uint8)", "0x95a078e8": "hasAccess(address)", "0x245a03ec": "scheduleSetIt(uint256,uint256)", "0xb863bd37": "random(uint256)", "0xa5e62f02": "fallbackRP()", "0x618fa9ce": "getBotBillingIndex(uint256,uint256)", "0x06909f69": "cancel(string,uint256)", "0x2b198366": "addCertifier(address)", "0x57e871e7": "blockNumber()", "0x2b98222e": "getInstitutionByAddress(address)", "0x89eedf00": "setPdfHash(bytes,bytes)", "0x7ac4b05e": "returnMyMoney(uint256)", "0x7fc90182": "Pool(uint256)", "0x291e6777": "sendVote(uint256,uint256)", "0x579badf6": "UniversalFunction(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", "0xe1f21c67": "approve(address,address,uint256)", "0xa1b9af31": "unlockBets()", "0x92d0d153": "t()", "0x095ea7b3": "approve(address,uint256)", "0x9cb31079": "setLowLimit(uint256)", "0xb971b4e5": "setNotTransferable(bytes20)", "0x2a745971": "BlockKing()", "0x582ca57b": "get_associations()", "0xa0d605c6": "addCertificationDocumentInternal(address,bytes32)", "0x85233869": "NumberOfMiners()", "0xb0349184": "clearRecords(bytes32[])", "0x3e8f5b90": "setConfig(string,uint256)", "0x7c73f846": "getMinimumEndowment(uint256,uint256,uint256)", "0xcc9ae3f6": "getMyReward()", "0xac900c2d": "unregisterSeller(address)", "0x306df22d": "GPSDestination(int256,int256,uint256)", "0x5e968a49": "ownerSetMaxProfitAsPercentOfHouse(uint256)", "0x80dcaf27": "getRefNumber()", "0x4245b0f7": "Lottery()", "0xe46164c5": "waitingForPayout()", "0xa8c3ec48": "oraclize_query(uint256,string,string[2])", "0x58ea80e5": "setThroneCreationPrice(uint256)", "0x8a4fb16a": "getWithdrawal(uint256)", "0x4464aec7": "testTryGet()", "0xf3c37bd5": "Verifier(address,uint256,uint8)", "0xb4c4e005": "testTransferToAcceptAuthority()", "0x346b306a": "oraclize_query(string,string,string)", "0x24032866": "checkExecutionAuthorization(address,uint256)", "0x509f8633": "create_account()", "0x26da8e17": "ownerUpdateCostToCallOraclize(uint256)", "0x74a93e6c": "setTokenHolder(address,address)", "0x1baaeb91": "getSignature(bytes4,uint256)", "0x337c1e28": "getIndexRoot(bytes)", "0xac92fdb5": "getSaleDate(bytes16,uint256)", "0x13b2663b": "cash_received(string)", "0x68e4bd99": "testSetBitSuccess()", "0x20620f37": "onAuctionEnd(string)", "0x85528394": "currentClaimPriceWei()", "0x1995333b": "burnFunds(uint256)", "0x5184ffc9": "setAmbiAddress(address,bytes)", "0x269975d0": "GameDetails(uint256)", "0x29274fe1": "buyBOTx(uint256,string,string,address,uint256)", "0x720c4798": "workshop()", "0x6f9a5eab": "createTx(uint256,address,uint256)", "0xb66a323c": "claimThrone(string)", "0x14cabddb": "joinProof(uint256)", "0x76e4ca0d": "voteQuorum(uint256,bool)", "0xbcb3b5d2": "getGamblesList(uint256)", "0xf2080ba6": "Pong(int8)", "0xab470f05": "getCaller()", "0xe0b1cccb": "updateBalance(address,uint256)", "0x4889ca88": "receiveApproval(address,uint256,address)", "0xbc4b3365": "addFunds(address,uint256)", "0x5d1a3b82": "getOutcome(bytes32)", "0x8204ecdd": "getFee(bytes)", "0x49aa4ee2": "removeVote()", "0x9131d803": "testSetFrontend()", "0x72929b56": "getKudosPerProject(address)", "0x287418e7": "query(uint256,uint16)", "0xbb7859b5": "periodThree()", "0x7dc5cd32": "_patternToNumber(bytes)", "0xf7ea7a3d": "setTotalSupply(uint256)", "0xb3f98adc": "vote(uint8)", "0x655388be": "walkTowardsBlock()", "0x856deacf": "findTag(string)", "0xcaab0acc": "testThrowCreateRetracted()", "0xede8ebf3": "checkApprove(address,uint256)", "0x4296a9cb": "getNodeRightChild(bytes)", "0x03cf4fd6": "expire(uint256,uint256,uint8,bytes32,bytes32,bytes32)", "0x87045369": "setCanCall(address,address,bytes4,bool)", "0x0ed21029": "getIssueAssignee(uint256,bytes32)", "0xc5958bda": "removeFile(bytes)", "0xa8026912": "setSource(address)", "0x05a5b8c6": "verifyTx(bytes,int256,int256[],int256,bytes,int256,int256[],int256)", "0xed3058e0": "transferRight(address,bytes)", "0xba487e62": "newCampaign(uint32,uint96,uint16,uint16)", "0xd6c19fe0": "build(bytes,uint256,uint256,address)", "0xebb741cb": "getChannelSize(uint256)", "0x3b996f40": "quarter(uint32,uint32,uint32,uint32)", "0x0b7373d6": "giveAllBack()", "0x3f887fad": "buyShares(uint256,uint8,uint256,uint256)", "0xb5deeca7": "BaseRegistry()", "0x6dd6e87b": "checkOut(int256)", "0x90a85119": "checkBetResult(uint8)", "0x724121ae": "contentExists(uint256)", "0x67bd69a6": "getLastDuel2()", "0x821e9169": "testFailControllerChargeMoreThanApproved()", "0x083ae1fe": "setPackage(string)", "0x8eaa6ac0": "get(bytes32)", "0xf42aa287": "getBlobStore(bytes12)", "0x32a2c5d0": "getContractAddress()", "0x69d89575": "releaseFunds()", "0x984ac378": "lotteryTitle()", "0x3baf4e1e": "newPayment(uint256,uint256)", "0x938c4307": "scheduleCall(bytes4,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", "0x47372325": "getChannelSize(address)", "0xcb10e0c5": "getLastDuel1()", "0x1a0919dc": "unregister(bytes32)", "0x6a3c1198": "_projectCancelNew()", "0x976b01c0": "setNotRetractable(bytes20)", "0x44d03ac6": "BlockhashFetch(address)", "0xb0fd935b": "registerCertificationDb(address)", "0x2c7c4549": "PurchasableToken(uint256)", "0x3e0a51b4": "TweetAccount()", "0xc5f310c0": "register(bytes12)", "0xc10dd4c6": "getEvents(bytes32[],address)", "0x37a6b9f8": "recordCallback(address,uint256,bytes,bytes)", "0x1b9265b8": "pay()", "0xc91d7e9c": "getFee(bytes32[])", "0xf6c5c80d": "cleanUp()", "0x590e1ae3": "refund()", "0x9c709343": "split(bool,address)", "0xe68d3ae3": "escrow(uint256,string,address,uint256)", "0xa1cb31b7": "_state()", "0xfbac3951": "isBlocked(address)", "0x29dfdded": "addNewDonkey(address)", "0x7bc49a95": "play(uint256,uint256)", "0x5329c681": "checkTimeout(uint256)", "0x7c05caf3": "testCreateCostAuth()", "0x8606f905": "balanceOf(address,bytes)", "0xbe45fd62": "transfer(address,uint256,bytes)", "0xd7130651": "getCity(uint256)", "0xb2353d69": "updateRightLottery(address)", "0x01bb85a4": "__startBlock(string)", "0x4316abbb": "newJester(address)", "0x5c3e426c": "adminRetrieveDonations(address)", "0x293ffca3": "AddressReg()", "0x4156fdb7": "createSwap(uint256)", "0x2852b71c": "accept()", "0x027a5e3f": "getLastVersion(bytes)", "0x3d90d44d": "addPowerSource(address,uint256,uint256)", "0x1ab06ee5": "set(uint256,uint256)", "0x50f07cf9": "setReadingDelay(uint256)", "0x669e48aa": "get(uint256,uint256)", "0xdea9c72b": "getLatestPreReleaseTree(bytes32,uint32,uint32,uint32)", "0x60f66701": "useCoupon(string)", "0x2431f164": "process_payment()", "0x17623e5b": "unauthorizeManager(address)", "0x367bbd78": "strlen(string)", "0xbab86ea8": "test(string,string)", "0x25f3da52": "GetBankAccountNumber()", "0xebb045fa": "PublicResolver(address)", "0xdd57d5c5": "setTrust(address)", "0x22e803c2": "transferBounty()", "0x12c8052f": "won()", "0x3535cd52": "setDailyCosts(uint256)", "0x92d8c8cf": "setupImportFee(address,uint256)", "0x53caf582": "testThrowSetNotUpdatableNotOwner()", "0xb3ade772": "shipProducts(string,string)", "0x61472fd4": "CSGOBets()", "0x5c7c9aa4": "checkAccountState(address)", "0x6560a307": "suggestedGas()", "0xd0d552dd": "setAsset(address)", "0xc02f081a": "shiftBits(bytes,int256)", "0x9348cef7": "reveal(uint256,uint256)", "0x5ca1c5a0": "getNodeValue(bytes)", "0x34c1b4ba": "sha(bytes)", "0xe0117441": "setRegistrationPrice(uint256)", "0x92698814": "reserved(bytes32)", "0xaa1e84de": "hash(bytes)", "0x2125b65b": "transfer(uint32,address,uint224)", "0x9f9eac67": "ChangeName(string)", "0x7eb69ba1": "hint(int256,bytes32,string,bytes20)", "0xc6888fa1": "multiply(uint256)", "0xa9059cbb": "transfer(address,uint256)", "0x84c344fe": "_register(bytes4,string)", "0x744d8b4f": "recordWin(uint256,uint256)", "0xad1ef61e": "donkeyInvested(address)", "0xb4787dc5": "linkEID(bytes,bytes)", "0x7b1cbb13": "getChannelValue(bytes)", "0xd0febe4c": "buyTokens()", "0x74f519db": "setLastTimestamp(uint256,uint256)", "0xe30081a0": "setAddress(address)", "0x6fd902e1": "getCurrentBlockNumber()", "0x25d8dcf2": "betAndFlip()", "0xc062f578": "updateStage()", "0xe0cfc05c": "testThrowsRetractLatestRevisionDoesntHaveAdditionalRevisions()", "0x854f4817": "buyKissBTCWithCallback(address,uint256)", "0x58b1f29c": "refundBounty(uint256)", "0x0645b5d5": "getMyShareholderID()", "0xe9c63b9c": "requestPeerBalance()", "0x1b03316f": "getSecond()", "0xbcc6092a": "MyEtherBank()", "0x1cf43b63": "extractExportFeeChargeLength()", "0x5e58f141": "shares(address,bytes,int256)", "0x6103d70b": "withdrawPayments()", "0x3e0663e0": "AdminDrawProcess()", "0xa0f029fc": "ContractorInterface(address,address,address)", "0xe604cf9f": "get_all_squares()", "0xd13d1ace": "scheduleCall(bytes,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", "0xb74bc710": "LuckyDoubler()", "0x611f69de": "__proxy_motion(address,uint256,uint256,bytes)", "0xbb814e9e": "versionExists(bytes32)", "0x545e7c61": "deploy(address,address)", "0x1b437d0c": "compareLastCalldata(bytes)", "0x845051d3": "testContractsNotNull()", "0x23de6651": "emitTransfer(address,address,uint256)", "0xd78c20ff": "voteApprove(uint256)", "0x6f13e01b": "EthVenturePlugin()", "0x1f6b0a9d": "getReleaseLockfileURI(string,uint32,uint32,uint32,string,string)", "0x13d4bc24": "buyTokenProxy(address)", "0xd509b16c": "testWithdraw()", "0x2f54bf6e": "isOwner(address)", "0xf60381a1": "stra2cbor(string[])", "0x34dbe44d": "getLastBlockNumberUsed()", "0x28dcfdac": "getSignsCount(uint256)", "0x2888f9d0": "updateMaxBet()", "0xc3b2556d": "lookup(bytes)", "0x6fbaaa1e": "currentMultiplier()", "0xe241c1d9": "deriveKey(uint256,uint256,uint256)", "0x5b37e150": "create(bytes32,bytes)", "0xa1c95ac2": "GSIToken(uint256,string,uint8,string,address)", "0xfc9e53df": "setNextRegistrar(address)", "0x34e8980f": "bootUpHangouts()", "0x457dd8b3": "setMasterKey(address)", "0xdb833e3a": "sellShares(bytes32,uint8,uint256,uint256)", "0x1e5330ca": "checkBetResult(uint8,address,bytes32,bytes32)", "0x4a00a522": "homebase(int256,int256)", "0xb938bf42": "sendBounty(bytes32)", "0x46be96c3": "amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "0x2fa00e58": "fipsTransfer(bytes20,address)", "0x95669952": "debtor(address,uint256)", "0x3f19d043": "getContributions(address)", "0xeb455dc6": "sendBitcoin(string,uint256)", "0x034cb28e": "addressOf(address,bytes)", "0x1e26fd33": "setBool(bool)", "0x1b55ba3a": "Start()", "0x6f3fe404": "updateBalances()", "0xc45b415e": "createRequest(address[4],address,uint256[11],uint256,bytes)", "0x180aadb7": "underLimit(uint256)", "0xb44bd51d": "getConfig(string)", "0x93d79105": "hashRelease(bytes32,bytes32)", "0x9f8a13d7": "isActive(address)", "0x257bcd6a": "placeBet(uint256,bytes32,bytes32)", "0xdd10d97e": "getPlayerWaiting()", "0x6d16f79c": "__transferWithReference(address,uint256,string)", "0x6ce1417e": "Fund()", "0x67beaccb": "scheduleCall(bytes)", "0x4b0697e4": "Manager(address)", "0x6a7fc8b7": "setDailyWithdrawLimit(uint128)", "0x7a6e9df7": "getTimestamp(bytes)", "0x797af627": "confirm(bytes32)", "0x81183633": "setStandard(bytes32)", "0x6a1db1bf": "changeFee(uint256)", "0x4e6ab570": "insert_order(address,bool,uint32,uint128)", "0xa4e2d634": "isLocked()", "0x7c79ebce": "expired(uint64)", "0x20965255": "getValue()", "0xfd408767": "fireEventLog4()", "0xcf6b3822": "WatchCollectedFeesInSzabo()", "0x8f7fe231": "ValidetherOracle()", "0xbf12165e": "fillUpSlot(uint256,uint256)", "0xdabdc1f2": "ChangeActiveDigger(address)", "0xe9e7a667": "get_stake(bytes32)", "0x0ad95b44": "bribery()", "0xdb6fcf01": "is_destroyed(uint256)", "0x4378a6e3": "getAttributes(uint256)", "0x71589d6b": "newponzi()", "0x47274dbe": "disableUser(address,address)", "0xb40a5627": "bidCount()", "0xf1eae25c": "mortal()", "0x13af4035": "setOwner(address)", "0xaf030d2c": "setResult(uint256,uint256,bytes32)", "0x098ab6a1": "snapshotCount()", "0x27cca148": "lastClaimedBlock()", "0x940c154b": "lockBet(uint256)", "0x378c0605": "buyTickets(address)", "0xbcfcb03e": "allocateFounderTokens()", "0x0138e31b": "_jAdd(uint256,uint256,uint256,uint256)", "0x0a7f4239": "getAccountFundContract(address)", "0xc96593a0": "The10ETHPyramid()", "0x22beb9b9": "scheduleDoIt(uint256)", "0xdb0e127a": "openDoor()", "0x3dc02266": "fipsRegister(uint256)", "0x7d242ae5": "setBasePrice(uint256,bytes)", "0xe82b7cb2": "proxySetCosignerAddress(address,bytes32)", "0xa60bbcd3": "ModelCoordinator()", "0xc26aa3c9": "lockUnicorn(uint256)", "0x96ff7e97": "requestIdentity()", "0x99753de7": "clear_level()", "0x69d79ad5": "moneySumAtSettlement(address,uint256,uint256,int256,uint256,uint256)", "0xda359dc8": "setBytes(bytes)", "0x6edb4cf6": "testThrowRetractLatestRevisionDoesntHaveAdditionalRevisions()", "0x9d170c5d": "getRef(string)", "0x11cd98ed": "convertToAllTable(uint256,string)", "0x67f809e9": "DynamicPyramid()", "0xd5f37f95": "sign(uint256,uint256,address)", "0xf5562753": "getClaimAmountForBlock(uint256)", "0xc9bbc8c0": "donkeyName(address)", "0x5858ef10": "testErrorNonOwnerCantBreach()", "0x74388347": "checkBetDozen(uint8,address,bytes32,bytes32)", "0xee564544": "_slotCancelNew()", "0xf3bb9741": "commitmentCampaign(uint256,bytes32)", "0x2b68b9c6": "destruct()", "0xa9b8f7b8": "ProtectTheCastle()", "0x16181bb7": "shortSellShares(bytes32,uint8,uint256,uint256)", "0xb524abcf": "totalSupply(bytes32)", "0x8006745b": "getPayout(address)", "0x137c638b": "getExtraGas()", "0x824d5603": "getIndex(uint16,uint16)", "0x245a6f74": "isProxyLegit(address)", "0x9eded57a": "paybackLast()", "0x7b1aa45f": "ownerDeposit()", "0x974654f4": "requiredGas()", "0x76d690bb": "BountyList()", "0xf4b2dfea": "Matching_Finneys()", "0xbd66528a": "claim(bytes32)", "0x85eac05f": "changeOwnerAddress(address)", "0xa69df4b5": "unlock()", "0xe6d9bb0f": "secondsUntilEnd()", "0xcd57a448": "SwapContract(address,uint256)", "0xb245fc92": "findNextMonth(uint256,bytes)", "0x7620f4bb": "fipsNotaryLegacy68b4()", "0x61886014": "combineDice(uint8,uint8)", "0xdf4ec249": "step3()", "0x2262cd94": "wroom()", "0x1099d3ec": "scheduleTransaction(uint256,uint256,uint256,bytes)", "0xd8c34127": "isKnownSignature(string)", "0x8afa08bd": "setDrawDate(uint256)", "0xdb18c972": "play4(address,uint256)", "0x2f30283e": "testSomething()", "0x8ca17995": "divest(uint256)", "0x1ef3755d": "restart()", "0x99bb875c": "funeralAndBirth(bytes,int256,bytes)", "0x157ad5a1": "canWithdrawBond(address,uint256)", "0xfd8055d2": "updateBOTBillingInfo(uint256,string,address,string,string,uint256)", "0xa10889fa": "setVersion(uint32,uint32,uint32,string,string)", "0x51cff8d9": "withdraw(address)", "0xbe999705": "addFunds(uint256)", "0x2e5d1042": "requestPayout(uint256,uint256,bytes32,uint256,uint256)", "0xb50954b6": "cancelWaitingForOpponent()", "0xc42cd8cf": "etherSplit(address,address)", "0x42ce1488": "upload(string)", "0xad04592e": "owner_deposit()", "0xc2cf7326": "hasConfirmed(bytes32,address)", "0x1dbf3bc7": "spend(uint256)", "0x36b81feb": "Deed(address)", "0xf47289e1": "_ecDouble(uint256,uint256,uint256)", "0x026993e0": "Midas(address,address)", "0x5e404de3": "setMaximumCredit(uint256)", "0x0194db8e": "sum(uint256[])", "0xa04a0908": "execute(address,bytes,uint256)", "0x2b4a3b31": "doTransferFrom(address,address,uint256)", "0x96ed10a4": "issuePOIs()", "0xb75c7dc6": "revoke(bytes32)", "0x6056969b": "announce(bytes32)", "0xd63547e6": "GetFreeCnt()", "0x788e26e7": "sponsorDeposit()", "0x550dd006": "calcCostsBuying(uint256,uint8,uint8,uint256)", "0xd4b1d19f": "testThrowsTransferDisabled()", "0x04706fdf": "giveContributionsBackProfitBugged()", "0x5d5483b3": "WatchAppliedFeePercentage()", "0x6bf8f85a": "forceFinish()", "0x3edd90e7": "NewOwner(address)", "0x7c69b5d1": "NewDeposit(uint256)", "0x866f6736": "trustedChildWithdraw()", "0xcdcb7c8f": "chase()", "0x60dccd89": "getContentAccount(uint256)", "0xbff1f9e1": "totalUsers()", "0x1aca00fd": "variable(uint256)", "0x6e658fbe": "myFundsExpireIn(uint256)", "0xddb1bdc8": "credit(address,uint256,uint256)", "0x934bc29d": "exampleFunction(uint256)", "0x113e6b66": "fipsAddToLedger(bytes20,address)", "0x1a88bc66": "slot()", "0xec97cff7": "addCertificationDocument(address,bytes32)", "0x0790e880": "setBlockappsAddr(address)", "0xe0ad411d": "assets(bytes)", "0x791b51f1": "Consulting(address,address)", "0xa26dbf26": "totalParticipants()", "0xb78b52df": "allocate(address,uint256)", "0xdb29fe12": "addShareholder(address)", "0x06459119": "testThrowsTransferNotTransferable()", "0xbadbaa3c": "setCallData()", "0x2c6b2c92": "checkProfitLossSinceInvestorChange()", "0x8aa6f1b1": "setUltimateOutcome(bytes32)", "0xecb98714": "random_damage(uint256)", "0x506e106c": "setToS(string)", "0xf0d474f9": "underdogCount()", "0x2212dbc3": "get_timestamp()", "0xd504ea1d": "getArray()", "0x9b29cb23": "getDailyPayment()", "0x9d3e069c": "StartDraw()", "0x12494160": "isHolder()", "0xbbd4e8c9": "numDeposits()", "0xfea2920e": "createNewDraw()", "0xff556ecb": "releaseUnicorn(uint256)", "0x3bed33ce": "withdrawEther(uint256)", "0xaa9669c1": "roll(uint256,bytes)", "0xa00aede9": "scheduleCall(uint256,address)", "0xc0819961": "Invest()", "0x1ed24195": "getPeriod()", "0x5babb758": "testSetUp()", "0xaaf9d13e": "buyTopDog(uint256,uint256)", "0x7c45ef6c": "stringToSig(string,string)", "0x7353f62b": "testGetApprovalDb()", "0xef7507c8": "testWinner(uint256)", "0x7ef95c6f": "extractAccountAllowanceRecordLength(address)", "0x66099706": "getChannelCred(address,uint256)", "0x5c242c59": "query1(uint256,string,string,uint256)", "0x299a7bcc": "setOwner(address,address)", "0xe1152343": "payout(uint256)", "0xd40a71fb": "step1()", "0xda9c6a46": "getReplyCount(uint256)", "0xffb7bfba": "watchProposal(uint256)", "0x2e1a7d4d": "withdraw(uint256)", "0x03da8902": "transfearDBOwner(address)", "0xc9bd2893": "fines()", "0xfdd3a879": "quick()", "0xda0774ad": "getCallFeeScalar(uint256,uint256)", "0x0f2c9329": "split(address,address)", "0xa3912ec8": "receiveEther()", "0xfd6f5430": "setContent(string,bytes32)", "0x99e0021f": "mergencyCall()", "0xb7aec6a5": "scheduleCall(address,bytes,uint256,uint256,uint8,uint256)", "0x23145ca0": "forceCheck()", "0xc7cf28fe": "canClaimTimeout()", "0x26db7648": "proposedVersion()", "0x60a60fd8": "testProxyCallWithValue()", "0x044d0b06": "oraclize_query(string,string[2])", "0x4f013184": "investInTheSystem()", "0x0c9fd581": "assertTrue(bool)", "0x09574810": "getOperationsNumber()", "0x6e2edf30": "ETCSurvey(address)", "0x3cc86b80": "GetMoney(uint256,address)", "0xf7b89a3e": "getTotalCosts()", "0xb18c6847": "manualUpdateBalances()", "0x8a65d874": "userStats(address)", "0xf80b3cfa": "checkBetLowhigh(uint8)", "0xc2def3b9": "getOrganizer()", "0x2dae9878": "BankOwner_EnableConnectBankAccountToNewOwnerAddress()", "0x1998aeef": "bid()", "0xc64e8bc0": "executeN(uint256)", "0xd4088e33": "setPrice(uint256,uint256,uint64)", "0xd263b7eb": "ownerkill()", "0xc478fc37": "EtherWheel(uint256,uint256,uint8)", "0x05b765ea": "getCertifierStatus(address)", "0x93c32e06": "changeFounder(address)", "0xf207564e": "register(uint256)", "0xae6c0b03": "canWithdrawBond(uint256)", "0x2b1071c9": "testTransferToNullAuthority()", "0xd9feeeb6": "fillMyOrder(uint256)", "0x9fb755d7": "setHotWallet(address)", "0x7f98444f": "randomEnd()", "0xf3fef3a3": "withdraw(address,uint256)", "0x48a0d754": "available()", "0x3af94817": "getPongvalRemote()", "0xec21a913": "setUint256(int256,uint256)", "0x6099af40": "setConfigBool(bytes,bool)", "0xf0cbe059": "proxyTransferFromWithReference(address,address,uint256,bytes32,string)", "0xf93589ce": "didWin(bytes)", "0x1eb5ea2e": "returnFunds()", "0xa6027d53": "IconomiTokenTest(uint256,string,uint8,string,uint256)", "0x8a323b38": "Contract(uint256,string,uint8,string)", "0xb0f07e44": "registerData()", "0xc9d27afe": "vote(uint256,bool)", "0x64265b1a": "share_transfered(string)", "0x78205f67": "testThrowTransferEnableNotTransferable()", "0x081780f4": "clearRecord(bytes32)", "0xdd137b5d": "toBase58(uint256,uint8)", "0x9483e91a": "withdraw(address,uint256,bytes,uint256)", "0xc6502da8": "basePayment()", "0xe17e1274": "testTransferToRejectAuthority()", "0x9af605cb": "__proxy(address,bytes,uint256)", "0x7a8df1b9": "getAffiliateInfo(address)", "0x46b305d6": "lockBetsForWithdraw()", "0x7d4cf602": "buildDSBalanceDB()", "0xce87f626": "replaceWizardRP(address)", "0x125b8f06": "isInNextGeneration()", "0xd0068f80": "getClient(uint256)", "0x7f0899f2": "AddTicket(bytes5[])", "0xb15dcc25": "query(address,bytes2,uint256)", "0x07a9574a": "changeLeaderMessage(string)", "0x16e55626": "getDogName(address)", "0xbc058968": "updateThingData(bytes32[],bytes32[],uint88)", "0x02aa274b": "setForward(bytes4,address)", "0x08f235ec": "getDefaultPayment()", "0x1dd4914b": "withdrawEtherOrThrow(uint256)", "0x7ca31724": "tokenId(address)", "0x0c4f65bd": "getOwnerAddress()", "0xeec3cb41": "placeBet(bool[],uint256,uint256)", "0x9054bdec": "toTimestamp(uint16,uint8,uint8,uint8,uint8,uint8)", "0x468f02d2": "getUnderlyingPrice()", "0x74331be7": "sete(address)", "0xb05e390a": "TokenEther(string,string)", "0x89cc5ea8": "bid(string,address,uint256)", "0xa8893a6e": "getNumOfSalesWithSameId(bytes16)", "0x3defb962": "heartbeat()", "0x15a03930": "TossMyCoin()", "0x1d8ae626": "Security(string,string)", "0xf1bca7a4": "doCall(uint256)", "0xae6215d8": "getBlockHeight(bytes)", "0x8124bb0f": "continueExecution()", "0xc1cbbca7": "contribute(uint256)", "0xa48566ba": "serverSeed(address,bytes)", "0xc0f5a9cb": "deleteThing(bytes32[])", "0x4136aa35": "isAlive()", "0x6fe665e9": "SlotMachine()", "0xfaff50a8": "rootNode()", "0xaf769eff": "Paper()", "0x77863b61": "CrossWhitehatWithdraw(uint256,address)", "0x2bed55b0": "buildDSEasyMultisig(uint256,uint256,uint256)", "0xd2ef7398": "challenge()", "0x96e4ee3d": "convert(uint256,uint256)", "0x2dff6941": "content(bytes32)", "0x4d536f9f": "validateNameExt(bytes)", "0xd4d5d32a": "collectFee()", "0x6620a935": "sendToOwner()", "0x5084da18": "fipsOwner(bytes20)", "0xe419f189": "multiAccessIsOwner(address)", "0xa9fbc614": "lookupTicketHolder(uint256)", "0x11f72496": "testT()", "0x7365870b": "bet(uint256)", "0x09861b81": "flooredSub(uint256,uint256)", "0xe28fed1e": "userRescues(address)", "0x28cc413a": "getProof(uint256,uint256,uint256)", "0x9a8f09bd": "newKing(address)", "0x5d068051": "sendFees(address)", "0x49cbe338": "tryRead(uint64)", "0x691bfc89": "goods(uint16,uint256)", "0xfc36e15b": "vote(string)", "0x48107843": "getNextCallSibling(address)", "0x6461fe39": "transferFromWithReference(address,address,uint256,string)", "0x804e11dc": "testThrowsDisownNotTransferable()", "0x76f30ca1": "toContentID(address,uint256,string,bytes)", "0xa77b2e37": "Coin()", "0x3f2f1596": "setupTreasury(address,uint256)", "0x3de9e4c6": "__transferFromWithReference(address,address,uint256,string)", "0x612e45a3": "newProposal(address,uint256,string,bytes,uint256,bool)", "0x4cdb48e4": "isValidNym(address)", "0x5afa5036": "isCertified(address)", "0x9a1b420b": "OraclizeAddrResolver()", "0xec5c9036": "Crowdsale(address,uint256,uint256)", "0x01095962": "oraclize_setCustomGasPrice(uint256)", "0xe7e2aa0e": "buyer_cancel()", "0x2da8f764": "submitVideo(string,string)", "0x3395dc70": "acceptTransfer(address,address,uint256)", "0xdf143fb7": "HackerGold(address)", "0x63334c58": "transferETC(address)", "0x6a5da6e5": "followCampaign(uint256)", "0x49fb2dc5": "add_to_association(uint256,uint256,uint256)", "0x953aa435": "GetPrice(uint8)", "0xc1257bad": "testPassingAProposal()", "0x3bc5de30": "getData()", "0x4abb9d39": "depletable()", "0x129484b6": "changeFeeRecipient(int256,int256,int256,int256,int256,int256)", "0x902e64e5": "Oath()", "0x8c4dd5cd": "Democracy()", "0xbea124a6": "query(bytes,bytes,int256)", "0x69347990": "ownerWithdrawl()", "0x606deecd": "requestData()", "0x6720ceb1": "sendPayment()", "0xb1050da5": "newProposal(address,uint256,string,bytes)", "0xfeaa29d8": "insertProfitHere()", "0x36f9f49c": "etherandomSeed()", "0xae815843": "query(uint256,string,string,uint256)", "0x752d349c": "depthCheck(int256,int256)", "0xa24835d1": "destroy(address,uint256)", "0x26070774": "Token(address)", "0x6e0d98fe": "setProbabilities(uint32[])", "0x0761a004": "step(uint256,bytes)", "0xad82dcac": "testBlockhashCorrectFee()", "0x0900f010": "upgrade(address)", "0xa288fb1f": "setConfigUint(int256,bytes,uint256)", "0xe88b8ac6": "confirmAndCheck(bytes)", "0xf1a00a53": "unregisterListening(address)", "0xb17acdcd": "collectFees(uint256)", "0xb5d0f16e": "getGasScalar(uint256,uint256)", "0xae999ece": "reserve(string)", "0x95ceb4b3": "winningProtocal()", "0x1a93fa4b": "reorganizeSubUsers()", "0x9243e088": "setEnforceRevisions(bytes20)", "0x342454c7": "isDigit(bytes1)", "0x8e2c6f4d": "initiateVerification(address,bytes,bytes)", "0xddb5b3ac": "SellTokens()", "0xd18dfdc9": "parrot(uint256)", "0xd3732642": "FastRealisticPyramid()", "0x37ab8f20": "notifyPlayer(uint256,uint256,uint256,uint256)", "0xfb6e155f": "availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "0x50ab6f7f": "getMsgs()", "0x6b6a53fa": "testThrowsRestartNotOwner()", "0x4dc7cc55": "terminateAlt()", "0x8b9726c1": "multiAccessCallD(address,uint256,bytes,address)", "0x5a74dee5": "multiAccessRemoveOwnerD(address,address)", "0xfd339d18": "testAuthorityTryAuthUnauthorized()", "0xd3d6a975": "testThrowsTransferNotEnabled()", "0x8aa001fc": "getSecond(uint256)", "0x2ec2c246": "unregister(address)", "0xbbdb31cb": "challenge(uint256,address,bool)", "0x635cfda2": "Incrementer()", "0x704b6c02": "setAdmin(address)", "0xc1c723f4": "validateProposedMonarchName(bytes)", "0xadf5e565": "verify(bytes,address,uint256,uint8,bytes,bytes)", "0xbe7cddf8": "TwoD()", "0xc71b583b": "closeRequest()", "0x9cbf9e36": "createToken()", "0x69c4113d": "setNewBudget(uint256,uint256,uint256,uint256)", "0xd4649fde": "expire(uint256,uint8,bytes32,bytes32,bytes32)", "0xf9a7a2ef": "named(bytes)", "0xdbf45aa3": "EthBank()", "0xbb3ce7fe": "DepositHolder()", "0xfb5d5729": "getPongvalTransactional()", "0x2f0b15f6": "testGetUnset()", "0x62891b5d": "multiAccessChangeRequirement(uint256)", "0x538e0759": "refill()", "0x24c65f35": "updateRefundGas()", "0x62b24189": "DepositToBankAccountFromDifferentAddress(uint32)", "0xd81f53fd": "EtherId()", "0xcea943ee": "getSaleConfig()", "0x23647398": "testThrowRetractNotOwner()", "0xcdcd77c0": "baz(uint32,bool)", "0xa677fbd9": "example2Func()", "0xa02b9aac": "getPaymentDataByAddress(address)", "0x268eb055": "setDescription(uint64,bytes)", "0x09d2d0b9": "setServiceAccount(address,bool)", "0x5f70d9ac": "getBot(uint256)", "0x63f80de3": "issueCoin(address,uint256,uint256)", "0x8570153e": "publish(string,string,bytes,address[])", "0x7975c56e": "oraclize_query(uint256,string,string)", "0x7c3064f1": "refundStake()", "0xef4ffee2": "Honestgamble()", "0xfdc193a4": "test3Fails()", "0x0eb495c2": "pushCity()", "0x6a357465": "payHours(address,uint256)", "0x93f0bb51": "order(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "0x0a9254e4": "setUp()", "0xc490a266": "toUInt(bytes)", "0xf666323e": "UUIDProvider()", "0x857d4c07": "throwScraps(uint256)", "0x7fd8ee68": "computeNameHashExt(bytes)", "0x7bd703e8": "getBalanceInEth(address)", "0x68f65f02": "ChangeShownDenomination(bool,bool,bool,bool)", "0xc7f758a8": "getProposal(uint256)", "0x824dbc9a": "changeMembership(address,uint256,bool,string)", "0x2a228fc2": "processWithdrawals()", "0xe0457884": "betResolution(uint8,uint8,uint8,bool)", "0x550538f6": "getOneTimeCosts()", "0xf3e84cf3": "createNewRevision(bytes32,bytes)", "0x77fe38a4": "transferToICAPWithReference(bytes32,uint256,string)", "0xcc189d00": "Vault(address,uint256)", "0x9e281a98": "withdrawToken(address,uint256)", "0x7b12df39": "userProfits()", "0xa843c97f": "attack(uint256,uint256,uint256[])", "0x9da680f3": "adjustRegistrationFee(uint256)", "0x3ea3f6c5": "activateRegistrar()", "0xb36df681": "ExecutableBase()", "0x0f3a1412": "getArrlist(uint256,uint256)", "0x8b7f0ddd": "register(address,address,string,string,bytes32[],uint256,string)", "0xb5d3a379": "CanaryTestnet()", "0x9894221a": "SendCashForHardwareReturn()", "0xc2b12a73": "setBytes32(bytes32)", "0xff1b4341": "easyPropose(address,uint256,uint256)", "0x927ed13a": "newClient(uint256,address)", "0x9b9d0364": "_setFeeStructure(uint256,uint256,uint256)", "0x01518d76": "sendQuery(uint256)", "0x4112b7f1": "tryGetNameOwner(bytes)", "0xb759f954": "approve(uint256)", "0x810a882f": "setConfigBytes(bytes32,bytes32)", "0xea7a7184": "testGetBalanceDb()", "0xb0c8f9dc": "add(string)", "0xe59f611f": "InputLimit(uint256)", "0xdce293a7": "minLength(uint256)", "0xf509b627": "confirm(address,uint224,uint32,address)", "0xd48bfca7": "addToken(address)", "0x044f9ac8": "findThroneCalled(bytes)", "0x1d57bcf7": "ProofLibInterface()", "0x75830463": "checkBetLowhigh(uint8,address,bytes32,bytes32)", "0x2a45a39a": "Post(address)", "0x29cbdc86": "buyin(address,uint256)", "0x3cbfed74": "getBondBalance()", "0x80a23ddf": "mintBadge(int256,address,uint256)", "0x96b76c23": "stand(uint256)", "0xc392f5a0": "getAllPackageReleaseHashes(string)", "0x4847a79c": "_transfer(address,uint256)", "0x905e6e42": "JSON_Test()", "0x9f489e4e": "getDeposit(uint256,address)", "0x4f8e624e": "Greeter(string)", "0x96013c9c": "testLatestPkgGetter()", "0xe4fc6b6d": "distribute()", "0x423d4ef2": "createChannel()", "0x24d7806c": "isAdmin(address)", "0x691fb8ea": "jumpIn()", "0xd50f6bf0": "transferETH(address)", "0xd0e0813a": "promote(address)", "0x528eedcb": "sendSafe(address,address,uint256)", "0x00faf4dd": "getTokenDivisor()", "0x46a1d95f": "closeMarket(bytes)", "0x318a3fee": "relayTx(bytes,int256,int256[],int256,int256)", "0x49d55d9d": "receiveTransfer(uint256)", "0x4fa99dd0": "Matching_Ethers()", "0x99a5d747": "calculateFee(uint256)", "0x3c67c51e": "testLogs()", "0x12ab7242": "setupStackDepthLib(address)", "0xad9ec17e": "setGreyToken()", "0xc37e8cb2": "testExportAuthorized()", "0x43046844": "placeBet(uint8)", "0xc6e1c178": "TheLuckyOne(bytes)", "0x13d1aa2e": "f(uint256,uint256)", "0x64a4a5d7": "testBitsEqualSuccess()", "0xfb1669ca": "setBalance(uint256)", "0x40fdef80": "administration(uint256,string,uint256,uint256,address)", "0xcf7315c6": "retract(bytes20)", "0x76196c88": "setDnsrr(bytes32,bytes)", "0x08bf2d0d": "getOrderBook(uint256,uint256)", "0x021c309a": "solveBet(address,uint8,bool,uint8)", "0x4de162e4": "extractAccountLength()", "0x56fa47f0": "split(address)", "0xb3a0b1ef": "basicInfoGetter()", "0x26066ad5": "offer(uint256,bytes,uint256,bytes)", "0x99c724ef": "skipInLine(uint256,uint256)", "0x838445e8": "EtherAds(address,address,address)", "0xe06174e4": "settings()", "0xfac5bb92": "getPreRelease(bytes32)", "0x93c94acb": "calculateRewards(uint256[3][3])", "0xd7fa1007": "setHash(bytes32,bytes32)", "0x2a714078": "triggerAuth()", "0x4cd995da": "registerCompany(address,string)", "0xf6469342": "_setPackedBlockNumber(bytes32,uint256)", "0x8e7fd292": "trySetSubnodeOwner(bytes32,address)", "0x4f573cb2": "withdrawRevenue()", "0x924c28c1": "ContractInterface(address,address,address)", "0x4fc9c91a": "identityOf(bytes32)", "0x19901f1d": "TokenSale(uint256,uint256)", "0xaf8b7525": "CollectAndReduceFees(uint256)", "0x3ccb7dc9": "CrowdFund(uint256,uint256)", "0xaeeb96af": "Highlander()", "0xa126c5df": "GAS_TO_AUTHORIZE_EXECUTION()", "0x13c89a8f": "getAllowedTime(bytes32)", "0xf38b0600": "fireEventLog3()", "0xc7144269": "changeSettings_only_Dev(uint256,uint256,uint256,uint256,uint16,uint256,uint256,uint256,uint8,uint8)", "0xefc81a8c": "create()", "0x7429c086": "repeat()", "0x9c0a4bbc": "AlwaysFail()", "0xc3d23e10": "checkBet()", "0x28a45038": "testTryProxyCall()", "0xa668d7c9": "NiceGuyPonzi()", "0x06fe1fd7": "getPackageName(bytes32)", "0x29f27577": "InvestorList(uint256)", "0x57e25a79": "PullPaymentCapable()", "0x6d1669e1": "approveAndCall(address,address,uint256,bytes)", "0xa7e93e87": "retractLatestRevision(bytes20)", "0x9c7e8a03": "addParticipant(address,address,uint256)", "0xc6ab4514": "sendRobust(address,uint256,uint256)", "0xe8f6bc2e": "changeAccountLevelsAddr(address)", "0xb5d1990d": "numRecords()", "0x3e853128": "getGasForXau(address)", "0xa1add510": "hasRelation(bytes32,bytes32,address)", "0x31e3e2fe": "WithDraw()", "0x86723215": "createMarket(bytes,uint256,uint256,address)", "0xce845d1d": "currentBalance()", "0xc3a2c0c3": "scheduleCall()", "0xcf8eeb7e": "subBalance(address,uint256)", "0xaeb4f0d3": "RegisterTwo(address,address)", "0x3c716e08": "updateAuthority(address)", "0x9919b1cc": "getContentsByRanks(address,uint256,uint256,uint256)", "0x0f06670a": "didWin(bytes32)", "0x74e4435f": "getUserAddress(uint256,bytes32)", "0x4664b235": "bytes32_to_bytes(bytes,bytes,bytes)", "0x2ac9bf09": "bid(uint256,uint256,uint256)", "0xf11c4482": "approveFromProxy(address,address,uint256)", "0xfe992c98": "balanceOfAll(address)", "0x43e332c5": "Last_block_number_and_blockhash_used()", "0x0066753e": "removeCertifier(address)", "0xd299dac0": "blake2b(bytes,bytes,uint64)", "0x41395efa": "dgxBalance()", "0xac1b14ff": "proxyCall(uint256)", "0x7a6ce2e1": "getMsgSender()", "0x3855dcd6": "getContrarians_by_index(uint256)", "0xe6febc9b": "investorWithdraw(uint256)", "0xe6e91cfc": "voidFailedPayment(uint256)", "0x547eeac1": "acceptTransfer()", "0x9824425a": "takeOrder(uint256,uint256,uint256,uint256)", "0xdf25ee23": "getIndexId(address,bytes)", "0x0f3d7c3e": "release(string,uint32[3],string,string,string)", "0x15cff546": "isOperationBlocked()", "0x0b927666": "order(address,uint256,address,uint256,uint256,uint256)", "0x00ce2057": "triggerPayment()", "0x9a9c29f6": "settle(uint256,uint256)", "0x0f096163": "Chainy()", "0x2f5a5c5b": "timegame()", "0x900d85fa": "updatePreReleaseTree(bytes32)", "0x1cbd0519": "accountLevel(address)", "0x29a065bd": "getLOg(uint256)", "0xcec95aa1": "getReleaseHashForPackage(string,uint256)", "0x41524433": "sellKissBTCWithCallback(uint256,address,uint256)", "0x5e431709": "sealedBids(address,bytes32)", "0xf55b23c0": "externalLeave()", "0x31375242": "ownerSetTreasury(address)", "0x51b42b00": "deactivate()", "0x5af36e3e": "refund(uint256,uint256)", "0xc5096a69": "feeFor(address,address,uint256)", "0x059a500c": "makeDeposit(uint256)", "0x3c2e7d54": "priv_inMainChain__(int256,int256)", "0x9431f5f0": "withdrawFees(bytes)", "0x91b4a0e7": "Difficulty()", "0x268d50fe": "ownerSetHouseEdge(uint256)", "0x9644fcbd": "changeMembership(address,bool,string)", "0x66aa6f26": "payFee(bytes)", "0x353928d8": "helpRed()", "0x9c1193ea": "GreeterA(bytes)", "0xdd79e33e": "splitIdentifiers(string)", "0x4d268ddd": "payImporterBankForGoodsBought()", "0x656d2f63": "ManagedAccount(address)", "0x1216e771": "expiration(uint64)", "0x36f7cd70": "setPricePerStake(uint256)", "0x7842a3a4": "payReward()", "0x0ae50a39": "GetOwner()", "0xc81caae7": "acceptMember(address,string,string)", "0xe50dce71": "testControllerApproveSetsAllowance()", "0x4b64e492": "execute(address)", "0xd9e947f3": "kickOutMember(address)", "0x35cc59a9": "createSchema(bytes)", "0x2530c905": "rand(uint256)", "0x4894e37f": "__callback(bytes,string,bytes)", "0x70480275": "addAdmin(address)", "0x969cb7c3": "getPublisher(uint256)", "0x4ed4831a": "all(bool[7])", "0x2ef3accc": "getPrice(string,uint256)", "0x67854643": "getGenerationMemberLength(uint256)", "0xe6690fb1": "nextAuction(uint256)", "0x5829d310": "entries(int256)", "0x7fe1dc7e": "getToken(bytes)", "0xe7329e71": "scheduleCall(bytes,bytes,uint256,uint256,uint8,uint256)", "0x41c12a70": "voteNo()", "0x6a28db13": "getQrLength()", "0xdd93890b": "setMeta(uint256,bytes32,bytes32)", "0xa48bdb7c": "results()", "0x9d888e86": "currentVersion()", "0xff81fb91": "unhint(int256,bytes32)", "0x9ec32d45": "challengeWinningOutcome(bytes,uint16)", "0xa0a2f629": "setReferralId(uint256,address)", "0x76577eae": "distributeEarnings()", "0x3e5cee05": "issueIOU(string,uint256,address)", "0xf3c7d275": "prenup(string,string,string,string,string,address,address)", "0x7154ae61": "CheckNumbers(uint8[5])", "0x05de4f07": "getContentParent(uint256)", "0xb81e43fc": "getEventName()", "0xa7eeea37": "NewContributor(uint256)", "0xe816a515": "takeFlight()", "0x05b2b03a": "CertificationCentre(address)", "0x74d4ab27": "fipsRegister()", "0x65fa2f7f": "getLastPrice(uint256)", "0xcc8b34ab": "CrowdCoin()", "0xe2b178a0": "getAuthority()", "0x5fb64fd6": "checkMembership(address)", "0x7948f523": "setAmbiAddress(address,bytes32)", "0xebb71194": "withdrawFees(bytes32)", "0x6545bed3": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x7065cb48": "addOwner(address)", "0x913f424c": "_ecMul(uint256,uint256,uint256,uint256)", "0xdbecc372": "Example(uint256)", "0x9f7f760c": "SimpleDice()", "0xca94692d": "abiSignature()", "0x61ba3377": "WatchLastTime()", "0x20e647e1": "checkBetColor(uint8,address,bytes32,bytes32)", "0x0a3b0a4f": "add(address)", "0xc51cf179": "calcBaseFeeForShares(uint256)", "0x8baced64": "isInPool(address)", "0x4dc415de": "reject()", "0x1555e337": "ConferenceCertificate()", "0x9555a942": "withdrawFrom(address,address,uint256)", "0xe1efda6d": "airaSend(address,address,uint256)", "0x8bfc2f33": "delegateDAOTokens(uint256)", "0xb964608d": "get_return_by_level(uint256)", "0x0c1fad51": "setSeedSourceA(address)", "0x98688a95": "Ai()", "0xd930a90b": "testFailMoveBalanceDueToInsufficientFunds()", "0x337b5988": "testSimpleNameRegister()", "0xf06d335e": "_recoverAccount(address,address)", "0x025bbbe5": "newSale(bytes16,uint256,uint256)", "0x984413b8": "_eraseNode(bytes32)", "0x5ea187c9": "BuildByteArray(bytes)", "0xc2a95cc9": "updateTrustSettings(address,uint256)", "0xde0ff7c5": "getEther()", "0x4ac7becf": "SimpleSign()", "0x252786e4": "WatchBlockSizeInEther()", "0xf2016a4f": "updateMinEthPerNotification(uint256)", "0xd743ca38": "newWinner(uint256,address,uint256,uint256,uint256)", "0x9eab5253": "getMembers()", "0x51d38d5f": "addDeveloper(address,string)", "0x930ed251": "getSavedVar()", "0x715ef4ff": "resendFailedPayment(uint256)", "0xb1418cf4": "payHouse()", "0xe1569f6b": "testThrowsSetNotRetractableNotOwner()", "0x4ae9af61": "getBotStats(uint256,uint256)", "0xbf8ecf9c": "authProposals()", "0xc00ca383": "getByOwner(address,uint256)", "0xc8e7ca2e": "getMsgData()", "0x711953ef": "setGameAddress(address)", "0x63a8dac2": "changeSettings(uint256,uint256,uint256,uint8,uint256,uint256,uint8,uint8)", "0x72c87075": "testBlockHeaderFetch()", "0x4c7a2254": "checkMyWithdraw()", "0xab91c7b0": "queueLength()", "0x25209260": "PrepareRoll(uint256)", "0x58150c8b": "GameRegistry()", "0x75608264": "get_hash(uint8,bytes32)", "0x6510ef4d": "oraclize_query(uint256,string,string[5])", "0xd57a12f5": "testCheckSigs()", "0x3f415772": "releaseExists(bytes32)", "0xda25c0cd": "ThisExternalAssembly()", "0xf239e528": "sendOneEtherHome()", "0xc4321adb": "investInTheSystem(uint256)", "0x4fab2ca4": "testGetFrontend()", "0x05261aea": "finalize(uint256)", "0x576eac66": "setFundingGoal(uint256)", "0xe75528cc": "buyBuilding(uint256,uint256)", "0x6ed43eb0": "getInvestorList(uint256)", "0xb38415f3": "getConfigBytes(bytes)", "0x771ad635": "getContentCred(address,uint256)", "0x93c166ec": "computeEndowment(uint256,uint256,uint256,uint256)", "0xac35caee": "transferWithReference(address,uint256,string)", "0xc6803622": "wasCalled()", "0x8cfd8901": "_incBlock()", "0xfcf0f55b": "eventOracles(bytes32,uint256)", "0x505ff574": "register(address,uint256,bool)", "0xf824384a": "addInvestorAtID(uint256)", "0x6b9f96ea": "flush()", "0xc3d0a564": "getAccountBalance(bytes)", "0x30fd300f": "registerBytes32(address,bytes32)", "0xc3169ef2": "respond(uint256,uint256[4])", "0xcf1cd249": "secureSend(address)", "0x62c335c1": "checkCallback(address,uint256,bytes,bytes)", "0xb599afc8": "totalBetCount()", "0x69433e12": "setExchange(uint256)", "0x899942b8": "Devcon2Token()", "0x4c2d71b3": "setConfigAddress(bytes32,address)", "0xb974b0a3": "allData()", "0x27e8c2d8": "burnUnicornShares()", "0xf639365d": "testSetGet()", "0x2f5d3916": "testControllerApproveTriggersEvent()", "0x938b5f32": "origin()", "0xd60dcb5d": "Switch()", "0xde629235": "getCertificationDocumentAtIndex(address,uint256)", "0x329ce29e": "buyTile(uint256)", "0x59e2d30e": "testThrowBlobStoreNotRegistered()", "0xa005b87b": "NullMapTest()", "0xc13afa91": "object_locations(uint256)", "0x4848b1a5": "setData(uint256,uint256)", "0x80ede329": "getDocumentDetails(uint256)", "0x35d13969": "SendAllMoney()", "0x8040cac4": "testOverflow()", "0x9507d39a": "get(uint256)", "0xc040e6b8": "stage()", "0x18178358": "poke()", "0xfd782de5": "Proxy()", "0xfd68a422": "returnmoneycreator(uint8,uint128)", "0x86a50535": "voteFor(uint256)", "0x44602a7d": "testFallbackReturn()", "0xa230c524": "isMember(address)", "0x3ffbd47f": "register(string,string)", "0x8cecf66e": "_inverse(uint256)", "0x51017702": "isOutcomeSet(bytes32)", "0xd408746a": "GetContractAddr()", "0x20130753": "testThrowSetNotRetractableNotOwner()", "0xa0e2abf7": "getFirstActiveGamble()", "0x7c582304": "updateInvestmentTotal(address,uint256)", "0x95d89b41": "symbol()", "0x1768b436": "ETCSurvey()", "0x6d4ce63c": "get()", "0xc41a360a": "getOwner(uint256)", "0x49942ccb": "scheduleCall(bytes,bytes,uint256,uint256)", "0x6b64c769": "startAuction()", "0x084d72f4": "getWinningOutcome(uint256)", "0xd379be23": "claimer()", "0x41fa4876": "multiBlockRandomGen(uint256,uint256)", "0x5bc7e259": "updateRelease(uint32,uint32,uint32,bytes,bool)", "0x47f3d794": "configure(uint256,uint8,uint256,uint256,uint256,uint256)", "0xe2bbb158": "deposit(uint256,uint256)", "0x953a7fab": "testMoveBalance()", "0xeacc5b3b": "safeSend(address,uint256,uint256)", "0x96f0aa8f": "findNextSecond(uint256,bytes)", "0xc8690233": "pubkey(bytes32)", "0x459f93f7": "getBuyers(uint256,address)", "0xf714de9c": "MultiAccess()", "0xf4a81d08": "getKudosGiven(address)", "0x5aa94a68": "computeResultVoteExtraInvestFeesRate()", "0xdb2a0cb7": "HumanStandardTokenFactory()", "0xdf3a6b10": "testMemberAddedEvent()", "0xce8d054e": "_setupNoCallback()", "0x8ea822d8": "createThings(bytes32[],uint16[],bytes32[],uint16[],uint88)", "0x24fb563f": "PlayerTickets(address,uint256,uint256)", "0x8c0e156d": "scheduleCall(bytes4,uint256,uint256)", "0xef04fdb7": "buyShares(bytes,uint8,uint256,uint256)", "0xa0afd731": "dividendBalance(address)", "0xc3c95c7b": "getMarket(bytes32)", "0x94ed9b77": "append(address,address)", "0xc87b36ed": "disableBetting()", "0x566735d8": "PreVNK(uint256,string,string,uint8)", "0x400aae08": "isInCurrentGeneration(address)", "0x44dd4b5e": "scheduleTransaction(address,uint256,bytes)", "0x48c54b9d": "claimTokens()", "0xe8930efd": "Investors(address)", "0xa6f2ae3a": "buy()", "0x12819817": "setXauForGasCurrator(address)", "0x056e1059": "oraclize_query(uint256,string,string,uint256)", "0x7824407f": "tokenSupply()", "0x7f0c949c": "setJurisdication(string)", "0x2e817963": "set_sdl(address)", "0xaee84f6b": "setTime(address,uint256)", "0x3c0dde1c": "_addPools(address,address)", "0xf8bd526e": "setCoinageContract(address)", "0x04b07a5e": "removeUpdater(address)", "0x11149ada": "getProof(uint256)", "0x4306cc3f": "queryEarnings(address)", "0x55241077": "setValue(uint256)", "0x492b67ea": "Etherdoc()", "0xadf59f99": "query(uint256,string,string)", "0x951b01c5": "setCertifierDb(address)", "0x8ae986cf": "registrantApprove(address)", "0xfa68b4ce": "lookupISO3116_1_alpha_3(bytes)", "0x7fdc8290": "isUnderscore(bytes1)", "0x89495172": "convictFinal(uint256,uint256)", "0x93e02d13": "FallenLeaders()", "0x3e476053": "moveFunds(address,uint256)", "0x8894dd2b": "addEther()", "0x8f03850b": "numContributors()", "0xbfc3cd2f": "testFailChargeMoreThanApproved()", "0x1d82e9c7": "EXTRA_GAS()", "0x278ecde1": "refund(uint256)", "0x0f825673": "deleteCoupon(string)", "0xa324ad24": "getMonth(uint256)", "0xd628e0a6": "WatchBalance()", "0xb238ad0e": "getDaysInMonth(uint8,uint16)", "0xd6febde8": "buy(uint256,uint256)", "0x370ec1c5": "_fillOrder(address,uint256)", "0x4c33fe94": "cancel(address)", "0xcdd13701": "getEventHashes(uint256[256])", "0xe1bc3003": "reveal(bytes,string)", "0xa2e62045": "update()", "0x75f45878": "scheduleCall(bytes,bytes,uint256)", "0xd2756e11": "finalizeNumber(uint256)", "0x48519189": "MonedaAlcala(string,string)", "0x009b9369": "getVoteNumber(uint256)", "0xdaa283c8": "__callback(bytes,string)", "0xfcce2622": "challengeAnswer(uint256,bytes)", "0xac18de43": "removeManager(address)", "0x16d9356f": "oraclize_query(string,string[4])", "0xd1734eac": "isInNextGeneration(address)", "0x524fa7b9": "whitelistAdd(address)", "0xa5eb7a4e": "operated()", "0xb0aab296": "getNextNode(bytes)", "0x1982ed58": "ChangeReuseCashInHarware(bool,uint16,uint16)", "0xdf811d7d": "numberOfPlayersInCurrentRound()", "0xca7dc5b1": "getNumberOfTweets()", "0x488b3538": "shares(address,bytes32,int256)", "0xebd83378": "get_blocks_for(uint256)", "0x399fdb86": "testFailNormalWhitelistReset()", "0xca0c1e62": "computeMerkle(int256,int256,int256[],int256,int256,int256[])", "0x8963dab4": "getNodeId(bytes,bytes)", "0x7d94792a": "seed()", "0xbcf175c8": "oraclize_cbAddress()", "0x38eee93e": "scheduleCall(address,bytes,bytes,uint16,uint8,uint256[5])", "0xa08d3f83": "Etheropt(uint256,string,uint256,uint256,bytes32,address,int256[])", "0xae47a290": "changeMaxBet(uint256)", "0xd12c1e28": "badgesOf(address)", "0x001f8d11": "removePackage(bytes32,string)", "0x54fd4d50": "version()", "0x89abeb19": "ProcessGameExt(uint256)", "0x3dd7c1b9": "newProduct(string,string,uint256,uint256)", "0xa396541e": "getPongvalTxRetrievalAttempted()", "0xcc8af0fe": "bytesToUInt(bytes,bytes)", "0x983b94fb": "finalizeAuction(bytes32)", "0x3df91162": "getUpdatable(bytes20)", "0x045236b4": "getChainyData(string)", "0x9c172f87": "EthVentures4()", "0x996a4be3": "uintToBytes(uint256,uint256)", "0x775a8f5e": "toBytes(uint256)", "0xb6db75a0": "isAdmin()", "0x0b6fcdb0": "getEnforceRevisions(bytes32)", "0x29d6f899": "BetOnBlue()", "0xe6cbcba9": "PlusOnePonzi()", "0xc9030ea0": "addMember(address,bool)", "0x8f283970": "changeAdmin(address)", "0x670c884e": "setup(address,uint256,uint256,uint256,address)", "0x808ab1d6": "getCertificationDbCount()", "0x018f5472": "isAUser(address)", "0x59c87d70": "request(bytes32)", "0x407cfe5e": "get_all_players()", "0x33f472b9": "MPO()", "0x662dbe96": "getNodeHeight(bytes)", "0x60b1e173": "getProof(uint256,address,address)", "0xf25eb5c1": "removeReverse()", "0x1d065dde": "_transferWithReward(address,address,uint256)", "0x65343fcb": "TrustEth()", "0xaa237e21": "set(bool,uint256)", "0x60e519c0": "computeMarginAmount()", "0xd9597016": "multisetCustomGasPrice(uint256[],address[])", "0x4f10acc1": "updateGoldFeeData(uint256)", "0x1e9ea66a": "balanceEther10000000(uint256)", "0xffe34512": "getNumChannels(address)", "0x71dd8862": "IndexOf()", "0xdd9dd688": "calcStopPrice()", "0x934354e7": "finishSpin()", "0x26881518": "setupFee(address)", "0x5eb3f639": "assertTrue(bool,bytes)", "0xe9540395": "getRewardDivisor()", "0x8e4afa51": "checkTransferToICAP(bytes32,uint256)", "0xb5b33eda": "scheduleCall(address,uint256)", "0x3d6a32bd": "createTradeContract(address,uint256,uint256,uint256,bool,bool)", "0x5fd9dff6": "allowance(address,address,bytes)", "0x0d244d68": "setNotRetractable(bytes32)", "0xe63697c8": "withdraw(uint256,address,uint256)", "0x3e5087cc": "testBasicThing()", "0xee77fe86": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8)", "0xb1cc4348": "placeWager()", "0xb95594e5": "lineOfPlayers(uint256)", "0xa9cc4718": "fail()", "0x54385526": "setStatus(uint8,uint8,string)", "0xb45c48dc": "Security_AddPasswordSha3HashToBankAccount(bytes)", "0xace51abc": "helperVerifyHash__(uint256,int256,int256[],int256,uint256,int256,int256[],int256)", "0x1f5d0b4c": "address(address,address,uint256)", "0x7acbfb65": "setOwner(uint256,uint256)", "0x3462f32d": "execWithGasLimit(bytes32,bytes32,uint256,uint256)", "0xac04f5a7": "append(address)", "0x2fcb6628": "_stringGas(string,string)", "0xe977992d": "Doubler()", "0xc57a050e": "fairandeasy()", "0x412664ae": "sendToken(address,uint256)", "0x0afa9fb9": "contains(int256,address)", "0xb69ef8a8": "balance()", "0x264c8e9a": "whatWasTheVal()", "0x255016c8": "checkIfExploded()", "0xd716222c": "is_owner(uint256,address)", "0xc398f030": "expire(uint256,uint8,bytes,bytes,bytes)", "0xb7d454a4": "setNotTransferable(bytes32)", "0x4789aaef": "EthereumDice()", "0xc0171112": "timestamp(uint64)", "0x4f60f334": "multiAccessAddOwner(address)", "0x80aed05f": "LooneyDice()", "0x55ba343f": "getMarket(bytes)", "0x943b0747": "RewardOffer(address,address,bytes,uint256,uint256,uint128,uint256)", "0xa27c672a": "owner_reveal_and_commit(uint8,bytes32,bytes32)", "0x8f731077": "extractAllowanceRecordLength(address)", "0xc3d345c4": "getHangoutAddress()", "0xa8978434": "softResolveAnswer(uint256)", "0x7cef6047": "getNavHistory(uint256)", "0xfae14192": "changeFeePercentage(uint256)", "0x2ddbc04a": "play2(address,uint256)", "0x3fb27b85": "seal()", "0xe8038e25": "TokenSale(uint256,uint256,address)", "0x8d92fdf3": "withdrawAsset(uint256)", "0x8579cbde": "getPrice(string,uint256,address)", "0x0d61b519": "executeProposal(uint256)", "0x63a599a4": "emergencyStop()", "0x661e3605": "ConstructorContract(uint256)", "0xfd7c460d": "ciberLottery()", "0x1f83f440": "getPaymentByAddress(address)", "0xdcf73856": "generateGroups()", "0x3c6e03d7": "thewhalegame()", "0x271cd760": "getPackageDb()", "0x53fefd7d": "changeMaxDeposit(uint256)", "0xae169a50": "claimReward(uint256)", "0x6da84ec0": "calcMarketFee(bytes32,uint256)", "0xb16562fe": "fipsRegister(address,bytes)", "0x041fe13d": "onEtherandomSeed(bytes32,bytes32)", "0x4a617faa": "shaBid(bytes32,uint256,bytes32)", "0x052b2aa7": "getRegistrants()", "0x0ff0a4df": "reFund()", "0xe56b9dce": "GetPrize(uint256)", "0x8eec99c8": "setNewAdmin(address)", "0xffcce369": "changeIPFSHash(string)", "0x40fdf515": "issuetender(address,uint256,uint256)", "0xef4bdfdd": "Set_your_game_number_between_1_15(string)", "0xa991cb0e": "respond(uint256)", "0x617fba04": "getRecord(address)", "0x475a9fa9": "issueTokens(address,uint256)", "0xd30fbd0d": "safeSubtract(uint256,uint256)", "0xe54d4051": "receiveInteger(bytes,uint256,uint16)", "0x8023ffbd": "getOverallSize()", "0x8390b02a": "rfindPtr(uint256,uint256,uint256,uint256)", "0x11e99c22": "arrival()", "0x10c1952f": "setLocked()", "0x039a21b8": "tryExecute(address,bytes,uint256)", "0x201dcd7a": "newChallenge(uint256,uint256)", "0x5aebfd14": "createFile(bytes)", "0xa6b1caa3": "gasScalar(uint256)", "0x200538c6": "DTE()", "0xd1738b72": "wroomWroom()", "0x22f607f6": "Escrow()", "0x7e81b6aa": "KingdomFactory()", "0x901d7775": "voteOutMasterKey(address)", "0xd6af9411": "Rouleth()", "0x7b0383b2": "initializeDispute(uint256)", "0x70c9edb7": "BTCRelayTools(address)", "0xe9c31315": "checkBetParity(uint8,address,bytes32,bytes32)", "0xee82ac5e": "getBlockHash(uint256)", "0x727089f1": "extractAllowanceLength()", "0x8bbb5af7": "test1Fails()", "0x47872b42": "unsealBid(bytes32,uint256,bytes32)", "0x46b04e53": "PlayerInfoPerZone(uint256,uint256)", "0x752bacce": "getExecPrice()", "0x89d8ca67": "drawPot(bytes32,bytes32)", "0xc23697a8": "check(address)", "0x0af658ca": "personUpdateActivity(uint256,bool)", "0x24d4e90a": "ln(uint256)", "0x09d33f1d": "addRequest(address,uint256)", "0xc913b552": "getVersions(bytes)", "0xbb3b8dca": "getCertificateHash(bytes)", "0x3809c0bf": "doInfinite()", "0x853552d7": "_slotAddNew(address)", "0xccf1ab9b": "usurpation()", "0xe7dafdb6": "transfer_token(address,address,uint256)", "0x0c77a697": "claimFounders()", "0xda82a035": "sweepCommission()"}
\ No newline at end of file
diff --git a/cmd/clef/README.md b/cmd/clef/README.md
index b05745964..9663e132f 100644
--- a/cmd/clef/README.md
+++ b/cmd/clef/README.md
@@ -4,19 +4,20 @@ Clef can be used to sign transactions and data and is meant as a replacement for
This allows DApps not to depend on geth's account management. When a DApp wants to sign data it can send the data to
the signer, the signer will then provide the user with context and asks the user for permission to sign the data. If
the users grants the signing request the signer will send the signature back to the DApp.
-
+
This setup allows a DApp to connect to a remote Ethereum node and send transactions that are locally signed. This can
help in situations when a DApp is connected to a remote node because a local Ethereum node is not available, not
synchronised with the chain or a particular Ethereum node that has no built-in (or limited) account management.
-
+
Clef can run as a daemon on the same machine, or off a usb-stick like [usb armory](https://inversepath.com/usbarmory),
or a separate VM in a [QubesOS](https://www.qubes-os.org/) type os setup.
-Check out
+Check out
* the [tutorial](tutorial.md) for some concrete examples on how the signer works.
-* the [setup docs](docs/setup.md) for some information on how to configure it to work on QubesOS or USBArmory.
-
+* the [setup docs](docs/setup.md) for some information on how to configure it to work on QubesOS or USBArmory.
+* the [data types](datatypes.md) for detailed information on the json types used in the communication between
+ clef and an external UI
## Command line flags
Clef accepts the following command line options:
@@ -24,28 +25,34 @@ Clef accepts the following command line options:
COMMANDS:
init Initialize the signer, generate secret storage
attest Attest that a js-file is to be used
- addpw Store a credential for a keystore file
+ setpw Store a credential for a keystore file
+ gendoc Generate documentation about json-rpc format
help Shows a list of commands or help for one command
-
+
GLOBAL OPTIONS:
--loglevel value log level to emit to the screen (default: 4)
--keystore value Directory for the keystore (default: "$HOME/.ethereum/keystore")
- --configdir value Directory for clef configuration (default: "$HOME/.clef")
- --networkid value Network identifier (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby, 6=Kotti) (default: 1)
+ --configdir value Directory for Clef configuration (default: "$HOME/.clef")
+ --chainid value Chain id to use for signing (1=mainnet, 2=Morden (disused), 3=ropsten, 4=rinkeby, 5=Goerli, 6=Kotti) (default: 1)
--lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength
--nousb Disables monitoring for and managing USB hardware wallets
--rpcaddr value HTTP-RPC server listening interface (default: "localhost")
+ --rpcvhosts value Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: "localhost")
+ --ipcdisable Disable the IPC-RPC server
+ --ipcpath Filename for IPC socket/pipe within the datadir (explicit paths escape it)
+ --rpc Enable the HTTP-RPC server
--rpcport value HTTP-RPC server listening port (default: 8550)
- --signersecret value A file containing the password used to encrypt signer credentials, e.g. keystore credentials and ruleset hash
+ --signersecret value A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash
--4bytedb value File containing 4byte-identifiers (default: "./4byte.json")
--4bytedb-custom value File used for writing new 4byte-identifiers submitted via API (default: "./4byte-custom.json")
--auditlog value File used to emit audit logs. Set to "" to disable (default: "audit.log")
--rules value Enable rule-engine (default: "rules.json")
- --stdio-ui Use STDIN/STDOUT as a channel for an external UI. This means that an STDIN/STDOUT is used for RPC-communication with a e.g. a graphical user interface, and can be used when the signer is started by an external process.
- --stdio-ui-test Mechanism to test interface between signer and UI. Requires 'stdio-ui'.
+ --stdio-ui Use STDIN/STDOUT as a channel for an external UI. This means that an STDIN/STDOUT is used for RPC-communication with a e.g. a graphical user interface, and can be used when Clef is started by an external process.
+ --stdio-ui-test Mechanism to test interface between Clef and UI. Requires 'stdio-ui'.
+ --advanced If enabled, issues warnings instead of rejections for suspicious requests. Default off
--help, -h show help
--version, -v print the version
-
+
```
@@ -180,7 +187,7 @@ None
#### Result
- address [string]: account address that is derived from the generated key
- url [string]: location of the keyfile
-
+
#### Sample call
```json
{
@@ -214,9 +221,9 @@ None
#### Result
- array with account records:
- account.address [string]: account address that is derived from the generated key
- - account.type [string]: type of the account
+ - account.type [string]: type of the
- account.url [string]: location of the account
-
+
#### Sample call
```json
{
@@ -265,7 +272,7 @@ Response
#### Result
- signed transaction in RLP encoded form [data]
-
+
#### Sample call
```json
{
@@ -365,7 +372,7 @@ Bash example:
#### Result
- calculated signature [data]
-
+
#### Sample call
```json
{
@@ -498,7 +505,7 @@ Derive the address from the account that was used to sign data with content type
#### Result
- derived account [address]
-
+
#### Sample call
```json
{
@@ -527,16 +534,16 @@ Response
#### Import account
Import a private key into the keystore. The imported key is expected to be encrypted according to the web3 keystore
format.
-
+
#### Arguments
- - account [object]: key in [web3 keystore format](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) (retrieved with account_export)
+ - account [object]: key in [web3 keystore format](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) (retrieved with account_export)
#### Result
- imported key [object]:
- key.address [address]: address of the imported key
- key.type [string]: type of the account
- key.url [string]: key URL
-
+
#### Sample call
```json
{
@@ -587,14 +594,14 @@ Response
#### Export account from keystore
Export a private key from the keystore. The exported private key is encrypted with the original passphrase. When the
key is imported later this passphrase is required.
-
+
#### Arguments
- account [address]: export private key that is associated with this account
#### Result
- exported key, see [web3 keystore format](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) for
more information
-
+
#### Sample call
```json
{
@@ -654,7 +661,7 @@ OBS! A slight deviation from `json` standard is in place: every request and resp
Whereas the `json` specification allows for linebreaks, linebreaks __should not__ be used in this communication channel, to make
things simpler for both parties.
-### ApproveTx
+### ApproveTx / `ui_approveTx`
Invoked when there's a transaction for approval.
@@ -666,13 +673,13 @@ Here's a method invocation:
curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x694267f14675d7e1b9494fd8d72fefe1755710fa","gas":"0x333","gasPrice":"0x1","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x0", "data":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"},"safeSend(address)"],"id":67}' http://localhost:8550/
```
-
+Results in the following invocation on the UI:
```json
{
"jsonrpc": "2.0",
"id": 1,
- "method": "ApproveTx",
+ "method": "ui_approveTx",
"params": [
{
"transaction": {
@@ -717,7 +724,7 @@ curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","me
{
"jsonrpc": "2.0",
"id": 1,
- "method": "ApproveTx",
+ "method": "ui_approveTx",
"params": [
{
"transaction": {
@@ -760,7 +767,7 @@ One which has missing `to`, but with no `data`:
{
"jsonrpc": "2.0",
"id": 3,
- "method": "ApproveTx",
+ "method": "ui_approveTx",
"params": [
{
"transaction": {
@@ -789,33 +796,7 @@ One which has missing `to`, but with no `data`:
}
```
-### ApproveExport
-
-Invoked when a request to export an account has been made.
-
-#### Sample call
-
-```json
-
-{
- "jsonrpc": "2.0",
- "id": 7,
- "method": "ApproveExport",
- "params": [
- {
- "address": "0x0000000000000000000000000000000000000000",
- "meta": {
- "remote": "signer binary",
- "local": "main",
- "scheme": "in-proc"
- }
- }
- ]
-}
-
-```
-
-### ApproveListing
+### ApproveListing / `ui_approveListing`
Invoked when a request for account listing has been made.
@@ -826,7 +807,7 @@ Invoked when a request for account listing has been made.
{
"jsonrpc": "2.0",
"id": 5,
- "method": "ApproveListing",
+ "method": "ui_approveListing",
"params": [
{
"accounts": [
@@ -853,7 +834,7 @@ Invoked when a request for account listing has been made.
```
-### ApproveSignData
+### ApproveSignData / `ui_approveSignData`
#### Sample call
@@ -861,7 +842,7 @@ Invoked when a request for account listing has been made.
{
"jsonrpc": "2.0",
"id": 4,
- "method": "ApproveSignData",
+ "method": "ui_approveSignData",
"params": [
{
"address": "0x123409812340981234098123409812deadbeef42",
@@ -879,7 +860,7 @@ Invoked when a request for account listing has been made.
```
-### ShowInfo
+### ShowInfo / `ui_showInfo`
The UI should show the info to the user. Does not expect response.
@@ -889,7 +870,7 @@ The UI should show the info to the user. Does not expect response.
{
"jsonrpc": "2.0",
"id": 9,
- "method": "ShowInfo",
+ "method": "ui_showInfo",
"params": [
{
"text": "Tests completed"
@@ -899,7 +880,7 @@ The UI should show the info to the user. Does not expect response.
```
-### ShowError
+### ShowError / `ui_showError`
The UI should show the info to the user. Does not expect response.
@@ -918,7 +899,7 @@ The UI should show the info to the user. Does not expect response.
```
-### OnApproved
+### OnApprovedTx / `ui_onApprovedTx`
`OnApprovedTx` is called when a transaction has been approved and signed. The call contains the return value that will be sent to the external caller. The return value from this method is ignored - the reason for having this callback is to allow the ruleset to keep track of approved transactions.
@@ -926,7 +907,7 @@ When implementing rate-limited rules, this callback should be used.
TLDR; Use this method to keep track of signed transactions, instead of using the data in `ApproveTx`.
-### OnSignerStartup
+### OnSignerStartup / `ui_onSignerStartup`
This method provide the UI with information about what API version the signer uses (both internal and external) aswell as build-info and external api,
in k/v-form.
@@ -937,7 +918,7 @@ Example call:
{
"jsonrpc": "2.0",
"id": 1,
- "method": "OnSignerStartup",
+ "method": "ui_onSignerStartup",
"params": [
{
"info": {
@@ -972,9 +953,9 @@ A UI should conform to the following rules.
along with the UI.
-### UI Implementations
+### UI Implementations
-There are a couple of implementation for a UI. We'll try to keep this list up to date.
+There are a couple of implementation for a UI. We'll try to keep this list up to date.
| Name | Repo | UI type| No external resources| Blocky support| Verifies permissions | Hash information | No secondary storage | Statically linked| Can modify parameters|
| ---- | ---- | -------| ---- | ---- | ---- |---- | ---- | ---- | ---- |
diff --git a/cmd/clef/datatypes.md b/cmd/clef/datatypes.md
new file mode 100644
index 000000000..a26c1c937
--- /dev/null
+++ b/cmd/clef/datatypes.md
@@ -0,0 +1,224 @@
+## UI Client interface
+
+These data types are defined in the channel between clef and the UI
+### SignDataRequest
+
+SignDataRequest contains information about a pending request to sign some data. The data to be signed can be of various types, defined by content-type. Clef has done most of the work in canonicalizing and making sense of the data, and it's up to the UI to presentthe user with the contents of the `message`
+
+Example:
+```json
+{
+ "content_type": "text/plain",
+ "address": "0xDEADbEeF000000000000000000000000DeaDbeEf",
+ "raw_data": "GUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOgoxMWhlbGxvIHdvcmxk",
+ "message": [
+ {
+ "name": "message",
+ "value": "\u0019Ethereum Signed Message:\n11hello world",
+ "type": "text/plain"
+ }
+ ],
+ "hash": "0xd9eba16ed0ecae432b71fe008c98cc872bb4cc214d3220a36f365326cf807d68",
+ "meta": {
+ "remote": "localhost:9999",
+ "local": "localhost:8545",
+ "scheme": "http",
+ "User-Agent": "Firefox 3.2",
+ "Origin": "www.malicious.ru"
+ }
+}
+```
+### SignDataResponse - approve
+
+Response to SignDataRequest
+
+Example:
+```json
+{
+ "approved": true
+}
+```
+### SignDataResponse - deny
+
+Response to SignDataRequest
+
+Example:
+```json
+{
+ "approved": false
+}
+```
+### SignTxRequest
+
+SignTxRequest contains information about a pending request to sign a transaction. Aside from the transaction itself, there is also a `call_info`-struct. That struct contains messages of various types, that the user should be informed of.
+
+As in any request, it's important to consider that the `meta` info also contains untrusted data.
+
+The `transaction` (on input into clef) can have either `data` or `input` -- if both are set, they must be identical, otherwise an error is generated. However, Clef will always use `data` when passing this struct on (if Clef does otherwise, please file a ticket)
+
+Example:
+```json
+{
+ "transaction": {
+ "from": "0xDEADbEeF000000000000000000000000DeaDbeEf",
+ "to": null,
+ "gas": "0x3e8",
+ "gasPrice": "0x5",
+ "value": "0x6",
+ "nonce": "0x1",
+ "data": "0x01020304"
+ },
+ "call_info": [
+ {
+ "type": "Warning",
+ "message": "Something looks odd, show this message as a warning"
+ },
+ {
+ "type": "Info",
+ "message": "User should see this aswell"
+ }
+ ],
+ "meta": {
+ "remote": "localhost:9999",
+ "local": "localhost:8545",
+ "scheme": "http",
+ "User-Agent": "Firefox 3.2",
+ "Origin": "www.malicious.ru"
+ }
+}
+```
+### SignTxResponse - approve
+
+Response to request to sign a transaction. This response needs to contain the `transaction`, because the UI is free to make modifications to the transaction.
+
+Example:
+```json
+{
+ "transaction": {
+ "from": "0xDEADbEeF000000000000000000000000DeaDbeEf",
+ "to": null,
+ "gas": "0x3e8",
+ "gasPrice": "0x5",
+ "value": "0x6",
+ "nonce": "0x4",
+ "data": "0x04030201"
+ },
+ "approved": true
+}
+```
+### SignTxResponse - deny
+
+Response to SignTxRequest. When denying a request, there's no need to provide the transaction in return
+
+Example:
+```json
+{
+ "transaction": {
+ "from": "0x",
+ "to": null,
+ "gas": "0x0",
+ "gasPrice": "0x0",
+ "value": "0x0",
+ "nonce": "0x0",
+ "data": null
+ },
+ "approved": false
+}
+```
+### OnApproved - SignTransactionResult
+
+SignTransactionResult is used in the call `clef` -> `OnApprovedTx(result)`
+
+This occurs _after_ successful completion of the entire signing procedure, but right before the signed transaction is passed to the external caller. This method (and data) can be used by the UI to signal to the user that the transaction was signed, but it is primarily useful for ruleset implementations.
+
+A ruleset that implements a rate limitation needs to know what transactions are sent out to the external interface. By hooking into this methods, the ruleset can maintain track of that count.
+
+**OBS:** Note that if an attacker can restore your `clef` data to a previous point in time (e.g through a backup), the attacker can reset such windows, even if he/she is unable to decrypt the content.
+
+The `OnApproved` method cannot be responded to, it's purely informative
+
+Example:
+```json
+{
+ "raw": "0xf85d640101948a8eafb1cf62bfbeb1741769dae1a9dd47996192018026a0716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293a04e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed",
+ "tx": {
+ "nonce": "0x64",
+ "gasPrice": "0x1",
+ "gas": "0x1",
+ "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192",
+ "value": "0x1",
+ "input": "0x",
+ "v": "0x26",
+ "r": "0x716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293",
+ "s": "0x4e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed",
+ "hash": "0x662f6d772692dd692f1b5e8baa77a9ff95bbd909362df3fc3d301aafebde5441"
+ }
+}
+```
+### UserInputRequest
+
+Sent when clef needs the user to provide data. If 'password' is true, the input field should be treated accordingly (echo-free)
+
+Example:
+```json
+{
+ "prompt": "The question to ask the user",
+ "title": "The title here",
+ "isPassword": true
+}
+```
+### UserInputResponse
+
+Response to UserInputRequest
+
+Example:
+```json
+{
+ "text": "The textual response from user"
+}
+```
+### ListRequest
+
+Sent when a request has been made to list addresses. The UI is provided with the full `account`s, including local directory names. Note: this information is not passed back to the external caller, who only sees the `address`es.
+
+Example:
+```json
+{
+ "accounts": [
+ {
+ "address": "0xdeadbeef000000000000000000000000deadbeef",
+ "url": "keystore:///path/to/keyfile/a"
+ },
+ {
+ "address": "0x1111111122222222222233333333334444444444",
+ "url": "keystore:///path/to/keyfile/b"
+ }
+ ],
+ "meta": {
+ "remote": "localhost:9999",
+ "local": "localhost:8545",
+ "scheme": "http",
+ "User-Agent": "Firefox 3.2",
+ "Origin": "www.malicious.ru"
+ }
+}
+```
+### ListResponse
+
+Response to list request. The response contains a list of all addresses to show to the caller. Note: the UI is free to respond with any address the caller, regardless of whether it exists or not
+
+Example:
+```json
+{
+ "accounts": [
+ {
+ "address": "0x0000000000000000000000000000000000000000",
+ "url": ".. ignored .."
+ },
+ {
+ "address": "0xffffffffffffffffffffffffffffffffffffffff",
+ "url": ""
+ }
+ ]
+}
+```
diff --git a/cmd/clef/docs/clef_architecture_pt1.png b/cmd/clef/docs/clef_architecture_pt1.png
new file mode 100644
index 0000000000000000000000000000000000000000..e40e532f3051d6b583698b539ae97bf12560f740
GIT binary patch
literal 69221
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
R3_wMt{NU035_!{C{|mB0lGgwL
literal 0
HcmV?d00001
diff --git a/cmd/clef/docs/clef_architecture_pt2.png b/cmd/clef/docs/clef_architecture_pt2.png
new file mode 100644
index 0000000000000000000000000000000000000000..f617d755e2e731cb65f84bb1ba19d65b836fa126
GIT binary patch
literal 81521
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
literal 0
HcmV?d00001
diff --git a/cmd/clef/docs/clef_architecture_pt3.png b/cmd/clef/docs/clef_architecture_pt3.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9d695447308c0fe7c0dc3018618f7350f2a806c
GIT binary patch
literal 101351
zcmdSBc{J4h8$aBtyG8Ds)E%M4P#S4L*;}Z_WS_x|twOSA&oHzq6g3!S4}%%|U}R65
zt*BvaV=0lWQ!)m_%<~>p>i$0G{LXXE^PKbe!x_VTmiKjCuj}=CUGI-zecdzs8$>p&
zSh0d1c2?7H#fr7?6)RRX{>2C0dB8q7ykf<*6)?>ch^w8W@$0Wf4s=ky&!-YJX11)p
z8&aQ+aIoK41-&Tv{zk?YBZA?FQ;yYy3~2skw<l89)~*drUQ0;6mVA1B^3Dqn<25&t
zZ@tw#cXo~BtrZ*o>RUBD-^6?ts~c3e;ku1`LXDf)k?-R|$t?vekKPLxz}f#__*ywP
znO@ZFNZZh>``5124N|IeVw|*9$4ch<r8Q7u;^LL@4~8Gzy?eJ~&S(=jy?$_<N6*Ze
zR;>5Czjob1RJ3q9xZQQVh!xV&eEcFix{6&B|1lJ6&M-*Xv-p8)P{^&nZT79$313g%
zg5oXevUg74SAjRcuXe2gzp6Dn`GCN?MeyRU6Znav!Yjy;yw8F!@B;j@)^LT*zFpuu
z_yR8$4*c7n{6*ff0;SFS4!*z(-f_YCct>A4@eSzO<9I>v9lQZv@J_S}T)?j@xwR9%
z@&SSO9sC7&!8`BrOEbKEcq(eh`@3vKw$3E-K)lQFrIdugSFQe~xwURh=i(fWdT}FU
zEvkx6vSw-?Z5s{o7VA<IzZ+O?KBybucfE{tk1#a%_@9L(na3q0xZLF9Cr^#h&C0yT
zx-!)r{k-PXGmW#!X08=9K_Q_~wbN|RdttKnqKh~6fROqI6`AnqC4ph`yzy9p%M++t
zrX{vmhoRAq(7!rY!Qys1Cr02=<9<3<k95SFaYsG6ydb&_`_Wz;ILu?FU=LWo<9Knn
zp&^czV?m!6>nQj2kcKl!O`Ynt^^p#&cw9s{$2I7TxNmB^b)jC(mv$Uw*TQmuC9RK)
zie<GEs$4#DQj)nhPj%UGv1+bWHDg9mLv;@bJte^fMl$A6AyCM|X*kkr*RE~NyKpMF
z@DpiYG!%7_Inq{K>NV2Ynr-%w7tn<`;BXTk@}#>1^}F6Pu3rqd_w_AQ`J8=wKRk+n
zCg+Y3xBEissS|gNk(C%Y2aY53RP>t7z=&-v%zAh85A*XWelsRre4*n{zU%d?FXR#x
zci6Q@mF1Iy?^;LKz)W5)4y2~SPO$7QT|yfh8$TW=Sg$6GB&hj0y$Ish?ZkV#=<06%
zm7&O^+vexC8Shsu*Mz0Z=rfNnU!Fhsk%;YfDQg(k)O?B!nZ;plAniR*SQo#sV*6M5
zjeEeFrsf=vbbX((VpLXhkLltYwY$%YDbM!=pxJh}Ye=_`A6%IgkjZIlal4K+f;?b4
z&GuN*oZIug*9gXha~+c%_ar&bb`1HgoARP5FvTi7n4I?yxiaqOa{V~NnuW7@vl`8i
zXimLle95g|y@gE1?;{e4<BaeF7Nu*t<x2Ls{kvE5j)25C$)KVta5CV{qeEI@!J(lA
z85w(H)v=`t_SDp`?d|QR4Gj$i5BHoYCDHP%8|H5YzkPD*PU)~Qqbp4(wsd3{{NYj|
z8V)3LA59}ejfK(Lj5@>MlQ50o7wRmve$BL7eYdwMxJ|UE=pvusVw6n|=cfh`aJNen
zB>Rly%ExW8ZHSba216J+_-q}#?yPg$x3^{%<6+GnSKC_hWSpA|hB3p5GVh7bnDJ+f
zbVm~Z^&D1u+3Yq>mTI-kx8d$HZBvcWsWghC>-5dCaMtLB8noEe8hiby0CmAy!SvFE
z@oYwhAG=s{=R&68BNd%HpH|sPD%OOFnGNfwUthg$>jq<{3R3=WZF=9QPaDIVlT!cc
z?L`VElgybx(j`@TW|YF$_eE8zNhI2(w=pGSBu{1|gI=6VZ!K~(kv?0&zQyL`H2c}?
z`vEAVIOzSc&hNKuh__PN;g3J+NffWKpe5jf1}uUknmNkSg7eXN@On&CLIO1Ee2bc-
z{Axz_Czncs&&LwM2c*tTkq>Zq!N?x6KVv)O;OfjPMHV<(;J!)<tQ3RHnf3Ro=@o0+
z{Y<F72kU92w_}}goP!FDumEDRjtB*rZ`-}IFh&Lv&Ejg99nuhpVNsP)x^9hZdbCqi
zZ41s<4?k>*d@?IBh>Vzpcii5%ZR^8qdwcua$?{*-1v5zqE&T2!T$Aj#A)3gFWCf<D
zK1sFnwISN1r6yO|Fn8|~HLkxV9iK}WQ`S96%|y`bWIqW|x~$kiobNNco4&|t3Cq4<
zaSw1bPBGLi1x%3<eBy&h3P!kycgwbSg%<!-@3f>6Ed|lgul8gp*dRAO1K;RqmRGNf
zyz9_A{q0j|E%li;5*f)?ugjEWM#l<f&8m8Qesd9$eoJOq5o+Td_RR#>8oKVoz`kLU
z@mhEcEv6b1rhT3-L=&0lu)Tt0P&BDAYAR<C7(BGT7ME=IJ@EDM;C(2OtR@l{t34Z#
zkjEVVR0qyxVzY1Y%07RUb`7qS7E^n?w`BX(IUEEYvSS4N#S>i|VXU)gzX5(~n3ma6
z<p&pxv3*GBIUL9(aDM`okjU3mhdSJ>HA&kjSs&gL8bKKTw6D&@Tw7!_G7gGNd`Gn*
z@|_);sTkmtR^t2NjeHRVG~TM~h;BUVL~xU-I7(zMT3F5FAWG!w4szr|w;2eQfia$b
z3cJX1{5xVcOwqNc{O&pPA_t^?iO4xTpSX!QinPH9N#cWlc(;#xwP9AlhV<0B<<d_5
zxy5(_V3ygzzhlEjs%wh|I!)qpaiOZdly@o7?BVeHXAasrQF5+LhU@kDwPc*PSF)TE
zzHAyr4a3f<-K@&kq-xx@KYO+aN=CqEm`ZtfNL6c?Q@eQmdIbt|xNp4<^7dArd$Z9P
zGGcX-=Un7Iqc9cSRYvT>9b8RYV(})coAIlf+9v#hQMn4o^D<(PgN{29ZZ#Rg$H8)1
zNFWwF_)d7;dTE6{P5kP(I0U2d*}RDQ7H_8w{%+5kM_z3|_BV`;{Dz{Iym}>C+AnuP
zK@zq)W=<>lsI6u13$DLx11tJb&o${+ftMqzMv-gBg6j<}%z9BT;ym>j{~}w5JBpej
z$hC$Gn3!<yY6C4+(HUdzYGC{2-4iXzG?EhJUxhbyR)<NekT;_X<)oztZ`l&n9Ze&{
z_K&M$tf)TCC7g*?4NC@+pCXeTzEtqMX8TZ5_0yZu+w*YRenek$tg76JFLIl2)@kaY
z9g-qQ`ynW7m6h&Qj38N+jG!e5#-e+2huhAa;WVhlQf5LmbEycH$*Z)N+5PF2;cN2N
zr2FU~Ul03EVkiAEx@xYb&mLq7JtT0NQU_@sBL&jF%nqx+_WW4;!&g2WXZhTbmWC)5
zX<9@@cOE!2EGJduX+@_sc>-)7FIbaC8S*$!bI`IO9=`l8X*bINO>y$=!iK;d97vA4
zl0JDQB%Jw{fD|scUSYBb>VOYP?+C6=DDM4)c@!ijTDr4Z+D*i?Xy0RLw=Y&th%(wb
zF|5=i8v@^f8M$h?@h)5f40{%$CcIuJH;@$gia0*P?~O|u^QK$qQieMqr{?#o(zYIN
z8mPOVmfOhENPB9B5I_dEKO1bxFAd@<2Ad(HNw^lreSh!O@CvJX!%W`L`;2iGu&QfN
zSy}XWjtqRgre2)GP=yTqrmRofVSg9`c~$$YLy2F~`IeIFhKQlgqD;}8{wf{eOl4#E
z%zSaxbYG}0epua7%Q0{3idR~P5o##N<qGcoWEpgKZ{{_ACrHxZgUebA^m2(iuFzj?
zyKnvcFJ8yvfWNUx-miWmkF|y%b^pKSmnZ+?5!~M{jK_ihe|H&IFzW>btb{EyTc`Ra
zniE?or?<)HP)o*x4j@mW3om<>#0OrmcE@>GI7Q3sCs`)uziVX8Z^jJyTbnermo`E2
zV@Cb1e2IW?bWNCn95|QtLPGaT;t+{5@6X-Lt;92WX|G-tbAeh}4S4(_#za2khTUy1
z@H-WT95lbexs5y-XL0r8+Dq$NA4Ke!H_s$N-!|1!a$B>At^0-&6Ti!;_L98=5!uaO
zo`-PRPu{QH);XI^&-8NOj@ls-c)H*R>E@*ZXiOnckW;_EJ+u!N-I%}l`(^3F`^(*M
zIaThQgB)B)9J>j8mX~jfLSx0!u|8iKT;N)uCVzC8-GF;79qj?H^YaMu!q1bpBI1tS
zx1Hwwuq+)GFY2?M&5;l5dFMEe2mBWQs;0&a@Stp1gw$4HVOuvhH+(`uKv#aJy62a7
z8-nxRyg4@ls!GARv!(kKOU<A}(R<XijM-}T&;9>#A-d=A+KR0}EcmCR8}PESii)kB
zh4$7TKYl#W$q4lS^!k3bMVYs-;00wpmVIw!h1YOP-PCA@$8&d`WJH^${EsHZTa*O-
zQqM5n+5j|CFvaUWKKv^9G!m18E+W-d78c4&pN5><cEJ3qp$#zy0>d00h)GaUQriCh
z?t)|kD+rbj5EKlL$s}DQ7bYb=6H#=!>^0IV>#bBSnQBAA4@PU@hm}PYo%T{LBHAw2
zss2!R3oC06fgDv4;4Rg)4YkylFEyp**i&O>eQps_Ix>b{pyBE!s&^yPhcViknz#6O
z9Lv*>3EQDWjUOCq_H*7pRH=M=-e7fcW*c!fVV0#&%fEYiG5dD@j2wuXFphw`hl|Fg
z4Ln3$CnJ&(4I?xLqRmi&l#}gTfnmDWq^6~H0xHx!FR8+`q-&SznI1xBTxX@*{cJuU
z(nBzqd!Ic1<DP}(Lf|ntg9@0QCZ3dBXpnLmA0537@p{%uBWp*)*I#Oix3=l>Gut~h
zT|LQLrUwLJJOQ1M>$t}3KyJOkn5eSn-Ua3XQi~_5Z!F|0hzHUHkBLfz!C>I;dsbxN
z`ea`TNF6Vdv}*gVcj=PU5;I#$$Ch;Xpy@(5Ht3(SB}x({KP8>GsjZrGCS2Sl$?(L9
z6ZvFBO@@Gd-kaE?xuz)6$S|5yS6{zyNxZCHsHVdof)f_<{TVTWfJ+2nEDGWm6>oEG
z3B`B#y@<V0S3fy9`H6I<qQAfY*sc*|NJ5tFH0BcT#Jq#>t{=RXKkHubeZe5exCTWA
z0R^OK4f5Z4q%~V>3g+%`)yVXj;rz4u#?NnK%|KX%GC6~+q2`+S*hh~{ccDm*ijJ*s
zK*}0D)rlgN^8I$FOJ)BI7DWglorH)&q{}>q`tSoIMc!kbF6=$ws)l`srvce6^%!Z(
zWrT^TcxRbeGGOgwL@0jJeAp4(c>zfqV)uK5q}A$zn@xkld63d_1x3o3HM(d7pMZ!%
z)UB<pE%d0*tRW|PnQ3E&M#s=|zC%#Re?%lCtWsqV5Bqm0dtQE=0Lxw}e@oll_^>h6
zvknIt_vf-l3aV5gi#5CuoDgWX{=^aT_OG{iCt7B8{D7H7(D-SIEaH#VuOeM$%PbsF
zWW(x&FT4-^2hC=2vGI3!X94iE*k>1Gym&~S-LkAus6x8GGW*YS#3Vj^drf*F#=ko9
zBBU-}_6jlrq!RhWO+FM@qHMQMuUpBs@R8>9Z~}oK=Hp~;9>*`HTzGOfR86hB)O*Z9
zCq~|lRr}@*v|J<k!4DF^D=>SVpYWX&)IdFC{n`}J*0(++p+{<%$vhw`O|M>k8al<6
zkbB&jV^Idc6NqV_L=a}QlT+4MM?p=U2@I{dYdOg9slG4ZrOn!7&SX#EJLp;hPTz&Z
z&N9r39HKH;L>-Jj>e>T)NGLT<*NxYW@n4GA@daG0HLU7iY7F`-QD}Yr^ZcTUg}^k~
zTDD1DNvR}Hun_8Q)Yg%A;bxh4-h63mc5x5-5{gvc+?SIMnd?lq)@JAQ<ky~ET<)b_
zvlIoJAvf5$bDk4q*WOBq_)*~a>_(<n_g?~b5U(3p=mp=so5$16A#ZpN(3Qk(u;ypZ
zpK8M8B1tJ{!YMqV%n~d$D|V4}5`71ZzKe{3z$%{9^gU2_0qdG7xg?es!xawy6=ekk
zo@A1-=A!Swg(PUyUfKkPsY3HxugxDyRm=^MS5Tk@>v!v6;Y>?7n~AOpz)H(Adm_j{
zha$*`rjAS#xnebS^`0@K@aCcBbo!geN4nLWjdE$nLH#=FM}<Y$M0p|ujrp_}-Kr&M
zn0(s*vpHrwA-80XZc_YK3D`PTr$|;#4!CxtsTL-%rVPhzrxU(RR$bE74HJqNQ5SwX
zX_+iPY6>A%L1{;(CDI*`&L+9WFMq$mANg2#7mB3WY1tBkjt_~DIGa>;1&!H3o5j$(
zP@M#LbdvLG#4eGmaxlZO2uWr%fwY&u^(M`1T<?eFxlmi^M+f4q7ms+HKZ;;EkdALO
z0jNKbpE}*}egdfGPvy3ArFI{V*k6s{DkVVqcMLDoH9*3p_G5om;A-+h50R0ALtv22
zG^@hYPl%5lMUHLHgD0zPh(Ve|*u0F{Nt=4=GY5k})G$-=moKn@riG{Lsa>P03-u?n
z6AsZ(_<B~TuLAb{`ok}iK}Xj{#ER7R%k7&_5l=xYGvuJ4A!*|r*k3=s2rr8cQk!9%
z;<cS$=)8oW#~<4g54-o*K3~to#d6q(j~wZa#EeDXgX+5Q%7fo>B6lZp{OPC7J~_AS
z?a2t1oDN=lTziyna|AU{S}i;^r(bpnnXfIiEMe_s>1B$S!Ol*)tva-O_jB2jHXNox
z`&!W2O_w)F!4<|V2T9sUtiHlE*x*PPu)qu<86;zfvWnL*Vz2Q{vB9Fv@A5HxYSC%*
zk-2Asn!n#bVOL#K?WJczytC`Suq8_Gf*gbFf(VH!IP|MG#U5omwWd`ePAXg}2?!Tg
z>zWZve;cFVF=2>I<kY~(eDx+e<Tmg45uH*2?>O!^TpsCgwpCSSk!vsK=`JMhN$F`|
zNj@9{R-Q{)AOX4@Nfy##f!6(j&~g^aH9t!FmnXhZ>-@J@>P`Mn9LCnYZCs2EN_#Q!
zek>#}?u#b<&#pSOURudbWQkZT6C?}g07QCeJ(l_Fi?nVbg_is9i%5VSqAG1&==rN!
z&Z96R*~NT1iRxIVx#@4l`ubN+_U%_v>afT~6<lh4>SpcOoOYjIM7|azNw|vQfde`1
zgWsCk^Q}YUj@nZtN2r9*1@4*xy1b%$|5@N??sxAZAv3#XzJGpuO8d9;lb2t&fX9H9
zMH4Dt!0+{2AIwLgLA$pG5PzjD!=j7=V$p+j=^)#Fq#Pe2`bABthTKZ`36msJXt`Fs
zokfm=0LCMdnhv;Sj^Uo2h5ZJtL8;KUOAGs9jSaENe=?c$rV`68ozKtDAJ}S{u$Kmi
zh*{{U8QCT{a}_Os=cwEV@cL40Pu+GWF0fR(IF=O{C8d!nSD@=_)XEZ0wbcWz^!tr0
z)zMCPgA{!JWmM)WSq9b5q8M0!uf$VAnm~s@12;R=V%RDMTJb4NrHcc&QxdzVUqe;3
z{9N`LcXxN5-EFIE3`~7$YG!{{SaT6P^SSIu#Sd?Q7sCCAele4s@X&6#j~UkG5C$&1
zTJj0LEfd{RMFL=5^wLjY$FX-}tiDh=<Fk0o;5L(Zk~ks6#7o3!du3%PCN4<KtWWOH
z4nSF+ruM4nGMFAB>i$o)G&Q$~=O*eUWzp=4#Qys3D3;VDnA~#+lRGw?O$x}t$ocMQ
zw-a8je6~nw?1^2ew~(Xc!uDakx>HO}%V271>dESDdm%+w;PQ+YkhEy03Jd)l-{BgK
zZeIqDNNVa!!Wx&h9E*5)Sz_lAeLM+glx*1c&WFl*pK@lKC3t7pZy&lZ*IMC0z0ebm
zFsa9FxGn~d|C|6%L=r}dB){4a19acU9`!ku+cI^no>wE_YoP#s<odPdy>KLI-^`%x
z?Br0+4XWr<Nu@8c+oC6pgzeAYPVY}XdJZ<YMqCJ*aBwpE{=h?mCD*9#b>6in2*L2{
zQQ1Hn95zZ^y-vrs0vHrT%1{8O1|yu>W2cvN!2Idgr-LotFas_lCsCS~x{TGKwWtIS
z=)#4p&G<+ze46px5Kf&BXW1lisUFC4+D~V#j2fC7WZ?4z8(&-EwqOG!Wmu`)c0%we
z2bp)B+~T<Z?<|uH{L6KjP<~ZiWC@3ih$2}+T+YYH+xNZ9;rf_pL2vw+*zs<5`&Z2-
z9@XBG6axBCy`fgrgKEiSeAJy8<k`kJrSDHGpP<o}c-v{qB0^e6Vg~3<&mtc^`qF>t
zkrkumI7((EI<6gI>y!lL_Xgjh{AFRs{o23^vpgi1-B}1!ZQl=+0>xwxTb&RhI@=G^
z;P)^TPOCCSzDmp4pO2<`A&Nw{+HChn*$^=|hf7wo(`V1DI{GFz+TkDy9oK>s=4Ak;
zoP?3rSNHpdAM_(5djC1WqpiHb-y(7@fa?Z*9a|#i(Xc8q%AwBh!!;?SmqS&m{ReN@
z8Kx$aZx^f(b1J;v3`O#TpT{(huTEiq@n>4`OTlSvh{XBymi?H7^Q#l;cf%pt%!(Uo
z5tt{ugY)uav6pUWp!UDChrT$&Ybg&112_~en3ROLZEyPE!f9<MC#R38e!0V*J>|YG
zbybwiCVSKMNCGgP6GjnUj!9SE*4Mi?Ne>M%P52{uBCZKztmiU}Y}&Ea=9v+=c@x=@
z^_|DvMv8Xu?&@dLwHH1Ya9VM7!h$BUu`jue=Mx&@O?UXZbJsHx{-qiEh~=^`$F{W@
z(QgK~lIsn-_sGbQuKXJ%)jT4OiF!ku!ttrj^q$&{pdx!~M!eAfph$KTlH{Cp8FQG0
zT4GM@<Hx}ZP39-{;7N0^z!@QAgy6f8Ayk4S1R^}N4sBjIX&DtOcwaCG_mGr>AP~ka
za9L3;Er)uprJXkbeb@+c!Al_6w1Twunha__oaR-oxZ--RR+D5M={nrupQORz7NXHZ
znbz|WBh2}E0!jKD@<L}8>Ie%u97u9N>P2Fra+RB`x|a0C!eywv{jJ}i-(P-Q@-nq*
zMb=qKBcM>R=+rnHQqb`kf%FNRbQ^oni5^7%O2d-6MT-FhvX=S*8Hb75iF}nRb2_si
zGGZ_PMpF`_w*VoWUJL(;2%w+RWJ)@G7eFd*6-ovs6a24t)|ty_G`a}yPTI@FBskQS
z<6rsROz-RK`+M2R7MkKh($rG>QhMS^<>q7?*x9>ENF3=o0zOVt@%r%WdJR+gm#&L!
z`5P5ec`WMxzz+I@H!SA-f0}k>p)*Znu{-~%5$*SGT4I#C=6ILxQrhXT9rp3cUSuhq
z7*n42gJn-CdVbL_ZsLLlT~m7DEa6q`-rVc3S@W(BsmM&@l6hcwkh8L~b~mN69knYG
z((RkmS_$xN@N?%>$3=RM>=Ip8Fk4XQ6kB^2Z*dUD4J)K~!Xt3FEO6S-Dzsq3^>sjk
zDJv13d1GXr=n$7%FXKBzxbPxq{FudyKtBW`QY8RT3YRL&o56<h694>Tpn2ocrAyi|
zCEsHd96u)z0b>|P73w4^)b*%XCL`z%mmIGprnQLcEA)4vN^R-{Hwp;&Ja_;6=J5$F
zl4jaVTi|NEbCi^pRxy~V-4nj1+bRyq+(x*LOvgP@wgU`7i!!qPqP2B+SwaqB@VMf#
zg4{<gd=9gUt3T|&fT4U1R3I&np<-fU(4&W5+!63`pLn&+O4XiRC}}{-IE-xCItuuJ
z(m2LpyFQ-r^ui0iX!4Fs$C37Dt*fsa3}lA!C{Izv2^2$TnS_{>m;Tu*c?yCz{DXJG
zh3*Q*W7M{j3*`++mxn6wOg8HvGrT{CTY0|WYr0<IcxonPKSu832p1~&cvclN`Q^ET
zvDT`YFqQGW<Q6M~%oSWmp8p40oKgQV20Lu~k=J8wY%qn~dGc52PAtLdHIfWm;T>$Z
z-iwF2nl4di@R($TVE!=!(pmW+v5}jd#jaM;>TpuurbxnYzRX8rWu^mUXNk-V(HW?d
zm)U%<A=7R+LoIk%PP<4)ICr)Y_x9VjZ{snX!!7K}(lknDjiVc~<j1BCUcfT-J1GwL
z7c{|2hYV=c%ZQeZts~85m&OzONUER<uG_rB^w=huQPTliSX25ur^YYY9gv0^WC>rr
zA^%O>0~+hAhVI1SM^I!@Mxa*)zUj_dD6{SBeu#eOu-}NO>tA>lmMF#ZHWuOT)*{6Q
z0VV}QX%pZ2Y=~S#4>=M=72xFA08%o-XbkB~9DajKFj!@DGhGs0!6B7~HM06`4x(fX
zNGJ4PsW~PA$!MRKc%2nrfnO{5=2g*=2QQi2N|L5lz^}}?0aYXXXoyLx$c3rZI_PA%
znV|ujTEk#N*%xh!U}&Pql%m~YlSAZ@k=okYF{Jt<kD$yo8I-l6Q(M3U(a#&mJZufF
zue*s|SuH95zZ6Es4KhMF0fzxjt}L@XVi$b1UkU~g6l6T+0KeHp?he_UGsL6zJyv+_
zjIGjeh$GL23?%ie3zfdXldQas2U0r{VYCdHcsZyI7`a7M8sAPN1zZzh8=!70q{d?9
z?F}F9n@V^D&AxrDEkgdv_JEYr_swYzAACv4*>|DLun}6O$vcO(eMV_pLd<wY!#e|j
zC<qOK|K)dQRFe@W^}y`1A2N3Xd686aG?5DcNg9clf#acWthN?EJw=ip5#R1u7Nj~O
zU^y|K9*{0r@rns$qSsCL8m%UIc8Am&5^NjrIon7kCq%Bg7HwVLOMlv<;JldmQ;_|T
zX~aWf^;vXGZvC4)>-l2}7V1~Xb71#N2<Cx9l}#$JuniPm?i)4DHPRul0;R^j=LUi1
zJ$zF{Sa^V9e=zb^Ze@x|-9ksjrP90*Ol7b^g=KzWW%j0pe*J4DJ1I!V1z=i`on)^O
zV`*8)I>>tAV3@3miNJeYV^m>_@2fg}+03?pimgY#Rf66&{x5f68r`FQ`Q1)wgZV_5
z&=3+Lve$eyea)9r!5G2EI0B~f@e#YNz<$zoYs&e)%53G?9PKxxlgOqNyXJ#X?yw1i
zjc@I|w#+Bnw`lr-0zjNVi8vU*ub+3vlk|SJKc2=5D*P#fR-n+5BuQl8`@+J)-BBcT
zP_FGHIxYN>=Fb9JREa#ka2y}xU%18+tD_*Ptp*1=dj512u;u?WlJsW#5KBgQE%m{@
z**uaRaW+Q=K&M7d+tOU+hX-=u|AFKA3qh7`|5~_8`7Min9&d{pZ)&(09v;_Wf>A=Q
zp{;%WtXAcSyo?X-Gi0%k|JusN8~FrPLY?2`U7z6y+dO3MzUdO^{Mu$Ap_iMR5SkV~
zO-|Q#d%)T~+hz7CJ9OPmqAwKIa_t?7*n|2%a7Tacn_HBOvs7Ll*{}65srny>Jotfl
zi3P=azI<W4zuZ_KHCs;yGigxKznyp|Tn`IOcHPHN9aL4VvN_jG`jkrd)e2g0hIR4e
zxIzD;6YE)J^Kk0m!m#2uOBXCb0u(#<xMuWCsok-EI%h+SDJ~7#JRV0HrV41lieNA~
zQ=5vj(Ggx&ODnV7pU^u&-Ih+?R26wPL_16yr+u#n+iNl9#=#W3_N*%~_aaWsoVh5x
zm`uy~4om?@SQvxIK+w8!D`#UH0-TRTmkWDxoqf75I_H*mxeQPF`R(zohgr-n81cW)
z_CU|puB8eb#&^DW!6$4Skuc0lus^Z@vte;@g#~zo<&R0;rmG}DHF!lOA;vw>dC;-T
zoqhiOgZ~=akXmXpzH78xJDOl((VTPTYIDi`#%~tI@7;VsR2C@ZuL1BDo_F(PKin?8
z@d~bx?HuSSoW_$EznlA#Yi#WoDkd72{yN;9>{(r}v|tMTM(-pMw)P7;LA#E=F-;kz
z%(#jAU#C+r!OK*YjJCBF*=_r8=01^u(|P?@7BXz4y!T^3rm$th0mts=nBMPpp?-P2
zZodCB;Wu5~(49a42~%b}P0)J2ARd-&&fE>guakv~6*g2eGZKGLRyOl!`oh5U&+N*9
zs&(_|2M}1l%}lpQV%=mKzBaro@N9Yd&p_k4?eJ5E_yg#QR;mXDz}s)7E{G<}FR&+R
zqMiMD-PUL6q}}kEs@YPDx$p2UpV%^gt&iTp&C}ASJ9WBC>G4>$*#w!jkPtt2t}c{&
zGPL_C_P$W!z}vdv3us}Rp{I4ZrrBSwWCEjUe*AST5YQtocV%}6k7#PPXCCSKb1;*N
zsiRV|(R<)SDD*{y5~k62P-(p~mXo}joq)B+38k9&l(&A)HMNziVumRkV>^|7O%4V1
z^4qFhcxIFVdR*>7UfpGZG%2K*Si0mN^`Y?U)OPj>6yEztp=P~-Y`#EO+s9d5m)?7?
z;2VqiIW>P3%i53o{SN@J1ppvpfj?lXRKpqUdws$$!ohyl=+l|oSx_;~<i9L6Y2A2l
z^H)TY4y~pou#5!vnu}<<|7U8h0S$yaNp6+R($y66yV}09Eff(&h<7RP={cLwH$~f!
zYs;%rD!HXfkC<GU+SyYyD0^bRfftYjzm3=-w9`wFx$kkj@{2kR*=iOAhW8%pcvWFl
zY)eqM-2TjEsC$p3?T}DYm{)J$$-Y=E3YYn@`UD}vXRc0U;?}};;KeSs&^)L{xVd{y
ze5z5n{D^R4W0IZyK@{mr1?6@!RL63vlFd=`>$S95&mmOJ7ST2c6x%u;-Qr?Zh{+Zm
z_cX4+jQ<Oc^+&1hk_1VFDKwmTp=THxMQHP`d=1c({veVNlGY8sxB1`62O}03qvG*#
zJNIt>{M$8?!DUU2$G)E{#(s%N(W}S)7jo(sA!i>9Ao2QV^zl+i1{B$A$b^a=9%k&?
z4@Vv%X;TkYRU1c}V~F%|F(E$>liv9QR~o+R;rA|P+w$@0>I9O0lOcfzB{$xgIpnsb
zRh7R)MrcPWvfs*uLYoB?P{Xnn5=Uo*%X~hpcA?JKXT^P*N<0T!G^Up=pP`MtQbcUL
z$q;$+(;PF0TnK9p-Dpefw~xQ8?2;D|q>2pMo2?B<tmIp4)8_+L*MHlN&8v9%7T{Lp
zVmtw^JHclCr49DOamLc9PAQpAWZXi5|J<8hYiQ{F1LO`#*g%Wc2RBKyH6iGyP<RL5
z3O*(KXGV{#ny7urpVFGF7DK(*zj^cy#{AJ7PQ9*DZj~(w&)SB13e}kU+<5!O*EE-^
z+(Mb=W?8sZz=#-2OyR>&noIZ1wCWDKZ5<Nam%Q29A8~#n1uvT9fCl$8fM97mbVM%9
zdzHcJgg)`n!64Q9B1d<FG&JHSe5f3GNd$vmf!{PZ?p+kY*{tX^9*;})4c6T{Orv{)
zh7q@O{%Zt+g`y(pCk^lpSDL@3*R-=mk8J<C=C_Xv@~P7L69}Y#qo7Q6$C3(szg26g
z)<;T?TA3+*znnnFO1)6y+@c<zUTd)&hRsdxq36s)OwHlCQN6_&{#qB%`Kdx@UA!#`
z^;FQ6kD-S7-7$N7L)cjZte!*JxtDE0rK*E_sn6O`)=!0pZgLy$V0#zqRlt}tjg|BN
z0}o4~7N8n=yUmf|JnWDyiQXAk(l1-AheISLifG7yqXCF~%8))(>NLjJ+w>7IS<8lr
zi0BGe09amZtN3pR{!{xVOSQlKuuV&ED8d*6A2)H;^+*J}VpTP^*b-->96Bok1&pwE
zFoY}p_BIQIJ#CTIEXtonA6E^sFxoNN{=M^FT`N05gPyWS+*_E?GZo1UmC?c(3!`RR
zs-(9(BxuLq{j064h3yZD)EkuRfAP@~Xf+F^ZXiY&w4mccj0$I2G=;3uJrlh<@y}%;
zwvr2-Gh1t^ho$T-lP%~oA}R&r+g-L}vcICeQ6pQYrjLXpI|b)RJK<4&>(tM0<Idrp
zSEge7#yxHz7}AoJLzqVnyoUmQ<B*`GeoG(-2`2iuw+N;3izx2B_tJj!ZTu-?yu)3i
z*o-f`)y!6>)EkN2`A^|Z%1bSfSt98)L@QRlqJ1kUa*F-4h@&m`A3hwD-c+M2E`%d{
z_O;mO*b#3L`<T*9>bzbc<>;li#4QH@3ktv{7<7Q#c9Mx}tTeo$iKLjFHB1F1)qGeZ
ze=<%sO6t^~s{#nuV#kKpWw`AD=1T9@y<i?pKUriqG_+~qZhzy2umz%z(6)>{)KN$E
zm3TvX7)5}2^zJvmVPzPkp~m;y^B-DZ2ZH_H2CA2tapz;Nro2{@LNbUlXvg>IZSCEx
z?g5@92%sM8^}4Kb#QbmhqUSHVeX2l~|9PRro*&`s|7IudVW@vIK^29TP7aG*l{;3!
znDHRorIIQ)S<RpGo2u+Sz?p$eabBPM6Eyz)x}_e_!*kl0YS5=%RJ7sPQaW-J-J_OP
z_QC`j!HyWD5%1CCJJoh)-JU<#3dps1;0vfg$djG~<xN)&o2ap+UjOa2=w@3YexOFJ
zJr_)MwKCh#AdN>j=^B3?&k*|qOY=c^FT1^8k?~#52{G*ph~ut3@WBIC7g(G9cU~@?
zDt{#shoy|rXGh@?f3gl@<r0S?*znMMHSmE>%A3l6sS`>IX`{<;u^9s3*Ts@MK#~zV
z_~nUqrul!{5xEdVr0vo<Z^J8dnbwZ|hv%YDN;#$SriE*&$k8(k7ycW|i%eatB(T50
zkk>du)Gh(Gr%P&W;SG&`moY%>1WkgaBg&BF0m<3w=h60DoM0E{n^qJYLiwl{&dba{
zKLoUo50Cn2;T<~W0f%&EewHtOX-P{_K;qSzjP>9_k*)y~S@ba&>FguzI7^>XU^er6
zW!6&lqX^d0;chQtl!0mzx-kq#3)v2li$uHrPRB=E1(=5$A|rcLzOH0__nj#D_U9!a
ztd?vQ!sLFe!`xmIr1HL@+amkmkQ0zoaFNfRb%bbiTSD=lq?Q-f1&03xaLJYkM8g<d
zIqd~AeiXE`Ka-lrpih~A{clyZNPJizlbOUG%rzar4{3ZG1zWv-Z+N6!s570U07MV^
zqVc5xQ$`uX?d0V3GeU8y@n!zE{q6@|Oy%XS_qQgw{9vPW;b1U&{#~O06Kxk2Y?LYO
z4%X|fa%d1+kNop24+!Z8d9FHDJCYzWnp#O1&_REe{&R77)a}V05Tu24T&~eE+PDRq
zTzXf^>-%{isWzifBpCzd{xMJj^a42@nXXFEa)7A$<L)YWdqpojGulpeV~fCJqQBg_
zoF@<HP_|>!f!m3vVED8_r+g4M%T$S>iq#TV*zzBUU_Y4Rw8Wl2YXYd>Qt14#zzT)=
z0my)e%OrsI+xMXH52n-Dx&Y7%hQ4p>po!&r-9XUNT;If4n-rGSkLks*|I2qx@D!d;
zkJd&Q$ZT&PdOgw&6s0|N@?sg~yTa{6X-Rd7!(_yZm`0LG?$_^t&v!Rj&t>LrGfqeV
zq0mkHlR!Pcmj3rRYPgQq>9_cu15}~-={ojpn<lDsqA0`W@;}#6WfZd;4D9$7taKUC
z%;(Q_0`WNl;u9qUr{(fWPq!{9gR~b8(#95Gr>t)W`!@Z+JS{hy)y>)x;36b^|38g~
z$M~W<h(|z1Ru%K{i$2vhLYi2%mfq&y&h%+(lSkMRsRgXD)@0lL(z;AkGU7&y89q1h
z70_S*_ZYSdeZy*hIX)tlr&?V)D%>x1AL*jB$Ew`%v>oy~`f}^$TnEqUwK;cyR$*G^
zf<0}#hy8vTUWVB}gmEzGG*XAOOLwDjqmoN72RH}rP9NU41NttMuImw%BA7xtfYc%e
z=8Rv>);a56V5rHnD*xPHfdmus)d`d6u0uM3zAyqZI>7}s3pxV4VJ?+wv-c0Q(83!B
zFAQYR+NbY}egsp{8c!f<WE%u%31Gn&(tkOLv3+JFJcJrX;wvl8JLK0~erJ>}nkxW9
zkyh%)cv_)>XcYY83_Qo-F>oA=s0E0d@rJE($}YXns@-(c)D;2{wNp@j6~!*%(~RgL
zKsc8}%1JGJkI!I*qRX^~Gn)h&8V@r<ZBF)m2i_50)N_l6SEQMDt~g;(QMsn>c|A!c
zd${2%(yNmvFsF_F(92*{n(O3oJ3{;)uVGWhcyVWWTiPBtthRwV`HBdAA!p6&>tO2B
zoM$Z@HE7jd%LnOV$eeRbhBEn%581s3^yBn0Ot}>TwWvB@!Y}^ynnK0&;O*W0(b03y
zgXW#{usE^^O8cbYqH#=I)$tUoL#TT{ECokekOHlyMzJc(7HB8Jh8VcD{LqU7E^`{U
zsq*E<vSr^&dr^HJawtwGly}puS5O!kBiaHB_8aaMij!Y1;%_BEnfL*p(6PQXL``Dx
zB;~!*U@0d};!RvQu&*r_i#P--Yh($;MOo>mB4g>@&*#hXjITbOCuwc;yHa})-qc}e
ze|YOMM=4`BxzH|JV{1UG;he$EI~~HZbWkdFtFWi>Jo<kxfuMlGZ^pV8Mx@MY+|Rk}
z6V=_4T_!r}3G9QCz-^S^kR167%V`>La!Hrh2T-f5yra?t(*&j}1W@SUjuPKW+4v(*
z%u)H%wl?<s5riN33lxMGu5e%=y6l23hb?)QJNxy#^tr^V-piX^l2k3VrFals)f1Q>
z#NX&`xHDN-Y@~bM*z9rnzu@q`1Gg{S##%STgo+&HZ3TWvkT$@p&vad7HQ`h3-D=Ed
zGp))TjF#cd@xL0VR+bYR%SPMYZq$lX57+(I#mv~r=2`Q;+R_2n_PlDJ=$Ms0tgrK%
zM8W2j2TQ2~yx2~_A)UO3?>%=GEzVu<i&CB&I^_NOu^s;EJ<Q|fP<T=wUpe2G>HVD%
zV0G*rEO%CwQ8Z+{-Eb=koj=+^u9Z@cKHuhj+41AYGk&#})c%vAOw%3Y!W~P}!5!GD
z8@YNB=*r&Wn$rSqbb!OIyaE8iQqjhCsB2)qc@@<y!fJhK;OjoZcy9#h_;2X~_71-K
za{K;)y<2u;G)7%-cArnL$EDU%Ck8$=BK)v@SJ*EY^lcjeLD)R%;}|uH41x0Vqe{;Y
z>|m8`1r?VGt;q7)D7{W&PLkGRd6334XLOThP2z%Z;E^<HZ}-&*TJYUGbvITAu$#PA
zA#;aKFu<<JN#xP75F1-#@a*ePzLHd0Zzx;V_Aafl&3rKE7?QG63y-&Yz!|mEkllT@
zH&G)Wji@%ZMJ)^`?DuU~@x8~cFso2{i?zh5_hP3=ur_DZP?_Ey6RZf>3($8YE3V?E
z@Nd2SxIz>`j`Q7$5>P#1Bm*|WLhPo@nzn8*WbV$^y%D)m?@4n3!Vpn)lSAJ<qScvn
zi@i~!w`Gi#Ga(O@9iIx()!sJ(KePUitCkZ?J0b<))3IgBYT^09Wwas0Mz!?H`)9w{
z#kMtNcqaq0G6P6+CIS^h4tQvGNdx$ux9Odhz9rq%vNK?G=lo>vZ#3ds#5wlVi|2I8
zn3aZ<)cD~0_inN&DePC8XIS%N!X{m9)vTG~Lx<*5=tZIIz_CuIb06G>HQw#`%_!5C
zEN}fSWOoGPrWW=b*pjaZCL&tIqhlQM)~dX8af!?Hqi=cBOTAzyvb1;VOxbXZw@Y0G
zSVCZK1Fzb`W_tj@@uiI;i_M9&iR(2pFy9!p;(o|*Z(DSFO3J66urTqj7tX!8X5Q<V
zAg6-e_tiF9u53QJY3-pyZZkDu^ien(fiO2jv|N+M(%FTMtTyj#v)=CW?RgitcO<+n
z*HcAv+3^u>G5#7?pRML$dw4^Cdg3X3LfVdwGV0d1BCdf$^XnY-xlooJ?ZE6|zp1*a
zj>fm&9}<MmEt$+b1qB+&xKGZB7koVH!dw`%*0QP5K2743nnJ*qC3k#*xL=v=&ydlw
zzR1_LRZQ)CTz{IJS$J?$Mdgmk0W+(x>4_9M<FL7_qvft)7IqASy3RnbQ-BLG0K=?_
z?lL;fgjJRYW_%y#3~mKMX`UnW(y1gndxeaa$Yb#{pPRku+@AAXF@u`tFC06H#5y})
z4hlLo;k9b1?ve}sF5#u<7le6ZmS0e&eD)?FU6*N)5UqwGu%?}_Uv9c8FD2yy^PIfq
zT<JgFU{ce6Nq?r}$&1zAM$uQnvobYfIaR98Sax{PN|u_dTc8-jk}<>r3*Y#@^*jEb
zt!#D`-8E3<oj+@@Zn8N3II}x2yr0OJAI->Mi{A|{VH}NDsiA$=BhJ=SzoLsqA79w>
zkbpdUm~_!|C~iIEbH(;gA&6Lqzj-T%Icz&L{MLTz^hD%y$aK2$l1C3Za}ueK9iGQU
zbM$W>G3*<$j8o2X$+TVn&_q_0n)HG?UC=29%Lsf$y}%4C@oeAD-`XWMB@}>OA^mWF
z&eL>zPfzZ;l$3R;)8y{x`I^*$K$+9leC_;4H&Oi9>W<;z{>@T)C>xK@>Gb+ZbM}`A
zfA+ETXNuU;2K5=wVl3G<ydh05T<VBVF}ASenWD{Dp;xSTJL!I6N8dm!)c*4ZQP%Sv
zex6^pNE_vradw3U2XBl_Cs}rj3e&g+U%ou;Ffee#T3?*y3N$b?6QLE#!`dTT>1$Ew
z+mfI5%Wc}9pDbqz_DsR)#@S$PRF~g&p3*q3lXz;6S*j|=m|=TrH}^44pAp}(>megu
zs>Lh<_jk!5+p{*G$+v2CDp?Zjp1?w=y1RwL$^JW)<%4v^YM-uWwx=40^Dckg&b-6F
z@kQ*4$UCjs3=W96mC7p+ep%(xDooh;chVUZpMaMxRr4@W`7gbS)9+!5Lj!B^F_bz*
z=N|i#M63(ld%Rf8Z*yl(g%y3<y2_&YJDcg(bHm%KUBlX+xK<UrR<e64RVHp?$Nak4
zG#`pb?@`L9&|KN3=&?iza?{ifvh3P*vMR1s*mCAZdY*4|_RQ5gvQ}lUdJ-yLpXNHI
zbvL_aSxD^E!#2sd&E97CYJ`P|d@YwVIen&=8#vRPB~F%Sj+Gd*?j3P%@8v7Ipa<w(
zqE|yNctn74z@+5`z`X)KRit;5p&aReSmc$eS8DBYmjS!l{%dIVmy#3OG}{`PB0!MT
ztc*P@=^oFRZ*93%E9akB^?l%sRaWGVZv)pDabkkR$~N#YB{KmgCb&ITar6ylE^?)I
z5|&L5+$z*uWq0me*W8yc91)6VZPks*U}-_w{f=eesfs3b?i{?Kf!pOB5b*WU7PX63
z+9BF^#W_7;{@j%LuQ%m1WG-pU)`V3$^nTo<(SAKwz^rG`%1pP~gyPk<i%uDQ;M_eQ
z<=nxH!lJLdbN3N1d^@vl^i$JR$L!lOC)?8rvf2%l;9S`vwuJwC<=%tsR&kswS#3j<
zM~_w-<(8AV{3ez&@3zkk89Sp$)!=#W3lM~?W&4*^JVs}n4<5QemO?8sd&daI3h+lk
z$xsVm?DGd=&Xp|hHAx~7s#yl{k<+!JhJ8&jU;K3RV0XKG&xLiuYFU+|a9Bq4fM0wC
zbQjsGK81N8wR6ie0VM9U7L)N00K0s-7;SF+%TF{DE{$)qe@}v+OOPx&(xuFYQ7jQK
zU0tc--(IPD<()TU=K1D;`S^&GJ5}83O76#uf1}pS=kIukKo;3guq8TPvJ^Wa31(3H
z89RJA=8o)q#<SLb{|kxz*r8kYQ(>#|1AcODr7qva&GHX5_4oxwsIjR2W#7l`vR)_z
zezziVi{x;X&B-b3`5Y`efcrMln-)n}ABcU2@t&~`9%^ID)l!Y(T)opfTA~y4wk6E_
zJtVT$`2YzCTA3zK&G1Hi$nas0yo_S|z4cU}@uSMbf)4x4Z1}<6jw{$a@6Hay9WLx)
zHuUYW(h(DU{22GQ??FiAW#$+5Dbe;jdghlMYvc>=eajw;h|Vc|E9a9Jw@(aP(&}zm
z@|rAd<(ydlukH4x;zDNA9M$-K={vlJxA#FenU!T&)N|BEBca_43k7JOIcH1KYawBU
zBrNEIJ^;~1kF|!j1hDCB=h_F+V=n|WC^v3YObtX^bv!xM+x{fCic;anqHkkY7S6A$
zqPSM6IQ4SB-i(OX;9R}f!5vuXH}`n`)ZC=JpPFr~j^!M&;%m<((WBB0uNxc5-#iM&
ziU^6FqcmU2ZpU!j07|c-b1%d4s7tqFrpCU!$jR)f*KeYxKBVNfGhF`Nu~$dofkU6L
z$>e?9j?a3P4t3P#?KbvbN9mO<0W+bY8wNt9dUJJsX=7!q9F0y}*?<eNt>@0*6OJ!U
zz3;`VzMkj2HJ>oPKZ??}U9u{Uzug7lyh$6@DuwQH$7=icn{eQx(E=)TYNCUKMAg66
zCBaAADfZn?Y?b2nu*bzHPFaQ1U{(*et}Ku;_c)L&#+WQDFXmiMgm~p=2gl3$Xs@GB
zo)k4>O+xTf;X!ybB1U{_;7BjUe&07{PNK$_xW71>Nw3{r3A=66JR|V$U_*KhA4Dnt
z>i4&&Mze>A_(X1rn7aSVO7^%4oi(sBTCP&n#>_j=)=|CNHP$C!fOJ9+fx`gm)s>L&
zHBH9?XJ63PPcO^#X;+bO@exjwljF1`#Kt=7y`667%rw?a6*8DJB`EwP#~5DMZabpU
z?I_{g?I>D2TBOiXChOI$=;t_&_M6Pt3<duKX4r0+|CaI>zr>GzI(I`#S-S%^k`kbA
ztzvCA_B^`qDTvz)nTaA&ut+KLq<lZIW}PyOS-ZLzfaPF<QE$%JyVfxy!Vn7h!tfaL
z%V(x?H1Wm<m$nb&maDy=7YDP8JG^~gOaDUXFIY>oJcN^#(;&EeFilc3V7x&f;pI8e
z_qB@Zz4h)w)?)?5uK9B)AJghCKc}|x%F0QP+_m*xe%(_yO0Zey8?Ca=PsJNQ@UJ=K
zi-{d*DyL2K4qfndov)@;d{b$_&J^RnnQt_kc{zhuPPKd@ucLEUwLeHpO=PB)dS}?;
zS>ooFzvTC+%gBuD9XhnS6@+A(Is(I-8a*${W!N-yO+LovGaiVkPTm)r8+N1zen=YY
z<QCaFX<Tkl94la{cRCid1zsp<8>iShdW?n6Ta^-Kq<3q3ahk2U&O*JG4&SLh?S3O0
zoW?uBGina|IQImK>1GoCmxA}1jlG(Qb)LKz?tGPcTJ(@}%KaG5L$#x9AwTxbY|6!E
z7c=hAHp&5(hgm#fkbcR?E}eerTdrw(WB9S{JA?-?F%EyXsP?jB(Z!Wzo2!J8r|?qh
zESyExbYPg7F3B=&k9Y{k|Gq9xy6DD%jEOEI0o2v2vc>XNiAY<LMk2vOif8#nNx_f0
zSXuLwmbkd$U&~wBR`ney*8HxA0_jqkIaXUGX0oMaHKuDyDBnt2r-ot!^U8hvRCbj*
za#mQ4tKh4|u~^q@LIf2%?kjI)rOpN<Ui-mt(Rn<htH0+=anoGHK+_ld8HQ)EShFjo
zsi(YJJ)T;9IFTJV_3_hv&K{jldjeIJHw|aO;M{;#+vd_cv_8EJC-M7pcf8vRWCP*L
zmz8wv4Ck^H_4-u!$J~xm{>0AlCV}>&z4PY*zQ5PWZt7)a6I_+f!`1PU-F5|SjG}&~
zmFYxj1!bpoF2Q!J2pK!!G%^+MJ^l3~*izo5SKOWvSaI3)fVthqqob6yBR*onX+vjj
z4`tC*oIcm9`q{nmj-9GjgrDo^OC8eatt))u>XNrBcw{vHXd6AES%VzC&6xrbop65p
zSq(qla3|KgBbjFA<W61Z?Zb6zt$eY%hw6`Pc9|NGaHem5`lvUoc|W{2;2UydF0!GH
zTD@94&m<9Bt%aLB8m;JI=+g4x0%#cj$`)0P1-kB?8?7_o5?K7hi35@{<id;gJgc}c
z(m$@MCqYD`p2xkrz1w6J9lHLCjhwtOVl^zml;!tAksvcXM-+abqVOyC97$N*C7Ltb
z=FNDv&Z(o5|A+5;%|UaxS2QkKIko2zAbfPgzV3GrX=rnz%O$1U8gx%tv01g>ymQ-)
zs?PDXtDRZT+1;5k+8ZU$6m<o>mc?@$0bizfLjy4;^lz;aPBn!GD!VTG!YUolRa9#w
z`b<x$poVYR3-k_ZlzxKfcvw|-Dyn)AvHFF%Lmb<04?XabaZI{`(DTc7e?2(^D0CQ*
zg%Z>5&oZUPu<QuR`3t231B@a@C1@(*9L|@1%n^EI!P{0>mGccp1MN2+VbQzpvz@}^
zLj4&g{o;j1W>sYVL@~0LSyf?CiJz18lp=dJ)^)!myf;p<TdG{C=5to3L#RflGYB<#
zX2hqX+)Kq-7gGswL~&%0k3M(M_akge-=<Yo(JU=yiT4wuZNv5Gm%}S5t$cbY$8VKw
zAC21Rp$yxO=UysKwyiE^0}T`56V8onl;Uhj$5hQYH}BD-W9yAfY(<0>&X+O<C+JgS
zcW!@=b;sD)k8F)r+E;4(>U9$Qdu~`MRV3cy0C{rDr9O}KE{}N=*1E?Xu4-mab>QF5
zsBOIi&8}XZAX8>XJo<rH_!98U)P?D8`*yp8p-M+EePSa+x3+?LesD8*t_tu%4GyjC
z=O}`9jqqaF;(?&V%t?on6&A!Ae7798MhXAzWTA6xK&bHL;0mEsf%b8&n{kp}!l`w|
zTszeKp`piIZx;A>H4y`l`JRb1Z%X-5m5!;Gj@Y3u4GIT3DW9?rjK_%u3_8I_ZDK7i
zJ4>kN5N2*apB#z2Re&#-u;O->xJ9>o*4upY#&~x+EhI$b3O8S-e$N=a*EK@Asi@7;
z%BDkU#`{AiW3+6~8NvW7pkYV=JAWU`9Q#LQ`Yp@*!^j@W0lVnz_Bld!w|A|g3%B#|
z1SjG?9fX!XMc>u?Z9tgd#~LsChwI-eI2dple#D!O3!iFFzF+2C9b_@pGn>-zE&iZI
z#fu&bUr!ikvaregHu2WbNCTxk^|sQ~<ePBk+L4jbk0!0{r{r=e(rMYnNAb=SuUH>5
z7ft~E>A*(z*9Z&BF>Gvwx<}C~wXew*&2A4&Y%#UbQ6N7na>^&39GT8mVv-TuCmPBZ
zt_H&=z0SSv69#3wMYgyKm}R1h)8o&bMW*|)0fC(NmN+A;fK@2;P2P5V-gW>mH!XFb
zQVmh7lSnt9SnJjuCMP;Sj23i%O#>4;t*Ma$ier@~DeUJE5^=#`_Cv>D+UDRLi9nCl
z#ClfsecK2fi5hXL$x`W_m^}#__Ul$)^jOcI@e>0N%||~jE*W5|*iAPyYn0kfkq&xM
zC*Sr0WXtu*YqG4USC6GOvN{`CB^C54>sg7g4MtWJz57LRFq6(0X}JkAd|+!aas5Mh
zw186PYT-2fv4_*4Kq>hH5g%`<FtjJU+$J%QLl8T5rB)~3L}94-4tI}SReM>JVRU-O
zxLP8e)yqATFg`z#B#SDlQ*=@}|9GZ%M|3!LX7);lU-Wo;elsquDep<RhHX>1{M*mj
zofr2>1iHYFXcWJa7|Xvc>Qgps$mI|UjOXo?DsS0SC!D7)4R3{;Q(jr3BCX}#G`Ls5
z+XhDSv)8g^1Dm3!UR9>NAWqJeRUW%+21I1Idbe|^MwgQwXT)NJ>XjjVPJoRQ66<C>
z%*-ies|NV#W<!xyR2;s;u|0y6j<5xfODS~V4mFg{KS>cvCLMGRL^>YrhrMSf&X1-~
z_5S0vV0?gWIRrpD<H2TvqBoYvlp|Z^WWOC7i-tP;&J6qnRhjy(3(UrI+YK4S$Xl2)
zRfAIZ7A^dDbk<m$NBEfKm8vnz$)ogw=@WDXjYfXQ&d2_q_1NkxI(WS9Y-O{Y&osaL
z?Dzc2)Z!fxY29%v-oi`YBOkj2ekwhAp>!;2FMZ10j5YgMS|@zHkr;O<atg0LJ2=I8
zH>>;TK&S?M9x+&+sL$OXx^*gWI^vc?9nyqfRZi-3L&LgJmQ**_`Q1i*L@Yy+_@J<B
z0#zwC`}ywt2fr%!w`jkswL*%V`@Z;NKDR5POJA$^mNoI8pXIO_&h)Tu3iG=wH1mTQ
zy|Cc2x5P20GyfM|e;E~JxcvdcbV*33(kWdM(mg{C-5@2>t#qdX$}n_@3^*V#NJuwI
zqXS5Xba&@_d(L{-bN<g-&$rP}tb1R3?_ca|Uu^=Wu+W>m@31!aD4C0c4A-7bFY&+c
z?Sq1jq|9s2MZkBLKH&M&7``;Y;VB=3%%-(VY;g~_h+&OI=l=3K2DyVx@7vl3-k)Kt
z4oSo3ZlkxZ1$#1=z%`h8(n+JG9FMkYr8wg0&M4fyL4o$#yEX=i%k+@9hp8de4~1^C
zZG#JeL0M;QA<#OPfC6(EBRP2nBOr$$Ha9~v4$XbH?YBY#7F?*sn>zjon1s&Bx{b*`
z=@!1#&oH*4G1~p;bOtQXJ2qB<t+Ij#3;rW^%i%i*t*tRP6NX*is_Yju;y%^l8aoO&
z-#bXwu{xLi|BIxBiJufS02;=q3Gmf*zSe*u(W49Z@U*~>`+8ys0r!E{oL6BtdfZYs
z0!D(RDSO#Lqt$akylodg`~Eisj*Dx_a%K^Mu9;)A^KL)QpEK^+nsI5)HV>fO1k|SM
zH7Y`!*NV5!?FLWs1oQmU+}_qjRfKHIb&Y2zA(Te4TYOFKtdC3aCz3NW8w%9aNK7^d
zCqEY7-8>9B4ufi1T4dZ2tv`WVvu-D)=DUX<SjFxBSkS*%HqDU`8Fnn)m~A<0=G{w^
zsdqoop8Y1X_~bLg^*VCcv}Nv({lPaa>6FAVOWfqC0JX>@)Whh)+i(@X66-nFIkpG;
zw0NOmt#|t+%?LVMrawJT?GhceUXmG;+o6lmNz=TXoO;H^l~}|TpIF4y%Gw%``RQUI
zX+!QHV1pPlGE!Lms%=AZR4`zFXii$B=;S2#<j=qXIdwrtpvH5z#VDB{>&V)Z$h-i;
zxh~-)a$_cAX8p{s(Ut-4hoXF<K@8RtmfMTD%?62{&dfYz*qdO_jQsCKMIR;YPfi}u
z@WR8;ik<A4cv%SaguLS4CB{VUXytzM|2fk7=kk2^OjpA5q_)m4rB7h-Z$U|N1iYE(
zd!Yv-(Tk(Yl}urO3>Yxj2KS-<R?x2p>MkhJ%1@-#Z#PQBk@qqwvvP8NU29ny_sNnL
z=BV6LM_;QM;MIBVFevCS&ed{rz4Hbh_8>iQb$P@uw3MJM6tqWbMwlqhNq2ubnsM{2
zO8U}rPaFwdKEskbSm&YiyS>G(e@O2B!2koUD#gJqEdKp4<}|O|5iMz;dllV4`)WM#
z_YKyGM&CDbg)Q%^HQ}o>YkG!a7N%Bl#_36FmW?KU@7=Riv*L#FG>=IKr2@QsM^XvO
zPY4OL#BfA9fgoJH?TV{7_m}NH1ksP1`ZOd%L4R8ueh=}|rI6IbtS5n}9?uhr9<Oa6
ze*_HsjGhEQtN3ebYhf+$ii#cn51U5hT$a^cG#VPTTmn^*+ht$A_NbUkQ)EDkzI>rc
zGOmb=v6IMUNm`;Z9+@jrq4ewHu2g>MD8xdJN=?fl8C&73KKLR@zfF;0`Mx2S&OT%O
zQ~kcb?)LsxOkNO)ZPjo5+&aIAJSQxRD2KzOK{a^@{_R>*mI<M=JN7ZS+*IwgqM2+<
zkq_lQiot>5!3<f}Y_Q9()hk&=F}0wn1ade1JYwjbo?q7#?RKO2n1X6}4z8l2a_rOB
zYv?3LW8T>PLyS=S9v|=hp!`d3sjn4zN8KbjnU9R`>8J(-bkx}b84q>RuWb<{y2D09
zUV4=1hQ#1T30@-k)wMyw@We3jr$MV9+%dtu=sGEKM-rGt!wL6FDp)1O9%0udvz-uW
zodTmhotxkHzH-FitL3C_2tWV7ALS>!&+kfc_1?`77kaSMub*!C#LL{{3s;Uf{JybJ
zk#mO4TcAU&vOb3wKcXQVuD0e?K3%(6T`(yzARdE=qk+&$AH^i=duKylSW{-^KS1E!
zr{u+%Dd9t!7}M3CfJl;{Sfgk~;a}SDH2ZC{J$LQq=8nH@@~4-3<mTLqSWoY*U>00%
z-|jFcC|_tL*ngrX@@853?)V-b0{KS!!oZT99X{1$C-AjuPX41Pw$q4ZM@f{^5{)U|
zMKl2x+=!XG25&;Fj@OLwX&TzWFXcBly~|Ts;6p+!$7EFW99_xkEuDe57p$bX_~p*X
zUBl86(S<H8#`4MIYzT+3WTb-w-bWY<QzKS{_gV%4={<B@bXUd~i(})--^Wmn25@(d
zR|ZcLSm3%u2$>Bt9%(YBkJUHqPz=>>zpH*!D$vX#^Nhs7!QuFX-}V7d9R^=%@uBfI
z#qJW)joocwp&0ZS?CXnt|NdF%tyj&Io!Qrl3YSWF-J#O`5k!DDBy|~C`xZOM3~8$!
zKrX549CrP7wBCUMR<F=4%YfqV@LoRrOPI=+Blala{QL=BxAAjcvG0;UM)rR7hsX%W
z>JaNmJ*0_enAJVp+c_pq?oh<RgO7S`xv7Cf4L+LCpz;fDqJQP;E%vL=Zhy!xgw)G~
zd@JLDQ?sR=2zt+}yxXq<N`;~!f(tB4Df|4a*e738_E$+)7&JhzUx6%3u}rfD$Nl}u
zZ9sX&X&+t-Y5%qcc?D~!Ysp2Q_DQRYhmxZ{AM|<9kD+Pul`{Q!g%>Q|#)UB^^*pNW
z&wkjemcd2KHYqVK_-1RD-he!?(XT{ZYuFhJwB_{B@p!XpF_tfGw2NOJNB^1Hu0-I|
zjJx7^^(y5zs$wr|Tpkx#CiM0AHUwRDY;Fo!cr_;cTE!@d&ZT2pn`9BHQh4id_C=rV
z*2QJVbLo&Yx5*}@uoy%9mRq<LgVdQ456tKE3mWcRSPSihB%aPnzI}Nzf;r{kk8a$u
zl37!`h2;FyEE?4a_K0?5=BU6@ahUk-2e+!P`I%i2SKU2FYMU_q<?B~P6_uE8&A_@b
zv;^*~Lp%-TH^F7Mfy|f)UvpJeDt-&kA46I6=^X}Om%m<G!@ai|XmRkCnp)aM3o*x=
zu~AIi(+y;86z&VX+kC4aj1rQfn$x9w*4F{BP%%56%D0wncA5o+uLGjtl?tEUGz54A
z%en=YpEDlymkv4aJfR(1vDv!tq2hhBTm9g(9wriSH}QS3M(<&BHbC&drFg+j<~$|r
zUGNdyIQYtAq_X|~{z6UB=<DopNPvvo_qq^OuH_3qEP71;7UHZ4LL9Lyk#Rltz)=SH
z3D$FNOvE4-&2|gj+sbQiTBcFAJc}@{TJ5RzZ>s3p88zx*^>-|kHat?APE7OLE;tIk
z5}}D#eX9E?`<3shuBS~)g6WI={+T8DS@B32kIpe<f#6}k{O7)TV7Ehxp^nR;j-YiO
z8I+jz+p0=}@}!l}?<a#9^ouy4F_bX!CY<z-n_To~ajOQhRN{;&$P~82Qnm&9Hv*{9
z#OIc4s^fv}R14j>sUdGH<<jL?9j-{SZyz#^Sr@Gq3vZ=L*c$DR@5*0en{4fFC+Fd6
zF41y0w3bk8QAaqxF~e5WA0+*#xQ`OX0pBe@`pdxE&3=J5ho|ijmEU8lQ#KEuq}Yed
zh7&5osXn)q!HCKs*l=LGg+%Zz@BItcs5I?r^*%0`hYQU)TNC)?_~b)=R?O);O?w9i
zX6w*Aq6i+IkL^ZT$l8{OgEn&kj4{Oo<%5o&i~_-VVRPe{U_KH?C-Q@XVmoOPWXPRs
z-jv^lPdx*yOb?#5KO`3T+;II(z;^Q3J~7xMGgHtc@K?uDL<g#;p_Z8b(D(P%i$Crb
z{T9VwqaC5|&L*$J&EnK#UYUScbU_D4+h_C#4U9w)MR#olcRtN8Jd7jZSfGNfi@Az8
z#{Im32gm*E@_>W($+N8+O%-G85(b#Jm&uG*;c0(qe&zU^5^L^<;c246A4(*KG8c*u
z=JTYPs&vGmJ;Q}5h@1#j1WkL&^MZKI=C=b8+7vmX#R}TSj*or^v2)$!q5pc3QAe1#
z-u#ddoI>R7rrcJlcv^E4h@RU-$2936=2Q4_&;YIE#FS0$<e1mq>h>uub(`LgBmGgX
zIXI`Rk$(mUBkeo;&(BkXFa5-C6IgD(wi{Hgl7C)mKch^SXp3zwSFpx^z&e@Of|Zmk
z=+DeFIjxnE#Yy(tn}XCq`hWQ<_+P^R`tM5nJ%PDbdlp-vF1_Ed8FYwLlP&Zc_VFN;
zS|ckyDxJnQ3q-*a8pYyA5ifNO%uGm3|MJCbPy0DXFg3}P7E^I*o4?$tjPg9hSMybs
zd|6XYnr7G=?rg8h&VqXOShd4|^e1P4b9hnn`14PA3r8`B@A#tCG|}gZj??!calaTW
zNSx!B)ru*EOlE31(_^KlrQR&1)=>}Tk$bJrXwl^4#e7bZ1{SZ-H-de9d_Lsmy?^(P
zkfTW(359<An4HGBC+IdKg`-(lOSL{A@Epu`a^ElKw?_gtA2Yr7e#n?=!vX~zjX;1V
zomENuNXV^RCa8&zmq`1(d((?G=dShFL1QQqDf7F+mb(#*dv{~#-zLSXW;+|9g!~p@
ze^>0QaaXKV$F}P~Q`Kq#x5S2pN_lP1l!{$1NICAI5rdn5vK&@-Z&Ebz2(BTaN!_Sq
zO!#SYK{sl@dh@{ZdR`~2bSx~=ztqR)_kqa3usrL4mh}o1`j20C2dsO`I(_~oJr?lk
z$+Oh{Sjl0sSV>FsaE7>EqC)6g@qR1@+u6)JjH(K*!-dKsx8pr?EYIzG&Zx4+RbhvY
z)92@xu7_jkl6@_=tVt`S=H*RbIfVg@ZT^YKabLWoB~JR*ej9FuF(~<r`uAH++Mg*>
zr?M@Raspi_@8@@IgAL8lD(yNP67gVVFxaD1xyZbvq9TbgbSko;VO%vCbs}zzoWEqy
zwjhbH^dz=;Ik-e+jh+$>dc$tm$=OJ!XDark(q+!&wYwMb)>{WIL{rS>IE(tD?No^G
zj(C3}#Zqlyej_-~L$ymplvIdzO}(!|C0M(TEK`+K5dK9jX~h^g%j1@21Hj5Fc8YG!
zHasgY0uwsE4pialODuNEPDvIu$<2NN*#ebA#KySReT<L{u-jL2)Vd{dzLddph?&aB
zUFh)9d%N!$uyis1jP*5UPEOpctSogf*sf@2S&r&sn!b&_FS>roS7sYv^*vqbE0-O<
zpocs5kjv7l5Fq5rZkjradXqyHQ*ET$vb%vxV#dVai7%Ir>8X0#bA(s+Bzarau%#Lo
zpMNb@(8B8XuP`~1x7iZ#Sw}p9Y2SOZNUPD!*}rz~DVaBy&h2fga5+?b*qA=#Oxy`D
zHUW8`lDs6nk-m#VMRON)v+{nM&#!sb0l|PjygBB^0d0u^P3@)w5-8XFe~wQiaC`s^
zx_EaQ5EOu3B3~6ZM<_}>V5sT&+vV<&`nO94)5-NmBfsg}g`RUOXbOdna?I(gA;t!9
zbhjJz!i#0YKK%-yCb;t-tW!%paKAc#Lh!1I_Uh>lwhhpuB**PQPf8}KzDdY78e<0_
zrYxoK5ma`j6a|G}cBj;c^nxSdan^PKyZDmm6+Dg5Aw`Bfo>K`xw8gd#&V(vmm1b6H
zSC{A%+#~Dj_bn2XpQq%e=$CG@3JNCoq70=$qtjE%x#kSHMc^eebN+CYGB#JbQMZm!
z)SU44t!oeHLsnKywppj!Ha$bkYRl_ls?W5D@UgBywpD`~6WN3&%@rRP(hU9Xa0JcI
z6kRlZ!vI7(%F>MRK*BqNszas;ty1qQbsfg~tcvEmO{ih@S?@%lro`A1X9|<+yj`^A
zPuC^Jyx4C8W`DGrCi@8KQ!HY$^f44a9_#5DK9kEZGcY!O)(q~K0q`hyY(aj0^7yy`
zhj$Ljt$1pRZFkCxZso_Fc1NvMrKgtGe3nw|(4F)Hg};RpH#&qAc07U_nKm7;b)HQp
zB@I|a3eV0zNs&3mi)}q2PQ1O90(w(W2f2dob*|oSTjT7!BE!-6n9j>ily$QhFQtk$
z>Ma;1EC_N(^;?I=^gc80{?QMgFDS3+22KUVr1ab0rdQcMCNr%z&i~VKpumB^1#8?4
zeU(3xnn%wJ+`b6vo-gzW2ilB`Px^icwKH{?fp0p$gA6<?BTW9!T7iKD96W{O@Q#Dj
z=D$40QhXE~K;StZCYOjoJm42^Np;OA|980ccs4+&)VXcLarHwtl;ujh9P6U&_Uc<^
zvjM~Tsdce=$b=%rLkJr^iDN4q3yhy#()YbIFORL~Xf!1GOVmNP%bibAbL}qxr|?pD
zN2DC-2wRi*($dl0Yk|SWYAnCCSahWvhlC|0u#lagvO*|ZI=q9G<%zqO!*C?zVcd+u
zaNt5^a3}kA(9|=SBkI#I<`~W^5NQaaXbixd80cfUW<5dy&UM1ci@z+*Mw-C=z*WBq
z%QCWF5}i*9+J>HIM4b)?5>&mMdG#cbSCk%8fvVjj);PHBCQ}xEJq690)ni>m&lQDJ
z^$q&1;+mSI90Ht8O=**sllCD(i8_S_9BD!cG9|u2>gu9@Dx@Pnuu>~+#!UD?)u}?e
z<Px6Xg1G|)ejG~j?$La(gUY|sx0Gzhr6;0VV$^w&{3Hj)B@LG34G}~_YcJy%X>=K6
zTxqmj7vAN-VDT-%SIGk>=lf(xXrRW{99Lo(=LX^&ui_~>SlTR)5|&sv{(~L)+hxSo
z`63E#Nt)?xGSF-5{4)Xqv=vTX_TM*iPr?!95kD}VW4<ShOne&lA}TtKJoT+#<uCSa
zBn=Q~#dUa=D_YvOa)T`%F&lop#HlnNX!xs74+<36bf363@e-r7R;73zrZXePx^iwP
zJA89)Lvv_eu`ls7fT^Fw%G?2eR)MPCtq6H)U?3qxn>cQ_p`_^hsa)a$Y7#2|aWtzg
zBc{5=58p@SB<@23FpUH}e`!5zDcq(FO-5Oe5YY->0El!nz38u$RFch0Z%Rr^!|xFg
z+a*1sM9{Mj=Ad8SaL~CY4h_RmQ@K*B&_AE+p9WZDxK=T};HKvW@OmV)qgHoQNNcFv
z&g&K@z*&q%q%5-;+5}e0ZUEnrVVi988Greze2?9TC+mgX_Y9#L{E@==1&e3DPVBP?
z+J+@QB@=Ji%I3@E)rlOWXL9fFBv}djHT+T=+HVBUboI@vc7-b{DpU*&DgP66jG{8V
zTPTzQ*g~Vklm5+(Mf2<sucJt%S-}t2Ac!d=A$jEXxdg8pqe-B53Tf1*R<pnMY<$@=
zDcvYs-e)I!0E1AITGK79!~n;INEBO!vqy|_e^#x#9wkX=(w5|1L)Jd)Lc!#@<KXku
zFn=+d0f0ru!JpuQfHTyFtd&O7r#ZjQDGyydamS&f#G>?Yr;ny6f8deUsM%d-Sy{dq
z+TtekFT%TLS(W0qBfZ8k-tuSmKL|rpiTJ@qEUx19g%+f!(<iV-AQ@X!_?gST!&d;a
z9LuENGJB`23T4@(E4j(NvK*lPJwN%>N1w74UQl)l3w=WmoG3SESQ_Qg-RR?{4L+Rk
ztY%+J#xSQSS=KAgtSa1ks}REjy#(ce4CNx@iqD^aax89aP(P2%(TaPDk36K}aoN^0
z&`WW7o<^Ew+Rd>zIgbrRv1FQ<=|$xVGwtys4Jb2#GvdG?*Bsjj{tVqmf!6tnjDRAW
zXx)V)^PyX`{0o6szjMRig79~@!s`TQ#0lMoa@_9G4&Cf8aI3f2)jv8g@o<x)AHDS?
z&`|SK<Ua<N=^7g^zB(jt1RH+7ECV<Pmux3cDS;)+AREy4(o(0TWfjib!|p)wLybz!
zMx)>1e8k`bMw7Oy?VUHvM?Zz!jtzz~ug~02w>DhOmMyX;<sPZK<Uee;Fb&)y7^6%$
za0w-NL&7ohv(GasC&#*nxb^qTn4XpUza5FXN%=wvgAC=%It30=AJWLi!CPxp-%Zbu
zaRE^d>PA&!X#xQUq=%LNgqt2#hA~#vo>SLQo<}apH-9P?+1sg28YicC4QHgSwXcLw
z#XT5>A~v7FpX%TA@<tY@kp}-UY%<;CZf(qHRLjZ{J;efb>3m{aerG|&MJz%M&~72j
zvQ_@!i-p7&DMX4Ci*MO|%0IfKqw$@=$cl%NMyIg+Jhl$VNi4HYzgiEo4iOTHBL_Eq
zM_F{~-AfaORX`*VuXhWX^a}~~6xyB03Cq6PJ`{Tmwe@)NWPY@+_SCzs?o7}voB5@k
z{s93<1^+wd&x%Uc=7#I~d{lEq*GKQUcTg6|_7cMmgEF*|vV9bdcZMVWKFZTOql91|
z#bl~Pv1m-%%lRB(081PbCk9?7sPW<Y$f#5-O2RGa&?iu#>g>Q*=CYmnr3M-+tEa}@
z`FA$LE2O;W5=(=eocu#-YDXwXDyT!0TZ4f0^U39I4P~l2)xt-0-#aleYOVBkF%mD6
zz%UkL?g+@!?gJ^L=yTI>6N+8{I{9><a6k1lh}Mz3xelIjdXMu$FJ((*<3#3l2RRU{
zz>vcaf2^**jsGWJH$c2F{!hFZVTm38{-mbjXL)JOp#=gKM54vKWo?xLWZKDU9142g
zZ>(}sG%?_8;&WRYsv+>V{4Ue>H?es4vQ+Jy#?Bg<k|37RBGCa*r4JYWcN=Z}#C2*M
z2IYuF_thG%d)3~;QbP=0hgNty%h-7s25;-3mI%^-r33Z(dpBfTP)m%lUkV(<b-$^q
z7aS1P7S>dC|Fh<HY{*!xD$du}_Xf=ND5QT{!h6*NS$AfOhO8?zut;`a_)>;&Bj;i_
zE-7!u9kKROv@q(mwB^<?Vmr;?;9kBwYNWWUvPDAY;C!k_l*n;Ti`ed;qsyDL=EaWd
z-%k3522?eJ$r3>W`)}HYn_cMDj=&($lpH~}>Jg#_nhOVZMa3s2*-he?d{k6oJ^IP0
zN+YD067CGYZ52%0(E_qd2N2Qcyu!&D566#qhJDq%d)6G+Y&|0J3to$atH}A74A>&1
zY`Ikq)l%rEUGwDIH?BLo&ZEu#B}pDGjEt)_?K6OA@-e~982=AzVt}0!n#>qRAa-Wj
zb^yHVjn5J2@rG1*uqv}AtrPXEhW4xd2!w9Gm;jt-BpLyiHf2Phfm66`5bRNKb}TTf
zvPqx;HVjqBX=u{)RfxA$v_^=xj>$yocmxSmITB0PyEVAFi}Y{9x$vVaYCf$6WK)kL
z9TDp%O&r?Am#qs0qBff=Db%*}O)Fe{6|X3{+z7x)iAf%_B~5s2C|MPi-uR@HpS^?i
z685f%-6iXuB#A1JP(DbXOquTBK19?z;|BmLC{1_>1Iu(fP~TLM<9saie=7fa;%loa
z=TcNYwQ2}HlOjti9%2p@K-M}_v^#qsXnIQ*Al|SaKYj??fM%615Us7!q4#geYip?>
z404vCjRq`Ndk+%4d)faa&MaEmg}Mvx8R`PxKwMX+Sa^i?{vHPJf%uR{9%g=MmWa+C
z(g0f5ZTfY-;iJm2#!d2`A|QLr{O8kS0-ru)&ARH3G!Dny*+1^#)PWiy{@<LC!G(Ps
zSv<tN+i*5UFLA%7D+MAkfX{|=d*)GWc4v$aj-j~~wVxW&?KuoH^3O^fLB-Ov3C<z7
z4v~+$Nu)dHirGn>Vz^|J{xUj6<(m*%Z}Gxu+RADSz9-c92F~UJC{k-dZ6@m|k?Y<d
z`hcELr#qB|_smyhw|rP`IM{D0TQ=mnTS}@)iJfd-G;uNP3XZ<KjGCcn_ZS9gfxD-D
zj3j)=2{-sH<Id9QCG70t29vEkkKfB1C=x)9%Tpo2<)pl=X?>R27M@9sU~=yr3cXu8
z6%Xfh0$x7j4iuy}we;niUdk@k5;Uu7?1oJ;yqulN`1oX{w<;<*3J5MzSefck&JG`?
zEq4TJbMw`@F#9C;UK$iiXlDo3%x@tyGiy2{>sM4uun$e)6#>kvn=X`%&Lf)2{MoPK
zbi5sYId_&t{DmUjsCV%V{^+pQ8Nn%pF*W_+xPcxmGq3jn<3WXy`b?IMvyGzg{nR=2
z5AE!C01>$0GMS;$1&GCHBs`Dyf5Bi76)(HqK=CuQF`uy@ncaHr?%`qi&&l#Hr`iHO
z`2RIWhgq33HAq#oeYCze7FyES<%Of`w6jjC2rc#duo49KpzGk$KIS79qQsFVWh0XA
zmv{F1rAL9y;OKRSv6$Bt&Y5!7XNQ?@R7UuQOd8y-?+Z)B%$IH43FrJ{9%wJ<^C__v
zt`{d4eQ~|f%M}_K7rKc5uS~^N1T5bD#ZR#RtC6^vLQ{>kzE14==67oYD95~3$5)f^
zs~i8{vZzNbn5?99oDY#yX*ds=gvzBELUFH5i5@?uV_(c4;h0bJIo(GZcxG^{O|mkl
z*f{e6nl;@SES4t_Ov|gqVPaMk4p%u$c&4mqBx#>@)i=Z~Z|FBH6NQ2Wg7IPX<K{eF
zC}5|&f1W$%)eWxQ+Cb~CKlwWQD3->0bvB=C09D&M>umAv@oeKGYsE10#>JKppZ`VI
zDuCv4{E6*WypF7);y%8<?12!nwxaM~X~G3dKl?wW=><@l!ks&e-j`ZBH>52!D6<g-
ze7j24`pg-?8G$-Iu@-)n{nnY|o9jcI>y>}vK-wc{tngYREz_c%%yDbIFdAqdk~lra
zR9a+1-l!QfSjal$XSUg1pfG_!)w$S{i)iF`NnL5kl{CUfIa=Oj_1<&e7r5Vv?J#Od
zi=ZQbTZC(?o_)zKim$H~l914Pcs||dXt<Y}=--;^_Dx<sU+c*WmwV^+awRGvKh(H|
zgb~YczVY9`yLYF<m<6gD=H(HWG*{TzsRIyQ6N||08S}n=fyk^ic4a51@RG)WKzmI4
zIYYEg1Jv(>u*nR8kcnAgIK1(_E#kF@b1Dz7)?*ullPfdJ7)aO5D=hWYy%o;a3Gs&h
z=;>h+7XFB?@12X1U6qyb`9U>SQo&&YI!*%^)DK&r<O8y)$&4A%ji-9X0RWE;T9K!h
zSC4jsf$l((g6w-r-pzP<Fv&Md@DCvaO0Woq{(nrlJ&FHhLo~ds!xwk}t#agzEPreW
z4&cKm$0J48zlbNbiI}`~s2BdBy+1OPw8%W@PlbtCy&q~+XoU}cD1W!?p%`&dk7KhP
zh8BY!r>h<gh-&D#S)ZX1kb?Hia?yfD5E0#3y5sDy9kG%3H^^;4xLfv`6R%N0;A>Hc
zb}-@ek!@;rON#wUr@HLzHBedk0W;OE)JI)#B4TkpL)pY^=VhS~xy&0haqA}yzP?5;
zxIb*pJWd7nnsZlLw@+_h-c{5mHyghlA}{6jJiayTaWv$zbv8TVo053LEY*r$nAjxE
z+X~<0tI+R2(J7159#gPAQ<5h)*(TNRdwKb7j=*5@PdO26!MQID58U0|Jw1vA;;v+*
zqeEBfR{HhZ7SQDrls&%JpSNsC0N)nc4RFVxf$&lQx_X+FshTv|Zt(lJ8J#D~l+>JB
zDFD%s0Z57X{~;xfNCT{r(bJ%PD!881?3D!l>62Z@LQ=jil*HIy-s=&YwY7rigkx_9
zlduY!W43b`f!-~{PX|I@$UE5-9GQfUaVOjzHa@0Tpm2jw)1~im5eA7n)PlNA5h|Dc
zhS`IF5CJ6(_C`8>YlHN9at`*Z*U=;yoam`bej=K#PGOR{e){qKqB|`tpMja7{q{cL
zr&@={;2;ZcOit*cB!6sc;E9f?^=nI>O4Lib?c(xg5@0XxYjk*RSj4SB-)5$XMRjv5
zFeHY=lO=M3#1wg%rW1yW$G`&&KK(M!&J3eA;c0yWyJn|gW<ua4Os{<bWJ}WUGXIZc
zgog8f{xIwCb)t|+L5}KnXyI0)kMZH~^KxZCa)QD3H~yVnfWQHt4I9Ss0}jal=tw9-
zi46L`R_gJ^alSSD-xn9>-P7y<K0Y8bOA|wZ<6dKnz|*v*6GXPvpz8w+>!6YDRS%c#
zmJlgy#BpTA*V}g>-Te$+^xYtSnf#YMAceE{ecFd?ObjveppCtcbb%_2wPSgLGANoa
z76xJ!5(=R>%J`OWFnu#f;Gu7cmnh>Uz#WWd1m`pyrLX|=P+WQrfes@!?n1HEkTx_r
zgcI;iT#BKPldQMo!x?57$s@a*b#;EDWbyPef!w)yQRB-zL<GbUTlkMM&8?y*(&>@a
z0dX~9gk&eLncW^yxGA7uHV6=*oXKxfpuoysIVk#LdxOjLOst{+X>I(E7@Dprh@f)O
zGdAJ2AtkR~)xw)+dwWOEz=DvZ-A1_=Y`**4?GZ1WSqIqS&Ks#Sf=W$&jHAt6qH_}y
z8@rMsN36(lmEH&j_=kV+?NKlhF?g0E?^CwhQ{9^2dzSx}09yb<_2}I<+*SLp3;@E3
zo2AU5=fMKa>49<eLnf_ju7%CUmXGmo-7l3mU=`hM$~?c(DoG$*^e}&_|2^eEZYV$W
zgAmXWEX{dB(FNyKUa_l8l|^oM9UCaeue4~cdr``OEe0I%nyMX^pMRhKdCr5TAA%kU
ziQ`t#AJyu+nBhf(TxT&MZVHa?{vg6p4t>?s&7d&729T4m1UR)`59?v|r=s=0xr_R7
z;~7F;Eqi2br|EXt;zb79idEP~!K=3M`v1tLus@1g3CiEYE#M~`2dd7_JC^W@7`S9(
z;}p^XmtX3#LrgHgQ3JsWl~TormTfQCa?^FAa%WVLq6X1$;ZHTt<;$#?i6IR$>#&=*
zYa7%{U$U_M8LE3e)g%kHE#a3k(RwG9>*|@tY+}*o-mX068&*&;)GD`iuDq=)biSad
z=A7g@O9N8m)2B~_nJDq<+0#>J`rxaz1Hh-TG&c_*jDx$SbuO=E3Z3nUZ>>IM1)|X;
z%1h+yeQ=CC&5%5iqJa6=N_B^q0%~Ucm0TKLra!yM%u}Fu0_h<A=zm)$kPW60h>Uxm
z2Y-=Y@f6H2cS-q*&BMA`F0(S)oRre>48$A2?Y2jkLxVNZ60(>jfjq=xhP*~q(Ixw_
zL`6F+Y<^bn0atxUk0%@z)7N(W?3=68vnG&=@s<IO3s7KQ%YK_64JO;uxp2yZ{{*}-
z7|<fdn`uw4NMl>?f5`m~M!2=!?2`cFA5CEil@N3D1Mx<XIVNBzop}D*<Vwz~Q*m`<
zkIH^;F#c_Z08H-(69z#18v;&~?3pFrGaVk4S0Gvtk4w(`U$}9xw(Y-#zAoCu+8JYb
zb#hYvX>&$?7+kO>C`dK2x8LZLVai4yn=2ylUrbB{t*)=t<O8BH@IFP+*RO=Vy}evq
zT(87<i3kW@%B7t^&w&}Hjzr4lLWE?7jdNRleg1uU)wT>!aZ>&UIGDV4w2uc!)ynSC
z@Ry;Zb)*5&Kz#fPX1>`c7pn}R;Gv&GdQw+|35SWEdhUz0H#*U99A6g`U_V%MG5{!7
z%4rvuPn^dNcqR*f0diGPyQod7ThPCP1vFaT|E*U5Lh|W2Z6%SDIxHOh=`fvkH+L$g
zsA59rx2aT|_mGVaUgxc&`6<udyOaeU+japoo-rfJ%x!`Ws72ALu%8(>n%*`my96l1
zH_wJg0rGPZTdnMlWu42R(15gkwDu~Q2nv#`@=P~-=ajbB&&?w;7CCgPq@L39IezIo
z7TDTJ+rU<Sf;wL0Lr1`v9JVncLNzN#VbSBVG)us*GA@=dOIjWbey#z`y)A}($H&HI
zcf)`OM8Zk+ehYp__Iy|=wS8$DmAZ<7Ba)WWg))*KGtv-R;%2TQ_G<Kt@2^xaa1>+7
z?m(eA)4DI9!+=Xb5;oohv&p$}jUimF!TPo<8N@CH2DvAoh!}Gg{=gs1?9Go$M=YZg
z(nTOXpy`l31`E%n1~ElD`!AIU6)mmdkWN%bhrF_yT1`W!q9V(?cf5lBypmw*1qk74
zU|ct<{uwJ5RlTEAby&AQ2mRQXdMj-|AUdU{U-`qq6^kMvh0+)FSV3l<|KMp{7X;&z
zz-d^12r)hkwRWSl;P8D<qBh-<vFM7qNLaB+j5kCVBEq|OxBEz-sg@ehp8%9P@_*zE
zVAusqle_MiX_V8(y{f&L_SKt5?qH(my(jO+ee|&}HsOrXpFpLmBCkM7FuLVS5iFZB
z&rC-lo2JyWWP)G5-1PT7g<M1)FEiR738pKcdI^!JLN43FG1tyv9%8?5*92P|C0xxQ
z`bH4I;JzK%urazzMi#i<!frzg08~@^TlbB}8-;g&OPe-bf`0&H4&kPi`{m+GNy)w@
zAK(1-2iCBt55L#Mn?dH0aMNkYsrsLIz~Il{CgV4(x@A1h(vf4U(j6$|DJZ(wh)LZj
zIeb;R8}%ro(k25z$!lq6L!X)ezNaOGnQ_}}(UQ<wbk+O~6(QWIf70=1W%BVyXv*;b
z9fPP$l*8<>*9admw<ItvrDL*va4;IGt*L3R7aSDCd3&71TwA-I)+}np@;hf3uyK5^
zJM>;m9!$?J7wZ78(EHQ7|3#jnb4e}>|6_CI4}qpvp)C*lI}%7cZ11!ufFY;@U|GC4
zc)*9oVWIOz5n%Pb<ziD9YqR^FCk!1W_h1$m7bG|IACwRntx|8!xP=)DCxjA@(N4Sn
ze^kh<2t>KU;v;vQkY@ndz8Ay$CX$ve2xYnCUT39!L$Q3BMjLE^F_y$4n8!*O!tx6A
zArRx!DxIIn98;6FQZ7ZR=<L4nRY)k66iDEXE9~n54c9R8+DvHNnG8kq^+^nrT+x`@
zC;e$_PWh=AFfV{sg$HImZ^s1KcOp&bB3i&d5g5p|x(a5cby>a-n^uK*_tE&z0CjG`
z9eLVvrotfDP8jAaN%qK-p3O~6)D80myGeGYb;{)n6)d@CoDW$OctE{0;(mxRijW7E
ze}j2cQVlA<uoag$eQOAAy|wrV7j~U_i>A6^X-l8_DH={XY%T@7Dvze2tYAP5q~^(f
z!c^F`lsL__O}iG;*H#C-#NiI@l^PSDUsSkN%H2W|M3ONM7eru83=F^^uyIyaW)t@i
zk5oPu=|u6kxy^@sR^{93wsqc7CPpog$i2(BX^)<00()uRTj_Ih`(+W+9TG&bV(9~Z
zjpxjDX+FvUl#wEHj_0UJAGafZ1N?UfW_~OQEz0q&xk>Gy593^zas|>L`g57Ke&lB?
zjb1m3-;8n&7T;sx98RNu_W~AMD^j2xTkA46CNBz_w4U5WH34#8q3=*McOAM$%-*$A
z;(yv9=Krf5ezZ_5E<7EG!YTnAfUtf;d8Xe1E05G=#k9j=)a?$Q03LbNajO5R8+r}K
zS0oc`6;x_lyujG4y(_@TzK`U^_#`@=U-(6FR|>P(2m5*1CWoOvRNGhrq@pXO4TM|*
z!WA0k`l`GMq_HaRFoAx&QoKU6aE3ECc}AHBr<NhSZu$8yJ)LRqwbY!B=*be?7Y_d>
zRonL~jQ{ylM++6l1(%nVAzg<HJn=`BP5$t)tu8)+)zf7!D0F$2UjOLM!-JI=GXr1*
z<$X!ctHm4Pp@^RwS$vqJsbb$kVI*EZ6>=%zpJmm7og&eoyxPUeLn2#!b@*<i`)o<m
z<ZWqJmr^Xb_K}1yH%(ks^vV~dT#F;YfOkJiJ{u!DhbWr`RJ$(C2(>LqdNg)+B)ra9
zT&tv+#rZ!CBgZEvscmg-zcxdCk5}JnW_^n$3Pk<+<M(TPd<+oC{Qk-OR`jPHY&X&K
z{`77^VTaO}qx2qLCfDK8n)u`6RF{93v+^#NYxFkfZ*1%L;9;`3-4i}p<mtfZ2A~<w
zNZiKx4o@{$=1U9lYgHh}k7u0yTgqCCt6Hyk*7>tPx7<&>L(r6*=zWiY$7$zxb+-nI
zyuV!4pK1!^^2iZfJ5fE@S<!hB0ZbE0iSQcIbFq^?{wy$TVQKDhztK8ye(&nb_WzuR
zVyFC&HrT`d?ls-%4E@#K-SmGC20u=SV`IgbI(zD7b)^7(Y)`D@^e@qC0W6cZinxgN
z&vcmjboo6}n(eko5&h_r3@7f6Em!n>9x-#z4>KbWc~n+p&bVW&;Lz4>M&f2G9tctD
ziv<~C8@Oye?F$1&&VD>m;7&-+dYWW|*c~s$n-W*Yg0J$<Z@rwlU>`ZXgbdP&z5ZiI
z@t0#s+;IqEV&1%%R$j}^3*R|U9=WuO6T*O$J%(ZTtOMt~0=MLXKqm$-w3Q{&I_b+0
zowB_FD{m`^w6jY0JpGyj)*;<Sv;Q00Gi4y^a~K0}Rl`zZnn2fzNGi-YdAEq?*Xm6q
z>h<bix~Xo&<vTKo0iEr4%@mxuX`VwuA0i+tJ6;mLVsy=4F{;O;uz;hnB(UT8RqQN!
zzjDx|VV-XAeCFjSE%jwg50glZ+dtjgSGp78<n)}^qJgwK_6{@;?<ebzw3g&`%X=Df
zs^@CyHnqH`R)65YR4ADVG~b_HkO?=6-cog0qR8u?<SBMb;r9$MSu~StCb+u^NbklN
zhv*eWO)0ZZfi}ZfpJ|zlV)<+rDg&3;zMVCtp#9gY8(?U3cXSn(F$9aAlbWVLHcB?+
z=H;(;>%FhYQz5@d2!G}O_G)TlC!Bw&f6zzC*VWS(b-;YK>qM}z>ATJg?*viA=;&dL
z9jQx8o6=k>r>5=QyhoG854XCu5@OrNwSAR#c>>QGN*Ks3roNwD;$Sc3A@Y%u)+24D
zR^UE^5=RZKMi~+ML6i?uTIRo0i7qHVYRkD!Le|c><^8DI2o2hLkeFBj^ChudnwdS~
z11RCqw3AC}etrO8hEu}+{Q0w7RPp5gb_b3BZ7&N~E7d2{?~k({u~89poLYU_npder
zne&j|nyFy5H+35F=r@4UK!4M8F{&C^-t<s)K5xVG+EVEo5Kz%j5qrJ8ZT@1??8=Q6
zo6?i8Kf2L{EO}nNL+|Ddjb%zNb2H6uJK6izjL*nH4vZW=rK9F8ts%M180(85n~|r_
zHyKaDgKS)L^5C+vvaUc(6PG=vUt;l9O!FoROy=u-rn-&lMl~n39WEj=fL2+n^DajY
za2W7lFvq5vy@KSYKP-Tmy?QM`Be#4CyBBuKH?!qVxCSwXEqmR%AJXseSbj4jxy#?d
z#ceM)`R+%Qv^HugSZ>}0Ng6bsE@+-Up<eKxozh5~c7yp(rq9Bv$nSH_rltMGO|DZo
z3--we6u6Cb(Ed9Y`0w`yR>?!~7Ns<((RVz+!MyuE1wdgI0i3C?3M0bZs^kM-=b{N!
zlrm2&>jP-70Z&tn<!qeucy9%(q2Ho};1ww3Gm8W}4d~E-!m@M^OTAxXfN9I1Q|q;4
zmZZ_NAg9Br6&9S4pm6-MqB#=694Ti&+gZ9ouz11fV2zk<lC9>y4&m&3V7`7_8W@bQ
zlPN|ZE<P%M6V!@dVwAVEyaO;R3MHJGRnS?|T7vY%i!7)mP}uUr>;J0uM%;u#4uPzm
zA%}5@`=vV~nn2G;p^B9#?>S8lV`l(61pc7x7f50nu8?=ovMe9Xuqr>j^`62l1sqdS
z4&o!^@y9M%E+T()gv8p%_>hdxhd;NNcx9IdZMNp_o|@RL$0g-^se}4mMR?DSk6%u%
ztgNhoI*wMHgq%@|LWyA-=0OW#61=U=T#j<?J(*M<58ho)n-8~-Uc@eH*dPWC?S`&H
z34GE}_0;)cIOVXBWuaSf9#)o0%Wwx^ct0S0=yx@k_|0*mXN0Qtdubzr7iXtwp2W2W
zFr;tyh~+K=qQ<~a+Akflnr~5BHrpQpy77?q{36l`AqF)DQvA0h|NAW^AP9$o)iCsd
z8M#;>OB=B$@OdE=a_`Z;Oc?J%XevdamJqgrxe_cf+Btjvu>_1m``;G`j4!p<5VRst
z2*NW+n=()%E6w*Kng+Lj*flxTnU3UDwQ!(-1Za^m5cGbZ7}Wn3psf&e5AH}gD)iY0
z><hn0mp>EoEAN_Z7r#rQR=}2(sCK~rll!3VyQ7+7Mc{Knf5Fhnxwg7)yJ$=9Dr-ah
z?E9-XoW_40K|~m1uSs+D;(iU8$M?fCZ}&QCWjeT%7B?0ZE!<lZ%WGqa{0X$m6+K^z
zRH80l;%Jh8d#0;rIl1n`5$9}XMO%qo@>kUphfElhYHX2^TLfZr${1+3S??MUp#^}~
z%M>jd;_2A#PC0y3tt;@1Fq4P~Iq)z}YQOyu-wXvTHaeO~Q1CJEAge(aAduk5kP5bX
zuSq$Miiel12PZD$x;Srz^xFQb9FXfs9o_NHE*!*j)(@l<gQ59CXD<HqM4`*b)6V`^
zqjcx8E!R~U>8Y>B51A!`f<<_ITCT!Naq+-Gbw!_j*P+~&WH2%;c)W}sbeqrGGpElK
zByaenuoj5o#3yaGZFcxxflkiCSMv1zNevrrO!(sMp$`!*+(HKXzlI7o@H>w>^B)xd
z)G_YoXPr<Uq56)dmt^rm95SK_JcW|jQ=@TOqQoREODHUofF_nTXn?NO?+gkl`Inl3
zIULW>xO?}04jzaYVSh}vVS+`N(yjMMffn_`QOy@nVPnKC%@$1$Ug*0cwZrMdBAU)B
zZ}Z83>O9-U(*G3Ro%w*UH;TZVJDoRsGW~Z3J-u&6ov7>U_3zd-0bM`>d-WR=jP?)!
z^VaqghdS&wW^t*6-Wdc@`80y9n4(&*MYymr;YV-J;)g59<(-o%QNk+5fD>vbGN@-}
zI=lR~4ky!*3MwLRraw#5U^F?-TwX|c<cu8;TW8^C$IX(w>Kh&Ppn{R1y-!F`u(xNU
zUk5Bz?#P3!t^RQCdDWYR7TRzz7yp-=zf6J2gAeTm&;GSes@qeaq(Y~eRRm!^An8=I
z;DH38QX0Ls+9CO&WKBNp3Jp~brLoPHfCvdl{mp2DVm=!SB{7R3alm-Y-)gm|orlay
zp4~mg;4Tzy1uhZT85QC)f&zq!=Z{o+?`B>4#zMLvIH2~s#g^=#5TX>bnd+0Qi`nd;
zdx(ATkNUB&x1a5b5v|K-qorY^Bh58WtAdp2h_h#FUt8mxt!=PcG4jyzKhy{nnq&Sm
z5CWxm*9xKKB1!irFckk2Y)vhviy)Lr`{>)}A@2z=l4R+v<v&hy*~XJ=LFJ_Jzu75G
zi3S4d9ibxuzrGu`=#vPj{<xDAFu?zl!2S2SuNk^Jx4VZdL{dHxjTf`JM9CmlvW`D+
z)c)3p)z~?)7Ypkkm}q||pVS7?rdqhuB>NftY3Bx5%Vqovdk7nuCB2)Q%ur@EIwj>q
z1seR!)BmKWcc;?x>{!X(;N5ZkovIo@TB$0%91hjLgd0QHgZnIb%2nlGR|qFF=J`BI
zz~<?wrCd7Ietagbo2_(oW2S6RPzY@VrCY++cr4-U@tOi^dMbR|`=rnXBBrq&l_!;k
zhK5`M0%{r>_&0G1R#sN!Hi(>N+*}I_`c6ndKmd;J3h<H|CFOg|=43_loKBP(K+~h<
z8^71e*m7@WH&VhzEc@n)*)YBUI>rQs20(pl7z7v<+nuhtBF=u1EI96?Ms``&F!S9f
zfq6e1&5H9~y}=cLH$`_t#JV8a!8&30|7Pny?|HPyWV!{Ml0e)~@RICj0XxImwJRzX
z*l+-v1#D@kKDJ+;p38SUOv0)_HGf)@>)WIU*R!3OEL%iVI3T}U$k4*Pbq9JQw%m4X
zo7X}@ea9x%ZOK<A&r~kkI*ImCC;GJU(5E5P{c87^i2k6|>`*S{wSIgMFq5%Ce#zzu
zdVD(06{Gt6R+AWlqppSrygUdFv;c2%IHaCp{*`=(`~7vMKCAK8kuBkNVkK&dwR@>X
zZ;PiQK<wAl`k`9;eeUKFydGY0cjF_f64DdT{%cb1Pf<D4rXb8laQBI&=UuGGDQsuu
z5ZfcSo+P%;2QP<M=f-WW{*gbkq-O$OlzFfuX32s^`e8bOS1@U2tm7Y6{wi#n8CB2h
zFYyaM2N_f3o!^l`|8T`h>D{)GMF_`~iy}0C8=6HTp~9;fe+nzx?%U+I@|a(rAVoR&
zpH?5?_x1J3zkbbA4B;jtC#OX-jDi2u$?LX`8}^!?re9cCI6OQI&&i>`y}dP|C^(n#
zAHqoE6tHQ9dt1_oyZ+r_fcaYihK9G=mR*WWSCd9aZgK#(JOGI8LXP@5GbMr>%$@=y
zsAArBOU`<KvFtUvp&nbibQk2~`p@noK!rDH`V%gxSsM0$DZTM~<;Sy&-*+L{*D^P}
zv)W4eGb?WoFkx+n08o0@X01E(6j{stW#?Uyj|%}<x_Rcf$v@_zur=a8v8DWPY@KU%
zJm{Tn7YCDFM0YLDZVZG1wqmL2{tbP;zM{qa$V(Nr>ZYF3_89{x$UKqye2ulttdrd6
z2JqULy&;7%_6BwQ`b2HO3?Xob(5?2oyr{s1`!a~egM7On#?HTzjngY3#v$*yZqn)W
z-))><OLGD+=|3!Z<9jDrg4J23(4dX&Utm<OBBQ*an1X7<4Y@DC%24YY`yu_AIE{7m
z#IWlW)@s+l^CwTMW4I7syI*%#AV~zm^)<OI>;{*fT35!ekPBA0V`+BRY|}0k_n&D5
zM3(TO8DLZ-5UA6sC8Kh2bm^wCpyJ7k8C}w!up&?pdurnvyw)apgdkQKv6z?`a9c_l
z7*S13O8StNleFR_@V76kJU%gF9tVscsj94u{Hxte{N(35co4F4m2POnqT{|>&8z1W
ziy<%9w3NFO;<A&JDd{5#$XtVUzm)zf=YJoZpGj_1`*)pY5>W~aq*?<cnH}wI<zmgH
z^K}4T%Q_Hv+@x4B%918uQ+41UQ6=x`<0f&5cZHEqj@d9VyD~`k&tP6cvYm$)C8M|5
z5x)yU@6ZoO-e$O!f_-xA=BZ#GgH9)&FTBEvb4I3>mHQrNSpU7Ew(bEg+RPF`7g%{i
z{#HK(SpYUcExXC<6|(p=>b&Vu-$sKlau~gP_Z5BUK*;T~Px{5gQ!&_`=5MbF0d<NH
z;B}BYw+l+Y^K5GJ`IK|h_Q80W%5AUIXV7G~iP${X#r2Vh{hHAsf=3xub~l#(ByOh+
zMM=Ip3L<NEzwE|@o`-zh2^G4uyHPmLt!>|yMC3nr<8+&G={kpR7|WbXCv2l_R&Ry+
zhL-&Vr@SqlGz`|3GOoTa1jw!r#bW!PwgO9{f8b$)-1Z-Ou%yj|(8adRls$qCoHa~*
zl&!G@E<iyJM~s=J#k9BnXiAGb6&}05&UC)zh$<O!1{J1-mljPLfDWNspE>Aw=Cp5w
zsJDU=tx%m8Sim*g^u-J*ov~?8?#L$n$8Qfq-c*EHF>D*`Ae%-<e3Ha)`bIyf9bQ33
z>0V47l4=dd==Zjv!o#Oj0UPoI3Tm(`X`kpoPhyvr#j4#f;5oxe<kTYKxgbDKee2^X
zBuG-ve1-Qh-FD)KOv6(vyq{mlB*+EdKZ^=dZ2Z<<%Psi6uhOnCE%#GG(LNfOmdQ{;
zgZy~MbT>a%vUe5l3EcG<kPgyi;OTg&_=V#F2trwW_}5Ycn0d^$*;(X2W5d|^c_h3M
zaIRbepZYw{kL-OfsNBoWDk*6yIj2Dh%g(LsIbBn|d|5%+X89INf5YuZK>I;A|5(!D
z`6C<TY119iP|kN^rMP>|5fm37;$<<w#EqiUNb*CExlcncZN+=Ir#T6;83`S%%W#O^
z#1I9tq+Z`I1x(4-R-H(i17?#ha1)F$vt9-9+yCEvPk`*b#)U6XQ60<4>68tdUJvHJ
zef|EgnnUzb-E-^SQu3e3f}Dl6n?CC|r@z&JnS6F^4mP`=wsu42-zdUdZ+7Z4WmFDl
z$v*<;)uHgT)H=i9`((j~bsO%8=R#JC<F=ZDAJ3UH9LHvrFV#Kw-*;lX3R|DvV1Dox
zAf&lH=lnwasi@%+mr(<HlPI5de&vgz-n|9{q0VHLmb|A*XP5Z*3E%a7^UjTB7z2qX
z?232zdJn@)Ya=D!X)N2Jst?2^%jeWyctoa$T+5DaR$GUx?9DE{_L)cczFYQ*|9P`g
zl|<jlINVx^rQS0Mc_Dk`*Q8Hq9W1w1=dyLT`}&`)Q<;wgmgHJn?l?_OVp_J7O9^sK
zy#u`$sl=g!W6{YF-7s(ex>1*rZe&glyVhss(HYyyTA+~M_|Qq1%aOJMUE<z(Zb)kB
zG|N5kkc^b0Ur_eCsaJwjmqM3sR|6>{+#?ah?(T214Do+SN>uEv1cdhMlRLfNKBEC{
z%Oc!<dvdzDwK`yd<!)TXj*k=RJ5goZuNh>#aKPd@FDKuI<$8i+8iVMxgGyH31#pa9
zIdad#Ga`>|sLjGZX9Rokwcrtd==FT(PN4aWvcte(Q$LW8rDo@G4rlo28*B+TES(b%
z?(e-x;ZVOcg1cg&;~TYv?p$G)$1vcsi48kfh3+X7*2(!n-Wea`BUsPCYB0BE8w>st
ztH8!tMFkrKUK=$x=!umE_UvQ&JU4%N#2jGZn<O8s_>l~zs-hw^$wd_4?d{bq>mz+z
zyG5qDo!1e6r6#!bTx96_giy1>l9c74E3p5Z&hepzN-1uH*(4iL(P~2*2Y+7&IM+B5
zE&MYzJF8r90o6G1gBCaI$l_JOC!gSeHjVr9aF#CSsYD?lRJiG?Dq8?J+4%ax!{{M+
zUve$T$LryqUvepdiR($bdAwcHjV5r#=!XvNWQFZk6omdCqXD0NH>lev_yDuvz6m)w
zn54a=K<7gLuJ$zK9g*K_ZVYYfcsx2XEDBtT-{Rhx;vr8X1F?wkGs%?ye>{C>G+d9@
zHKGSeL=8feV2oa(w?vy!Vi3KDL??RhBm}`2q6<Ux-g^(Cjoy3jz4PAu{?B?pu@=k1
zJ@=Ho_t}S0j=7e%=Suzt<^8S(VypPfD=boeIv$M`eQHE=7Cs{z_3(X<Svq*#<Wk8v
zchU-SsEV1odYLuh7pdx{{0xB-z=$~Y%Azdy(U2Y$X`DZG!wl`*crRw4v0*(j5qHk~
z{`$DZmo?@0@=+x=BJ3c??WNPg`uyPkM7P@tCGbF4(LRP^^R?}Vh(teDsSdd{503{G
zZ}Do~GwT9C5U-0#<^87VtJ`xtM{6EBcUutEYDanwv3=O$X#}?0bj+qp)dE$U_dZq(
zNGiALw&pdPl*MrmH}3S2o!jlv_f1fLW5w<ksg=Y{v+wz~pOm)O*&-5vK;Z9w)f)oL
zp~QVnu)o+Cu8+G6*6D|$Zl4+X1mQmWS$-_$IW>n~1{yL0O2M7jo>}DhU;V`JKB<8A
zQI3MA6AWSY3}qC`!%X%T+g!*D6?`KI$4ELKMvC)a8W7rh^pN>%Jt=8URze5jSGkia
zd1y$B2&pY4()SQCWU51_{GTF8vxsYbr0a|Q)wP`{jT>t&?>ka!@x4cBiwQF!BG14`
zDdl~GCP9z+XXS6SSA3}kR-ztlaC@duBKDdv^Q~SAenGt`->@_0_PX-ac{PF9zm{OX
zz=twNQuZ+#Fh3Rk2bf$e)ajtPl8gbePSaImyS8gcQkW3@{_NOh#)2vo`2-t*s<=VC
z^G0rCAZgH{7c?_Wl9?ZyMY_&Ix4cFfj96t3-t5kHVvBo=+tl42BnI!+S-sy33_=1@
z8`nUjQgcG=NlaC^QJK(hIS$2X*~8K;N7aI4zcdO>@}(Tyj~cCJYB;RlOs?~kp<$UL
z&eQXJ5S1t;j<Ioo-28^ApCr452SWM8HYX0_B2cxz_vKnjHQDOk;+0wYh+bE1q&qqg
zD1JV2X5xa*yhCFTn-3oc_9*66#{T#KQdB^Qb4H@|4`g$FK8Bl%mvG-Ws2giQ$!FO*
z?atesW2kq9V&{%LXm&;;j*5DJ9*^p9PyDPh?1}Cs5d5=vL8f>vK1&XpVJ%CU;XO!1
zj4Z=*J|JhQd^aKGEUh(oAx)&&r;9gHotti={l8Y9Df)I?lYY2fzCGnbu|REMaYaD`
zhQ#)E`=u<8Vse(?I=$60N53CaEi}&IR!@&;pgV2|L+>$LP$NE<hOnZ=rkV*>Lkwm-
zpdK;Q=EqR$A=L@r+!fAFNS+~0VVEV0E8JuvWw=;<ZFZM6hO0{CnD@?49SzxJaw;x`
zh7>>Q{KKA+p<FG@7_d-L3@|M{J+S1u<zPcsgKp0H6o+$JE)x@~C$9KJM6!~SXjJQ~
z%lmk|Y&Z!z2Hi-uiNo%Jm4xOalJjJjE`yVuA$@0(Qv(R&V><=Ly3n<Qg9o7TPv;h9
z&>A&pDB@L*?cCR$PV-ROf~x(8p+3<%6@N-?Q<qW&e4oHS>0YQ4B2R5Q1i8xMU31aS
zPGk=NZBl@++ju?M4k)5$k>6Xtr<rpnj3wtMRgLUb7~-^}{DDaO7dfrQYFbm&qnU!W
zn<ZIy8e^kU3h$#9w^AabB<X9Fb4_EZf9DNy)(L66GPS}H&258yu|W;4NTiMbqJjg^
zL=x3knVF=3p=@H)lT)_`-4b|;uA_dAlA&fmWksP7Im;M&1va8;{cacZzv74Xzv5SM
zwu4j|ZxAsmxKE9j&`;uXyN#LVcMNH_J$p<b3d<5Rx}jtI8KI7z4P@s&5BXr0J1ZJ`
zfxkUoA2T-_cTe4d4sM<_j7#7=JA66hiKEth-*qw;?U*CM@8-2&AkE2U=#~44khbWe
z;N7pCHy)=jYC)qB0&ro6O0!K+^jqRcK}g&_O6{e^U+vymB*@|RF}hIAyE|m-RZSj-
zq6WhiN2!^8IA^G*G?wGfJZZHDlCZ&vk|o7x?aKb&vUu_gJS57naiwWAg&rk{+QD5?
z0O}Iv)<N1XR)za4*Nmk&PfdhHV~<TEVv(GLq+|e9Pyl|{@w)X-7kRm>pi!R%ryGu}
zz&0BoHVJ5MmIy=wBcZ(`pz#WSoSd9ovg3#6^dR`%hFQP#p@11dncBu|s`;aw1kg9H
zCnkoc0eM8KdEl1zTH+x9#R}o}+6LM52tka_B<vbGO)mlS8g!M5^gwKEMN9YHJGoJO
zsKUbiX~a{hR6%SJA{(<|FEuCwSi7)WatmmGhyaKkm=K83?iMqnCan&;W&)?4GRKy0
zBz#v%YeiLJTZ_yo-|+A8Y5-%x$$_sgqoIEKDL_5j4h*cP8#s#PH0o?FTH~Lo>nDzw
z52&8IpTnHen(p>PBlZ_i4pqQ99h&+sp$%wkrGW}eDx#`OoH7GAJ_u}!AWyP3KI}Q#
z46sk5YQyfzfRHS7m#D}82l?jL0}L&I|6+1^ALrsi24@$l&Dxs@6Kl+7Tkw*=hLp`s
zMlD)_x}3gcFKB&B(Qe``+f^UjnYajVcMJpC)xWQfNFvLh|M+rj3Jj(r97V$-o%?3p
zp``<(PR}Mm)PSKtBk7|QdGqGRkm79Lz=^KH-_%?#DI0!AzPFcyDjy`;zr8fH{JzBL
z1LzTyUhtYz{{0JFFhH)6#w9enkQ2=?14FPXGv$CA@)e+@-#514stQ;Cw(_Y}2iXiP
zTp0i^4eEHw6kMcw+4Ou&Ijm<ti3QJMKfGcod|`}FF|9QQHs^GT5pap&k?(yy|E6Of
z5AMMXwDy>gIg{|k7y7sswq{8<B75_V^>g%>qne4av4Ma8DrO;(t!#AEY)|xBAF2#m
zwQtbg$qJmt!GInrx44+Ip`l@Mf1ik)oLo>?*yN(=Z9=mLvq0i(OH=tvt<o)m*NO)1
zM!9<9Kp+{clvFr8VI{Qvb$Pe-NbcwFctAioE~i|E{{ARc%KCDoqDSqhV<l<@0G$3$
zEd2fB@q!eyfL%ywhH-gJ!-IINo7ha_9X6Dy3kmF9ql|KD!`DkvSF(+E;-nrKx$jlz
zNLqaIN3K#J9mnpxJ83R5<;C~p;%U&JV?>ZKbST~zlt5V9!d@+)Jo)t~E}dS8Q)c7y
z$ObtM8UGt~1?QPLBi6HwJlVaZFk!7+whA#Li;*Su)fQ4uIaaa-)DEO*VtqD)aoc7u
zujJI=KhR?CKR{|M){hnWX`eKKh}!IOGQB6soG7`b(`+$|owQhS(oeIC(&UgliTlgB
z_+NcXv~vDwdmgu<R^vJwx*aYh4F?xuQKqk~ydxi<UAY8j%i2ksU%!I=QSxvhcB}wa
zOkz|b&4)cT<hE)xicQC#j2w<%no)3#qdn>>E~XMRcKp+#kVMwZ<1-STynO_S61HN<
z0Y2|BOI;)2`}4>vucRU`?}ex00I!zE<g0I;hi|iFe&-ej)~lciBnb(09L2Tp<p8_*
z^5Q#Ogq#81AGvMc;c=)j2luJtDaqI;(m5qw_vJl}d5xy3iYbdF2$Dz33W$XhI>aE}
z)F|Yp!A&ldBy%0r(c4y=zxGaVf&pK^MX`E_2E*kl2#M?C;v&Gq!}B9CG3@dZb6400
z&#+KDf_?qv;qem<*+V?Ue1rRQfZ97eJq-e2s^pXuV>`Pi?GZEFrv9()xtb!qKZ%xj
z<THsUS<(qZi!H4<-2h*O8Bck<gmcTa!*oF3(eY233rviv(P^|)>!bOEfi+|ghi~J7
zr+mB8=&-peZavo=-7~#ZFirO_Kt^RCKip1hjtZxJe<OnS77QG2$&9v=qQtMY2G;Mg
z<F@a4QS&A65WZo7I%^N#ZF=OUXloCkgQfUpH;o7RHCbnA_X#SNib>K_$lA3Hm`p%g
zR55?$(Z7e15|E@d8)`w&ei|K%^X8l1C~F+doH~<+8t{v0di))CLAZR-^5FchLha-K
zt5Dk(iC5+OV(24p#23z2{d#oIu$8BY=`}0$E+<ymFF&vQC~AESDc00BnhuK{($9!m
z$!D@3wL{DHNivikU3wC2!tF2Bhy7Xj8=)_Rd&I=SU7%wtm2PW?pbpj{(dmVW8c_Va
z`Wko;4Y>jVfQVt2g-L(N_wjY#L+FvCz{(!y8`H%g2`MzU#SZprY^7OZ3H#-7=fKx{
zZo#o)O{0t8F;4~h;X;5CZhx~-AZKBw#GnN!;e7oHYo7b6<Z-XG{g-E;yq!sx6W;Mj
zr?y-NUkf#(7YWQx2_YnlmRjgV!Eb65?cT+)WaK(pKN56~VEc49%8)@Vu7D|pHSzfe
zN(>|@Pe~UCT0X~@2N5_}+Q)iy#kGi4QP^_J*sJ=%y1!yzGLmLym3;toIAa=lFIt&3
zb17O?R8-_35d4_fScma-Ve>l+e<6`whwVJhfPlAvo*#y}(BA&2sHo_#hNagjMbo_n
z_v`*Cw7_;u=v=AGjl0)<WyU7BF(WfG2cV_)@Es02qW3(FYpnSJH#jFb8~B4+8!&E7
zJRXz?RFQj9Z&N=mcd*z$fdkMU*jU1I&F#F$$7a|h=E^?<th&1TEeomyV%_dSzA4lL
zTmI{RcenuMz-hYiR%&MU?j7=vx7GQA!(_sq%8?g;D?o5m(+I0hJ@b{_Cr7|GSXza+
zr8$&sawZ!D-BaEf-dY?BD+M&imcu2P_vCD$8stp1T%B4?f<xaVUyG4<p2(o(PbWdz
zv(=4rx9KvoH{^*1vx^@|DGslJq<e4tk*97>4Xf%J&P`zl=t34r=V@WZ`EEt0*WWfE
z)!(`&#*8g=|Chg>Azb)a8r2%*tmcmTg>FP*H!sy6Vz-o=+iPDYv&f8)83`L5lSTN)
zRu#pt*$!o~S7Jg8ldj1_2E{^(Kj^N^NN|{h_>*QAmbG-qyuP%Z|3VG)xslkMEUj4=
zA>>c%Zj@xe&8=pjmcKpn<rIB&GI+@`yl|6i*vgwE*OV8HuUb@NFX%+hpM{@2cTy4&
zQSDR!)hL+dh|7$&KCyS~>+8+EVBB#&SW&sdN~krFXwq^aNaGL;xM-RS^i`U|7nTVA
z_=wqN{`k0q@L_*UDOC65%xL^At@r6nGb3@MM*wo9Sv%_V7Jqbn4%P-!jT>|R!;vSg
zl=4)+xUjJOd@i))z~n1nw3I1i1ae9!%TQV6A$(?XwaU{-W{`!UL=~upt)hXJ=jlb+
z@Vt-m>6xZR8Lm7Qb8az+k#sJLyVE{`OfpxE(I4ei^Ny5`shF7G=KE4LDMEl|mr?ex
z=U=?W_k5IxKmy_qlnQ3OiDETV+RNTX)@*Ku`kB*TVnU)45|?HS5hk0XOqbTt&&FRi
zgfx=b4n6eY8!8%d0-&|cUN8f&`<Dzzn`{!#JDLB9mh`Hpif7Hun)K0JfJ+F*7F6(O
z&nAFQ>GXV$egCa8>f9;zp9O_d^@C;CsK7VsoH<~4&+_!}-4pfJscepjeLR!4pM$M6
zoskX{I#zVCVO6C8)o0&{CmH0{MQD9G-bp-{)JXAKfDsrbqm-*v`BH(sF-cM!VRoHH
zgIZ2>)qvlO9-`c+BK(&<J*+Po{Cn32qFXX4oS8#e#mLUWP!1#Zx#M2Lwn_wP)YYd6
z%SU0wgf!KlL()*~=&F}|YN>3EMD*#e-+<?$3?=~JappfE>o)K=NC`p?a1de566!QJ
zDXL1o62Lom=D!79A-o|<tkCcU3M&eT$nj_IyiW4<Dawba7mBLeqmuTx9osc-T~i3V
zIEAnZg}N^7*A4#am%hXy6z_HpjF0n+F<R>{ET%hN^aK;9x!6J&K11wd{YQ9Lv=t@J
zMn7jIMoDh>EPe3?>!F-aR57S4DRR)V(iYAIS;<zOd48k_aBadaJ{#l>WuplUmy$>}
z$O)9V*ZZc8{W_uP7&E(=r~8!u6PNpxg%@8RMX}P{Fq$H>or13!3bDuO-L$4bq<CeS
z6C4^ssCy~w&rd@m_V?1|IWaFZT3`KJ+cJ;(2aQTxj2`aVUVAp>8pf6HnjYmXr^#t1
zo3Xw`))>KBO^ZAl!Px;L>eLua!pbuL9>?3-&bT(-Cb*ECH>r2lUzy(Jb3$d9@z>Zk
zr575Q8!YJX`LBOM-)f0Ve`I2@%FM4QEU6Ismp{q%0W8cA6i3g^{fwKNd(v?hTTL^$
zV`Im<bg70nS?unG%we%!WjliA=5VcGfonH^A>*vwFyXqM@&j#6uTgF*k(Jlg0wF!v
zd16?bFR>lf)r%Vz9I<6_IVH?mjb-2%{J-4+t8AI_joiX~K&$K-8#Mype_Q0_o%;%>
zyf%+7DpvtRH)B@T!I^pozWMpo&Jz(6H@L77KsMRde(<ATce+tik;t9R9@czh^`>Zd
zyaZ17+3LKy#w%{Gd9NkoJOoLrCTAfR02?lqH}vSlJEPwvnM+b)9vN{N+d9F#WT96!
z6xC>69T6vq&Ed=)Wrs+-ai)u&30>53?3VG1U1XU{Tl{?)>@{NWeB5-JFHHGns0mXc
zDbV*+&*?k;rS%r|R_PY^X6a{N;f?J5q3q&#km%<Zv3AN%hF{81j_<)~XqF=!u(1h^
zv1ickw=<hfP9lxjr!VrF&Xo)&sv6St|5F`|r5J4mhRrWL0oxSKXYuCco}}hmJsR;h
z+}%IvU1hhz3SC2Z1cV0W>~+=1kX`z$IN#dUKR35=Z2K;;$7MU^{`uY{<ieMy%aixX
z;>j8_*Pzjxs_lo4<$X+6na|s28;-cM;$NjkvQ`*=c({DYbi3b6%=^WuGhRFRivNLx
zyNmXf+XU6&+~qIgn3y6e0>9|ik5|n~<E8^$BbO$@LfK&c_R}%4OP4u!uZtYQCM_GR
zp22LlyS|h>qLJ@_kkO8c%e}8zaAPH(2C=l@<V4o|stsk=yzm`R>t)MZaO`@U{(#5$
zUz_X4p4r=<OTL5P%}T>c9$=d`|Mu%sPDuT7D}9MLFjslvb8-JCrqFE1k6ToCN)AIC
z6aQ5cZTpU_U8oMTs1#EM3kUGo8LTmJdrBAA$DjSRRzXG{QhGzRbXD@Cuf1|e^j#LB
z4213sfJ1snB^;4&&u)W)Fgv=smfJ{iZp)VVx(X{oT2<u)-7iaV#r<L7<r}4LW7yxX
z4onDsR*}U#>~$X2$|lsE3VztD4-m`IH!f+1;6VWgF%Q5UDsri$f|~_ttb7`U+1K8E
zFl{XC@K*~^lLA19!s>xbjLZ?<j~H=8!;>eTvC8fR07Q2$0hlzAnN6Re&mPQu>D&7<
zK{{bmkKV~qqWcsR>lvODNucZt0_pcp6{KEdNnv(&5S3Vs@sB&NoXtf(yxB-~5BU^A
z`3_6HCT&NUT(RZvd*SA*G{@`n-7%xj+GNk$b@p^69=!UGGplTtKHC~RR!egNYsB#(
z3olA3RjsFD?R}O~sR<~BaMQfT(QgLT`Jmv4!Rg+n_yO^zvpR8he~+hnh0F*dxAmz{
z2mJi-<K?rg@w*ndDQoe105Zx^HkSv13KuvvdEV$J&Dk*&t`_v`^oGSpDpVLVs6&`(
zp_6kHm(yrCT(Yej6|UG@c;qB<ig@{^agynt+DR9lm2(n2m{ByBR)R42uGW;+W`oOH
z5<K(#WhT!t%oV*+OSW2p^Ih(>&(I3lK64{-2ld!~IhwcO1-4>tUr3!zhwsG#73F1F
zNYNmSP%MoN1MZSa7Bn0lW4x;WT?pN*z}&;OT|TsMvzm^w@$d4msWM63;5?fCjo@be
z>(&k?jJ}lJ(qRjhFnw`&JCa0cp;fB++<FW3ld#c&)#YgsQ$$;JC2`L7vp9sH{x{k%
zM=E{?o{GmrI4&LHgBPSfD*mp~Fp69R6!+<A)nT=MTq8@k{Aiq@#8=TzpZ=+tl6Q{B
zcr}h8S5(oVH|V_Kvl&-oQO3^3QIBAARPEVOrc^AF_q5Srf99b~*zMlajp+k@(<X%r
ztw@yGC(gy3G~W+D(?z`+UKBmM`a0#HfuBt}QR;qCEkDhGH3Gk@{_(+GH!@qh_jB*!
zDGqCL*kMHx2(Ioh7B%@niSC*K`U8=MK#(Z-!Wk@jdJa^bZaqm})(75Zx|W=b>fhQQ
zsKnvUKGgy#$K4<IaaO{R%bm(_5R&ZnWMi=Wqs5wkpuKK<h(jN7sX#9E4cn6vZKOj|
zb<5;5-reh&%t5dOK>{rvO`iMCnpT~Qqfqjr5iX1C-cSXEu)=m3Y%fN=_IH&6NH$lR
zX)Rm*Lk!P{JmZ)b;5_tG=>%9~;j+)23T)wztyNf-xHk!y@FJR{spL(y32tJIErW<y
z#e?K(*XxyOe@hoJNQ%yjq|&}k_HLMgSF74yFA<>`C*OO*tr_yP3aiiw1Mj#-<N{6M
z{u~v%#S5|*Q@^!zV5~}z*K1w54atY6`2&V+ZcVD?9WY>Z)AwZlX7LgHrRbLhvRloW
zidJ$%SIZwWNXxmpGkplWC`@tneQ&s?SnGdL?uU%>{29xGz-Qlv7v-EgJNyoi^?Vu-
zCg=H;^SL-qD^mnnM)WHu@kSK}rH&|7(H!kd>b3x}x|jNC1DUD}Z8v;AjNEoPZFl7B
zY9m_D>x%3RaruL1p2quS_1auIc_-p1ZH(*<+u;2Hg&26uwz*NP4Jt(?J<Qo^aUmb5
zdRi;uuN+@^G?CGCU8cr2m=#{6WMfIiOIhGS;lyxdL+yYiqS~Q~fp=+GxtlhrUsJOk
zHjRmcjUTUM93U{>Ua)fkzD5D0^M`uI-`%>KCf9HMF%tK`c*mkMw{8uOrLBCF|CEe>
z&@;U`C}*)EeTt^{eK@)yZZ!LzKvu<WGa}Df-@$q>UXbJv@7%Mx)Apj8RNSt%Pxp`g
z{R=7O*piN(XO4Pr+Ws(5z83$Pu$L0y|M=JN+-EVqep9ZlSESf%j$AWrD)`w0KQ|2@
zD|#0>4V~%F8aG^c&fZ)e$@4;Q&MWun{(@6@Y?uaoZg}(C$@kkt3h~7)n4kS<ppB-i
zkJhVsB10Nl@^Faf<+|Z1MDS9`g%~=KZK5{y<|}J_fQ6|476)s>zTn*>5a(@B!P^Da
zbXF#%Trr88!wUlC>X(iAUvn%$nl35S!)GT^b29!}_)*a94t)|;n)p|_S@^h+D6i1j
z_G)c?-~!zJ=d7PdIOq=8G2Kqq02%DQ%SAbE3@n{)jr`8bYs+RA;`*Z0a(veLXReCs
z=vz-hr4iP(l77g&`3~0~9&BMU)gkUEBQ4=!acnl}lM;apg2?;a1i`VlEvV!BI~%9%
ztMbD-{Dx6=jDc3rQ>P|;uzo&<#^bofN<FNBdG+Z1Tba{)yRvFm1GoDtPdKsn`}8cb
z8w36NJ{7eur{zR68T*bux2cxa;tecGz}|P26H~q%FI^k&uXm{5P-SfHTr+z4YK(;!
z>Xx5wWR91|JnTv^=K_mw@hLts$Mw>9Y90?ZJu9CIw{52R{@AdRH%_MSA2ps|TSa}3
z%Wu1zyer-jMx37vSNo=!ha)qFOUsz8Uf@P8=<OW0lXH}JD%&-m5P2?ZE||SPgCLrQ
zuG5q(f}4+-<r>_^XcdJJ#~#zArwWrE#Y9jn#VnH7OdP=o&$gbr>BFsyxB;r7H>#<a
zOh(A5znDMT{yahF!Bc1LRQRS0suPpexqgVaJi&L&vB*fFFxwJ+VMd>&uyulel0H_s
z#AeDWCZ2ewNXz_PHRFVZ5;{R8Xzf&ZHOP0PlhCZRqPTgFGF4R`I`*jea{f4)S#c)n
z=%=FY!Au`Q$eZ7cP?mF=UI|!=$#BY(;|}5I@y~W9yVf!LRcwZRt(BD?PoP*y-XXOh
zMpG^}!qvx)$D6XuW#ukd5HHkbH3jY{7?RF7k(*pP&c?9EFIURd@J*Y*`F(ozgZ-26
z;zjA|UU$q0EjPtn{jpd`CUAQA{fz#+Oqd#Zfj&2S-v@A;UboTTFW)}Bx7<xZS9{R=
zYd`qz;c9r(mipUE$6py{(P)jxt)Yt_+0clFFWjB1kETasBpl)djXfZ+*J+9;o)NLM
z5-+beCkEFU*x7d$@SxpF_N`l15=(#2(i~2g_1%!EL9ROdUL*NSu^t!$Nxe%|r4+5Y
zy{a__1U?UH)4e`B=QIVlkghHi+oZY+>F}E7v-*`60ta=#oll>Zl!tqN&*r<}?VSs)
zI$oOxK*Jc<o=c&EC8?q6B&31ZHRX9SZ=A+(=U2f)G;bcKZ~}WW^ovzNV;(-cuavc4
z?+<TWF!3CtxxH+bprVH2MdjWZB!lj@a?(ZzK%_Ykl@#INSY{QIn@IdixwRGxZ}epz
zXekH%i*P+n)2qCGF6XH3r{QNqrIUYj4sjBKO;O7ff`xtUi9tNz3#G0a1zQY+EfrTw
z-h$dagNNohE!;Ea+5pC8VbIt98k&oh)}lUVvG(hOcio*SQ@wjx#kcLvea4z%F5h(g
zW5d6(NTp=(ToSy)=M9TKDEX71Ewz)!SjA-&m1sic<{R0v)8*Qoh(vHdi-LJnl+NLp
zevW2yDn*e<#gqvvY30)MAk;*_`-<vpvM!aBu6bCZdcp?e^Yr^_g|l^CyNA9slA~pf
z3+s;RdG`xpph)%OL4ji@!G;?B#6EzBAK72l>fdY(Ss*YI3G!q1F@bsF2pAgzfXf<j
zGZ%Ogcyd+`o)4v7QnaM#%qemgO5D+#{o=)F@fYndOJFtGEhb8>N$HgosO7gGvbRO7
z8)Z<3tIm4WyEEMP*Q2NLL3H9eIVAPKMd40aQ2xE3iLnVg3r(3D+qL#59+tgNDV=%6
zaRiDROuq&j+!P)AKJM**;c|{_KV4HDa>We}4t!2cvrgwW#j@&t-bM682lMO$`(=UM
zp1mh6Q)<f7GWo}mk8@haTVHndjT>dJyr!sO{FC8S<V&<($kB00YOyK8nJ8tUGNN_L
z7ao}1X}&3(HRhN5iQ~0M_FKn&SucTCfT@u$Q)Tg;7Hy-7^IL<(?e3^hVJD|u@gY=M
z6SPJ^#||sfupw|{!l&z~Pojl)jZsuBe=*j8u=%?h?jPX@4c$Q_r2)#I^^~q>J+#Zd
z_t6-}_KL6RAspOX5!3gC%WOr)2UGO~jKMA!fc-X(=KgKi+$W!oNHy2eo82fu`=d|P
zwa1282ld%sb8wKjAi2@Es0-u<v^e%vyK2D1=v}pTz3*|8?qu1;YiPym{iaq_As?Av
zOcC4-xoYJ!^(N+`czL$p^YR28g#;c;#$77VFCmqs^Wf758vXypc(R~BgIuK1%|PR%
zj-G#jjfm=d^?<fz8<sf(><hm$3c(rZe1JrY6HPY9H-D&>_=j%0(7;dhr(GhCwGwkO
zO=r$nAD-Rm!rWtCj6LOr5;Ci3$|IC%c>OCE^Xr>#mPy_A#snG&oAKCO0_&%lM7F~a
zVh-R!Uz&M?qd!{O6wg|l&c}p=EKA|*2pH7I)M!goEnGHDd%D(>S)d#)FdzO2u`l`|
ztcRDmq+2DP{}UJq;p8xr1TFr4ACxm<PWj5Uy9m2cZ0aw{m#2#MHdumnxijD88RY$S
zB+QK(>dwyw_CD&|f+v#E?JHQdYX-+T8?&P4{-|Tb{J`PC9Wy=MsRiMc7@K<o$tD(u
z>BJEiO6xY;Q+kUUuLp9t!Mb4R!W#WFq;wjRHt5he?gS3<>D#M?y%4tTI`{qB4PUpM
zje@pwQ?G+(1TNGYQLi2^bM=+K$41U@E8#(Icv$*nC6cVqKj3GN#-s(6vhf)2#)k_v
zO(pEbb?F?R=`VA)bH5lt$eNr6(0%{86Hvlm^k<=lLdLjUwL$jD%xz`KTs?2^2bUJ2
z>Z-}5>&UG6n9&&mnLaUb*`E{SEN43rHu)hLf=<|B0@HMsdtVg!D?_vWMY_NQv9rnq
z1bS~K0#NQ&5Uw_H%0@*~EqsJ|;dxd}L$QzqdL0y&agf?xGHP!|^qNEEt=$UYrl7ba
zcD9eN<@clhTet6aoYQ0NYf-dMqQRBkD$u@b(WU7>s(mE~9U2G@F^4s|%WO?!vttFf
zT+EU3Np%lAW{!o<2cIj_?!19t4cj8CG})LN)dY}(yF8DT+c{6)<@3SjmC%Q~9^#zl
zyQ?>_YMPJV21g-VUTPUAGd%SVzW`zLk9iZx#Iggjn2Y&>;4Bzj;{dD(?t<h-$E=N>
zDKdK7W9DLLcY8?nc2=$v768-Oy8s4&|BLD!NZd;im+!_~z&)K(-v=LoVyB5B{mD{O
z9DICy<MO|c8<{yjv0uVLG+b{;M&i5LyuHysbjP*LvlC@H#q)y4#;cSk#;dk2;SXP%
z7JfWVrGFGKB{6F?=RLI*_8nu~oOW|Lmq!B<Uppym54LF&_63LgZw0D*NTYS5aDG#1
zY`g$#Lq6vbLASj1X;N}rTA#Cjxh~PyJr_)KKc_qwU&{3hu0YG<PCr#>hdGcQi1-D}
z0S7R<Plsm?4KIP+w6vRV)ypT#8WJpPTD|$Tf5G0fM!=8jJQ3XqM=q23I5T-Q_#yLR
zDo61-|2~PkPg~VSI3Yjg`yrj@25~xJ=#p{d;<?iLOLe^yD_YZsGLJd89%SvDQ!5PK
zPFz$CeJSF1WiYSXXzj40YDfJ{WumBaV@p!)O;=9^F@fhmoWg152}D)UZtG@@1gv$_
z$b}CSp2+qghM(x`tH|LY9z5CjE%Xv?%7|59J;scQ;f?#FFHD2Y$0mBw<ZFHnxVnIU
zpY;7TR!lYGPn6alBYuf#yemBMKPm>H0R{am;6I(P=Fgu8jyoq}8@XEeaMd(BOwW7O
z1v1tBVBw1}iYrp%bfp*)$Ocn-ymkOJ6pL%@IdOKX5SLypscAf8W__!$7tgq1g5kBJ
zr`UoYk%z%v?d{Que^hHAd2?Z*O=G;h%_S}liAJ*Q*;txZnUm5vYmJ?de;g~Qg-;hh
zn<{)TWA~5Q?BzZVcG?@COHy*%`F7ti$=tf>+6y`pi1HXXc-j?eGrWcoX*<P$ftp*O
zm%>vprHC;wlZWI^e6@)$%~&OF3+FKQK4K!Ftq&HFc!+F%xY~#=fu~m#oqHPRK1V{D
zuhyyD^G<iC%JFkinQ~FfLm6)Yz7XwvZzgoE-Zk^rFO0RdwXb2{x<8JXZSwci2%r4M
zk|21r9@1hYL)}0hUIKEVA`_N1-8^I}`<ScLP*v4g-+#1mZd?jCkA>}s-L2fM@7Sg5
z&qPstEnC_+XpHhtyyO0|_+FqJK9JdW8Nh5n4YeX?xBaD!OoQHYyi`yD4B=*Cnzj2B
zm8K5fCr1scg(KCOi)aEabe@dcs+=g~5-6QT!xAPxzrSWQwNM*-T&O!ju)`X|9CRU=
zaJ=m7`@fhp+FHRL3F$!LD0t=p#eRaB8fm8DM2Qp&CduK-PnqYGa0&LlW%ORrNlThO
z=<FH1G0rVvgp5rXCdB0>gV(gCFW*BRm@Q9wBy|bJ7M{0BGY7P?Do^pSum}5V;>ilG
zO2)pj2w~AkWKxRbVTsdgdJl`K-sR~z%l3rCCY$HuQ)m(Ey(m=d{2DyGX-pC}z&l|w
zdCO%z+d$gc$;1KzNlQtgA0Hq80LcA9-D(pnm#T^?^YW7~j*e4nPL0dUCU69TzB(Nf
zn}}-2ERnV;bvxAdI-lFz0c`I1sf~~B$;k)uR(dxP@WfsR=BFNSy&o*WfYl+y=8CV~
zX}64z!p+*u$Z|0?BDyMR*usNL`1?_8KyJ~&+Ign8Vl&0T1873RM|6nWs3qV{MMVKG
z-b4tIZUFn#jp|u{6alpT@jx5@R*eo9;a~B<F*r|up7c22skz{bvE`1ObY5hHCW+%B
z=CAHK+F-rUnop=0_iJ0xfTK3O_IwT()hGc^${$?^@T%#2Y1k_zh~$e8PS1AmIq4W5
zMB5ncs?%yBX!q|1Wbs7_5cqo+n8>{8gSdEM)x6W?&hUbNO~BaL*s=Q7QhTUIHl$kN
zz6Jmf-+K1ae;&k(u3mhS@cjGK0N!B~hm?^bHyQYwUt}a;8z+&ND6kZWlT@*;m8Vs4
zG;fv5`*xU9;x5_WLVv7S&Mp$!kVuL+-<!&pYT*%M!5tJoA-EYV@k3TDDhLktwxp}3
zSFo0zI*hG!!KUq13NN1Mh(uD`$%B!m1U5e2dPWcxjxB|(<J&g|4XJ$pMVgTD)(Yl`
zTq}$XXF}(jVjYnUQuE$5h%WA_hNPUc76`4N<g>!<L9C!QM5g*Jp8DDi>nvwR;k}R6
zHVt*Bvd9(o#I+t@q#sB4AP0~OgWf}+DF$vQnZqwUd{_a1q8Zl_a)!t<sZzlUL`^l#
zaCvBR08eX@o*5l#g@oWi$k%(rTKK3k5gW$)iF*mOdc7?%i?9W;M|bQdL*D1uPW%LN
zuI<kDL<(}o3PLB}%F1}K(`Tw|-U2&Fk5oY(X<-~QP2M7pz4vBoV}n}+Y<s#t_i;I;
zzWh4CJD%S6myV#~Ya4jbI-!`gE8qu@R<K5k(;g9lZnFRUdJr-Ri3DtH1|s~=127e}
zQX{q59E~czu$kAHoBUYy@#VIt9EwyqfmZv94%kVuxz0xpM&allj>@WyfD%fa{yg;z
zvIV#Gut_XWB59vi-(e)bp;ddFeg6|9AvJE)qTu^{NN^J#?$?D#+J~EFoHkhA=q-)>
z{2gJtN`}Be9=fV~kNFRLJQ(+nu$jHMXujlETQWgp@)>+A2h`B+A~wOOl(Fig6Hebh
z2YrUVcM(a|wky8Pw*k!$_c-Jn`mLS^zJ7L1jmRI;8mVfaiiHu0>ro$-_jyJCA`tj2
z7q!wI)u)Dxi;DwrJXQ<J1e>*>m$8U&7&3!`?+vE;{x{t3?EVj37ztAakJxu&yd-?1
z;Zdu)x4zWSw7<(*y``rX28WEJ{%{hZu;~|+8Fuj;1WKKIR}rel8PO48NH~kqpRgvo
zI2sOHgcc-ekJibBixilhxDaI%&a~tSsOPdCJlDUqAhgAnLZNlc+sn+&5gL51krH?|
z;_rJ);hK)^sBWz6r~o9!)9c{Q-oZ>4XXEwULp!`iQZgpI35`%>TlYw|=TS2&oX#x8
z;g>I9SwLzSPxg+L0i+*lj>Nx^yW%G9Ky^2q4S3=^Lbt?G$)m;f=kT=d(h7@o_2bH0
z*xNz7CSVXE#AqQh_2RboAux9*<zYd-IDkK~p$b4b0q5ApBal_<fb8tvr8Z%!o`x(#
z#Q0em&AJtoYe4n5^kik&)RwO<$@*RO)U$*JK6FYf5$%%j29v>5G4QO6jO{Cul-GUf
zhvfQEb>=-n$pO6SVy-lGn>d;IQY>`?_-{F5<$(z+M8=-7pxw3Ayj@)JoF$-21K(o~
z2kQAZ!q_O!w31RSnMa#V+<%Lto9~o=$}e&y=n5&`{9eST8!vyx0ew}jG0LFvuOSLm
zR>lCP;rskduQ5g|4_?A&I!G$`npy)dd){K~5D>WYbvxPY3o-6pWBcBpT|6?~TFajR
z@}f$N#E`_Vf^ARhqM9x`b-kcp($6BtF<`+ip6CjkuM~r_THQCM?y_#6E0~-2#cYD1
z-k<gt=Zk%ps~3FbI#VG9QG;#!?VsMmn#jdlx!umrfJOdF97?7*`JNenlvua@&cGAr
z0alF(A5O6IFLl<+g~z$D>$lRrUO^I~r+I{p^efH6nC)lenQ6x9(s@obSHfBzOblGv
zn5jFAzSQf5WC)SDq0tJ1Q9WN<A;cG;kX?TSYGGdZM$sD(f;eCt2gimQoWz9qklNU?
zc;aJb{AqCd(Uujrv>m}sjcg058$0`y@x43mQ9DUL;<-eI&#V?mG-F-mUD6Xc@Z-j)
zf%NFNm1)GvZb*FZOIJJiWs;iT2P6`O7E`2Rr_0J70SiSULpixBNDxxP%?eJ5EoBRS
zuLwAU$$&F2b;@j0FjnAWauMhKHSp!OJH`TyGm0&{Ct}#f;-I<ILw83|q$AkIgvCZ;
zpga%=I%Pur1qr-|x&eY#^$lx^8wEAwh!{Tikic_q_K|m5K(+2KN&z#0EBim$$qAFS
z^L-{SXmf3)&!T2Pe9RcUWn_gVc9lk)-mS|ph}II|5YZS*aUMUGe!u;llsrW)ewc&o
z3(;|8BTl4I<PF(r0!^f?Y)oP!`dkFVa62RZ3UxV`L<L4wbX-Dt6~<fg5gWT)as=@@
ziukv2l|sT&Oi#(^5CfGd8FNPX>JFn__r!_VjPdt_ivI?3{6A41G%3Qh62*l!ydi!z
zEoiz4x*>~`$oc|Eq)+&oL+BEP?>qeLZ#-N|;&_9jv4_g}0h~xhUaR#4Snp{|ZT*Ff
zMRET9?F}tJEIeVfE0%SdG7HHl=*^Ph0tQS`DG)RoM872ylC=YLe@5~z7~jI`(%@mp
zo4quLFtNyzHpfZVYk{)Iea1U=WackRaVN{jAA6f{%?RP!%zMyQEr}TKzPggpBl{Md
z&%^XklicYlaU0*yN}8@Nnga~sc#zz?)O6sJ9i8oWxiAl`5QA?SHNr>;;MHbSJ4xF3
z8jRp@jzL0j5-_C(LDb<GsAm-V1RE{tib-n>VAnk0Z5!Uu(s3O=&i?s4dsMsaFKTx3
zql>Wk=SKjfLk(rpNQre^xX!LP&Fw&C#<MMvZ)@a#_F?S@d$07r8EVwjgsZPt|M`im
z*tA$ISt?@=vNIXG{@RtGJq;mEz_x>273TVAZsKL@N=`EPzFcD-jiQ2%i2+x4Po-J^
zfkvdzq!)_0bNU1bzJplhk=^%eJE#vHYv*p)jZ98i<F0Eb7Gx}UcgSid9ZH!kmyV~b
zB>fD?AXe{P#n`I?UOyu^EbWxrsrFb;72qEhTIZU_*PN#3r;_GWEORt3C@cVxH~_Z_
zj}5_{by@5hbGkDuSxLo+gwtM<KX~3RuGPMV5g|`S(ld6d)qw%WQ@T0Q^p3li15b87
znCoZ(n<0&uz%VAl2Vt>UE(wEZ<++&WQbUnOd5yo(VnzE(>AYzFzI8GFvrJuumKP<%
z<B`N%TAL9Bud+HWb$sA9rzE-k#i7kZh@qOX$(N!MuO|6j*pfGljl1=gDs~ptu<5{S
z3m)}jAvxiXt)foVt5p}K-yQu|OS9zd)FP31&L*r<wzTCGn;gm^{<>t3)V$wVc1M}7
z;D6k^^tJka6fs7zal)i2=`(s_{}7d(y{4(7Gv2IrbKcQoD`>wi5NXg5-k4+8&V65k
zs~FYBe?&1`MI9=4jOUgu->N=~piTB9TX?v=dHXiE#)URd`kfCceYL(h9Y{TkT8@*K
zI)Wvd!zLz2K5lvsi&3BLEzmD+r@4pC+0{Lq3T_?+t*W<Ai(r#Av1*YuK4D{w^6lvo
zv;UgcVP)s**QttA^4XNhn&G_s>t){emETRbDL}8Ds0NbEbyMEDn?49e{v+Qmfq)H%
zLP|g^1et`pL!MobV08=M*vbTJa=h+zYfNiUK;S2gE~PJ|F-Q@9{z4o_aAAFrnTj)M
zKRa?K!~?rzgy=CDkO0rrO}CczNC`0zX9@=Y9}VgjF6S$z4;K?xgT|7DB2)7x7RLl^
zRxMB=iE27ez-C5}$3!eP!;{U-($ex{0!C}K4yQpsQ=L$;ur=luc-|`~B$>R2;qBF?
zDeKr<T4-8e>Mbz0cq}WZ=mhVeVs+P;D^IWD(h^WMU+v;k2_E+_2pf{39eP}+|3{~N
z2T0=(R!##Y{qupQ=8^Dr47d-^z=0_+x`^$ac|Fjd?g+6F@XmfQTGnhM6Nzvg2t+t1
zk_fD6B^m@GFOqaY7$g4BFs>0_^6wM7T~9+X&K*wOCpVb*QqqEkp{O6aJ|r8QdPY@J
zH07&Q%fC)GdA5HeODKZ7FjicRzADjMC4HjW?_Z`2A`T<cPiC*}*H38pLRDddn%o<W
zK=Ku<haeq)ArC>Udsn3iHKGwr(1;J_rpL!5r+fr&Lrag%R2CrfiC%m*{o%9dSE|Kt
z<+|5t*xB<>f~?!+1k>#=w5e;|$Z-be{8hH`z!5^~kFxRPmZXgm8L`xYt8Py%v-WDk
zfC0B!s^qjg%|}-69^INnco6lApD9>1BvU#-9Xkt7-$)yS{V~;C9&$0kTnPE{pi<Vo
zRJw-gsTWy_LqR;Ug6vj`T6lF$H{EdOj{(;SKIlwTY(vdhXT+i*mxGm;g^;J+0rzf0
z`D~cT<#W%q|3d5hhA?_K!P+|1;5p4u8Y=4-5LhexLxy#DY!e%;5_wMr*nV+Yufjr*
ziHYM|)6)Vp0G%V?6^W#V#_h<C)ncPV<s2R3WF)Vr^NUU77n-cIEgba^Pf>lGQl9DN
z;jO4H<=FA(P|5`Hn_Wi<et`s7m|W({hO<FvYK58zQza|0J*<!3+xs^^ECDO$79(J2
zoyDtQC{dv>1~X6H1dJSH0FS2c;L^UWW>V(MwOUfQEhf=X49>G#j+=-j1bz>9epm3C
zQExtzG%L+s_oa^I=9Q1!<VBB`@8+~!bT;G;Vzj6cB;`W6Sx+Yuf`oDH<#XukJmI3L
zE1+1J?W0IWxjTsoCF*2nq?v)*M%WzIZ_UW?GgSjuY1D&$wcR+0>nrP5k#ib$wpDg+
zev1A&e?m+dbe`Ib)yN(*+)a-q?DCVMk)HMunYsKRa9o)Jx)N8ymraH^Pk0`jA&|t~
z&J<|81-?)usE+K6R~!F|5W8aZDX8DJD)PJiJ;Ci(GPeWdq}(9uz|cw4w|bOBhL@?v
z7Vnm{!QaGLutp}^wVwH6Dr06Z3uTwVw-O6;9G1GoZcpsmjabKe92e48CzXJf4z%!5
zrSPnvvFR`XS58JU(N$SIR-IDeZcSc?@Ic)n5x(DigIKYL3U|FE7Zb-umcm$o{r+z#
z0Xy$>H00y9bGq7FaMAp&0Xn4famr{vtHzj5al<Gp$1A+@zcfQu0b&)30VHb3E-P;P
zffs+BzlAPzNnhIj37nGdF%zx|Li$=->4px8>imn1Gy(9O1~pc!_R7oO2r%EW)-^>*
zMUik!YUKE!MAX$t&KoFrPEBJVebhEsDZB-hEgvh6hCm%LRp#)&P9UZa+vv&7^KX|e
zA7x=5dODC~YGG*A8k#5I6)>qe)9`wMMX~4owO1jW%muek>^Bzdvo9k{dQ{GunslGJ
zcPYGj>5a;N11^&hD~_5$KMh2;`4UCi6LlrmHh7a$w{OGebQi{V>h(akyHi99Qi{7K
z;|0@{i-uMfJQpm>W6;;Br!k~dv>I~q^L|yaho5c{|Af8XYl{9i^;Wmer?%HM)S>yD
zycg*|DE2;Q&_8-MpL4SHWxHn1^_EyymZ>o<mwr;oY~xwWd0fMSr%xF%0@Tk|_!z46
zYe*mFt(eI@{_3YxZiXCLwlKuj)I~7Re5x#G2cYvQT@u&tMdKxXW-oqlxR*K5fyXF6
zhnjIX2(nx~x$<{({ZV^?zne*9)bpA(frEi70)Ryt*bNap{qw#NHjxk2=%w)O9K-vL
zo_vXn%}u2agnq6<WSBjiNnS>>&SU4NaP(;SD+{GW_)8qImpMTUG2N~SV#?Uan19)W
zql`E(n-d1$gwFNR<rkv1vrU<3K-!QZK$3_tvycw5BF{YoV9t9NSiv${6>ZPGyJjRE
z&tGi*ok@p-^dq9zUzHrqx51G6Qj}Z?&*>@_7f|C>+Ox^N=2ZC5+{)DH?Hy1ta)26|
zRATa`M&c0LHX>@~3ve%Id!}477HoWdIOhs5@`Gs};5m4if8~rysu22h*T~ZL#vedP
z#eJ^Oipo}u6{kZ8fD&NgB1oCIPs6O_>~)`Wj=r@KyfHpcs+lvOgfdjEmKC!~{r<ux
zhLi*N2RvAS>Z@E3$tx?i;ee-+NOmd+kjE@pwR&6On!KT?i%yB1J!kJwAa@u<v$M3}
zCiQcj_I}c`T-5&R|JZErs4OU3P(QDU#t=`jlUFfrsKRBfY$wt{_3K_J$I`%s>(9XV
z!vkcXB|i3s>|gJ-QB|PtuD$V01|!<i8sCwP+TqOrNIw%`=xG4thk7cz4#_@2MMsFK
z7AOnaoLHu#b$VKyHC|0iKIspolh}?1JNtgnov}<uAjTH%Zf1-^{NJ2^Sm^L~T*$cX
zPy$CF0+yDQaF(7b8R?85IF*0yi=XKSzRi`^y>FDTzdernBjWT(6&b(Um$>>Lz+fH&
zqRSonqGAD~j6vPGB9IEm_aK{k!?G>ERR_&BjxQ2quwPEzgz$kUb66)o@G(Epv`6!5
zI-HE#2*F{adIbMhLjD67W_=7ld<glYRGRR4+0S5PHpBGgEB#$YNZff^BYrGdQTH)F
z<>5j?6fzYrfvZ!gYPM(nN7Z>79yOH8#hkSp1zf8iB+q1FBT4f??SE5@sp`N|aUR<X
z!~g7jKvd4E_G0ZMG+0(Z7(x6MMa-<>OAY|Hj2=qmU8rp3SaD2*z>5Tw;`^fzV`qN5
zCD{2{h7&831VF0-jwRAM@bzCH!}uzq$66rCoVp-3DUc1zx>j$-zg7bggrrt<uf$}D
zGu{FL?L`{yRa0^Uwpwx-*Gvv>SCb6IMh$6V1@1R=27e0(JJ+7BW*fY6mF-t9-#>#8
zexzAaxDu8|jmwF0qfc`qF^JnuwTb{Tf=plwM7;pd9iy>dR&D^0D*qG^t`oBnL%PYB
zkE#hM>OPtDhJ8Hc(F-Lq{a6m|zSO9s-OFUYB7UHq0N(Y3O9>j9`X>OAS&ZulEw9$h
zINo)&7HP2Cc9@j?Q0AU88d)@i;Dr3#FQ^;)tpyqdn4ZPMPTG>nV_^XjLtt>CW0c3D
z>;H}5v^|cgp6UAmubid*RIZ7qkU|kNUNI-~XL^6@h=*ma<jMHX1ti01&K4Va62NBk
zqT>1bE0JfZjs(nu`i10hR5A=568!Haw`^u+L7w0I`b7_RISpF>==ph&uoZ3mAFTBB
zG)H}FcZ`Bd<Y`EsKr62(PSZ2@5}g<R#xVy;VC_WKTuvdxd~;saLHkl0O=TXKpZt9N
z!#|>uMWGj{1(;(^d)&JU_dR#4K&dbSBY#Z+tL}?i|M>Pu<f!?>-}1qhuGScKCt)`q
z&R!yNUdFrKK9wmmrnswqVyG$LP{no2<6&hvmJfOI(!%mzi+a+y*(3Y*F7l}tia6^=
zKMIwKnFi+|Z8Ct%)A0M`wf$l;12ffFBhB4M6MA^pv><-j1S!3^Y<lsg7JVTw09@61
zf%w7&U<AExO>?x{>F~<MovZyVI^EqYA!g$1{aUVbRuf)m=p-^D3hn!^t2F$*%L^<u
zjn6udax9@=u9gWs9gc6S!9qHk`gI<UACDt4X_MSR0Vp~7xIC-YcoU1PEP5_`DX>-R
z8>hh*aJ3Ub)z`L-=bCt1s0IG6OOBC*&3oaTf0-YUbYw>$5K5xPGwD*{i{uTYH-qw}
zd_||CRuVbxDVSfSb(;juAbUHSwhLCoz`w8dx9j~){c6vS{>R<=kdgpL0*LoVXi|e&
zcv8^MtWjGP1z0EICUGjO&m@R1mrsTb{DnAult*vcg);;tWaZN0<}6gu1}Z5$E`YEg
zgOyEKNI9Kg{5f!haAzm8Nn-9J4`qjt$SZ7%f6TUao)h6URbd;~2!Dyail5;}anZNs
zMkcR>nwtrwwu%!IKjbH#G@!DRwJk;a(dI;)m$a^fNX2>#t1bV%{NIt=WTJR7?3e1N
zP5DT(Kn_n!YcLZgGL1J%QZp|8Ktj!5pt!Mj`Xq?~(e=qD&MP(QWzBD!2W}&az(7{?
ztj6+-N8SWt+OEfh=0F!Pm2s81T{7C+8mBKe_S!>QXYJ$G?o}1YE|$1ZRQvzl`>=oS
zy;wg|qI+4z`8^~wq^LQ&2FtfXpPoSMgc70b*cXT}D|1qfDFIvflmQ#pmObR0-mviO
zUi-YdE+KN`?j`7@^0-fNQ7@4}i{juf56RpxZKN|20{k7z>bZW%#`Sk5e`6T`nrxv6
zzUwA`E#eKp0;u#ouIYNV|H}E$SfzW0p@h|2K&#_>^F#~Rw0vw*-#O6O;%I3{i-c9*
z`rY0pU-O6$L*?2;mZJBF@?y2beTT%u?Z`)?-l5YpUx$s21yzS*Y_BTnmflrU2rDY_
zXI8<SK~R=-pBOaOHYQtP&&&dLMb8`noAQD=lD@Yj(ZW7iq+yx$gfPKT(#+g&5T_II
zzbbxXGgH<2h6|S=;)7(LTOn8j@{i@!?}H)l2p@5^3KKvdsV!0c3|$ldmLO`1`~hlA
zN1E|g*FH1|kRniuY97+=?hAO4NELbgqF&(nesy;9lnL}(3miarUm@csmvcgD_T00{
z{(;0VkvCq;)2}KgC?%Z1*XIW#^kky^&SIE|vZvT$TW;!HNaoqo#^#0Rc9z3w7Cf|l
zVww|mitd?>bw824bWjBi%R+KrFq3Ef>2Bt^53yHRsruDD?goIf&HslXLpxza*$t^5
zfMZl+nkxB$FjmC%WaY$3<J*#ps~|~5hrcb>2N)DLB+_;kudj9FjZ1xuK<u6H|3}q-
z#>4r3U%+S@qJ$uXXo=oC(M4xQ9lf_8qehQTv>^Hzy(Ek>q8l}cE<_u>2T?}vqCa=O
zzvrCuKX1J9;l;J@Yp=ETTKfXL<GSsb0FcA79^<p@t`vvY(<CgOWGU{?e1UDv_ds+)
zy6h!0#GAr?4<n3vEhB0KO+hYK>EoQfTY1}lt)b;hBHSU@#l6e7bX;5m8c@-vU*<j~
zf)jO(!X=BGt@S6=KCsYPJ8c3tZdEP9slcjVkg@1R+ub1!;LPK>zByk~iz{3*xgwAI
zlKwur6!x$r6RirdueVcyj6Ns=zE+${*6Jk5@^IoSix$g@4tkd31XEu8@*gHltl4Ch
zH0$katkc@2JpcP*5u%6(z|;-?wV{E6BS7C07DeUp7&KV0dyf9c^qz#pY2Et_SFp61
z*8A(&XUX-qlWB>E4L<wqY~N)80N9<+xITPkfo*uxEgQ_rd)^w58y^)QA1gy`*<3n<
zYMZn?%VmC4i?I|9Wr#RZaQI5|y}9h@1W{!cS+#4+TTwK(!CvZmXKSr0%Gzz-11f_M
z!1K5HA4@`;r2%tor>|+MChWcTv@#E)D0HBuAvU*MDK|Md<qa$vE<D;>=u`?bkGD-m
z4`)+=*>q<?P|9aqAHP20KwaazYn1E)zpbKe>CB$3G=lt$==i34X|UF<^*u-Ze>mUz
zAI{gHg0)`GZuer?oJ^(1UNp5<z3`Q4d%EK}Mbu3&<rsm`33bvQnKOa6e#0sR38-=v
zxT_&Pu&bv>Cl`X=vv-b(f!%1PHYG&@*YT*7ijl1;F!yop&1u`>G%e&~g#Fw;83X~+
z6k`F|AZs%Tz(N~NT?IDA22C)d!${8QFdpV8qr=l{$GJH7peSPi#!W<5lt5d;N1T4Y
z5&uS@+`G4BOaLYw;NcZ1fHA%L3f$rEw%{Kg={w(kS_-<O3A(+oOU}o%clKIrQ^l-h
zo)xPk_RsEyGnP=O<UboLke$2v$ZOxc6zlT<R=$8s`Vp-wq>0?u$E!iv^p%Q4;Xfa*
zU&Pl0;b(VgvU7USvvRSq$yi#xlKB3R7d@?ujre+YHB&mWG(yKPIQe7NUBI8gZJ8KG
znD0{x1VodJ<d&4;5T~WEQ$9{fB=Vgtre;{8bM7Fs;jzLthy@_<0taqYfADj1?r{c;
zq$5sl^5NG-fMHDq%3RVU?3ZDA*@4gV105I$FuLMDI&2LyGtwA?%RUQGpQy@GgV_`!
z_5^laV51q9s&gWR>W#^*9NQqhjlktP^$<1H_-l~i2P(ppQGjs`FjAwvXd9R&nRD{&
zZTGoS15JmKEToBWPy;c{(gQJ)XPT$`5}P|U_MZZP^7u~y5S4+Jnh_5}H!t@lMviYX
zEh^e(6gQh)x*hlZDZc%Z3mRZ#V;yRyOT#O>j6&I_Ps(aziRgwDq1Yc{n{`k7D2v5u
z>Sl|1QyxD6Gv*pACr>7_lGQJjhCu+@18k;-fKt2!jN)l~sQ&r*vCA<8;9kyXrBsZ=
zTG?Nk6aP*@#Vh;wxPN*B;?=X~bEnYNIm{((xJ$Mae=X+PIf{#$!qNFt%atW0<X@U8
zGeFvferq+VxN4*WL(7YIf$c7BH$5XKM2G^YbqCbhl5OWfa+Twll)}qcan4+oCPAaR
z?<#K~_KiyoZOm#-W^8Kg&duh{51C87EzXc`6eRyyStEvpDK1m#TYvMa>*bc9eqjPN
zLGB<dRz$b@#l^+@^OIg>20MZ@<K~;zJ5FiU8vMwySr0h7=?ZPkVX|pB`SsZBtezs*
zvK{J6Wo^)Ypl8Q?W<^^_N0>((Lhbu$tAw<y)6Ivn>k^9R2Y`uTDW~NHfxO0Bn^!}<
zkqD*jrbUgE6h~*MrF@rm2tp^K@N#GWM?zxg@8?_LVc*`tMTE@X^{=M@n-=CgnKeY=
zQo@`mp%{rdn;?l_ZY&+&F3ob$nd9mjnkouT2e4}$=NWJO$JQ2<@B~D{Qv@Ris(Z`^
zAbrzoVd?$#q$HU`Nktx}pmd}WA(Kgb&%=>b1F96xUahr@Vh_nCHJkTqryl<a>C|A+
zv?E`)m?n{}CxDrI0{?@#-0*o;urGt-3ZH`wVJDi6duF6o`E6b?L7|&qiVUOpFlQ?^
zIK?hK`nL|TM#@u^o(d0LEh~PyO|L8Fh)g(1vk`QrV;$kwx+PfB!OzkyU$T+~^d4lE
zHv7Gj1a@Es5rJ6v+`%_4Mn0Ae;TsToq74VPGDm#b<n7VGE|ls{+UjLWpgR@41)N_i
z04~TB2y+26AO`-D2jUuwU2&wZpXPW+BRJWdRMOtDDQQC;Zqb_$0hO3$?`A*f@7i+(
zL0$DsVa6;Vs!?%ZNE#PjT2ra&M)xdOr?w$#kWn|hVBD?ZdzXsB+|7=z4KKko;X`7W
z`Z0I=vtcU{Mcq7)eOHtwa^ANB4}_10mynr>Kb4Xs{V777pY=(SY>C#(TDuGDPbx2e
znOZHkNa5sc^IO*OJ_^O=`B+$ZDxCx%!GhL52A7*Z(eHC7`etF%tTh0yuKR3{i=Q*e
zX=;@GH((u5G=?fZ#rLx8&c2dlEgprG{+k`gA&Q)-I|V!0*v*wM{?rh%&L@wt0^Ph;
zrc#Hn@Z?XJwASjx{6Esh1L#Qrc5BoW^Ehc}+rme9)Q%l*ahdH2dL5Ee_^w;kdDHfA
z4Zm5sK>xAf(F0zzU;(z{7=x@y1gpo$JqHEUN=@NHpNyLA%b#ae6R~Jy_aeZl_PRP=
zOg)?fda@8*r}HhN{Rz|(xT-dD6kBiHm&ds+Rkq|A_$pJ$k{`9wTqv_7ie=<Jxti>H
zE8BFUiet)?VSE{s_29yFDYUNG0Xp;HDV&g^^69$X7gkBPSWBq$+G~RbOCC9SchQVJ
ztv6#&E+!h>&y}vv+wQvW-oCrsu4qGsYxCtu5#*tJVKCh{OS2Cr+q(^3xNGLT1k9J}
ziHei8a~uq84vqSt<o>xmg=3W`*I>ReZ>qv8m_>#+U*QLGOLV{NuLEvb6Emhb8fn7~
zegNO0*Zufl>uYP4+mmJQUC-M;8OA|aZQMcnGIJwzvo-#FKW%B?ScO0AZuB_MXFjuC
z=Ex#X#GRZnZIbqv+yOQgw_<>7Wt9>0swIpd!VJtFg&%v9DM=pIfQ<3rfgBf9lb078
zGj&(N-7%x};OAbKR<3-V=rgA|{x^V^dYsk3_i+AHu@~~ii<YB%w(kv`8v$ZdbrfU-
zTuFHb{Xb6D^vy(j0oBDl@*n9E`Hyo+<iUQI->}B>0iKa5EY9o(2{OeTAHcyG3CQ;&
zb~yy3HkAe(Hex(lc%R*cRk-7|P3|$(Zp7GTAdRpQv=A~L^JkD~$w;K@a!0t)8o6$q
zOdZrd;UrM=1qTQ=83BBi<w{eA+XcMr8nDR%Q1gq3{Nb#}pUsm#8J3suCXBy4R{ozM
zIag4zLNL*PFc(mi<F9DP3f24+jpxe6m#JROS1uENTJn8r)9aGAGhJ_x?DO%}SEweI
zoWgyz=Y1pN!d7%=`sT^k`RAm8KqHSRJl|W;#xJsxAOpS8u~F95-QYIqxMt$8T+b%B
z>I*=T6vRAwnSxLbPcN`yOsSub)G1a^j-K7aV$I&t{rvM0f;K$uw^?vW4%T!UDs@m@
z()WawkWT9QhvvVXD!_7{h7W%&!j|zavLH^K_udU3by`>lrHLtZ3UE^8d`YjYB<idr
z22;QRS=MELX-TmNah)ZF2R9Sf97N~alr$b4yICh&N(=_0*0j}LNRlVsZ*Oq@!`X{w
z=I+qU0JEzfIz4uKn>v^!mSoDDwQg|vw-Pps!T2#a*0V4o#xf-&XE1YQz)L#z!Z!Wd
z@rbSH*&}O#uOe`%8H4`YpLr~7z;`QT_Ya@N{12Wn!&;ATan^_)ARc+s#d`^ij~q8D
z<SEU~6^Rsf_6a;!H1naTVx?@^=$>HY(G6yM#ehPPa)Ra#QZ~}rJ4^5+%Iws<e#&Td
zYt_{&m<WCyp|5;;L(a%SUlJ_{<w=1;CNyW|uo2_F8X~h3FXbU$2$Z^`ARp1?5tf@$
z;sn+^q!cj7lls}P3g&@SiJLKJSnrCr*ptHj;h+ZWqt({l-|g^<clJg~_!!7`cOt8(
z2iaV_snXfvKqcYQAaCNx_~$PeZY{LO>jz_TE3<?92c1OHl|k2mmnuS8(T6(sbZq3y
zN;kz89VV?O(VmsKbGTQrDbctP;)GepX^u=4b_G)a%n_)p)u=GVJJoTj*|Qb^eeRq9
zq)%@7l>pS+xZcVCfvOtJ;aWiZ?_%b81O4CDli$1bc-9*ta&xSjlY#q@x7bo?Z)rXv
zLVg|)4oBp>&=*qqk^<`nZ#mhP;FZ%DttwdF$$*BmoyH}QgBYq26i&{cZ+2-5^>UI<
z$}L<|{~yc`L(MNfs%Sf7mm6DZof|+S06|Wjup~dyA>VU*!*#<A;Omj!I_EfODLLvD
z6snep4}EeS-dUuVlw8-Qgxm*b31h>D1W+G14M1$#%|K6_dpAJa78_~<Ai(~b=bDv%
zbY9uTfiJ3RN84*V?ab!`R?F)54}F`!cGH`F8XW&z8QoR2nD&!_p@qQJAo1MWErjTA
zBL+E44bcI^)#n1UzaPT3{ec|k{^JuV8oJ<;2XK&m+5-8Ba7+plk3%S1Hn|ZRmy%Ku
zX>xCZ*Fx+EGnoojN-<I@e5^=gpwxe#Z?kzrkPwzJ{)=_@D_t01Wz36_dE7+V|3e2G
zVftjM>V*>(PC)9j2t>Y<^$2wK#YIw)7sEo!;-1jO!=F<(qJ)Ll#W?UL>C!SMAx*%d
zjq_k^nIV;4c>A95QSEM@=eI$z`^gh)j?0Pk8KC6CM}<CqL(5zBuMYu&x4O5`%)YGi
zxu`#w9d@q-87<W_GE25zdSvL(Qri+Jotew7o`C*z4;o!-%UmMHXv1~Rsn*n@m!UK3
zW&T-(pOt1`FSx4wf?_oZXTQM>wlB(R{-+l3UGFS3>k}fxy>>LGfmju242^zTC-vYG
ze}2@Z2`5t<>GV7FOV4eZQVH7A@PJ^@q6EFnKodrO-C|?}&o@R7Z+2Qi^I}*Y#-a9F
zIfX#D+G0*3K4NhxJ8*!6rTB7r+B$U!u&4r5FwBPEfx1wgnprxVdbP7v=|LR&Ba2ve
z&eI=NC$Ih+0YW>AmWb>dpAU^qjJ9`KcK#`Hiv4WRR13U*%LXVto&fisjHnRs2)+)7
zRfq*e+3bNUi;&+HETG!@3>GC1($L9i5!czi>*;nChj)@vH#m~eK%@V+_p1>Vp1cmd
zTl2ppx_o_&8v^;*w83-=xk}`QKY$1JR0=*(%n|(-G2<-5Bf!RpC!o^(uAd||Vwpg-
zgv?xOOy~PO5YxX9EcsXVl#bIni@|kZtI%H&WNGPIN?JV;Dcr8uxv^r{A2Q0%;=0}9
zpAI~XDy~K(zd;G%O`$LOW?Po5!>TylWf9@dPhg_WYpX@wq-xI5i;h=n!f6{DJJ1Gd
zq+9PhO)dcB#5}A06~F^xiM-`^!Qqvartu$dQZ?QFiq-8k6U;sFGdMzjNTJVw_(|O_
z2<S3<yZf!9n`7#5!Fy?WC|ex$`+tSPeP25zhP%cMH==u%L^RGQ=DkkFOR``c<-}+}
z#(!1vea$R~d7&_kIc1OqAy{$`;XC9r;@RJwQ9v_|IuCvT+gog*A|oRsdW2wOV|#2)
z7lJ7SkGgk2-ckLv3JxJEoGI@-(q%iq8|ZM$eWW^Z4nu&-ZaI9mD-ftnwK&8%k9|dv
zu;21YUx=Kcug=2h?qJyg!0i6{@vCbDe{@xalFc6B77^}!PR%VkbT$5VRJRID_^M$2
zZ&&0$k4*NQC$)Kd%#O}yA;6fMTy~Bb3GJq9XgB(E(p!p*t(w8}6M?^hbLSSVBhO}R
zpo4+7Q2$B2pBopOA*COdLRculYk*nR>IDgq9R!9$^Z!(y=e_7c9Ki4a%$*&EF~%b=
zM0WNggVB1`+x77AQaU1IK6AjGB5Y~a>v}(}nx0INqn@9W#yK_2tdL*zt;Gul9Bo+z
zSy|w%EvlJ|X#6~T_#2gF9ZC(|`&&2cxMwoq)2&xe=N9P4k$?FK%wb>YRgl;!`}hbd
z2N^aX>y_Y@u@zsz#Dt?AQ2-21U)a*bV$^@~zE^2)=yu%{le-UQSlqXrS2^+wN{6&a
znEnF~g3Yxq=2SFlYNg_j3gsfWdoBmbSfxCkC`49NE2zV`g$P)+V+)gvo;Hz2G4;OR
zx+a_d?ulRTvIPGZvrD<J`$lJtL{ry4=cZrtm$@-#q}F{UGEyM0Aw&w8&aa@=g(gf%
z)oSM*j*uA=mbE&-yS*j4VO6V5s94@7qX`l9+MOAm-J>H1B_}6WNzs$wlZ)lu8EBtm
zR1(ZyE>eiTeyT_7dO$Gn(NFWmFGpEkk7+9q>=wA^YD$BGN{P94H;w@_e4b9$GhL}N
z6UxLx0+p^3;0$7oYrCRm57=ZtMR%89l28jSaYt{9N`!LND~wSvYm9Z4VZSiCxuJ3?
z9!Qx!7dSoPEpRc1Lj2}MPOdK<&RXNM7qp`gHjxMcgMX<FRe`LI^<?30>Twnt@KWFg
z&6(#HAfsU(bgbqjh1!w^ZXs3+pa!fltN$tWB5+~JG@x@BAPEo)zUO`htbi`_$g3hi
z@I%xWAoj1;@tx56nipyq{S3?`)E|iNn~ArJ89nmy{HQn?C<PX4OAb!FU%)$DJ4sSJ
zh!>@e3O2G+k+zL+Aa|?VwQe>JGa|`~zlE!y=631ssgTX>ImoeP8roAtR1{q<m#UcU
zIBigtj&{E^AVh=}b$%1JY+5A;@^8R{ioy)aafn@|CMVze-p|fS6@FAX+-v_I=jM2=
z$*^X5+Y^F~Z?cLPl+S3tM_)f&`oUL6f_;nj^1QERSCRCf;9ilf%-W}4qMwj8sfWAu
zuiqc9tIaog#-s%Q>mrKdS1I`}6zdh-RzCr6$SX7wTJ`*XiEOmaxO2q=6~lp+3_&&-
zHiU|jC<)BD`@m-Au{wKa`GTJ=x7%!;6BV!qUdzDX)AhCgpY`?Xvh&(sD#2)ApW0vS
zZxLV8xh_8o%AfOjjZB_*yp%Ji5OoX&Yrc?}vazT#7VOb*C7s>hw}%?~D7R`<04X!`
zQ4*F6L-wq~v#UT!->Gy?glM6J;cTtKPspH@sX@lc;vk-I{rIfEnBP)BxTst@I_rHL
zBAya#90h;R_8hgTK_d#u5p&wa!;f{;;amtRe30GjZ51DmUbAM#(9`n~04&jg*ub|<
zLE}Wvzjb3vNP`q!9i+JVQ&lbm@W%mv?7vCwioxv3e-%=~4+|WrGd+}h!`4g%<nV4q
zeKiKG9Q{o9w;ycAqBO$3C<%9>s|eXPt(hMvU>A-O5I1k)fKzD(&4#&?>o*7NGX6uF
zx`}Vfbn%={Gx<I&lQXXCR3?Viw%P38hNi8igfAY;v!TTjb;8>EozC$z*|WO=!&c?5
zs3e5B`oWLXWC@2KfbsYxa7{S3;0k0F7>G@p@fprKhdGQlOEMF~Te&;8Hhh|3bf+To
zcViVxAIkxAP3q$f4-d!XDlvSYE1vw{KXe&WawB~X)PJ1-p$&5&IZ_WE)qx8$rDZXc
z#5P8{-lAVO1m1|X-kcfhy>?bU)S=W2CwYk~H`=Pgvkk!_P)u>HWtL&bg1k~-=X6HO
zpq+rFXwHpxH7aasTg>Xoz!0#@jSWU<ni2lH0HU)4Ob_UufnF>0{%9Yik?Wz#Kduzr
z6qv!Cy_DLl*pH2Z%NVSrJ{tB+e@{67fT89M0rfj2&C7Z?Tvw|taQ&gt3ePcsDf~yU
z&%$z^!q$^$x#!z?J(f-Iy^I=Y2L%v~g^#2Jr(o95F<qa)M-DX=_$y*T3yDnXfCgm7
z8GC#v<Ec)_4Z7_S!u~X=`+V5cB`F=@LuSaE;}Z6I(LeNNXVh3sjq4KNsP>$Q)tQI~
z|8)bp*Z*G(35W%~5I&f_$F;=TtNjNE3TWd9IO*%tabuSN$*PKo@^iBLClSWo9Y45|
zEirF<Jx+vTY!eI~7G_c;p|90J+Fq$#-X!&#96X_r_@Z+;9mGt268*C$YMk9U0V$50
zmV0#zY3s1UM+K*H5EK;nS1%^supyx0YUbfQJ<ZE8uH}D0_f<nFGU95ZdQ|P$;9E1@
zdB+~3z+zx-OBa8kLV=stZz3kjY(5N*A+C$Bp4U6gx$>NDzYYqA!%z1Cchv~hc9>c^
zPJ+G<)<qItzgYY4L|Z>JJtN4D<PA`lh9iW3_K-bm9QyB1w{-P@<el{gBtfw(ZUVA=
zC`UZr5YAz-*`iCB{~#`-&sB#eq2D%XGNgd?tuniMavU)9#|1?a!^GZN9we!Li{_Cr
zyiiYZI`@>p^c1UA8r4$YC{ljST$Fu>@e^R3$iajsx<9nQkcXyxp*(mD>io#GOo6D+
zLVy5^Vfopv`0(xNRC61*?`eMbwX8HJ9I)T(-lqnhOx_+L&TjjQSJ5&Xk$rvy=Be5S
zW;IRG3%}zQC0lJ{a&&;oj`g1*1%`n!i1?ZeJaG6|dFTiK#}V6vHf0wl=gY~%Viwx{
z5#-^B<-^QOQn)b1fA{@m!~YKz0)ie~_#Ujz9x?q<V|aH7db7BZTT8d*3Hbfb=^jY#
zHWH^{k_hutW=6aRJ{J0XX7!=$ep-b;xXs8ZWYYUy>)q&nN#$b@u6oLW4zZR(f>G%T
z+1wV>8c9w(n#NDd&@d|Pg#WXrGWkNGM`ysUm!Gb(k+|CIKX8tRFtst>7aul>0nU9z
zpoI*=o4pxTQS>yeT=sRS#pY}`FYxh0TU6X;>_y>$g1`9k29<847z&)bjSnvl?^V37
zeAQ_lC~71Jc96k(MT1(+G>V}2yn_DOYwLhZiuUOA|EQ8b^2#Jo2RpQvboMNWxbM+(
zn>K|Fr1Grxr*M301=4S#d3c}LVZkLxdv`bN9^((~Kg2aMs7(=J`S!suP49?5x9aD5
z@dc|2%Iv?GZJf@l1u>NfLyDDzsCF<v@3a&RN5@em3dkig>%Ptv1YY67U@*#RYBmC(
zmYWBB_OlO8vVQ-7i{fgEP4_)#9-#mI0v3_-3S+QB9I7%V`No3lLh5?9zQX5P-#m7k
z&F^%TX@+i^{1~qfFxcz9eZ%YUvj|H=u)ek&xSeZH3s@8{KC*OweOm$$N8|PJRwrY<
zCNZ(;KbW6z2_f=-H1ZvUlWZyn>Bi}9{&BeV`k62xoC^<Z_aam9H6RkRalOrBk^Fb;
zQnCLR5pq$1sUCxjf97<KS$)wrQW=Zg2W@o%@O;C5^YU6TZ_3k_w@|dOV}v1Q!lLxU
z$+I_FM{snq?6%MAPF}Cp1_g78DIH?<iF-(Dh^{4aYkTPYr@Zq|?g&K4r~-v^CTp{#
zR`f|of=-&6(Q6n9p?5afN1op1<(g42S-S_4&X*Fa2AI9U33KS8hFP%j3@*K!+X;tw
zTBpyfFYRhmtT?24A%Wvh5GS4JLbc4-&7J~j-%6l9#_xK)@qfv$m*W$FlfAPdCz|k7
z4`Cgvf;?>ULkXQFg0A*;b<`6@!^_tf#|`h7A8?y}?~6VFR0h7U(R{j%LphQ-W8raW
z)e?jew{w4fYVpPOhm7k#D){=0&3N9!oUtrjP0Y%tPBz2i!0IDfkiZD`(U6vM8V324
zMABV%)s!d5#)hkvX=Slb`%$a#c0@Qqwj?g(we2)O4}Nd~tT8w_h~73G+v4}j$-p~}
zwm@>6W{-5}%PYCdh#j&7av--8jnI&F1?I35B$c(C%n^tR+@FtCJbh2CVzR@InF*;T
z-&xE~<L7J{EAi;pQE;M6>tu7fio&1*9S~7~_T@z02QG20=iuCD|C5QJW1)cL0FU_>
z!pOT}$-N!Br^#+n!dr2orqaSv5-&wvJ+34-e5EAYqS1?E@llS%w$TnaSyJm%N15D4
zErMsbMB*Ce;p)}hiXIu3C9;`;9$X@2?b@Efmli@$Lw@v;7cZwNc~<Cs{FS%$MGury
z=61L38}((;&TfoPw5NSFcF%L;yev)|?-eE;*KUMapwS<&5dztD%IcB%t0F<brS7}r
zBt9|(Iy!acDDgHrYy_@y92j1ObET7GlJ9o+^QG%zyWvKM5}Mo}9$m#YkK^W|zDYh$
zY&j?Sil<>Yw8dX1lmntv$7S2VNnMtofM$uhW7`eqbT_(h7!c>+{ihVHhy|`N_IvLs
zI?LeFuR{3T&hS({hv6N?xz7~ITy<uxc+?Zr4@rV`>J}FB-vCa}&jn3*%0>d2z}IY=
z6(<t|;p^k340Wux==#d|*J(cb`?V~bS$FE6;bSoKHG`BCZHR*$-{3r1hPEm1n<acw
z@^9fS=eF30^3r5J7t6;H@g50Wo<{HUm53PP>zDQp!v9<yh3upnrBxhSfiJq(4QBnT
z1SMYu4|2Ac@6OS7R-N!!V*rtV+5O3ros?@y(p(L2HuWGPrh$Hb0chC^KHr|L<EsHa
zN1{2D4HSK--An(9qpABBC)c9)y@!!c?3RX!eXXaBx0%3X<<^c;x!G;o@~30b2m)0o
zUuS3Vzru(@XpsD$eh(e!LSsijPzIOIE~{+2o-KdCIT75`j{;H!|5>ggz+$z7`IPJ=
z0DB|<mk6v3V;Ve$F{>jeX5^rC&?hE}Qx=7?m)evN-PEH~PtMh+sfH0PS7+8a-eQ+&
z-K-1cP0ygF%0~Jb9@!l|R{;875m>O<6hYJG5~sx(hEy;&SRQ=0P&Ll^QR$H+_rO=B
zRS__8s#JN@Zba1?9iIXw!&R9;Lri37Qnb_Cwn|RC+ad9V=JQ>LRypv%mbpDnF8>&n
zmSJQ<;}uCM%CMJjpbhrw4<oy17P%$Tj*mPHw!C@BuA{HNI$okJ5^yQV(V>0+AJEe+
zPS(|ZY(^J~#qofz{TG%Pb{s{G2=-V@%=Ek#G#XVv9>>nC95a1`R7u2B&R~&)9Gajr
zu+-6TzgKD*+!_G>6T}TAckX$!{fP5KL&3^Oz3iWs04N62)i(IR3t+%o-N6kFB4J_W
zp^Yh$wH~pfep!+yzaChw633*xqI_?jiI=%XOd-&&f{oBS_dVsGxn7REiBN8(qhXv-
zf08COH6PRn^k{QVu7133i)=GgG+Yejd?WENy@WJ!`Q!^QP>grAWxLN7z;o2mIbjx=
z1gvnltF?lHEa_*zpCSFLNC$-iF>9%RFd*6S^*98ufbIh-)+55*MU88xOe&N%;Ii^K
z%mez)<J+I@BmP<FJHhE)DP~R^9LWnGO<rK)a8!As68gV6!+(^~$p>%+VgQ4dl5l0)
zcn4a4@d|m|n?KJnw|#M~P&wrUw2E@&h%bKFrHOU8n^2Mv^|6PeP@{WIzf3rc_iAOZ
z<Eb1VnfA*%Sb4}U9R$R6At!0Lh8x&3Xw%F$#%36oj|#5Ui`LO?ZV_YDRZYgz1SyzD
z4xhsFS09UeP&a-Gfu^dIQ}9VY9!u4xx+VWyJrky`?XaE_DAD1x?Ppp@v|-R6e@T6p
zC^HvRZ9e(>t+e1HH@bTJQ`z1)nn<;sDVKHy;WnK)>_R=uPXp2+C#KI0eOPF$-l;$b
zah;Rgcwnm~x_w^MVr~R1>RCU2CbJmo>Z%;-u*&Lud8CS%&B}^vA9KpHqYEv`33rr2
ze*fOZYZRLQ2qhcS@=O`u=8e%yaN;^RMCZ$b+2;bJ(VhdkAe5ZhD({I5R07+m+iI)&
zQCQF0zOe%2>|VF#3v%+f#$%^Z_dbu4k(%~m(LjUWFP@zL_W1Cq$P(a;%xd0t?p6R`
zyxke=b=)Y*jpK#+^R&Xoi%zoQZWBOTH+n(>!e)s#RZf#~QNZl*m+&=RMT+&xbUT4Y
z?#WEyAPpFwfu167^cTc)>Yve5gX$r;Q<i~>20Z8em%^p(s?I-3d+9cS*Ju6F4&WVw
zMrcp3x_k@6toESMp-L3dXls99Qz755?JGj_hF{z<Dg$pfP$XP^`D3@+9hq2gDFOgn
zIvE;VGXB4V;!IjVcdFy$B+IK+q8t3J__%bU1A?c7qN;X`1xSR(BfoJmDPK$K6VtJO
z)-h0cAqLwcV|_RY(cxC)OaNwh#s|U5>OX|tM~cY@1Sk2^#y|1-G&mg>MHt2YUI$ls
zEhbY3H8(}4!e%&NTQ_79I@~MvW%aSKUT$o)QXA#o2+AO|1pJlP>B9Epwdt_p3uWVj
zfV=B=m2$s1cALBaH*5SA4Up%k=nK?bgv-n;@uyv#Tx{gtHE9<`frW&)+E{pZmx5lA
zi*~>IQjAw3&hxTt<$=ixJKtdGr;tA)D#V(QL1XQYEh$Ms{&BS3Ro1-*G}3`tWcQI2
zTHR?N8%GpDQ(a=(PU0}H4(pd)^I)x4qGF?_|Dq`4Lgs`8(QN41-LnTtgv1Ob0Z2fx
zR(Pc*Ho{K$kjt9yy^LUlf%8Y>1M-4GjzX1`xjk!ZYhoIjC+8`P6nsAkBzvbV3!>=O
z#g*E*SYu@{kYN$k*C$rTmOzo*Va9r|PXIV+emU<xJPIjNPx>l+9hYR!bF~(zf7Yuj
z(N;Ti`w?IhjRN3`Y;Fq??F`Z(pz~N^5>GtN0+fmHAb!BgzjaPd!h83E@2SYk=q&Kb
z8aHcI{<q928bQhQ6V3M^%JS&=5hvnYV?hMi5feT(2)rH|LMnM%F6m2;$Sa;)QxUzO
zkaU&+XQGWCj7K=$1OY)(?6D(jePCY68L;wyS%@(qT$mn)XJF*ePI{yNXLl&Mx0Y_#
zQ|~_((rQ*CYuMxgHx?sU;OCv^Co#2qls9&wOF)22Mk&be53_pfBoh0r9ZWj$>GC~_
z82=&v?;1X$Ca*)FP@W_#5~(<#=40}7qz&|BzO_>9_d^h2i0oeO_LmGqn}bAM^3Crz
zXMtF9y37&z^;v!kPf%XVkMFvrle@+f9@|G)8rPaW*F`BAXMU7@p0N9-MH@MOC3fd~
z*u;QK^NxX+hW7_Khd(+&(<Bx~voX`b(wi1QAaH7O#M>iEWX<Hl(zL-)^OlZ~RwAr3
zlBh<^?ayP52f#(5OcuIj75`GzYY<i>kM)#HQ|Ddj^CW<F#*r<*bNV;cWD-&ZP)S%p
zOt&(7?Ywq|piB-k%{$76*;tu*)>Xt}>xpUm#4)k1Y@BLH<gQsTy11D2!^K~#tS>YX
zo6SGw+3=hlv?*cS=PJP=QFPc(%;a~^@6NXETyM53iXOEd^@~4bGQXou+M+M1U_3SC
znArUbNKSx(z=r1oeb?b}C16Sf6lo+7S^uzKRzGcmb{QC0+sN(f?-);Hpz^eZT3cg~
z@1?!&a20ed*~nTnHiVQonFvtcZiz)InN2y5ILUs%a;Qg>8UG8ky#4<JsK8!y_mNMU
z>|SZ9HU{T$oCFiC6ZjQ@x1%Fuhd_>CuS!8<^_mYYhJ86ylC}nqh&t065j2b87SIPG
z;h#M2Ck4k@eSY>^hbspeJZ_ZMq@@7SA(nq)TKA(znnv!M)!TZ8p3$Zd9m%Bf(%1s*
zXl3^CR8q+UOmX*L$P{hHST^tcTPDTK3yaS-k84$B4`;&eeZjh0idPaTYMFq}Yo;SK
z-yCph9qfq4A+DdsH9-LKk^d^RvEr@f6foL*?csYSxQIm9bdyUxp{{+*9b)*21K9yT
za#v;-k0c{d#i!K7TYF|0z2J9V!v)15r2YZy`!S?RlDHrP1?#wSc^!59waMgL6pDBH
zMz?`9u%ajn&#x9OKnBAQ$|>Zp*_c&yQS-fgjKF*%PT`ryIw?%?joqTJsws7p5S8#0
zD47J-)751G%-5$ITp55x`@FsLFFKirI<vYRmf1tmWUaWof=_<@es$)kUQ)RJalhFs
zoA|VcD))1W|AG+H1Q@blG@+gvIE}<Y0F1ECgmVy#Z}o|+xjh@upUn<D>hkWHd++qM
z(zVCM9UZUw`%nAWY8MLP!61VG(bVBY$g@de8yyr7f>Aj3Rt<Y2wr#&ln5>}z?SMpe
z+>2(R0h}yH|F5oCdtuEMaJS@pwGc!_48n@>Q9rxB5n_tG_%m2OR#Z#Z0?Fatl@g#x
zhBM19iBf8lE6GgxKD?xe%%fuBF{~Ce!KI%9+Xb^PL!I7~5fvyR)nocW!`yMGW`|5A
zwuPJ{YKZ3>By!>Q7C31A<d%bpX`4*}PppU`uiidU4!-_zoY3`hg$-z_1GzZHcgeog
zdi9{A)aj@8ZEnley^8Ao=QnK?d8}%_FG(JQ$O;M)-mrebe%zw}Fzn4^-RQ><1gWp`
zrfGsbwI*=^D_-BrJ`wUq7stO+^1b`B)7`(He^~#Ud$G`>H`#n_TjNav%dS4Ykr>_&
zVH9skxUp$*C@C#|sH((fongRd#Wvq2lk4`@R2O-xlpk@)?5S?LA+ev;!#u43<1%h>
zQ0^-x8V}51-%+T~<UZDKV`^TyX`vQ5kEIs5i~Y5597SMookN(ySEJGQqkF$EoQUV=
z+Cb_WplbL^UHl=HWY06omqiLam-?$I_Jo2XyQq!3%3WhC1zF`T5L)c%+ahGYRxBB3
zYi6}it31dK@na15Y0Nn2`!is>E1NmVIe8M-xL_hp5K5NIZkmLCi;0jdpC~vR*qgA2
zkb$%z5Jo6k5Hrr9uBdKksRyGS1%%MFx6rA;CNj|7V!_XZ&J^|ueU@63mpcANn0R$L
z_n`AWn&kE}_O{px^PNq==6yvVk<ito%PaWhdnvINIYq+lW!EMTN4D;m=gDXUsGrDN
zofLd53P)ZvA8(w7=$4+?T$JnP7HMoxAX@PdKCVBKXH#`(HVdpaH<kh}-*BSza*)zD
zp2O&Fhe@fE;)i+HTyS<Z*^bvX&sC!kw*Ur`V`YN#ccH%%6?Q@H;t)R1KwOg@DE_!_
z`hT&-b6B<S(!B)6J~ngTc#~b~95_hYmY!rbYFrLZzq+y8gL5Z)DIaTPBBHp&geh~@
z@sdP)wTJnHHhy0EbCJ}6=elS}gzZZsr_$A4dKxQiNhbLcA?!1r7&0Y>K5vqRZfM0I
z7K(Mzjt4JVHcAb3FNgEuj?o-~TVp?Kxz9Kh>UL6pm);E)zuUTenEG3sUr#7PlwVJ@
zu3YoWS#V|LsJ?M++TR*7Rddse!X1$d@tL4A`1im)`1i9*m(!9{cB7uM55_|Q@3o{Z
zHyJMeuEw95G<m4R;}uUDywV+PQZr_<?{mZm9xL~-YfagYejdPBSBH&~qJKu`Ptq1#
zlK2_F^em(Ij49CG^-G$i$8@zgr_Ps76wH~FstCwpn4v<x`L(f2FWvQb6Iz^0RdiVw
z>YOqiXKPgohqJgOu|LB{dAL%;x7Aop>ogQU8`=;d?nVoKjwIi|AG?xGw?R0h)s|Q9
zq3*sBmiDe}1yv6|97y}So0_^JjWl>cMxMBqkTn16*I{xLLW&w?CD<GvWKgrQ)*)_;
ze~mZ&l>|KTJsZwErW6NTmh|16D6mf{!7B_0>LXoHKqY8UlJwbTG-B%qi|0YIufJ;i
zkRkWjd9Ngx&TH}JZ?t(2L}9`3i2Pq6P=WEm|F;lg5nIQm2>ah{VqUwa_O#~|+mLGz
z;nb_SxDEDk%zTOB23G3FX0EG9yuedm7Vwp8CStgjhTmcmc<F8<*dx11pMJF-L`p_`
zT40<0?ND$K{HwNmeCOlV!%}&H!V>q4mNcQyzH#|E522HxnQmq(_G-zNR0Z9ef*6s&
znl8p~f?rOApwe#XVT5XR=7Bsy&78Nwl?p5J^}2{jCSb;^aljF%D8jGz3SQlf=EM;f
z<yW`RX9*YbeEZE=r<8iazW0obW0IEmh1gaTszb*#>Fy}0vs&n;X-D!nWykN%K}E_}
zE}}w&!M*-Fi`{V0OFI995dXi+k-mT$R;+}jb5)#x%#pJA!x-fixa^&AYODBIh;KY2
z&e?LD7H}4=7Nb6n&#|L96UR-Q@7^$?xEqH})Mo8HqHABEw7x2qrxrJ$_;*oU)lR+6
zEg3pk=vXT4x2GAXq^$3XwryhO5udYOM)9z0Ya(qYlO*{)#__HY=hDJZ{y#b?>`#)j
z=$5#LFq>KLHsnQFIucJI{-~96!}>e2s$NLjyi4f7LCjeWBHS{%BL@-WaXar!^J0rH
zBZb`%QX#_it4e3^>z|8DH$M(I^1MtY|MF-n$xsR(f#qWZE!(i)b`A1hYL~l~g4_Og
z4N!vdwg2zwe@0w91#xu`-grBBLW9eC$8kSVi#OW-TDco;qHeQnn?UpNsa+1wa>%W>
zEN6A111<xh$qlBmW~w#e%EO0()@TX&@%b(to?(G`V+zms{6^e@#!m%9bHa3uDzmXm
z+%2{{V{|dohozpZPS5LgIwHO$HMQu2%BI(t;oLXIr(QfRtW?xwm_7;CIU`+r)ARu(
z<SiAL!{-yC{05}PsSBKNh@8Fl{16$tggCpPM*&{p-AJSqDu+JVZa)#$ncJ5$X1?_<
z!*|8|s7E~Y&viJ_pZP|2x7%wU$>-cA?_;BjC$q%8&CYhDS(g`jL33;s&9cQ!pQTnI
zzNGSM&rlu3+i2f&5#;%+Q)=Zo<eM$AhMy+RxwQje#sx=u3^R?2aqRp{E!S<vt!^O_
zAuE(>TD^*}(;_#Ow(!sSi<r0L4JG^^{>W2`?lEnsrj{HF_jQ~`+O*Hg@mnu*2W$mo
z)@eI&fFi%^1AaN+w5Mo?Fk4yb%<ww5x8F9OxJxv+l#qdUui!>i<NK}4Q3wSN`0d4_
zp%wK0XT;<y^;K*_*Z>X@XrGYg<cmh+<hR6xjoj3g?r2Q!6+OJL(D4|`d9$;qo7*$e
z(PRfTc#AK&7q8!5%i0CuNYe{o-poA{9|Ugv7(_T1j08++1zp6^wko;nM*9;W2$d!$
z5PHd4rQp*=ga!=n!*aUt*woZc)5&oAg5EW_yRGM;9{5+-F8}7l>$jWNokODZH@0-J
zw4Z(+ZI9_vn1MHLEZwxZA8zHRsS&lda=MO7Cag;Vue&XBpL9Qi61N#Dq4&nl`hJMw
z*ld26<9~N16-CpgINQUOoY2mJaIQ#6zk+!gpXJKXthX56hA$#3#@*g7l)`ioe*s%p
zoH3`<9xXVV)VSPaq}X=Q?E4E!(Pe4fzYa5QNuNQpj1K2!u<U(*Za<BnS8Z2EbyAfo
zWfYQrXWzcx-Cp^QFHIDG^4)4V|8p7|X%jH3PAOs=Ax~gl_^^oZ3v)zWja9MVGa<`y
zYiduTf@G(Vaj%k=#pH2gMw;ZUra!F{#ZQ2~Px(dA(1_5S&2?<5KTF{!zt|xYuFI7E
zi~9IvLOEOT_2*N5y9p`7+S|%s#y1hF={35S1O}{SMrv?!F6LtG{kz)^{D+I>2313E
zH+pM^<$BN=UFgVMo*~o3GcBi+>}$NW{(+|O0aJ|_DqbD+U1>$m!QO$x38r(x8i>}e
z?krM4+b5vc3MhzAh@khk-}Q1+4G#~?drJlmCP3N_6POwq8U6<2*STHj=KB3BL3p{c
zA-zp5H$zoGQ$N}>rkeUho|9{~Y8<c7o=#v}U7%{b%?fHsfarom7-XEc!wj~}t8{L5
zf|~rpukjFP+}1Qrri+QE)ae`jk0KPXP<}Qp@23z!_1qjT5*B41pxIXsZS5Y((Wq_E
zzym9&Va`0eDTJinTN8y`q;;UKO)e5C`<k$B1ZJY>6;C0khIr;z3~kTcSdGMfp(8Vs
zd&HdG>O<0%?`qRAnFSYpI#A+V=CWSr#Ix0Ua4K7K!TGNnegg%oQ>jdhxO;_sydjSo
zc6pMRB=8wEb6@>yN&EVQlu{#FUma;k^U99Ra=a?_*=XtEzD)$ub18@+%zBm?0;C(~
zFzeBWg_4C}X$uA5aHTLo_kZpsPpy?2FZJ!t)vp0w>Xz1VGb}V<^s`HUl3AzxE057f
z$~H@os@A|rLn?vzO;KjL?I5wF;n!kXQpMBT{4<fQx{rbb?C6DboY$g3X>a#bwrEwf
zCFIc)BtrfvwbXU8Mueu^TsT}wh1tEJ{JKtrZkr+hhknKM#_Qnkb%$w-xhE5372p*x
z8@jBQng+(ez;avTbL<-AJY9Kyc(mrA?h#0h)6k8MbFLB`Z|_Gdk$|r}Fy;HdBZZyW
zWkM!SK@G=B>iynrH;_A1wacN0U1*7%<<KU~F!<CCseHFcbF!@7(yRnVM6aE!nx_jV
z8DtDsos3VGUAkLJ_x+>=PpDGz$-bB>GiJ5Mpu|%>d3CFF6tquUCriwYSCSR`b5_Mo
zBBhAIF}9q#9r?42r4uY$|EeYksG2ALr)s4CRSl16p<`eqq<gM?Zqkq+m0M1=z*l^;
z^RV4C^>)z6ayAdJd(gBQ`l`-3;D3rV6|fkhLT{`+L|b15(r7lTE->&VdxPyZJThQ>
zH128Yi?-G2obgL3gFC<Yvs;F^H|83^P3kjT3)%ar(fJQ;=@MSK*I+}0whpU!c1ITq
zM}tvEj_a1{keco4JJNCJZ94m_&PYkELaTr=wQn_M^F%$^v<VCMHS{=7>+GQ7#+<vD
ztX2&PE&C6h5jTsF`<i8GI_<UA8>u$!{R~IT-K9qp`sP1@os@q7i~VHLLMixAmr>Gl
z3s%r}3O}I~)-(ES!sVp%M`w8~pm260_Lo-ul=}~q+c=pLoq^1j4H*=!Y=6cW@G_~~
zJ*I#|fF6@zgLXS0+2Dk4E)Nvgtr)3fw1L+v#J|d6KB6Mm*1G*pWYl-Xhj>#LH2#W8
zNGt~~G?|{IavHjRKVE&^C3=%RHYd73lkNvcn$IqrbL!$qRM}xFC{Ptvka>!mb3c8l
zRQ441frjOLlTske;V(m<5l##~e!nQyWTuo_q9V7p(PlPyRGWM2Vc4sEda@McmS&I<
zk0Sx}U}R^`xXnfDCj{<cluxx?iBO~l%?OTExMG-c)k=54+ma-7xw~<Cn^jy^<E46H
zGy=6f;rIJc+jfxKtx8AB8>z#~1iy@A$zeTQ3K#l6{UtXnp_lfmZOcB<IRJZ*^Q8;=
zt`e1AT_?P1)K~Zsdg@i<HMvv$2giYEY@?|n!B$RK`DD5beS?r>=A6y9vXvNYczaj5
zjlNM5k2Ebct{M8GBxb)I(#o?x#ixtPWDcDI@8*;`UL_;R5a7FK<E}%8{b~^ewc!vy
z0j)1OWq;O={QmrvreIpQ#bFq^CW<g>EY{-{7EDw(#V*$qL8iowGOw4ACD=0+7!iy9
zSY{Re)3_n#j88;&EDdmtgBrY0Ev@9YN3heR+sP}p-PtEJYP!5P*T=)Bmg@Vhejsu#
zbB0*)Zk5umY|3``=+tya{I9kqS{~@uU%d9+TH7R71*T}lZY`b=!DA1<8kUkN<qX%K
z0X_C;pd9)jQ7@|HX9>-j7kU^6iVclzhPLEvg)my_&HX+~ev{;wv7j%t&XV1;xhF*l
z3C~?7zRj?o9`=HnMWmfOvjqA?Z?eV)M5~6PT-9-udf3fS8Tw8kPgk;f;yzEb+EX^p
zx-;}$6R9xG-6j0peSMn`kb|L{L#M0iZ-P#wlxw~sPBSlBnqUSQ-pLe88e3CO&Mr^r
zf*M#gq%Oi7jc)j>1nI0XZKe%*ZLgULXtwy^iy~gCIo#Tc72I6Ea3p+;J)4}3s|hF;
zHIUfYo4E`^4igElTpzBL9V^|4!F$dy984fsLcG)+|G;Y5!yN7)pHk&+0FaRL-2R=q
zW;gsRd7<;O?b)Ozh|}g1!iP>Zms|gqP+Ihc9)7!Td8nd-wL9qcr!uWfHMX+&$0Sb~
zlCtK&yL|zElS=kDce@IbL14t9l|PO-m_y9L7SP5tfhYaj07?mUzJHn!S&Xs#j;*<*
zq$OmJ+W9eqgV_Hzh1fW0LE9X0N72@+(XR-rbl!JB)ZHXqeZEn-(_*k4O`Vt<oHzIq
zm`b4(MdC@F^E{OplvrwDH1A&p<1?2?p{aWkPD9B-k^4H4yGvdig{~@#^5J9NJLRv^
zP-wH%EfqGSAURsuXP{5IjrTMRoGKT1t9wK%>c0Nfr0q7{|FHY{(ORl`fBO0G&mUo_
zhymc`I9H?*nSDo5QTisi{I1qGnWAKuRzOq>S3(>L3(c82>vBS^qBPBbaU)ep1)Y4d
zK?_M4nq@UAm>Hf%0L`R<5OF+3os?d&3vZ|@MObg7GbgEE+sVtXw7rJ%Z$jSuI0n<i
zSsf0=PdrxYK|;>K2NQt^`_pox?zxUIdsLHt*^%y@IArenhkwuYy|T@|dGAh_)MS8@
zBDq^M48QlE9_&Po73jrglt)f5{bj#rB7J(lN-*A5)x;&rnI>b`X?*Q(7y3FDG1;$m
zdNYdhbkOH4qogP%@`rp8%(GHxsV`~khMfCcSvCDK5|J~ii-J)en;mT%G&$ZV-iW%4
zeaWX5574V%%x-pUe8ypBk`W#$T|K3pX2te~(<bffb8v_RVd3OQVUDydET^rJBIGhd
z@<*{>J~g&e-9g1OPBX*l?e81MF^wQ|IIWmtel0~hyHk&2qStC2=F=>+gAgO(TGUmX
z{wF^@tr@ceW!@QgvBue$Lw39?{mUg5hn%Q+a#@zRLHoGiGU+PU!OPHX_~KBxV%C4B
zD`_I5#LLRupeGt~O`mhdHCR1A2N1MtlW*Lf1YSc2ML9^3D$CB+{qRVZ>k@?++`FKj
zWerlB>4WfU&pBdI?_2AOlQAl{mECj3-2*Jc);k6j)j%cRHaBG}GhfrMrmsA_*Qc$E
zg;p0ji;Mmti*Yh#r$m54CT`CIErd6zj<!j4wyi<ds<%8bv8Jwn=a1Zx5lE5Iv~sWV
zmszVhNs&|1Udu*?T-J%r`Q2lDsv8&2Z7)%?Le+`XY&tqJ&?@yz1v|?8qe~h4sRwQ#
zS#N0S@2fTD?s#_i5Vf?Sx$WIetjkF!AVrP7dSjYYL2D)=xr&CMBH5}0T@-147wE+;
zUaf>ph31Z1YAoica}H)of+wzTwsa|Hn(GPk^*BA#9yW@h9NElsM3$2^Gp4FeYW(z1
zr4aT+W3kPX{Uu<Q=$-o-Q*A9Q#AQa!Qp1xlU{$~w;x57f?<trP_$e`KVZUo>)RTCM
z_xnX5);O2G0Mc}#xWEUX1X;zz$FsY?%fUg_X9AvdWE8-sFB>`T+mehh%Y9q2WQQ8x
z&y2w&H*4{X3AMPt_FO2^uMVV|0L|DnS5#)(-~Ap3xJ+*bUrei4>z#|PL;8t*<Hl^A
zJB(Fp*n@MT=38gh4)7ojDAD1rbC+t=$TVY(YV`2;7DNL_64L_C78ntg%Rc_<u84z$
zQpSA}d&Nv|_1(w@dCu>&U>p6Jve^V(N1X)Yy0YoK9ZT}MCY`xncd;1+>`_juY?KoF
zpFA>K&BfFg8Jv<Ox-=cWu_EnCo&JfBO}lbiu4I^5oO4E@#M+6<HS}IL8L&sJ`Xm!Z
zzxsR!?z0`&zoO>SzXDsWet$!pUbEsE@H3#Ty+Q>blx517!=FC6{*#yzs6s*pg(Yr3
z;Cd#EQEYtHk(mJ&_xYtLit`hB9n~SnZ*YRmE7${I0LB~r5sVZ|D>rU1A#|KA-~U^Y
z)}mP<qU)C?jGPJ{I5>VE*x+uI>uWBQ_w}2(s44gN8r^-3OEcf-#a^9oi05>2bm1iR
zTwAn322s`c3y0I<rW3PWn=L>mJ5y1cSwA+ooH&0Coc&g{`?<(;o>qWp;JRjF3__3B
zw36Sjf*bfxgmF}Cm<?_T^pp%I)+Yo()wAHzF$4Ykslw;yWu?J2oQ{4?iZO(`oxQ3=
z(K%Ht#jEr9Le}I9$QhfTcjXgK7sHFP)|S*YA5VCM#Ca}}ioN>7`tdnc3@_;eL6|MB
zS+SfCvYsTU*aD+~%!P^iFo?u6mr}4PxP`{>oLd*?Ny$XqUh1mflR|(Xq)q0@4A*yd
z_Fg}w6uqUJL|p97Y9u#==~ln*#5HW$_+CKW%2=XQp}bY4!MN5(W>|atov};|5Jc(z
zk)BbO5)@UN+^m7jct+SDrKRAj!8*6`uF(&qN=kNJqk0Sgqil`#kgw)QQWPy3{FH(Y
z{KJl+ZZo=6on}3B_v+_FMSF~8R(Hvxv9?ti18ialDC*?D&Z#ATK6mP9%i7-viin82
zmdh5)j!$7D<?X$2RrbI~G&WwF(I6*&iSmfhn&{e_L-x)~L3B2pPIMFNA&;%-P%Qa)
z#emRDMJ8QymGvRx_luA&v_ByA@Oir|o%?Xo(B@VV*&P?Z4@gKhGDI><K?`63fFkk-
zbA39dzztvTehR*C#U{szmB5td>mYR2?PTvVgdLyCIrYtCfv}}CtVfN=Q3%>8;AAdE
zJsx<L{(@%1jBrbE-*#~5*kxk#`+-?(n!?h=XP;fajq3{F>$`oIDLqr9_^U(OPCWbh
z^;*c!^|L*mrO&&krS(d~ZK8Cyp~p@w+WBMGOE{ic=PH_!GyA3IMMmQ=&-<1Ph46qn
z)16f&j@JU&{YI+fI?t$Zk8Xpw#_hY2aXUP{=g(AkuTpJs3x`ySO&V{jdtz|{(BChn
z+vFA1|GIEwC<0@I|A)Qzj%qUP-bQg8yMls(ihzQONK>S@*bp%SO7AE|q)V>}R*DS~
z2vVcc0|7&o7DRe)p(Q{>Y6v0J1PJBa!I^pIRloE7zO~Lj=d8n;HEV{D=ef(?*S_|(
z_x(Hq?A`Sl8L#V~Q*5jT*4aE{)#cuv=Vpb8yzokhOt;spd$ETVnoaUcY8>I|u>I<3
z3xU758ag22IOP{QdCu;8TE4H2xdl?{O~KJH(6)XPA?;GnuH>5UemLJqzB)T>I)vM5
zVnOt6-h=EWLq8qPRO~5eM_hOeFk#Z<mAQrvm<0S9YJn&3I{sSu$!-Swk>~~Up&`rl
z-cNU_dw_yzHrs0%s_u%V4)gLy_{!tzcPAGu6WPlbLCIjGJ!D18FaJ3XR)EGImudB%
z3J1h#QQ6BW#l}!7Cibp1cx?Oa+7347gs#-Vj60Jg(xjIEp_{t0qPsCVJpB;`RF7!d
zq@r4!yn0Ggj3~K~>Tk6}{=koI9xXXs7sjw&rkPoaKFH15sTXvq{C#Zmu(iMqJ=h2P
zWjs%yE;xLc?i&6m7bVGEkaokMzv1Dh+xA<(UUSN1S9aBoYzs@*{W{!%dRq25`9^Or
zTKBT5!=APa{y_<E?ka4(95|hma-*(oz&B=J-~5+%sn&yo%cb3oyLhmsWhQI#3*_en
zlT)~5-}r3E`{lF<RI{pcCMRz>)@~`yYMfAjTQ1GkbLe+=Eh;__#^l_+IGcL*+B@lv
zwlJS+biPb_zS0LjzM&jH#X0AT^vVP~xl*e6q|iIO{yWsUG**eDkq7qjahsR<8r<ki
zx#D#1YUfFP$yd)~L}1&+5Fy!9Z&ic@twvv8$nhll^v%?$^xeO<2BVPq>g)+Ebxn(c
zCtdn(A30C=AVDk(-I1m0#Tvc*=hb49=a+Oyk{ZpYNs`jla@>pVyd{?`;ySD4FvBu8
zi1q0b?qkww?+T4m#1ziB_3%ZVvK6%I8{^24q{!r)TtvUrO|tJg+p$%`aa|(>Y9e4-
z(&|D{Lltn<1t;wafDb*}qW{MqM;*_Yl~zfPGcq)Kxyg0Ks_7o2GQTs9NcA)5DD^X<
z62Qq(1~JGhB8ya^-5{kKKUpQXB8fnisl`L=7U0Q)P8@{P3^R|(R*X)(FT`QtaH#Qt
zwA-P4O7O=fYh%WnJnOK9&^JGtZc6u%rd}?Fv#3Z_yUP(5S<!qf`o#dQD+7Jg>%PrV
z4Z%*A;uu6{<wD$GieXw-XRGAPE%&zHyU^{p5<5<|H`5TGckQA*nM7ITZ~K7nz$Dt9
zXn*}u*dg(zjh6aJTwW@dgK3r0TO-FRd@RmLy}_F9om7Ea8<DaX7@B&V&e*LDvcVm!
zFo}v=&nhvYO0=b?HVM1b9XqThJPsWZ5UAZq5;ONgOFKeLx4$wt5k5YJ*hVJ4wKg7%
z)KzG$izyqoqO9-9nO<x%EZHbc=<;iAn2S#x1rJ#nPl=1@YZ;Ht7c(_8n@?#nVx*Mj
zOso5NTqzd0zWhoAJnTr%!B4ey&e6GX4(+U9UR(e2ddvz!1n+G!mMs@|;5ygT+jfp_
zXf}LLzg`%MW4d<3W`1l}fCDaVWAx!eE@_b1;M~U<G8JJyeQRepUIfMP@pj+U=;lqP
zL8*MFBM@!}F&qPMTM=Dh6*oV_wXX1SD}3)RUx+pkWSc`FCb%FOr6zy+Vo6m8KPMCh
z`w}kSrdIt$)5&zfH`X(ra066z;M~wwvyv0}2^nYz>!Yp=Xn(Iuj(4+BPg*dFH#=ca
zL~%82yY}Xm1}C$)I!JfxRwOH41+NLQ>&2@pbsp@mv~^P*`&!tYGI}-keqTH1t&(@a
z_~xg$>3hCbU>_}-=RNYDwQHmtF?7j$6;ddwuD`o*o0k0{+pVf&x&;-lcj&)GiCLJs
zZu}W`5c_?-{E*(ce7$$uOSWk<cvD0jH?FkT`(JVQQuH>&?hX=Am*g2=g=?aW^4li^
z_c2TWL7j(z>?D8*%zeAx+Tk9lm92<_m6dK-c*d}<SaCOu^VLE)ftT?`WcJS{Wa2%p
zz4bzdb@|2RDhyNWOEeVtsB!TvsnlDAe)@V&0X<hcUdp2MLd7)HqMmWTu3wc>9qEd6
zu4{ZjztQosS;7Ilxv1OnHAtmZ9GpXqR91+S-%jTX+CJGnK+M)jZ$Z`a3eUb3eS2C~
zqJa07@qU90HFV>&Uku;T^RF|5<of7mnn@jg^bIK?cF10^dlWo2{LgKAtu#<-+XdG#
zcxpd-5EG#U1+u+30=_<wI_D5?Byq<Z0&5FTjZC%E9jyrWTa!k3PI6|Hm*Y;+CvOQl
z2PvfoqnuL3S_Kh*01fs8;*Vu^b?9f6&Ks|rl+>Rbi_TC-Kd?i~IyyYI3N}`By!!_#
ze+BnEjdJswgR_Orj!udG)F+~W1>hNoj%FJ6^R9_aWK3=Qy%f>1Z*`?jgLWtKZ?eE^
z{v2vZ(N=P_=fA2oVt6h;`<#dQAkS2t?}WDHygKJ}ok=$jrOtOIJikFlw3>J1L<|br
zRU0Lw?bDLmTA<Jds+X;ml^p8_4}>ix7Tw%1r+MRxn{`Ot!@5T#Es9vvIL!M_T;M7f
za|;ixTlJ^~yC-A)!HqK-(j{^$)I9dU)$vn&-M8JlJJuvTrZv?3g><i-%tT<Hn1#Q~
z%Klt?+wD&H?xYY1YVA6=4DXU{bBriGQpC_FYo4O#_x7~)Q*-^3y2AH^2>iC@wNEnC
z2(f%eyCvMnI0l!)hMxt`*odvqa=406#CnW@{AYa#?0#o*p@xmmYQ0j>Lg$T0k#y>U
z{uzC<??EryLdPXmOXFLWmCx+435BH@mb=Ph@`5RblVk&5N{cnmjjq-wG5L1a`#&F$
zu)X*8W&AO5QNq<?UZU57Y>`Bo#A1-a%5<&%0^=|t)j7+Fm~ur`NV{N4z}WQ0Uo7^E
z`0ErDG2;9I%wt<wJ=uJ*&TMNV4O5PjXx&tCSqc3Fqb*YXS8+Ryuj_V7a9IvWcPIw9
z86VzvexQ<9mHQo5r#7tUF>ZHKR}<rQeO`Lb>HQG3lPYjnr_zx31CAjURnOR+Hf9KC
zb8CEin1{HwX1ip|)tWy!c*4)>q~$LG?TXh4?>=F}q!jw|W5esF@#mcN;@5@ko0{Gs
zL<Q9d1=`71Qlr^B9Shvaa{9&egjB(T9upn|-My4Hm%u#R3%bO?&c^!SL=Je%=PGzV
zvGVKp@_?adkC4g?2f~xl23_+7CPe{-SAHI9U4OWasS_3Z7RRgBH8<Z<aNW*a{ip@p
zz^c#?vsf;u;+gy1{3ulSBw8yy$LxS~DfMEsl1mH@b-Od4ZWgLxYDHWTodd~dZ*Ig1
z1m`zq{?KWF(kSv$9NBFn#pv`}RuM5R5>hXRl!RiVGYF|u_(bP&@imz$t%n8;=c=@h
z2QXee4-AbBp5WC$Bea_r;*J-38`V}dtfWvS^Hgv(DY}y9n^O(NQqo0(rKQDF!$NZR
z9g7xLwU5m@=rEXY-1s=!VowrHH|f-|Xu*CCwJ>MmgKimPA%aXyYU3Ow<7R9$%YDkD
zAzpQKWQtwo9rE02#c2stuWZND&hw|^UW@CZ=7cX@x*N+aIWg<hnNk_R$E!RR1oE-~
z-KeRI_oTRhw9nvQKCh7psuVf=$7jCSqzzZ>%Z&^%wDX{Uzq#%)N4$G)^U7jL8PDOv
zZ&z^IqvkGf+0*h8dT&n0T(qO8+M)S*?Ed)V;jOI+-p^bi`nK5Fz=8N8F=d&^XCLk3
zGhdlyb$gu{ZtnJ_lWRQdI#7hmd~v&vP3AB_k-+tf_LdmrhOh1*R5R?*i_@g8#8|!Z
zO#OIv09ba@gIH>(K@2gRh|vMW11^m^lu}f*R?nu~QK;Xlx@p)T3D~V83;W8c0gX*a
zEWWIwI)>5~PC(IaRdU`!N|}Bv*p=?ljLTKgb+#O+@lB8)8&w=X@e<X;eZN@s(7dOi
zekVf8*-Op%xahq>$Z=x&asB=<A4B*N)iJZfw0%#JQp7(O)g^T|p6q|CE=h6V|Cpbe
zo{z_YEj^Ta_BtvucGqdG(}**-X~_+dWN|iDr~C}~nv>vBsiQM4V9Bve%>xoE!^fx{
zYpz|ZULH4(pO;~zeTkV}atYYQrnzK!e<BT%wuDc+y%9RuMP7-GkusjnG{DeuzE?xj
z!>7=ZiNg*q?s*|a;>DYh&Y9yex^rMEia-!ZUwiAvNOuBZPe!Bw>Am57dwpoe-XdL!
zxJHAPJ<oHCrLA=Md#FP4T(s2^3JsiK-mieNKEIe+n?%dK#H&B;LF(1w`$I+K6oMTJ
z<Aa9AE5~LK_!MVfW7j5|jYE=IFcEiylP^}-%h3*{p6dT@Yshg59hn-b{v^$g-|oF=
z()MV~W0X`y0S1B%r1+p>qc|q&N|OeSq>S1ZPSIuUOfAggE<XP{Q_hi~7mcS&ph+iU
zjD*!GQRBv`=zK4$gq-f?r`lwRHTda^sQq$PoSNYBdKY;tU!<M2JFUF#9io<eBNAy?
z;Lz5;`%r=(+I6%TDy*MXesj(6!)0_&0|It$P+Kz+xeR<?Q{ud2JLgr7rpA|r&)Q|@
zi_x<3y;ld;ogPVchxs%Z@8Ad|$V$*p<|C)Zc-1JeoCNyt8A}E-g5RsJOxz-!Vb}Sr
z(+0YR_n4o0>u-@hzD)4qisOqtt5vL{7R_)i^>>#a)|mq(3+tMZ16rlt=SjU;asa9M
zW+L_@-w6Ucy@byV@G67Yo*(Zq>-xfCJAjQ$q7Wu}Fu3Q)#9Ga|E(-ce0&e#Y5(Ied
ztuw<U?UY%AEsM4s;*GIm+U*Owgwu>}cg3(22B8T$IosNIJKfHEDf-eVs=K82wirhB
z!^&6=!VNN7XVTzUE=e?&%%@4}V%p?wMH`-W-sjLjH!hUK%%uI1ls}o5E#Nkqe&|+E
zOt5@Er`GVzZ+T$15}SMZWI8ynnCES4zdL5lhI!V$<@7fr7hG`_Ha6-a@ab3QKJ>~D
zs8c%cmiH_7&VH+RnvUh<8V}I&=YUe&#_kj=_t%4mL~PRm<nUE-zuC6-JyZt|B@Gxa
z&A~8jBWqoUEhG4bh-fhe*Rw-0z0b`*Xg!o;aghethZc<_p_QYfrZnj?*(Mn9D%mc<
zx!>UVA#t(BZs#VN=N`S&WWqC*0`HUAQJWf^h0sI)5MUGeS!cwCIJKZLn8$Xu913Nx
zJYu!(WgcHi5`C^bec~m%>JS%Er@HK_wtaHChY!~1ydfdXXMe==XWe$%ezN)5vW_-i
z6TzCi_^~E_1b#aRht`f>i^=00^10k(Prbbq=RF@`P2>sdJ&BmpBQ@`2@$FX!@2if1
zrt9PRtd2Q)VcjxY`tYfh#r?`(peIE;qWZ@@MDop3%I%v^hj5<*1&g2yr?U#L2A01W
zb)gxcQu;fs-E}s->kzbjWj)1A1qC|tAa2(oSw1?Sm1o!IsmhT<vsV^+M!UDB0|MRI
zYT72)pFz)c$=x3sq@<E(hen#EyN;?Bpd$WWjz2p6rcQM6YV+ND-dDqWHRR)&j&_{9
zqbSHXJMg)$n=0Q=4dtZ^xCM0X<T$1a-ZaN=l^61s=U6l&-snJn#;$Zs!8?5ApDhWe
zJ$;XoN!=9mVSICGlUTtSd_CtiLiBqAz7!^^K9x^9;W%~zoEyE4hElpFjp>~O!AZ*p
zp<P=vcSt+-xXmt=Oc};#UT`&Fv+epQ#3Y*YQV3pUkK@DS=_S^l;Y<TNrGB8Z!9uX*
zHCp6vDQN}mE0#k-n-v&S--U=yeK@1eOb~PMIOzS;VqsYojWJ@F8TiGZMtkfayU9uU
zD6_A&rW^;6GLJAJq6vY~J8ie&5T|byNFT^Y?@FiiTiB^`$SOqll5FMs`0uOEmr@)r
zN#aGHU+epN|EYl6M*F=nilf8#?0hy`9@Xx~DKyi*(RaS)FcOlkb|^ki4w9iFjHK+8
zAG~?v8|Qlz=*l+LAJyhY!Zqv4#5Jt^j;u$zl>q)M`&ToIX?(%ufcQSXaZsoxb`7t}
zA@GT$MQ5tgTom;0n8b20`Toi~0kWO;A&o}gU8!B_*Z0!cHMxCurhPd5(J14VK(oPl
zsfMtkv-y#tS@_!Zyfel-9q;=295{_Lx-D51R%Dll@hQQXW$wFq3~fKSZlk_e@AlFW
zKnbk=u$AMuPRY3bLeAiMLMkYnuUl%B8l3kjzG+ydNt(fK^*FBfoLk`07Tv|p4lmy0
zh_Rv72jh9l{pniOu5;bo_9hq|(*z_at5I$6Wl(!o@3Y@A3)2*a@~dP8Hs^M8FPkjv
zuoNN?)L21Ir^1gITl`yaWBEd?OwZ3&*~K=5E7mE09_5V^Gt?KpK<@p+ZY#%a^wz|q
zvEH`TxO=DV0(-yOd0LjE^DpOx81Hwqdhu~_;A@(PZCR?UQD4<vkB~ChHd6TOChb83
zl^9J-9!!UuN2OfWO9c{_;~mL*a*|5V@)vtGDfOnUMm;3iM{#l{1-0dn_4nRKSq7+U
zK<<rR2Wja^X5cysg_L;d@=YiG!R!~vt<uUzl3x0Vld|jcVB8^~Bj5)kV_|{oGI0Rb
z@wBqT?7Qv5kk_qX;Od3JMg&eRa!jxxky97_DP}<OlRB*Muu)H`zkU9F(fJkhIirC;
z2T^@h?OLbVGYnQ`ALV_k>d-m`ZTL#cHDx1MrpM%2+b>j3ei8(L*rFLwECQsj60tH!
zK|rLLhf$k=5Rg8a|B^loBNWX8HZq<hWEvQy-#8^?{-G3JnoSdCqQnnfljZ&WpiT=g
z!Xq5q=!bTu#m=E=j|$!#wW`^T($m>jPz~5jdHiCjl!JI~v5yk%j8Qe`HFV=-<Jf-H
zqAKjeYOO<xI>#3|p<M~dlS9UQW&+I4T7LI0;ZodQ=*V7WQ&Wu2GwsFk=MkqsGhUU}
z-zhoEm*=T8D2=ahn+~}HMh`X`<kac{F-TV!Wuz??iy>w`7k#QHVY#h+4g{sVkP^Ma
z`C=L3*N%xE!$_X_RJ?b(tJPlQ73dQ(PieJY^6}e+EygLQF0XW2f}5nbTH3<*Vg80O
z7M41(_sU}@J|aFn!@a$i`QA>YOX9Qxe%zMu8G?Q(`WPWCo}DBbtQ@U=@YGAruLkly
z?jOk)Qx*7#53035C#n35+S&j-S{Z|*TgH1*9dX#?3aLLv8;S<NWJ_%T9vSQgI}ePP
z<stozU9}D~ur9h7n>5>I5;zN=wOJHIY3^UFG(fSs*l`?57U&15nF**I9MXmzxDk@f
z1_@wHKQ4v2m*KLxML^36SqWI8ip*a?pcJs?UeG=mqjn*DRRV!!%pL;zrD$!R%S14C
z?YoryVkIAJ{nRG3fieOM%ll6?TJ|(F@uNNhbq7QNF(02S6D6M(n-38ND~;o5841<_
zE#X_6cNi>#5rJ=q8*?qz(-W>y42?3q&xerO4F}}|aN?Hf&)*k?RG)o=A_S=vw6SH>
z{Ydiw8)jiSGlG$X1cED$wM|>gH%#?Ph8o-uX)bJ>p{G(iDi&tax5AGAp=ch>ij;em
z|8`+2pL=D9OdJ&WJKJYrIoJ(Sof7@1K^vKpZU=q@=lkVpvX^yz=}DNOGA3_=ca!f>
zLCeRX6uV?0KSYiVvmOfg3^<fzUe%HIDfpQ9g?+m-HJIh|V>1h1+^6tnJG28{Cfg;a
z;e#Yo<yNQt{^OS{0U^obp>Yul@jG}A=Lgw>{EJ!Cb+y|7-S}4kJG~cOD4qfhVL!F%
zX-%q}HvHFoXPy|ubmoP;e4E-B5lMCSzanDYo13?@nyEH>VB;=kCtm)5&t3RdUk0Y#
zWtMdIoo~!G;qX&uWDQnWdB0jO{ouGPEG#PE(WYI=XP@^kFKx##v%dEr>q9tW@@{tq
zGTTg;G^SNAi*rE<s%gHAHZv^oo!9$Ypk!gWcsnGyex4J$`sRR1VC#P9p5Fd47=%a{
zSsXnWxHSP(ju{RfLjQz1mV;jmCL2!xrw>Vfrhs5_0$M8dYz{!@=fvC%mj7HB4A7wA
z!53|~#%2HS0-?zu^}o@P=h8Pg*1^SP)&2E|Rw~@FOr<s{T1~~NwFA9luq{ldY~#YX
z_{sll>3(pVy%-#k)mv+}wUb0MhXrVZr&>n5HYJd+#N#NSPol23e%5ttQUR=!?m>@U
zjWW6<Xr~EpG#}*u^*R>mpf+PM0bsUXuu!alz}0z*S*XdrWma1OUN_h9aA?in_mlRe
zkYp;{UxhtYV_w!RN;E3M)Nf>^knZmp0{PEMFvnJ<MFV|>n{r244$er)PQ7(~z<Qv-
zYI(IpQ|_Bk=#PRd)52JSHz5ln85JIr(`>Ut5#~LgIrw5B`u#;7sIYE&l70lQVo{WV
zUF@eiPT%AoOTOuX4}m8DgItznR+<b&@<Zh*W@u?$(A)pOC|7SEk5;QWghI!-&&K3;
z01bslMM*t6$2vYcqj=r#YDV|UtusIE%6{mYB*JLEuPh^n-#SDxbhnpj0^iXC-*dZC
zmU)=zR0gq@{nU+#<CC_y&dfWgvD;Y^r#2VUU^keE1rwthwrCc`Jzc6&e3eYQopA%u
z_b%l6VW__IAj&dbzAmJ321JEQCW>uNJkY?Xiq(7N)O<bq1=uOJaz=vtB&V<-Wa$i{
zalz}D{N;aG2+MI`T}Qx8^6np-abIb0Uc8}wNLAnIM)-momp|P5;ICV73c>l#z<0UP
zn4OTCZ6B(~NQ2G*P4`DJbQ52GT+<e=Y1bfaksfMk8^x>Sao7=bN|@;yQJ0yX@^UY?
z(zP3iv!{R(EUI6=jQG2j4x9uyGl)g2aiA5H0}49~JTm!g1fK0d4&Ou`V<J{7)7vGw
z#6j*qu=&@XffnIc$sj|(oyTEaalBA;kROfj;!jg$^=@cY3)Wl!Eyt6LSl9Ix(y?)T
zd?VBGt?AYch~_z2I%plK|3}zlVfo81TG_m{PT+=y?g-Gqk%fA3OItj)XOU63_=TI-
zl0*_N?_wY{qNQSgo{3h#>tws?wA~*PQmEg|n0bwDPZ1h4qrEn-=>VV_{{GvYvSJ)Q
z3RgS@r`bc}vJ;DSP$q`TpJx?*vZYTp>5$rvxG~BLlJBTBaB$|ZlaM9Hw{)S@%Eq~i
zEz&D9)6k11j%)7bPyZ9MH+LC0P)E=^T!iB?{7blzDPHkxzq4ifQI9X-9zs}rtvfzr
zexcHCG(G$BzYyq$-&v5ZGz}2wfVrEke19xyhrgB5k}%SPku3k!<?>i+v^?t9Ru8#>
z+D$HJ%NwOyuR47qal!UwGxdiCc~?WO`Slf5An<Q$2f)gi{GxJ;=CT}U;!_SyMh=vq
z*j!xS!Q?60!0F`tCm#}Pv<_WTDkDxOKK|8P;qWio4#+I|ohV2l@Ab&-uO^{n8hT-}
z1NCSNGnrg*^=HPFY_0ra983c~6P7txs>{qNKjN=7?vR21qZG0H<qynd2EhULEzi&6
zoi?$e%tTWkgIiztm}f)kvzJ+@1&{7L|F7W0^wPVn%$>GnNKYPK0*=RPnVvtFXB}I|
z5BBJ}*5WKl!F%T~HoGjBE=2G@3YD2Q%CP(f4nl#VC_9u}W=~jOwkVL*e~9aU+n^+5
z{09qnHow_}albw1FIGvHxEm%a`)wCUkNyo{>%jhHHz@(P%-6*S_pb)uj8{_Qo6$+X
zkt`BLVrYvDM6Gj=H>M|0KqtxNh6vG&4YLw6CBxEtqCbsN_M1?);0fjSaZrDACrajF
zHk)SFm)bkiY_G_9ke+H@w!IXb97Kd^W*=*I%DiQ_W(qUuXf-|l^Z0Q{R_~lv<MGf*
zh!^i5e@3U?1atv*NNo?<dP#wmryb+oxAN+zWd#S!>_v3lfW|Esu$ISb9@O!b9h&;1
z1dI#N7rvn@Vp`@S{L`3wb8(>k53~U<BrmbLEtkdo6>t`;SJsa~yF%!@!cRk6*SA_#
zG+6Zv6TuOqxYcioB86ou&4nu+YoP7#?azMPQ5pxF2UsVx2eiHA`9GTj0GM$Tynlqv
z&#v#Z7G%9oK7Zjklfi&qp;R`<9M$i46Kf|@n@tN$Aeom@*?Q=I=sOEDV&4ErH|F|7
z#9RRZf@!Ku7P009c$g+JS@Q`}-tR3yi9A>~`MA7GO{4EATL&bTiGXFUI;O6~bmL6;
z3U-0GnSK2`0DxktJNc0g&sIpOPdC|dg>^bvKYGPd#I*DtIwIp%#p0*pDKnU&&Q);g
zZu_<!jT5sR|0{QVwQ19`OUqtJ-?HX6pC9>-rbB8vB4ay}v_=~YdG&L2gre8*>^+rs
z9_jejAKV?_!rw@)1yTN1U%Zz{u%@Mo#kXmihvig>TW-3MHGQ(}G})z9#%T&)sH2`c
z^WZ1I1Htn=!l^%BuU69@7ea3Vq7)F%3_*TP)kf*Xy^cSYeZ>~oc3e3e4><2pj}RC*
zGt`Lbv{|flv8+`azIS4U3jF?%cF|tG|MC!EAZ(VT3zr@lY6P@4gIyen0(}OP2fL*4
zi*VFA6z!aD0IG2wU7KE+@YBj%0W1X2K3W}kk*M~Lg~|4yBLSv{#lvj}Kt&}Ji&GZK
zsot6>R!)R1s3U)m!pu_+?yViG39GM@qsmK@HB0Hbdw)cI;PgM-9blsEi5JO}?^CDr
z;#TGplDpIHqr?jJGt|2tY5pc;9-Gm*b^3>!@+>8>y1E{$P=cbbZ<<ZE7K35(@#-$v
zk@erh9q)`4(%wsqe8vEK*@x$<ev-(ntaChMvJm6`<<kNA*V0a$A2rJ~LH9+d$BZ_`
zchTQ7U3t^zn3~LHh-8j;OGvUYThiq5&*Mw4`HO5wOeLOL{yZrm0Sk!m+5$M*x#<G`
zGF2t$nj9j9LP)cGpG`X{I<biXz`|!8=z@-%ykf8&Y`?)lK`HB4P4KLpLb1ulnI1=|
z*jtPa`mm@WN~fTZgcH@H{#DlcHy=@M0Wk~)|I!K0n`ud%ySPI;|0}LDtxO%*7_Z{2
zMnP0xDzfCgWe&dbH%9zAnQu^$>@W97ey6;HU`0u&{A#^9paeVQ(xI~@3lr(|bNRgG
zcdT<FgpBoCL6G>#YW@jt<$KEk50HC}C*aJ%d&$L}NlI$E=a^{RGn`r`ugPzekEo<#
z$C(W>Kl;o53XlLXj2;61LKWJH!NmZG(#i_(Yqh!i(_lBVg_8)BZi?MD5=h^DH#)SV
zG!8}^fP@mXHIx0LyA}(!0>(gUoY(fG{Jgk+2+qjOE;wuN(&D{ky<7bvfzDGGok3ml
z5HT%>rDFdyFDqY6aGt=Y;_$T|3ro9xLF_Sl5;)c6Bcl63N2Oxy_K-wC^)cJFH0<l7
zSv7%V(2~zw{;YwbDd2Myebm?cz-dcZy>`EFI1!?qN@|?zGE14X%mrlc*GrFsl!-VF
zB;!NLTLbBCN*XHK9%<n#43J(d?ru!a6<oFkXYOw3?p5+!$t1hziRcFC`@KU!=YwAH
z0&4&bd;hWtW}HXw(DD!|U8vp`iqTOAa#lw%Ot}1I@{69#NY_JWt$gB?5UAUJ(ct*q
z!=FOJv6%>D_<rOBsQR(GYJsU3Pl_UFQ$$lp3kW_9>b5Iu8{cZErGOBHtbh9)_RC~e
z=C^19FGE=l)tK5V)oA7G+a{llTv$&A<er&70!2={(4Z_J9Si|9J`ZV34(9@x`4uF=
zF<M((-UsD6QrD?mrh4aDF7NnE(Kr<W$1jsp*CY@qwRe(+JKFJ!lSLM`7xV2_z6mZa
zeZ~y?vjZ6e1fxyZVG`+6AXB&9@*){v^#g3?Mc8E7Ay5O=N#ymK88JgX?Rd-%MVCQ$
z?ByN;9r?FXfn57G$3C?6x1{kVNC1$vT2jaWdis<c_R0oKrGY*AJoOZ8DcrX-8_<U5
z$;(ok%d(lgFsVP&e2bXee_TyOmzg#x?@MITLm(b7le)iCB2YSL!z_U8c7Zn;wC+Dp
z(xB+$fsR~;Bo#Z>|Mi7Uwc+pFcpc=%76||)flhMdTqzR11X}$U;mMIGowxFf_T+Mg
z9TD8;S5SK-`;7z`w|t<OX<^->>>>58;nzsHlg#uu`&|Czv%oL^Y6Si#<N^BuGFsPN
z9Q;iuh%vsIK@8UEQ_YEA|1C9c=5}|%D~>s!nx^s}_;}f6+B{<4@y0JEfCKKoZ1TLL
zmUh9iBq9N14zCl1wGb0QsVxafd>Vwp+vbn6E$o2yu`vA04Nf4&2!FdwWFioRD&ugM
zG$-!}=65ic&t!)Z%$3aln>m0J_JD_<tsD-TfZezvaCrpCLRqQJ=I2$Jp36k1-=(Pu
zPnWJDYdcnt{V!HhNTyTqtjX!-oBUv>f67`Xi5PdFRdg`R0Y|W@w|6K;g04>T5P&ac
z9`fJWLPGNTAt*@3(QGbS=XKD>7bW%1<nzKKGQb(}-&j-(le@i2232{IK}><OK-3V&
z&$l;v@E5y|!hSyPGJMU-&vvb)(s%@z$!}J5#aSeO3@nK+Rf{~-TF%hPmLBjuu8Rc~
zoL1J*zh<`yH9x4{=)+VK^~?SrTP;Z-H!=aIWk2L;tl?K&>~KSxV4?qB&VS-RkYWNr
zd^w;K?+Nq*eh__PPbIL1^6`@kPLWev-_hBBw`s4E{a#bs?k+TSdF33NNctl^KSr`Z
zQy-+9qQCt4l;LDK#vQmM4|G63roe%N<ZA+Q9rufW>CFF%(grckOeG~1;~uag#<RKZ
ze0qY!j3Cf!1aQf2L+jAr>kb+l{&Ld4O)nKNt1%rwENqYB4S=GA3y^QJUPks8r?Giy
zZI%IlqCQ~i%+&OdT30gt>~j=GFU;sfmwu4Kfge`zFRTLn0a<_LCa;S3np4atGY%#F
z>^#h+<($}>Fz3fakiYcaO`U-WHq5{N+39J20nvX0BRiDO0{GzOC^j3v{}Y&f=`<Mg
zGCzNTd3liCZqng@w44?aFX07%+HISd1}?%BOqhSk>J4PHzv^6nbE<!9)PIe+FPE7+
z{POLdV+yX1fAazJOf3g<<$fCTrp5jD-B`U{HR!!&%q0P%{g?HgLb!h6_#aI#VRJ!$
z{&w+LZy3k#E(>IA<Zs5jxhMa<n66*K-HK~zo1O*EUHn_-i`dHK=>Pla{n*wmKYbe~
zRr@-QxdlIez$|(FZp_Th`sr?46XH6R3b>dq_OpE*o4NYyUj1q-Kp+3zx3lCtNB;cX
z2SA?`{LPquV;RS0M&hP1Wt-9SzfAFl$mm1CUw8U9(_^*={%puML_C@?0)oH0Y?&WJ
z`FCUfbuqyJ#@$0HD$H2&-==5*3SywW`=`D7&Ge>#)c@<Z)9qjL$X)u)2PBXL{BAOv
znD^gz+o33z>gOQ->t3-#<-Uddy3@Z-&${(DhRhB%b(^Z&^}EYb2eF#J8S`%}L+)F>
z+<>Lu@307{#lP;=Z>HzBi8?<SvcY7GrRtAx`;$NY{}A`L8vp+Y#Fab61U>x$`+wJ-
ze*_4i00wPM_@5))f`03w8yC~0|C=&0y<!DqoxfV;DTMs^{}CMj-;8x_{RQEfGQ#tJ
z?8Bt&1oF7p|9axT!xN8||0AFY7?5P!^&^u2Ap~@%{U=VZtZ^0Yfr(K5#{sy*T&btk
zl-Wb@F9N#$JzWsF0=;vw3t6TqwQF~#+51$(&bB`ew4k=>g~v$!5v{6t;=_q;(g?jh
zX=kPW*t)pzio_pK;-cNk@S_*;nztdlC1a_`hjzLi=R})2Wlv6V1;DqWwoTqKdL#JW
zNJ<Lg7u%8CxS9|^`a6<-5n#VXiAL_ROS3o}C^V`4y*|}I?q7L__2EF~O#d_Az`KWk
zsPlhmasO}pgKamXb2K+pm!C(%t-$<t4=U>B;MCWX|KLS~x6rQXZqp7FddYF@*s2n-
z8f^0ahks^lM&m9t%JIpKCq(aQ331bKDI~N=XfjUSP_W6RcvQ`Pphx42O5+*h7itvy
z^Y&v~on>tX1pIv}mKS`>(x-QrN9j63j9qhD{2kobZOrcJ&Ogwee{fT|EVN6hv^>{;
zX@z%`q0mUNH0&Lv*{6NNV!w)HmutGdCG>3A!*~3#p*%K5tewKLS}LxVhWZ2tY_*7Y
zYhGoAzY^yL>rOS28{aV=yj*Qt=tff*SD2Sw++$!%pm@dBZgePopY+Lo7sXK%L=^lU
zKd&w3OkQ7pd4Wxp>noixC{W5#GJV3VJJG*vaIafSD10XWhyxbOIr6=LtEpC6a8Fa?
zUTHSf*r54gh-F7JJ%Yg~Ap~X5-^P}g3@9U>nL3pR?k1CkGv|gGCk2aOYvp5J$Cqj<
zSN%*6ufv+A$>&-sTN$5C*12!tS9xa>mz4s}o6CbS4+fmqE|*L<z*kUg?Nmtj=Jyyh
z2oxvYQKE+XPrxScDyvQx>I!pz<T;Y@YEP`{5mCM|>roYv#VCb|?)Zv+&_rY*A;DGX
z7MeWT)bjwI`P#iak&)zMJjs~xxTX-CJP0cMr|H!2JE}t=$%{PC<{=zwhGwhWaZww}
zD`yeiGKB(ff!I6pEp544sJpRK_gvX<95P<Jp3;&h*wq{#jF;;_&?>sPqI>RkhI#G_
zul#26KDUu$7U;ru{U`?|+rigygJa*pt_#|ETuh4YU|V((voW)o5nqjyTzTd^A3o-G
zgi>cJo1;ukcAG8AT-h^yPFJFpfNSiz=_#Hud8Ksl+E_s(e6*)ae0k8;%8&2G_;>sI
z9;7xSzG7QJtD6-o(#F|2H(&RupGY&wM+s(XNGvS!G0tJcDLc%hM^v`nq_<iNupt}o
z*H%_{ObzP$iR3#)b++n~87E}SuZ+4bFKYGEq?My98|@>Td%WSG$IsC|;srHi!o+_K
zAzjFjGB4>XTmNLD7|>;cMa!-AHwqzurIEfDAR%(F0bLoY`K*JJWx!fR`3$kBA3mTb
zAzrR4w(hvoO%cCQ`U$@M9vwz`5s+P0CVIDMH3k*m+*4Iqqs1Vj*M#AkbtD_pq~W3U
zVX@vJ0%!v%Ka}q_dme*ThS$?~0KMkJd$^%alpV3YTD&6PEm(RoiX=QX+ijA&_LgUg
zCRtz2W3brR&sIRlxKq+cX=ypGI_9~hdv(J5L063L>Yu9jjunjQh{22KoED0vS?egD
zHCm4gu9AFsJPuM)<}4)FAC@~EocxYp+{y?i)Q%<)$i(>O`Gh>!&C)XSZt<Q;$Mq(P
zqgg_uLMXY3U>i^}{m#5#z?^z~UXlS0V^#9d+}WI=PSfWirKyE$j?1xbDW73wy@D;Y
zQq=)7s=Ro1PiN1VP@#hQ;Pht$qWB(%Ej69vxLA^txw!@J>-m}dwQvGs{+bw8@Of-#
zA)}|*H$Y)zuI1ak`3qmyVG2rIAMA?><g&3klP!Exqr-L^-bN5@_$OHF=K$im74NuM
z4aHu&spqb(IAr*HY5%e=HQcB#cYs3U^ZBf;)Yv$lL%h<zr66FCb7Tf<1R<t=E;C!4
zogAgj@ee2m4Z<~u7sS2d39U$br;P#wh`r?ioR&dty~~RYEi5T3<x}jRj;iV~n4kNu
zR4U@4_!(~qi=&m4DbuNFqF=Cv`T#t|$QXyC&#cX%DC6~^1rII^`1?;GTdRwf3afk}
z1LX+;b92;j*Lh{UGXopc2F$MvJRs+F@tOmj<~(tnt(<SltHd;pLd-%sI_JuCljWl;
z%bTamw;Gxkq80rIYW$W=Nsog<A2Ar-6;0d)1cw5c=;v6A1WrU{IgBuX726o2xm_tk
z*0ar0Js@lwW}2;|RAh-#X+pM=Kk};Yk}`&xF-0Mg`{8>td$`9uOA>kEh5k}pRAb%w
zQi$KuAZtslL9s$?sP4O<&{-Q^Y(kYkyu1L04X6)j14wl6KDtR<fxtJn+)q8DBjdFn
zey&`02jSyawy~B751~mR<KV{WIsByp1;em0)<ui?&sGG&M((b?VXvFI&Le$3U$Gw$
z`g~{l_%*`x(~*O#uG~;d2e12+v4wrUg9i(5**$AG=T>4k2CFBz-BqHB%=<4odc9BS
zoi^x&v~=@?jux1ICC7#$l^%>AgrawLRFq~T<#Nm;9n?In%xKmylkd$up$fca)X*`X
zkLqz4xRCRRr|O)|Jk-x|-h=*xqM_rNsc_>-)3{_4ZPw1(4;gTdYMDpT=o6avMTZ8w
z6d(^`5%2;9)%LN1;U)$xpVFe@WNE7{j?~r+j3$)bO%U((KURLhxnvQ$kONyQ2`C$*
z`SJJpo7u(Ehg1u9Mi0baBKy4$^HI?BT{8F_lqFk8jXziTDNI{rt=|6_SMT(KSOLsj
zQiAV=729q84*ylGG?IR2UWuL?qM(U4qY4pvUKJXw$Z+iOizYbHXXa%GX{Fuc9nY^$
z!i4B=Fz!VJ2EL9nC9r7Cf1|xLK)tzh-2wDZ6&#<DnV$`oayCw)%paiA*4N8vEo`Wq
z>{r9wVt-!R|7XRs<2xT8-#Kkm@#W(Fz0BYI{m*~>&yU|WDcCg6XU;F=(d8KZ#`Ce!
z^m#*aX7seu_*6hEoHj@-*|-lwMlLzUl+JlBp7h8Z?y!G0qOH$`7HwKMgP^JTv&DJO
zS*&I|tCq`MTGUYH=7NmEt{Qh3b~zalU~eU}gIsq}V*Cr89rWk(r@s`PuZJw&#>4Gm
z&r$HLHW+<J2>qsCPZhPRi{p@FYVu7seh-(Lk<_fW25%o|a5y%2)yFzZS)|tlG~{Q;
z9<d;WuM+VT`!hC|X(4>we7txIKEI*0j)@Dynu|e^mweVwv(rC1WZ5^Ywk@yjB0>5J
zvQcGN=Qgt*M`VsOe&%+O-b?kf0_-*MvlrZIcr);19Y(f?L1*E~A^d75pXb=gn`B`!
z>uq@sbIfrn-vvt3P{0|)>p(3XqNI<Mor5~8Ju`xyOLk6+M=F^A30!4H^E}raoi&pk
z>UG)wT4frCjAd)e=djl?<}`PwKMM|#E;3%vMqN*xRULuBu3cQ)iP52QhwMBkEY_3}
z{5~(zdvJX1g<rv`tq+Ty`**9a!HjlXmh%H`h)S-l8dmsLpAkbIk+pM=Tm7wO9Cy^{
z?R`xtk_r<-3>H<qW4%TDN-+EiFPQMY{51HPpTO48^{365(g&fjxOm51#Gd$5`dRYc
z+%FZ&bvSBVf?M10tc#69QjS>G1+@gC-cHlPxx&JYjGLGRypqDnt>1^QE3zeJ*{&a}
zC&G74WZ_6#hV3V57CN(S;&)3uNE-<=hlE4qjbsuhPiaAPzR0<Hj@eY9<!-CkobnyI
zbEcFFMrHSOIWow5wUGCKz>_22$PReYQ>v}n5hAb_J0FM&K9W46_ibROvyFbb!DK+&
zEtej=dgegfgLQREEdhp7>~b=@vdB)`CPeQQQ8wRx_RT^`Dg417+F8U5l%Usv@^30_
z+(p@t+u|vvpBd5C>y=&Bqg9bEAWL<8yZ(8(d4!^#lu$6TR@>raxkD61<ds3bdgfYV
z9(ijl;B&t6gU()(%hwe6yLCNNKhr}|2;3Sqq+nF_nv!8u&QWMykC50`0^g;B<zL4X
zOSzCcsu3tX&As(*=MT)Dt>mi4zj%|T$(O%30AitSr=LB9{*rNFNzMz{0n57Wy~^6)
z<g*S10zL8W`(t-1Upe7??`Gy!WzL3ZDKinJ>pN{^q^Ql{R7G^f!j0h8_0C5V_fBT(
zl$vD)H`<-C!HVbvYbhi1pB&?;pj}y)ST#t+lA5drYN<`58G+=emDjQgrt0ofx(+Dr
zbENkZx4_db#u0q}Xjx1h+vAqFwdvCi3)R7*LSY#^#az%USNG=TM&+4|zbq4bHpqIs
zL+NVh6|6z=(PbyXzB+W9?kHFH<phIC<l4RMG_10if}g)9zhUIJw*rU+)dVyL&E2`7
ztj$DZ?QL4E5b^dnRqJt+34fW)5xAYwiI+<Yjz?}cMG@$`x$PdOcy;uSsh=rC-oku&
zk!mwU*;}e(q<c6tKbGx7oKzIMrcQ*>3&rdUZ_7Q};aOMxTSK2xYA0=86C2Tj;6YFp
z)AJ-fg+5p7cd=|jcXd@-v!y&0B2V0`UcKASH4o{ZZ0dM(pA9We*z2snugZXxYO`0y
zHd~XOvgmM)5Xs%*e#S<cus-ThGe5vPljL`X@t`a8*b7ba=%+6gw_1*Fa8!4w4m&GG
z4N*d`rDG+*UVVX7U!9m<FofKiVMypw)MEseZc0r!a6O4iobhbU9N*6c)qe7+xWzsk
zv;!!6&?O#lySM6?lBKrdO{2zTB<@US*V*jz%HoHmyC-k=r`%+aIPOj<mJV#4l{>#Q
ziQ9`sX^@p051%{qB%yN#o?TZx14pVbvf`T_C`gUof0kHWO3@REkCGfzohupM-Y1@w
zW#os>sT_SNfj+voMZecVkiSM}l<Z$e%*Ev(Zu5;NJB_Y1m|zw%uldheljxTn&LYNw
z<8>E>X{(=up)xgsN>bOIZ@Am_?46-YG@!M^Qj7kmwLcRTKn$j?Sqwss4Yqz&e>UD}
z#I;d!l+bJoouuiDbbvP%w5Ec|((R`5LpFDVL9$Bn%l^<zkVV_<yg7h(tVrAG(o;iM
z4x;Bi&6uJoMiAojs#^KH`a(nUdxQ@V*L$t~;y;>C%}bOHxY6rJDbPBOOK#O#+)kO4
zoJAtl&{v3JCS2)tkTMbJL(NDU6{yl$yEJTE#pf=7&~s$lKX2>@`b1g2@ueObq;f}3
zzB|OjNWVHxIu+rkQk_*F__)>ko{e8c@UvpBJ_8k-8L!}E{1Ig2qeXOxrEtWBK55~(
zjQHE0DmMNa9ZCERYAVVBjr-HINGOhlN%<D}CkqA+>F*9m9Xw#|y2HHaqczX7Hq4nP
zPseBA=JJrGjw6i%QbXO2nz!~kh)c{DaAS0aeNMEt2D)mt%lqlNEEeCp=<VR()D>ad
z@~|}i?u+3A74OfQmmGq6Am&_EV8`B;E{TK8YtapW9o)6ZLlU9t;kS4Ec{0xdmfah<
zqU#2lJ?o|xq^Rev+;#ioCuO6cD(y$qki3tRF0ckkT+QkYeJMw|*WgL%pgG~$<G1(=
ze{C^2!{#=1O~mm#-Ic7?1jlh=^^^SaQq<E?C789C#V^@Kyc9ippg(&+$(c1&FXE!E
zX9g*Tbrf+hH+t<|@u5FcYYGW8Ut#|^1C(*<1UuEbe)!S#!7+zOol#5w&*RsQnS?#q
zA&l?2JL|Y31^LPNK+VJ6l^3OMh7D<uPA<}3O5#gtEC(jUsk#G)3P}W=24IUeQvI_@
z_Y1AgS<@l&@eRVHwgUF}6;j}1&44qSqqGT!f)gb7!Js9fqVg*urXD=q^;cDO+0x$a
zCBej>9LPh_q8aQ$!U`;hZ;s3xR9|fK3WR8h#P1~~uLPO0VmXDcB7<VKXq%s5dpEl^
zE@*}pv=y=xlbt3^Gs`CqSAA&|vxJUPtR^%>x;}~X6VcZiJhDET)Ue-86Q#)P$6JgR
zMeig~H@wF?JPpo!I|$B6Nj=QQn`^R3AC)LLWQ>v(Kx#_vf8<)#u|>^!3i}FRo9=mG
zX~Kh^UVCsr=W!8TKXGUtOgLx!II=m=HQFB>u;i6Zgftm$q22s5aQ?YO<_)s$b-qAp
z=Q%m+lKAIy$M!8kgR(0bu<KXOJgZ2tu;nO^GS;-9T{zrvVJPq<)%O52RCtADSP4(j
z`0C^_<_qrQ_a-2Ud>%(VA*bIC=Xt^QZs{paJ`iu<VBYE$Rmi2KX|X<aHp1`pcyO}$
zS$qNqhZA(pR{ky3>n%~p-FfDj7$X+n-5<2ThTs}ngAao`O3w+bM{v!ubR`$qB$idT
zyyVWcV+WAiZ|?9(wP-7hJDiukA49k`)84{>dMoVt2q{%!8C6@SvXy;)S(VC#(djIl
z_*&%h<k`S}B2;^uZG4!wfJ>pR{gK%ZlLz~>g)%<Wjf>y=lC<3K`ea^}K4oww>W`GG
zVG;W~TP9@5h~0z(6_n)0ik>%$enTBHe3NY6c51vPs#9ZwA$Ql0r#-rraA(k*V>)c-
z4((mW@6JDt<Ki{`(68#LH0KbYva+4S=RHKM_tT=Jh4}O7prr~;Gk3zPosya#*562o
zYC6B*7+MQGX?Cv7pU2B~9(uK`Ic56{?A{&uk%n&)rE6i=>Duw0^mw^;Qr|8yj4udZ
zlY0}xuNw{qjaj6x&y2Fw96_wOPxz}U@PF$&=dm4s@$$jdn;0E7UO6xRF#O{~M@#pS
zc%RAnEli3)A;PYr5sh~G!VRC!qKmgx*<HrrvoNNn@U_E(ySweev!!fHBW>31+NOR`
zz~pU0rVv9;{b}y_SJE|+SIb;Vwq^PyYY7tq4o~j^+B$UmdqH?u!6i(OoBr6*TJ&?8
zZ(a~hzNYXg#p`lWd=NFjhv<2nUhqoEynE!59dccWBWoqs&nFdvn-bHZemH8(@7(E+
zyscM~LZqlXSi>wy4k1epK)bkn9_a_1#5c`=^E1FRPikKq`OJwKsq^=okne%NzhfiK
z3su$894>SD2+cB(=YR50ko4L4sjGRZxJIdLB<n~q=^Wt-@8t<~5uUe?1~N)5jlX+N
zZr?+>C59n{Egif1HQ{By*MSf>RAL6yyl})Y{s4yai2uM-S6a=}r;Ic4M8}Xy(<McW
zj;3tDzEQ0K(<9!d#g8n*D|#MddiG)ZqHaNQajeo=BYpdPLi5r4Z_KWIO@f(CcRnbG
zehwAuFQ^(-nKqR1sA|O*NqUwF%@!lZdjy`;#NL7}MdK?Ujdb2SW20i!9?;ZVS@6{3
z;AGU1f}3#4jl&8b4!#X|N*7G3ZJ0O9QukSx<2UlHxMR>UC(`P06qC!1kqrK1L5{#b
zf$Vp@I5&tOsaU=7v3^<_-A0h`7j1;?vV=B}8<NFUMMU4Rj$(ac$6#z94t@qP%XmkW
z%E`}fydXsttEw-OPefcuc2+my<zMU_w@n>-xFOAdc%q5g%eEEtEScXcF|;l*f4R|j
zfS^n0O;d|1I52K8Zm)%iI>7fv7$H6DC%1Ug8X^$(Ad|R9DL7f?yLrK@03TLoHXd@f
zQ~BXo(@0-83;$k^t(ZJZhX?!@VAuhjazBCf=7JuDnnDP7$-7k+(C#=wM&zmC5oRT&
zINy(uq(1P(SNK8OZ0#ZJ_0N0Qr*qR~;CgfUy%mA=Pn@M-`i}ZN$xb}MnmE2*^1Ur=
zG5&3iJ6kRnjdsAQs0;iEBXjp}D_Pa!YnxSwnT@75?%P{mJv4Avw&CEJE(?B`<B(9k
zd-jP1=TY~(K<h7_qEB92kvVg}o`rhjt70VU9q4v>d#48+#+><)CvKrWxgVeX{Fe38
zbcwAEwYQRc`sEwK^Sx(02VnEj%MwB^MPW9f0`YXX&xWD50@+IEDVKWf$Gtj^(Kn0S
zUo{Z5!&qTw&0$81``>XdZzTCp-T6)UT5eulk~_bZ^m^|_{R?w586$*vj3^R&dwI1f
z<Q~ubRCJX9XO_~)kj8iU@WY2G?^gQ|mj)0e<>u208R=Kn=BDy7Yy<W#;-&E?luje1
z@+(hZvbn<pc!bDhSLI<oo-Z#Z290|MV2-9ErKjwDR8<G%-hJw;i1B`Pgu6?T5p&qV
z`Lo30*O{l7SmzMmoXAhw$U!(J$et@3?lbPM&Vz<#jQJ^iPlOp(O^(OSE^~cQyzgW<
zNI<D&JG0$mznj`YKNYd#V7ha3T7Bnjp~8O8>-0dHW9a$=P6-F;F52QLeDkBd8#aye
zepS~d?}wO|NMdiYW%uoLt{#d&h9*n(P)Bj$s1=EkueTusC`{j3N#uA{f^&7sHAtJ2
zO?9iCk8_>dO3V6Dg&glkQb9uXUhyYL6i0*aE|wh->yEknMw<NTv%H^+6;69%xCXO6
zk@k#!xQW+jRvGlVKlS-+Ka6Yovk6|T5B`|<c+8~W)7^w_#lgr2<&vLNmF|;q3-zrk
zb;qtp*lTdVnM<bK5#J~5`A$~@$;N~l@Ut%QoNupZ-S(vy?XWxgbxdlo`7?pAxMp!4
z>hLo2Vfh<)(R0ISaD4Yt4l_&M{PDf}PUK<v!GY`xo@uB5{w2$ojeXVFsA}cJT&qni
z`{#rI?SFisT7MhQUzsmn@)@Z2pv@bt`sDYQWz3n%ENqlwW6zCoE1Or1nk&~E%zLJd
zVO@%-jeP9Xk0zcsi^OESJqMGQU#u#vhuoF6USP|Me1h!pOo?x@87T+tqN{6V-=pP<
zY^G&Wyo@_m&GFu0gWn}58OWabR<e=9gQV|8v>i{C#712lr`8t6^B3kP-RKF{W*O1S
zHfmVntGsP;)_Po_PuT2?WAZ$%Y=PU9%oP?8<dh3`b#v{tUK$ICJZ4<CxUD=<9EX~n
z<!i>Zg4cwsI#$CrlJ`}AEub(L^$X-u`+2`rpS7LkRUKu>9;`bKetkz8vA<jp=~WrC
z$L8bE#o;kNK9l={1@_bAI#|FBGm&Cfiln#aK(de7`n12ryAO9)!8<mLiy9B#M8#)<
z$u*Z>S#}U|-7r`>b<iwu?7N|OoLbDr9``#2BlTC7PJNuJx5;)Dy_P`OR~8Z=>Z5vK
z8oG1}=euFDGwn%>*wmuccSi`ZVMeZTZa{rP;|@--B;#`nB+aq@t`@#n;~}vtYqgm|
zGhLFMH6v#=N68ac#dF^FC5){+Zk^t92$E&8R^w_H66(tdDc995To>kk{%ozXPnJ1d
zb9G~R>*|ZXD2w-4#-*)BumUREk-9b8y*Hxs)^kdi#Ac67eeVO5)a<Ln*8ri8Mfo?>
zr_)s(77q=Y5=8ziK0og>o2Yi8Md?{+^!dK0mopjJ_fpd*3J=VhR%Z@#FT)F7NT4jV
z2mOwHw-`nF2lRgOw^Z(nO5L42u7tzn20B*Tyhtv>j&4M@-q&9r^YoMT?-#KWKbc>-
zk!lb_V9r6gzHwc1N?@bKwPU70V%o8OZR<vR?-u4^Ss(zoZ|{qG-ePcm&$q6<?=s{u
z0ur)Em!DQV7<dn@<RyQY@7cA;f9pWYRd4b8tc~--$XgnsyWF(a%_F%~YJF}@Q_1{s
z=fhw3kNXMrfLWr>F;1>&AKAJ~-T7>}@(mFlXm8DflmQfM^4r>lYAskn8ePApTdLIt
zQc;uNByYO&AWTc<w7r9;&LGk1fgIQ1#+`%0m6tEV9}Lm?5e26<vh6$EMP|9346s;U
z!*ZKv9cEX9L&38V%6l9`ZjWwE`a@B#rEQG^FA&1cGBS<l2*hVRUY#{|{@d;6{BrmQ
zJt(vX6X*dNrN=vk?MTZEmxtrE@Z>%Zi}V%x&`bD5achX!Vj|=_#Bwdhp!dm<MQ4d2
zh2jHHhI+hHam-!*w}Yog`?74WxG`Wb_E7nfrd`ew0(>j#atqdj#!=<no))v9H3^)@
z4G4rEdD$Zxa@1>UdGABdn^z<G#)>7j5(*g8s`pP{M5`tg&d%Q@2GTEBTOM@jm9gz0
zw|Qhqt!{H`^}6sz*{zi;cMcmf9{M%g&=<2s!-cBy?7{i}tGzD|hr0d#S3W5rA|WBW
ztl4X9*=g)zL`+6Z_Utr_r;KGRStEOvA!M2CdtoHoWM9S-&5&Ia24nb6&+mGk&%eLF
zzt{Kv>wUei>pu5=pL1{Lyv{kdpg?>W$@VGDtjw$7ie{4Ga*j4yb$bL=6bzSjV&RmS
zN;AW6m2#u&`qR_3oA(Z*@n1}yvfSAr);GmIngp^heVAgrd~*M}>8V3Po1lwwqg)f3
zF_v<;7usNBTf^S}Ncvu(<Lf)@Y^K-kGuICIw7Ei5HuAz!06%o!OJqcI6GP{}Z!0{E
zOYU!&Q%>CtGKNmN@>JtE0zbIy&OMZ*h!rRx5~)uFd~A)clX6Nv*n~x%;edzn<$x?V
zyAr|E_wNNSUgaLnd}CK<rJSr_qN9_h_@gn8O{=dgbjml7*j=aCk!O<C(!54|9QK+7
zjF#>UYt;acc&#3GGPtJNUR_#ybW%uET*flnXRCOxFUQ?3DnI?4DN%}x3QI5%Vg{6`
z1|=kpY~1RJJk<w@z_<b)c7y$$k0m?$S8<*?3Xfy<n6Bi8d+Dw(#<|0G=2Q;kLSK4w
zpNNYs=G7%Ifm@qC=&jpZh4gNMD0s8tIY`4hpJq9NwQ}aCM(*DtG790QY_FVwvxOX>
zNr~i|ZPud=3a)sdR5S$q#>RGH`)0q&F%^EK`NY?s#ztx3`E~`Uf2@g!E2Jgq(uFgR
zmTjh*j3L+V8!KI^^`!fiT|zr~g`jj^Y13{^a&im#LX<R*AaeL^CGqP2Ct80k#_K_}
z@BJ=#`Z-;dwCvxVQNF#~Ai)OP5@XT3B9G$-U<&Y}g2!1K7v2gAo=@oe9;{*c+??M7
zoJS3L+`;E|D@LGgn&BljS(p8081cQreAdEDlf#{TVfqk3&)W>_l6uB>K^DC{Y+pnm
zYqgAwN|-<qt>(e@;2mWrWsq-Yu3C`5FR;&nz4EuSOXxabpBHZw9xHNw$H$_adJpu3
z6M(EM=Ee&h25srZZL3D`iWruGjgV#;s7U;AG@$OaH+MMcR>&m%5OknCj0AwyAZ^O`
zR{^1eA156!qx@gHZE(b&C!=UrKD{2^VS@aQN=5?KU}EGU&R4ME-jdEMDE&?xqMd^X
zf6U3j-TDTKW6f)j@Dx3-hBW&q-Q^lDoa*I_iBW9uU@nFSJDQTN<trQ=4iQKd2t|RT
z3dfwc#JGA~^QkEbm1kH7k}u&2WA_Pou+VsG2OtlbZ~NN4Gip5yjYWl(sGD-a%*aMZ
zm~*Msq6InZvq~YA`H9iQX!L}^3sa-%fn@jtEACxM*E|;R{<CAxb&aWbn+?h#a=I%f
ztu}wZ3M*}RqNm-QFjjbV-U9~6T4LZuN$STh!tXd|u>$KUoaq~V^QDB4N9K9jkbGM{
z05PQV@Z91~YZA6M*E=}n`D8blk4Lg7c{j?4OO?BolFkAQfE7xGEWSVT5FUlQoxaWl
zIQ<S1OREs+XgO$pAn7UE%Mro4?M0n$G=~wH4D(wU{KYyIB1xzC$12I;_^0z>E3yVx
zpvr<Wk)&K*tJ{cg@e#f2A%uvT>7!XQq+=5YsOj`bZPgrz_KZ>xHqEO<h+HwLxkVvj
z>6#sX$6U~D|4yM(dCcfE>^T12)PuCu_gvHSdWiQkyAF?EOL0?^6wH2xJf{VAQZO~s
z5gjlA^D4GZYLJ1f{>6P``1d|`;HqHP>sS?Tu8`KGKD)3*H-T!Xe9!38U}(dsmrT(W
z{PT?6H!b@4opdj*0UHzgc3IV3RIY0H-3c55jjvTA!ue!<8kE)}WB3gRTq2E2)_;0+
ztvGqc#R9Am;}N!1?nHxd{0+l#9~t$z$YbHA?&KHYto?iu9a(qPxt9um^q6?#vKA@J
zP^Yb-$cj>QVC(SNR`zp;oZwPd^s8ai$<_t9J-ytI{<C+QJgR<2J5W*ho6s_{tWZ7U
z+3Xu=e(_A~JJP7bkuP{?cOVzRjElYWOmo?9^;oJgx#M%}?@rMrisbk7;*gROwMrt;
zL2U8LPWZQYBnp(=G#BM7Y~>ZwAQ<4<T(}4tFVzNZ%kZD+SK9=;QBiu*>xXr&qDxyI
z!{h0I*?c~~fB=B`snx(Pwu{VF9B02L{715ImD(kzo>A_#!7p^XL8GpftP{RSrWP-)
z7n4&+e~S$|?Tlos==^;F;k(bEHRAbEbKjp%GsfoGU!0CZB`#4u8g6~Vwb?LuXVBmV
zg5Z8XGd>?X98%LjNYxG*@cv|`9Y6-{Bfo#-L8B8{fbE>&y#3lKCjsmad|)WZ6CWOU
zqD_kvqOyoiDNQ2X<i^!!QpM1SQet4S$Xu!pk5$2Y>ZyJ?JkMs9-e<(8eSlaG)L_=W
zhocC(WaMQwp{jnx0>Y#q#vk(LqAX$_{(_V<WE)M4WG5{Y>Oo<4;m>m%Yi0fQ+!%8s
zp^?dRYUiqra0Tb*3K6A+t95Kz0CqT0U(fzXJj7ZwJuljK(qr&U?JbPdjpMr(Ewp3x
zo=2hMYbWr+Di7#1j%oc}?xW+UL~nqCon8(V&2sCS$RxEU@2y=%)=SUQ>@%>jE2((R
zj@$5k=9Mnpk?0TPFD7kzil-l|Iy?`U#$~K*xZ!i{N~)9X^0o|4d9oY6WPHtR8%rna
z(yAaMO9RQ3D+|J@9O@1m!}@NgFZeot5|t;uBv5Ys@O=Ek^TJGAQlkYeRcPNeoCW+F
z`CIwEbwsUaY6mG6+DfA}r`#hs3mloI7^AMp0X{f<tHmx(#9aGfVl-lM@;LY`uAKwu
zR7<ZV24xx4|4-uh#8(zplWrVkAg^mtFnt(`f4Maso~oH>yyJ9u6J006kFc`mPt$T%
zxoVxuQflYv0h+TEE*awF9zVBi;S%QA0$nSTh~8PMWXbBs1sXRsvIi(Yv7@VIoz;Gq
z2+W*zTmiQ(+DB<{UPY}8)pM!qNlNJ?rn9lXQ2S6c<$Nfk7=SP6)mWW=TK>A@X`R$o
z)afmK9UuX$qCocXv!DHPPOv;7#@;^Dw*i*jyY3>M7eQ>3&TXts+2|R4e8vHDi1eZS
z@|OEy534%qe7fT3fwgFD^hlm8if<5454R$?c5f*dfUP=RWtTW+*_G^^nKe)9dTYVU
zj^qekhst}JRoS$8<?A(xPOSpN3mhf=e&r=OUN@$_Jw$$o>T>mV0qap^aJONj)47w%
z^&gW+6x@3$IqCYxKeqT&G22Y7PqF@2RFEc<eqtm-oP8=6&-a@U9#U!SxytRS8L&KO
z>`*#4eF$XDSXbXyo;VoE_5OOqBspF)SQ1_&E#q%m?#)gxt7kOAB>QpA{p1a6&oRnp
zjXmh5+BI9Ird)J+pK$`%NDsR5nFwF8`TXg<o7+_ac|1^UL1fK3;x3QT7HBSYR<B5E
zf5QQh%+GbR6Vdjl-?+zOUw>?A>+?<KUN5Q@zM`R^iTUWF>O^i=)zP6MbyJMBM|;v)
zz|kOd-B$mycn?%wu>gdA*eF+4A-ci7Upy>g8L%f?3=LhEr)8pOK6rljeP3q=qmNW?
z)9p?vwnS$(lHDqId5>(i-h8b&GnZ{j3y#mwZ!<T@g0$X0u@EkP)_K_*6cHcY2vhB?
z8j11*+Ea3ql<-Ex?~3DCw{0uQ`L70Gug<b^Q#LlBrAAVFmalni1H@$Xm~*ZBgdVb{
z6G4oBlR6(%KMZ&3aD1R%JEf%?Y>XL=j16W|99%3{_sX>?4;ura;}Xm|FRD`|@`*1Z
z)}t1=Lw<VSS><jAHAO<i?6kTY1HZc8M{Y>&X<TfLcQ=j@TK3t@NHWh)OVjO%&ojU)
z*<^xZ56OKULA+BUzO*bpVxG(NYeq>P8Jf-DI?|+(7VQ*lt?dn2v%)V7?B0WvUCDB)
z71Qs+p<ZI;F6{=^auRz+$3N7PlSI>bqxaNZ7URDwfz37iBAZ(HboOXOI~NOiEnEgP
zp{6T0_tM0_cuOaK(GH#2DFMP7A!XZYYZsq&^LroQjkLbmrl@9JCBH}}dIy;6$<C&n
z1r;1ezh2w@1#$iSws`H{cwEx$7wlARge1JV0n}5w$3);4H0~KKZy?OpOHs|-Wl9Dl
z)%JdtDT_Jatc>x=xM@`s2@))dN1|rctAvOv^((o}r`XwD_n5e#SvclEl#eA}eWAt^
zIkCtel2I)Ra1Sb7v7e{L36?@Mf|;U;yG0_Dl5+Kg`WbP)dn==A+-u==#k`bfHlpS0
z&Q&%yaDeZ3((C}^Z&m|!@9`iS?Ie#nW;~+2-xJAHDz-9C8a2lKBwD85q+4n7<4y#y
zC^h58-TA0vzrSrBr<}6|bB$~6Pv7}myZSCv6d2i3j}ZH4H+Ie|x^1km-m;C89w)Pr
z$*@0=7+|){yf@M<v5A~5dx<fM$q)YEqvoH#@seE`NeWql+#5Zrr%eixe;<+@Y&YUA
zmR5QNlsn0d%kb&LV?8)%vn`QhH3Jz_e+zM(;!3PElXjid^xH)IJ~bPDwg*`Y6Uxz7
z{>u!8y$W2F+tOpc-0DvN@DWL)bMg_h>KQVC?n$h}LKWxpZI{W)%s!RaU99$tPWu7d
z;LadhWyo5vn5o{j{I9!icaqeU2q<TD$Aw=)j-kjyjx#~T@RQ+tyV@5jD-6P(A$jJl
zE`b{00dAW`JVz!JtaGr$4HK8kChf7P0eVeCT^PIOK7!!KVOnX*J*?yl{{*aeM>n82
z(Ee)tE|o326+QLWRF=tLdv4M#I1zL7Caq>=tci0O*gA3XG$uwE$aJ!3u5)eNd0vJJ
z4W#PRb1(XC!Kh$OiIW6B-Gr3XfkxBAH>GFEx=>E?Oa+-AerVDsHg*#|9;LPtns}^}
zkh<NyMfTwswYCLk9bXlAIzB*!R!1<pxR+rdua1Q5K*G$G9cEIF;rJ197v8Y7a}8ME
z`FvxvO8#@cwjbJGWMp9{S{1EeFg@G2?u`0dYw?CsQ5(zkk8MR}+uDKO0Sz6g6LRPK
z%KY>E*M<_fr+Wa;HVR&VKRlu9sb-z>J8EU`cmDW=SVb#%XPn2(SCsag+RISEv;hXF
z9NqQLh#+1=m=VoFHA_p|^MVkv_>zY~>2Hw~C{XVME=_YjOh`)hb-Y2N7*-u&kyeQ-
zm9wq_JclQ}ZWvzQl{Z$W0&CY=!>$)R5loYR)F|+35nb$QNnDo`NZRCv*#>I$R<?mI
z{srO>Ph9AZnQuc7?{jA-x|wnpsP5wVsVhpmmx{u~%3H3s=a#bsBy)Z{0Jdx#oNlD5
zTD8tzAq=v*x6=A9#^GO1I%@pfw3e*z%2=6+;A$f<J|!FTgrpM}<afRW!A6$H@u)=!
zX;950Cc;9lcwr9r+2hbVP1{N|Gz_tZI+_m~E%?=`c4<0G2i&mtO3XWG0i0QlyU_;c
z>vrO7g)6++`534+Lr-8No`d3;3sjSCTj^VR4!9S4uIWl{DQ~U5MEH4(&aG=o<|>7#
zUURKAk&9H!@8$miRmMc~B7A|ot<;>zjnOxbHNY7bu=qu8S&#YYEyt*zX@codF>0Fz
zExcNx0Z1ycoFBJHy_COxz&WX3KD0T7z*X3kJK~h~#Yam_qJ2e9(%Zne7ZT;(*?~|B
z)u#Z8B&GklfLZM3B7}JNTSBEb+)~V^WSX9zmRxeeYp?<tT!cHa4vfbfWc-sml`2Jh
z54LZ_pejnvM(}2Tyb%7<c*VcA>#BcbO~)mh?8!gM?}ohPbEBVaMY)SSV~K`Bi+`)-
zU&VTlI;tr0SnwS*pX83+9%~mY72e9){%UZOBu=OEn^ne`Y-@nMIcB-i`4GSLjxBdm
zDAB9fav`03Vw8HD%V?pmo^M&S><isyHfwJsBd?3l=1#%s-uFly(WC6!8BS||VVhuK
z3+r%)BKxSBbk!EQC3xKQMpoLJ1$ii9oE@ZmfKj)8d<b|Z=Hc>K9oHXI)cbjM=nbQg
z6FJ1#kh3Ldv5xV+FY|++88FlMq5Q8<_z@+&r`i6Odi~N+{L96v>E$>05D7?Ycgg{f
zt<hPOrb>hucqauUOU_KWbAX?x*fTyY#aypSsGdnWx%;}!TW9@8W|?-&P4w8UxxgL`
zJ|JLSCo41SxX$bcE=s$(I&XHxx`gV=vamD6(W>V@n=U-n;32YHv5&Xj^pseR1_|+*
z;^zYb{BIX|&M^E!RWG<$?tN`vEqN^iAoHa?ceyd0Fj>D9!}DeK-H1*rEAU6t*A4fw
zRl$<e1ku^85$Tis1ix~%F}15Q#=I~1Qg99baayfN_65i{G`%suI05DDua#FMG_(KO
zS{JOhSNXarkLp*LC`HbEV6r0{fZ6s<$$XeF{bX`fkM*$IY~sWAJ?EcerRSHUiU|)k
z<*iMc2}f4M)+X$5O)i_phl5tO<%-DbH^yh)+81vsIcukmnz(B0-my4sKB|z64Iiav
z-!hmkt6S%yX=SXZP92&ozwzfRhvpA+_vmTDHF9@>yTsbTt#`*oVm+lZ@#NtyvbNr-
zNR&3^^ItSHo!t8y8&5HO5mj<ow<P|qZhnaoBXf3!A>O1$poVkXTR&^Gu7RbSoLu~M
zk38`EAyoZ5&52<hEo3cUOSU3h=a`i7l<J>MbKmb+o3c=te*tp)Q)j|FjHpTHiCOT)
zba)M%X@>e&6FM^;2QSl{-k&{(-ZRxCO-RqqUYYrGsoV{c<tC;No&U6Gj9y*JVk`t{
z?dN@<{wJBA>^clC@QF&C`dvr0J0Ge2>EZu(Ibo~QIHG84RM+mhk5O`9<e|k1;-<bl
zk>d@P<16hI$$u#w>cox}cx&8?KfrG29|nlKu!F-LOqVKyTSc*Op~z=sYL$^Tyyiu}
ze}RZY)mW~$p!}P9D%3r3!xxMTJ)k-vLfd}JYyPoR{=ag_^bm={_#T$+0*krdhhUrL
zly4kW@lbVwi9@5)wqx-Hc>$ly2R-B<B#M?bvE{G<?!e}|V}_?HlK;^7%d~{WF#IhL
zGpN;uW9&>X-w3MKsGi>q)EIdM(HOEL<yGtkh7Se4=Kx~oRQ&TT*p)cCtA&q`DG>;J
z4vvH%iL1j70_r#-rRL}Zc!7l9&P{=>4u-*etD`JcYgy<^S+w}<bFMsA|I#z6d$jqj
znCYLUX<CZk{<6809l1MAPlzARHM@*-TAK10F+SStQv+XmrM#43_DEGjVy70C*r45R
z1K@q&xMwGZv8H@rxyFD-zg4u2Nx>2`FGpflBb#7caAbz=Ta3pL+iw#leT@yoq0#g!
z*XA#mbHLiSpV`U=YZEo0Xx@Rv3f5`?W>UAErefb&cprt0bye38hit~ip=yb6#D6)%
z+#}O1<6?1LYt9Gnz-}%|*wOk1qxXh_>5e*@yg{d4(F++%*cO;oo7Koi7Hx)+z^-}a
z8}uqrE;zr|^+Li+;8`Ue8++8ol4D9Z;|U?@;lnUtq!lX6p3k8Q>az10k40TV{mYJg
z1P72|WMsIf?){|}k#G*JHN)k0WncC>?Hx!N_!Qij2;~>LE)M`{1wmXjWx4mhqRMRY
z!ktIeBzJ66I+gJ|)hSnCTm3;rtc}ZOi-IKM*1PVu4Cn)^E`728PMRleHnx`vZeRV#
z(@!`$I4dJ{w5+~R`~H=c4H!otVd4kKX3`nqjPr4*79;p*aly3L6N!_o0NYFHEkQqP
zU_lcT)I)K++#QRuBDsYz5jGwE9l_x(D(%4}NuB1kzIH*Py=<%Rt%q@_)uoIY(6=l3
zGU>wzumA-8q5bWA89A@FYnUClf4@}gzC+p>M}8PRD#q3W^qeb%<RPYO9?pcYkesh<
z@*YRkzkOsI^AY1Q1xa`3TVeR8xm}-NYHrp~6MgM1I^pK0(mmg(P*h|LXt1p<sT23d
zqeg%S(?CPJtv(NUBKRX$Hn!b>VTpAARLbmXfOgkoc@p)Z+3MsV_Var=cx=*K5KFVS
z0Wnx1dGf*$jN$ixId=E5?6*8|@Ci(2Dyg}e<x*U`9C&aQ!)O`a1$!BrH$V(hQJ`k~
zrr&RdtT_kEq+fTvNA(r_RC1u1U_MwUg&4WWai*0M_PVE0iUe*UF@IIzHFC)BZ?}{l
zq?kz`C8DglNdv$1weR_{|1&n48-=f+vf2+ZpCEKk`TwKdPr@+vLJnN{haWlCf%C@3
zX5v;&31J6y2Z4QT)EtzO2-{qrOo{aMgL9GZ>;_}!lg_|~wpWH~2YkKJPs1BUOkVtz
z${{f|q@oI3X_adBuQpft;jg0}p6q{pM>PXVk{B(=UdPT54q*ky-~QgJ|L)5BcYl^>
z6vjxm^<n#4lugdKLrg;CE!#^zKay7&3cM8429Dw~b0V9drtW-ct5COP3)NbY9SgKS
ze-BAFHwC-(VOU_!5~=@d=VQp~Yby6b8ijIpxI*fL9cL602B3aOXo(QhlrQ`8s*S*z
za(A^9Lu_!q0bqUfhS28nZ`TY^(OboTx$=J>|BE<qQg*^TtLw?0dHoUJpJ5s5n&?z%
HJ$dy%H_V2|
literal 0
HcmV?d00001
diff --git a/cmd/clef/docs/clef_architecture_pt4.png b/cmd/clef/docs/clef_architecture_pt4.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6cb3b4df24d6aee5b462ed00cfffb8de6bec60c
GIT binary patch
literal 117597
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
literal 0
HcmV?d00001
diff --git a/cmd/clef/extapi_changelog.md b/cmd/clef/extapi_changelog.md
index 25f819bdd..dc7e65c01 100644
--- a/cmd/clef/extapi_changelog.md
+++ b/cmd/clef/extapi_changelog.md
@@ -1,5 +1,10 @@
### Changelog for external API
+### 6.0.0
+
+* `New` was changed to deliver only an address, not the full `Account` data
+* `Export` was moved from External API to the UI Server API
+
#### 5.0.0
* The external `account_EcRecover`-method was reimplemented.
diff --git a/cmd/clef/intapi_changelog.md b/cmd/clef/intapi_changelog.md
index 6388af730..b7d4937cd 100644
--- a/cmd/clef/intapi_changelog.md
+++ b/cmd/clef/intapi_changelog.md
@@ -1,8 +1,74 @@
### Changelog for internal API (ui-api)
+### 6.0.0
+
+Removed `password` from responses to operations which require them. This is for two reasons,
+
+- Consistency between how rulesets operate and how manual processing works. A rule can `Approve` but require the actual password to be stored in the clef storage.
+With this change, the same stored password can be used even if rulesets are not enabled, but storage is.
+- It also removes the usability-shortcut that a UI might otherwise want to implement; remembering passwords. Since we now will not require the
+password on every `Approve`, there's no need for the UI to cache it locally.
+ - In a future update, we'll likely add `clef_storePassword` to the internal API, so the user can store it via his UI (currently only CLI works).
+
+Affected datatypes:
+- `SignTxResponse`
+- `SignDataResponse`
+- `NewAccountResponse`
+
+If `clef` requires a password, the `OnInputRequired` will be used to collect it.
+
+
+### 5.0.0
+
+Changed the namespace format to adhere to the legacy ethereum format: `name_methodName`. Changes:
+
+* `ApproveTx` -> `ui_approveTx`
+* `ApproveSignData` -> `ui_approveSignData`
+* `ApproveExport` -> `removed`
+* `ApproveImport` -> `removed`
+* `ApproveListing` -> `ui_approveListing`
+* `ApproveNewAccount` -> `ui_approveNewAccount`
+* `ShowError` -> `ui_showError`
+* `ShowInfo` -> `ui_showInfo`
+* `OnApprovedTx` -> `ui_onApprovedTx`
+* `OnSignerStartup` -> `ui_onSignerStartup`
+* `OnInputRequired` -> `ui_onInputRequired`
+
+
+### 4.0.0
+
+* Bidirectional communication implemented, so the UI can query `clef` via the stdin/stdout RPC channel. Methods implemented are:
+ - `clef_listWallets`
+ - `clef_listAccounts`
+ - `clef_listWallets`
+ - `clef_deriveAccount`
+ - `clef_importRawKey`
+ - `clef_openWallet`
+ - `clef_chainId`
+ - `clef_setChainId`
+ - `clef_export`
+ - `clef_import`
+
+* The type `Account` was modified (the json-field `type` was removed), to consist of
+
+```golang
+type Account struct {
+ Address common.Address `json:"address"` // Ethereum account address derived from the key
+ URL URL `json:"url"` // Optional resource locator within a backend
+}
+```
+
+
+### 3.2.0
+
+* Make `ShowError`, `OnApprovedTx`, `OnSignerStartup` be json-rpc [notifications](https://www.jsonrpc.org/specification#notification):
+
+> A Notification is a Request object without an "id" member. A Request object that is a Notification signifies the Client's lack of interest in the corresponding Response object, and as such no Response object needs to be returned to the client. The Server MUST NOT reply to a Notification, including those that are within a batch request.
+>
+> Notifications are not confirmable by definition, since they do not have a Response object to be returned. As such, the Client would not be aware of any errors (like e.g. "Invalid params","Internal error"
### 3.1.0
-* Add `ContentType string` to `SignDataRequest` to accommodate the latest EIP-191 and EIP-712 implementations.
+* Add `ContentType` `string` to `SignDataRequest` to accommodate the latest EIP-191 and EIP-712 implementations.
### 3.0.0
diff --git a/cmd/clef/main.go b/cmd/clef/main.go
index d453f65e3..fecfcafaf 100644
--- a/cmd/clef/main.go
+++ b/cmd/clef/main.go
@@ -14,8 +14,6 @@
// You should have received a copy of the GNU General Public License
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
-// signer is a utility that can be used so sign transactions and
-// arbitrary data.
package main
import (
@@ -36,17 +34,22 @@ import (
"runtime"
"strings"
+ "github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/accounts/keystore"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/console"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
+ "github.com/ethereum/go-ethereum/internal/ethapi"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/node"
+ "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/signer/core"
+ "github.com/ethereum/go-ethereum/signer/fourbyte"
"github.com/ethereum/go-ethereum/signer/rules"
"github.com/ethereum/go-ethereum/signer/storage"
"gopkg.in/urfave/cli.v1"
@@ -55,12 +58,15 @@ import (
const legalWarning = `
WARNING!
-Clef is alpha software, and not yet publically released. This software has _not_ been audited, and there
-are no guarantees about the workings of this software. It may contain severe flaws. You should not use this software
-unless you agree to take full responsibility for doing so, and know what you are doing.
+Clef is an account management tool. It may, like any software, contain bugs.
-TLDR; THIS IS NOT PRODUCTION-READY SOFTWARE!
+Please take care to
+- backup your keystore files,
+- verify that the keystore(s) can be opened with your password.
+Clef is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the GNU General Public License for more details.
`
var (
@@ -83,6 +89,11 @@ var (
Value: DefaultConfigDir(),
Usage: "Directory for Clef configuration",
}
+ chainIdFlag = cli.Int64Flag{
+ Name: "chainid",
+ Value: params.MainnetChainConfig.ChainID.Int64(),
+ Usage: "Chain id to use for signing (1=mainnet, 3=ropsten, 4=rinkeby, 5=Goerli)",
+ }
rpcPortFlag = cli.IntFlag{
Name: "rpcport",
Usage: "HTTP-RPC server listening port",
@@ -92,11 +103,6 @@ var (
Name: "signersecret",
Usage: "A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash",
}
- dBFlag = cli.StringFlag{
- Name: "4bytedb",
- Usage: "File containing 4byte-identifiers",
- Value: "./4byte.json",
- }
customDBFlag = cli.StringFlag{
Name: "4bytedb-custom",
Usage: "File used for writing new 4byte-identifiers submitted via API",
@@ -110,7 +116,7 @@ var (
ruleFlag = cli.StringFlag{
Name: "rules",
Usage: "Enable rule-engine",
- Value: "rules.json",
+ Value: "",
}
stdiouiFlag = cli.BoolFlag{
Name: "stdio-ui",
@@ -165,10 +171,16 @@ Clef that the file is 'safe' to execute.`,
signerSecretFlag,
},
Description: `
- The setpw command stores a password for a given address (keyfile). If you enter a blank passphrase, it will
+The setpw command stores a password for a given address (keyfile). If you enter a blank passphrase, it will
remove any stored credential for that address (keyfile)
-`,
- }
+`}
+ gendocCommand = cli.Command{
+ Action: GenDoc,
+ Name: "gendoc",
+ Usage: "Generate documentation about json-rpc format",
+ Description: `
+The gendoc generates example structures of the json-rpc communication types.
+`}
)
func init() {
@@ -178,7 +190,7 @@ func init() {
logLevelFlag,
keystoreFlag,
configdirFlag,
- utils.NetworkIdFlag,
+ chainIdFlag,
utils.LightKDFFlag,
utils.NoUSBFlag,
utils.RPCListenAddrFlag,
@@ -188,7 +200,6 @@ func init() {
utils.RPCEnabledFlag,
rpcPortFlag,
signerSecretFlag,
- dBFlag,
customDBFlag,
auditLogFlag,
ruleFlag,
@@ -197,7 +208,7 @@ func init() {
advancedMode,
}
app.Action = signer
- app.Commands = []cli.Command{initCommand, attestCommand, setCredentialCommand}
+ app.Commands = []cli.Command{initCommand, attestCommand, setCredentialCommand, gendocCommand}
}
func main() {
@@ -338,7 +349,7 @@ func signer(c *cli.Context) error {
return err
}
var (
- ui core.SignerUI
+ ui core.UIClientAPI
)
if c.GlobalBool(stdiouiFlag.Name) {
log.Info("Using stdin/stdout as UI-channel")
@@ -347,26 +358,24 @@ func signer(c *cli.Context) error {
log.Info("Using CLI as UI-channel")
ui = core.NewCommandlineUI()
}
- fourByteDb := c.GlobalString(dBFlag.Name)
+ // 4bytedb data
fourByteLocal := c.GlobalString(customDBFlag.Name)
- db, err := core.NewAbiDBFromFiles(fourByteDb, fourByteLocal)
+ db, err := fourbyte.NewWithFile(fourByteLocal)
if err != nil {
utils.Fatalf(err.Error())
}
- log.Info("Loaded 4byte db", "signatures", db.Size(), "file", fourByteDb, "local", fourByteLocal)
+ embeds, locals := db.Size()
+ log.Info("Loaded 4byte database", "embeds", embeds, "locals", locals, "local", fourByteLocal)
var (
- api core.ExternalAPI
+ api core.ExternalAPI
+ pwStorage storage.Storage = &storage.NoStorage{}
)
configDir := c.GlobalString(configdirFlag.Name)
if stretchedKey, err := readMasterKey(c, ui); err != nil {
log.Info("No master seed provided, rules disabled", "error", err)
} else {
-
- if err != nil {
- utils.Fatalf(err.Error())
- }
vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10]))
// Generate domain specific keys
@@ -375,41 +384,49 @@ func signer(c *cli.Context) error {
confkey := crypto.Keccak256([]byte("config"), stretchedKey)
// Initialize the encrypted storages
- pwStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey)
+ pwStorage = storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey)
jsStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "jsstorage.json"), jskey)
configStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "config.json"), confkey)
//Do we have a rule-file?
- ruleJS, err := ioutil.ReadFile(c.GlobalString(ruleFlag.Name))
- if err != nil {
- log.Info("Could not load rulefile, rules not enabled", "file", "rulefile")
- } else {
- hasher := sha256.New()
- hasher.Write(ruleJS)
- shasum := hasher.Sum(nil)
- storedShasum := configStorage.Get("ruleset_sha256")
- if storedShasum != hex.EncodeToString(shasum) {
- log.Info("Could not validate ruleset hash, rules not enabled", "got", hex.EncodeToString(shasum), "expected", storedShasum)
+ if ruleFile := c.GlobalString(ruleFlag.Name); ruleFile != "" {
+ ruleJS, err := ioutil.ReadFile(c.GlobalString(ruleFile))
+ if err != nil {
+ log.Info("Could not load rulefile, rules not enabled", "file", "rulefile")
} else {
- // Initialize rules
- ruleEngine, err := rules.NewRuleEvaluator(ui, jsStorage, pwStorage)
- if err != nil {
- utils.Fatalf(err.Error())
+ shasum := sha256.Sum256(ruleJS)
+ foundShaSum := hex.EncodeToString(shasum[:])
+ storedShasum := configStorage.Get("ruleset_sha256")
+ if storedShasum != foundShaSum {
+ log.Info("Could not validate ruleset hash, rules not enabled", "got", foundShaSum, "expected", storedShasum)
+ } else {
+ // Initialize rules
+ ruleEngine, err := rules.NewRuleEvaluator(ui, jsStorage)
+ if err != nil {
+ utils.Fatalf(err.Error())
+ }
+ ruleEngine.Init(string(ruleJS))
+ ui = ruleEngine
+ log.Info("Rule engine configured", "file", c.String(ruleFlag.Name))
}
- ruleEngine.Init(string(ruleJS))
- ui = ruleEngine
- log.Info("Rule engine configured", "file", c.String(ruleFlag.Name))
}
}
}
-
- apiImpl := core.NewSignerAPI(
- c.GlobalInt64(utils.NetworkIdFlag.Name),
- c.GlobalString(keystoreFlag.Name),
- c.GlobalBool(utils.NoUSBFlag.Name),
- ui, db,
- c.GlobalBool(utils.LightKDFFlag.Name),
- c.GlobalBool(advancedMode.Name))
+ var (
+ chainId = c.GlobalInt64(chainIdFlag.Name)
+ ksLoc = c.GlobalString(keystoreFlag.Name)
+ lightKdf = c.GlobalBool(utils.LightKDFFlag.Name)
+ advanced = c.GlobalBool(advancedMode.Name)
+ nousb = c.GlobalBool(utils.NoUSBFlag.Name)
+ )
+ log.Info("Starting signer", "chainid", chainId, "keystore", ksLoc,
+ "light-kdf", lightKdf, "advanced", advanced)
+ am := core.StartClefAccountManager(ksLoc, nousb, lightKdf)
+ apiImpl := core.NewSignerAPI(am, chainId, nousb, ui, db, advanced, pwStorage)
+
+ // Establish the bidirectional communication, by creating a new UI backend and registering
+ // it with the UI.
+ ui.RegisterUIServer(core.NewUIServerAPI(apiImpl))
api = apiImpl
// Audit logging
if logfile := c.GlobalString(auditLogFlag.Name); logfile != "" {
@@ -511,7 +528,12 @@ func DefaultConfigDir() string {
if runtime.GOOS == "darwin" {
return filepath.Join(home, "Library", "Signer")
} else if runtime.GOOS == "windows" {
- return filepath.Join(home, "AppData", "Roaming", "Signer")
+ appdata := os.Getenv("APPDATA")
+ if appdata != "" {
+ return filepath.Join(appdata, "Signer")
+ } else {
+ return filepath.Join(home, "AppData", "Roaming", "Signer")
+ }
} else {
return filepath.Join(home, ".clef")
}
@@ -529,7 +551,7 @@ func homeDir() string {
}
return ""
}
-func readMasterKey(ctx *cli.Context, ui core.SignerUI) ([]byte, error) {
+func readMasterKey(ctx *cli.Context, ui core.UIClientAPI) ([]byte, error) {
var (
file string
configDir = ctx.GlobalString(configdirFlag.Name)
@@ -613,72 +635,124 @@ func testExternalUI(api *core.SignerAPI) {
ctx := context.WithValue(context.Background(), "remote", "clef binary")
ctx = context.WithValue(ctx, "scheme", "in-proc")
ctx = context.WithValue(ctx, "local", "main")
-
errs := make([]string, 0)
- api.UI.ShowInfo("Testing 'ShowInfo'")
- api.UI.ShowError("Testing 'ShowError'")
+ a := common.HexToAddress("0xdeadbeef000000000000000000000000deadbeef")
- checkErr := func(method string, err error) {
- if err != nil && err != core.ErrRequestDenied {
- errs = append(errs, fmt.Sprintf("%v: %v", method, err.Error()))
+ queryUser := func(q string) string {
+ resp, err := api.UI.OnInputRequired(core.UserInputRequest{
+ Title: "Testing",
+ Prompt: q,
+ })
+ if err != nil {
+ errs = append(errs, err.Error())
}
+ return resp.Text
}
- var err error
-
- cliqueHeader := types.Header{
- common.HexToHash("0000H45H"),
- common.HexToHash("0000H45H"),
- common.HexToAddress("0000H45H"),
- common.HexToHash("0000H00H"),
- common.HexToHash("0000H45H"),
- common.HexToHash("0000H45H"),
- types.Bloom{},
- big.NewInt(1337),
- big.NewInt(1337),
- 1338,
- 1338,
- 1338,
- []byte("Extra data Extra data Extra data Extra data Extra data Extra data Extra data Extra data"),
- common.HexToHash("0x0000H45H"),
- types.BlockNonce{},
- }
- cliqueRlp, err := rlp.EncodeToBytes(cliqueHeader)
- if err != nil {
- utils.Fatalf("Should not error: %v", err)
+ expectResponse := func(testcase, question, expect string) {
+ if got := queryUser(question); got != expect {
+ errs = append(errs, fmt.Sprintf("%s: got %v, expected %v", testcase, got, expect))
+ }
}
- addr, err := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899")
- if err != nil {
- utils.Fatalf("Should not error: %v", err)
- }
- _, err = api.SignData(ctx, "application/clique", *addr, cliqueRlp)
- checkErr("SignData", err)
-
- _, err = api.SignTransaction(ctx, core.SendTxArgs{From: common.MixedcaseAddress{}}, nil)
- checkErr("SignTransaction", err)
- _, err = api.SignData(ctx, "text/plain", common.MixedcaseAddress{}, common.Hex2Bytes("01020304"))
- checkErr("SignData", err)
- //_, err = api.SignTypedData(ctx, common.MixedcaseAddress{}, core.TypedData{})
- //checkErr("SignTypedData", err)
- _, err = api.List(ctx)
- checkErr("List", err)
- _, err = api.New(ctx)
- checkErr("New", err)
- _, err = api.Export(ctx, common.Address{})
- checkErr("Export", err)
- _, err = api.Import(ctx, json.RawMessage{})
- checkErr("Import", err)
-
- api.UI.ShowInfo("Tests completed")
-
- if len(errs) > 0 {
- log.Error("Got errors")
- for _, e := range errs {
- log.Error(e)
+ expectApprove := func(testcase string, err error) {
+ if err == nil || err == accounts.ErrUnknownAccount {
+ return
+ }
+ errs = append(errs, fmt.Sprintf("%v: expected no error, got %v", testcase, err.Error()))
+ }
+ expectDeny := func(testcase string, err error) {
+ if err == nil || err != core.ErrRequestDenied {
+ errs = append(errs, fmt.Sprintf("%v: expected ErrRequestDenied, got %v", testcase, err))
}
- } else {
- log.Info("No errors")
}
+
+ // Test display of info and error
+ {
+ api.UI.ShowInfo("If you see this message, enter 'yes' to next question")
+ expectResponse("showinfo", "Did you see the message? [yes/no]", "yes")
+ api.UI.ShowError("If you see this message, enter 'yes' to the next question")
+ expectResponse("showerror", "Did you see the message? [yes/no]", "yes")
+ }
+ { // Sign data test - clique header
+ api.UI.ShowInfo("Please approve the next request for signing a clique header")
+ cliqueHeader := types.Header{
+ common.HexToHash("0000H45H"),
+ common.HexToHash("0000H45H"),
+ common.HexToAddress("0000H45H"),
+ common.HexToHash("0000H00H"),
+ common.HexToHash("0000H45H"),
+ common.HexToHash("0000H45H"),
+ types.Bloom{},
+ big.NewInt(1337),
+ big.NewInt(1337),
+ 1338,
+ 1338,
+ 1338,
+ []byte("Extra data Extra data Extra data Extra data Extra data Extra data Extra data Extra data"),
+ common.HexToHash("0x0000H45H"),
+ types.BlockNonce{},
+ }
+ cliqueRlp, err := rlp.EncodeToBytes(cliqueHeader)
+ if err != nil {
+ utils.Fatalf("Should not error: %v", err)
+ }
+ addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899")
+ _, err = api.SignData(ctx, accounts.MimetypeClique, *addr, hexutil.Encode(cliqueRlp))
+ expectApprove("signdata - clique header", err)
+ }
+ { // Sign data test - plain text
+ api.UI.ShowInfo("Please approve the next request for signing text")
+ addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899")
+ _, err := api.SignData(ctx, accounts.MimetypeTextPlain, *addr, hexutil.Encode([]byte("hello world")))
+ expectApprove("signdata - text", err)
+ }
+ { // Sign data test - plain text reject
+ api.UI.ShowInfo("Please deny the next request for signing text")
+ addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899")
+ _, err := api.SignData(ctx, accounts.MimetypeTextPlain, *addr, hexutil.Encode([]byte("hello world")))
+ expectDeny("signdata - text", err)
+ }
+ { // Sign transaction
+
+ api.UI.ShowInfo("Please reject next transaction")
+ data := hexutil.Bytes([]byte{})
+ to := common.NewMixedcaseAddress(a)
+ tx := core.SendTxArgs{
+ Data: &data,
+ Nonce: 0x1,
+ Value: hexutil.Big(*big.NewInt(6)),
+ From: common.NewMixedcaseAddress(a),
+ To: &to,
+ GasPrice: hexutil.Big(*big.NewInt(5)),
+ Gas: 1000,
+ Input: nil,
+ }
+ _, err := api.SignTransaction(ctx, tx, nil)
+ expectDeny("signtransaction [1]", err)
+ expectResponse("signtransaction [2]", "Did you see any warnings for the last transaction? (yes/no)", "no")
+ }
+ { // Listing
+ api.UI.ShowInfo("Please reject listing-request")
+ _, err := api.List(ctx)
+ expectDeny("list", err)
+ }
+ { // Import
+ api.UI.ShowInfo("Please reject new account-request")
+ _, err := api.New(ctx)
+ expectDeny("newaccount", err)
+ }
+ { // Metadata
+ api.UI.ShowInfo("Please check if you see the Origin in next listing (approve or deny)")
+ api.List(context.WithValue(ctx, "Origin", "origin.com"))
+ expectResponse("metadata - origin", "Did you see origin (origin.com)? [yes/no] ", "yes")
+ }
+
+ for _, e := range errs {
+ log.Error(e)
+ }
+ result := fmt.Sprintf("Tests completed. %d errors:\n%s\n", len(errs), strings.Join(errs, "\n"))
+ api.UI.ShowInfo(result)
+
}
// getPassPhrase retrieves the password associated with clef, either fetched
@@ -734,6 +808,154 @@ func decryptSeed(keyjson []byte, auth string) ([]byte, error) {
return seed, err
}
+// GenDoc outputs examples of all structures used in json-rpc communication
+func GenDoc(ctx *cli.Context) {
+
+ var (
+ a = common.HexToAddress("0xdeadbeef000000000000000000000000deadbeef")
+ b = common.HexToAddress("0x1111111122222222222233333333334444444444")
+ meta = core.Metadata{
+ Scheme: "http",
+ Local: "localhost:8545",
+ Origin: "www.malicious.ru",
+ Remote: "localhost:9999",
+ UserAgent: "Firefox 3.2",
+ }
+ output []string
+ add = func(name, desc string, v interface{}) {
+ if data, err := json.MarshalIndent(v, "", " "); err == nil {
+ output = append(output, fmt.Sprintf("### %s\n\n%s\n\nExample:\n```json\n%s\n```", name, desc, data))
+ } else {
+ log.Error("Error generating output", err)
+ }
+ }
+ )
+
+ { // Sign plain text request
+ desc := "SignDataRequest contains information about a pending request to sign some data. " +
+ "The data to be signed can be of various types, defined by content-type. Clef has done most " +
+ "of the work in canonicalizing and making sense of the data, and it's up to the UI to present" +
+ "the user with the contents of the `message`"
+ sighash, msg := accounts.TextAndHash([]byte("hello world"))
+ message := []*core.NameValueType{{"message", msg, accounts.MimetypeTextPlain}}
+
+ add("SignDataRequest", desc, &core.SignDataRequest{
+ Address: common.NewMixedcaseAddress(a),
+ Meta: meta,
+ ContentType: accounts.MimetypeTextPlain,
+ Rawdata: []byte(msg),
+ Message: message,
+ Hash: sighash})
+ }
+ { // Sign plain text response
+ add("SignDataResponse - approve", "Response to SignDataRequest",
+ &core.SignDataResponse{Approved: true})
+ add("SignDataResponse - deny", "Response to SignDataRequest",
+ &core.SignDataResponse{})
+ }
+ { // Sign transaction request
+ desc := "SignTxRequest contains information about a pending request to sign a transaction. " +
+ "Aside from the transaction itself, there is also a `call_info`-struct. That struct contains " +
+ "messages of various types, that the user should be informed of." +
+ "\n\n" +
+ "As in any request, it's important to consider that the `meta` info also contains untrusted data." +
+ "\n\n" +
+ "The `transaction` (on input into clef) can have either `data` or `input` -- if both are set, " +
+ "they must be identical, otherwise an error is generated. " +
+ "However, Clef will always use `data` when passing this struct on (if Clef does otherwise, please file a ticket)"
+
+ data := hexutil.Bytes([]byte{0x01, 0x02, 0x03, 0x04})
+ add("SignTxRequest", desc, &core.SignTxRequest{
+ Meta: meta,
+ Callinfo: []core.ValidationInfo{
+ {"Warning", "Something looks odd, show this message as a warning"},
+ {"Info", "User should see this aswell"},
+ },
+ Transaction: core.SendTxArgs{
+ Data: &data,
+ Nonce: 0x1,
+ Value: hexutil.Big(*big.NewInt(6)),
+ From: common.NewMixedcaseAddress(a),
+ To: nil,
+ GasPrice: hexutil.Big(*big.NewInt(5)),
+ Gas: 1000,
+ Input: nil,
+ }})
+ }
+ { // Sign tx response
+ data := hexutil.Bytes([]byte{0x04, 0x03, 0x02, 0x01})
+ add("SignTxResponse - approve", "Response to request to sign a transaction. This response needs to contain the `transaction`"+
+ ", because the UI is free to make modifications to the transaction.",
+ &core.SignTxResponse{Approved: true,
+ Transaction: core.SendTxArgs{
+ Data: &data,
+ Nonce: 0x4,
+ Value: hexutil.Big(*big.NewInt(6)),
+ From: common.NewMixedcaseAddress(a),
+ To: nil,
+ GasPrice: hexutil.Big(*big.NewInt(5)),
+ Gas: 1000,
+ Input: nil,
+ }})
+ add("SignTxResponse - deny", "Response to SignTxRequest. When denying a request, there's no need to "+
+ "provide the transaction in return",
+ &core.SignTxResponse{})
+ }
+ { // WHen a signed tx is ready to go out
+ desc := "SignTransactionResult is used in the call `clef` -> `OnApprovedTx(result)`" +
+ "\n\n" +
+ "This occurs _after_ successful completion of the entire signing procedure, but right before the signed " +
+ "transaction is passed to the external caller. This method (and data) can be used by the UI to signal " +
+ "to the user that the transaction was signed, but it is primarily useful for ruleset implementations." +
+ "\n\n" +
+ "A ruleset that implements a rate limitation needs to know what transactions are sent out to the external " +
+ "interface. By hooking into this methods, the ruleset can maintain track of that count." +
+ "\n\n" +
+ "**OBS:** Note that if an attacker can restore your `clef` data to a previous point in time" +
+ " (e.g through a backup), the attacker can reset such windows, even if he/she is unable to decrypt the content. " +
+ "\n\n" +
+ "The `OnApproved` method cannot be responded to, it's purely informative"
+
+ rlpdata := common.FromHex("0xf85d640101948a8eafb1cf62bfbeb1741769dae1a9dd47996192018026a0716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293a04e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed")
+ var tx types.Transaction
+ rlp.DecodeBytes(rlpdata, &tx)
+ add("OnApproved - SignTransactionResult", desc, &ethapi.SignTransactionResult{Raw: rlpdata, Tx: &tx})
+
+ }
+ { // User input
+ add("UserInputRequest", "Sent when clef needs the user to provide data. If 'password' is true, the input field should be treated accordingly (echo-free)",
+ &core.UserInputRequest{IsPassword: true, Title: "The title here", Prompt: "The question to ask the user"})
+ add("UserInputResponse", "Response to UserInputRequest",
+ &core.UserInputResponse{Text: "The textual response from user"})
+ }
+ { // List request
+ add("ListRequest", "Sent when a request has been made to list addresses. The UI is provided with the "+
+ "full `account`s, including local directory names. Note: this information is not passed back to the external caller, "+
+ "who only sees the `address`es. ",
+ &core.ListRequest{
+ Meta: meta,
+ Accounts: []accounts.Account{
+ {a, accounts.URL{Scheme: "keystore", Path: "/path/to/keyfile/a"}},
+ {b, accounts.URL{Scheme: "keystore", Path: "/path/to/keyfile/b"}}},
+ })
+
+ add("ListResponse", "Response to list request. The response contains a list of all addresses to show to the caller. "+
+ "Note: the UI is free to respond with any address the caller, regardless of whether it exists or not",
+ &core.ListResponse{
+ Accounts: []accounts.Account{
+ {common.HexToAddress("0xcowbeef000000cowbeef00000000000000000c0w"), accounts.URL{Path: ".. ignored .."}},
+ {common.HexToAddress("0xffffffffffffffffffffffffffffffffffffffff"), accounts.URL{}},
+ }})
+ }
+
+ fmt.Println(`## UI Client interface
+
+These data types are defined in the channel between clef and the UI`)
+ for _, elem := range output {
+ fmt.Println(elem)
+ }
+}
+
/**
//Create Account
diff --git a/cmd/clef/tests/testsigner.js b/cmd/clef/tests/testsigner.js
new file mode 100644
index 000000000..86b2c4539
--- /dev/null
+++ b/cmd/clef/tests/testsigner.js
@@ -0,0 +1,73 @@
+// This file is a test-utility for testing clef-functionality
+//
+// Start clef with
+//
+// build/bin/clef --4bytedb=./cmd/clef/4byte.json --rpc
+//
+// Start geth with
+//
+// build/bin/geth --nodiscover --maxpeers 0 --signer http://localhost:8550 console --preload=cmd/clef/tests/testsigner.js
+//
+// and in the console simply invoke
+//
+// > test()
+//
+// You can reload the file via `reload()`
+
+function reload(){
+ loadScript("./cmd/clef/tests/testsigner.js");
+}
+
+function init(){
+ if (typeof accts == 'undefined' || accts.length == 0){
+ accts = eth.accounts
+ console.log("Got accounts ", accts);
+ }
+}
+init()
+function testTx(){
+ if( accts && accts.length > 0) {
+ var a = accts[0]
+ var txdata = eth.signTransaction({from: a, to: a, value: 1, nonce: 1, gas: 1, gasPrice: 1})
+ var v = parseInt(txdata.tx.v)
+ console.log("V value: ", v)
+ if (v == 37 || v == 38){
+ console.log("Mainnet 155-protected chainid was used")
+ }
+ if (v == 27 || v == 28){
+ throw new Error("Mainnet chainid was used, but without replay protection!")
+ }
+ }
+}
+function testSignText(){
+ if( accts && accts.length > 0){
+ var a = accts[0]
+ var r = eth.sign(a, "0x68656c6c6f20776f726c64"); //hello world
+ console.log("signing response", r)
+ }
+}
+function testClique(){
+ if( accts && accts.length > 0){
+ var a = accts[0]
+ var r = debug.testSignCliqueBlock(a, 0); // Sign genesis
+ console.log("signing response", r)
+ if( a != r){
+ throw new Error("Requested signing by "+a+ " but got sealer "+r)
+ }
+ }
+}
+
+function test(){
+ var tests = [
+ testTx,
+ testSignText,
+ testClique,
+ ]
+ for( i in tests){
+ try{
+ tests[i]()
+ }catch(err){
+ console.log(err)
+ }
+ }
+ }
diff --git a/cmd/evm/internal/compiler/compiler.go b/cmd/evm/internal/compiler/compiler.go
index 753ca6226..54981b669 100644
--- a/cmd/evm/internal/compiler/compiler.go
+++ b/cmd/evm/internal/compiler/compiler.go
@@ -25,7 +25,7 @@ import (
func Compile(fn string, src []byte, debug bool) (string, error) {
compiler := asm.NewCompiler(debug)
- compiler.Feed(asm.Lex(fn, src, debug))
+ compiler.Feed(asm.Lex(src, debug))
bin, compileErrors := compiler.Compile()
if len(compileErrors) > 0 {
diff --git a/cmd/evm/runner.go b/cmd/evm/runner.go
index c732c8b57..bc5d00cfb 100644
--- a/cmd/evm/runner.go
+++ b/cmd/evm/runner.go
@@ -31,10 +31,10 @@ import (
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
+ "github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/core/vm/runtime"
- "github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/params"
cli "gopkg.in/urfave/cli.v1"
@@ -99,12 +99,12 @@ func runCmd(ctx *cli.Context) error {
if ctx.GlobalString(GenesisFlag.Name) != "" {
gen := readGenesis(ctx.GlobalString(GenesisFlag.Name))
genesisConfig = gen
- db := ethdb.NewMemDatabase()
+ db := rawdb.NewMemoryDatabase()
genesis := gen.ToBlock(db)
statedb, _ = state.New(genesis.Root(), state.NewDatabase(db))
chainConfig = gen.Config
} else {
- statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase()))
+ statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
genesisConfig = new(core.Genesis)
}
if ctx.GlobalString(SenderFlag.Name) != "" {
diff --git a/cmd/geth/accountcmd.go b/cmd/geth/accountcmd.go
index 071be8539..940290899 100644
--- a/cmd/geth/accountcmd.go
+++ b/cmd/geth/accountcmd.go
@@ -205,7 +205,7 @@ func accountList(ctx *cli.Context) error {
}
// tries unlocking the specified account a few times.
-func unlockAccount(ctx *cli.Context, ks *keystore.KeyStore, address string, i int, passwords []string) (accounts.Account, string) {
+func unlockAccount(ks *keystore.KeyStore, address string, i int, passwords []string) (accounts.Account, string) {
account, err := utils.MakeAddress(ks, address)
if err != nil {
utils.Fatalf("Could not list accounts: %v", err)
@@ -326,7 +326,7 @@ func accountUpdate(ctx *cli.Context) error {
ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore)
for _, addr := range ctx.Args() {
- account, oldPassword := unlockAccount(ctx, ks, addr, 0, nil)
+ account, oldPassword := unlockAccount(ks, addr, 0, nil)
newPassword := getPassPhrase("Please give a new password. Do not forget this password.", true, 0, nil)
if err := ks.Update(account, oldPassword, newPassword); err != nil {
utils.Fatalf("Could not update the account: %v", err)
diff --git a/cmd/geth/bugcmd.go b/cmd/geth/bugcmd.go
deleted file mode 100644
index 0adc69d1f..000000000
--- a/cmd/geth/bugcmd.go
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
-
-package main
-
-import (
- "bytes"
- "fmt"
- "io"
- "io/ioutil"
- "net/url"
- "os/exec"
- "runtime"
- "strings"
-
- "github.com/ethereum/go-ethereum/cmd/internal/browser"
- "github.com/ethereum/go-ethereum/params"
-
- "github.com/ethereum/go-ethereum/cmd/utils"
- cli "gopkg.in/urfave/cli.v1"
-)
-
-var bugCommand = cli.Command{
- Action: utils.MigrateFlags(reportBug),
- Name: "bug",
- Usage: "opens a window to report a bug on the geth repo",
- ArgsUsage: " ",
- Category: "MISCELLANEOUS COMMANDS",
-}
-
-const issueURL = "https://github.com/ethereum/go-ethereum/issues/new"
-
-// reportBug reports a bug by opening a new URL to the go-ethereum GH issue
-// tracker and setting default values as the issue body.
-func reportBug(ctx *cli.Context) error {
- // execute template and write contents to buff
- var buff bytes.Buffer
-
- fmt.Fprintln(&buff, "#### System information")
- fmt.Fprintln(&buff)
- fmt.Fprintln(&buff, "Version:", params.VersionWithMeta)
- fmt.Fprintln(&buff, "Go Version:", runtime.Version())
- fmt.Fprintln(&buff, "OS:", runtime.GOOS)
- printOSDetails(&buff)
- fmt.Fprintln(&buff, header)
-
- // open a new GH issue
- if !browser.Open(issueURL + "?body=" + url.QueryEscape(buff.String())) {
- fmt.Printf("Please file a new issue at %s using this template:\n\n%s", issueURL, buff.String())
- }
- return nil
-}
-
-// copied from the Go source. Copyright 2017 The Go Authors
-func printOSDetails(w io.Writer) {
- switch runtime.GOOS {
- case "darwin":
- printCmdOut(w, "uname -v: ", "uname", "-v")
- printCmdOut(w, "", "sw_vers")
- case "linux":
- printCmdOut(w, "uname -sr: ", "uname", "-sr")
- printCmdOut(w, "", "lsb_release", "-a")
- case "openbsd", "netbsd", "freebsd", "dragonfly":
- printCmdOut(w, "uname -v: ", "uname", "-v")
- case "solaris":
- out, err := ioutil.ReadFile("/etc/release")
- if err == nil {
- fmt.Fprintf(w, "/etc/release: %s\n", out)
- } else {
- fmt.Printf("failed to read /etc/release: %v\n", err)
- }
- }
-}
-
-// printCmdOut prints the output of running the given command.
-// It ignores failures; 'go bug' is best effort.
-//
-// copied from the Go source. Copyright 2017 The Go Authors
-func printCmdOut(w io.Writer, prefix, path string, args ...string) {
- cmd := exec.Command(path, args...)
- out, err := cmd.Output()
- if err != nil {
- fmt.Printf("%s %s: %v\n", path, strings.Join(args, " "), err)
- return
- }
- fmt.Fprintf(w, "%s%s\n", prefix, bytes.TrimSpace(out))
-}
-
-const header = `
-#### Expected behaviour
-
-
-#### Actual behaviour
-
-
-#### Steps to reproduce the behaviour
-
-
-#### Backtrace
-`
diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go
index 22e515af0..ceedf66e1 100644
--- a/cmd/geth/chaincmd.go
+++ b/cmd/geth/chaincmd.go
@@ -29,14 +29,12 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/console"
"github.com/ethereum/go-ethereum/core"
+ "github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth/downloader"
- "github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/syndtr/goleveldb/leveldb/util"
"gopkg.in/urfave/cli.v1"
)
@@ -197,7 +195,7 @@ func initGenesis(ctx *cli.Context) error {
defer stack.Close()
for _, name := range []string{"chaindata", "lightchaindata"} {
- chaindb, err := stack.OpenDatabase(name, 0, 0)
+ chaindb, err := stack.OpenDatabase(name, 0, 0, "")
if err != nil {
utils.Fatalf("Failed to open database: %v", err)
}
@@ -205,6 +203,7 @@ func initGenesis(ctx *cli.Context) error {
if err != nil {
utils.Fatalf("Failed to write genesis block: %v", err)
}
+ chaindb.Close()
log.Info("Successfully wrote genesis state", "database", name, "hash", hash)
}
return nil
@@ -217,8 +216,8 @@ func importChain(ctx *cli.Context) error {
stack := makeFullNode(ctx)
defer stack.Close()
- chain, chainDb := utils.MakeChain(ctx, stack)
- defer chainDb.Close()
+ chain, db := utils.MakeChain(ctx, stack)
+ defer db.Close()
// Start periodically gathering memory profiles
var peakMemAlloc, peakMemSys uint64
@@ -253,23 +252,18 @@ func importChain(ctx *cli.Context) error {
fmt.Printf("Import done in %v.\n\n", time.Since(start))
// Output pre-compaction stats mostly to see the import trashing
- db := chainDb.(*ethdb.LDBDatabase)
-
- stats, err := db.LDB().GetProperty("leveldb.stats")
+ stats, err := db.Stat("leveldb.stats")
if err != nil {
utils.Fatalf("Failed to read database stats: %v", err)
}
fmt.Println(stats)
- ioStats, err := db.LDB().GetProperty("leveldb.iostats")
+ ioStats, err := db.Stat("leveldb.iostats")
if err != nil {
utils.Fatalf("Failed to read database iostats: %v", err)
}
fmt.Println(ioStats)
- fmt.Printf("Trie cache misses: %d\n", trie.CacheMisses())
- fmt.Printf("Trie cache unloads: %d\n\n", trie.CacheUnloads())
-
// Print the memory statistics used by the importing
mem := new(runtime.MemStats)
runtime.ReadMemStats(mem)
@@ -286,23 +280,22 @@ func importChain(ctx *cli.Context) error {
// Compact the entire database to more accurately measure disk io and print the stats
start = time.Now()
fmt.Println("Compacting entire database...")
- if err = db.LDB().CompactRange(util.Range{}); err != nil {
+ if err = db.Compact(nil, nil); err != nil {
utils.Fatalf("Compaction failed: %v", err)
}
fmt.Printf("Compaction done in %v.\n\n", time.Since(start))
- stats, err = db.LDB().GetProperty("leveldb.stats")
+ stats, err = db.Stat("leveldb.stats")
if err != nil {
utils.Fatalf("Failed to read database stats: %v", err)
}
fmt.Println(stats)
- ioStats, err = db.LDB().GetProperty("leveldb.iostats")
+ ioStats, err = db.Stat("leveldb.iostats")
if err != nil {
utils.Fatalf("Failed to read database iostats: %v", err)
}
fmt.Println(ioStats)
-
return nil
}
@@ -348,10 +341,10 @@ func importPreimages(ctx *cli.Context) error {
stack := makeFullNode(ctx)
defer stack.Close()
- diskdb := utils.MakeChainDatabase(ctx, stack).(*ethdb.LDBDatabase)
+ db := utils.MakeChainDatabase(ctx, stack)
start := time.Now()
- if err := utils.ImportPreimages(diskdb, ctx.Args().First()); err != nil {
+ if err := utils.ImportPreimages(db, ctx.Args().First()); err != nil {
utils.Fatalf("Import error: %v\n", err)
}
fmt.Printf("Import done in %v\n", time.Since(start))
@@ -366,10 +359,10 @@ func exportPreimages(ctx *cli.Context) error {
stack := makeFullNode(ctx)
defer stack.Close()
- diskdb := utils.MakeChainDatabase(ctx, stack).(*ethdb.LDBDatabase)
+ db := utils.MakeChainDatabase(ctx, stack)
start := time.Now()
- if err := utils.ExportPreimages(diskdb, ctx.Args().First()); err != nil {
+ if err := utils.ExportPreimages(db, ctx.Args().First()); err != nil {
utils.Fatalf("Export error: %v\n", err)
}
fmt.Printf("Export done in %v\n", time.Since(start))
@@ -387,10 +380,10 @@ func copyDb(ctx *cli.Context) error {
chain, chainDb := utils.MakeChain(ctx, stack)
syncmode := *utils.GlobalTextMarshaler(ctx, utils.SyncModeFlag.Name).(*downloader.SyncMode)
- dl := downloader.New(syncmode, chainDb, new(event.TypeMux), chain, nil, nil)
+ dl := downloader.New(syncmode, 0, chainDb, new(event.TypeMux), chain, nil, nil)
// Create a source peer to satisfy downloader requests from
- db, err := ethdb.NewLDBDatabase(ctx.Args().First(), ctx.GlobalInt(utils.CacheFlag.Name), 256)
+ db, err := rawdb.NewLevelDBDatabase(ctx.Args().First(), ctx.GlobalInt(utils.CacheFlag.Name), 256, "")
if err != nil {
return err
}
@@ -417,11 +410,10 @@ func copyDb(ctx *cli.Context) error {
// Compact the entire database to remove any sync overhead
start = time.Now()
fmt.Println("Compacting entire database...")
- if err = chainDb.(*ethdb.LDBDatabase).LDB().CompactRange(util.Range{}); err != nil {
+ if err = db.Compact(nil, nil); err != nil {
utils.Fatalf("Compaction failed: %v", err)
}
fmt.Printf("Compaction done in %v.\n\n", time.Since(start))
-
return nil
}
diff --git a/cmd/geth/config.go b/cmd/geth/config.go
index 42f7eb4f6..f316380ce 100644
--- a/cmd/geth/config.go
+++ b/cmd/geth/config.go
@@ -30,6 +30,7 @@ import (
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/dashboard"
"github.com/ethereum/go-ethereum/eth"
+ "github.com/ethereum/go-ethereum/graphql"
"github.com/ethereum/go-ethereum/node"
"github.com/ethereum/go-ethereum/params"
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
@@ -177,6 +178,13 @@ func makeFullNode(ctx *cli.Context) *node.Node {
utils.RegisterShhService(stack, &cfg.Shh)
}
+ // Configure GraphQL if required
+ if ctx.GlobalIsSet(utils.GraphQLEnabledFlag.Name) {
+ if err := graphql.RegisterGraphQLService(stack, cfg.Node.GraphQLEndpoint(), cfg.Node.GraphQLCors, cfg.Node.GraphQLVirtualHosts, cfg.Node.HTTPTimeouts); err != nil {
+ utils.Fatalf("Failed to register the Ethereum service: %v", err)
+ }
+ }
+
// Add the Ethereum Stats daemon if requested.
if cfg.Ethstats.URL != "" {
utils.RegisterEthStatsService(stack, cfg.Ethstats.URL)
diff --git a/cmd/geth/dao_test.go b/cmd/geth/dao_test.go
index 52983ff2a..cb06038ec 100644
--- a/cmd/geth/dao_test.go
+++ b/cmd/geth/dao_test.go
@@ -25,7 +25,6 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/params"
)
@@ -121,7 +120,7 @@ func testDAOForkBlockNewChain(t *testing.T, test int, genesis string, expectBloc
}
// Retrieve the DAO config flag from the database
path := filepath.Join(datadir, "geth", "chaindata")
- db, err := ethdb.NewLDBDatabase(path, 0, 0)
+ db, err := rawdb.NewLevelDBDatabase(path, 0, 0, "")
if err != nil {
t.Fatalf("test %d: failed to open test database: %v", test, err)
}
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index 9b4642c97..0409d0cae 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -93,6 +93,8 @@ var (
utils.ExitWhenSyncedFlag,
utils.GCModeFlag,
utils.LightServFlag,
+ utils.LightBandwidthInFlag,
+ utils.LightBandwidthOutFlag,
utils.LightPeersFlag,
utils.LightKDFFlag,
utils.WhitelistFlag,
@@ -100,7 +102,7 @@ var (
utils.CacheDatabaseFlag,
utils.CacheTrieFlag,
utils.CacheGCFlag,
- utils.TrieCacheGenFlag,
+ utils.CacheNoPrefetchFlag,
utils.ListenPortFlag,
utils.MaxPeersFlag,
utils.MaxPendingPeersFlag,
@@ -138,10 +140,7 @@ var (
utils.VMEnableDebugFlag,
utils.NetworkIdFlag,
utils.ConstantinopleOverrideFlag,
- utils.RPCCORSDomainFlag,
- utils.RPCVirtualHostsFlag,
utils.EthStatsURLFlag,
- utils.MetricsEnabledFlag,
utils.FakePoWFlag,
utils.NoCompactionFlag,
utils.GpoBlocksFlag,
@@ -155,6 +154,8 @@ var (
utils.RPCEnabledFlag,
utils.RPCListenAddrFlag,
utils.RPCPortFlag,
+ utils.RPCCORSDomainFlag,
+ utils.RPCVirtualHostsFlag,
utils.GraphQLEnabledFlag,
utils.GraphQLListenAddrFlag,
utils.GraphQLPortFlag,
@@ -168,6 +169,7 @@ var (
utils.WSAllowedOriginsFlag,
utils.IPCDisabledFlag,
utils.IPCPathFlag,
+ utils.InsecureUnlockAllowedFlag,
utils.RPCGlobalGasCap,
}
@@ -179,6 +181,8 @@ var (
}
metricsFlags = []cli.Flag{
+ utils.MetricsEnabledFlag,
+ utils.MetricsEnabledExpensiveFlag,
utils.MetricsEnableInfluxDBFlag,
utils.MetricsInfluxDBEndpointFlag,
utils.MetricsInfluxDBDatabaseFlag,
@@ -203,8 +207,6 @@ func init() {
copydbCommand,
removedbCommand,
dumpCommand,
- // See monitorcmd.go:
- monitorCommand,
// See accountcmd.go:
accountCommand,
walletCommand,
@@ -216,7 +218,6 @@ func init() {
makecacheCommand,
makedagCommand,
versionCommand,
- bugCommand,
licenseCommand,
// See config.go
dumpConfigCommand,
@@ -238,6 +239,20 @@ func init() {
if err := debug.Setup(ctx, logdir); err != nil {
return err
}
+ // If we're a full node on mainnet without --cache specified, bump default cache allowance
+ if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) {
+ // Make sure we're not on any supported preconfigured testnet either
+ if !ctx.GlobalIsSet(utils.TestnetFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) {
+ // Nope, we're really on mainnet. Bump that cache up!
+ log.Info("Bumping default cache on mainnet", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 4096)
+ ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(4096))
+ }
+ }
+ // If we're running a light client on any network, drop the cache to some meaningfully low amount
+ if ctx.GlobalString(utils.SyncModeFlag.Name) == "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) {
+ log.Info("Dropping default light client cache", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 128)
+ ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(128))
+ }
// Cap the cache allowance and tune the garbage collector
var mem gosigar.Mem
if err := mem.Get(); err == nil {
@@ -301,16 +316,8 @@ func startNode(ctx *cli.Context, stack *node.Node) {
utils.StartNode(stack)
// Unlock any account specifically requested
- if keystores := stack.AccountManager().Backends(keystore.KeyStoreType); len(keystores) > 0 {
- ks := keystores[0].(*keystore.KeyStore)
- passwords := utils.MakePasswordList(ctx)
- unlocks := strings.Split(ctx.GlobalString(utils.UnlockedAccountFlag.Name), ",")
- for i, account := range unlocks {
- if trimmed := strings.TrimSpace(account); trimmed != "" {
- unlockAccount(ctx, ks, trimmed, i, passwords)
- }
- }
- }
+ unlockAccounts(ctx, stack)
+
// Register wallet event handlers to open and auto-derive wallets
events := make(chan accounts.WalletEvent, 16)
stack.AccountManager().Subscribe(events)
@@ -404,3 +411,28 @@ func startNode(ctx *cli.Context, stack *node.Node) {
}
}
}
+
+// unlockAccounts unlocks any account specifically requested.
+func unlockAccounts(ctx *cli.Context, stack *node.Node) {
+ var unlocks []string
+ inputs := strings.Split(ctx.GlobalString(utils.UnlockedAccountFlag.Name), ",")
+ for _, input := range inputs {
+ if trimmed := strings.TrimSpace(input); trimmed != "" {
+ unlocks = append(unlocks, trimmed)
+ }
+ }
+ // Short circuit if there is no account to unlock.
+ if len(unlocks) == 0 {
+ return
+ }
+ // If insecure account unlocking is not allowed if node's APIs are exposed to external.
+ // Print warning log to user and skip unlocking.
+ if !stack.Config().InsecureUnlockAllowed && stack.Config().ExtRPCEnabled() {
+ utils.Fatalf("Account unlock with HTTP access is forbidden!")
+ }
+ ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore)
+ passwords := utils.MakePasswordList(ctx)
+ for i, account := range unlocks {
+ unlockAccount(ks, account, i, passwords)
+ }
+}
diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go
deleted file mode 100644
index e4ba96a7a..000000000
--- a/cmd/geth/monitorcmd.go
+++ /dev/null
@@ -1,351 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
-
-package main
-
-import (
- "fmt"
- "math"
- "reflect"
- "runtime"
- "sort"
- "strings"
- "time"
-
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/gizak/termui"
- "gopkg.in/urfave/cli.v1"
-)
-
-var (
- monitorCommandAttachFlag = cli.StringFlag{
- Name: "attach",
- Value: node.DefaultIPCEndpoint(clientIdentifier),
- Usage: "API endpoint to attach to",
- }
- monitorCommandRowsFlag = cli.IntFlag{
- Name: "rows",
- Value: 5,
- Usage: "Maximum rows in the chart grid",
- }
- monitorCommandRefreshFlag = cli.IntFlag{
- Name: "refresh",
- Value: 3,
- Usage: "Refresh interval in seconds",
- }
- monitorCommand = cli.Command{
- Action: utils.MigrateFlags(monitor), // keep track of migration progress
- Name: "monitor",
- Usage: "Monitor and visualize node metrics",
- ArgsUsage: " ",
- Category: "MONITOR COMMANDS",
- Description: `
-The Geth monitor is a tool to collect and visualize various internal metrics
-gathered by the node, supporting different chart types as well as the capacity
-to display multiple metrics simultaneously.
-`,
- Flags: []cli.Flag{
- monitorCommandAttachFlag,
- monitorCommandRowsFlag,
- monitorCommandRefreshFlag,
- },
- }
-)
-
-// monitor starts a terminal UI based monitoring tool for the requested metrics.
-func monitor(ctx *cli.Context) error {
- var (
- client *rpc.Client
- err error
- )
- // Attach to an Ethereum node over IPC or RPC
- endpoint := ctx.String(monitorCommandAttachFlag.Name)
- if client, err = dialRPC(endpoint); err != nil {
- utils.Fatalf("Unable to attach to geth node: %v", err)
- }
- defer client.Close()
-
- // Retrieve all the available metrics and resolve the user pattens
- metrics, err := retrieveMetrics(client)
- if err != nil {
- utils.Fatalf("Failed to retrieve system metrics: %v", err)
- }
- monitored := resolveMetrics(metrics, ctx.Args())
- if len(monitored) == 0 {
- list := expandMetrics(metrics, "")
- sort.Strings(list)
-
- if len(list) > 0 {
- utils.Fatalf("No metrics specified.\n\nAvailable:\n - %s", strings.Join(list, "\n - "))
- } else {
- utils.Fatalf("No metrics collected by geth (--%s).\n", utils.MetricsEnabledFlag.Name)
- }
- }
- sort.Strings(monitored)
- if cols := len(monitored) / ctx.Int(monitorCommandRowsFlag.Name); cols > 6 {
- utils.Fatalf("Requested metrics (%d) spans more that 6 columns:\n - %s", len(monitored), strings.Join(monitored, "\n - "))
- }
- // Create and configure the chart UI defaults
- if err := termui.Init(); err != nil {
- utils.Fatalf("Unable to initialize terminal UI: %v", err)
- }
- defer termui.Close()
-
- rows := len(monitored)
- if max := ctx.Int(monitorCommandRowsFlag.Name); rows > max {
- rows = max
- }
- cols := (len(monitored) + rows - 1) / rows
- for i := 0; i < rows; i++ {
- termui.Body.AddRows(termui.NewRow())
- }
- // Create each individual data chart
- footer := termui.NewPar("")
- footer.Block.Border = true
- footer.Height = 3
-
- charts := make([]*termui.LineChart, len(monitored))
- units := make([]int, len(monitored))
- data := make([][]float64, len(monitored))
- for i := 0; i < len(monitored); i++ {
- charts[i] = createChart((termui.TermHeight() - footer.Height) / rows)
- row := termui.Body.Rows[i%rows]
- row.Cols = append(row.Cols, termui.NewCol(12/cols, 0, charts[i]))
- }
- termui.Body.AddRows(termui.NewRow(termui.NewCol(12, 0, footer)))
-
- refreshCharts(client, monitored, data, units, charts, ctx, footer)
- termui.Body.Align()
- termui.Render(termui.Body)
-
- // Watch for various system events, and periodically refresh the charts
- termui.Handle("/sys/kbd/C-c", func(termui.Event) {
- termui.StopLoop()
- })
- termui.Handle("/sys/wnd/resize", func(termui.Event) {
- termui.Body.Width = termui.TermWidth()
- for _, chart := range charts {
- chart.Height = (termui.TermHeight() - footer.Height) / rows
- }
- termui.Body.Align()
- termui.Render(termui.Body)
- })
- go func() {
- tick := time.NewTicker(time.Duration(ctx.Int(monitorCommandRefreshFlag.Name)) * time.Second)
- for range tick.C {
- if refreshCharts(client, monitored, data, units, charts, ctx, footer) {
- termui.Body.Align()
- }
- termui.Render(termui.Body)
- }
- }()
- termui.Loop()
- return nil
-}
-
-// retrieveMetrics contacts the attached geth node and retrieves the entire set
-// of collected system metrics.
-func retrieveMetrics(client *rpc.Client) (map[string]interface{}, error) {
- var metrics map[string]interface{}
- err := client.Call(&metrics, "debug_metrics", true)
- return metrics, err
-}
-
-// resolveMetrics takes a list of input metric patterns, and resolves each to one
-// or more canonical metric names.
-func resolveMetrics(metrics map[string]interface{}, patterns []string) []string {
- res := []string{}
- for _, pattern := range patterns {
- res = append(res, resolveMetric(metrics, pattern, "")...)
- }
- return res
-}
-
-// resolveMetrics takes a single of input metric pattern, and resolves it to one
-// or more canonical metric names.
-func resolveMetric(metrics map[string]interface{}, pattern string, path string) []string {
- results := []string{}
-
- // If a nested metric was requested, recurse optionally branching (via comma)
- parts := strings.SplitN(pattern, "/", 2)
- if len(parts) > 1 {
- for _, variation := range strings.Split(parts[0], ",") {
- submetrics, ok := metrics[variation].(map[string]interface{})
- if !ok {
- utils.Fatalf("Failed to retrieve system metrics: %s", path+variation)
- return nil
- }
- results = append(results, resolveMetric(submetrics, parts[1], path+variation+"/")...)
- }
- return results
- }
- // Depending what the last link is, return or expand
- for _, variation := range strings.Split(pattern, ",") {
- switch metric := metrics[variation].(type) {
- case float64:
- // Final metric value found, return as singleton
- results = append(results, path+variation)
-
- case map[string]interface{}:
- results = append(results, expandMetrics(metric, path+variation+"/")...)
-
- default:
- utils.Fatalf("Metric pattern resolved to unexpected type: %v", reflect.TypeOf(metric))
- return nil
- }
- }
- return results
-}
-
-// expandMetrics expands the entire tree of metrics into a flat list of paths.
-func expandMetrics(metrics map[string]interface{}, path string) []string {
- // Iterate over all fields and expand individually
- list := []string{}
- for name, metric := range metrics {
- switch metric := metric.(type) {
- case float64:
- // Final metric value found, append to list
- list = append(list, path+name)
-
- case map[string]interface{}:
- // Tree of metrics found, expand recursively
- list = append(list, expandMetrics(metric, path+name+"/")...)
-
- default:
- utils.Fatalf("Metric pattern %s resolved to unexpected type: %v", path+name, reflect.TypeOf(metric))
- return nil
- }
- }
- return list
-}
-
-// fetchMetric iterates over the metrics map and retrieves a specific one.
-func fetchMetric(metrics map[string]interface{}, metric string) float64 {
- parts := strings.Split(metric, "/")
- for _, part := range parts[:len(parts)-1] {
- var found bool
- metrics, found = metrics[part].(map[string]interface{})
- if !found {
- return 0
- }
- }
- if v, ok := metrics[parts[len(parts)-1]].(float64); ok {
- return v
- }
- return 0
-}
-
-// refreshCharts retrieves a next batch of metrics, and inserts all the new
-// values into the active datasets and charts
-func refreshCharts(client *rpc.Client, metrics []string, data [][]float64, units []int, charts []*termui.LineChart, ctx *cli.Context, footer *termui.Par) (realign bool) {
- values, err := retrieveMetrics(client)
- for i, metric := range metrics {
- if len(data) < 512 {
- data[i] = append([]float64{fetchMetric(values, metric)}, data[i]...)
- } else {
- data[i] = append([]float64{fetchMetric(values, metric)}, data[i][:len(data[i])-1]...)
- }
- if updateChart(metric, data[i], &units[i], charts[i], err) {
- realign = true
- }
- }
- updateFooter(ctx, err, footer)
- return
-}
-
-// updateChart inserts a dataset into a line chart, scaling appropriately as to
-// not display weird labels, also updating the chart label accordingly.
-func updateChart(metric string, data []float64, base *int, chart *termui.LineChart, err error) (realign bool) {
- dataUnits := []string{"", "K", "M", "G", "T", "E"}
- timeUnits := []string{"ns", "µs", "ms", "s", "ks", "ms"}
- colors := []termui.Attribute{termui.ColorBlue, termui.ColorCyan, termui.ColorGreen, termui.ColorYellow, termui.ColorRed, termui.ColorRed}
-
- // Extract only part of the data that's actually visible
- if chart.Width*2 < len(data) {
- data = data[:chart.Width*2]
- }
- // Find the maximum value and scale under 1K
- high := 0.0
- if len(data) > 0 {
- high = data[0]
- for _, value := range data[1:] {
- high = math.Max(high, value)
- }
- }
- unit, scale := 0, 1.0
- for high >= 1000 && unit+1 < len(dataUnits) {
- high, unit, scale = high/1000, unit+1, scale*1000
- }
- // If the unit changes, re-create the chart (hack to set max height...)
- if unit != *base {
- realign, *base, *chart = true, unit, *createChart(chart.Height)
- }
- // Update the chart's data points with the scaled values
- if cap(chart.Data) < len(data) {
- chart.Data = make([]float64, len(data))
- }
- chart.Data = chart.Data[:len(data)]
- for i, value := range data {
- chart.Data[i] = value / scale
- }
- // Update the chart's label with the scale units
- units := dataUnits
- if strings.Contains(metric, "/Percentiles/") || strings.Contains(metric, "/pauses/") || strings.Contains(metric, "/time/") {
- units = timeUnits
- }
- chart.BorderLabel = metric
- if len(units[unit]) > 0 {
- chart.BorderLabel += " [" + units[unit] + "]"
- }
- chart.LineColor = colors[unit] | termui.AttrBold
- if err != nil {
- chart.LineColor = termui.ColorRed | termui.AttrBold
- }
- return
-}
-
-// createChart creates an empty line chart with the default configs.
-func createChart(height int) *termui.LineChart {
- chart := termui.NewLineChart()
- if runtime.GOOS == "windows" {
- chart.Mode = "dot"
- }
- chart.DataLabels = []string{""}
- chart.Height = height
- chart.AxesColor = termui.ColorWhite
- chart.PaddingBottom = -2
-
- chart.BorderLabelFg = chart.BorderFg | termui.AttrBold
- chart.BorderFg = chart.BorderBg
-
- return chart
-}
-
-// updateFooter updates the footer contents based on any encountered errors.
-func updateFooter(ctx *cli.Context, err error, footer *termui.Par) {
- // Generate the basic footer
- refresh := time.Duration(ctx.Int(monitorCommandRefreshFlag.Name)) * time.Second
- footer.Text = fmt.Sprintf("Press Ctrl+C to quit. Refresh interval: %v.", refresh)
- footer.TextFgColor = termui.ThemeAttr("par.fg") | termui.AttrBold
-
- // Append any encountered errors
- if err != nil {
- footer.Text = fmt.Sprintf("Error: %v.", err)
- footer.TextFgColor = termui.ColorRed | termui.AttrBold
- }
-}
diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go
index bf3dedb21..35803dd5b 100644
--- a/cmd/geth/usage.go
+++ b/cmd/geth/usage.go
@@ -86,6 +86,8 @@ var AppHelpFlagGroups = []flagGroup{
utils.EthStatsURLFlag,
utils.IdentityFlag,
utils.LightServFlag,
+ utils.LightBandwidthInFlag,
+ utils.LightBandwidthOutFlag,
utils.LightPeersFlag,
utils.LightKDFFlag,
utils.WhitelistFlag,
@@ -142,7 +144,7 @@ var AppHelpFlagGroups = []flagGroup{
utils.CacheDatabaseFlag,
utils.CacheTrieFlag,
utils.CacheGCFlag,
- utils.TrieCacheGenFlag,
+ utils.CacheNoPrefetchFlag,
},
},
{
@@ -151,6 +153,7 @@ var AppHelpFlagGroups = []flagGroup{
utils.UnlockedAccountFlag,
utils.PasswordFileFlag,
utils.ExternalSignerFlag,
+ utils.InsecureUnlockAllowedFlag,
},
},
{
@@ -230,16 +233,8 @@ var AppHelpFlagGroups = []flagGroup{
}, debug.Flags...),
},
{
- Name: "METRICS AND STATS",
- Flags: []cli.Flag{
- utils.MetricsEnabledFlag,
- utils.MetricsEnableInfluxDBFlag,
- utils.MetricsInfluxDBEndpointFlag,
- utils.MetricsInfluxDBDatabaseFlag,
- utils.MetricsInfluxDBUsernameFlag,
- utils.MetricsInfluxDBPasswordFlag,
- utils.MetricsInfluxDBTagsFlag,
- },
+ Name: "METRICS AND STATS",
+ Flags: metricsFlags,
},
{
Name: "WHISPER (EXPERIMENTAL)",
@@ -314,7 +309,7 @@ func init() {
categorized[flag.String()] = struct{}{}
}
}
- uncategorized := []cli.Flag{}
+ var uncategorized []cli.Flag
for _, flag := range data.(*cli.App).Flags {
if _, ok := categorized[flag.String()]; !ok {
if strings.HasPrefix(flag.GetName(), "dashboard") {
diff --git a/cmd/internal/browser/browser.go b/cmd/internal/browser/browser.go
deleted file mode 100644
index 897086f47..000000000
--- a/cmd/internal/browser/browser.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package browser provides utilities for interacting with users' browsers.
-package browser
-
-import (
- "os"
- "os/exec"
- "runtime"
-)
-
-// Commands returns a list of possible commands to use to open a url.
-func Commands() [][]string {
- var cmds [][]string
- if exe := os.Getenv("BROWSER"); exe != "" {
- cmds = append(cmds, []string{exe})
- }
- switch runtime.GOOS {
- case "darwin":
- cmds = append(cmds, []string{"/usr/bin/open"})
- case "windows":
- cmds = append(cmds, []string{"cmd", "/c", "start"})
- default:
- cmds = append(cmds, []string{"xdg-open"})
- }
- cmds = append(cmds,
- []string{"chrome"},
- []string{"google-chrome"},
- []string{"chromium"},
- []string{"firefox"},
- )
- return cmds
-}
-
-// Open tries to open url in a browser and reports whether it succeeded.
-func Open(url string) bool {
- for _, args := range Commands() {
- cmd := exec.Command(args[0], append(args[1:], url)...)
- if cmd.Start() == nil {
- return true
- }
- }
- return false
-}
diff --git a/cmd/swarm/access.go b/cmd/swarm/access.go
index 072541b65..cc0cc8201 100644
--- a/cmd/swarm/access.go
+++ b/cmd/swarm/access.go
@@ -178,8 +178,8 @@ func accessNewACT(ctx *cli.Context) {
accessKey []byte
err error
ref = args[0]
- pkGrantees = []string{}
- passGrantees = []string{}
+ pkGrantees []string
+ passGrantees []string
pkGranteesFilename = ctx.String(SwarmAccessGrantKeysFlag.Name)
passGranteesFilename = ctx.String(utils.PasswordFileFlag.Name)
privateKey = getPrivKey(ctx)
diff --git a/cmd/swarm/access_test.go b/cmd/swarm/access_test.go
index 967ef2742..0aaaad030 100644
--- a/cmd/swarm/access_test.go
+++ b/cmd/swarm/access_test.go
@@ -52,11 +52,12 @@ func TestACT(t *testing.T) {
t.Skip()
}
- initCluster(t)
+ cluster := newTestCluster(t, clusterSize)
+ defer cluster.Shutdown()
cases := []struct {
name string
- f func(t *testing.T)
+ f func(t *testing.T, cluster *testCluster)
}{
{"Password", testPassword},
{"PK", testPK},
@@ -65,7 +66,9 @@ func TestACT(t *testing.T) {
}
for _, tc := range cases {
- t.Run(tc.name, tc.f)
+ t.Run(tc.name, func(t *testing.T) {
+ tc.f(t, cluster)
+ })
}
}
@@ -74,7 +77,7 @@ func TestACT(t *testing.T) {
// The parties participating - node (publisher), uploads to second node then disappears. Content which was uploaded
// is then fetched through 2nd node. since the tested code is not key-aware - we can just
// fetch from the 2nd node using HTTP BasicAuth
-func testPassword(t *testing.T) {
+func testPassword(t *testing.T, cluster *testCluster) {
dataFilename := testutil.TempFileWithContent(t, data)
defer os.RemoveAll(dataFilename)
@@ -226,7 +229,7 @@ func testPassword(t *testing.T) {
// The parties participating - node (publisher), uploads to second node (which is also the grantee) then disappears.
// Content which was uploaded is then fetched through the grantee's http proxy. Since the tested code is private-key aware,
// the test will fail if the proxy's given private key is not granted on the ACT.
-func testPK(t *testing.T) {
+func testPK(t *testing.T, cluster *testCluster) {
dataFilename := testutil.TempFileWithContent(t, data)
defer os.RemoveAll(dataFilename)
@@ -359,13 +362,13 @@ func testPK(t *testing.T) {
}
// testACTWithoutBogus tests the creation of the ACT manifest end-to-end, without any bogus entries (i.e. default scenario = 3 nodes 1 unauthorized)
-func testACTWithoutBogus(t *testing.T) {
- testACT(t, 0)
+func testACTWithoutBogus(t *testing.T, cluster *testCluster) {
+ testACT(t, cluster, 0)
}
// testACTWithBogus tests the creation of the ACT manifest end-to-end, with 100 bogus entries (i.e. 100 EC keys + default scenario = 3 nodes 1 unauthorized = 103 keys in the ACT manifest)
-func testACTWithBogus(t *testing.T) {
- testACT(t, 100)
+func testACTWithBogus(t *testing.T, cluster *testCluster) {
+ testACT(t, cluster, 100)
}
// testACT tests the e2e creation, uploading and downloading of an ACT access control with both EC keys AND password protection
@@ -373,7 +376,7 @@ func testACTWithBogus(t *testing.T) {
// set and also protects the ACT with a password. the third node should fail decoding the reference as it will not be granted access.
// the third node then then tries to download using a correct password (and succeeds) then uses a wrong password and fails.
// the publisher uploads through one of the nodes then disappears.
-func testACT(t *testing.T, bogusEntries int) {
+func testACT(t *testing.T, cluster *testCluster, bogusEntries int) {
var uploadThroughNode = cluster.Nodes[0]
client := swarmapi.NewClient(uploadThroughNode.URL)
@@ -397,7 +400,7 @@ func testACT(t *testing.T, bogusEntries int) {
}
ref := matches[0]
- grantees := []string{}
+ var grantees []string
for i, v := range cluster.Nodes {
if i == nodeToSkip {
continue
@@ -408,7 +411,7 @@ func testACT(t *testing.T, bogusEntries int) {
}
if bogusEntries > 0 {
- bogusGrantees := []string{}
+ var bogusGrantees []string
for i := 0; i < bogusEntries; i++ {
prv, err := ecies.GenerateKey(rand.Reader, DefaultCurve, nil)
diff --git a/cmd/swarm/config.go b/cmd/swarm/config.go
index 98d4dee7b..32cd442a0 100644
--- a/cmd/swarm/config.go
+++ b/cmd/swarm/config.go
@@ -59,31 +59,31 @@ var (
//constants for environment variables
const (
- SWARM_ENV_CHEQUEBOOK_ADDR = "SWARM_CHEQUEBOOK_ADDR"
- SWARM_ENV_ACCOUNT = "SWARM_ACCOUNT"
- SWARM_ENV_LISTEN_ADDR = "SWARM_LISTEN_ADDR"
- SWARM_ENV_PORT = "SWARM_PORT"
- SWARM_ENV_NETWORK_ID = "SWARM_NETWORK_ID"
- SWARM_ENV_SWAP_ENABLE = "SWARM_SWAP_ENABLE"
- SWARM_ENV_SWAP_API = "SWARM_SWAP_API"
- SWARM_ENV_SYNC_DISABLE = "SWARM_SYNC_DISABLE"
- SWARM_ENV_SYNC_UPDATE_DELAY = "SWARM_ENV_SYNC_UPDATE_DELAY"
- SWARM_ENV_MAX_STREAM_PEER_SERVERS = "SWARM_ENV_MAX_STREAM_PEER_SERVERS"
- SWARM_ENV_LIGHT_NODE_ENABLE = "SWARM_LIGHT_NODE_ENABLE"
- SWARM_ENV_DELIVERY_SKIP_CHECK = "SWARM_DELIVERY_SKIP_CHECK"
- SWARM_ENV_ENS_API = "SWARM_ENS_API"
- SWARM_ENV_ENS_ADDR = "SWARM_ENS_ADDR"
- SWARM_ENV_CORS = "SWARM_CORS"
- SWARM_ENV_BOOTNODES = "SWARM_BOOTNODES"
- SWARM_ENV_PSS_ENABLE = "SWARM_PSS_ENABLE"
- SWARM_ENV_STORE_PATH = "SWARM_STORE_PATH"
- SWARM_ENV_STORE_CAPACITY = "SWARM_STORE_CAPACITY"
- SWARM_ENV_STORE_CACHE_CAPACITY = "SWARM_STORE_CACHE_CAPACITY"
- SWARM_ENV_BOOTNODE_MODE = "SWARM_BOOTNODE_MODE"
- SWARM_ACCESS_PASSWORD = "SWARM_ACCESS_PASSWORD"
- SWARM_AUTO_DEFAULTPATH = "SWARM_AUTO_DEFAULTPATH"
- SWARM_GLOBALSTORE_API = "SWARM_GLOBALSTORE_API"
- GETH_ENV_DATADIR = "GETH_DATADIR"
+ SwarmEnvChequebookAddr = "SWARM_CHEQUEBOOK_ADDR"
+ SwarmEnvAccount = "SWARM_ACCOUNT"
+ SwarmEnvListenAddr = "SWARM_LISTEN_ADDR"
+ SwarmEnvPort = "SWARM_PORT"
+ SwarmEnvNetworkID = "SWARM_NETWORK_ID"
+ SwarmEnvSwapEnable = "SWARM_SWAP_ENABLE"
+ SwarmEnvSwapAPI = "SWARM_SWAP_API"
+ SwarmEnvSyncDisable = "SWARM_SYNC_DISABLE"
+ SwarmEnvSyncUpdateDelay = "SWARM_ENV_SYNC_UPDATE_DELAY"
+ SwarmEnvMaxStreamPeerServers = "SWARM_ENV_MAX_STREAM_PEER_SERVERS"
+ SwarmEnvLightNodeEnable = "SWARM_LIGHT_NODE_ENABLE"
+ SwarmEnvDeliverySkipCheck = "SWARM_DELIVERY_SKIP_CHECK"
+ SwarmEnvENSAPI = "SWARM_ENS_API"
+ SwarmEnvENSAddr = "SWARM_ENS_ADDR"
+ SwarmEnvCORS = "SWARM_CORS"
+ SwarmEnvBootnodes = "SWARM_BOOTNODES"
+ SwarmEnvPSSEnable = "SWARM_PSS_ENABLE"
+ SwarmEnvStorePath = "SWARM_STORE_PATH"
+ SwarmEnvStoreCapacity = "SWARM_STORE_CAPACITY"
+ SwarmEnvStoreCacheCapacity = "SWARM_STORE_CACHE_CAPACITY"
+ SwarmEnvBootnodeMode = "SWARM_BOOTNODE_MODE"
+ SwarmAccessPassword = "SWARM_ACCESS_PASSWORD"
+ SwarmAutoDefaultPath = "SWARM_AUTO_DEFAULTPATH"
+ SwarmGlobalstoreAPI = "SWARM_GLOBALSTORE_API"
+ GethEnvDataDir = "GETH_DATADIR"
)
// These settings ensure that TOML keys use the same names as Go struct fields.
@@ -123,18 +123,22 @@ func buildConfig(ctx *cli.Context) (config *bzzapi.Config, err error) {
}
//finally, after the configuration build phase is finished, initialize
-func initSwarmNode(config *bzzapi.Config, stack *node.Node, ctx *cli.Context) {
+func initSwarmNode(config *bzzapi.Config, stack *node.Node, ctx *cli.Context, nodeconfig *node.Config) error {
//at this point, all vars should be set in the Config
//get the account for the provided swarm account
prvkey := getAccount(config.BzzAccount, ctx, stack)
//set the resolved config path (geth --datadir)
config.Path = expandPath(stack.InstanceDir())
//finally, initialize the configuration
- config.Init(prvkey)
+ err := config.Init(prvkey, nodeconfig.NodeKey())
+ if err != nil {
+ return err
+ }
//configuration phase completed here
log.Debug("Starting Swarm with the following parameters:")
//after having created the config, print it to screen
log.Debug(printConfig(config))
+ return nil
}
//configFileOverride overrides the current config with the config file, if a config file has been provided
@@ -227,7 +231,7 @@ func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Con
currentConfig.SwapAPI = ctx.GlobalString(SwarmSwapAPIFlag.Name)
if currentConfig.SwapEnabled && currentConfig.SwapAPI == "" {
- utils.Fatalf(SWARM_ERR_SWAP_SET_NO_API)
+ utils.Fatalf(SwarmErrSwapSetNoAPI)
}
if ctx.GlobalIsSet(EnsAPIFlag.Name) {
@@ -255,8 +259,8 @@ func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Con
currentConfig.LocalStoreParams.DbCapacity = storeCapacity
}
- if storeCacheCapacity := ctx.GlobalUint(SwarmStoreCacheCapacity.Name); storeCacheCapacity != 0 {
- currentConfig.LocalStoreParams.CacheCapacity = storeCacheCapacity
+ if ctx.GlobalIsSet(SwarmStoreCacheCapacity.Name) {
+ currentConfig.LocalStoreParams.CacheCapacity = ctx.GlobalUint(SwarmStoreCacheCapacity.Name)
}
if ctx.GlobalIsSet(SwarmBootnodeModeFlag.Name) {
@@ -274,113 +278,113 @@ func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Con
// envVarsOverride overrides the current config with whatver is provided in environment variables
// most values are not allowed a zero value (empty string), if not otherwise noted
func envVarsOverride(currentConfig *bzzapi.Config) (config *bzzapi.Config) {
- if keyid := os.Getenv(SWARM_ENV_ACCOUNT); keyid != "" {
+ if keyid := os.Getenv(SwarmEnvAccount); keyid != "" {
currentConfig.BzzAccount = keyid
}
- if chbookaddr := os.Getenv(SWARM_ENV_CHEQUEBOOK_ADDR); chbookaddr != "" {
+ if chbookaddr := os.Getenv(SwarmEnvChequebookAddr); chbookaddr != "" {
currentConfig.Contract = common.HexToAddress(chbookaddr)
}
- if networkid := os.Getenv(SWARM_ENV_NETWORK_ID); networkid != "" {
+ if networkid := os.Getenv(SwarmEnvNetworkID); networkid != "" {
id, err := strconv.ParseUint(networkid, 10, 64)
if err != nil {
- utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_NETWORK_ID, err)
+ utils.Fatalf("invalid environment variable %s: %v", SwarmEnvNetworkID, err)
}
if id != 0 {
currentConfig.NetworkID = id
}
}
- if datadir := os.Getenv(GETH_ENV_DATADIR); datadir != "" {
+ if datadir := os.Getenv(GethEnvDataDir); datadir != "" {
currentConfig.Path = expandPath(datadir)
}
- bzzport := os.Getenv(SWARM_ENV_PORT)
+ bzzport := os.Getenv(SwarmEnvPort)
if len(bzzport) > 0 {
currentConfig.Port = bzzport
}
- if bzzaddr := os.Getenv(SWARM_ENV_LISTEN_ADDR); bzzaddr != "" {
+ if bzzaddr := os.Getenv(SwarmEnvListenAddr); bzzaddr != "" {
currentConfig.ListenAddr = bzzaddr
}
- if swapenable := os.Getenv(SWARM_ENV_SWAP_ENABLE); swapenable != "" {
+ if swapenable := os.Getenv(SwarmEnvSwapEnable); swapenable != "" {
swap, err := strconv.ParseBool(swapenable)
if err != nil {
- utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_SWAP_ENABLE, err)
+ utils.Fatalf("invalid environment variable %s: %v", SwarmEnvSwapEnable, err)
}
currentConfig.SwapEnabled = swap
}
- if syncdisable := os.Getenv(SWARM_ENV_SYNC_DISABLE); syncdisable != "" {
+ if syncdisable := os.Getenv(SwarmEnvSyncDisable); syncdisable != "" {
sync, err := strconv.ParseBool(syncdisable)
if err != nil {
- utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_SYNC_DISABLE, err)
+ utils.Fatalf("invalid environment variable %s: %v", SwarmEnvSyncDisable, err)
}
currentConfig.SyncEnabled = !sync
}
- if v := os.Getenv(SWARM_ENV_DELIVERY_SKIP_CHECK); v != "" {
+ if v := os.Getenv(SwarmEnvDeliverySkipCheck); v != "" {
skipCheck, err := strconv.ParseBool(v)
if err != nil {
currentConfig.DeliverySkipCheck = skipCheck
}
}
- if v := os.Getenv(SWARM_ENV_SYNC_UPDATE_DELAY); v != "" {
+ if v := os.Getenv(SwarmEnvSyncUpdateDelay); v != "" {
d, err := time.ParseDuration(v)
if err != nil {
- utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_SYNC_UPDATE_DELAY, err)
+ utils.Fatalf("invalid environment variable %s: %v", SwarmEnvSyncUpdateDelay, err)
}
currentConfig.SyncUpdateDelay = d
}
- if max := os.Getenv(SWARM_ENV_MAX_STREAM_PEER_SERVERS); max != "" {
+ if max := os.Getenv(SwarmEnvMaxStreamPeerServers); max != "" {
m, err := strconv.Atoi(max)
if err != nil {
- utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_MAX_STREAM_PEER_SERVERS, err)
+ utils.Fatalf("invalid environment variable %s: %v", SwarmEnvMaxStreamPeerServers, err)
}
currentConfig.MaxStreamPeerServers = m
}
- if lne := os.Getenv(SWARM_ENV_LIGHT_NODE_ENABLE); lne != "" {
+ if lne := os.Getenv(SwarmEnvLightNodeEnable); lne != "" {
lightnode, err := strconv.ParseBool(lne)
if err != nil {
- utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_LIGHT_NODE_ENABLE, err)
+ utils.Fatalf("invalid environment variable %s: %v", SwarmEnvLightNodeEnable, err)
}
currentConfig.LightNodeEnabled = lightnode
}
- if swapapi := os.Getenv(SWARM_ENV_SWAP_API); swapapi != "" {
+ if swapapi := os.Getenv(SwarmEnvSwapAPI); swapapi != "" {
currentConfig.SwapAPI = swapapi
}
if currentConfig.SwapEnabled && currentConfig.SwapAPI == "" {
- utils.Fatalf(SWARM_ERR_SWAP_SET_NO_API)
+ utils.Fatalf(SwarmErrSwapSetNoAPI)
}
- if ensapi := os.Getenv(SWARM_ENV_ENS_API); ensapi != "" {
+ if ensapi := os.Getenv(SwarmEnvENSAPI); ensapi != "" {
currentConfig.EnsAPIs = strings.Split(ensapi, ",")
}
- if ensaddr := os.Getenv(SWARM_ENV_ENS_ADDR); ensaddr != "" {
+ if ensaddr := os.Getenv(SwarmEnvENSAddr); ensaddr != "" {
currentConfig.EnsRoot = common.HexToAddress(ensaddr)
}
- if cors := os.Getenv(SWARM_ENV_CORS); cors != "" {
+ if cors := os.Getenv(SwarmEnvCORS); cors != "" {
currentConfig.Cors = cors
}
- if bm := os.Getenv(SWARM_ENV_BOOTNODE_MODE); bm != "" {
+ if bm := os.Getenv(SwarmEnvBootnodeMode); bm != "" {
bootnodeMode, err := strconv.ParseBool(bm)
if err != nil {
- utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_BOOTNODE_MODE, err)
+ utils.Fatalf("invalid environment variable %s: %v", SwarmEnvBootnodeMode, err)
}
currentConfig.BootnodeMode = bootnodeMode
}
- if api := os.Getenv(SWARM_GLOBALSTORE_API); api != "" {
+ if api := os.Getenv(SwarmGlobalstoreAPI); api != "" {
currentConfig.GlobalStoreAPI = api
}
diff --git a/cmd/swarm/config_test.go b/cmd/swarm/config_test.go
index 18be316e5..869edd0f7 100644
--- a/cmd/swarm/config_test.go
+++ b/cmd/swarm/config_test.go
@@ -52,7 +52,7 @@ func TestConfigFailsSwapEnabledNoSwapApi(t *testing.T) {
}
swarm := runSwarm(t, flags...)
- swarm.Expect("Fatal: " + SWARM_ERR_SWAP_SET_NO_API + "\n")
+ swarm.Expect("Fatal: " + SwarmErrSwapSetNoAPI + "\n")
swarm.ExpectExit()
}
@@ -63,7 +63,7 @@ func TestConfigFailsNoBzzAccount(t *testing.T) {
}
swarm := runSwarm(t, flags...)
- swarm.Expect("Fatal: " + SWARM_ERR_NO_BZZACCOUNT + "\n")
+ swarm.Expect("Fatal: " + SwarmErrNoBZZAccount + "\n")
swarm.ExpectExit()
}
diff --git a/cmd/swarm/flags.go b/cmd/swarm/flags.go
index b092a7747..5e1ada632 100644
--- a/cmd/swarm/flags.go
+++ b/cmd/swarm/flags.go
@@ -23,68 +23,68 @@ var (
ChequebookAddrFlag = cli.StringFlag{
Name: "chequebook",
Usage: "chequebook contract address",
- EnvVar: SWARM_ENV_CHEQUEBOOK_ADDR,
+ EnvVar: SwarmEnvChequebookAddr,
}
SwarmAccountFlag = cli.StringFlag{
Name: "bzzaccount",
Usage: "Swarm account key file",
- EnvVar: SWARM_ENV_ACCOUNT,
+ EnvVar: SwarmEnvAccount,
}
SwarmListenAddrFlag = cli.StringFlag{
Name: "httpaddr",
Usage: "Swarm HTTP API listening interface",
- EnvVar: SWARM_ENV_LISTEN_ADDR,
+ EnvVar: SwarmEnvListenAddr,
}
SwarmPortFlag = cli.StringFlag{
Name: "bzzport",
Usage: "Swarm local http api port",
- EnvVar: SWARM_ENV_PORT,
+ EnvVar: SwarmEnvPort,
}
SwarmNetworkIdFlag = cli.IntFlag{
Name: "bzznetworkid",
Usage: "Network identifier (integer, default 3=swarm testnet)",
- EnvVar: SWARM_ENV_NETWORK_ID,
+ EnvVar: SwarmEnvNetworkID,
}
SwarmSwapEnabledFlag = cli.BoolFlag{
Name: "swap",
Usage: "Swarm SWAP enabled (default false)",
- EnvVar: SWARM_ENV_SWAP_ENABLE,
+ EnvVar: SwarmEnvSwapEnable,
}
SwarmSwapAPIFlag = cli.StringFlag{
Name: "swap-api",
Usage: "URL of the Ethereum API provider to use to settle SWAP payments",
- EnvVar: SWARM_ENV_SWAP_API,
+ EnvVar: SwarmEnvSwapAPI,
}
SwarmSyncDisabledFlag = cli.BoolTFlag{
Name: "nosync",
Usage: "Disable swarm syncing",
- EnvVar: SWARM_ENV_SYNC_DISABLE,
+ EnvVar: SwarmEnvSyncDisable,
}
SwarmSyncUpdateDelay = cli.DurationFlag{
Name: "sync-update-delay",
Usage: "Duration for sync subscriptions update after no new peers are added (default 15s)",
- EnvVar: SWARM_ENV_SYNC_UPDATE_DELAY,
+ EnvVar: SwarmEnvSyncUpdateDelay,
}
SwarmMaxStreamPeerServersFlag = cli.IntFlag{
Name: "max-stream-peer-servers",
Usage: "Limit of Stream peer servers, 0 denotes unlimited",
- EnvVar: SWARM_ENV_MAX_STREAM_PEER_SERVERS,
+ EnvVar: SwarmEnvMaxStreamPeerServers,
Value: 10000, // A very large default value is possible as stream servers have very small memory footprint
}
SwarmLightNodeEnabled = cli.BoolFlag{
Name: "lightnode",
Usage: "Enable Swarm LightNode (default false)",
- EnvVar: SWARM_ENV_LIGHT_NODE_ENABLE,
+ EnvVar: SwarmEnvLightNodeEnable,
}
SwarmDeliverySkipCheckFlag = cli.BoolFlag{
Name: "delivery-skip-check",
Usage: "Skip chunk delivery check (default false)",
- EnvVar: SWARM_ENV_DELIVERY_SKIP_CHECK,
+ EnvVar: SwarmEnvDeliverySkipCheck,
}
EnsAPIFlag = cli.StringSliceFlag{
Name: "ens-api",
Usage: "ENS API endpoint for a TLD and with contract address, can be repeated, format [tld:][contract-addr@]url",
- EnvVar: SWARM_ENV_ENS_API,
+ EnvVar: SwarmEnvENSAPI,
}
SwarmApiFlag = cli.StringFlag{
Name: "bzzapi",
@@ -126,7 +126,7 @@ var (
SwarmAccessPasswordFlag = cli.StringFlag{
Name: "password",
Usage: "Password",
- EnvVar: SWARM_ACCESS_PASSWORD,
+ EnvVar: SwarmAccessPassword,
}
SwarmDryRunFlag = cli.BoolFlag{
Name: "dry-run",
@@ -135,22 +135,23 @@ var (
CorsStringFlag = cli.StringFlag{
Name: "corsdomain",
Usage: "Domain on which to send Access-Control-Allow-Origin header (multiple domains can be supplied separated by a ',')",
- EnvVar: SWARM_ENV_CORS,
+ EnvVar: SwarmEnvCORS,
}
SwarmStorePath = cli.StringFlag{
Name: "store.path",
Usage: "Path to leveldb chunk DB (default <$GETH_ENV_DIR>/swarm/bzz-<$BZZ_KEY>/chunks)",
- EnvVar: SWARM_ENV_STORE_PATH,
+ EnvVar: SwarmEnvStorePath,
}
SwarmStoreCapacity = cli.Uint64Flag{
Name: "store.size",
Usage: "Number of chunks (5M is roughly 20-25GB) (default 5000000)",
- EnvVar: SWARM_ENV_STORE_CAPACITY,
+ EnvVar: SwarmEnvStoreCapacity,
}
SwarmStoreCacheCapacity = cli.UintFlag{
Name: "store.cache.size",
- Usage: "Number of recent chunks cached in memory (default 5000)",
- EnvVar: SWARM_ENV_STORE_CACHE_CAPACITY,
+ Usage: "Number of recent chunks cached in memory",
+ EnvVar: SwarmEnvStoreCacheCapacity,
+ Value: 10000,
}
SwarmCompressedFlag = cli.BoolFlag{
Name: "compressed",
@@ -179,6 +180,6 @@ var (
SwarmGlobalStoreAPIFlag = cli.StringFlag{
Name: "globalstore-api",
Usage: "URL of the Global Store API provider (only for testing)",
- EnvVar: SWARM_GLOBALSTORE_API,
+ EnvVar: SwarmGlobalstoreAPI,
}
)
diff --git a/cmd/swarm/fs.go b/cmd/swarm/fs.go
index edeeddff8..7f156523b 100644
--- a/cmd/swarm/fs.go
+++ b/cmd/swarm/fs.go
@@ -123,7 +123,7 @@ func listMounts(cliContext *cli.Context) {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
- mf := []fuse.MountInfo{}
+ var mf []fuse.MountInfo
err = client.CallContext(ctx, &mf, "swarmfs_listmounts")
if err != nil {
utils.Fatalf("encountered an error calling the RPC endpoint while listing mounts: %v", err)
diff --git a/cmd/swarm/global-store/explorer.go b/cmd/swarm/global-store/explorer.go
new file mode 100644
index 000000000..634ff1ebb
--- /dev/null
+++ b/cmd/swarm/global-store/explorer.go
@@ -0,0 +1,66 @@
+// Copyright 2019 The go-ethereum Authors
+// This file is part of go-ethereum.
+//
+// go-ethereum is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// go-ethereum is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
+
+package main
+
+import (
+ "context"
+ "fmt"
+ "net"
+ "net/http"
+ "time"
+
+ "github.com/ethereum/go-ethereum/log"
+ "github.com/ethereum/go-ethereum/swarm/storage/mock"
+ "github.com/ethereum/go-ethereum/swarm/storage/mock/explorer"
+ cli "gopkg.in/urfave/cli.v1"
+)
+
+// serveChunkExplorer starts an http server in background with chunk explorer handler
+// using the provided global store. Server is started if the returned shutdown function
+// is not nil.
+func serveChunkExplorer(ctx *cli.Context, globalStore mock.GlobalStorer) (shutdown func(), err error) {
+ if !ctx.IsSet("explorer-address") {
+ return nil, nil
+ }
+
+ corsOrigins := ctx.StringSlice("explorer-cors-origin")
+ server := &http.Server{
+ Handler: explorer.NewHandler(globalStore, corsOrigins),
+ IdleTimeout: 30 * time.Minute,
+ ReadTimeout: 2 * time.Minute,
+ WriteTimeout: 2 * time.Minute,
+ }
+ listener, err := net.Listen("tcp", ctx.String("explorer-address"))
+ if err != nil {
+ return nil, fmt.Errorf("explorer: %v", err)
+ }
+ log.Info("chunk explorer http", "address", listener.Addr().String(), "origins", corsOrigins)
+
+ go func() {
+ if err := server.Serve(listener); err != nil {
+ log.Error("chunk explorer", "err", err)
+ }
+ }()
+
+ return func() {
+ ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+ defer cancel()
+ if err := server.Shutdown(ctx); err != nil {
+ log.Error("chunk explorer: shutdown", "err", err)
+ }
+ }, nil
+}
diff --git a/cmd/swarm/global-store/explorer_test.go b/cmd/swarm/global-store/explorer_test.go
new file mode 100644
index 000000000..2e4928c8f
--- /dev/null
+++ b/cmd/swarm/global-store/explorer_test.go
@@ -0,0 +1,254 @@
+// Copyright 2019 The go-ethereum Authors
+// This file is part of go-ethereum.
+//
+// go-ethereum is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// go-ethereum is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
+
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "sort"
+ "testing"
+
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/swarm/storage/mock/explorer"
+ mockRPC "github.com/ethereum/go-ethereum/swarm/storage/mock/rpc"
+)
+
+// TestExplorer validates basic chunk explorer functionality by storing
+// a small set of chunk and making http requests on exposed endpoint.
+// Full chunk explorer validation is done in mock/explorer package.
+func TestExplorer(t *testing.T) {
+ addr := findFreeTCPAddress(t)
+ explorerAddr := findFreeTCPAddress(t)
+ testCmd := runGlobalStore(t, "ws", "--addr", addr, "--explorer-address", explorerAddr)
+ defer testCmd.Kill()
+
+ client := websocketClient(t, addr)
+
+ store := mockRPC.NewGlobalStore(client)
+ defer store.Close()
+
+ nodeKeys := map[string][]string{
+ "a1": {"b1", "b2", "b3"},
+ "a2": {"b3", "b4", "b5"},
+ }
+
+ keyNodes := make(map[string][]string)
+
+ for addr, keys := range nodeKeys {
+ for _, key := range keys {
+ keyNodes[key] = append(keyNodes[key], addr)
+ }
+ }
+
+ invalidAddr := "c1"
+ invalidKey := "d1"
+
+ for addr, keys := range nodeKeys {
+ for _, key := range keys {
+ err := store.Put(common.HexToAddress(addr), common.Hex2Bytes(key), []byte("data"))
+ if err != nil {
+ t.Fatal(err)
+ }
+ }
+ }
+
+ endpoint := "http://" + explorerAddr
+
+ t.Run("has key", func(t *testing.T) {
+ for addr, keys := range nodeKeys {
+ for _, key := range keys {
+ testStatusResponse(t, endpoint+"/api/has-key/"+addr+"/"+key, http.StatusOK)
+ testStatusResponse(t, endpoint+"/api/has-key/"+invalidAddr+"/"+key, http.StatusNotFound)
+ }
+ testStatusResponse(t, endpoint+"/api/has-key/"+addr+"/"+invalidKey, http.StatusNotFound)
+ }
+ testStatusResponse(t, endpoint+"/api/has-key/"+invalidAddr+"/"+invalidKey, http.StatusNotFound)
+ })
+
+ t.Run("keys", func(t *testing.T) {
+ var keys []string
+ for key := range keyNodes {
+ keys = append(keys, key)
+ }
+ sort.Strings(keys)
+ testKeysResponse(t, endpoint+"/api/keys", explorer.KeysResponse{
+ Keys: keys,
+ })
+ })
+
+ t.Run("nodes", func(t *testing.T) {
+ var nodes []string
+ for addr := range nodeKeys {
+ nodes = append(nodes, common.HexToAddress(addr).Hex())
+ }
+ sort.Strings(nodes)
+ testNodesResponse(t, endpoint+"/api/nodes", explorer.NodesResponse{
+ Nodes: nodes,
+ })
+ })
+
+ t.Run("node keys", func(t *testing.T) {
+ for addr, keys := range nodeKeys {
+ testKeysResponse(t, endpoint+"/api/keys?node="+addr, explorer.KeysResponse{
+ Keys: keys,
+ })
+ }
+ testKeysResponse(t, endpoint+"/api/keys?node="+invalidAddr, explorer.KeysResponse{})
+ })
+
+ t.Run("key nodes", func(t *testing.T) {
+ for key, ad
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment