From f8e86350d18b3a3f5390d0e73add5ab408cac018 Mon Sep 17 00:00:00 2001
From: Youngtaek Yoon <noreply@yoon.anonaddy.me>
Date: Tue, 5 Oct 2021 05:02:21 +0000
Subject: [PATCH 1/6] fix: move `SigBlockHeight` from TxBody into AuthInfo
 (#293)

---
 baseapp/accountwgs_test.go            |   4 -
 docs/core/proto-docs.md               |   2 +-
 proto/lbm/tx/v1/tx.proto              |  12 +-
 server/mock/tx.go                     |   4 -
 simapp/helpers/test_helpers.go        |   1 -
 testutil/testdata/unknonwnproto.pb.go | 258 +++++++++++---------------
 testutil/testdata/unknonwnproto.proto |   7 +-
 types/tx/tx.pb.go                     | 191 +++++++++----------
 types/tx/types.go                     |   2 +-
 x/auth/tx/builder.go                  |   4 +-
 10 files changed, 220 insertions(+), 265 deletions(-)

diff --git a/baseapp/accountwgs_test.go b/baseapp/accountwgs_test.go
index 334527e4b3..d2e99d24de 100644
--- a/baseapp/accountwgs_test.go
+++ b/baseapp/accountwgs_test.go
@@ -77,10 +77,6 @@ func (tx AccountLockTestTx) ValidateBasic() error {
 	return nil
 }
 
-func (tx AccountLockTestTx) GetSigBlockHeight() uint64 {
-	return 0
-}
-
 func newTestPrivKeys(num int) []*secp256k1.PrivKey {
 	privs := make([]*secp256k1.PrivKey, 0, num)
 	for i := 0; i < num; i++ {
diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md
index b908ad124a..bd8d898184 100644
--- a/docs/core/proto-docs.md
+++ b/docs/core/proto-docs.md
@@ -9469,6 +9469,7 @@ transaction.
 | ----- | ---- | ----- | ----------- |
 | `signer_infos` | [SignerInfo](#lbm.tx.v1.SignerInfo) | repeated | signer_infos defines the signing modes for the required signers. The number and order of elements must match the required signers from TxBody's messages. The first element is the primary signer and the one which pays the fee. |
 | `fee` | [Fee](#lbm.tx.v1.Fee) |  | Fee is the fee and gas limit for the transaction. The first signer is the primary signer and the one which pays the fee. The fee can be calculated based on the cost of evaluating the body and doing signature verification of the signers. This can be estimated via simulation. |
+| `sig_block_height` | [uint64](#uint64) |  | sig block height is available between current block height and current block height - `VALID_SIG_BLOCK_PERIOD` this is used for distinguish signatures instead of account number. this is mandatory. |
 
 
 
@@ -9605,7 +9606,6 @@ TxBody is the body of a transaction that all signers sign over.
 | Field | Type | Label | Description |
 | ----- | ---- | ----- | ----------- |
 | `messages` | [google.protobuf.Any](#google.protobuf.Any) | repeated | messages is a list of messages to be executed. The required signers of those messages define the number and order of elements in AuthInfo's signer_infos and Tx's signatures. Each required signer address is added to the list only the first time it occurs. By convention, the first required signer (usually from the first message) is referred to as the primary signer and pays the fee for the whole transaction. |
-| `sig_block_height` | [uint64](#uint64) |  | sig block height is available between current block height and current block height - `VALID_SIG_BLOCK_PERIOD` this is used for distinguish signatures instead of account number. this is mandatory. |
 | `memo` | [string](#string) |  | memo is any arbitrary memo to be added to the transaction |
 | `timeout_height` | [uint64](#uint64) |  | timeout is the block height after which this transaction will not be processed by the chain |
 | `extension_options` | [google.protobuf.Any](#google.protobuf.Any) | repeated | extension_options are arbitrary options that can be added by chains when the default options are not sufficient. If any of these are present and can't be handled, the transaction will be rejected |
diff --git a/proto/lbm/tx/v1/tx.proto b/proto/lbm/tx/v1/tx.proto
index 597e627951..265151e4fc 100644
--- a/proto/lbm/tx/v1/tx.proto
+++ b/proto/lbm/tx/v1/tx.proto
@@ -71,16 +71,12 @@ message TxBody {
   // transaction.
   repeated google.protobuf.Any messages = 1;
 
-  // sig block height is available between current block height and current block height - `VALID_SIG_BLOCK_PERIOD`
-  // this is used for distinguish signatures instead of account number. this is mandatory.
-  uint64 sig_block_height = 2;
-
   // memo is any arbitrary memo to be added to the transaction
-  string memo = 3;
+  string memo = 2;
 
   // timeout is the block height after which this transaction will not
   // be processed by the chain
-  uint64 timeout_height = 4;
+  uint64 timeout_height = 3;
 
   // extension_options are arbitrary options that can be added by chains
   // when the default options are not sufficient. If any of these are present
@@ -107,6 +103,10 @@ message AuthInfo {
   // based on the cost of evaluating the body and doing signature verification
   // of the signers. This can be estimated via simulation.
   Fee fee = 2;
+
+  // sig block height is available between current block height and current block height - `VALID_SIG_BLOCK_PERIOD`
+  // this is used for distinguish signatures instead of account number. this is mandatory.
+  uint64 sig_block_height = 3;
 }
 
 // SignerInfo describes the public key and signing mode of a single top-level
diff --git a/server/mock/tx.go b/server/mock/tx.go
index 0ef966bccc..4fcd86e44b 100644
--- a/server/mock/tx.go
+++ b/server/mock/tx.go
@@ -53,10 +53,6 @@ func (tx kvstoreTx) GetSignBytes() []byte {
 	return tx.bytes
 }
 
-func (tx kvstoreTx) GetSigBlockHeight() uint64 {
-	return 0
-}
-
 // Should the app be calling this? Or only handlers?
 func (tx kvstoreTx) ValidateBasic() error {
 	return nil
diff --git a/simapp/helpers/test_helpers.go b/simapp/helpers/test_helpers.go
index 22f425f03a..c36f16c813 100644
--- a/simapp/helpers/test_helpers.go
+++ b/simapp/helpers/test_helpers.go
@@ -60,7 +60,6 @@ func GenTx(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, gas uint64, ch
 			ChainID:  chainID,
 			Sequence: accSeqs[i],
 		}
-		tx.SetSigBlockHeight(sbh[i])
 		signBytes, err := gen.SignModeHandler().GetSignBytes(signMode, signerData, tx.GetTx())
 		if err != nil {
 			panic(err)
diff --git a/testutil/testdata/unknonwnproto.pb.go b/testutil/testdata/unknonwnproto.pb.go
index 01adb35e25..55b19c3863 100644
--- a/testutil/testdata/unknonwnproto.pb.go
+++ b/testutil/testdata/unknonwnproto.pb.go
@@ -2567,10 +2567,9 @@ func (m *TestUpdatedTxRaw) GetNewField_1024() []byte {
 
 type TestUpdatedTxBody struct {
 	Messages                     []*types.Any `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"`
-	SigBlockHeight               uint64       `protobuf:"varint,2,opt,name=sig_block_height,json=sigBlockHeight,proto3" json:"sig_block_height,omitempty"`
-	Memo                         string       `protobuf:"bytes,3,opt,name=memo,proto3" json:"memo,omitempty"`
-	TimeoutHeight                int64        `protobuf:"varint,4,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"`
-	SomeNewField                 uint64       `protobuf:"varint,5,opt,name=some_new_field,json=someNewField,proto3" json:"some_new_field,omitempty"`
+	Memo                         string       `protobuf:"bytes,2,opt,name=memo,proto3" json:"memo,omitempty"`
+	TimeoutHeight                int64        `protobuf:"varint,3,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"`
+	SomeNewField                 uint64       `protobuf:"varint,4,opt,name=some_new_field,json=someNewField,proto3" json:"some_new_field,omitempty"`
 	SomeNewFieldNonCriticalField string       `protobuf:"bytes,1050,opt,name=some_new_field_non_critical_field,json=someNewFieldNonCriticalField,proto3" json:"some_new_field_non_critical_field,omitempty"`
 	ExtensionOptions             []*types.Any `protobuf:"bytes,1023,rep,name=extension_options,json=extensionOptions,proto3" json:"extension_options,omitempty"`
 	NonCriticalExtensionOptions  []*types.Any `protobuf:"bytes,2047,rep,name=non_critical_extension_options,json=nonCriticalExtensionOptions,proto3" json:"non_critical_extension_options,omitempty"`
@@ -2616,13 +2615,6 @@ func (m *TestUpdatedTxBody) GetMessages() []*types.Any {
 	return nil
 }
 
-func (m *TestUpdatedTxBody) GetSigBlockHeight() uint64 {
-	if m != nil {
-		return m.SigBlockHeight
-	}
-	return 0
-}
-
 func (m *TestUpdatedTxBody) GetMemo() string {
 	if m != nil {
 		return m.Memo
@@ -2817,111 +2809,110 @@ func init() {
 func init() { proto.RegisterFile("unknonwnproto.proto", fileDescriptor_448ea787339d1228) }
 
 var fileDescriptor_448ea787339d1228 = []byte{
-	// 1663 bytes of a gzipped FileDescriptorProto
+	// 1639 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcd, 0x6f, 0x1b, 0xc7,
-	0x15, 0xd7, 0x70, 0x49, 0x89, 0x7c, 0xa2, 0x69, 0x66, 0xec, 0xb6, 0x1b, 0x39, 0x66, 0x98, 0x85,
-	0xeb, 0x30, 0x41, 0x43, 0x9a, 0x4b, 0x06, 0x08, 0x72, 0x0a, 0xa9, 0x58, 0xb5, 0x01, 0x57, 0x2e,
-	0xa6, 0x4e, 0x5a, 0xf8, 0x42, 0x2c, 0xb9, 0xc3, 0xe5, 0x42, 0xe4, 0x8c, 0xba, 0x33, 0x6b, 0x91,
-	0xb7, 0xa2, 0x3d, 0xf4, 0xda, 0x4b, 0x51, 0xa0, 0xff, 0x41, 0x4f, 0x45, 0x6e, 0x45, 0x4f, 0x3d,
-	0xe6, 0x52, 0xc0, 0x97, 0x02, 0x05, 0x0a, 0x04, 0x85, 0x7d, 0xed, 0x7f, 0x50, 0x14, 0x29, 0x66,
-	0xf6, 0x83, 0x4b, 0x4b, 0x74, 0x28, 0xa5, 0x8d, 0x21, 0x20, 0x17, 0x69, 0xe6, 0xed, 0x6f, 0xde,
-	0xc7, 0xef, 0x7d, 0x70, 0x67, 0xe1, 0x5a, 0xc8, 0x8e, 0x18, 0x67, 0x27, 0xec, 0x38, 0xe0, 0x92,
-	0x37, 0xf5, 0x5f, 0x5c, 0x94, 0x54, 0x48, 0xd7, 0x91, 0xce, 0xde, 0x75, 0x8f, 0x7b, 0x5c, 0x0b,
-	0x5b, 0x6a, 0x15, 0x3d, 0xdf, 0x7b, 0xdd, 0xe3, 0xdc, 0x9b, 0xd2, 0x96, 0xde, 0x0d, 0xc3, 0x71,
-	0xcb, 0x61, 0x8b, 0xf8, 0x11, 0x9e, 0x0e, 0x67, 0x2d, 0x39, 0x6f, 0x3d, 0x69, 0xb7, 0xe4, 0x3c,
-	0x92, 0x59, 0x12, 0x4a, 0xfb, 0xa1, 0x90, 0x7c, 0x46, 0x83, 0x36, 0xae, 0x40, 0xce, 0x77, 0x4d,
-	0x54, 0x47, 0x8d, 0x02, 0xc9, 0xf9, 0x2e, 0xc6, 0x90, 0x67, 0xce, 0x8c, 0x9a, 0xb9, 0x3a, 0x6a,
-	0x94, 0x88, 0x5e, 0xe3, 0x77, 0xa0, 0x2a, 0xc2, 0xa1, 0x18, 0x05, 0xfe, 0xb1, 0xf4, 0x39, 0x1b,
-	0x8c, 0x29, 0x35, 0x8d, 0x3a, 0x6a, 0xe4, 0xc8, 0xd5, 0xac, 0xfc, 0x80, 0x52, 0x6c, 0xc2, 0xce,
-	0xb1, 0xb3, 0x98, 0x51, 0x26, 0xcd, 0x1d, 0xad, 0x21, 0xd9, 0x5a, 0x9f, 0xe5, 0x96, 0x66, 0xed,
-	0x53, 0x66, 0xf7, 0xa0, 0xe8, 0x33, 0x37, 0x14, 0x32, 0x58, 0x68, 0xd3, 0x05, 0x92, 0xee, 0x53,
-	0x97, 0x8c, 0x8c, 0x4b, 0xd7, 0xa1, 0x30, 0xa6, 0x27, 0x34, 0x30, 0xf3, 0xda, 0x8f, 0x68, 0x83,
-	0x6f, 0x40, 0x31, 0xa0, 0x82, 0x06, 0x4f, 0xa8, 0x6b, 0xfe, 0xae, 0x58, 0x47, 0x0d, 0x83, 0xa4,
-	0x02, 0xfc, 0x03, 0xc8, 0x8f, 0x7c, 0xb9, 0x30, 0xb7, 0xeb, 0xa8, 0x51, 0xb1, 0xcd, 0x66, 0x42,
-	0x6a, 0x33, 0xf5, 0xaa, 0xb9, 0xef, 0xcb, 0x05, 0xd1, 0x28, 0xfc, 0x21, 0x5c, 0x99, 0xf9, 0x62,
-	0x44, 0xa7, 0x53, 0x87, 0x51, 0x1e, 0x0a, 0x13, 0xea, 0xa8, 0xb1, 0x6b, 0x5f, 0x6f, 0x46, 0x5c,
-	0x37, 0x13, 0xae, 0x9b, 0x3d, 0xb6, 0x20, 0xab, 0x50, 0xeb, 0x87, 0x90, 0x57, 0x9a, 0x70, 0x11,
-	0xf2, 0x0f, 0x1c, 0x2e, 0xaa, 0x5b, 0xb8, 0x02, 0xf0, 0x80, 0x8b, 0x1e, 0xf3, 0xe8, 0x94, 0x8a,
-	0x2a, 0xc2, 0x65, 0x28, 0xfe, 0xd8, 0x99, 0xf2, 0xde, 0x54, 0xf2, 0x6a, 0x0e, 0x03, 0x6c, 0xff,
-	0x88, 0x8b, 0x11, 0x3f, 0xa9, 0x1a, 0x78, 0x17, 0x76, 0x0e, 0x1d, 0x3f, 0xe0, 0x43, 0xbf, 0x9a,
-	0xb7, 0x9a, 0x50, 0x3c, 0xa4, 0x42, 0x52, 0xb7, 0xdb, 0xdb, 0x24, 0x51, 0xd6, 0xdf, 0x50, 0x72,
-	0xa0, 0xb3, 0xd1, 0x01, 0x6c, 0x41, 0xce, 0xe9, 0x9a, 0xf9, 0xba, 0xd1, 0xd8, 0xb5, 0xf1, 0x92,
-	0x91, 0xc4, 0x28, 0xc9, 0x39, 0x5d, 0xdc, 0x81, 0x82, 0xcf, 0x5c, 0x3a, 0x37, 0x0b, 0x1a, 0x76,
-	0xf3, 0x45, 0x58, 0xa7, 0xd7, 0xbc, 0xaf, 0x9e, 0xdf, 0x65, 0x32, 0x58, 0x90, 0x08, 0xbb, 0xf7,
-	0x00, 0x60, 0x29, 0xc4, 0x55, 0x30, 0x8e, 0xe8, 0x42, 0xfb, 0x62, 0x10, 0xb5, 0xc4, 0x0d, 0x28,
-	0x3c, 0x71, 0xa6, 0x61, 0xe4, 0xcd, 0xd9, 0xb6, 0x23, 0xc0, 0x87, 0xb9, 0x0f, 0x90, 0xf5, 0x38,
-	0x09, 0xcb, 0xde, 0x2c, 0xac, 0x77, 0x61, 0x9b, 0x69, 0xbc, 0xae, 0x99, 0x33, 0xd4, 0x77, 0x7a,
-	0x24, 0x46, 0x58, 0x07, 0x89, 0xee, 0xf6, 0x69, 0xdd, 0x4b, 0x3d, 0x6b, 0xdc, 0xb4, 0x97, 0x7a,
-	0x3e, 0x4a, 0x73, 0xd5, 0x3f, 0xa5, 0xa7, 0x0a, 0x86, 0xe3, 0xd1, 0xb8, 0xb0, 0xd5, 0xf2, 0xac,
-	0x9a, 0xb6, 0xdc, 0x34, 0x79, 0x17, 0xd4, 0xa0, 0xd2, 0x39, 0x5c, 0x9f, 0xce, 0x3e, 0xc9, 0x0d,
-	0xbb, 0x16, 0x4b, 0xb9, 0x3c, 0xd3, 0x8a, 0xea, 0x6d, 0x65, 0x05, 0x11, 0xb5, 0xdc, 0x80, 0xc9,
-	0x7e, 0xc2, 0x80, 0xea, 0xc9, 0x80, 0x87, 0x92, 0xea, 0x9e, 0x2c, 0x91, 0x68, 0x63, 0xfd, 0x2c,
-	0xe5, 0xb7, 0x7f, 0x01, 0x7e, 0x97, 0xda, 0x63, 0x06, 0x8c, 0x94, 0x01, 0xeb, 0x97, 0x99, 0x89,
-	0xd2, 0xd9, 0xa8, 0x2e, 0x2a, 0x90, 0x13, 0xe3, 0x78, 0x74, 0xe5, 0xc4, 0x18, 0xbf, 0x01, 0x25,
-	0x11, 0x06, 0xa3, 0x89, 0x13, 0x78, 0x34, 0x9e, 0x24, 0x4b, 0x01, 0xae, 0xc3, 0xae, 0x4b, 0x85,
-	0xf4, 0x99, 0xa3, 0xa6, 0x9b, 0x59, 0xd0, 0x8a, 0xb2, 0x22, 0x7c, 0x1b, 0x2a, 0xa3, 0x80, 0xba,
-	0xbe, 0x1c, 0x8c, 0x9c, 0xc0, 0x1d, 0x30, 0x1e, 0x0d, 0xbd, 0x7b, 0x5b, 0xa4, 0x1c, 0xc9, 0xf7,
-	0x9d, 0xc0, 0x3d, 0xe4, 0xf8, 0x26, 0x94, 0x46, 0x13, 0xfa, 0xf3, 0x90, 0x2a, 0x48, 0x31, 0x86,
-	0x14, 0x23, 0xd1, 0x21, 0xc7, 0x2d, 0x28, 0xf2, 0xc0, 0xf7, 0x7c, 0xe6, 0x4c, 0xcd, 0x92, 0x26,
-	0xe2, 0xda, 0xe9, 0xe9, 0xd4, 0x26, 0x29, 0xa8, 0x5f, 0x4a, 0xa7, 0xac, 0xf5, 0xaf, 0x1c, 0x94,
-	0x1f, 0x51, 0x21, 0x3f, 0xa5, 0x81, 0xf0, 0x39, 0x6b, 0xe3, 0x32, 0xa0, 0x79, 0xdc, 0x69, 0x68,
-	0x8e, 0x6f, 0x01, 0x72, 0x62, 0x72, 0xbf, 0xbb, 0xd4, 0x99, 0x3d, 0x40, 0x90, 0xa3, 0x50, 0xc3,
-	0x38, 0xc1, 0x6b, 0x51, 0x43, 0x85, 0x1a, 0xc5, 0xc5, 0xb5, 0x16, 0x35, 0xc2, 0xef, 0x02, 0x72,
-	0xe3, 0x51, 0xb1, 0x06, 0xd5, 0xcf, 0x7f, 0xfe, 0xc5, 0x9b, 0x5b, 0x04, 0xb9, 0xb8, 0x02, 0x88,
-	0xea, 0x79, 0x5c, 0xb8, 0xb7, 0x45, 0x10, 0xc5, 0xb7, 0x01, 0x8d, 0x35, 0x85, 0x6b, 0xcf, 0x2a,
-	0xdc, 0x18, 0x5b, 0x80, 0x3c, 0xcd, 0xe3, 0xba, 0x81, 0x8c, 0x3c, 0xe5, 0xed, 0xc4, 0x2c, 0xbd,
-	0xdc, 0xdb, 0x09, 0x7e, 0x1b, 0xd0, 0x91, 0x59, 0x5e, 0xcb, 0x79, 0x3f, 0xff, 0xf4, 0x8b, 0x37,
-	0x11, 0x41, 0x47, 0xfd, 0x02, 0x18, 0x22, 0x9c, 0x59, 0xbf, 0x32, 0x56, 0xe8, 0xb6, 0xcf, 0x4b,
-	0xb7, 0xbd, 0x11, 0xdd, 0xf6, 0x46, 0x74, 0xdb, 0x8a, 0xee, 0x5b, 0x5f, 0x45, 0xb7, 0x7d, 0x21,
-	0xa2, 0xed, 0x57, 0x45, 0x34, 0xbe, 0x01, 0x25, 0x46, 0x4f, 0x06, 0x63, 0x9f, 0x4e, 0x5d, 0xf3,
-	0xf5, 0x3a, 0x6a, 0xe4, 0x49, 0x91, 0xd1, 0x93, 0x03, 0xb5, 0x4f, 0xb2, 0xf0, 0xdb, 0xd5, 0x2c,
-	0x74, 0xce, 0x9b, 0x85, 0xce, 0x46, 0x59, 0xe8, 0x6c, 0x94, 0x85, 0xce, 0x46, 0x59, 0xe8, 0x5c,
-	0x28, 0x0b, 0x9d, 0x57, 0x96, 0x85, 0xf7, 0x00, 0x33, 0xce, 0x06, 0xa3, 0xc0, 0x97, 0xfe, 0xc8,
-	0x99, 0xc6, 0xe9, 0xf8, 0xb5, 0x9e, 0x5d, 0xa4, 0xca, 0x38, 0xdb, 0x8f, 0x9f, 0xac, 0xe4, 0xe5,
-	0xdf, 0x39, 0xd8, 0xcb, 0xba, 0xff, 0x80, 0x33, 0xfa, 0x90, 0xd1, 0x87, 0xe3, 0x4f, 0xd5, 0x4f,
-	0xf9, 0x25, 0xcd, 0xd2, 0xa5, 0x61, 0xff, 0x3f, 0xdb, 0xf0, 0xbd, 0x17, 0xd9, 0x3f, 0xd4, 0xbf,
-	0x56, 0xde, 0x25, 0xa1, 0xbe, 0xbd, 0x6c, 0x88, 0xb7, 0xce, 0x46, 0x65, 0x62, 0xba, 0x24, 0xbd,
-	0x81, 0x3f, 0x82, 0x6d, 0x9f, 0x31, 0x1a, 0xb4, 0xcd, 0x8a, 0x56, 0xde, 0xf8, 0xca, 0xc8, 0x9a,
-	0xf7, 0x35, 0x9e, 0xc4, 0xe7, 0x52, 0x0d, 0xb6, 0x79, 0xf5, 0x5c, 0x1a, 0xec, 0x58, 0x83, 0xbd,
-	0xf7, 0x07, 0x04, 0xdb, 0x91, 0xd2, 0xcc, 0x7b, 0x92, 0xb1, 0xf6, 0x3d, 0xe9, 0xbe, 0x7a, 0xe5,
-	0x67, 0x34, 0x88, 0xb3, 0xdf, 0xd9, 0xd4, 0xe3, 0xe8, 0x9f, 0xfe, 0x43, 0x22, 0x0d, 0x7b, 0x77,
-	0xd4, 0x45, 0x20, 0x11, 0x66, 0x8c, 0x97, 0x12, 0xe3, 0xfa, 0x4e, 0x16, 0x1b, 0x57, 0xeb, 0xbd,
-	0x3f, 0x26, 0xbe, 0xda, 0xa7, 0xe0, 0x26, 0xec, 0x8c, 0x78, 0xc8, 0x92, 0x4b, 0x62, 0x89, 0x24,
-	0xdb, 0x8b, 0x7a, 0x6c, 0xff, 0x2f, 0x3c, 0x4e, 0xfa, 0xef, 0xcb, 0xd5, 0xfe, 0xeb, 0x7e, 0xdb,
-	0x7f, 0x97, 0xa8, 0xff, 0xba, 0x5f, 0xbb, 0xff, 0xba, 0xdf, 0x70, 0xff, 0x75, 0xbf, 0x56, 0xff,
-	0x19, 0x6b, 0xfb, 0xef, 0xb3, 0xff, 0x5b, 0xff, 0x75, 0x37, 0xea, 0x3f, 0xfb, 0xa5, 0xfd, 0x77,
-	0x3d, 0xfb, 0xe1, 0xc0, 0x88, 0x3f, 0x12, 0x24, 0x1d, 0xf8, 0x57, 0x04, 0x95, 0x8c, 0xbd, 0x83,
-	0x8f, 0x2f, 0x76, 0x1d, 0x7a, 0xe5, 0xd7, 0x92, 0x24, 0x9e, 0x7f, 0xa0, 0x95, 0xf7, 0xa9, 0x83,
-	0x8f, 0xdb, 0x3f, 0xf5, 0xe5, 0xe4, 0xee, 0x5c, 0x06, 0x4e, 0x8f, 0x2d, 0xbe, 0xd1, 0xd8, 0x6e,
-	0x2d, 0x63, 0xcb, 0xe0, 0x7a, 0x6c, 0x91, 0x7a, 0x74, 0xee, 0xe8, 0x1e, 0x41, 0x39, 0x7b, 0x1e,
-	0x37, 0x54, 0x00, 0x68, 0x3d, 0x7d, 0xc9, 0x04, 0x70, 0x54, 0xe0, 0xd1, 0x64, 0x34, 0xd4, 0x04,
-	0x2c, 0x47, 0x13, 0x50, 0xef, 0x46, 0xd6, 0x5f, 0x10, 0x54, 0x95, 0xc1, 0x4f, 0x8e, 0x5d, 0x47,
-	0x52, 0xf7, 0xd1, 0x9c, 0x38, 0x27, 0xf8, 0x26, 0xc0, 0x90, 0xbb, 0x8b, 0xc1, 0x70, 0x21, 0xa9,
-	0xd0, 0x36, 0xca, 0xa4, 0xa4, 0x24, 0x7d, 0x25, 0xc0, 0xb7, 0xe1, 0xaa, 0x13, 0xca, 0xc9, 0xc0,
-	0x67, 0x63, 0x1e, 0x63, 0x72, 0x1a, 0x73, 0x45, 0x89, 0xef, 0xb3, 0x31, 0x8f, 0x70, 0x35, 0x00,
-	0xe1, 0x7b, 0xcc, 0x91, 0x61, 0x40, 0x85, 0x69, 0xd4, 0x8d, 0x46, 0x99, 0x64, 0x24, 0xb8, 0x06,
-	0xbb, 0xe9, 0xdd, 0x65, 0xf0, 0xbe, 0xfe, 0x62, 0x50, 0x26, 0xa5, 0xe4, 0xf6, 0xf2, 0x3e, 0xfe,
-	0x3e, 0x54, 0x96, 0xcf, 0xdb, 0x77, 0xec, 0xae, 0xf9, 0x8b, 0xa2, 0xc6, 0x94, 0x13, 0x8c, 0x12,
-	0x5a, 0x7f, 0x36, 0xe0, 0xb5, 0x95, 0x10, 0xfa, 0xdc, 0x5d, 0xe0, 0x3b, 0x50, 0x9c, 0x51, 0x21,
-	0x1c, 0x4f, 0x47, 0x60, 0xac, 0x2d, 0xb2, 0x14, 0x85, 0x1b, 0x50, 0x15, 0xbe, 0x37, 0x18, 0x4e,
-	0xf9, 0xe8, 0x68, 0x30, 0xa1, 0xbe, 0x37, 0x91, 0x3a, 0xae, 0x3c, 0xa9, 0x08, 0xdf, 0xeb, 0x2b,
-	0xf1, 0x3d, 0x2d, 0x55, 0x73, 0x60, 0x46, 0x67, 0x3c, 0xf9, 0x98, 0xa4, 0xd6, 0xca, 0x59, 0xe9,
-	0xcf, 0x28, 0x0f, 0x65, 0x72, 0x36, 0xe2, 0xf8, 0x4a, 0x2c, 0x8d, 0x8f, 0xde, 0x82, 0x8a, 0xe0,
-	0x33, 0x3a, 0x58, 0x5e, 0xda, 0x0a, 0xda, 0x44, 0x59, 0x49, 0x0f, 0xe3, 0xb0, 0xf0, 0x3d, 0x78,
-	0x6b, 0x15, 0x35, 0x38, 0x63, 0x84, 0xff, 0x3e, 0x1a, 0xe1, 0x6f, 0x64, 0x4f, 0x1e, 0xbe, 0x38,
-	0xce, 0xfb, 0xf0, 0x1a, 0x9d, 0x4b, 0xca, 0x54, 0x35, 0x0d, 0xb8, 0xfe, 0xf0, 0x2c, 0xcc, 0x2f,
-	0x77, 0x5e, 0x42, 0x48, 0x35, 0xc5, 0x3f, 0x8c, 0xe0, 0xf8, 0x31, 0xd4, 0x56, 0xcc, 0x9f, 0xa1,
-	0xf0, 0xea, 0x4b, 0x14, 0xde, 0xc8, 0xfc, 0xc6, 0xdc, 0x7d, 0x41, 0xb7, 0xf5, 0x27, 0x04, 0xd7,
-	0x32, 0xc9, 0xeb, 0xc5, 0x05, 0x84, 0x3f, 0x80, 0xb2, 0xaa, 0x14, 0x1a, 0xe8, 0x2a, 0x4b, 0x52,
-	0xf8, 0x9d, 0xe6, 0x74, 0x38, 0x6b, 0xca, 0x79, 0xf3, 0x49, 0xbb, 0xf9, 0x13, 0xfd, 0x58, 0x81,
-	0xc9, 0xae, 0x48, 0xd7, 0x02, 0xd7, 0x97, 0x5f, 0xe5, 0x76, 0xed, 0x4a, 0xe6, 0xc0, 0x01, 0xa5,
-	0xd1, 0x57, 0xba, 0x95, 0xba, 0xeb, 0xe8, 0x2c, 0x66, 0xea, 0xae, 0xb3, 0x69, 0xdd, 0xbd, 0x1d,
-	0x95, 0x1d, 0xa1, 0xc7, 0x54, 0xb9, 0xfe, 0x89, 0xcf, 0xa4, 0xd0, 0xbf, 0x4f, 0xe1, 0x2c, 0xf2,
-	0x37, 0x4f, 0xf4, 0xba, 0xbf, 0xff, 0xf9, 0xb3, 0x1a, 0x7a, 0xfa, 0xac, 0x86, 0xfe, 0xf9, 0xac,
-	0x86, 0x7e, 0xf3, 0xbc, 0xb6, 0xf5, 0xf4, 0x79, 0x6d, 0xeb, 0xef, 0xcf, 0x6b, 0x5b, 0x8f, 0xdf,
-	0xf1, 0x7c, 0x39, 0x09, 0x87, 0xcd, 0x11, 0x9f, 0xb5, 0xa6, 0x3e, 0xa3, 0xad, 0xe9, 0x70, 0xf6,
-	0x9e, 0x70, 0x8f, 0x5a, 0x6a, 0x18, 0x84, 0xd2, 0x9f, 0xb6, 0x92, 0xa9, 0x30, 0xdc, 0xd6, 0x9c,
-	0x76, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xe4, 0xdc, 0xff, 0x25, 0xf3, 0x18, 0x00, 0x00,
+	0x15, 0xd7, 0x70, 0x49, 0x89, 0x7c, 0xa2, 0x29, 0x66, 0xac, 0xb6, 0x1b, 0x3a, 0x66, 0x98, 0x85,
+	0xea, 0x30, 0x41, 0x43, 0x9a, 0x4b, 0x06, 0x08, 0x72, 0x0a, 0xa9, 0x58, 0x95, 0x00, 0x55, 0x2e,
+	0xa6, 0x4e, 0x5a, 0xf8, 0x42, 0x2c, 0xb9, 0x43, 0x72, 0x21, 0x72, 0x46, 0xdd, 0x9d, 0x95, 0xc8,
+	0x5b, 0xd1, 0x1e, 0x7a, 0xcd, 0xa5, 0x28, 0xd0, 0xff, 0xa0, 0xa7, 0x22, 0xb7, 0x1e, 0x7b, 0xcc,
+	0xa5, 0x80, 0x2f, 0x05, 0x0a, 0x14, 0x08, 0x0a, 0xfb, 0xda, 0xff, 0xa0, 0x28, 0x52, 0xcc, 0xec,
+	0x07, 0x97, 0x92, 0xa8, 0x50, 0x72, 0x6b, 0x43, 0x40, 0x2e, 0xd2, 0xcc, 0xdb, 0xdf, 0xbc, 0x8f,
+	0xdf, 0xfb, 0xe0, 0xce, 0xc2, 0x5d, 0x9f, 0x1d, 0x33, 0xce, 0xce, 0xd8, 0x89, 0xcb, 0x05, 0xaf,
+	0xa9, 0xbf, 0x38, 0x2b, 0xa8, 0x27, 0x6c, 0x4b, 0x58, 0xa5, 0xed, 0x21, 0x1f, 0x72, 0x25, 0xac,
+	0xcb, 0x55, 0xf0, 0xbc, 0xf4, 0xe6, 0x90, 0xf3, 0xe1, 0x98, 0xd6, 0xd5, 0xae, 0xe7, 0x0f, 0xea,
+	0x16, 0x9b, 0x85, 0x8f, 0xf0, 0xb8, 0x37, 0xa9, 0x8b, 0x69, 0xfd, 0xb4, 0x51, 0x17, 0xd3, 0x40,
+	0x66, 0x08, 0xc8, 0xed, 0xfa, 0x9e, 0xe0, 0x13, 0xea, 0x36, 0x70, 0x01, 0x52, 0x8e, 0xad, 0xa3,
+	0x0a, 0xaa, 0x66, 0x48, 0xca, 0xb1, 0x31, 0x86, 0x34, 0xb3, 0x26, 0x54, 0x4f, 0x55, 0x50, 0x35,
+	0x47, 0xd4, 0x1a, 0xbf, 0x07, 0x45, 0xcf, 0xef, 0x79, 0x7d, 0xd7, 0x39, 0x11, 0x0e, 0x67, 0xdd,
+	0x01, 0xa5, 0xba, 0x56, 0x41, 0xd5, 0x14, 0xd9, 0x4a, 0xca, 0xf7, 0x28, 0xc5, 0x3a, 0x6c, 0x9c,
+	0x58, 0xb3, 0x09, 0x65, 0x42, 0xdf, 0x50, 0x1a, 0xa2, 0xad, 0xf1, 0x65, 0x6a, 0x6e, 0xd6, 0xbc,
+	0x60, 0xb6, 0x04, 0x59, 0x87, 0xd9, 0xbe, 0x27, 0xdc, 0x99, 0x32, 0x9d, 0x21, 0xf1, 0x3e, 0x76,
+	0x49, 0x4b, 0xb8, 0xb4, 0x0d, 0x99, 0x01, 0x3d, 0xa3, 0xae, 0x9e, 0x56, 0x7e, 0x04, 0x1b, 0x7c,
+	0x0f, 0xb2, 0x2e, 0xf5, 0xa8, 0x7b, 0x4a, 0x6d, 0xfd, 0xf7, 0xd9, 0x0a, 0xaa, 0x6a, 0x24, 0x16,
+	0xe0, 0x1f, 0x41, 0xba, 0xef, 0x88, 0x99, 0xbe, 0x5e, 0x41, 0xd5, 0x82, 0xa9, 0xd7, 0x22, 0x52,
+	0x6b, 0xb1, 0x57, 0xb5, 0x5d, 0x47, 0xcc, 0x88, 0x42, 0xe1, 0x8f, 0xe1, 0xce, 0xc4, 0xf1, 0xfa,
+	0x74, 0x3c, 0xb6, 0x18, 0xe5, 0xbe, 0xa7, 0x43, 0x05, 0x55, 0x37, 0xcd, 0xed, 0x5a, 0xc0, 0x75,
+	0x2d, 0xe2, 0xba, 0xd6, 0x66, 0x33, 0xb2, 0x08, 0x35, 0x7e, 0x0c, 0x69, 0xa9, 0x09, 0x67, 0x21,
+	0x7d, 0x68, 0x71, 0xaf, 0xb8, 0x86, 0x0b, 0x00, 0x87, 0xdc, 0x6b, 0xb3, 0x21, 0x1d, 0x53, 0xaf,
+	0x88, 0x70, 0x1e, 0xb2, 0x3f, 0xb5, 0xc6, 0xbc, 0x3d, 0x16, 0xbc, 0x98, 0xc2, 0x00, 0xeb, 0x3f,
+	0xe1, 0x5e, 0x9f, 0x9f, 0x15, 0x35, 0xbc, 0x09, 0x1b, 0x47, 0x96, 0xe3, 0xf2, 0x9e, 0x53, 0x4c,
+	0x1b, 0x35, 0xc8, 0x1e, 0x51, 0x4f, 0x50, 0xbb, 0xd5, 0x5e, 0x25, 0x51, 0xc6, 0xdf, 0x50, 0x74,
+	0xa0, 0xb9, 0xd2, 0x01, 0x6c, 0x40, 0xca, 0x6a, 0xe9, 0xe9, 0x8a, 0x56, 0xdd, 0x34, 0xf1, 0x9c,
+	0x91, 0xc8, 0x28, 0x49, 0x59, 0x2d, 0xdc, 0x84, 0x8c, 0xc3, 0x6c, 0x3a, 0xd5, 0x33, 0x0a, 0x76,
+	0xff, 0x3c, 0xac, 0xd9, 0xae, 0x1d, 0xc8, 0xe7, 0x8f, 0x98, 0x70, 0x67, 0x24, 0xc0, 0x96, 0x0e,
+	0x01, 0xe6, 0x42, 0x5c, 0x04, 0xed, 0x98, 0xce, 0x94, 0x2f, 0x1a, 0x91, 0x4b, 0x5c, 0x85, 0xcc,
+	0xa9, 0x35, 0xf6, 0x03, 0x6f, 0x2e, 0xb7, 0x1d, 0x00, 0x3e, 0x4e, 0x7d, 0x84, 0x8c, 0xa7, 0x51,
+	0x58, 0xe6, 0x6a, 0x61, 0xbd, 0x0f, 0xeb, 0x4c, 0xe1, 0x55, 0xcd, 0x5c, 0xa2, 0xbe, 0xd9, 0x26,
+	0x21, 0xc2, 0xd8, 0x8b, 0x74, 0x37, 0x2e, 0xea, 0x9e, 0xeb, 0x59, 0xe2, 0xa6, 0x39, 0xd7, 0xf3,
+	0x49, 0x9c, 0xab, 0xce, 0x05, 0x3d, 0x45, 0xd0, 0xac, 0x21, 0x0d, 0x0b, 0x5b, 0x2e, 0x2f, 0xab,
+	0x69, 0xc3, 0x8e, 0x93, 0x77, 0x43, 0x0d, 0x32, 0x9d, 0xbd, 0xe5, 0xe9, 0xec, 0x90, 0x54, 0xaf,
+	0x65, 0xb0, 0x98, 0xcb, 0x4b, 0xad, 0xc8, 0xde, 0x96, 0x56, 0x10, 0x91, 0xcb, 0x15, 0x98, 0xec,
+	0x44, 0x0c, 0xc8, 0x9e, 0x74, 0xb9, 0x2f, 0xa8, 0xea, 0xc9, 0x1c, 0x09, 0x36, 0xc6, 0x2f, 0x62,
+	0x7e, 0x3b, 0x37, 0xe0, 0x77, 0xae, 0x3d, 0x64, 0x40, 0x8b, 0x19, 0x30, 0x7e, 0x9d, 0x98, 0x28,
+	0xcd, 0x95, 0xea, 0xa2, 0x00, 0x29, 0x6f, 0x10, 0x8e, 0xae, 0x94, 0x37, 0xc0, 0x6f, 0x41, 0xce,
+	0xf3, 0xdd, 0xfe, 0xc8, 0x72, 0x87, 0x34, 0x9c, 0x24, 0x73, 0x01, 0xae, 0xc0, 0xa6, 0x4d, 0x3d,
+	0xe1, 0x30, 0x4b, 0x4e, 0x37, 0x3d, 0xa3, 0x14, 0x25, 0x45, 0xf8, 0x01, 0x14, 0xfa, 0x2e, 0xb5,
+	0x1d, 0xd1, 0xed, 0x5b, 0xae, 0xdd, 0x65, 0x3c, 0x18, 0x7a, 0xfb, 0x6b, 0x24, 0x1f, 0xc8, 0x77,
+	0x2d, 0xd7, 0x3e, 0xe2, 0xf8, 0x3e, 0xe4, 0xfa, 0x23, 0xfa, 0x4b, 0x9f, 0x4a, 0x48, 0x36, 0x84,
+	0x64, 0x03, 0xd1, 0x11, 0xc7, 0x75, 0xc8, 0x72, 0xd7, 0x19, 0x3a, 0xcc, 0x1a, 0xeb, 0x39, 0x45,
+	0xc4, 0xdd, 0x8b, 0xd3, 0xa9, 0x41, 0x62, 0x50, 0x27, 0x17, 0x4f, 0x59, 0xe3, 0x5f, 0x29, 0xc8,
+	0x3f, 0xa1, 0x9e, 0xf8, 0x9c, 0xba, 0x9e, 0xc3, 0x59, 0x03, 0xe7, 0x01, 0x4d, 0xc3, 0x4e, 0x43,
+	0x53, 0xbc, 0x03, 0xc8, 0x0a, 0xc9, 0xfd, 0xfe, 0x5c, 0x67, 0xf2, 0x00, 0x41, 0x96, 0x44, 0xf5,
+	0xc2, 0x04, 0x2f, 0x45, 0xf5, 0x24, 0xaa, 0x1f, 0x16, 0xd7, 0x52, 0x54, 0x1f, 0xbf, 0x0f, 0xc8,
+	0x0e, 0x47, 0xc5, 0x12, 0x54, 0x27, 0xfd, 0xd5, 0xd7, 0x6f, 0xaf, 0x11, 0x64, 0xe3, 0x02, 0x20,
+	0xaa, 0xe6, 0x71, 0x66, 0x7f, 0x8d, 0x20, 0x8a, 0x1f, 0x00, 0x1a, 0x28, 0x0a, 0x97, 0x9e, 0x95,
+	0xb8, 0x01, 0x36, 0x00, 0x0d, 0x15, 0x8f, 0xcb, 0x06, 0x32, 0x1a, 0x4a, 0x6f, 0x47, 0x7a, 0xee,
+	0x6a, 0x6f, 0x47, 0xf8, 0x5d, 0x40, 0xc7, 0x7a, 0x7e, 0x29, 0xe7, 0x9d, 0xf4, 0xb3, 0xaf, 0xdf,
+	0x46, 0x04, 0x1d, 0x77, 0x32, 0xa0, 0x79, 0xfe, 0xc4, 0xf8, 0x8d, 0xb6, 0x40, 0xb7, 0x79, 0x5d,
+	0xba, 0xcd, 0x95, 0xe8, 0x36, 0x57, 0xa2, 0xdb, 0x94, 0x74, 0xef, 0x7c, 0x1b, 0xdd, 0xe6, 0x8d,
+	0x88, 0x36, 0x5f, 0x17, 0xd1, 0xf8, 0x1e, 0xe4, 0x18, 0x3d, 0xeb, 0x0e, 0x1c, 0x3a, 0xb6, 0xf5,
+	0x37, 0x2b, 0xa8, 0x9a, 0x26, 0x59, 0x46, 0xcf, 0xf6, 0xe4, 0x3e, 0xca, 0xc2, 0xef, 0x16, 0xb3,
+	0xd0, 0xbc, 0x6e, 0x16, 0x9a, 0x2b, 0x65, 0xa1, 0xb9, 0x52, 0x16, 0x9a, 0x2b, 0x65, 0xa1, 0x79,
+	0xa3, 0x2c, 0x34, 0x5f, 0x5b, 0x16, 0x3e, 0x00, 0xcc, 0x38, 0xeb, 0xf6, 0x5d, 0x47, 0x38, 0x7d,
+	0x6b, 0x1c, 0xa6, 0xe3, 0xb7, 0x6a, 0x76, 0x91, 0x22, 0xe3, 0x6c, 0x37, 0x7c, 0xb2, 0x90, 0x97,
+	0x7f, 0xa7, 0xa0, 0x94, 0x74, 0xff, 0x90, 0x33, 0xfa, 0x98, 0xd1, 0xc7, 0x83, 0xcf, 0xe5, 0x4f,
+	0xf9, 0x2d, 0xcd, 0xd2, 0xad, 0x61, 0xff, 0x3f, 0xeb, 0xf0, 0x83, 0xf3, 0xec, 0x1f, 0xa9, 0x5f,
+	0xab, 0xe1, 0x2d, 0xa1, 0xbe, 0x31, 0x6f, 0x88, 0x77, 0x2e, 0x47, 0x25, 0x62, 0xba, 0x25, 0xbd,
+	0x81, 0x3f, 0x81, 0x75, 0x87, 0x31, 0xea, 0x36, 0xf4, 0x82, 0x52, 0x5e, 0xfd, 0xd6, 0xc8, 0x6a,
+	0x07, 0x0a, 0x4f, 0xc2, 0x73, 0xb1, 0x06, 0x53, 0xdf, 0xba, 0x96, 0x06, 0x33, 0xd4, 0x60, 0x96,
+	0xfe, 0x88, 0x60, 0x3d, 0x50, 0x9a, 0x78, 0x4f, 0xd2, 0x96, 0xbe, 0x27, 0x1d, 0xc8, 0x57, 0x7e,
+	0x46, 0xdd, 0x30, 0xfb, 0xcd, 0x55, 0x3d, 0x0e, 0xfe, 0xa9, 0x3f, 0x24, 0xd0, 0x50, 0x7a, 0x28,
+	0x2f, 0x02, 0x91, 0x30, 0x61, 0x3c, 0x17, 0x19, 0x57, 0x77, 0xb2, 0xd0, 0xb8, 0x5c, 0x97, 0xfe,
+	0x14, 0xf9, 0x6a, 0x5e, 0x80, 0xeb, 0xb0, 0xd1, 0xe7, 0x3e, 0x8b, 0x2e, 0x89, 0x39, 0x12, 0x6d,
+	0x6f, 0xea, 0xb1, 0xf9, 0xbf, 0xf0, 0x38, 0xea, 0xbf, 0x6f, 0x16, 0xfb, 0xaf, 0xf5, 0x5d, 0xff,
+	0xdd, 0xa2, 0xfe, 0x6b, 0xbd, 0x74, 0xff, 0xb5, 0x5e, 0x71, 0xff, 0xb5, 0x5e, 0xaa, 0xff, 0xb4,
+	0xa5, 0xfd, 0xf7, 0xe5, 0xff, 0xad, 0xff, 0x5a, 0x2b, 0xf5, 0x9f, 0x79, 0x65, 0xff, 0x6d, 0x27,
+	0x3f, 0x1c, 0x68, 0xe1, 0x47, 0x82, 0xa8, 0x03, 0xff, 0x8a, 0xa0, 0x90, 0xb0, 0xb7, 0xf7, 0xe9,
+	0xcd, 0xae, 0x43, 0xaf, 0xfd, 0x5a, 0x12, 0xc5, 0xf3, 0x0f, 0xb4, 0xf0, 0x3e, 0xb5, 0xf7, 0x69,
+	0xe3, 0xe7, 0x8e, 0x18, 0x3d, 0x9a, 0x0a, 0xd7, 0x6a, 0xb3, 0xd9, 0x2b, 0x8d, 0x6d, 0x67, 0x1e,
+	0x5b, 0x02, 0xd7, 0x66, 0xb3, 0xd8, 0xa3, 0x6b, 0x47, 0xf7, 0x04, 0xf2, 0xc9, 0xf3, 0xb8, 0x2a,
+	0x03, 0x40, 0xcb, 0xe9, 0x8b, 0x26, 0x80, 0x25, 0x03, 0x0f, 0x26, 0xa3, 0x26, 0x27, 0x60, 0x3e,
+	0x98, 0x80, 0x6a, 0xd7, 0x37, 0xfe, 0x82, 0xa0, 0x28, 0x0d, 0x7e, 0x76, 0x62, 0x5b, 0x82, 0xda,
+	0x4f, 0xa6, 0xc4, 0x3a, 0xc3, 0xf7, 0x01, 0x7a, 0xdc, 0x9e, 0x75, 0x7b, 0x33, 0x41, 0x3d, 0x65,
+	0x23, 0x4f, 0x72, 0x52, 0xd2, 0x91, 0x02, 0xfc, 0x00, 0xb6, 0x2c, 0x5f, 0x8c, 0xba, 0x0e, 0x1b,
+	0xf0, 0x10, 0x93, 0x52, 0x98, 0x3b, 0x52, 0x7c, 0xc0, 0x06, 0x3c, 0xc0, 0x95, 0x01, 0x3c, 0x67,
+	0xc8, 0x2c, 0xe1, 0xbb, 0xd4, 0xd3, 0xb5, 0x8a, 0x56, 0xcd, 0x93, 0x84, 0x04, 0x97, 0x61, 0x33,
+	0xbe, 0xbb, 0x74, 0x3f, 0x54, 0x5f, 0x0c, 0xf2, 0x24, 0x17, 0xdd, 0x5e, 0x3e, 0xc4, 0x3f, 0x84,
+	0xc2, 0xfc, 0x79, 0xe3, 0xa1, 0xd9, 0xd2, 0x7f, 0x95, 0x55, 0x98, 0x7c, 0x84, 0x91, 0x42, 0xe3,
+	0x0b, 0x0d, 0xde, 0x58, 0x08, 0xa1, 0xc3, 0xed, 0x19, 0x7e, 0x08, 0xd9, 0x09, 0xf5, 0x3c, 0x6b,
+	0xa8, 0x22, 0xd0, 0x96, 0x16, 0x59, 0x8c, 0x92, 0xdd, 0x3d, 0xa1, 0x13, 0x1e, 0x75, 0xb7, 0x5c,
+	0x4b, 0x17, 0x84, 0x33, 0xa1, 0xdc, 0x17, 0xdd, 0x11, 0x75, 0x86, 0x23, 0x11, 0xf2, 0x78, 0x27,
+	0x94, 0xee, 0x2b, 0x21, 0xde, 0x81, 0x82, 0xc7, 0x27, 0xb4, 0x3b, 0xbf, 0x8a, 0xa5, 0xd5, 0x55,
+	0x2c, 0x2f, 0xa5, 0x47, 0xa1, 0xb3, 0x78, 0x1f, 0xde, 0x59, 0x44, 0x75, 0x2f, 0x19, 0xcc, 0x7f,
+	0x08, 0x06, 0xf3, 0x5b, 0xc9, 0x93, 0x47, 0xe7, 0x87, 0x74, 0x07, 0xde, 0xa0, 0x53, 0x41, 0x99,
+	0xac, 0x91, 0x2e, 0x57, 0x9f, 0x93, 0x3d, 0xfd, 0x9b, 0x8d, 0x2b, 0xc2, 0x2c, 0xc6, 0xf8, 0xc7,
+	0x01, 0x1c, 0x3f, 0x85, 0xf2, 0x82, 0xf9, 0x4b, 0x14, 0x6e, 0x5d, 0xa1, 0xf0, 0x5e, 0xe2, 0x97,
+	0xe3, 0xd1, 0x39, 0xdd, 0xc6, 0x9f, 0x11, 0xdc, 0x4d, 0xa4, 0xa4, 0x1d, 0x96, 0x05, 0xfe, 0x08,
+	0xf2, 0x32, 0xff, 0xd4, 0x55, 0xb5, 0x13, 0x25, 0xe6, 0x7b, 0xb5, 0x71, 0x6f, 0x52, 0x13, 0xd3,
+	0xda, 0x69, 0xa3, 0xf6, 0x33, 0xf5, 0x58, 0x82, 0xc9, 0xa6, 0x17, 0xaf, 0x3d, 0x5c, 0x99, 0x7f,
+	0x6b, 0xdb, 0x34, 0x0b, 0x89, 0x03, 0x7b, 0x94, 0x06, 0xdf, 0xde, 0x16, 0xaa, 0xa9, 0xa9, 0xf2,
+	0x94, 0xa8, 0xa6, 0xe6, 0xaa, 0xd5, 0xf4, 0x6e, 0x50, 0x4c, 0x84, 0x9e, 0x50, 0xe9, 0xfa, 0x67,
+	0x0e, 0x13, 0xaa, 0x34, 0x98, 0x3f, 0x09, 0xfc, 0x4d, 0x13, 0xb5, 0xee, 0xec, 0x7e, 0xf5, 0xbc,
+	0x8c, 0x9e, 0x3d, 0x2f, 0xa3, 0x7f, 0x3e, 0x2f, 0xa3, 0x2f, 0x5e, 0x94, 0xd7, 0x9e, 0xbd, 0x28,
+	0xaf, 0xfd, 0xfd, 0x45, 0x79, 0xed, 0xe9, 0x7b, 0x43, 0x47, 0x8c, 0xfc, 0x5e, 0xad, 0xcf, 0x27,
+	0xf5, 0xb1, 0xc3, 0x68, 0x7d, 0xdc, 0x9b, 0x7c, 0xe0, 0xd9, 0xc7, 0x75, 0xd9, 0xe2, 0xbe, 0x70,
+	0xc6, 0xf5, 0xa8, 0xd7, 0x7b, 0xeb, 0x8a, 0xd3, 0xe6, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xc7,
+	0x8b, 0xa3, 0xa7, 0xc9, 0x18, 0x00, 0x00,
 }
 
 func (m *Customer1) Marshal() (dAtA []byte, err error) {
@@ -5261,24 +5252,19 @@ func (m *TestUpdatedTxBody) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	if m.SomeNewField != 0 {
 		i = encodeVarintUnknonwnproto(dAtA, i, uint64(m.SomeNewField))
 		i--
-		dAtA[i] = 0x28
+		dAtA[i] = 0x20
 	}
 	if m.TimeoutHeight != 0 {
 		i = encodeVarintUnknonwnproto(dAtA, i, uint64(m.TimeoutHeight))
 		i--
-		dAtA[i] = 0x20
+		dAtA[i] = 0x18
 	}
 	if len(m.Memo) > 0 {
 		i -= len(m.Memo)
 		copy(dAtA[i:], m.Memo)
 		i = encodeVarintUnknonwnproto(dAtA, i, uint64(len(m.Memo)))
 		i--
-		dAtA[i] = 0x1a
-	}
-	if m.SigBlockHeight != 0 {
-		i = encodeVarintUnknonwnproto(dAtA, i, uint64(m.SigBlockHeight))
-		i--
-		dAtA[i] = 0x10
+		dAtA[i] = 0x12
 	}
 	if len(m.Messages) > 0 {
 		for iNdEx := len(m.Messages) - 1; iNdEx >= 0; iNdEx-- {
@@ -6430,9 +6416,6 @@ func (m *TestUpdatedTxBody) Size() (n int) {
 			n += 1 + l + sovUnknonwnproto(uint64(l))
 		}
 	}
-	if m.SigBlockHeight != 0 {
-		n += 1 + sovUnknonwnproto(uint64(m.SigBlockHeight))
-	}
 	l = len(m.Memo)
 	if l > 0 {
 		n += 1 + l + sovUnknonwnproto(uint64(l))
@@ -12560,25 +12543,6 @@ func (m *TestUpdatedTxBody) Unmarshal(dAtA []byte) error {
 			}
 			iNdEx = postIndex
 		case 2:
-			if wireType != 0 {
-				return fmt.Errorf("proto: wrong wireType = %d for field SigBlockHeight", wireType)
-			}
-			m.SigBlockHeight = 0
-			for shift := uint(0); ; shift += 7 {
-				if shift >= 64 {
-					return ErrIntOverflowUnknonwnproto
-				}
-				if iNdEx >= l {
-					return io.ErrUnexpectedEOF
-				}
-				b := dAtA[iNdEx]
-				iNdEx++
-				m.SigBlockHeight |= uint64(b&0x7F) << shift
-				if b < 0x80 {
-					break
-				}
-			}
-		case 3:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field Memo", wireType)
 			}
@@ -12610,7 +12574,7 @@ func (m *TestUpdatedTxBody) Unmarshal(dAtA []byte) error {
 			}
 			m.Memo = string(dAtA[iNdEx:postIndex])
 			iNdEx = postIndex
-		case 4:
+		case 3:
 			if wireType != 0 {
 				return fmt.Errorf("proto: wrong wireType = %d for field TimeoutHeight", wireType)
 			}
@@ -12629,7 +12593,7 @@ func (m *TestUpdatedTxBody) Unmarshal(dAtA []byte) error {
 					break
 				}
 			}
-		case 5:
+		case 4:
 			if wireType != 0 {
 				return fmt.Errorf("proto: wrong wireType = %d for field SomeNewField", wireType)
 			}
diff --git a/testutil/testdata/unknonwnproto.proto b/testutil/testdata/unknonwnproto.proto
index 37a453f945..c6c4e6d772 100644
--- a/testutil/testdata/unknonwnproto.proto
+++ b/testutil/testdata/unknonwnproto.proto
@@ -288,10 +288,9 @@ message TestUpdatedTxRaw {
 
 message TestUpdatedTxBody {
   repeated google.protobuf.Any messages                          = 1;
-  uint64                       sig_block_height                  = 2;
-  string                       memo                              = 3;
-  int64                        timeout_height                    = 4;
-  uint64                       some_new_field                    = 5;
+  string                       memo                              = 2;
+  int64                        timeout_height                    = 3;
+  uint64                       some_new_field                    = 4;
   string                       some_new_field_non_critical_field = 1050;
   repeated google.protobuf.Any extension_options                 = 1023;
   repeated google.protobuf.Any non_critical_extension_options    = 2047;
diff --git a/types/tx/tx.pb.go b/types/tx/tx.pb.go
index 93182aed0a..9d4bbfaa8e 100644
--- a/types/tx/tx.pb.go
+++ b/types/tx/tx.pb.go
@@ -245,14 +245,11 @@ type TxBody struct {
 	// is referred to as the primary signer and pays the fee for the whole
 	// transaction.
 	Messages []*types.Any `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"`
-	// sig block height is available between current block height and current block height - `VALID_SIG_BLOCK_PERIOD`
-	// this is used for distinguish signatures instead of account number. this is mandatory.
-	SigBlockHeight uint64 `protobuf:"varint,2,opt,name=sig_block_height,json=sigBlockHeight,proto3" json:"sig_block_height,omitempty"`
 	// memo is any arbitrary memo to be added to the transaction
-	Memo string `protobuf:"bytes,3,opt,name=memo,proto3" json:"memo,omitempty"`
+	Memo string `protobuf:"bytes,2,opt,name=memo,proto3" json:"memo,omitempty"`
 	// timeout is the block height after which this transaction will not
 	// be processed by the chain
-	TimeoutHeight uint64 `protobuf:"varint,4,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"`
+	TimeoutHeight uint64 `protobuf:"varint,3,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"`
 	// extension_options are arbitrary options that can be added by chains
 	// when the default options are not sufficient. If any of these are present
 	// and can't be handled, the transaction will be rejected
@@ -303,13 +300,6 @@ func (m *TxBody) GetMessages() []*types.Any {
 	return nil
 }
 
-func (m *TxBody) GetSigBlockHeight() uint64 {
-	if m != nil {
-		return m.SigBlockHeight
-	}
-	return 0
-}
-
 func (m *TxBody) GetMemo() string {
 	if m != nil {
 		return m.Memo
@@ -351,6 +341,9 @@ type AuthInfo struct {
 	// based on the cost of evaluating the body and doing signature verification
 	// of the signers. This can be estimated via simulation.
 	Fee *Fee `protobuf:"bytes,2,opt,name=fee,proto3" json:"fee,omitempty"`
+	// sig block height is available between current block height and current block height - `VALID_SIG_BLOCK_PERIOD`
+	// this is used for distinguish signatures instead of account number. this is mandatory.
+	SigBlockHeight uint64 `protobuf:"varint,3,opt,name=sig_block_height,json=sigBlockHeight,proto3" json:"sig_block_height,omitempty"`
 }
 
 func (m *AuthInfo) Reset()         { *m = AuthInfo{} }
@@ -400,6 +393,13 @@ func (m *AuthInfo) GetFee() *Fee {
 	return nil
 }
 
+func (m *AuthInfo) GetSigBlockHeight() uint64 {
+	if m != nil {
+		return m.SigBlockHeight
+	}
+	return 0
+}
+
 // SignerInfo describes the public key and signing mode of a single top-level
 // signer.
 type SignerInfo struct {
@@ -759,59 +759,60 @@ func init() {
 func init() { proto.RegisterFile("lbm/tx/v1/tx.proto", fileDescriptor_f80bf4f3a3e5da31) }
 
 var fileDescriptor_f80bf4f3a3e5da31 = []byte{
-	// 831 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0x23, 0x45,
-	0x10, 0xf6, 0xf8, 0x2f, 0x76, 0x25, 0x9b, 0xdd, 0x6d, 0x02, 0x72, 0x1c, 0xe1, 0x58, 0x46, 0x01,
-	0x4b, 0x88, 0x99, 0x4d, 0x96, 0x03, 0x70, 0x8b, 0x03, 0xab, 0xac, 0x60, 0x85, 0xd4, 0x89, 0x38,
-	0xec, 0x65, 0xd4, 0x33, 0x6e, 0xb7, 0x5b, 0x99, 0xe9, 0x36, 0xd3, 0x3d, 0xc1, 0x73, 0x40, 0xe2,
-	0x0d, 0xe0, 0x39, 0xf6, 0x09, 0xb8, 0x71, 0xdd, 0xe3, 0x1e, 0x39, 0x01, 0x4a, 0x1e, 0x04, 0xd4,
-	0x3d, 0x3d, 0x43, 0x84, 0x92, 0x70, 0xd9, 0x5b, 0x55, 0xf5, 0xf7, 0x55, 0x7d, 0xaa, 0xae, 0x2a,
-	0x40, 0x49, 0x94, 0x06, 0x7a, 0x1d, 0x5c, 0x1e, 0x06, 0x7a, 0xed, 0xaf, 0x32, 0xa9, 0x25, 0xea,
-	0x27, 0x51, 0xea, 0xeb, 0xb5, 0x7f, 0x79, 0x38, 0xdc, 0x61, 0x92, 0x49, 0x1b, 0x0d, 0x8c, 0x55,
-	0x02, 0x86, 0x07, 0x86, 0x14, 0x67, 0xc5, 0x4a, 0xcb, 0x20, 0xcd, 0x13, 0xcd, 0x15, 0x67, 0x26,
-	0x43, 0x65, 0x3b, 0xd8, 0x7b, 0x06, 0x16, 0x11, 0x45, 0xcd, 0x5b, 0x2c, 0xb9, 0x70, 0xf1, 0x7d,
-	0x57, 0x53, 0x71, 0x26, 0xb8, 0xb0, 0x4c, 0x67, 0x3a, 0xc0, 0x2e, 0x93, 0x92, 0x25, 0x34, 0xb0,
-	0x5e, 0x94, 0x2f, 0x02, 0x22, 0x8a, 0xf2, 0x69, 0xf2, 0x23, 0x34, 0xcf, 0xd7, 0xe8, 0x00, 0xda,
-	0x91, 0x9c, 0x17, 0x03, 0x6f, 0xec, 0x4d, 0x37, 0x8f, 0x1e, 0xfb, 0xb5, 0x60, 0xff, 0x7c, 0x3d,
-	0x93, 0xf3, 0x02, 0xdb, 0x67, 0xf4, 0x04, 0xfa, 0x24, 0xd7, 0xcb, 0x90, 0x8b, 0x85, 0x1c, 0x34,
-	0x2d, 0xf6, 0x9d, 0x1b, 0xd8, 0xe3, 0x5c, 0x2f, 0x9f, 0x8b, 0x85, 0xc4, 0x3d, 0xe2, 0x2c, 0x34,
-	0x02, 0x30, 0x52, 0x88, 0xce, 0x33, 0xaa, 0x06, 0xad, 0x71, 0x6b, 0xba, 0x85, 0x6f, 0x44, 0x26,
-	0x02, 0x3a, 0xe7, 0x6b, 0x4c, 0x7e, 0x40, 0xef, 0x03, 0x98, 0x12, 0x61, 0x54, 0x68, 0xaa, 0xac,
-	0x8e, 0x2d, 0xdc, 0x37, 0x91, 0x99, 0x09, 0xa0, 0x0f, 0xe1, 0x61, 0x5d, 0xd9, 0x61, 0x9a, 0x16,
-	0xf3, 0xa0, 0x2a, 0x55, 0xe2, 0xfe, 0xaf, 0xde, 0x05, 0x6c, 0x9c, 0x71, 0x26, 0xbe, 0x94, 0xf1,
-	0xdb, 0xaa, 0xb8, 0x0b, 0xbd, 0x78, 0x49, 0xb8, 0x08, 0xf9, 0x7c, 0xd0, 0x1a, 0x7b, 0xd3, 0x3e,
-	0xde, 0xb0, 0xfe, 0xf3, 0xf9, 0xe4, 0xb7, 0x26, 0x74, 0xcb, 0xfe, 0xa1, 0x27, 0xd0, 0x4b, 0xa9,
-	0x52, 0x84, 0xd9, 0x52, 0xad, 0xe9, 0xe6, 0xd1, 0x8e, 0x5f, 0x7e, 0x8a, 0x5f, 0x7d, 0x8a, 0x7f,
-	0x2c, 0x0a, 0x5c, 0xa3, 0xd0, 0x14, 0x1e, 0x29, 0xce, 0xc2, 0x28, 0x91, 0xf1, 0x45, 0xb8, 0xa4,
-	0x9c, 0x2d, 0xb5, 0x15, 0xd0, 0xc6, 0xdb, 0x8a, 0xb3, 0x99, 0x09, 0x9f, 0xda, 0x28, 0x42, 0xd0,
-	0x4e, 0x69, 0x2a, 0x5d, 0x75, 0x6b, 0xa3, 0x03, 0xd8, 0xd6, 0x3c, 0xa5, 0x32, 0xd7, 0x15, 0xb7,
-	0x6d, 0xb9, 0x0f, 0x5c, 0xd4, 0x51, 0x67, 0xf0, 0x98, 0xae, 0x35, 0x15, 0x8a, 0x4b, 0x11, 0xca,
-	0x95, 0xe6, 0x52, 0xa8, 0xc1, 0xdf, 0x1b, 0xf7, 0x08, 0x7c, 0x54, 0xe3, 0xbf, 0x2d, 0xe1, 0xe8,
-	0x25, 0x8c, 0x84, 0x14, 0x61, 0x9c, 0x71, 0xcd, 0x63, 0x92, 0x84, 0xb7, 0x24, 0x7c, 0x78, 0x4f,
-	0xc2, 0x3d, 0x21, 0xc5, 0x89, 0xe3, 0x7e, 0xf5, 0x9f, 0xdc, 0x93, 0x05, 0xf4, 0xaa, 0xa1, 0x42,
-	0x9f, 0xc1, 0x96, 0xf9, 0x48, 0x9a, 0xd9, 0x2f, 0xa9, 0xda, 0xf8, 0xee, 0x8d, 0xf9, 0x3b, 0xb3,
-	0xcf, 0x76, 0x02, 0x37, 0x55, 0x6d, 0x2b, 0x34, 0x86, 0xd6, 0x82, 0x52, 0x37, 0xb0, 0xdb, 0x37,
-	0x08, 0xcf, 0x28, 0xc5, 0xe6, 0x69, 0xf2, 0xb3, 0x07, 0xf0, 0x2f, 0x1b, 0x3d, 0x05, 0x58, 0xe5,
-	0x51, 0xc2, 0xe3, 0xf0, 0x82, 0x56, 0x4b, 0x71, 0xbb, 0xfa, 0x7e, 0x89, 0xfb, 0x9a, 0xda, 0xe5,
-	0x48, 0xe5, 0x9c, 0xde, 0xb5, 0x1c, 0x2f, 0xe4, 0x9c, 0x96, 0xcb, 0x91, 0x3a, 0x0b, 0x0d, 0xa1,
-	0xa7, 0xe8, 0xf7, 0x39, 0x15, 0x31, 0xb5, 0x9f, 0xd7, 0xc6, 0xb5, 0x3f, 0xf9, 0xb5, 0x09, 0xbd,
-	0x8a, 0x82, 0x3e, 0x85, 0xae, 0xe2, 0x82, 0x25, 0xd4, 0x69, 0x19, 0xde, 0x92, 0xd7, 0x3f, 0xb3,
-	0x88, 0xd3, 0x06, 0x76, 0x58, 0x74, 0x08, 0x1d, 0x7b, 0x40, 0x9c, 0x98, 0xdd, 0xdb, 0x48, 0x2f,
-	0x0c, 0xe0, 0xb4, 0x81, 0x4b, 0xe4, 0xf0, 0x73, 0xe8, 0x96, 0x69, 0x50, 0x00, 0x6d, 0xa3, 0xd3,
-	0x16, 0xdc, 0x3e, 0xda, 0xab, 0xb8, 0xd5, 0x5d, 0x71, 0xdd, 0x36, 0x79, 0xb0, 0x05, 0x0e, 0x7f,
-	0xf2, 0xa0, 0x63, 0xb3, 0xa1, 0x13, 0xe8, 0x45, 0x5c, 0x93, 0x2c, 0x23, 0x55, 0xef, 0x3e, 0xb2,
-	0xf4, 0xf2, 0xc0, 0xf9, 0xf5, 0x51, 0xbb, 0x3c, 0xf4, 0x4f, 0x64, 0xba, 0x22, 0xb1, 0x9e, 0x71,
-	0x7d, 0x6c, 0xe0, 0xb8, 0x26, 0xa2, 0x23, 0x80, 0xba, 0x9b, 0x66, 0xf3, 0x5a, 0x77, 0xb5, 0xb3,
-	0x5f, 0xb5, 0x53, 0xcd, 0x3a, 0xd0, 0x52, 0x79, 0x3a, 0x79, 0xe5, 0x41, 0xeb, 0x19, 0xa5, 0xe8,
-	0x3b, 0xe8, 0x92, 0x54, 0xe6, 0x42, 0xbb, 0x51, 0x29, 0xcf, 0x9a, 0xb9, 0x9f, 0x65, 0x69, 0x2e,
-	0x66, 0x1f, 0xbf, 0xfe, 0x63, 0xbf, 0xf1, 0xea, 0xcf, 0xfd, 0x0f, 0x18, 0xd7, 0xcb, 0x3c, 0xf2,
-	0x63, 0x99, 0x06, 0x09, 0x17, 0x34, 0x48, 0xa2, 0xf4, 0x13, 0x35, 0xbf, 0x08, 0x74, 0xb1, 0xa2,
-	0xca, 0x62, 0x15, 0x76, 0xd9, 0xd0, 0x1e, 0xf4, 0x19, 0x51, 0x61, 0xc2, 0x53, 0x5e, 0xad, 0x64,
-	0x8f, 0x11, 0xf5, 0x8d, 0xf1, 0xd1, 0x0e, 0x74, 0x56, 0xa4, 0xa0, 0x99, 0xdb, 0xc6, 0xd2, 0x41,
-	0x03, 0xd8, 0x60, 0x19, 0x11, 0x9a, 0x66, 0x76, 0x0f, 0xfb, 0xb8, 0x72, 0x67, 0x5f, 0xbc, 0xbe,
-	0x1a, 0x79, 0x6f, 0xae, 0x46, 0xde, 0x5f, 0x57, 0x23, 0xef, 0x97, 0xeb, 0x51, 0xe3, 0xcd, 0xf5,
-	0xa8, 0xf1, 0xfb, 0xf5, 0xa8, 0xf1, 0x72, 0x7c, 0xaf, 0xa6, 0x40, 0xaf, 0xa3, 0xae, 0x1d, 0xc5,
-	0xa7, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x17, 0xba, 0xa0, 0x41, 0x74, 0x06, 0x00, 0x00,
+	// 835 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0x1c, 0x45,
+	0x10, 0xde, 0xd9, 0x3f, 0xef, 0x96, 0x1d, 0x27, 0x69, 0x0c, 0x5a, 0xaf, 0xc5, 0x7a, 0xb5, 0xc8,
+	0xb0, 0x12, 0x62, 0x26, 0x76, 0x38, 0x00, 0x37, 0xaf, 0x21, 0x72, 0x04, 0x11, 0xd2, 0xd8, 0xe2,
+	0x90, 0xcb, 0xa8, 0x67, 0xb6, 0xdd, 0xdb, 0xf2, 0x4c, 0xf7, 0x32, 0xdd, 0x63, 0x76, 0x0e, 0x48,
+	0xbc, 0x01, 0xb9, 0xf0, 0x12, 0x79, 0x02, 0x1e, 0x21, 0xc7, 0x1c, 0x39, 0x01, 0xb2, 0x1f, 0x04,
+	0xd4, 0x3f, 0x33, 0x18, 0xb4, 0x31, 0x97, 0xdc, 0xaa, 0xaa, 0xbf, 0xaa, 0xaf, 0xe6, 0x9b, 0xaa,
+	0x02, 0x94, 0xc6, 0x59, 0xa0, 0x56, 0xc1, 0xd5, 0x61, 0xa0, 0x56, 0xfe, 0x32, 0x17, 0x4a, 0xa0,
+	0x7e, 0x1a, 0x67, 0xbe, 0x5a, 0xf9, 0x57, 0x87, 0xc3, 0x1d, 0x2a, 0xa8, 0x30, 0xd1, 0x40, 0x5b,
+	0x16, 0x30, 0x3c, 0xd0, 0x49, 0x49, 0x5e, 0x2e, 0x95, 0x08, 0xb2, 0x22, 0x55, 0x4c, 0x32, 0xaa,
+	0x2b, 0x54, 0xb6, 0x83, 0xbd, 0xa7, 0x61, 0x31, 0x96, 0x44, 0xbf, 0x25, 0x82, 0x71, 0x17, 0xdf,
+	0x77, 0x9c, 0x92, 0x51, 0xce, 0xb8, 0xc9, 0x74, 0xa6, 0x03, 0xec, 0x52, 0x21, 0x68, 0x4a, 0x02,
+	0xe3, 0xc5, 0xc5, 0x45, 0x80, 0x79, 0x69, 0x9f, 0x26, 0x3f, 0x42, 0xf3, 0x7c, 0x85, 0x0e, 0xa0,
+	0x1d, 0x8b, 0x79, 0x39, 0xf0, 0xc6, 0xde, 0x74, 0xf3, 0xe8, 0xa1, 0x5f, 0x37, 0xec, 0x9f, 0xaf,
+	0x66, 0x62, 0x5e, 0x86, 0xe6, 0x19, 0x3d, 0x82, 0x3e, 0x2e, 0xd4, 0x22, 0x62, 0xfc, 0x42, 0x0c,
+	0x9a, 0x06, 0xfb, 0xce, 0x2d, 0xec, 0x71, 0xa1, 0x16, 0x4f, 0xf9, 0x85, 0x08, 0x7b, 0xd8, 0x59,
+	0x68, 0x04, 0xa0, 0x5b, 0xc1, 0xaa, 0xc8, 0x89, 0x1c, 0xb4, 0xc6, 0xad, 0xe9, 0x56, 0x78, 0x2b,
+	0x32, 0xe1, 0xd0, 0x39, 0x5f, 0x85, 0xf8, 0x07, 0xf4, 0x3e, 0x80, 0xa6, 0x88, 0xe2, 0x52, 0x11,
+	0x69, 0xfa, 0xd8, 0x0a, 0xfb, 0x3a, 0x32, 0xd3, 0x01, 0xf4, 0x21, 0xdc, 0xaf, 0x99, 0x1d, 0xa6,
+	0x69, 0x30, 0xf7, 0x2a, 0x2a, 0x8b, 0xfb, 0x3f, 0xbe, 0x4b, 0xd8, 0x38, 0x63, 0x94, 0x7f, 0x29,
+	0x92, 0xb7, 0xc5, 0xb8, 0x0b, 0xbd, 0x64, 0x81, 0x19, 0x8f, 0xd8, 0x7c, 0xd0, 0x1a, 0x7b, 0xd3,
+	0x7e, 0xb8, 0x61, 0xfc, 0xa7, 0xf3, 0xc9, 0x2f, 0x4d, 0xe8, 0x5a, 0xfd, 0xd0, 0x23, 0xe8, 0x65,
+	0x44, 0x4a, 0x4c, 0x0d, 0x55, 0x6b, 0xba, 0x79, 0xb4, 0xe3, 0xdb, 0x9f, 0xe2, 0x57, 0x3f, 0xc5,
+	0x3f, 0xe6, 0x65, 0x58, 0xa3, 0x10, 0x82, 0x76, 0x46, 0x32, 0x2b, 0x73, 0x3f, 0x34, 0x36, 0x3a,
+	0x80, 0x6d, 0xc5, 0x32, 0x22, 0x0a, 0x15, 0x2d, 0x08, 0xa3, 0x0b, 0x65, 0x18, 0xdb, 0xe1, 0x3d,
+	0x17, 0x3d, 0x35, 0x41, 0x34, 0x83, 0x87, 0x64, 0xa5, 0x08, 0x97, 0x4c, 0xf0, 0x48, 0x2c, 0x15,
+	0x13, 0x5c, 0x0e, 0xfe, 0xda, 0xb8, 0x83, 0xf6, 0x41, 0x8d, 0xff, 0xd6, 0xc2, 0xd1, 0x73, 0x18,
+	0x71, 0xc1, 0xa3, 0x24, 0x67, 0x8a, 0x25, 0x38, 0x8d, 0xd6, 0x14, 0xbc, 0x7f, 0x47, 0xc1, 0x3d,
+	0x2e, 0xf8, 0x89, 0xcb, 0xfd, 0xea, 0x3f, 0xb5, 0x27, 0x2f, 0x3c, 0xe8, 0x55, 0xb3, 0x82, 0x3e,
+	0x83, 0x2d, 0xfd, 0x7f, 0x48, 0x6e, 0x94, 0xae, 0xd4, 0x79, 0xf7, 0xd6, 0x58, 0x9d, 0x99, 0x67,
+	0x33, 0x58, 0x9b, 0xb2, 0xb6, 0x25, 0x1a, 0x43, 0xeb, 0x82, 0x10, 0x37, 0x87, 0xdb, 0xb7, 0x12,
+	0x9e, 0x10, 0x12, 0xea, 0x27, 0x34, 0x85, 0x07, 0x92, 0xd1, 0x28, 0x4e, 0x45, 0x72, 0xf9, 0x6f,
+	0xc5, 0xb6, 0x25, 0xa3, 0x33, 0x1d, 0xb6, 0x92, 0x4d, 0x7e, 0xf6, 0x00, 0xfe, 0xe1, 0x41, 0x8f,
+	0x01, 0x96, 0x45, 0x9c, 0xb2, 0x24, 0xba, 0x24, 0xd5, 0x56, 0xac, 0xff, 0xd0, 0xbe, 0xc5, 0x7d,
+	0x4d, 0xcc, 0x76, 0x64, 0x62, 0x4e, 0xde, 0xb4, 0x1d, 0xcf, 0xc4, 0x9c, 0xd8, 0xed, 0xc8, 0x9c,
+	0x85, 0x86, 0xd0, 0x93, 0xe4, 0xfb, 0x82, 0xf0, 0x84, 0xb8, 0xbe, 0x6a, 0x7f, 0xf2, 0x6b, 0x13,
+	0x7a, 0x55, 0x0a, 0xfa, 0x14, 0xba, 0x92, 0x71, 0x9a, 0x12, 0xd7, 0xcb, 0x70, 0x4d, 0x5d, 0xff,
+	0xcc, 0x20, 0x4e, 0x1b, 0xa1, 0xc3, 0xa2, 0x43, 0xe8, 0x98, 0x0b, 0xe2, 0x9a, 0xd9, 0x5d, 0x97,
+	0xf4, 0x4c, 0x03, 0x4e, 0x1b, 0xa1, 0x45, 0x0e, 0x3f, 0x87, 0xae, 0x2d, 0x83, 0x02, 0x68, 0xeb,
+	0x3e, 0x0d, 0xe1, 0xf6, 0xd1, 0x5e, 0x95, 0x5b, 0x1d, 0x16, 0xf7, 0x5f, 0x74, 0x9d, 0xd0, 0x00,
+	0x87, 0x3f, 0x79, 0xd0, 0x31, 0xd5, 0xd0, 0x09, 0xf4, 0x62, 0xa6, 0x70, 0x9e, 0xe3, 0x4a, 0xbb,
+	0x8f, 0x4c, 0xba, 0xbd, 0x70, 0x7e, 0x7d, 0xd5, 0xae, 0x0e, 0xfd, 0x13, 0x91, 0x2d, 0x71, 0xa2,
+	0x66, 0x4c, 0x1d, 0x6b, 0x78, 0x58, 0x27, 0xa2, 0x23, 0x80, 0x5a, 0x4d, 0xbd, 0x7a, 0xad, 0x37,
+	0xc9, 0xd9, 0xaf, 0xe4, 0x94, 0xb3, 0x0e, 0xb4, 0x64, 0x91, 0x4d, 0x5e, 0x7a, 0xd0, 0x7a, 0x42,
+	0x08, 0xfa, 0x0e, 0xba, 0x38, 0x13, 0x05, 0x57, 0x6e, 0xa8, 0xec, 0x5d, 0xd3, 0x07, 0xd4, 0x52,
+	0x33, 0x3e, 0xfb, 0xf8, 0xd5, 0xef, 0xfb, 0x8d, 0x97, 0x7f, 0xec, 0x7f, 0x40, 0x99, 0x5a, 0x14,
+	0xb1, 0x9f, 0x88, 0x2c, 0x48, 0x19, 0x27, 0x41, 0x1a, 0x67, 0x9f, 0xc8, 0xf9, 0x65, 0xa0, 0xca,
+	0x25, 0x91, 0x06, 0x2b, 0x43, 0x57, 0x0d, 0xed, 0x41, 0x9f, 0x62, 0x19, 0xa5, 0x2c, 0x63, 0xca,
+	0x68, 0xdb, 0x0e, 0x7b, 0x14, 0xcb, 0x6f, 0xb4, 0x8f, 0x76, 0xa0, 0xb3, 0xc4, 0x25, 0xc9, 0xdd,
+	0x31, 0xb0, 0x0e, 0x1a, 0xc0, 0x06, 0xcd, 0x31, 0x57, 0x24, 0x1f, 0xb4, 0xed, 0x91, 0x70, 0xee,
+	0xec, 0x8b, 0x57, 0xd7, 0x23, 0xef, 0xf5, 0xf5, 0xc8, 0xfb, 0xf3, 0x7a, 0xe4, 0xbd, 0xb8, 0x19,
+	0x35, 0x5e, 0xdf, 0x8c, 0x1a, 0xbf, 0xdd, 0x8c, 0x1a, 0xcf, 0xc7, 0x77, 0xf6, 0x14, 0xa8, 0x55,
+	0xdc, 0x35, 0xa3, 0xf8, 0xf8, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x34, 0x82, 0xea, 0x2b, 0x75,
+	0x06, 0x00, 0x00,
 }
 
 func (m *Tx) Marshal() (dAtA []byte, err error) {
@@ -1015,19 +1016,14 @@ func (m *TxBody) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	if m.TimeoutHeight != 0 {
 		i = encodeVarintTx(dAtA, i, uint64(m.TimeoutHeight))
 		i--
-		dAtA[i] = 0x20
+		dAtA[i] = 0x18
 	}
 	if len(m.Memo) > 0 {
 		i -= len(m.Memo)
 		copy(dAtA[i:], m.Memo)
 		i = encodeVarintTx(dAtA, i, uint64(len(m.Memo)))
 		i--
-		dAtA[i] = 0x1a
-	}
-	if m.SigBlockHeight != 0 {
-		i = encodeVarintTx(dAtA, i, uint64(m.SigBlockHeight))
-		i--
-		dAtA[i] = 0x10
+		dAtA[i] = 0x12
 	}
 	if len(m.Messages) > 0 {
 		for iNdEx := len(m.Messages) - 1; iNdEx >= 0; iNdEx-- {
@@ -1066,6 +1062,11 @@ func (m *AuthInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	_ = i
 	var l int
 	_ = l
+	if m.SigBlockHeight != 0 {
+		i = encodeVarintTx(dAtA, i, uint64(m.SigBlockHeight))
+		i--
+		dAtA[i] = 0x18
+	}
 	if m.Fee != nil {
 		{
 			size, err := m.Fee.MarshalToSizedBuffer(dAtA[:i])
@@ -1444,9 +1445,6 @@ func (m *TxBody) Size() (n int) {
 			n += 1 + l + sovTx(uint64(l))
 		}
 	}
-	if m.SigBlockHeight != 0 {
-		n += 1 + sovTx(uint64(m.SigBlockHeight))
-	}
 	l = len(m.Memo)
 	if l > 0 {
 		n += 1 + l + sovTx(uint64(l))
@@ -1485,6 +1483,9 @@ func (m *AuthInfo) Size() (n int) {
 		l = m.Fee.Size()
 		n += 1 + l + sovTx(uint64(l))
 	}
+	if m.SigBlockHeight != 0 {
+		n += 1 + sovTx(uint64(m.SigBlockHeight))
+	}
 	return n
 }
 
@@ -2125,25 +2126,6 @@ func (m *TxBody) Unmarshal(dAtA []byte) error {
 			}
 			iNdEx = postIndex
 		case 2:
-			if wireType != 0 {
-				return fmt.Errorf("proto: wrong wireType = %d for field SigBlockHeight", wireType)
-			}
-			m.SigBlockHeight = 0
-			for shift := uint(0); ; shift += 7 {
-				if shift >= 64 {
-					return ErrIntOverflowTx
-				}
-				if iNdEx >= l {
-					return io.ErrUnexpectedEOF
-				}
-				b := dAtA[iNdEx]
-				iNdEx++
-				m.SigBlockHeight |= uint64(b&0x7F) << shift
-				if b < 0x80 {
-					break
-				}
-			}
-		case 3:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field Memo", wireType)
 			}
@@ -2175,7 +2157,7 @@ func (m *TxBody) Unmarshal(dAtA []byte) error {
 			}
 			m.Memo = string(dAtA[iNdEx:postIndex])
 			iNdEx = postIndex
-		case 4:
+		case 3:
 			if wireType != 0 {
 				return fmt.Errorf("proto: wrong wireType = %d for field TimeoutHeight", wireType)
 			}
@@ -2382,6 +2364,25 @@ func (m *AuthInfo) Unmarshal(dAtA []byte) error {
 				return err
 			}
 			iNdEx = postIndex
+		case 3:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field SigBlockHeight", wireType)
+			}
+			m.SigBlockHeight = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTx
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.SigBlockHeight |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
 		default:
 			iNdEx = preIndex
 			skippy, err := skipTx(dAtA[iNdEx:])
diff --git a/types/tx/types.go b/types/tx/types.go
index 5dcc91b256..57b70e5545 100644
--- a/types/tx/types.go
+++ b/types/tx/types.go
@@ -144,7 +144,7 @@ func (t *Tx) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {
 }
 
 func (t *Tx) GetSigBlockHeight() uint64 {
-	return t.Body.SigBlockHeight
+	return t.AuthInfo.SigBlockHeight
 }
 
 // UnpackInterfaces implements the UnpackInterfaceMessages.UnpackInterfaces method
diff --git a/x/auth/tx/builder.go b/x/auth/tx/builder.go
index 2f67639383..315475038d 100644
--- a/x/auth/tx/builder.go
+++ b/x/auth/tx/builder.go
@@ -146,7 +146,7 @@ func (w *wrapper) FeeGranter() sdk.AccAddress {
 }
 
 func (w *wrapper) GetSigBlockHeight() uint64 {
-	return w.tx.Body.SigBlockHeight
+	return w.tx.AuthInfo.SigBlockHeight
 }
 
 func (w *wrapper) GetMemo() string {
@@ -229,7 +229,7 @@ func (w *wrapper) SetMemo(memo string) {
 }
 
 func (w *wrapper) SetSigBlockHeight(sbh uint64) {
-	w.tx.Body.SigBlockHeight = sbh
+	w.tx.AuthInfo.SigBlockHeight = sbh
 }
 
 func (w *wrapper) SetGasLimit(limit uint64) {

From 596b1881724db0284fb2b30e06dcd8adb5f3c082 Mon Sep 17 00:00:00 2001
From: Youngtaek Yoon <noreply@yoon.anonaddy.me>
Date: Tue, 5 Oct 2021 05:14:18 +0000
Subject: [PATCH 2/6] chore: add the change into CHANGELOG.md

---
 CHANGELOG.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 78920c5508..bc3f6bd0d5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -50,6 +50,7 @@
 * (wasm) [\#253](https://github.com/line/lbm-sdk/pull/253) remove MaxGas const
 * (wasm) [\#254](https://github.com/line/lbm-sdk/pull/254) Specify wasm event types
 * (x) [\#255](https://github.com/line/lbm-sdk/pull/255) Remove legacy from modules
+* (proto) [\#293](https://github.com/line/lbm-sdk/pull/293) Is it appropriate for sig_block_height to be included in the tx_body?
 * (perf) [\#320](https:/github.com/line/lbm-sdk/pull/320) internal objects optimization (BaseAccount, Balance & Supply)
 
 ### Bug Fixes

From 9444eb1ef29ff429c35f61ea81a19511b408ce95 Mon Sep 17 00:00:00 2001
From: Youngtaek Yoon <noreply@yoon.anonaddy.me>
Date: Tue, 5 Oct 2021 06:05:00 +0000
Subject: [PATCH 3/6] fix: revert the omission of `GetSigBlockHeight()` in the
 tests

---
 baseapp/accountwgs_test.go | 4 ++++
 server/mock/tx.go          | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/baseapp/accountwgs_test.go b/baseapp/accountwgs_test.go
index d2e99d24de..334527e4b3 100644
--- a/baseapp/accountwgs_test.go
+++ b/baseapp/accountwgs_test.go
@@ -77,6 +77,10 @@ func (tx AccountLockTestTx) ValidateBasic() error {
 	return nil
 }
 
+func (tx AccountLockTestTx) GetSigBlockHeight() uint64 {
+	return 0
+}
+
 func newTestPrivKeys(num int) []*secp256k1.PrivKey {
 	privs := make([]*secp256k1.PrivKey, 0, num)
 	for i := 0; i < num; i++ {
diff --git a/server/mock/tx.go b/server/mock/tx.go
index 4fcd86e44b..0ef966bccc 100644
--- a/server/mock/tx.go
+++ b/server/mock/tx.go
@@ -53,6 +53,10 @@ func (tx kvstoreTx) GetSignBytes() []byte {
 	return tx.bytes
 }
 
+func (tx kvstoreTx) GetSigBlockHeight() uint64 {
+	return 0
+}
+
 // Should the app be calling this? Or only handlers?
 func (tx kvstoreTx) ValidateBasic() error {
 	return nil

From 2eaaf7f46cb2872261380571b560ed9748baa37a Mon Sep 17 00:00:00 2001
From: Youngtaek Yoon <noreply@yoon.anonaddy.me>
Date: Tue, 5 Oct 2021 06:18:01 +0000
Subject: [PATCH 4/6] fix: revert the omission `SetSigBlockHeight()` in simapp

---
 simapp/helpers/test_helpers.go | 1 +
 1 file changed, 1 insertion(+)

diff --git a/simapp/helpers/test_helpers.go b/simapp/helpers/test_helpers.go
index c36f16c813..22f425f03a 100644
--- a/simapp/helpers/test_helpers.go
+++ b/simapp/helpers/test_helpers.go
@@ -60,6 +60,7 @@ func GenTx(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, gas uint64, ch
 			ChainID:  chainID,
 			Sequence: accSeqs[i],
 		}
+		tx.SetSigBlockHeight(sbh[i])
 		signBytes, err := gen.SignModeHandler().GetSignBytes(signMode, signerData, tx.GetTx())
 		if err != nil {
 			panic(err)

From 5b84658264f75d049abfd84e6424309ff8103a25 Mon Sep 17 00:00:00 2001
From: Youngtaek Yoon <noreply@yoon.anonaddy.me>
Date: Tue, 5 Oct 2021 08:09:58 +0000
Subject: [PATCH 5/6] chore: replace the description in CHANGELOG.md into PR's

---
 CHANGELOG.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc3f6bd0d5..2a6c77c248 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -50,8 +50,8 @@
 * (wasm) [\#253](https://github.com/line/lbm-sdk/pull/253) remove MaxGas const
 * (wasm) [\#254](https://github.com/line/lbm-sdk/pull/254) Specify wasm event types
 * (x) [\#255](https://github.com/line/lbm-sdk/pull/255) Remove legacy from modules
-* (proto) [\#293](https://github.com/line/lbm-sdk/pull/293) Is it appropriate for sig_block_height to be included in the tx_body?
 * (perf) [\#320](https:/github.com/line/lbm-sdk/pull/320) internal objects optimization (BaseAccount, Balance & Supply)
+* (proto) [\#344](https://github.com/line/lbm-sdk/pull/344) move SigBlockHeight from TxBody into AuthInfo
 
 ### Bug Fixes
 * (test) [\#92](https://github.com/line/lbm-sdk/pull/92) Fix SendToModuleAccountTest

From 01c3b3cb87296e7712619ff40839d764e58ab7f9 Mon Sep 17 00:00:00 2001
From: Youngtaek Yoon <noreply@yoon.anonaddy.me>
Date: Tue, 5 Oct 2021 09:21:27 +0000
Subject: [PATCH 6/6] chore: change the scope of the item into auth

---
 CHANGELOG.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2a6c77c248..725071839a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -51,7 +51,7 @@
 * (wasm) [\#254](https://github.com/line/lbm-sdk/pull/254) Specify wasm event types
 * (x) [\#255](https://github.com/line/lbm-sdk/pull/255) Remove legacy from modules
 * (perf) [\#320](https:/github.com/line/lbm-sdk/pull/320) internal objects optimization (BaseAccount, Balance & Supply)
-* (proto) [\#344](https://github.com/line/lbm-sdk/pull/344) move SigBlockHeight from TxBody into AuthInfo
+* (auth) [\#344](https://github.com/line/lbm-sdk/pull/344) move SigBlockHeight from TxBody into AuthInfo
 
 ### Bug Fixes
 * (test) [\#92](https://github.com/line/lbm-sdk/pull/92) Fix SendToModuleAccountTest