diff --git a/client/docs/config.json b/client/docs/config.json index 0d284ec5a26d..6901442da714 100644 --- a/client/docs/config.json +++ b/client/docs/config.json @@ -94,7 +94,7 @@ } }, { - "url": "./tmp-swagger-gen/ibc/channel/query.swagger.json", + "url": "./tmp-swagger-gen/ibc/core/channel/v1/query.swagger.json", "operationIds": { "rename": { "Params": "IBCChannelParams" @@ -102,7 +102,7 @@ } }, { - "url": "./tmp-swagger-gen/ibc/client/query.swagger.json", + "url": "./tmp-swagger-gen/ibc/core/client/v1/query.swagger.json", "operationIds": { "rename": { "Params": "IBCClientParams" @@ -110,7 +110,7 @@ } }, { - "url": "./tmp-swagger-gen/ibc/connection/query.swagger.json", + "url": "./tmp-swagger-gen/ibc/core/connection/v1/query.swagger.json", "operationIds": { "rename": { "Params": "IBCConnectionParams" @@ -118,7 +118,7 @@ } }, { - "url": "./tmp-swagger-gen/ibc/transfer/query.swagger.json", + "url": "./tmp-swagger-gen/ibc/applications/transfer/v1/query.swagger.json", "operationIds": { "rename": { "Params": "IBCTransferParams" diff --git a/client/docs/swagger-ui/swagger.yaml b/client/docs/swagger-ui/swagger.yaml index b61e7c060dc4..06500d754506 100644 --- a/client/docs/swagger-ui/swagger.yaml +++ b/client/docs/swagger-ui/swagger.yaml @@ -1,7 +1,7 @@ -swagger: "2.0" +swagger: '2.0' info: title: Cosmos SDK - Legacy REST and gRPC Gateway docs - description: "A REST interface for state queries, legacy transactions" + description: 'A REST interface for state queries, legacy transactions' version: 1.0.0 paths: /node_info: @@ -13,7 +13,7 @@ paths: produces: - application/json responses: - "200": + '200': description: Node status schema: type: object @@ -59,7 +59,7 @@ paths: type: string listen_addr: type: string - example: "192.168.56.1:26656" + example: '192.168.56.1:26656' version: description: Tendermint version type: string @@ -70,11 +70,11 @@ paths: properties: tx_index: type: string - example: "on" + example: 'on' rpc_address: type: string - example: "tcp://0.0.0.0:26657" - "500": + example: 'tcp://0.0.0.0:26657' + '500': description: Failed to query node status /syncing: get: @@ -85,14 +85,14 @@ paths: produces: - application/json responses: - "200": + '200': description: Node syncing status schema: type: object properties: syncing: type: boolean - "500": + '500': description: Server internal error /blocks/latest: get: @@ -102,7 +102,7 @@ paths: produces: - application/json responses: - "200": + '200': description: The latest block schema: type: object @@ -121,7 +121,7 @@ paths: example: 1 time: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' num_txs: type: number example: 0 @@ -209,7 +209,7 @@ paths: example: 1 time: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' num_txs: type: number example: 0 @@ -303,16 +303,16 @@ paths: type: string validator_index: type: string - example: "0" + example: '0' height: type: string - example: "0" + example: '0' round: type: string - example: "0" + example: '0' timestamp: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' type: type: number example: 2 @@ -335,9 +335,9 @@ paths: type: string example: >- 7uTC74QlknqYWEwg7Vn6M8Om7FuZ0EO4bjvuj6rwH1mTUJrRuMMZvAAqT9VjNgP0RA/TDp6u/92AqrZfXJSpBQ== - "500": + '500': description: Server internal error - "/blocks/{height}": + '/blocks/{height}': get: summary: Get a block at a certain height tags: @@ -352,7 +352,7 @@ paths: type: number x-example: 1 responses: - "200": + '200': description: The block at a specific height schema: type: object @@ -371,7 +371,7 @@ paths: example: 1 time: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' num_txs: type: number example: 0 @@ -459,7 +459,7 @@ paths: example: 1 time: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' num_txs: type: number example: 0 @@ -553,16 +553,16 @@ paths: type: string validator_index: type: string - example: "0" + example: '0' height: type: string - example: "0" + example: '0' round: type: string - example: "0" + example: '0' timestamp: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' type: type: number example: 2 @@ -585,11 +585,11 @@ paths: type: string example: >- 7uTC74QlknqYWEwg7Vn6M8Om7FuZ0EO4bjvuj6rwH1mTUJrRuMMZvAAqT9VjNgP0RA/TDp6u/92AqrZfXJSpBQ== - "400": + '400': description: Invalid height - "404": + '404': description: Request block height doesn't - "500": + '500': description: Server internal error /validatorsets/latest: get: @@ -599,7 +599,7 @@ paths: produces: - application/json responses: - "200": + '200': description: The validator set at the latest block height schema: type: object @@ -621,13 +621,13 @@ paths: cosmosvalconspub1zcjduepq0vu2zgkgk49efa0nqwzndanq5m4c7pa3u4apz4g2r9gspqg6g9cs3k9cuf voting_power: type: string - example: "1000" + example: '1000' proposer_priority: type: string - example: "1000" - "500": + example: '1000' + '500': description: Server internal error - "/validatorsets/{height}": + '/validatorsets/{height}': get: summary: Get a validator set a certain height tags: @@ -642,7 +642,7 @@ paths: type: number x-example: 1 responses: - "200": + '200': description: The validator set at a specific block height schema: type: object @@ -664,17 +664,17 @@ paths: cosmosvalconspub1zcjduepq0vu2zgkgk49efa0nqwzndanq5m4c7pa3u4apz4g2r9gspqg6g9cs3k9cuf voting_power: type: string - example: "1000" + example: '1000' proposer_priority: type: string - example: "1000" - "400": + example: '1000' + '400': description: Invalid height - "404": + '404': description: Block at height not available - "500": + '500': description: Server internal error - "/txs/{hash}": + '/txs/{hash}': get: deprecated: true summary: Get a Tx by hash @@ -691,7 +691,7 @@ paths: type: string x-example: BCBE20E8D46758B96AE5883B792858296AC06E51435490FBDCAE25A72B3CC76B responses: - "200": + '200': description: Tx with the provided hash schema: type: object @@ -725,7 +725,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -746,10 +746,10 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" + example: '0' result: type: object properties: @@ -757,10 +757,10 @@ paths: type: string gas_wanted: type: string - example: "200000" + example: '200000' gas_used: type: string - example: "26354" + example: '26354' tags: type: array items: @@ -770,7 +770,7 @@ paths: type: string value: type: string - "500": + '500': description: Internal Server Error /txs: get: @@ -819,7 +819,7 @@ paths: description: transactions on blocks with height less than or equal this value x-example: 800000 responses: - "200": + '200': description: All txs matching the provided events schema: type: object @@ -873,7 +873,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -894,10 +894,10 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" + example: '0' result: type: object properties: @@ -905,10 +905,10 @@ paths: type: string gas_wanted: type: string - example: "200000" + example: '200000' gas_used: type: string - example: "26354" + example: '26354' tags: type: array items: @@ -918,9 +918,9 @@ paths: type: string value: type: string - "400": + '400': description: Invalid search events - "500": + '500': description: Internal Server Error post: tags: @@ -964,7 +964,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -985,15 +985,15 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" + example: '0' mode: type: string example: block responses: - "200": + '200': description: Tx broadcasting result schema: type: object @@ -1030,8 +1030,8 @@ paths: gas_wanted: 10000 info: info tags: - - "" - - "" + - '' + - '' deliver_tx: type: object properties: @@ -1064,14 +1064,14 @@ paths: gas_wanted: 10000 info: info tags: - - "" - - "" + - '' + - '' hash: type: string example: EE5F3404034C524501629B56E0DDC38FAD651F04 height: type: integer - "500": + '500': description: Internal Server Error /txs/encode: post: @@ -1116,7 +1116,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -1137,12 +1137,12 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" + example: '0' responses: - "200": + '200': description: The tx was successfully decoded and re-encoded schema: type: object @@ -1150,9 +1150,9 @@ paths: tx: type: string example: The base64-encoded Amino-serialized bytes for the tx - "400": + '400': description: The tx was malformated - "500": + '500': description: Server internal error /txs/decode: post: @@ -1180,7 +1180,7 @@ paths: example: >- SvBiXe4KPqijYZoKFFHEzJ8c2HPAfv2EFUcIhx0yPagwEhTy0vPA+GGhCEslKXa4Af0uB+mfShoMCgVzdGFrZRIDMTAwEgQQwJoM responses: - "200": + '200': description: The tx was successfully decoded schema: type: object @@ -1204,7 +1204,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -1225,15 +1225,15 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: The tx was malformated - "500": + '500': description: Server internal error - "/bank/balances/{address}": + '/bank/balances/{address}': get: deprecated: true summary: Get the account balances @@ -1249,7 +1249,7 @@ paths: type: string x-example: cosmos16xyempempp92x9hyzz9wrgf94r6j9h5f06pxxv responses: - "200": + '200': description: Account balances schema: type: array @@ -1261,10 +1261,10 @@ paths: example: stake amount: type: string - example: "50" - "500": + example: '50' + '500': description: Server internal error - "/bank/accounts/{address}/transfers": + '/bank/accounts/{address}/transfers': post: deprecated: true summary: Send coins from one account to another @@ -1303,16 +1303,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -1323,7 +1323,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -1340,9 +1340,9 @@ paths: example: stake amount: type: string - example: "50" + example: '50' responses: - "202": + '202': description: Tx was succesfully generated schema: type: object @@ -1366,7 +1366,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -1387,15 +1387,15 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid request - "500": + '500': description: Server internal error - "/auth/accounts/{address}": + '/auth/accounts/{address}': get: deprecated: true summary: Get the account information on blockchain @@ -1411,7 +1411,7 @@ paths: type: string x-example: cosmos16xyempempp92x9hyzz9wrgf94r6j9h5f06pxxv responses: - "200": + '200': description: Account information on the blockchain schema: type: object @@ -1435,7 +1435,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' public_key: type: object properties: @@ -1445,9 +1445,9 @@ paths: type: string sequence: type: string - "500": + '500': description: Server internel error - "/staking/delegators/{delegatorAddr}/delegations": + '/staking/delegators/{delegatorAddr}/delegations': parameters: - in: path name: delegatorAddr @@ -1463,7 +1463,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -1484,10 +1484,10 @@ paths: example: stake amount: type: string - example: "50" - "400": + example: '50' + '400': description: Invalid delegator address - "500": + '500': description: Internal Server Error post: summary: Submit delegation @@ -1513,16 +1513,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -1533,7 +1533,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -1556,7 +1556,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' tags: - Staking consumes: @@ -1564,7 +1564,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -1588,7 +1588,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -1609,17 +1609,17 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid delegator address or delegation request body - "401": + '401': description: Key password is wrong - "500": + '500': description: Internal Server Error - "/staking/delegators/{delegatorAddr}/delegations/{validatorAddr}": + '/staking/delegators/{delegatorAddr}/delegations/{validatorAddr}': parameters: - in: path name: delegatorAddr @@ -1641,7 +1641,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -1660,12 +1660,12 @@ paths: example: stake amount: type: string - example: "50" - "400": + example: '50' + '400': description: Invalid delegator address or validator address - "500": + '500': description: Internal Server Error - "/staking/delegators/{delegatorAddr}/unbonding_delegations": + '/staking/delegators/{delegatorAddr}/unbonding_delegations': parameters: - in: path name: delegatorAddr @@ -1681,7 +1681,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -1700,9 +1700,9 @@ paths: type: integer min_time: type: integer - "400": + '400': description: Invalid delegator address - "500": + '500': description: Internal Server Error post: summary: Submit an unbonding delegation @@ -1728,16 +1728,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -1748,7 +1748,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -1765,7 +1765,7 @@ paths: example: cosmosvaloper16xyempempp92x9hyzz9wrgf94r6j9h5f2w4n2l shares: type: string - example: "100" + example: '100' tags: - Staking consumes: @@ -1773,7 +1773,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -1797,7 +1797,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -1818,17 +1818,17 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid delegator address or unbonding delegation request body - "401": + '401': description: Key password is wrong - "500": + '500': description: Internal Server Error - "/staking/delegators/{delegatorAddr}/unbonding_delegations/{validatorAddr}": + '/staking/delegators/{delegatorAddr}/unbonding_delegations/{validatorAddr}': parameters: - in: path name: delegatorAddr @@ -1850,7 +1850,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -1872,9 +1872,9 @@ paths: type: string min_time: type: string - "400": + '400': description: Invalid delegator address or validator address - "500": + '500': description: Internal Server Error /staking/redelegations: parameters: @@ -1901,15 +1901,15 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array items: - $ref: "#/definitions/Redelegation" - "500": + $ref: '#/definitions/Redelegation' + '500': description: Internal Server Error - "/staking/delegators/{delegatorAddr}/redelegations": + '/staking/delegators/{delegatorAddr}/redelegations': parameters: - in: path name: delegatorAddr @@ -1942,16 +1942,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -1962,7 +1962,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -1983,7 +1983,7 @@ paths: example: cosmosvaloper16xyempempp92x9hyzz9wrgf94r6j9h5f2w4n2l shares: type: string - example: "100" + example: '100' tags: - Staking consumes: @@ -1991,7 +1991,7 @@ paths: produces: - application/json responses: - "200": + '200': description: Tx was succesfully generated schema: type: object @@ -2015,7 +2015,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -2036,15 +2036,15 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid delegator address or redelegation request body - "500": + '500': description: Internal Server Error - "/staking/delegators/{delegatorAddr}/validators": + '/staking/delegators/{delegatorAddr}/validators': parameters: - in: path name: delegatorAddr @@ -2060,7 +2060,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -2098,36 +2098,36 @@ paths: type: string bond_height: type: string - example: "0" + example: '0' bond_intra_tx_counter: type: integer example: 0 unbonding_height: type: string - example: "0" + example: '0' unbonding_time: type: string - example: "1970-01-01T00:00:00Z" + example: '1970-01-01T00:00:00Z' commission: type: object properties: rate: type: string - example: "0" + example: '0' max_rate: type: string - example: "0" + example: '0' max_change_rate: type: string - example: "0" + example: '0' update_time: type: string - example: "1970-01-01T00:00:00Z" - "400": + example: '1970-01-01T00:00:00Z' + '400': description: Invalid delegator address - "500": + '500': description: Internal Server Error - "/staking/delegators/{delegatorAddr}/validators/{validatorAddr}": + '/staking/delegators/{delegatorAddr}/validators/{validatorAddr}': parameters: - in: path name: delegatorAddr @@ -2149,7 +2149,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -2185,34 +2185,34 @@ paths: type: string bond_height: type: string - example: "0" + example: '0' bond_intra_tx_counter: type: integer example: 0 unbonding_height: type: string - example: "0" + example: '0' unbonding_time: type: string - example: "1970-01-01T00:00:00Z" + example: '1970-01-01T00:00:00Z' commission: type: object properties: rate: type: string - example: "0" + example: '0' max_rate: type: string - example: "0" + example: '0' max_change_rate: type: string - example: "0" + example: '0' update_time: type: string - example: "1970-01-01T00:00:00Z" - "400": + example: '1970-01-01T00:00:00Z' + '400': description: Invalid delegator address or validator address - "500": + '500': description: Internal Server Error /staking/validators: get: @@ -2243,7 +2243,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -2281,34 +2281,34 @@ paths: type: string bond_height: type: string - example: "0" + example: '0' bond_intra_tx_counter: type: integer example: 0 unbonding_height: type: string - example: "0" + example: '0' unbonding_time: type: string - example: "1970-01-01T00:00:00Z" + example: '1970-01-01T00:00:00Z' commission: type: object properties: rate: type: string - example: "0" + example: '0' max_rate: type: string - example: "0" + example: '0' max_change_rate: type: string - example: "0" + example: '0' update_time: type: string - example: "1970-01-01T00:00:00Z" - "500": + example: '1970-01-01T00:00:00Z' + '500': description: Internal Server Error - "/staking/validators/{validatorAddr}": + '/staking/validators/{validatorAddr}': parameters: - in: path name: validatorAddr @@ -2324,7 +2324,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -2360,36 +2360,36 @@ paths: type: string bond_height: type: string - example: "0" + example: '0' bond_intra_tx_counter: type: integer example: 0 unbonding_height: type: string - example: "0" + example: '0' unbonding_time: type: string - example: "1970-01-01T00:00:00Z" + example: '1970-01-01T00:00:00Z' commission: type: object properties: rate: type: string - example: "0" + example: '0' max_rate: type: string - example: "0" + example: '0' max_change_rate: type: string - example: "0" + example: '0' update_time: type: string - example: "1970-01-01T00:00:00Z" - "400": + example: '1970-01-01T00:00:00Z' + '400': description: Invalid validator address - "500": + '500': description: Internal Server Error - "/staking/validators/{validatorAddr}/delegations": + '/staking/validators/{validatorAddr}/delegations': parameters: - in: path name: validatorAddr @@ -2405,7 +2405,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -2426,12 +2426,12 @@ paths: example: stake amount: type: string - example: "50" - "400": + example: '50' + '400': description: Invalid validator address - "500": + '500': description: Internal Server Error - "/staking/validators/{validatorAddr}/unbonding_delegations": + '/staking/validators/{validatorAddr}/unbonding_delegations': parameters: - in: path name: validatorAddr @@ -2447,7 +2447,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -2466,9 +2466,9 @@ paths: type: integer min_time: type: integer - "400": + '400': description: Invalid validator address - "500": + '500': description: Internal Server Error /staking/pool: get: @@ -2479,7 +2479,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -2496,7 +2496,7 @@ paths: type: string prev_bonded_shares: type: string - "500": + '500': description: Internal Server Error /staking/parameters: get: @@ -2507,7 +2507,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -2526,7 +2526,7 @@ paths: type: integer bond_denom: type: string - "500": + '500': description: Internal Server Error /slashing/signing_infos: get: @@ -2551,7 +2551,7 @@ paths: required: true x-example: 5 responses: - "200": + '200': description: OK schema: type: array @@ -2566,11 +2566,11 @@ paths: type: string missed_blocks_counter: type: string - "400": + '400': description: Invalid validator public key for one of the validators - "500": + '500': description: Internal Server Error - "/slashing/validators/{validatorAddr}/unjail": + '/slashing/validators/{validatorAddr}/unjail': post: deprecated: true summary: Unjail a jailed validator @@ -2588,7 +2588,7 @@ paths: required: true in: path x-example: cosmosvaloper16xyempempp92x9hyzz9wrgf94r6j9h5f2w4n2l - - description: "" + - description: '' name: UnjailBody in: body required: true @@ -2617,7 +2617,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -2638,12 +2638,12 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" + example: '0' responses: - "200": + '200': description: Tx was succesfully generated schema: type: object @@ -2667,7 +2667,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -2688,13 +2688,13 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid validator address or base_req - "500": + '500': description: Internal Server Error /slashing/parameters: get: @@ -2705,7 +2705,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -2724,7 +2724,7 @@ paths: type: string slash_fraction_downtime: type: string - "500": + '500': description: Internal Server Error /gov/proposals: post: @@ -2762,16 +2762,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -2782,7 +2782,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -2810,9 +2810,9 @@ paths: example: stake amount: type: string - example: "50" + example: '50' responses: - "200": + '200': description: Tx was succesfully generated schema: type: object @@ -2836,7 +2836,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -2857,13 +2857,13 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid proposal body - "500": + '500': description: Internal Server Error get: deprecated: true @@ -2892,7 +2892,7 @@ paths: required: false type: string responses: - "200": + '200': description: OK schema: type: array @@ -2912,18 +2912,18 @@ paths: final_tally_result: type: object properties: - "yes": + 'yes': type: string - example: "0.0000000000" + example: '0.0000000000' abstain: type: string - example: "0.0000000000" - "no": + example: '0.0000000000' + 'no': type: string - example: "0.0000000000" + example: '0.0000000000' no_with_veto: type: string - example: "0.0000000000" + example: '0.0000000000' submit_time: type: string total_deposit: @@ -2936,12 +2936,12 @@ paths: example: stake amount: type: string - example: "50" + example: '50' voting_start_time: type: string - "400": + '400': description: Invalid query parameters - "500": + '500': description: Internal Server Error /gov/proposals/param_change: post: @@ -2979,16 +2979,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -2999,7 +2999,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -3026,7 +3026,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' changes: type: array items: @@ -3040,11 +3040,11 @@ paths: example: MaxValidators subkey: type: string - example: "" + example: '' value: type: object responses: - "200": + '200': description: The transaction was succesfully generated schema: type: object @@ -3068,7 +3068,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -3089,15 +3089,15 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid proposal body - "500": + '500': description: Internal Server Error - "/gov/proposals/{proposalId}": + '/gov/proposals/{proposalId}': get: deprecated: true summary: Query a proposal @@ -3111,9 +3111,9 @@ paths: name: proposalId required: true in: path - x-example: "2" + x-example: '2' responses: - "200": + '200': description: OK schema: type: object @@ -3131,18 +3131,18 @@ paths: final_tally_result: type: object properties: - "yes": + 'yes': type: string - example: "0.0000000000" + example: '0.0000000000' abstain: type: string - example: "0.0000000000" - "no": + example: '0.0000000000' + 'no': type: string - example: "0.0000000000" + example: '0.0000000000' no_with_veto: type: string - example: "0.0000000000" + example: '0.0000000000' submit_time: type: string total_deposit: @@ -3155,14 +3155,14 @@ paths: example: stake amount: type: string - example: "50" + example: '50' voting_start_time: type: string - "400": + '400': description: Invalid proposal id - "500": + '500': description: Internal Server Error - "/gov/proposals/{proposalId}/proposer": + '/gov/proposals/{proposalId}/proposer': get: deprecated: true summary: Query proposer @@ -3176,9 +3176,9 @@ paths: name: proposalId required: true in: path - x-example: "2" + x-example: '2' responses: - "200": + '200': description: OK schema: type: object @@ -3187,11 +3187,11 @@ paths: type: string proposer: type: string - "400": + '400': description: Invalid proposal ID - "500": + '500': description: Internal Server Error - "/gov/proposals/{proposalId}/deposits": + '/gov/proposals/{proposalId}/deposits': get: deprecated: true summary: Query deposits @@ -3205,9 +3205,9 @@ paths: name: proposalId required: true in: path - x-example: "2" + x-example: '2' responses: - "200": + '200': description: OK schema: type: array @@ -3224,16 +3224,16 @@ paths: example: stake amount: type: string - example: "50" + example: '50' proposal_id: type: string depositor: type: string description: bech32 encoded address example: cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27 - "400": + '400': description: Invalid proposal id - "500": + '500': description: Internal Server Error post: deprecated: true @@ -3251,8 +3251,8 @@ paths: name: proposalId required: true in: path - x-example: "2" - - description: "" + x-example: '2' + - description: '' name: post_deposit_body in: body required: true @@ -3274,16 +3274,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -3294,7 +3294,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -3315,9 +3315,9 @@ paths: example: stake amount: type: string - example: "50" + example: '50' responses: - "200": + '200': description: OK schema: type: object @@ -3341,7 +3341,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -3362,17 +3362,17 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid proposal id or deposit body - "401": + '401': description: Key password is wrong - "500": + '500': description: Internal Server Error - "/gov/proposals/{proposalId}/deposits/{depositor}": + '/gov/proposals/{proposalId}/deposits/{depositor}': get: deprecated: true summary: Query deposit @@ -3387,7 +3387,7 @@ paths: name: proposalId required: true in: path - x-example: "2" + x-example: '2' - type: string description: Bech32 depositor address name: depositor @@ -3395,7 +3395,7 @@ paths: in: path x-example: cosmos16xyempempp92x9hyzz9wrgf94r6j9h5f06pxxv responses: - "200": + '200': description: OK schema: type: object @@ -3410,20 +3410,20 @@ paths: example: stake amount: type: string - example: "50" + example: '50' proposal_id: type: string depositor: type: string description: bech32 encoded address example: cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27 - "400": + '400': description: Invalid proposal id or depositor address - "404": + '404': description: Found no deposit - "500": + '500': description: Internal Server Error - "/gov/proposals/{proposalId}/votes": + '/gov/proposals/{proposalId}/votes': get: deprecated: true summary: Query voters @@ -3438,9 +3438,9 @@ paths: name: proposalId required: true in: path - x-example: "2" + x-example: '2' responses: - "200": + '200': description: OK schema: type: array @@ -3453,9 +3453,9 @@ paths: type: string option: type: string - "400": + '400': description: Invalid proposal id - "500": + '500': description: Internal Server Error post: deprecated: true @@ -3473,7 +3473,7 @@ paths: name: proposalId required: true in: path - x-example: "2" + x-example: '2' - description: >- valid value of `"option"` field can be `"yes"`, `"no"`, `"no_with_veto"` and `"abstain"` @@ -3498,16 +3498,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -3518,7 +3518,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -3531,9 +3531,9 @@ paths: example: cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27 option: type: string - example: "yes" + example: 'yes' responses: - "200": + '200': description: OK schema: type: object @@ -3557,7 +3557,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -3578,17 +3578,17 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid proposal id or vote body - "401": + '401': description: Key password is wrong - "500": + '500': description: Internal Server Error - "/gov/proposals/{proposalId}/votes/{voter}": + '/gov/proposals/{proposalId}/votes/{voter}': get: deprecated: true summary: Query vote @@ -3603,7 +3603,7 @@ paths: name: proposalId required: true in: path - x-example: "2" + x-example: '2' - type: string description: Bech32 voter address name: voter @@ -3611,7 +3611,7 @@ paths: in: path x-example: cosmos16xyempempp92x9hyzz9wrgf94r6j9h5f06pxxv responses: - "200": + '200': description: OK schema: type: object @@ -3622,13 +3622,13 @@ paths: type: string option: type: string - "400": + '400': description: Invalid proposal id or voter address - "404": + '404': description: Found no vote - "500": + '500': description: Internal Server Error - "/gov/proposals/{proposalId}/tally": + '/gov/proposals/{proposalId}/tally': get: deprecated: true summary: Get a proposal's tally result at the current time @@ -3646,28 +3646,28 @@ paths: name: proposalId required: true in: path - x-example: "2" + x-example: '2' responses: - "200": + '200': description: OK schema: type: object properties: - "yes": + 'yes': type: string - example: "0.0000000000" + example: '0.0000000000' abstain: type: string - example: "0.0000000000" - "no": + example: '0.0000000000' + 'no': type: string - example: "0.0000000000" + example: '0.0000000000' no_with_veto: type: string - example: "0.0000000000" - "400": + example: '0.0000000000' + '400': description: Invalid proposal id - "500": + '500': description: Internal Server Error /gov/parameters/deposit: get: @@ -3681,7 +3681,7 @@ paths: tags: - Governance responses: - "200": + '200': description: OK schema: type: object @@ -3696,15 +3696,15 @@ paths: example: stake amount: type: string - example: "50" + example: '50' max_deposit_period: type: string - example: "86400000000000" - "400": + example: '86400000000000' + '400': description: is not a valid query request path - "404": + '404': description: Found no deposit parameters - "500": + '500': description: Internal Server Error /gov/parameters/tallying: get: @@ -3716,24 +3716,24 @@ paths: tags: - Governance responses: - "200": + '200': description: OK schema: properties: threshold: type: string - example: "0.5000000000" + example: '0.5000000000' veto: type: string - example: "0.3340000000" + example: '0.3340000000' governance_penalty: type: string - example: "0.0100000000" - "400": + example: '0.0100000000' + '400': description: is not a valid query request path - "404": + '404': description: Found no tally parameters - "500": + '500': description: Internal Server Error /gov/parameters/voting: get: @@ -3747,20 +3747,20 @@ paths: tags: - Governance responses: - "200": + '200': description: OK schema: properties: voting_period: type: string - example: "86400000000000" - "400": + example: '86400000000000' + '400': description: is not a valid query request path - "404": + '404': description: Found no voting parameters - "500": + '500': description: Internal Server Error - "/distribution/delegators/{delegatorAddr}/rewards": + '/distribution/delegators/{delegatorAddr}/rewards': parameters: - in: path name: delegatorAddr @@ -3779,7 +3779,7 @@ paths: tags: - Distribution responses: - "200": + '200': description: OK schema: type: object @@ -3803,7 +3803,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' total: type: array items: @@ -3814,10 +3814,10 @@ paths: example: stake amount: type: string - example: "50" - "400": + example: '50' + '400': description: Invalid delegator address - "500": + '500': description: Internal Server Error post: deprecated: true @@ -3849,16 +3849,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -3869,7 +3869,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -3877,7 +3877,7 @@ paths: Estimate gas for a transaction (cannot be used in conjunction with generate_only) responses: - "200": + '200': description: OK schema: type: object @@ -3901,7 +3901,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -3922,17 +3922,17 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid delegator address - "401": + '401': description: Key password is wrong - "500": + '500': description: Internal Server Error - "/distribution/delegators/{delegatorAddr}/rewards/{validatorAddr}": + '/distribution/delegators/{delegatorAddr}/rewards/{validatorAddr}': parameters: - in: path name: delegatorAddr @@ -3955,7 +3955,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -3967,10 +3967,10 @@ paths: example: stake amount: type: string - example: "50" - "400": + example: '50' + '400': description: Invalid delegator address - "500": + '500': description: Internal Server Error post: deprecated: true @@ -4002,16 +4002,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -4022,7 +4022,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -4030,7 +4030,7 @@ paths: Estimate gas for a transaction (cannot be used in conjunction with generate_only) responses: - "200": + '200': description: OK schema: type: object @@ -4054,7 +4054,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -4075,17 +4075,17 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid delegator address or delegation body - "401": + '401': description: Key password is wrong - "500": + '500': description: Internal Server Error - "/distribution/delegators/{delegatorAddr}/withdraw_address": + '/distribution/delegators/{delegatorAddr}/withdraw_address': parameters: - in: path name: delegatorAddr @@ -4104,15 +4104,15 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: string description: bech32 encoded address example: cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27 - "400": + '400': description: Invalid delegator address - "500": + '500': description: Internal Server Error post: deprecated: true @@ -4144,16 +4144,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -4164,7 +4164,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -4176,7 +4176,7 @@ paths: description: bech32 encoded address example: cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27 responses: - "200": + '200': description: OK schema: type: object @@ -4200,7 +4200,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -4221,17 +4221,17 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid delegator or withdraw address - "401": + '401': description: Key password is wrong - "500": + '500': description: Internal Server Error - "/distribution/validators/{validatorAddr}": + '/distribution/validators/{validatorAddr}': parameters: - in: path name: validatorAddr @@ -4248,7 +4248,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -4267,7 +4267,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' val_commission: type: array items: @@ -4278,12 +4278,12 @@ paths: example: stake amount: type: string - example: "50" - "400": + example: '50' + '400': description: Invalid validator address - "500": + '500': description: Internal Server Error - "/distribution/validators/{validatorAddr}/outstanding_rewards": + '/distribution/validators/{validatorAddr}/outstanding_rewards': parameters: - in: path name: validatorAddr @@ -4299,7 +4299,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -4311,10 +4311,10 @@ paths: example: stake amount: type: string - example: "50" - "500": + example: '50' + '500': description: Internal Server Error - "/distribution/validators/{validatorAddr}/rewards": + '/distribution/validators/{validatorAddr}/rewards': parameters: - in: path name: validatorAddr @@ -4331,7 +4331,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -4343,10 +4343,10 @@ paths: example: stake amount: type: string - example: "50" - "400": + example: '50' + '400': description: Invalid validator address - "500": + '500': description: Internal Server Error post: deprecated: true @@ -4378,16 +4378,16 @@ paths: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -4398,7 +4398,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -4406,7 +4406,7 @@ paths: Estimate gas for a transaction (cannot be used in conjunction with generate_only) responses: - "200": + '200': description: OK schema: type: object @@ -4430,7 +4430,7 @@ paths: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -4451,15 +4451,15 @@ paths: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" - "400": + example: '0' + '400': description: Invalid validator address - "401": + '401': description: Key password is wrong - "500": + '500': description: Internal Server Error /distribution/community_pool: get: @@ -4470,7 +4470,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: array @@ -4482,8 +4482,8 @@ paths: example: stake amount: type: string - example: "50" - "500": + example: '50' + '500': description: Internal Server Error /distribution/parameters: get: @@ -4494,7 +4494,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: properties: @@ -4504,7 +4504,7 @@ paths: type: string community_tax: type: string - "500": + '500': description: Internal Server Error /minting/parameters: get: @@ -4515,7 +4515,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: properties: @@ -4531,7 +4531,7 @@ paths: type: string blocks_per_year: type: string - "500": + '500': description: Internal Server Error /minting/inflation: get: @@ -4542,11 +4542,11 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: string - "500": + '500': description: Internal Server Error /minting/annual-provisions: get: @@ -4557,11 +4557,11 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: string - "500": + '500': description: Internal Server Error /supply/total: get: @@ -4572,7 +4572,7 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: object @@ -4587,10 +4587,10 @@ paths: example: stake amount: type: string - example: "50" - "500": + example: '50' + '500': description: Internal Server Error - "/supply/total/{denomination}": + '/supply/total/{denomination}': parameters: - in: path name: denomination @@ -4606,20 +4606,20 @@ paths: produces: - application/json responses: - "200": + '200': description: OK schema: type: string - "400": + '400': description: Invalid coin denomination - "500": + '500': description: Internal Server Error - "/cosmos/auth/v1beta1/accounts/{address}": + '/cosmos/auth/v1beta1/accounts/{address}': get: summary: Account returns account details based on address. operationId: Account responses: - "200": + '200': description: A successful response. schema: type: object @@ -4695,7 +4695,7 @@ paths: QueryAccountResponse is the response type for the Query/Account RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -4896,7 +4896,7 @@ paths: summary: Params queries all parameters. operationId: AuthParams responses: - "200": + '200': description: A successful response. schema: type: object @@ -4924,7 +4924,7 @@ paths: QueryParamsResponse is the response type for the Query/Params RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5114,12 +5114,12 @@ paths: } tags: - Query - "/cosmos/bank/v1beta1/balances/{address}": + '/cosmos/bank/v1beta1/balances/{address}': get: summary: AllBalances queries the balance of all coins for a single account. operationId: AllBalances responses: - "200": + '200': description: A successful response. schema: type: object @@ -5166,7 +5166,7 @@ paths: method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5239,15 +5239,14 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/bank/v1beta1/balances/{address}/{denom}": + '/cosmos/bank/v1beta1/balances/{address}/{denom}': get: summary: Balance queries the balance of a single coin for a single account. operationId: Balance responses: - "200": + '200': description: A successful response. schema: type: object @@ -5264,7 +5263,7 @@ paths: QueryBalanceResponse is the response type for the Query/Balance RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5303,7 +5302,7 @@ paths: summary: Params queries the parameters of x/bank module. operationId: BankParams responses: - "200": + '200': description: A successful response. schema: type: object @@ -5320,7 +5319,6 @@ paths: type: string enabled: type: boolean - format: boolean description: >- SendEnabled maps coin denom to a send_enabled status (whether a denom is @@ -5328,13 +5326,12 @@ paths: sendable). default_send_enabled: type: boolean - format: boolean description: Params defines the parameters for the bank module. description: >- QueryParamsResponse defines the response type for querying x/bank parameters. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5362,7 +5359,7 @@ paths: summary: TotalSupply queries the total supply of all coins. operationId: TotalSupply responses: - "200": + '200': description: A successful response. schema: type: object @@ -5391,7 +5388,7 @@ paths: method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5414,12 +5411,12 @@ paths: format: byte tags: - Query - "/cosmos/bank/v1beta1/supply/{denom}": + '/cosmos/bank/v1beta1/supply/{denom}': get: summary: SupplyOf queries the supply of a single coin. operationId: SupplyOf responses: - "200": + '200': description: A successful response. schema: type: object @@ -5436,7 +5433,7 @@ paths: QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5470,7 +5467,7 @@ paths: summary: CommunityPool queries the community pool coins. operationId: CommunityPool responses: - "200": + '200': description: A successful response. schema: type: object @@ -5500,7 +5497,7 @@ paths: RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5523,14 +5520,14 @@ paths: format: byte tags: - Query - "/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards": + '/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards': get: summary: |- DelegationTotalRewards queries the total rewards accrued by a each validator. operationId: DelegationTotalRewards responses: - "200": + '200': description: A successful response. schema: type: object @@ -5587,7 +5584,7 @@ paths: QueryDelegationTotalRewardsResponse is the response type for the Query/DelegationTotalRewards RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5616,12 +5613,12 @@ paths: type: string tags: - Query - ? "/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}" - : get: + '/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}': + get: summary: DelegationRewards queries the total rewards accrued by a delegation. operationId: DelegationRewards responses: - "200": + '200': description: A successful response. schema: type: object @@ -5649,7 +5646,7 @@ paths: QueryDelegationRewardsResponse is the response type for the Query/DelegationRewards RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5683,12 +5680,12 @@ paths: type: string tags: - Query - "/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators": + '/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators': get: summary: DelegatorValidators queries the validators of a delegator. operationId: DelegatorValidators responses: - "200": + '200': description: A successful response. schema: type: object @@ -5704,7 +5701,7 @@ paths: QueryDelegatorValidatorsResponse is the response type for the Query/DelegatorValidators RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5733,12 +5730,12 @@ paths: type: string tags: - Query - ? "/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address" - : get: + '/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address': + get: summary: DelegatorWithdrawAddress queries withdraw address of a delegator. operationId: DelegatorWithdrawAddress responses: - "200": + '200': description: A successful response. schema: type: object @@ -5750,7 +5747,7 @@ paths: QueryDelegatorWithdrawAddressResponse is the response type for the Query/DelegatorWithdrawAddress RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5784,7 +5781,7 @@ paths: summary: Params queries params of the distribution module. operationId: DistributionParams responses: - "200": + '200': description: A successful response. schema: type: object @@ -5801,12 +5798,11 @@ paths: type: string withdraw_addr_enabled: type: boolean - format: boolean description: >- QueryParamsResponse is the response type for the Query/Params RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5829,12 +5825,12 @@ paths: format: byte tags: - Query - "/cosmos/distribution/v1beta1/validators/{validator_address}/commission": + '/cosmos/distribution/v1beta1/validators/{validator_address}/commission': get: summary: ValidatorCommission queries accumulated commission for a validator. operationId: ValidatorCommission responses: - "200": + '200': description: A successful response. schema: type: object @@ -5865,7 +5861,7 @@ paths: QueryValidatorCommissionResponse is the response type for the Query/ValidatorCommission RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5894,12 +5890,12 @@ paths: type: string tags: - Query - ? "/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards" - : get: + '/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards': + get: summary: ValidatorOutstandingRewards queries rewards of a validator address. operationId: ValidatorOutstandingRewards responses: - "200": + '200': description: A successful response. schema: type: object @@ -5937,7 +5933,7 @@ paths: Query/ValidatorOutstandingRewards RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -5966,12 +5962,12 @@ paths: type: string tags: - Query - "/cosmos/distribution/v1beta1/validators/{validator_address}/slashes": + '/cosmos/distribution/v1beta1/validators/{validator_address}/slashes': get: summary: ValidatorSlashes queries slash events of a validator. operationId: ValidatorSlashes responses: - "200": + '200': description: A successful response. schema: type: object @@ -6019,7 +6015,7 @@ paths: QueryValidatorSlashesResponse is the response type for the Query/ValidatorSlashes RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -6108,7 +6104,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /cosmos/evidence/v1beta1/evidence: @@ -6116,7 +6111,7 @@ paths: summary: AllEvidence queries all evidence. operationId: AllEvidence responses: - "200": + '200': description: A successful response. schema: type: object @@ -6323,7 +6318,7 @@ paths: method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -6558,15 +6553,14 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/evidence/v1beta1/evidence/{evidence_hash}": + '/cosmos/evidence/v1beta1/evidence/{evidence_hash}': get: summary: Evidence queries evidence based on evidence hash. operationId: Evidence responses: - "200": + '200': description: A successful response. schema: type: object @@ -6642,7 +6636,7 @@ paths: QueryEvidenceResponse is the response type for the Query/Evidence RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -6839,12 +6833,12 @@ paths: format: byte tags: - Query - "/cosmos/gov/v1beta1/params/{params_type}": + '/cosmos/gov/v1beta1/params/{params_type}': get: summary: Params queries all parameters of the gov module. operationId: GovParams responses: - "200": + '200': description: A successful response. schema: type: object @@ -6912,7 +6906,7 @@ paths: QueryParamsResponse is the response type for the Query/Params RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -7117,7 +7111,7 @@ paths: summary: Proposals queries all proposals based on given status. operationId: Proposals responses: - "200": + '200': description: A successful response. schema: type: object @@ -7335,11 +7329,11 @@ paths: final_tally_result: type: object properties: - "yes": + 'yes': type: string abstain: type: string - "no": + 'no': type: string no_with_veto: type: string @@ -7403,7 +7397,7 @@ paths: method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -7674,15 +7668,14 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/gov/v1beta1/proposals/{proposal_id}": + '/cosmos/gov/v1beta1/proposals/{proposal_id}': get: summary: Proposal queries proposal details based on ProposalID. operationId: Proposal responses: - "200": + '200': description: A successful response. schema: type: object @@ -7896,11 +7889,11 @@ paths: final_tally_result: type: object properties: - "yes": + 'yes': type: string abstain: type: string - "no": + 'no': type: string no_with_veto: type: string @@ -7943,7 +7936,7 @@ paths: QueryProposalResponse is the response type for the Query/Proposal RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -8140,12 +8133,12 @@ paths: format: uint64 tags: - Query - "/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits": + '/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits': get: summary: Deposits queries all deposits of a single proposal. operationId: Deposits responses: - "200": + '200': description: A successful response. schema: type: object @@ -8205,7 +8198,7 @@ paths: QueryDepositsResponse is the response type for the Query/Deposits RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -8446,17 +8439,16 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}": + '/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}': get: summary: >- Deposit queries single deposit information based proposalID, depositAddr. operationId: Deposit responses: - "200": + '200': description: A successful response. schema: type: object @@ -8491,7 +8483,7 @@ paths: QueryDepositResponse is the response type for the Query/Deposit RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -8693,12 +8685,12 @@ paths: type: string tags: - Query - "/cosmos/gov/v1beta1/proposals/{proposal_id}/tally": + '/cosmos/gov/v1beta1/proposals/{proposal_id}/tally': get: summary: TallyResult queries the tally of a proposal vote. operationId: TallyResult responses: - "200": + '200': description: A successful response. schema: type: object @@ -8707,11 +8699,11 @@ paths: description: tally defines the requested tally. type: object properties: - "yes": + 'yes': type: string abstain: type: string - "no": + 'no': type: string no_with_veto: type: string @@ -8719,7 +8711,7 @@ paths: QueryTallyResultResponse is the response type for the Query/Tally RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -8916,12 +8908,12 @@ paths: format: uint64 tags: - Query - "/cosmos/gov/v1beta1/proposals/{proposal_id}/votes": + '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes': get: summary: Votes queries votes of a given proposal. operationId: Votes responses: - "200": + '200': description: A successful response. schema: type: object @@ -8982,7 +8974,7 @@ paths: QueryVotesResponse is the response type for the Query/Votes RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -9223,15 +9215,14 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}": + '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}': get: - summary: "Vote queries voted information based on proposalID, voterAddr." + summary: 'Vote queries voted information based on proposalID, voterAddr.' operationId: Vote responses: - "200": + '200': description: A successful response. schema: type: object @@ -9267,7 +9258,7 @@ paths: QueryVoteResponse is the response type for the Query/Vote RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -9474,7 +9465,7 @@ paths: summary: AnnualProvisions current minting annual provisions value. operationId: AnnualProvisions responses: - "200": + '200': description: A successful response. schema: type: object @@ -9489,7 +9480,7 @@ paths: QueryAnnualProvisionsResponse is the response type for the Query/AnnualProvisions RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -9517,7 +9508,7 @@ paths: summary: Inflation returns the current minting inflation value. operationId: Inflation responses: - "200": + '200': description: A successful response. schema: type: object @@ -9532,7 +9523,7 @@ paths: method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -9560,7 +9551,7 @@ paths: summary: Params returns the total set of minting parameters. operationId: MintParams responses: - "200": + '200': description: A successful response. schema: type: object @@ -9592,7 +9583,7 @@ paths: QueryParamsResponse is the response type for the Query/Params RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -9622,7 +9613,7 @@ paths: key. operationId: Params responses: - "200": + '200': description: A successful response. schema: type: object @@ -9641,7 +9632,7 @@ paths: QueryParamsResponse is response type for the Query/Params RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -9680,7 +9671,7 @@ paths: summary: Params queries the parameters of slashing module operationId: SlashingParams responses: - "200": + '200': description: A successful response. schema: type: object @@ -9709,7 +9700,7 @@ paths: QueryParamsResponse is the response type for the Query/Params RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -9737,7 +9728,7 @@ paths: summary: SigningInfos queries signing info of all validators operationId: SigningInfos responses: - "200": + '200': description: A successful response. schema: type: object @@ -9765,7 +9756,6 @@ paths: title: timestamp validator cannot be unjailed until tombstoned: type: boolean - format: boolean title: >- whether or not a validator has been tombstoned (killed out of validator @@ -9816,7 +9806,7 @@ paths: method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -9884,15 +9874,14 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/slashing/v1beta1/signing_infos/{cons_address}": + '/cosmos/slashing/v1beta1/signing_infos/{cons_address}': get: summary: SigningInfo queries the signing info of given cons address operationId: SigningInfo responses: - "200": + '200': description: A successful response. schema: type: object @@ -9921,7 +9910,6 @@ paths: title: timestamp validator cannot be unjailed until tombstoned: type: boolean - format: boolean title: >- whether or not a validator has been tombstoned (killed out of validator @@ -9944,7 +9932,7 @@ paths: method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -9973,14 +9961,14 @@ paths: type: string tags: - Query - "/cosmos/staking/v1beta1/delegations/{delegator_addr}": + '/cosmos/staking/v1beta1/delegations/{delegator_addr}': get: summary: >- DelegatorDelegations queries all delegations of a given delegator address. operationId: DelegatorDelegations responses: - "200": + '200': description: A successful response. schema: type: object @@ -10053,7 +10041,7 @@ paths: QueryDelegatorDelegationsResponse is response type for the Query/DelegatorDelegations RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -10071,9 +10059,176 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: delegator_addr description: delegator_addr defines the delegator address to query for. @@ -10126,15 +10281,14 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations": + '/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations': get: summary: Redelegations queries redelegations of given address. operationId: Redelegations responses: - "200": + '200': description: A successful response. schema: type: object @@ -10240,7 +10394,7 @@ paths: method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -10258,171 +10412,192 @@ paths: properties: type_url: type: string - value: - type: string - format: byte - parameters: - - name: delegator_addr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - - name: src_validator_addr - description: src_validator_addr defines the validator address to redelegate from. - in: query - required: false - type: string - - name: dst_validator_addr - description: dst_validator_addr defines the validator address to redelegate to. - in: query - required: false - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. + description: >- + A URL/resource name that uniquely identifies the type of + the serialized - It is less efficient than using key. Only one of offset or key - should + protocol buffer message. This string must contain at + least - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. + one "/" character. The last segment of the URL's path + must represent - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include + the fully qualified name of the type (as in - a count of the total number of items available for pagination in - UIs. + `path/google.protobuf.Duration`). The name should be in + a canonical form - count_total is only respected when offset is used. It is ignored - when key + (e.g., leading "." is not accepted). - is set. - in: query - required: false - type: boolean - format: boolean - tags: - - Query - "/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations": - get: - summary: >- - DelegatorUnbondingDelegations queries all unbonding delegations of a - given - delegator address. - operationId: DelegatorUnbondingDelegations - responses: - "200": - description: A successful response. - schema: - type: object - properties: - unbonding_responses: - type: array - items: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - entries: - type: array - items: - type: object - properties: - creation_height: - type: string - format: int64 - completion_time: - type: string - format: date-time - initial_balance: - type: string - balance: - type: string - description: >- - UnbondingDelegationEntry defines an unbonding object - with relevant metadata. - description: >- - UnbondingDelegation stores all of a single delegator's - unbonding bonds + In practice, teams usually precompile into the binary + all types that they - for a single validator in an time-ordered list. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + expect it to use in the context of Any. However, for + URLs which use the - was set, its value is undefined otherwise - description: >- - QueryUnbondingDelegatorDelegationsResponse is response type for - the + scheme `http`, `https`, or no scheme, one can optionally + set up a type - Query/UnbondingDelegatorDelegations RPC method. - default: - description: An unexpected error response - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: delegator_addr description: delegator_addr defines the delegator address to query for. in: path required: true type: string + - name: src_validator_addr + description: src_validator_addr defines the validator address to redelegate from. + in: query + required: false + type: string + - name: dst_validator_addr + description: dst_validator_addr defines the validator address to redelegate to. + in: query + required: false + type: string - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -10469,109 +10644,54 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators": + '/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations': get: - summary: |- - DelegatorValidators queries all validators info for given delegator - address. - operationId: StakingDelegatorValidators + summary: >- + DelegatorUnbondingDelegations queries all unbonding delegations of a + given + + delegator address. + operationId: DelegatorUnbondingDelegations responses: - "200": + '200': description: A successful response. schema: type: object properties: - validators: + unbonding_responses: type: array items: type: object properties: - operator_address: - type: string - consensus_pubkey: - type: string - jailed: - type: boolean - format: boolean - status: - type: integer - format: int32 - tokens: + delegator_address: type: string - delegator_shares: - type: string - description: - type: object - properties: - moniker: - type: string - identity: - type: string - website: - type: string - security_contact: - type: string - details: - type: string - description: Description defines a validator description. - unbonding_height: - type: string - format: int64 - unbonding_time: - type: string - format: date-time - commission: - type: object - properties: - commission_rates: - type: object - properties: - rate: - type: string - max_rate: - type: string - max_change_rate: - type: string - description: >- - CommissionRates defines the initial commission rates - to be used for creating - - a validator. - update_time: - type: string - format: date-time - description: >- - Commission defines commission parameters for a given - validator. - min_self_delegation: + validator_address: type: string + entries: + type: array + items: + type: object + properties: + creation_height: + type: string + format: int64 + completion_time: + type: string + format: date-time + initial_balance: + type: string + balance: + type: string + description: >- + UnbondingDelegationEntry defines an unbonding object + with relevant metadata. description: >- - Validator defines a validator, together with the total - amount of the - - Validator's bond shares and their exchange rate to coins. - Slashing results in - - a decrease in the exchange rate, allowing correct - calculation of future - - undelegations without iterating over delegators. When coins - are delegated to - - this validator, the validator is credited with a delegation - whose number of - - bond shares is based on the amount of coins delegated - divided by the current - - exchange rate. Voting power can be calculated as total - bonded shares + UnbondingDelegation stores all of a single delegator's + unbonding bonds - multiplied by exchange rate. - description: validators defines the the validators' info of a delegator. + for a single validator in an time-ordered list. pagination: description: pagination defines the pagination in the response. type: object @@ -10590,11 +10710,13 @@ paths: PageRequest.count_total was set, its value is undefined otherwise - description: |- - QueryDelegatorValidatorsResponse is response type for the - Query/DelegatorValidators RPC method. + description: >- + QueryUnbondingDelegatorDelegationsResponse is response type for + the + + Query/UnbondingDelegatorDelegations RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -10612,9 +10734,176 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: delegator_addr description: delegator_addr defines the delegator address to query for. @@ -10667,17 +10956,566 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - ? "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}" - : get: + '/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators': + get: summary: |- - DelegatorValidator queries validator info for given delegator validator - pair. + DelegatorValidators queries all validators info for given delegator + address. + operationId: StakingDelegatorValidators + responses: + '200': + description: A successful response. + schema: + type: object + properties: + validators: + type: array + items: + type: object + properties: + operator_address: + type: string + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's + path must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the + binary all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available + in the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will + yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the + regular + + representation of the deserialized, embedded message, + with an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message + [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + jailed: + type: boolean + status: + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. + tokens: + type: string + delegator_shares: + type: string + description: + type: object + properties: + moniker: + type: string + identity: + type: string + website: + type: string + security_contact: + type: string + details: + type: string + description: Description defines a validator description. + unbonding_height: + type: string + format: int64 + unbonding_time: + type: string + format: date-time + commission: + type: object + properties: + commission_rates: + type: object + properties: + rate: + type: string + max_rate: + type: string + max_change_rate: + type: string + description: >- + CommissionRates defines the initial commission rates + to be used for creating + + a validator. + update_time: + type: string + format: date-time + description: >- + Commission defines commission parameters for a given + validator. + min_self_delegation: + type: string + description: >- + Validator defines a validator, together with the total + amount of the + + Validator's bond shares and their exchange rate to coins. + Slashing results in + + a decrease in the exchange rate, allowing correct + calculation of future + + undelegations without iterating over delegators. When coins + are delegated to + + this validator, the validator is credited with a delegation + whose number of + + bond shares is based on the amount of coins delegated + divided by the current + + exchange rate. Voting power can be calculated as total + bonded shares + + multiplied by exchange rate. + description: validators defines the the validators' info of a delegator. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: |- + QueryDelegatorValidatorsResponse is response type for the + Query/DelegatorValidators RPC method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: delegator_addr + description: delegator_addr defines the delegator address to query for. + in: path + required: true + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + tags: + - Query + '/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}': + get: + summary: |- + DelegatorValidator queries validator info for given delegator validator + pair. operationId: DelegatorValidator responses: - "200": + '200': description: A successful response. schema: type: object @@ -10689,13 +11527,197 @@ paths: operator_address: type: string consensus_pubkey: - type: string + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type + of the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will + yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -10736,40 +11758,207 @@ paths: CommissionRates defines the initial commission rates to be used for creating - a validator. - update_time: - type: string - format: date-time - description: >- - Commission defines commission parameters for a given - validator. - min_self_delegation: - type: string - description: |- - QueryDelegatorValidatorResponse response type for the - Query/DelegatorValidator RPC method. - default: - description: An unexpected error response - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte + a validator. + update_time: + type: string + format: date-time + description: >- + Commission defines commission parameters for a given + validator. + min_self_delegation: + type: string + description: |- + QueryDelegatorValidatorResponse response type for the + Query/DelegatorValidator RPC method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: delegator_addr description: delegator_addr defines the delegator address to query for. @@ -10783,12 +11972,12 @@ paths: type: string tags: - Query - "/cosmos/staking/v1beta1/historical_info/{height}": + '/cosmos/staking/v1beta1/historical_info/{height}': get: summary: HistoricalInfo queries the historical info for given height. operationId: HistoricalInfo responses: - "200": + '200': description: A successful response. schema: type: object @@ -10882,13 +12071,200 @@ paths: operator_address: type: string consensus_pubkey: - type: string + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized + + protocol buffer message. This string must + contain at least + + one "/" character. The last segment of the URL's + path must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name + should be in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the + binary all types that they + + expect it to use in the context of Any. However, + for URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message + definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup + results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently + available in the official + + protobuf release, and it is not used for type + URLs beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of + the above specified type. + description: >- + `Any` contains an arbitrary serialized protocol + buffer message along with a + + URL that describes the type of the serialized + message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods + of the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will + by default use + + 'type.googleapis.com/full.type.name' as the type URL + and the unpack + + methods only use the fully qualified type name after + the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" + will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the + regular + + representation of the deserialized, embedded + message, with an + + additional field `@type` which contains the type + URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to + the `@type` + + field. Example (for message + [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -10929,65 +12305,232 @@ paths: CommissionRates defines the initial commission rates to be used for creating - a validator. - update_time: - type: string - format: date-time - description: >- - Commission defines commission parameters for a given - validator. - min_self_delegation: - type: string - description: >- - Validator defines a validator, together with the total - amount of the + a validator. + update_time: + type: string + format: date-time + description: >- + Commission defines commission parameters for a given + validator. + min_self_delegation: + type: string + description: >- + Validator defines a validator, together with the total + amount of the + + Validator's bond shares and their exchange rate to + coins. Slashing results in + + a decrease in the exchange rate, allowing correct + calculation of future + + undelegations without iterating over delegators. When + coins are delegated to + + this validator, the validator is credited with a + delegation whose number of + + bond shares is based on the amount of coins delegated + divided by the current + + exchange rate. Voting power can be calculated as total + bonded shares + + multiplied by exchange rate. + description: >- + QueryHistoricalInfoResponse is response type for the + Query/HistoricalInfo RPC + + method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go - Validator's bond shares and their exchange rate to - coins. Slashing results in + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - a decrease in the exchange rate, allowing correct - calculation of future + The pack methods provided by protobuf library will by + default use - undelegations without iterating over delegators. When - coins are delegated to + 'type.googleapis.com/full.type.name' as the type URL and the + unpack - this validator, the validator is credited with a - delegation whose number of + methods only use the fully qualified type name after the + last '/' - bond shares is based on the amount of coins delegated - divided by the current + in the type URL, for example "foo.bar.com/x/y.z" will yield + type - exchange rate. Voting power can be calculated as total - bonded shares + name "y.z". - multiplied by exchange rate. - description: >- - QueryHistoricalInfoResponse is response type for the - Query/HistoricalInfo RPC - method. - default: - description: An unexpected error response - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: height description: height defines at which height to query the historical info. @@ -11002,7 +12545,7 @@ paths: summary: Parameters queries the staking parameters. operationId: StakingParams responses: - "200": + '200': description: A successful response. schema: type: object @@ -11028,7 +12571,7 @@ paths: QueryParamsResponse is response type for the Query/Params RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -11046,9 +12589,176 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } tags: - Query /cosmos/staking/v1beta1/pool: @@ -11056,7 +12766,7 @@ paths: summary: Pool queries the pool info. operationId: Pool responses: - "200": + '200': description: A successful response. schema: type: object @@ -11071,7 +12781,7 @@ paths: type: string description: QueryPoolResponse is response type for the Query/Pool RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -11089,9 +12799,176 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } tags: - Query /cosmos/staking/v1beta1/validators: @@ -11099,7 +12976,7 @@ paths: summary: Validators queries all validators that match the given status. operationId: Validators responses: - "200": + '200': description: A successful response. schema: type: object @@ -11112,13 +12989,199 @@ paths: operator_address: type: string consensus_pubkey: - type: string + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's + path must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the + binary all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available + in the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will + yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the + regular + + representation of the deserialized, embedded message, + with an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message + [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -11214,7 +13277,7 @@ paths: QueryValidatorsResponse is response type for the Query/Validators RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -11232,9 +13295,176 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: status description: status enables to query for validators matching a given status. @@ -11287,15 +13517,14 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/staking/v1beta1/validators/{validator_addr}": + '/cosmos/staking/v1beta1/validators/{validator_addr}': get: summary: Validator queries validator info for given validator address. operationId: Validator responses: - "200": + '200': description: A successful response. schema: type: object @@ -11307,377 +13536,251 @@ paths: operator_address: type: string consensus_pubkey: - type: string - jailed: - type: boolean - format: boolean - status: - type: integer - format: int32 - tokens: - type: string - delegator_shares: - type: string - description: type: object properties: - moniker: - type: string - identity: - type: string - website: - type: string - security_contact: - type: string - details: + type_url: type: string - description: Description defines a validator description. - unbonding_height: - type: string - format: int64 - unbonding_time: - type: string - format: date-time - commission: - type: object - properties: - commission_rates: - type: object - properties: - rate: - type: string - max_rate: - type: string - max_change_rate: - type: string description: >- - CommissionRates defines the initial commission rates - to be used for creating + A URL/resource name that uniquely identifies the type + of the serialized - a validator. - update_time: + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: type: string - format: date-time + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. description: >- - Commission defines commission parameters for a given - validator. - min_self_delegation: - type: string - title: >- - QueryValidatorResponse is response type for the Query/Validator - RPC method - default: - description: An unexpected error response - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: validator_addr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - tags: - - Query - "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations": - get: - summary: ValidatorDelegations queries delegate info for given validator. - operationId: ValidatorDelegations - responses: - "200": - description: A successful response. - schema: - type: object - properties: - delegation_responses: - type: array - items: - type: object - properties: - delegation: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - shares: - type: string - description: >- - Delegation represents the bond with tokens held by an - account. It is + `Any` contains an arbitrary serialized protocol buffer + message along with a - owned by one delegator, and is associated with the - voting power of one + URL that describes the type of the serialized message. - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' - NOTE: The amount field is an Int which implements the - custom method + in the type URL, for example "foo.bar.com/x/y.z" will + yield type - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that - it contains a + name "y.z". - balance in addition to shares which is more suitable for - client responses. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - was set, its value is undefined otherwise - title: |- - QueryValidatorDelegationsResponse is response type for the - Query/ValidatorDelegations RPC method - default: - description: An unexpected error response - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: validator_addr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - It is less efficient than using key. Only one of offset or key - should + JSON - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. + ==== - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include + The JSON representation of an `Any` value uses the regular - a count of the total number of items available for pagination in - UIs. + representation of the deserialized, embedded message, with + an - count_total is only respected when offset is used. It is ignored - when key + additional field `@type` which contains the type URL. + Example: - is set. - in: query - required: false - type: boolean - format: boolean - tags: - - Query - ? "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}" - : get: - summary: Delegation queries delegate info for given validator delegator pair. - operationId: Delegation - responses: - "200": - description: A successful response. - schema: - type: object - properties: - delegation_response: - description: >- - delegation_responses defines the delegation info of a - delegation. - type: object - properties: - delegation: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - shares: - type: string - description: >- - Delegation represents the bond with tokens held by an - account. It is + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - owned by one delegator, and is associated with the voting - power of one + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + If the embedded message type is well-known and has a + custom JSON + representation, that representation will be embedded + adding a field - NOTE: The amount field is an Int which implements the - custom method + `value` which holds the custom JSON in addition to the + `@type` - signatures required by gogoproto. - description: >- - QueryDelegationResponse is response type for the Query/Delegation - RPC method. - default: - description: An unexpected error response - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: validator_addr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - - name: delegator_addr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - tags: - - Query - ? "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation" - : get: - summary: |- - UnbondingDelegation queries unbonding info for given validator delegator - pair. - operationId: UnbondingDelegation - responses: - "200": - description: A successful response. - schema: - type: object - properties: - unbond: - description: unbond defines the unbonding information of a delegation. - type: object - properties: - delegator_address: + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + jailed: + type: boolean + status: type: string - validator_address: + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. + tokens: type: string - entries: - type: array - items: - type: object - properties: - creation_height: - type: string - format: int64 - completion_time: - type: string - format: date-time - initial_balance: - type: string - balance: - type: string - description: >- - UnbondingDelegationEntry defines an unbonding object - with relevant metadata. - description: >- - QueryDelegationResponse is response type for the - Query/UnbondingDelegation + delegator_shares: + type: string + description: + type: object + properties: + moniker: + type: string + identity: + type: string + website: + type: string + security_contact: + type: string + details: + type: string + description: Description defines a validator description. + unbonding_height: + type: string + format: int64 + unbonding_time: + type: string + format: date-time + commission: + type: object + properties: + commission_rates: + type: object + properties: + rate: + type: string + max_rate: + type: string + max_change_rate: + type: string + description: >- + CommissionRates defines the initial commission rates + to be used for creating - RPC method. + a validator. + update_time: + type: string + format: date-time + description: >- + Commission defines commission parameters for a given + validator. + min_self_delegation: + type: string + title: >- + QueryValidatorResponse is response type for the Query/Validator + RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -11695,66 +13798,237 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: validator_addr description: validator_addr defines the validator address to query for. in: path required: true type: string - - name: delegator_addr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string tags: - Query - "/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations": + '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations': get: - summary: >- - ValidatorUnbondingDelegations queries unbonding delegations of a - validator. - operationId: ValidatorUnbondingDelegations + summary: ValidatorDelegations queries delegate info for given validator. + operationId: ValidatorDelegations responses: - "200": + '200': description: A successful response. schema: type: object properties: - unbonding_responses: + delegation_responses: type: array items: type: object properties: - delegator_address: - type: string - validator_address: - type: string - entries: - type: array - items: - type: object - properties: - creation_height: - type: string - format: int64 - completion_time: - type: string - format: date-time - initial_balance: - type: string - balance: - type: string - description: >- - UnbondingDelegationEntry defines an unbonding object - with relevant metadata. + delegation: + type: object + properties: + delegator_address: + type: string + validator_address: + type: string + shares: + type: string + description: >- + Delegation represents the bond with tokens held by an + account. It is + + owned by one delegator, and is associated with the + voting power of one + + validator. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. description: >- - UnbondingDelegation stores all of a single delegator's - unbonding bonds + DelegationResponse is equivalent to Delegation except that + it contains a - for a single validator in an time-ordered list. + balance in addition to shares which is more suitable for + client responses. pagination: description: pagination defines the pagination in the response. type: object @@ -11773,13 +14047,11 @@ paths: PageRequest.count_total was set, its value is undefined otherwise - description: >- - QueryValidatorUnbondingDelegationsResponse is response type for - the - - Query/ValidatorUnbondingDelegations RPC method. + title: |- + QueryValidatorDelegationsResponse is response type for the + Query/ValidatorDelegations RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -11797,9 +14069,176 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: validator_addr description: validator_addr defines the validator address to query for. @@ -11852,30 +14291,61 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/cosmos/upgrade/v1beta1/applied_plan/{name}": + '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}': get: - summary: AppliedPlan queries a previously applied upgrade plan by its name. - operationId: AppliedPlan + summary: Delegation queries delegate info for given validator delegator pair. + operationId: Delegation responses: - "200": + '200': description: A successful response. schema: type: object properties: - height: - type: string - format: int64 - description: height is the block height at which the plan was applied. - description: >- - QueryAppliedPlanResponse is the response type for the - Query/AppliedPlan RPC + delegation_response: + description: >- + delegation_responses defines the delegation info of a + delegation. + type: object + properties: + delegation: + type: object + properties: + delegator_address: + type: string + validator_address: + type: string + shares: + type: string + description: >- + Delegation represents the bond with tokens held by an + account. It is - method. + owned by one delegator, and is associated with the voting + power of one + + validator. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + description: >- + QueryDelegationResponse is response type for the Query/Delegation + RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -11893,82 +14363,234 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - - name: name - description: name is the name of the applied plan to query for. + - name: validator_addr + description: validator_addr defines the validator address to query for. + in: path + required: true + type: string + - name: delegator_addr + description: delegator_addr defines the delegator address to query for. in: path required: true type: string tags: - Query - /cosmos/upgrade/v1beta1/current_plan: + '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation': get: - summary: CurrentPlan queries the current upgrade plan. - operationId: CurrentPlan + summary: |- + UnbondingDelegation queries unbonding info for given validator delegator + pair. + operationId: UnbondingDelegation responses: - "200": + '200': description: A successful response. schema: type: object properties: - plan: - description: plan is the current upgrade plan. + unbond: + description: unbond defines the unbonding information of a delegation. type: object properties: - name: - type: string - description: >- - Sets the name for the upgrade. This name will be used by - the upgraded - - version of the software to apply any special "on-upgrade" - commands during - - the first BeginBlock method after the upgrade is applied. - It is also used - - to detect whether a software version can handle a given - upgrade. If no - - upgrade handler with this name has been set in the - software, it will be - - assumed that the software is out-of-date when the upgrade - Time or Height is - - reached and the software will exit. - time: - type: string - format: date-time - description: >- - The time after which the upgrade must be performed. - - Leave set to its zero value to use a pre-defined Height - instead. - height: + delegator_address: type: string - format: int64 - description: |- - The height at which the upgrade must be performed. - Only used if Time is not set. - info: + validator_address: type: string - title: >- - Any application specific upgrade info to be included - on-chain - - such as a git commit that validators could automatically - upgrade to + entries: + type: array + items: + type: object + properties: + creation_height: + type: string + format: int64 + completion_time: + type: string + format: date-time + initial_balance: + type: string + balance: + type: string + description: >- + UnbondingDelegationEntry defines an unbonding object + with relevant metadata. description: >- - QueryCurrentPlanResponse is the response type for the - Query/CurrentPlan RPC + QueryDelegationResponse is response type for the + Query/UnbondingDelegation - method. + RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -11986,103 +14608,235 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: validator_addr + description: validator_addr defines the validator address to query for. + in: path + required: true + type: string + - name: delegator_addr + description: delegator_addr defines the delegator address to query for. + in: path + required: true + type: string tags: - Query - /ibc/channel/v1beta1/channels: + '/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations': get: - summary: Channels queries all the IBC channels of a chain. - operationId: Channels + summary: >- + ValidatorUnbondingDelegations queries unbonding delegations of a + validator. + operationId: ValidatorUnbondingDelegations responses: - "200": + '200': description: A successful response. schema: type: object properties: - channels: + unbonding_responses: type: array items: type: object properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: >- - - ORDER_NONE_UNSPECIFIED: zero-value for channel - ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - port_id: + delegator_address: type: string - title: port identifier - channel_id: + validator_address: type: string - title: channel identifier + entries: + type: array + items: + type: object + properties: + creation_height: + type: string + format: int64 + completion_time: + type: string + format: date-time + initial_balance: + type: string + balance: + type: string + description: >- + UnbondingDelegationEntry defines an unbonding object + with relevant metadata. description: >- - IdentifiedChannel defines a channel with additional port and - channel + UnbondingDelegation stores all of a single delegator's + unbonding bonds - identifier fields. - description: list of stored channels of the chain. + for a single validator in an time-ordered list. pagination: - title: pagination response + description: pagination defines the pagination in the response. type: object properties: next_key: @@ -12099,47 +14853,13 @@ paths: PageRequest.count_total was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that height - continues to - - be monitonically increasing even as the VersionHeight gets reset description: >- - QueryChannelsResponse is the response type for the Query/Channels - RPC method. + QueryValidatorUnbondingDelegationsResponse is response type for + the + + Query/ValidatorUnbondingDelegations RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -12328,6 +15048,11 @@ paths: "value": "1.212s" } parameters: + - name: validator_addr + description: validator_addr defines the validator address to query for. + in: path + required: true + type: string - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -12374,136 +15099,29 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}": + '/cosmos/upgrade/v1beta1/applied_plan/{name}': get: - summary: Channel queries an IBC Channel. - operationId: Channel + summary: AppliedPlan queries a previously applied upgrade plan by its name. + operationId: AppliedPlan responses: - "200": + '200': description: A successful response. schema: type: object properties: - channel: - title: channel associated with the request identifiers - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - description: >- - Channel defines pipeline for exactly-once packet delivery - between specific - - modules on separate blockchains, which has at least one end - capable of - - sending packets and one end capable of receiving packets. - proof: - type: string - format: byte - title: merkle proof of existence - proof_path: + height: type: string - title: merkle proof path - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that height - continues to - - be monitonically increasing even as the VersionHeight gets reset + format: int64 + description: height is the block height at which the plan was applied. description: >- - QueryChannelResponse is the response type for the Query/Channel - RPC method. - - Besides the Channel end, it includes a proof and the height from - which the + QueryAppliedPlanResponse is the response type for the + Query/AppliedPlan RPC - proof was retrieved. + method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -12679,54 +15297,99 @@ paths: If the embedded message type is well-known and has a custom JSON - representation, that representation will be embedded adding - a field + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: name + description: name is the name of the applied plan to query for. + in: path + required: true + type: string + tags: + - Query + /cosmos/upgrade/v1beta1/current_plan: + get: + summary: CurrentPlan queries the current upgrade plan. + operationId: CurrentPlan + responses: + '200': + description: A successful response. + schema: + type: object + properties: + plan: + description: plan is the current upgrade plan. + type: object + properties: + name: + type: string + description: >- + Sets the name for the upgrade. This name will be used by + the upgraded + + version of the software to apply any special "on-upgrade" + commands during + + the first BeginBlock method after the upgrade is applied. + It is also used + + to detect whether a software version can handle a given + upgrade. If no + + upgrade handler with this name has been set in the + software, it will be + + assumed that the software is out-of-date when the upgrade + Time or Height is + + reached and the software will exit. + time: + type: string + format: date-time + description: >- + The time after which the upgrade must be performed. + + Leave set to its zero value to use a pre-defined Height + instead. + height: + type: string + format: int64 + description: |- + The height at which the upgrade must be performed. + Only used if Time is not set. + info: + type: string + title: >- + Any application specific upgrade info to be included + on-chain + + such as a git commit that validators could automatically + upgrade to + upgraded_client_state: + title: >- + IBC-enabled chains can opt-in to including the upgraded + client state in its upgrade plan - `value` which holds the custom JSON in addition to the - `@type` + This will make the chain commit to the correct upgraded + (self) client state before the upgrade occurs, - field. Example (for message [google.protobuf.Duration][]): + so that connecting chains can verify that the new upgraded + client is valid by verifying a proof on the - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - tags: - - Query - "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/client_state": - get: - summary: >- - ChannelClientState queries for the client state for the channel - associated + previous version of the chain. - with the provided channel identifiers. - operationId: ChannelClientState - responses: - "200": - description: A successful response. - schema: - type: object - properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state + This will allow IBC connections to persist smoothly across + planned chain upgrades type: object properties: type_url: @@ -12901,49 +15564,13 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proof_path: - type: string - title: merkle proof path - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that height - continues to + description: >- + QueryCurrentPlanResponse is the response type for the + Query/CurrentPlan RPC - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method + method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -13131,215 +15758,128 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string tags: - Query - ? "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/consensus_state/version/{version_number}/height/{version_height}" - : get: - summary: |- - ChannelConsensusState queries for the consensus state for the channel - associated with the provided channel identifiers. - operationId: ChannelConsensusState - responses: - "200": - description: A successful response. - schema: - type: object - properties: - consensus_state: - title: consensus state associated with the channel - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: + /ibc/channel/v1beta1/channels: + get: + summary: Channels queries all the IBC channels of a chain. + operationId: Channels + responses: + '200': + description: A successful response. + schema: + type: object + properties: + channels: + type: array + items: + type: object + properties: + state: + title: current state of the channel end + type: string + enum: + - STATE_UNINITIALIZED_UNSPECIFIED + - STATE_INIT + - STATE_TRYOPEN + - STATE_OPEN + - STATE_CLOSED + default: STATE_UNINITIALIZED_UNSPECIFIED + description: >- + State defines if a channel is in one of the following + states: - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + - STATE_UNINITIALIZED_UNSPECIFIED: Default State + - STATE_INIT: A channel has just started the opening handshake. + - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. + - STATE_OPEN: A channel has completed the handshake. Open channels are + ready to send and receive packets. + - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive + packets. + ordering: + title: whether the channel is ordered or unordered + type: string + enum: + - ORDER_NONE_UNSPECIFIED + - ORDER_UNORDERED + - ORDER_ORDERED + default: ORDER_NONE_UNSPECIFIED + description: >- + - ORDER_NONE_UNSPECIFIED: zero-value for channel + ordering + - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in + which they were sent. + - ORDER_ORDERED: packets are delivered exactly in the order which they were sent + counterparty: + title: counterparty channel end + type: object + properties: + port_id: + type: string + description: >- + port on the counterparty chain which owns the other + end of the channel. + channel_id: + type: string + title: channel end on the counterparty chain + connection_hops: + type: array + items: + type: string + title: >- + list of connection identifiers, in order, along which + packets sent on - If the embedded message type is well-known and has a custom - JSON + this channel will travel + version: + type: string + title: >- + opaque channel version, which is agreed upon during the + handshake + port_id: + type: string + title: port identifier + channel_id: + type: string + title: channel identifier + description: >- + IdentifiedChannel defines a channel with additional port and + channel - representation, that representation will be embedded adding a - field + identifier fields. + description: list of stored channels of the chain. + pagination: + title: pagination response + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - `value` which holds the custom JSON in addition to the `@type` + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - field. Example (for message [google.protobuf.Duration][]): + corresponding request message has used PageRequest. - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - client_id: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_path: - type: string - title: merkle proof path - proof_height: - title: height at which the proof was retrieved + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + height: + title: query block height type: object properties: version_number: @@ -13360,15 +15900,16 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method + be monitonically increasing even as the VersionHeight gets + reset + description: >- + QueryChannelsResponse is the response type for the Query/Channels + RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -13557,53 +16098,142 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false type: string - - name: version_number - description: version number of the consensus state - in: path - required: true + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false type: string format: uint64 - - name: version_height - description: version height of the consensus state - in: path - required: true + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false type: string format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean tags: - Query - "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence": + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}': get: - summary: >- - NextSequenceReceive returns the next receive sequence for a given - channel. - operationId: NextSequenceReceive + summary: Channel queries an IBC Channel. + operationId: Channel responses: - "200": + '200': description: A successful response. schema: type: object properties: - next_sequence_receive: - type: string - format: uint64 - title: next sequence receive number + channel: + title: channel associated with the request identifiers + type: object + properties: + state: + title: current state of the channel end + type: string + enum: + - STATE_UNINITIALIZED_UNSPECIFIED + - STATE_INIT + - STATE_TRYOPEN + - STATE_OPEN + - STATE_CLOSED + default: STATE_UNINITIALIZED_UNSPECIFIED + description: >- + State defines if a channel is in one of the following + states: + + CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. + + - STATE_UNINITIALIZED_UNSPECIFIED: Default State + - STATE_INIT: A channel has just started the opening handshake. + - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. + - STATE_OPEN: A channel has completed the handshake. Open channels are + ready to send and receive packets. + - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive + packets. + ordering: + title: whether the channel is ordered or unordered + type: string + enum: + - ORDER_NONE_UNSPECIFIED + - ORDER_UNORDERED + - ORDER_ORDERED + default: ORDER_NONE_UNSPECIFIED + description: |- + - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering + - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in + which they were sent. + - ORDER_ORDERED: packets are delivered exactly in the order which they were sent + counterparty: + title: counterparty channel end + type: object + properties: + port_id: + type: string + description: >- + port on the counterparty chain which owns the other + end of the channel. + channel_id: + type: string + title: channel end on the counterparty chain + connection_hops: + type: array + items: + type: string + title: >- + list of connection identifiers, in order, along which + packets sent on + + this channel will travel + version: + type: string + title: >- + opaque channel version, which is agreed upon during the + handshake + description: >- + Channel defines pipeline for exactly-once packet delivery + between specific + + modules on separate blockchains, which has at least one end + capable of + + sending packets and one end capable of receiving packets. proof: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -13626,15 +16256,21 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset - title: |- - QuerySequenceResponse is the request type for the - Query/QueryNextSequenceReceiveResponse RPC method + be monitonically increasing even as the VersionHeight gets + reset + description: >- + QueryChannelResponse is the response type for the Query/Channel + RPC method. + + Besides the Channel end, it includes a proof and the height from + which the + + proof was retrieved. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -13801,61 +16437,246 @@ paths: string last_name = 2; } - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: channel_id + description: channel unique identifier + in: path + required: true + type: string + - name: port_id + description: port unique identifier + in: path + required: true + type: string + tags: + - Query + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/client_state': + get: + summary: >- + ChannelClientState queries for the client state for the channel + associated + + with the provided channel identifiers. + operationId: ChannelClientState + responses: + '200': + description: A successful response. + schema: + type: object + properties: + identified_client_state: + title: client state associated with the channel + type: object + properties: + client_id: + type: string + title: client identifier + client_state: + title: client state + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type + of the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will + yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON - If the embedded message type is well-known and has a custom - JSON + representation, that representation will be embedded + adding a field - representation, that representation will be embedded adding - a field + `value` which holds the custom JSON in addition to the + `@type` - `value` which holds the custom JSON in addition to the - `@type` + field. Example (for message [google.protobuf.Duration][]): - field. Example (for message [google.protobuf.Duration][]): + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + description: >- + IdentifiedClientState defines a client state with an + additional client - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - tags: - - Query - ? "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}" - : get: - summary: PacketAcknowledgement queries a stored packet acknowledgement hash. - operationId: PacketAcknowledgement - responses: - "200": - description: A successful response. - schema: - type: object - properties: - acknowledgement: - type: string - format: byte - title: packet associated with the request fields + identifier field. proof: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -13878,20 +16699,16 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to - - be monitonically increasing even as the VersionHeight gets reset - title: >- - QueryPacketAcknowledgementResponse defines the client query - response for a - - packet which also includes a proof, its path and the height form - which the + In these cases, the version number is incremented so that + height continues to - proof was retrieved + be monitonically increasing even as the VersionHeight gets + reset + title: |- + QueryChannelClientStateResponse is the Response type for the + Query/QueryChannelClientState RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -14090,82 +16907,201 @@ paths: in: path required: true type: string - - name: sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 tags: - Query - ? "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments" - : get: - summary: >- - PacketCommitments returns the all the packet commitments hashes - associated - - with a channel. - operationId: PacketCommitments + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/consensus_state/version/{version_number}/height/{version_height}': + get: + summary: |- + ChannelConsensusState queries for the consensus state for the channel + associated with the provided channel identifiers. + operationId: ChannelConsensusState responses: - "200": + '200': description: A successful response. schema: type: object properties: - commitments: - type: array - items: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - hash: - type: string - format: byte - description: packet commitment hash. - description: >- - PacketAckCommitment defines the genesis type necessary to - retrieve and store + consensus_state: + title: consensus state associated with the channel + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - acknowlegements. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the + If the embedded message type is well-known and has a custom + JSON - corresponding request message has used PageRequest. + representation, that representation will be embedded adding a + field - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + client_id: + type: string + title: client ID associated with the consensus state + proof: + type: string + format: byte + title: merkle proof of existence + proof_height: + title: height at which the proof was retrieved type: object properties: version_number: @@ -14186,15 +17122,16 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset + be monitonically increasing even as the VersionHeight gets + reset title: |- - QueryPacketCommitmentsResponse is the request type for the - Query/QueryPacketCommitments RPC method + QueryChannelClientStateResponse is the Response type for the + Query/QueryChannelClientState RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -14393,77 +17330,42 @@ paths: in: path required: true type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false + - name: version_number + description: version number of the consensus state + in: path + required: true type: string format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false + - name: version_height + description: version height of the consensus state + in: path + required: true type: string format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - format: boolean tags: - Query - ? "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets" - : get: + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence': + get: summary: >- - UnreceivedPackets returns all the unrelayed IBC packets associated with - a - - channel and sequences. - operationId: UnreceivedPackets + NextSequenceReceive returns the next receive sequence for a given + channel. + operationId: NextSequenceReceive responses: - "200": + '200': description: A successful response. schema: type: object properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived packet sequences - height: - title: query block height + next_sequence_receive: + type: string + format: uint64 + title: next sequence receive number + proof: + type: string + format: byte + title: merkle proof of existence + proof_height: + title: height at which the proof was retrieved type: object properties: version_number: @@ -14484,15 +17386,16 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset + be monitonically increasing even as the VersionHeight gets + reset title: |- - QueryUnreceivedPacketsResponse is the response type for the - Query/UnreceivedPacketCommitments RPC method + QuerySequenceResponse is the request type for the + Query/QueryNextSequenceReceiveResponse RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -14691,38 +17594,79 @@ paths: in: path required: true type: string - - name: packet_commitment_sequences - description: list of packet sequences - in: path - required: true - type: array - items: - type: string - format: uint64 - collectionFormat: csv - minItems: 1 tags: - Query - ? "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unrelayed_acks" - : get: + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements': + get: summary: >- - UnrelayedAcks returns all the unrelayed IBC acknowledgements associated - with a + PacketAcknowledgements returns all the packet acknowledgements + associated - channel and sequences. - operationId: UnrelayedAcks + with a channel. + operationId: PacketAcknowledgements responses: - "200": + '200': description: A successful response. schema: type: object properties: - sequences: + acknowledgements: type: array items: - type: string - format: uint64 - title: list of unrelayed acknowledgement sequences + type: object + properties: + port_id: + type: string + description: channel port identifier. + channel_id: + type: string + description: channel unique identifier. + sequence: + type: string + format: uint64 + description: packet sequence. + data: + type: string + format: byte + description: embedded data that represents packet state. + description: >- + PacketState defines the generic type necessary to retrieve + and store + + packet commitments, acknowledgements, and receipts. + + Caller is responsible for knowing the context necessary to + interpret this + + state as a commitment, acknowledgement, or a receipt. + pagination: + title: pagination response + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the + + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } height: title: query block height type: object @@ -14745,15 +17689,16 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset + be monitonically increasing even as the VersionHeight gets + reset title: |- - QueryUnrelayedAcksResponse is the response type for the - Query/UnrelayedAcks RPC method + QueryPacketAcknowledgemetsResponse is the request type for the + Query/QueryPacketAcknowledgements RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -14932,49 +17877,85 @@ paths: representation, that representation will be embedded adding a field - `value` which holds the custom JSON in addition to the - `@type` + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: channel_id + description: channel unique identifier + in: path + required: true + type: string + - name: port_id + description: port unique identifier + in: path + required: true + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. - field. Example (for message [google.protobuf.Duration][]): + count_total is only respected when offset is used. It is ignored + when key - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: packet_commitment_sequences - description: list of commitment sequences - in: path - required: true - type: array - items: - type: string - format: uint64 - collectionFormat: csv - minItems: 1 + is set. + in: query + required: false + type: boolean tags: - Query - ? "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}" - : get: - summary: PacketCommitment queries a stored packet commitment hash. - operationId: PacketCommitment + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}': + get: + summary: PacketAcknowledgement queries a stored packet acknowledgement hash. + operationId: PacketAcknowledgement responses: - "200": + '200': description: A successful response. schema: type: object properties: - commitment: + acknowledgement: type: string format: byte title: packet associated with the request fields @@ -14982,9 +17963,6 @@ paths: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -15007,20 +17985,20 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset + be monitonically increasing even as the VersionHeight gets + reset title: >- - QueryPacketCommitmentResponse defines the client query response - for a packet + QueryPacketAcknowledgementResponse defines the client query + response for a - which also includes a proof, its path and the height form which - the proof was + packet which also includes a proof and the height from which the - retrieved + proof was retrieved default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -15227,98 +18205,47 @@ paths: format: uint64 tags: - Query - "/ibc/channel/v1beta1/connections/{connection}/channels": + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments': get: summary: |- - ConnectionChannels queries all the channels associated with a connection - end. - operationId: ConnectionChannels + PacketCommitments returns all the packet commitments hashes associated + with a channel. + operationId: PacketCommitments responses: - "200": + '200': description: A successful response. schema: type: object properties: - channels: + commitments: type: array items: type: object properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: >- - - ORDER_NONE_UNSPECIFIED: zero-value for channel - ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake port_id: type: string - title: port identifier + description: channel port identifier. channel_id: type: string - title: channel identifier + description: channel unique identifier. + sequence: + type: string + format: uint64 + description: packet sequence. + data: + type: string + format: byte + description: embedded data that represents packet state. description: >- - IdentifiedChannel defines a channel with additional port and - channel + PacketState defines the generic type necessary to retrieve + and store - identifier fields. - description: list of channels associated with a connection. + packet commitments, acknowledgements, and receipts. + + Caller is responsible for knowing the context necessary to + interpret this + + state as a commitment, acknowledgement, or a receipt. pagination: title: pagination response type: object @@ -15369,15 +18296,16 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset + be monitonically increasing even as the VersionHeight gets + reset title: |- - QueryConnectionChannelsResponse is the Response type for the - Query/QueryConnectionChannels RPC method + QueryPacketCommitmentsResponse is the request type for the + Query/QueryPacketCommitments RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -15566,8 +18494,13 @@ paths: "value": "1.212s" } parameters: - - name: connection - description: connection unique identifier + - name: channel_id + description: channel unique identifier + in: path + required: true + type: string + - name: port_id + description: port unique identifier in: path required: true type: string @@ -15617,246 +18550,322 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - /ibc/client/v1beta1/client_states: + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks': get: - summary: ClientStates queries all the IBC light clients of a chain. - operationId: ClientStates + summary: >- + UnreceivedAcks returns all the unreceived IBC acknowledgements + associated with a + + channel and sequences. + operationId: UnreceivedAcks responses: - "200": + '200': description: A successful response. schema: type: object properties: - client_states: + sequences: + type: array + items: + type: string + format: uint64 + title: list of unreceived acknowledgement sequences + height: + title: query block height + type: object + properties: + version_number: + type: string + format: uint64 + title: the version that the client is currently on + version_height: + type: string + format: uint64 + title: the height within the given version + description: >- + Normally the VersionHeight is incremented at each height while + keeping version + + number the same However some consensus algorithms may choose + to reset the + + height in certain conditions e.g. hard forks, state-machine + breaking changes + + In these cases, the version number is incremented so that + height continues to + + be monitonically increasing even as the VersionHeight gets + reset + title: |- + QueryUnreceivedAcksResponse is the response type for the + Query/UnreceivedAcks RPC method + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: type: array items: type: object properties: - client_id: + type_url: type: string - title: client identifier - client_state: - title: client state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized + description: >- + A URL/resource name that uniquely identifies the type of + the serialized - protocol buffer message. This string must contain at - least + protocol buffer message. This string must contain at + least - one "/" character. The last segment of the URL's - path must represent + one "/" character. The last segment of the URL's path + must represent - the fully qualified name of the type (as in + the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be - in a canonical form + `path/google.protobuf.Duration`). The name should be in + a canonical form - (e.g., leading "." is not accepted). + (e.g., leading "." is not accepted). - In practice, teams usually precompile into the - binary all types that they + In practice, teams usually precompile into the binary + all types that they - expect it to use in the context of Any. However, for - URLs which use the + expect it to use in the context of Any. However, for + URLs which use the - scheme `http`, `https`, or no scheme, one can - optionally set up a type + scheme `http`, `https`, or no scheme, one can optionally + set up a type - server that maps type URLs to message definitions as - follows: + server that maps type URLs to message definitions as + follows: - * If no scheme is provided, `https` is assumed. + * If no scheme is provided, `https` is assumed. - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Note: this functionality is not currently available - in the official + Note: this functionality is not currently available in + the official - protobuf release, and it is not used for type URLs - beginning with + protobuf release, and it is not used for type URLs + beginning with - type.googleapis.com. + type.googleapis.com. - Schemes other than `http`, `https` (or the empty - scheme) might be + Schemes other than `http`, `https` (or the empty scheme) + might be - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. + used with implementation specific semantics. + value: + type: string + format: byte description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a - URL that describes the type of the serialized message. + URL that describes the type of the serialized message. - Protobuf library provides support to pack/unpack Any - values in the form + Protobuf library provides support to pack/unpack Any values + in the form - of utility functions or additional generated methods of - the Any type. + of utility functions or additional generated methods of the + Any type. - Example 1: Pack and unpack a message in C++. + Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - Example 2: Pack and unpack a message in Java. + Example 2: Pack and unpack a message in Java. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Example 3: Pack and unpack a message in Python. + Example 3: Pack and unpack a message in Python. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - Example 4: Pack and unpack a message in Go + Example 4: Pack and unpack a message in Go - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - The pack methods provided by protobuf library will by - default use + The pack methods provided by protobuf library will by + default use - 'type.googleapis.com/full.type.name' as the type URL and - the unpack + 'type.googleapis.com/full.type.name' as the type URL and the + unpack - methods only use the fully qualified type name after the - last '/' + methods only use the fully qualified type name after the + last '/' - in the type URL, for example "foo.bar.com/x/y.z" will - yield type + in the type URL, for example "foo.bar.com/x/y.z" will yield + type - name "y.z". + name "y.z". - JSON + JSON - ==== + ==== - The JSON representation of an `Any` value uses the - regular + The JSON representation of an `Any` value uses the regular - representation of the deserialized, embedded message, - with an + representation of the deserialized, embedded message, with + an - additional field `@type` which contains the type URL. - Example: + additional field `@type` which contains the type URL. + Example: - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - If the embedded message type is well-known and has a - custom JSON + If the embedded message type is well-known and has a custom + JSON - representation, that representation will be embedded - adding a field + representation, that representation will be embedded adding + a field - `value` which holds the custom JSON in addition to the - `@type` + `value` which holds the custom JSON in addition to the + `@type` - field. Example (for message - [google.protobuf.Duration][]): + field. Example (for message [google.protobuf.Duration][]): - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - IdentifiedClientState defines a client state with an - additional client + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: channel_id + description: channel unique identifier + in: path + required: true + type: string + - name: port_id + description: port unique identifier + in: path + required: true + type: string + - name: packet_ack_sequences + description: list of acknowledgement sequences + in: path + required: true + type: array + items: + type: string + format: uint64 + collectionFormat: csv + minItems: 1 + tags: + - Query + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets': + get: + summary: >- + UnreceivedPackets returns all the unreceived IBC packets associated with + a - identifier field. - description: list of stored ClientStates of the chain. - pagination: - title: pagination response + channel and sequences. + operationId: UnreceivedPackets + responses: + '200': + description: A successful response. + schema: + type: object + properties: + sequences: + type: array + items: + type: string + format: uint64 + title: list of unreceived packet sequences + height: + title: query block height type: object properties: - next_key: + version_number: type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: + format: uint64 + title: the version that the client is currently on + version_height: type: string format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise + title: the height within the given version description: >- - PageResponse is to be embedded in gRPC response messages where - the + Normally the VersionHeight is incremented at each height while + keeping version + + number the same However some consensus algorithms may choose + to reset the - corresponding request message has used PageRequest. + height in certain conditions e.g. hard forks, state-machine + breaking changes - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - description: >- - QueryClientStatesResponse is the response type for the - Query/ClientStates RPC + In these cases, the version number is incremented so that + height continues to - method. + be monitonically increasing even as the VersionHeight gets + reset + title: |- + QueryUnreceivedPacketsResponse is the response type for the + Query/UnreceivedPacketCommitments RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -16045,244 +19054,46 @@ paths: "value": "1.212s" } parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false + - name: channel_id + description: channel unique identifier + in: path + required: true type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false + - name: port_id + description: port unique identifier + in: path + required: true type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - format: boolean + - name: packet_commitment_sequences + description: list of packet sequences + in: path + required: true + type: array + items: + type: string + format: uint64 + collectionFormat: csv + minItems: 1 tags: - Query - "/ibc/client/v1beta1/client_states/{client_id}": + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}': get: - summary: ClientState queries an IBC light client. - operationId: ClientState - responses: - "200": - description: A successful response. - schema: - type: object - properties: - client_state: - title: client state associated with the request identifier - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + summary: PacketCommitment queries a stored packet commitment hash. + operationId: PacketCommitment + responses: + '200': + description: A successful response. + schema: + type: object + properties: + commitment: + type: string + format: byte + title: packet associated with the request fields proof: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -16305,20 +19116,21 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset - description: >- - QueryClientStateResponse is the response type for the - Query/ClientState RPC + be monitonically increasing even as the VersionHeight gets + reset + title: >- + QueryPacketCommitmentResponse defines the client query response + for a packet - method. Besides the client state, it includes a proof and the - height from + which also includes a proof and the height from which the proof + was - which the proof was retrieved. + retrieved default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -16507,239 +19319,378 @@ paths: "value": "1.212s" } parameters: - - name: client_id - description: client state unique identifier + - name: channel_id + description: channel unique identifier + in: path + required: true + type: string + - name: port_id + description: port unique identifier + in: path + required: true + type: string + - name: sequence + description: packet sequence in: path required: true type: string + format: uint64 tags: - Query - "/ibc/client/v1beta1/consensus_states/{client_id}": + '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}': get: - summary: |- - ConsensusStates queries all the consensus state associated with a given - client. - operationId: ConsensusStates + summary: >- + PacketReceipt queries if a given packet sequence has been received on + the queried chain + operationId: PacketReceipt responses: - "200": + '200': description: A successful response. schema: type: object properties: - consensus_states: + received: + type: boolean + title: success flag for if receipt exists + proof: + type: string + format: byte + title: merkle proof of existence + proof_height: + title: height at which the proof was retrieved + type: object + properties: + version_number: + type: string + format: uint64 + title: the version that the client is currently on + version_height: + type: string + format: uint64 + title: the height within the given version + description: >- + Normally the VersionHeight is incremented at each height while + keeping version + + number the same However some consensus algorithms may choose + to reset the + + height in certain conditions e.g. hard forks, state-machine + breaking changes + + In these cases, the version number is incremented so that + height continues to + + be monitonically increasing even as the VersionHeight gets + reset + title: >- + QueryPacketReceiptResponse defines the client query response for a + packet receipt + + which also includes a proof, and the height from which the proof + was + + retrieved + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: type: array items: type: object properties: - height: - title: consensus state height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version + type_url: + type: string description: >- - Normally the VersionHeight is incremented at each height - while keeping version - - number the same However some consensus algorithms may - choose to reset the + A URL/resource name that uniquely identifies the type of + the serialized - height in certain conditions e.g. hard forks, - state-machine breaking changes + protocol buffer message. This string must contain at + least - In these cases, the version number is incremented so that - height continues to + one "/" character. The last segment of the URL's path + must represent - be monitonically increasing even as the VersionHeight gets - reset - consensus_state: - title: consensus state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized + the fully qualified name of the type (as in - protocol buffer message. This string must contain at - least + `path/google.protobuf.Duration`). The name should be in + a canonical form - one "/" character. The last segment of the URL's - path must represent + (e.g., leading "." is not accepted). - the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be - in a canonical form + In practice, teams usually precompile into the binary + all types that they - (e.g., leading "." is not accepted). + expect it to use in the context of Any. However, for + URLs which use the + scheme `http`, `https`, or no scheme, one can optionally + set up a type - In practice, teams usually precompile into the - binary all types that they + server that maps type URLs to message definitions as + follows: - expect it to use in the context of Any. However, for - URLs which use the - scheme `http`, `https`, or no scheme, one can - optionally set up a type + * If no scheme is provided, `https` is assumed. - server that maps type URLs to message definitions as - follows: + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + Note: this functionality is not currently available in + the official - * If no scheme is provided, `https` is assumed. + protobuf release, and it is not used for type URLs + beginning with - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + type.googleapis.com. - Note: this functionality is not currently available - in the official - protobuf release, and it is not used for type URLs - beginning with + Schemes other than `http`, `https` (or the empty scheme) + might be - type.googleapis.com. + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + URL that describes the type of the serialized message. - Schemes other than `http`, `https` (or the empty - scheme) might be - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a + Protobuf library provides support to pack/unpack Any values + in the form - URL that describes the type of the serialized message. + of utility functions or additional generated methods of the + Any type. - Protobuf library provides support to pack/unpack Any - values in the form + Example 1: Pack and unpack a message in C++. - of utility functions or additional generated methods of - the Any type. + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + Example 2: Pack and unpack a message in Java. - Example 1: Pack and unpack a message in C++. + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Example 3: Pack and unpack a message in Python. - Example 2: Pack and unpack a message in Java. + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Example 4: Pack and unpack a message in Go - Example 3: Pack and unpack a message in Python. + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + The pack methods provided by protobuf library will by + default use - Example 4: Pack and unpack a message in Go + 'type.googleapis.com/full.type.name' as the type URL and the + unpack - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + methods only use the fully qualified type name after the + last '/' - The pack methods provided by protobuf library will by - default use + in the type URL, for example "foo.bar.com/x/y.z" will yield + type - 'type.googleapis.com/full.type.name' as the type URL and - the unpack + name "y.z". - methods only use the fully qualified type name after the - last '/' - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - name "y.z". + JSON + ==== + The JSON representation of an `Any` value uses the regular - JSON + representation of the deserialized, embedded message, with + an - ==== + additional field `@type` which contains the type URL. + Example: - The JSON representation of an `Any` value uses the - regular + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - representation of the deserialized, embedded message, - with an + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - additional field `@type` which contains the type URL. - Example: + If the embedded message type is well-known and has a custom + JSON - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + representation, that representation will be embedded adding + a field - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + `value` which holds the custom JSON in addition to the + `@type` - If the embedded message type is well-known and has a - custom JSON + field. Example (for message [google.protobuf.Duration][]): - representation, that representation will be embedded - adding a field + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: channel_id + description: channel unique identifier + in: path + required: true + type: string + - name: port_id + description: port unique identifier + in: path + required: true + type: string + - name: sequence + description: packet sequence + in: path + required: true + type: string + format: uint64 + tags: + - Query + '/ibc/channel/v1beta1/connections/{connection}/channels': + get: + summary: |- + ConnectionChannels queries all the channels associated with a connection + end. + operationId: ConnectionChannels + responses: + '200': + description: A successful response. + schema: + type: object + properties: + channels: + type: array + items: + type: object + properties: + state: + title: current state of the channel end + type: string + enum: + - STATE_UNINITIALIZED_UNSPECIFIED + - STATE_INIT + - STATE_TRYOPEN + - STATE_OPEN + - STATE_CLOSED + default: STATE_UNINITIALIZED_UNSPECIFIED + description: >- + State defines if a channel is in one of the following + states: - `value` which holds the custom JSON in addition to the - `@type` + CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - field. Example (for message - [google.protobuf.Duration][]): + - STATE_UNINITIALIZED_UNSPECIFIED: Default State + - STATE_INIT: A channel has just started the opening handshake. + - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. + - STATE_OPEN: A channel has completed the handshake. Open channels are + ready to send and receive packets. + - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive + packets. + ordering: + title: whether the channel is ordered or unordered + type: string + enum: + - ORDER_NONE_UNSPECIFIED + - ORDER_UNORDERED + - ORDER_ORDERED + default: ORDER_NONE_UNSPECIFIED + description: >- + - ORDER_NONE_UNSPECIFIED: zero-value for channel + ordering + - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in + which they were sent. + - ORDER_ORDERED: packets are delivered exactly in the order which they were sent + counterparty: + title: counterparty channel end + type: object + properties: + port_id: + type: string + description: >- + port on the counterparty chain which owns the other + end of the channel. + channel_id: + type: string + title: channel end on the counterparty chain + connection_hops: + type: array + items: + type: string + title: >- + list of connection identifiers, in order, along which + packets sent on - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + this channel will travel + version: + type: string + title: >- + opaque channel version, which is agreed upon during the + handshake + port_id: + type: string + title: port identifier + channel_id: + type: string + title: channel identifier description: >- - ConsensusStateWithHeight defines a consensus state with an - additional height field. - title: consensus states associated with the identifier + IdentifiedChannel defines a channel with additional port and + channel + + identifier fields. + description: list of channels associated with a connection. pagination: title: pagination response type: object @@ -16768,11 +19719,38 @@ paths: repeated Bar results = 1; PageResponse page = 2; } + height: + title: query block height + type: object + properties: + version_number: + type: string + format: uint64 + title: the version that the client is currently on + version_height: + type: string + format: uint64 + title: the height within the given version + description: >- + Normally the VersionHeight is incremented at each height while + keeping version + + number the same However some consensus algorithms may choose + to reset the + + height in certain conditions e.g. hard forks, state-machine + breaking changes + + In these cases, the version number is incremented so that + height continues to + + be monitonically increasing even as the VersionHeight gets + reset title: |- - QueryConsensusStatesResponse is the response type for the - Query/ConsensusStates RPC method + QueryConnectionChannelsResponse is the Response type for the + Query/QueryConnectionChannels RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -16961,8 +19939,8 @@ paths: "value": "1.212s" } parameters: - - name: client_id - description: client identifier + - name: connection + description: connection unique identifier in: path required: true type: string @@ -17012,237 +19990,245 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - ? "/ibc/client/v1beta1/consensus_states/{client_id}/version/{version_number}/height/{version_height}" - : get: - summary: >- - ConsensusState queries a consensus state associated with a client state - at - - a given height. - operationId: ConsensusState + /ibc/client/v1beta1/client_states: + get: + summary: ClientStates queries all the IBC light clients of a chain. + operationId: ClientStates responses: - "200": + '200': description: A successful response. schema: type: object properties: - consensus_state: - title: >- - consensus state associated with the client identifier at the - given height - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized + client_states: + type: array + items: + type: object + properties: + client_id: + type: string + title: client identifier + client_state: + title: client state + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized - protocol buffer message. This string must contain at least + protocol buffer message. This string must contain at + least - one "/" character. The last segment of the URL's path must - represent + one "/" character. The last segment of the URL's + path must represent - the fully qualified name of the type (as in + the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be in a - canonical form + `path/google.protobuf.Duration`). The name should be + in a canonical form - (e.g., leading "." is not accepted). + (e.g., leading "." is not accepted). - In practice, teams usually precompile into the binary all - types that they + In practice, teams usually precompile into the + binary all types that they - expect it to use in the context of Any. However, for URLs - which use the + expect it to use in the context of Any. However, for + URLs which use the - scheme `http`, `https`, or no scheme, one can optionally - set up a type + scheme `http`, `https`, or no scheme, one can + optionally set up a type - server that maps type URLs to message definitions as - follows: + server that maps type URLs to message definitions as + follows: - * If no scheme is provided, `https` is assumed. + * If no scheme is provided, `https` is assumed. - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Note: this functionality is not currently available in the - official + Note: this functionality is not currently available + in the official - protobuf release, and it is not used for type URLs - beginning with + protobuf release, and it is not used for type URLs + beginning with - type.googleapis.com. + type.googleapis.com. - Schemes other than `http`, `https` (or the empty scheme) - might be + Schemes other than `http`, `https` (or the empty + scheme) might be - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a - URL that describes the type of the serialized message. + URL that describes the type of the serialized message. - Protobuf library provides support to pack/unpack Any values in - the form + Protobuf library provides support to pack/unpack Any + values in the form - of utility functions or additional generated methods of the - Any type. + of utility functions or additional generated methods of + the Any type. - Example 1: Pack and unpack a message in C++. + Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - Example 2: Pack and unpack a message in Java. + Example 2: Pack and unpack a message in Java. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Example 3: Pack and unpack a message in Python. + Example 3: Pack and unpack a message in Python. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - Example 4: Pack and unpack a message in Go + Example 4: Pack and unpack a message in Go - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - The pack methods provided by protobuf library will by default - use + The pack methods provided by protobuf library will by + default use - 'type.googleapis.com/full.type.name' as the type URL and the - unpack + 'type.googleapis.com/full.type.name' as the type URL and + the unpack - methods only use the fully qualified type name after the last - '/' + methods only use the fully qualified type name after the + last '/' - in the type URL, for example "foo.bar.com/x/y.z" will yield - type + in the type URL, for example "foo.bar.com/x/y.z" will + yield type - name "y.z". + name "y.z". - JSON + JSON - ==== + ==== - The JSON representation of an `Any` value uses the regular + The JSON representation of an `Any` value uses the + regular - representation of the deserialized, embedded message, with an + representation of the deserialized, embedded message, + with an - additional field `@type` which contains the type URL. Example: + additional field `@type` which contains the type URL. + Example: - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - If the embedded message type is well-known and has a custom - JSON + If the embedded message type is well-known and has a + custom JSON - representation, that representation will be embedded adding a - field + representation, that representation will be embedded + adding a field - `value` which holds the custom JSON in addition to the `@type` + `value` which holds the custom JSON in addition to the + `@type` - field. Example (for message [google.protobuf.Duration][]): + field. Example (for message + [google.protobuf.Duration][]): - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - proof: - type: string - format: byte - title: merkle proof of existence - proof_path: - type: string - title: merkle proof path - proof_height: - title: height at which the proof was retrieved + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + description: >- + IdentifiedClientState defines a client state with an + additional client + + identifier field. + description: list of stored ClientStates of the chain. + pagination: + title: pagination response type: object properties: - version_number: + next_key: type: string - format: uint64 - title: the version that the client is currently on - version_height: + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: type: string format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the + title: >- + total is total number of results available if + PageRequest.count_total - height in certain conditions e.g. hard forks, state-machine - breaking changes + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - In these cases, the version number is incremented so that height - continues to + corresponding request message has used PageRequest. - be monitonically increasing even as the VersionHeight gets reset - title: >- - QueryConsensusStateResponse is the response type for the - Query/ConsensusState + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + description: >- + QueryClientStatesResponse is the response type for the + Query/ClientStates RPC - RPC method + method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -17431,61 +20417,242 @@ paths: "value": "1.212s" } parameters: - - name: client_id - description: client identifier - in: path - required: true + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false type: string - - name: version_number - description: consensus state version number - in: path - required: true + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false type: string format: uint64 - - name: version_height - description: consensus state version height - in: path - required: true + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false type: string format: uint64 - - name: latest_height + - name: pagination.count_total description: >- - latest_height overrrides the height field and queries the latest - stored + count_total is set to true to indicate that the result set should + include - ConsensusState. + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. in: query required: false type: boolean - format: boolean tags: - Query - "/ibc/connection/v1beta1/client_connections/{client_id}": + '/ibc/client/v1beta1/client_states/{client_id}': get: - summary: |- - ClientConnections queries the connection paths associated with a client - state. - operationId: ClientConnections + summary: ClientState queries an IBC light client. + operationId: ClientState responses: - "200": + '200': description: A successful response. schema: type: object properties: - connection_paths: - type: array - items: - type: string - description: slice of all the connection paths associated with a client. + client_state: + title: client state associated with the request identifier + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } proof: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: - title: height at which the proof was generated + title: height at which the proof was retrieved type: object properties: version_number: @@ -17506,15 +20673,21 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryClientConnectionsResponse is the response type for the - Query/ClientConnections RPC method + be monitonically increasing even as the VersionHeight gets + reset + description: >- + QueryClientStateResponse is the response type for the + Query/ClientState RPC + + method. Besides the client state, it includes a proof and the + height from + + which the proof was retrieved. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -17704,82 +20877,238 @@ paths: } parameters: - name: client_id - description: client identifier associated with a connection + description: client state unique identifier in: path required: true type: string tags: - Query - /ibc/connection/v1beta1/connections: + '/ibc/client/v1beta1/consensus_states/{client_id}': get: - summary: Connections queries all the IBC connections of a chain. - operationId: Connections + summary: |- + ConsensusStates queries all the consensus state associated with a given + client. + operationId: ConsensusStates responses: - "200": + '200': description: A successful response. schema: type: object properties: - connections: + consensus_states: type: array items: type: object properties: - id: - type: string - description: connection identifier. - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: string - title: >- - IBC version which can be utilised to determine encodings - or protocols for + height: + title: consensus state height + type: object + properties: + version_number: + type: string + format: uint64 + title: the version that the client is currently on + version_height: + type: string + format: uint64 + title: the height within the given version + description: >- + Normally the VersionHeight is incremented at each height + while keeping version - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. + number the same However some consensus algorithms may + choose to reset the + + height in certain conditions e.g. hard forks, + state-machine breaking changes + + In these cases, the version number is incremented so + that height continues to + + be monitonically increasing even as the VersionHeight + gets reset + consensus_state: + title: consensus state type: object properties: - client_id: + type_url: type: string description: >- - identifies the client on the counterparty chain - associated with a given + A URL/resource name that uniquely identifies the + type of the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's + path must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the + binary all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available + in the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will + yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the + regular + + representation of the deserialized, embedded message, + with an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty - chain associated with a + If the embedded message type is well-known and has a + custom JSON - given connection. - prefix: - title: commitment merkle prefix of the counterparty chain - type: object - properties: - key_prefix: - type: string - format: byte - description: >- - IdentifiedConnection defines a connection with additional - connection + representation, that representation will be embedded + adding a field - identifier field. - description: list of stored connections of the chain. + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message + [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + description: >- + ConsensusStateWithHeight defines a consensus state with an + additional height field. + title: consensus states associated with the identifier pagination: title: pagination response type: object @@ -17808,39 +21137,11 @@ paths: repeated Bar results = 1; PageResponse page = 2; } - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that height - continues to - - be monitonically increasing even as the VersionHeight gets reset - description: >- - QueryConnectionsResponse is the response type for the - Query/Connections RPC - - method. + title: |- + QueryConsensusStatesResponse is the response type for the + Query/ConsensusStates RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -18029,6 +21330,11 @@ paths: "value": "1.212s" } parameters: + - name: client_id + description: client identifier + in: path + required: true + type: string - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -18075,84 +21381,200 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - "/ibc/connection/v1beta1/connections/{connection_id}": + '/ibc/client/v1beta1/consensus_states/{client_id}/version/{version_number}/height/{version_height}': get: - summary: Connection queries an IBC connection end. - operationId: Connection + summary: >- + ConsensusState queries a consensus state associated with a client state + at + + a given height. + operationId: ConsensusState responses: - "200": + '200': description: A successful response. schema: type: object properties: - connection: - title: connection associated with the request identifier + consensus_state: + title: >- + consensus state associated with the client identifier at the + given height type: object properties: - client_id: + type_url: type: string - description: client associated with this connection. - versions: - type: array - items: - type: string - title: >- - IBC version which can be utilised to determine encodings - or protocols for + description: >- + A URL/resource name that uniquely identifies the type of + the serialized - channels or packets utilising this connection - state: - description: current state of the connection end. + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain - associated with a given + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty - chain associated with a + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - given connection. - prefix: - title: commitment merkle prefix of the counterparty chain - type: object - properties: - key_prefix: - type: string - format: byte - description: >- - ConnectionEnd defines a stateful object on a chain connected - to another + If the embedded message type is well-known and has a custom + JSON - separate one. NOTE: there must only be 2 defined - ConnectionEnds to establish + representation, that representation will be embedded adding a + field - a connection between two chains. + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } proof: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -18175,20 +21597,18 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset - description: >- - QueryConnectionResponse is the response type for the - Query/Connection RPC - - method. Besides the connection end, it includes a proof and the - height from + be monitonically increasing even as the VersionHeight gets + reset + title: >- + QueryConsensusStateResponse is the response type for the + Query/ConsensusState - which the proof was retrieved. + RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -18350,249 +21770,84 @@ paths: Example: package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connection_id - description: connection unique identifier - in: path - required: true - type: string - tags: - - Query - "/ibc/connection/v1beta1/connections/{connection_id}/client_state": - get: - summary: |- - ConnectionClientState queries the client state associated with the - connection. - operationId: ConnectionClientState - responses: - "200": - description: A successful response. - schema: - type: object - properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + message Person { + string first_name = 1; + string last_name = 2; + } - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - If the embedded message type is well-known and has a - custom JSON + If the embedded message type is well-known and has a custom + JSON - representation, that representation will be embedded - adding a field + representation, that representation will be embedded adding + a field - `value` which holds the custom JSON in addition to the - `@type` + `value` which holds the custom JSON in addition to the + `@type` - field. Example (for message [google.protobuf.Duration][]): + field. Example (for message [google.protobuf.Duration][]): - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - IdentifiedClientState defines a client state with an - additional client + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: client_id + description: client identifier + in: path + required: true + type: string + - name: version_number + description: consensus state version number + in: path + required: true + type: string + format: uint64 + - name: version_height + description: consensus state version height + in: path + required: true + type: string + format: uint64 + - name: latest_height + description: >- + latest_height overrrides the height field and queries the latest + stored - identifier field. + ConsensusState. + in: query + required: false + type: boolean + tags: + - Query + '/ibc/connection/v1beta1/client_connections/{client_id}': + get: + summary: |- + ClientConnections queries the connection paths associated with a client + state. + operationId: ClientConnections + responses: + '200': + description: A successful response. + schema: + type: object + properties: + connection_paths: + type: array + items: + type: string + description: slice of all the connection paths associated with a client. proof: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: - title: height at which the proof was retrieved + title: height at which the proof was generated type: object properties: version_number: @@ -18613,15 +21868,16 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset + be monitonically increasing even as the VersionHeight gets + reset title: |- - QueryConnectionClientStateResponse is the response type for the - Query/ConnectionClientState RPC method + QueryClientConnectionsResponse is the response type for the + Query/ClientConnections RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -18810,209 +22066,129 @@ paths: "value": "1.212s" } parameters: - - name: connection_id - description: connection identifier + - name: client_id + description: client identifier associated with a connection in: path required: true type: string tags: - Query - ? "/ibc/connection/v1beta1/connections/{connection_id}/consensus_state/version/{version_number}/height/{version_height}" - : get: - summary: |- - ConnectionConsensusState queries the consensus state associated with the - connection. - operationId: ConnectionConsensusState + /ibc/connection/v1beta1/connections: + get: + summary: Connections queries all the IBC connections of a chain. + operationId: Connections responses: - "200": + '200': description: A successful response. schema: type: object properties: - consensus_state: - title: consensus state associated with the channel - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an + connections: + type: array + items: + type: object + properties: + id: + type: string + description: connection identifier. + client_id: + type: string + description: client associated with this connection. + versions: + type: array + items: + type: object + properties: + identifier: + type: string + title: unique version identifier + features: + type: array + items: + type: string + title: >- + list of features compatible with the specified + identifier + description: >- + Version defines the versioning scheme used to + negotiate the IBC verison in - additional field `@type` which contains the type URL. Example: + the connection handshake. + title: >- + IBC version which can be utilised to determine encodings + or protocols for - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + channels or packets utilising this connection + state: + description: current state of the connection end. + type: string + enum: + - STATE_UNINITIALIZED_UNSPECIFIED + - STATE_INIT + - STATE_TRYOPEN + - STATE_OPEN + default: STATE_UNINITIALIZED_UNSPECIFIED + counterparty: + description: counterparty chain associated with this connection. + type: object + properties: + client_id: + type: string + description: >- + identifies the client on the counterparty chain + associated with a given - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + connection. + connection_id: + type: string + description: >- + identifies the connection end on the counterparty + chain associated with a - If the embedded message type is well-known and has a custom - JSON + given connection. + prefix: + title: commitment merkle prefix of the counterparty chain + type: object + properties: + key_prefix: + type: string + format: byte + description: >- + IdentifiedConnection defines a connection with additional + connection - representation, that representation will be embedded adding a - field + identifier field. + description: list of stored connections of the chain. + pagination: + title: pagination response + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - `value` which holds the custom JSON in addition to the `@type` + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - field. Example (for message [google.protobuf.Duration][]): + corresponding request message has used PageRequest. - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - client_id: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_path: - type: string - title: merkle proof path - proof_height: - title: height at which the proof was retrieved + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + height: + title: query block height type: object properties: version_number: @@ -19033,15 +22209,18 @@ paths: height in certain conditions e.g. hard forks, state-machine breaking changes - In these cases, the version number is incremented so that height - continues to + In these cases, the version number is incremented so that + height continues to - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryConnectionConsensusStateResponse is the response type for the - Query/ConnectionConsensusState RPC method + be monitonically increasing even as the VersionHeight gets + reset + description: >- + QueryConnectionsResponse is the response type for the + Query/Connections RPC + + method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -19230,79 +22409,179 @@ paths: "value": "1.212s" } parameters: - - name: connection_id - description: connection identifier - in: path - required: true + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false type: string - - name: version_number - in: path - required: true + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false type: string format: uint64 - - name: version_height - in: path - required: true + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false type: string format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean tags: - Query - /ibc_transfer/v1beta1/denom_traces: + '/ibc/connection/v1beta1/connections/{connection_id}': get: - summary: DenomTraces queries all denomination traces. - operationId: DenomTraces + summary: Connection queries an IBC connection end. + operationId: Connection responses: - "200": + '200': description: A successful response. schema: type: object properties: - denom_traces: - type: array - items: - type: object - properties: - path: - type: string + connection: + title: connection associated with the request identifier + type: object + properties: + client_id: + type: string + description: client associated with this connection. + versions: + type: array + items: + type: object + properties: + identifier: + type: string + title: unique version identifier + features: + type: array + items: + type: string + title: >- + list of features compatible with the specified + identifier description: >- - path defines the chain of port/channel identifiers used - for tracing the + Version defines the versioning scheme used to negotiate + the IBC verison in - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible - tokens and the + the connection handshake. + title: >- + IBC version which can be utilised to determine encodings + or protocols for - source tracing information path. - description: denom_traces returns all denominations trace information. - pagination: - description: pagination defines the pagination in the response. + channels or packets utilising this connection + state: + description: current state of the connection end. + type: string + enum: + - STATE_UNINITIALIZED_UNSPECIFIED + - STATE_INIT + - STATE_TRYOPEN + - STATE_OPEN + default: STATE_UNINITIALIZED_UNSPECIFIED + counterparty: + description: counterparty chain associated with this connection. + type: object + properties: + client_id: + type: string + description: >- + identifies the client on the counterparty chain + associated with a given + + connection. + connection_id: + type: string + description: >- + identifies the connection end on the counterparty + chain associated with a + + given connection. + prefix: + title: commitment merkle prefix of the counterparty chain + type: object + properties: + key_prefix: + type: string + format: byte + description: >- + ConnectionEnd defines a stateful object on a chain connected + to another + + separate one. NOTE: there must only be 2 defined + ConnectionEnds to establish + + a connection between two chains. + proof: + type: string + format: byte + title: merkle proof of existence + proof_height: + title: height at which the proof was retrieved type: object properties: - next_key: + version_number: type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: + format: uint64 + title: the version that the client is currently on + version_height: type: string format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + title: the height within the given version + description: >- + Normally the VersionHeight is incremented at each height while + keeping version - was set, its value is undefined otherwise + number the same However some consensus algorithms may choose + to reset the + + height in certain conditions e.g. hard forks, state-machine + breaking changes + + In these cases, the version number is incremented so that + height continues to + + be monitonically increasing even as the VersionHeight gets + reset description: >- - QueryConnectionsResponse is the response type for the - Query/DenomTraces RPC + QueryConnectionResponse is the response type for the + Query/Connection RPC - method. + method. Besides the connection end, it includes a proof and the + height from + + which the proof was retrieved. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -19491,88 +22770,249 @@ paths: "value": "1.212s" } parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false + - name: connection_id + description: connection unique identifier + in: path + required: true type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. + tags: + - Query + '/ibc/connection/v1beta1/connections/{connection_id}/client_state': + get: + summary: |- + ConnectionClientState queries the client state associated with the + connection. + operationId: ConnectionClientState + responses: + '200': + description: A successful response. + schema: + type: object + properties: + identified_client_state: + title: client state associated with the channel + type: object + properties: + client_id: + type: string + title: client identifier + client_state: + title: client state + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type + of the serialized - It is less efficient than using key. Only one of offset or key - should + protocol buffer message. This string must contain at + least - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. + one "/" character. The last segment of the URL's path + must represent - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include + the fully qualified name of the type (as in - a count of the total number of items available for pagination in - UIs. + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will + yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to the + `@type` - count_total is only respected when offset is used. It is ignored - when key + field. Example (for message [google.protobuf.Duration][]): - is set. - in: query - required: false - type: boolean - format: boolean - tags: - - Query - "/ibc_transfer/v1beta1/denom_traces/{hash}": - get: - summary: DenomTrace queries a denomination trace information. - operationId: DenomTrace - responses: - "200": - description: A successful response. - schema: - type: object - properties: - denom_trace: + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } description: >- - denom_trace returns the requested denomination trace - information. + IdentifiedClientState defines a client state with an + additional client + + identifier field. + proof: + type: string + format: byte + title: merkle proof of existence + proof_height: + title: height at which the proof was retrieved type: object properties: - path: + version_number: type: string - description: >- - path defines the chain of port/channel identifiers used - for tracing the - - source of the fungible token. - base_denom: + format: uint64 + title: the version that the client is currently on + version_height: type: string - description: base denomination of the relayed fungible token. - description: >- - QueryDenomTraceResponse is the response type for the - Query/DenomTrace RPC + format: uint64 + title: the height within the given version + description: >- + Normally the VersionHeight is incremented at each height while + keeping version - method. + number the same However some consensus algorithms may choose + to reset the + + height in certain conditions e.g. hard forks, state-machine + breaking changes + + In these cases, the version number is incremented so that + height continues to + + be monitonically increasing even as the VersionHeight gets + reset + title: |- + QueryConnectionClientStateResponse is the response type for the + Query/ConnectionClientState RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -19745,64 +23185,252 @@ paths: "lastName": } - If the embedded message type is well-known and has a custom - JSON + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: connection_id + description: connection identifier + in: path + required: true + type: string + tags: + - Query + '/ibc/connection/v1beta1/connections/{connection_id}/consensus_state/version/{version_number}/height/{version_height}': + get: + summary: |- + ConnectionConsensusState queries the consensus state associated with the + connection. + operationId: ConnectionConsensusState + responses: + '200': + description: A successful response. + schema: + type: object + properties: + consensus_state: + title: consensus state associated with the channel + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON - representation, that representation will be embedded adding - a field + representation, that representation will be embedded adding a + field - `value` which holds the custom JSON in addition to the - `@type` + `value` which holds the custom JSON in addition to the `@type` - field. Example (for message [google.protobuf.Duration][]): + field. Example (for message [google.protobuf.Duration][]): - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: hash - description: hash (in hex format) of the denomination trace information. - in: path - required: true - type: string - tags: - - Query - /ibc_transfer/v1beta1/params: - get: - summary: Params queries all parameters of the ibc-transfer module. - operationId: IBCTransferParams - responses: - "200": - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + client_id: + type: string + title: client ID associated with the consensus state + proof: + type: string + format: byte + title: merkle proof of existence + proof_height: + title: height at which the proof was retrieved type: object properties: - send_enabled: - type: boolean - format: boolean - description: >- - send_enabled enables or disables all cross-chain token - transfers from this + version_number: + type: string + format: uint64 + title: the version that the client is currently on + version_height: + type: string + format: uint64 + title: the height within the given version + description: >- + Normally the VersionHeight is incremented at each height while + keeping version - chain. - receive_enabled: - type: boolean - format: boolean - description: >- - receive_enabled enables or disables all cross-chain token - transfers to this + number the same However some consensus algorithms may choose + to reset the - chain. - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. + height in certain conditions e.g. hard forks, state-machine + breaking changes + + In these cases, the version number is incremented so that + height continues to + + be monitonically increasing even as the VersionHeight gets + reset + title: |- + QueryConnectionConsensusStateResponse is the response type for the + Query/ConnectionConsensusState RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -19981,15 +23609,272 @@ paths: representation, that representation will be embedded adding a field - `value` which holds the custom JSON in addition to the - `@type` + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: connection_id + description: connection identifier + in: path + required: true + type: string + - name: version_number + in: path + required: true + type: string + format: uint64 + - name: version_height + in: path + required: true + type: string + format: uint64 + tags: + - Query + /ibc_transfer/v1beta1/denom_traces: + get: + summary: DenomTraces queries all denomination traces. + operationId: DenomTraces + responses: + '200': + description: A successful response. + schema: + type: object + properties: + denom_traces: + type: array + items: + type: object + properties: + path: + type: string + description: >- + path defines the chain of port/channel identifiers used + for tracing the + + source of the fungible token. + base_denom: + type: string + description: base denomination of the relayed fungible token. + description: >- + DenomTrace contains the base denomination for ICS20 fungible + tokens and the + + source tracing information path. + description: denom_traces returns all denominations trace information. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: >- + QueryConnectionsResponse is the response type for the + Query/DenomTraces RPC + + method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + tags: + - Query + '/ibc_transfer/v1beta1/denom_traces/{hash}': + get: + summary: DenomTrace queries a denomination trace information. + operationId: DenomTrace + responses: + '200': + description: A successful response. + schema: + type: object + properties: + denom_trace: + description: >- + denom_trace returns the requested denomination trace + information. + type: object + properties: + path: + type: string + description: >- + path defines the chain of port/channel identifiers used + for tracing the + + source of the fungible token. + base_denom: + type: string + description: base denomination of the relayed fungible token. + description: >- + QueryDenomTraceResponse is the response type for the + Query/DenomTrace RPC - field. Example (for message [google.protobuf.Duration][]): + method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: hash + description: hash (in hex format) of the denomination trace information. + in: path + required: true + type: string + tags: + - Query + /ibc_transfer/v1beta1/params: + get: + summary: Params queries all parameters of the ibc-transfer module. + operationId: IBCTransferParams + responses: + '200': + description: A successful response. + schema: + type: object + properties: + params: + description: params defines the parameters of the module. + type: object + properties: + send_enabled: + type: boolean + description: >- + send_enabled enables or disables all cross-chain token + transfers from this - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + chain. + receive_enabled: + type: boolean + description: >- + receive_enabled enables or disables all cross-chain token + transfers to this + + chain. + description: >- + QueryParamsResponse is the response type for the Query/Params RPC + method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte tags: - Query securityDefinitions: @@ -20028,8 +23913,8 @@ definitions: gas_wanted: 10000 info: info tags: - - "" - - "" + - '' + - '' DeliverTxResult: type: object properties: @@ -20062,8 +23947,8 @@ definitions: gas_wanted: 10000 info: info tags: - - "" - - "" + - '' + - '' BroadcastTxCommitResult: type: object properties: @@ -20099,8 +23984,8 @@ definitions: gas_wanted: 10000 info: info tags: - - "" - - "" + - '' + - '' deliver_tx: type: object properties: @@ -20133,8 +24018,8 @@ definitions: gas_wanted: 10000 info: info tags: - - "" - - "" + - '' + - '' hash: type: string example: EE5F3404034C524501629B56E0DDC38FAD651F04 @@ -20165,7 +24050,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' Hash: type: string example: EE5F3404034C524501629B56E0DDC38FAD651F04 @@ -20200,7 +24085,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -20221,10 +24106,10 @@ definitions: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" + example: '0' result: type: object properties: @@ -20232,10 +24117,10 @@ definitions: type: string gas_wanted: type: string - example: "200000" + example: '200000' gas_used: type: string - example: "26354" + example: '26354' tags: type: array items: @@ -20296,7 +24181,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -20317,10 +24202,10 @@ definitions: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" + example: '0' result: type: object properties: @@ -20328,10 +24213,10 @@ definitions: type: string gas_wanted: type: string - example: "200000" + example: '200000' gas_used: type: string - example: "26354" + example: '26354' tags: type: array items: @@ -20363,7 +24248,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' memo: type: string signature: @@ -20384,10 +24269,10 @@ definitions: example: Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "0" + example: '0' BlockID: type: object properties: @@ -20414,7 +24299,7 @@ definitions: example: 1 time: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' num_txs: type: number example: 0 @@ -20487,7 +24372,7 @@ definitions: example: 1 time: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' num_txs: type: number example: 0 @@ -20581,16 +24466,16 @@ definitions: type: string validator_index: type: string - example: "0" + example: '0' height: type: string - example: "0" + example: '0' round: type: string - example: "0" + example: '0' timestamp: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' type: type: number example: 2 @@ -20630,7 +24515,7 @@ definitions: example: 1 time: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' num_txs: type: number example: 0 @@ -20718,7 +24603,7 @@ definitions: example: 1 time: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' num_txs: type: number example: 0 @@ -20812,16 +24697,16 @@ definitions: type: string validator_index: type: string - example: "0" + example: '0' height: type: string - example: "0" + example: '0' round: type: string - example: "0" + example: '0' timestamp: type: string - example: "2017-12-30T05:53:09.287+01:00" + example: '2017-12-30T05:53:09.287+01:00' type: type: number example: 2 @@ -20861,7 +24746,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' DelegatorTotalRewards: type: object properties: @@ -20884,7 +24769,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' total: type: array items: @@ -20895,7 +24780,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' BaseReq: type: object properties: @@ -20911,16 +24796,16 @@ definitions: example: Cosmos-Hub account_number: type: string - example: "0" + example: '0' sequence: type: string - example: "1" + example: '1' gas: type: string - example: "200000" + example: '200000' gas_adjustment: type: string - example: "1.2" + example: '1.2' fees: type: array items: @@ -20931,7 +24816,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' simulate: type: boolean example: false @@ -20951,10 +24836,10 @@ definitions: cosmosvalconspub1zcjduepq0vu2zgkgk49efa0nqwzndanq5m4c7pa3u4apz4g2r9gspqg6g9cs3k9cuf voting_power: type: string - example: "1000" + example: '1000' proposer_priority: type: string - example: "1000" + example: '1000' TextProposal: type: object properties: @@ -20971,18 +24856,18 @@ definitions: final_tally_result: type: object properties: - "yes": + 'yes': type: string - example: "0.0000000000" + example: '0.0000000000' abstain: type: string - example: "0.0000000000" - "no": + example: '0.0000000000' + 'no': type: string - example: "0.0000000000" + example: '0.0000000000' no_with_veto: type: string - example: "0.0000000000" + example: '0.0000000000' submit_time: type: string total_deposit: @@ -20995,7 +24880,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' voting_start_time: type: string Proposer: @@ -21018,7 +24903,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' proposal_id: type: string depositor: @@ -21028,18 +24913,18 @@ definitions: TallyResult: type: object properties: - "yes": + 'yes': type: string - example: "0.0000000000" + example: '0.0000000000' abstain: type: string - example: "0.0000000000" - "no": + example: '0.0000000000' + 'no': type: string - example: "0.0000000000" + example: '0.0000000000' no_with_veto: type: string - example: "0.0000000000" + example: '0.0000000000' Vote: type: object properties: @@ -21083,31 +24968,31 @@ definitions: type: string bond_height: type: string - example: "0" + example: '0' bond_intra_tx_counter: type: integer example: 0 unbonding_height: type: string - example: "0" + example: '0' unbonding_time: type: string - example: "1970-01-01T00:00:00Z" + example: '1970-01-01T00:00:00Z' commission: type: object properties: rate: type: string - example: "0" + example: '0' max_rate: type: string - example: "0" + example: '0' max_change_rate: type: string - example: "0" + example: '0' update_time: type: string - example: "1970-01-01T00:00:00Z" + example: '1970-01-01T00:00:00Z' Delegation: type: object properties: @@ -21125,7 +25010,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' UnbondingDelegationPair: type: object properties: @@ -21184,7 +25069,7 @@ definitions: entries: type: array items: - $ref: "#/definitions/Redelegation" + $ref: '#/definitions/Redelegation' RedelegationEntry: type: object properties: @@ -21215,7 +25100,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' val_commission: type: array items: @@ -21226,7 +25111,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' PublicKey: type: object properties: @@ -21256,7 +25141,7 @@ definitions: example: MaxValidators subkey: type: string - example: "" + example: '' value: type: object Supply: @@ -21272,7 +25157,7 @@ definitions: example: stake amount: type: string - example: "50" + example: '50' cosmos.auth.v1beta1.Params: type: object properties: @@ -21724,7 +25609,6 @@ definitions: type: string enabled: type: boolean - format: boolean description: >- SendEnabled maps coin denom to a send_enabled status (whether a denom is @@ -21732,7 +25616,6 @@ definitions: sendable). default_send_enabled: type: boolean - format: boolean description: Params defines the parameters for the bank module. cosmos.bank.v1beta1.QueryAllBalancesResponse: type: object @@ -21804,7 +25687,6 @@ definitions: type: string enabled: type: boolean - format: boolean description: >- SendEnabled maps coin denom to a send_enabled status (whether a denom is @@ -21812,7 +25694,6 @@ definitions: sendable). default_send_enabled: type: boolean - format: boolean description: Params defines the parameters for the bank module. description: >- QueryParamsResponse defines the response type for querying x/bank @@ -21861,7 +25742,6 @@ definitions: type: string enabled: type: boolean - format: boolean description: |- SendEnabled maps coin denom to a send_enabled status (whether a denom is sendable). @@ -21892,7 +25772,6 @@ definitions: If left empty it will default to a value to be set by each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -21991,7 +25870,6 @@ definitions: type: string withdraw_addr_enabled: type: boolean - format: boolean description: Params defines the set of params for the distribution module. cosmos.distribution.v1beta1.QueryCommunityPoolResponse: type: object @@ -22122,7 +26000,6 @@ definitions: type: string withdraw_addr_enabled: type: boolean - format: boolean description: QueryParamsResponse is the response type for the Query/Params RPC method. cosmos.distribution.v1beta1.QueryValidatorCommissionResponse: type: object @@ -22778,11 +26655,11 @@ definitions: final_tally_result: type: object properties: - "yes": + 'yes': type: string abstain: type: string - "no": + 'no': type: string no_with_veto: type: string @@ -23190,11 +27067,11 @@ definitions: final_tally_result: type: object properties: - "yes": + 'yes': type: string abstain: type: string - "no": + 'no': type: string no_with_veto: type: string @@ -23439,11 +27316,11 @@ definitions: final_tally_result: type: object properties: - "yes": + 'yes': type: string abstain: type: string - "no": + 'no': type: string no_with_veto: type: string @@ -23506,11 +27383,11 @@ definitions: description: tally defines the requested tally. type: object properties: - "yes": + 'yes': type: string abstain: type: string - "no": + 'no': type: string no_with_veto: type: string @@ -23627,11 +27504,11 @@ definitions: cosmos.gov.v1beta1.TallyResult: type: object properties: - "yes": + 'yes': type: string abstain: type: string - "no": + 'no': type: string no_with_veto: type: string @@ -23849,7 +27726,6 @@ definitions: title: timestamp validator cannot be unjailed until tombstoned: type: boolean - format: boolean title: >- whether or not a validator has been tombstoned (killed out of validator @@ -23893,7 +27769,6 @@ definitions: title: timestamp validator cannot be unjailed until tombstoned: type: boolean - format: boolean title: >- whether or not a validator has been tombstoned (killed out of validator @@ -23958,7 +27833,6 @@ definitions: title: timestamp validator cannot be unjailed until tombstoned: type: boolean - format: boolean title: >- whether or not a validator has been tombstoned (killed out of validator @@ -23973,6 +27847,21 @@ definitions: their liveness activity. + cosmos.staking.v1beta1.BondStatus: + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. cosmos.staking.v1beta1.Commission: type: object properties: @@ -24154,13 +28043,191 @@ definitions: operator_address: type: string consensus_pubkey: - type: string + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -24352,103 +28419,277 @@ definitions: DelegationResponse is equivalent to Delegation except that it contains a - balance in addition to shares which is more suitable for client - responses. - description: delegation_responses defines all the delegations' info of a delegator. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + balance in addition to shares which is more suitable for client + responses. + description: delegation_responses defines all the delegations' info of a delegator. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: |- + QueryDelegatorDelegationsResponse is response type for the + Query/DelegatorDelegations RPC method. + cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse: + type: object + properties: + unbonding_responses: + type: array + items: + type: object + properties: + delegator_address: + type: string + validator_address: + type: string + entries: + type: array + items: + type: object + properties: + creation_height: + type: string + format: int64 + completion_time: + type: string + format: date-time + initial_balance: + type: string + balance: + type: string + description: >- + UnbondingDelegationEntry defines an unbonding object with + relevant metadata. + description: >- + UnbondingDelegation stores all of a single delegator's unbonding + bonds + + for a single validator in an time-ordered list. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: |- + QueryUnbondingDelegatorDelegationsResponse is response type for the + Query/UnbondingDelegatorDelegations RPC method. + cosmos.staking.v1beta1.QueryDelegatorValidatorResponse: + type: object + properties: + validator: + description: validator defines the the validator info. + type: object + properties: + operator_address: + type: string + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might + be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON - was set, its value is undefined otherwise - description: |- - QueryDelegatorDelegationsResponse is response type for the - Query/DelegatorDelegations RPC method. - cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse: - type: object - properties: - unbonding_responses: - type: array - items: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - entries: - type: array - items: - type: object - properties: - creation_height: - type: string - format: int64 - completion_time: - type: string - format: date-time - initial_balance: - type: string - balance: - type: string - description: >- - UnbondingDelegationEntry defines an unbonding object with - relevant metadata. - description: >- - UnbondingDelegation stores all of a single delegator's unbonding - bonds + representation, that representation will be embedded adding a + field - for a single validator in an time-ordered list. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + `value` which holds the custom JSON in addition to the `@type` - was set, its value is undefined otherwise - description: |- - QueryUnbondingDelegatorDelegationsResponse is response type for the - Query/UnbondingDelegatorDelegations RPC method. - cosmos.staking.v1beta1.QueryDelegatorValidatorResponse: - type: object - properties: - validator: - description: validator defines the the validator info. - type: object - properties: - operator_address: - type: string - consensus_pubkey: - type: string + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -24510,13 +28751,191 @@ definitions: operator_address: type: string consensus_pubkey: - type: string + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -24631,81 +29050,265 @@ definitions: Consensus captures the consensus rules for processing a block in the blockchain, - including all blockchain data structures and the rules of the - application's + including all blockchain data structures and the rules of the + application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + title: prev block info + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + valset: + type: array + items: + type: object + properties: + operator_address: + type: string + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): - state transition machine. - chain_id: - type: string - height: - type: string - format: int64 - time: - type: string - format: date-time - last_block_id: - title: prev block info - type: object - properties: - hash: - type: string - format: byte - part_set_header: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - last_commit_hash: - type: string - format: byte - title: hashes of block data - data_hash: - type: string - format: byte - validators_hash: - type: string - format: byte - title: hashes from the app output from the prev block - next_validators_hash: - type: string - format: byte - consensus_hash: - type: string - format: byte - app_hash: - type: string - format: byte - last_results_hash: - type: string - format: byte - evidence_hash: - type: string - format: byte - title: consensus info - proposer_address: - type: string - format: byte - description: Header defines the structure of a Tendermint block header. - valset: - type: array - items: - type: object - properties: - operator_address: - type: string - consensus_pubkey: - type: string + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -24972,69 +29575,243 @@ definitions: Delegation represents the bond with tokens held by an account. It is - owned by one delegator, and is associated with the voting power - of one + owned by one delegator, and is associated with the voting power + of one + + validator. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + description: >- + DelegationResponse is equivalent to Delegation except that it + contains a + + balance in addition to shares which is more suitable for client + responses. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + title: |- + QueryValidatorDelegationsResponse is response type for the + Query/ValidatorDelegations RPC method + cosmos.staking.v1beta1.QueryValidatorResponse: + type: object + properties: + validator: + description: validator defines the the validator info. + type: object + properties: + operator_address: + type: string + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might + be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + name "y.z". - NOTE: The amount field is an Int which implements the custom - method - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that it - contains a + JSON - balance in addition to shares which is more suitable for client - responses. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + ==== - was set, its value is undefined otherwise - title: |- - QueryValidatorDelegationsResponse is response type for the - Query/ValidatorDelegations RPC method - cosmos.staking.v1beta1.QueryValidatorResponse: - type: object - properties: - validator: - description: validator defines the the validator info. - type: object - properties: - operator_address: - type: string - consensus_pubkey: - type: string + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -25117,46 +29894,224 @@ definitions: UnbondingDelegation stores all of a single delegator's unbonding bonds - for a single validator in an time-ordered list. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + for a single validator in an time-ordered list. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: |- + QueryValidatorUnbondingDelegationsResponse is response type for the + Query/ValidatorUnbondingDelegations RPC method. + cosmos.staking.v1beta1.QueryValidatorsResponse: + type: object + properties: + validators: + type: array + items: + type: object + properties: + operator_address: + type: string + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + - was set, its value is undefined otherwise - description: |- - QueryValidatorUnbondingDelegationsResponse is response type for the - Query/ValidatorUnbondingDelegations RPC method. - cosmos.staking.v1beta1.QueryValidatorsResponse: - type: object - properties: - validators: - type: array - items: - type: object - properties: - operator_address: - type: string - consensus_pubkey: - type: string + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -25384,74 +30339,242 @@ definitions: RedelegationEntryResponse is equivalent to a RedelegationEntry except that it - contains a balance in addition to shares which is more suitable for - client + contains a balance in addition to shares which is more suitable for + client + + responses. + description: >- + RedelegationResponse is equivalent to a Redelegation except that its + entries + + contain a balance in addition to shares which is more suitable for client + + responses. + cosmos.staking.v1beta1.UnbondingDelegation: + type: object + properties: + delegator_address: + type: string + validator_address: + type: string + entries: + type: array + items: + type: object + properties: + creation_height: + type: string + format: int64 + completion_time: + type: string + format: date-time + initial_balance: + type: string + balance: + type: string + description: >- + UnbondingDelegationEntry defines an unbonding object with relevant + metadata. + description: |- + UnbondingDelegation stores all of a single delegator's unbonding bonds + for a single validator in an time-ordered list. + cosmos.staking.v1beta1.UnbondingDelegationEntry: + type: object + properties: + creation_height: + type: string + format: int64 + completion_time: + type: string + format: date-time + initial_balance: + type: string + balance: + type: string + description: >- + UnbondingDelegationEntry defines an unbonding object with relevant + metadata. + cosmos.staking.v1beta1.Validator: + type: object + properties: + operator_address: + type: string + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all types + that they + + expect it to use in the context of Any. However, for URLs which + use the + + scheme `http`, `https`, or no scheme, one can optionally set up a + type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above specified + type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + - responses. - description: >- - RedelegationResponse is equivalent to a Redelegation except that its - entries + JSON - contain a balance in addition to shares which is more suitable for client + ==== - responses. - cosmos.staking.v1beta1.UnbondingDelegation: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - entries: - type: array - items: - type: object - properties: - creation_height: - type: string - format: int64 - completion_time: - type: string - format: date-time - initial_balance: - type: string - balance: - type: string - description: >- - UnbondingDelegationEntry defines an unbonding object with relevant - metadata. - description: |- - UnbondingDelegation stores all of a single delegator's unbonding bonds - for a single validator in an time-ordered list. - cosmos.staking.v1beta1.UnbondingDelegationEntry: - type: object - properties: - creation_height: - type: string - format: int64 - completion_time: - type: string - format: date-time - initial_balance: - type: string - balance: - type: string - description: >- - UnbondingDelegationEntry defines an unbonding object with relevant - metadata. - cosmos.staking.v1beta1.Validator: - type: object - properties: - operator_address: - type: string - consensus_pubkey: - type: string + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } jailed: type: boolean - format: boolean status: - type: integer - format: int32 + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + description: |- + BondStatus is the status of a validator. + + - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. + - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. + - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. + - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string delegator_shares: @@ -25636,50 +30759,223 @@ definitions: Consensus captures the consensus rules for processing a block in the blockchain, - including all blockchain data structures and the rules of the - application's + including all blockchain data structures and the rules of the + application's + + state transition machine. + cosmos.upgrade.v1beta1.Plan: + type: object + properties: + name: + type: string + description: >- + Sets the name for the upgrade. This name will be used by the upgraded + + version of the software to apply any special "on-upgrade" commands + during + + the first BeginBlock method after the upgrade is applied. It is also + used + + to detect whether a software version can handle a given upgrade. If no + + upgrade handler with this name has been set in the software, it will + be + + assumed that the software is out-of-date when the upgrade Time or + Height is + + reached and the software will exit. + time: + type: string + format: date-time + description: |- + The time after which the upgrade must be performed. + Leave set to its zero value to use a pre-defined Height instead. + height: + type: string + format: int64 + description: |- + The height at which the upgrade must be performed. + Only used if Time is not set. + info: + type: string + title: |- + Any application specific upgrade info to be included on-chain + such as a git commit that validators could automatically upgrade to + upgraded_client_state: + title: >- + IBC-enabled chains can opt-in to including the upgraded client state + in its upgrade plan + + This will make the chain commit to the correct upgraded (self) client + state before the upgrade occurs, + + so that connecting chains can verify that the new upgraded client is + valid by verifying a proof on the + + previous version of the chain. + + This will allow IBC connections to persist smoothly across planned + chain upgrades + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all types + that they + + expect it to use in the context of Any. However, for URLs which + use the + + scheme `http`, `https`, or no scheme, one can optionally set up a + type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above specified + type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use - state transition machine. - cosmos.upgrade.v1beta1.Plan: - type: object - properties: - name: - type: string - description: >- - Sets the name for the upgrade. This name will be used by the upgraded + 'type.googleapis.com/full.type.name' as the type URL and the unpack - version of the software to apply any special "on-upgrade" commands - during + methods only use the fully qualified type name after the last '/' - the first BeginBlock method after the upgrade is applied. It is also - used + in the type URL, for example "foo.bar.com/x/y.z" will yield type - to detect whether a software version can handle a given upgrade. If no + name "y.z". - upgrade handler with this name has been set in the software, it will - be - assumed that the software is out-of-date when the upgrade Time or - Height is - reached and the software will exit. - time: - type: string - format: date-time - description: |- - The time after which the upgrade must be performed. - Leave set to its zero value to use a pre-defined Height instead. - height: - type: string - format: int64 - description: |- - The height at which the upgrade must be performed. - Only used if Time is not set. - info: - type: string - title: |- - Any application specific upgrade info to be included on-chain - such as a git commit that validators could automatically upgrade to + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } description: >- Plan specifies information about a planned upgrade and when it should occur. @@ -25694,61 +30990,240 @@ definitions: QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC - method. - cosmos.upgrade.v1beta1.QueryCurrentPlanResponse: - type: object - properties: - plan: - description: plan is the current upgrade plan. - type: object - properties: - name: - type: string - description: >- - Sets the name for the upgrade. This name will be used by the - upgraded + method. + cosmos.upgrade.v1beta1.QueryCurrentPlanResponse: + type: object + properties: + plan: + description: plan is the current upgrade plan. + type: object + properties: + name: + type: string + description: >- + Sets the name for the upgrade. This name will be used by the + upgraded + + version of the software to apply any special "on-upgrade" commands + during + + the first BeginBlock method after the upgrade is applied. It is + also used + + to detect whether a software version can handle a given upgrade. + If no + + upgrade handler with this name has been set in the software, it + will be + + assumed that the software is out-of-date when the upgrade Time or + Height is + + reached and the software will exit. + time: + type: string + format: date-time + description: |- + The time after which the upgrade must be performed. + Leave set to its zero value to use a pre-defined Height instead. + height: + type: string + format: int64 + description: |- + The height at which the upgrade must be performed. + Only used if Time is not set. + info: + type: string + title: >- + Any application specific upgrade info to be included on-chain + + such as a git commit that validators could automatically upgrade + to + upgraded_client_state: + title: >- + IBC-enabled chains can opt-in to including the upgraded client + state in its upgrade plan + + This will make the chain commit to the correct upgraded (self) + client state before the upgrade occurs, + + so that connecting chains can verify that the new upgraded client + is valid by verifying a proof on the + + previous version of the chain. + + This will allow IBC connections to persist smoothly across planned + chain upgrades + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might + be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". - version of the software to apply any special "on-upgrade" commands - during - the first BeginBlock method after the upgrade is applied. It is - also used - to detect whether a software version can handle a given upgrade. - If no + JSON - upgrade handler with this name has been set in the software, it - will be + ==== - assumed that the software is out-of-date when the upgrade Time or - Height is + The JSON representation of an `Any` value uses the regular - reached and the software will exit. - time: - type: string - format: date-time - description: |- - The time after which the upgrade must be performed. - Leave set to its zero value to use a pre-defined Height instead. - height: - type: string - format: int64 - description: |- - The height at which the upgrade must be performed. - Only used if Time is not set. - info: - type: string - title: >- - Any application specific upgrade info to be included on-chain + representation of the deserialized, embedded message, with an - such as a git commit that validators could automatically upgrade - to + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } description: >- QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC method. - ibc.channel.Channel: + ibc.core.channel.v1.Channel: type: object properties: state: @@ -25806,12 +31281,12 @@ definitions: this channel will travel version: type: string - title: "opaque channel version, which is agreed upon during the handshake" + title: 'opaque channel version, which is agreed upon during the handshake' description: |- Channel defines pipeline for exactly-once packet delivery between specific modules on separate blockchains, which has at least one end capable of sending packets and one end capable of receiving packets. - ibc.channel.Counterparty: + ibc.core.channel.v1.Counterparty: type: object properties: port_id: @@ -25823,7 +31298,7 @@ definitions: type: string title: channel end on the counterparty chain title: Counterparty defines a channel end counterparty - ibc.channel.IdentifiedChannel: + ibc.core.channel.v1.IdentifiedChannel: type: object properties: state: @@ -25881,7 +31356,7 @@ definitions: this channel will travel version: type: string - title: "opaque channel version, which is agreed upon during the handshake" + title: 'opaque channel version, which is agreed upon during the handshake' port_id: type: string title: port identifier @@ -25891,7 +31366,7 @@ definitions: description: |- IdentifiedChannel defines a channel with additional port and channel identifier fields. - ibc.channel.Order: + ibc.core.channel.v1.Order: type: string enum: - ORDER_NONE_UNSPECIFIED @@ -25904,7 +31379,7 @@ definitions: which they were sent. - ORDER_ORDERED: packets are delivered exactly in the order which they were sent title: Order defines if a channel is ORDERED or UNORDERED - ibc.channel.PacketAckCommitment: + ibc.core.channel.v1.PacketState: type: object properties: port_id: @@ -25917,16 +31392,16 @@ definitions: type: string format: uint64 description: packet sequence. - hash: + data: type: string format: byte - description: packet commitment hash. - description: >- - PacketAckCommitment defines the genesis type necessary to retrieve and - store - - acknowlegements. - ibc.channel.QueryChannelClientStateResponse: + description: embedded data that represents packet state. + description: |- + PacketState defines the generic type necessary to retrieve and store + packet commitments, acknowledgements, and receipts. + Caller is responsible for knowing the context necessary to interpret this + state as a commitment, acknowledgement, or a receipt. + ibc.core.channel.v1.QueryChannelClientStateResponse: type: object properties: identified_client_state: @@ -26109,9 +31584,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -26141,7 +31613,7 @@ definitions: title: |- QueryChannelClientStateResponse is the Response type for the Query/QueryChannelClientState RPC method - ibc.channel.QueryChannelConsensusStateResponse: + ibc.core.channel.v1.QueryChannelConsensusStateResponse: type: object properties: consensus_state: @@ -26311,9 +31783,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -26343,7 +31812,7 @@ definitions: title: |- QueryChannelClientStateResponse is the Response type for the Query/QueryChannelClientState RPC method - ibc.channel.QueryChannelResponse: + ibc.core.channel.v1.QueryChannelResponse: type: object properties: channel: @@ -26407,7 +31876,7 @@ definitions: this channel will travel version: type: string - title: "opaque channel version, which is agreed upon during the handshake" + title: 'opaque channel version, which is agreed upon during the handshake' description: >- Channel defines pipeline for exactly-once packet delivery between specific @@ -26419,9 +31888,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -26455,7 +31921,7 @@ definitions: Besides the Channel end, it includes a proof and the height from which the proof was retrieved. - ibc.channel.QueryChannelsResponse: + ibc.core.channel.v1.QueryChannelsResponse: type: object properties: channels: @@ -26588,7 +32054,7 @@ definitions: description: >- QueryChannelsResponse is the response type for the Query/Channels RPC method. - ibc.channel.QueryConnectionChannelsResponse: + ibc.core.channel.v1.QueryConnectionChannelsResponse: type: object properties: channels: @@ -26721,7 +32187,7 @@ definitions: title: |- QueryConnectionChannelsResponse is the Response type for the Query/QueryConnectionChannels RPC method - ibc.channel.QueryNextSequenceReceiveResponse: + ibc.core.channel.v1.QueryNextSequenceReceiveResponse: type: object properties: next_sequence_receive: @@ -26732,9 +32198,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -26764,7 +32227,7 @@ definitions: title: |- QuerySequenceResponse is the request type for the Query/QueryNextSequenceReceiveResponse RPC method - ibc.channel.QueryPacketAcknowledgementResponse: + ibc.core.channel.v1.QueryPacketAcknowledgementResponse: type: object properties: acknowledgement: @@ -26775,9 +32238,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -26806,9 +32266,95 @@ definitions: be monitonically increasing even as the VersionHeight gets reset title: |- QueryPacketAcknowledgementResponse defines the client query response for a - packet which also includes a proof, its path and the height form which the + packet which also includes a proof and the height from which the proof was retrieved - ibc.channel.QueryPacketCommitmentResponse: + ibc.core.channel.v1.QueryPacketAcknowledgementsResponse: + type: object + properties: + acknowledgements: + type: array + items: + type: object + properties: + port_id: + type: string + description: channel port identifier. + channel_id: + type: string + description: channel unique identifier. + sequence: + type: string + format: uint64 + description: packet sequence. + data: + type: string + format: byte + description: embedded data that represents packet state. + description: >- + PacketState defines the generic type necessary to retrieve and store + + packet commitments, acknowledgements, and receipts. + + Caller is responsible for knowing the context necessary to interpret + this + + state as a commitment, acknowledgement, or a receipt. + pagination: + title: pagination response + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: |- + PageResponse is to be embedded in gRPC response messages where the + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + height: + title: query block height + type: object + properties: + version_number: + type: string + format: uint64 + title: the version that the client is currently on + version_height: + type: string + format: uint64 + title: the height within the given version + description: >- + Normally the VersionHeight is incremented at each height while keeping + version + + number the same However some consensus algorithms may choose to reset + the + + height in certain conditions e.g. hard forks, state-machine breaking + changes + + In these cases, the version number is incremented so that height + continues to + + be monitonically increasing even as the VersionHeight gets reset + title: |- + QueryPacketAcknowledgemetsResponse is the request type for the + Query/QueryPacketAcknowledgements RPC method + ibc.core.channel.v1.QueryPacketCommitmentResponse: type: object properties: commitment: @@ -26819,9 +32365,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -26852,11 +32395,10 @@ definitions: QueryPacketCommitmentResponse defines the client query response for a packet - which also includes a proof, its path and the height form which the proof - was + which also includes a proof and the height from which the proof was retrieved - ibc.channel.QueryPacketCommitmentsResponse: + ibc.core.channel.v1.QueryPacketCommitmentsResponse: type: object properties: commitments: @@ -26874,15 +32416,19 @@ definitions: type: string format: uint64 description: packet sequence. - hash: + data: type: string format: byte - description: packet commitment hash. + description: embedded data that represents packet state. description: >- - PacketAckCommitment defines the genesis type necessary to retrieve - and store + PacketState defines the generic type necessary to retrieve and store + + packet commitments, acknowledgements, and receipts. + + Caller is responsible for knowing the context necessary to interpret + this - acknowlegements. + state as a commitment, acknowledgement, or a receipt. pagination: title: pagination response type: object @@ -26938,7 +32484,50 @@ definitions: title: |- QueryPacketCommitmentsResponse is the request type for the Query/QueryPacketCommitments RPC method - ibc.channel.QueryUnreceivedPacketsResponse: + ibc.core.channel.v1.QueryPacketReceiptResponse: + type: object + properties: + received: + type: boolean + title: success flag for if receipt exists + proof: + type: string + format: byte + title: merkle proof of existence + proof_height: + title: height at which the proof was retrieved + type: object + properties: + version_number: + type: string + format: uint64 + title: the version that the client is currently on + version_height: + type: string + format: uint64 + title: the height within the given version + description: >- + Normally the VersionHeight is incremented at each height while keeping + version + + number the same However some consensus algorithms may choose to reset + the + + height in certain conditions e.g. hard forks, state-machine breaking + changes + + In these cases, the version number is incremented so that height + continues to + + be monitonically increasing even as the VersionHeight gets reset + title: >- + QueryPacketReceiptResponse defines the client query response for a packet + receipt + + which also includes a proof, and the height from which the proof was + + retrieved + ibc.core.channel.v1.QueryUnreceivedAcksResponse: type: object properties: sequences: @@ -26946,7 +32535,7 @@ definitions: items: type: string format: uint64 - title: list of unreceived packet sequences + title: list of unreceived acknowledgement sequences height: title: query block height type: object @@ -26974,9 +32563,9 @@ definitions: be monitonically increasing even as the VersionHeight gets reset title: |- - QueryUnreceivedPacketsResponse is the response type for the - Query/UnreceivedPacketCommitments RPC method - ibc.channel.QueryUnrelayedAcksResponse: + QueryUnreceivedAcksResponse is the response type for the + Query/UnreceivedAcks RPC method + ibc.core.channel.v1.QueryUnreceivedPacketsResponse: type: object properties: sequences: @@ -26984,7 +32573,7 @@ definitions: items: type: string format: uint64 - title: list of unrelayed acknowledgement sequences + title: list of unreceived packet sequences height: title: query block height type: object @@ -27012,9 +32601,9 @@ definitions: be monitonically increasing even as the VersionHeight gets reset title: |- - QueryUnrelayedAcksResponse is the response type for the - Query/UnrelayedAcks RPC method - ibc.channel.State: + QueryUnreceivedPacketsResponse is the response type for the + Query/UnreceivedPacketCommitments RPC method + ibc.core.channel.v1.State: type: string enum: - STATE_UNINITIALIZED_UNSPECIFIED @@ -27034,7 +32623,7 @@ definitions: ready to send and receive packets. - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive packets. - ibc.client.Height: + ibc.core.client.v1.Height: type: object properties: version_number: @@ -27046,7 +32635,8 @@ definitions: format: uint64 title: the height within the given version description: >- - Normally the VersionHeight is incremented at each height while keeping version + Normally the VersionHeight is incremented at each height while keeping + version number the same However some consensus algorithms may choose to reset the @@ -27064,7 +32654,7 @@ definitions: and freezing clients - ibc.client.IdentifiedClientState: + ibc.core.client.v1.IdentifiedClientState: type: object properties: client_id: @@ -27233,7 +32823,7 @@ definitions: description: |- IdentifiedClientState defines a client state with an additional client identifier field. - ibc.client.ConsensusStateWithHeight: + ibc.core.client.v1.ConsensusStateWithHeight: type: object properties: height: @@ -27425,7 +33015,7 @@ definitions: description: >- ConsensusStateWithHeight defines a consensus state with an additional height field. - ibc.client.QueryClientStateResponse: + ibc.core.client.v1.QueryClientStateResponse: type: object properties: client_state: @@ -27592,9 +33182,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -27628,7 +33215,7 @@ definitions: method. Besides the client state, it includes a proof and the height from which the proof was retrieved. - ibc.client.QueryClientStatesResponse: + ibc.core.client.v1.QueryClientStatesResponse: type: object properties: client_states: @@ -27846,7 +33433,7 @@ definitions: RPC method. - ibc.client.QueryConsensusStateResponse: + ibc.core.client.v1.QueryConsensusStateResponse: type: object properties: consensus_state: @@ -28015,9 +33602,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -28049,7 +33633,7 @@ definitions: Query/ConsensusState RPC method - ibc.client.QueryConsensusStatesResponse: + ibc.core.client.v1.QueryConsensusStatesResponse: type: object properties: consensus_states: @@ -28286,7 +33870,7 @@ definitions: title: |- QueryConsensusStatesResponse is the response type for the Query/ConsensusStates RPC method - ibc.commitment.MerklePrefix: + ibc.core.commitment.v1.MerklePrefix: type: object properties: key_prefix: @@ -28296,7 +33880,7 @@ definitions: MerklePrefix is merkle path prefixed to the key. The constructed key from the Path and the key will be append(Path.KeyPath, append(Path.KeyPrefix, key...)) - ibc.connection.ConnectionEnd: + ibc.core.connection.v1.ConnectionEnd: type: object properties: client_id: @@ -28305,7 +33889,21 @@ definitions: versions: type: array items: - type: string + type: object + properties: + identifier: + type: string + title: unique version identifier + features: + type: array + items: + type: string + title: list of features compatible with the specified identifier + description: >- + Version defines the versioning scheme used to negotiate the IBC + verison in + + the connection handshake. title: >- IBC version which can be utilised to determine encodings or protocols for @@ -28352,7 +33950,7 @@ definitions: establish a connection between two chains. - ibc.connection.Counterparty: + ibc.core.connection.v1.Counterparty: type: object properties: client_id: @@ -28379,7 +33977,7 @@ definitions: description: >- Counterparty defines the counterparty chain associated with a connection end. - ibc.connection.IdentifiedConnection: + ibc.core.connection.v1.IdentifiedConnection: type: object properties: id: @@ -28391,7 +33989,21 @@ definitions: versions: type: array items: - type: string + type: object + properties: + identifier: + type: string + title: unique version identifier + features: + type: array + items: + type: string + title: list of features compatible with the specified identifier + description: >- + Version defines the versioning scheme used to negotiate the IBC + verison in + + the connection handshake. title: >- IBC version which can be utilised to determine encodings or protocols for @@ -28434,7 +34046,7 @@ definitions: description: |- IdentifiedConnection defines a connection with additional connection identifier field. - ibc.connection.QueryClientConnectionsResponse: + ibc.core.connection.v1.QueryClientConnectionsResponse: type: object properties: connection_paths: @@ -28446,9 +34058,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was generated type: object @@ -28478,7 +34087,7 @@ definitions: title: |- QueryClientConnectionsResponse is the response type for the Query/ClientConnections RPC method - ibc.connection.QueryConnectionClientStateResponse: + ibc.core.connection.v1.QueryConnectionClientStateResponse: type: object properties: identified_client_state: @@ -28661,9 +34270,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -28693,7 +34299,7 @@ definitions: title: |- QueryConnectionClientStateResponse is the response type for the Query/ConnectionClientState RPC method - ibc.connection.QueryConnectionConsensusStateResponse: + ibc.core.connection.v1.QueryConnectionConsensusStateResponse: type: object properties: consensus_state: @@ -28863,9 +34469,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -28895,7 +34498,7 @@ definitions: title: |- QueryConnectionConsensusStateResponse is the response type for the Query/ConnectionConsensusState RPC method - ibc.connection.QueryConnectionResponse: + ibc.core.connection.v1.QueryConnectionResponse: type: object properties: connection: @@ -28908,7 +34511,21 @@ definitions: versions: type: array items: - type: string + type: object + properties: + identifier: + type: string + title: unique version identifier + features: + type: array + items: + type: string + title: list of features compatible with the specified identifier + description: >- + Version defines the versioning scheme used to negotiate the IBC + verison in + + the connection handshake. title: >- IBC version which can be utilised to determine encodings or protocols for @@ -28960,9 +34577,6 @@ definitions: type: string format: byte title: merkle proof of existence - proof_path: - type: string - title: merkle proof path proof_height: title: height at which the proof was retrieved type: object @@ -28996,7 +34610,7 @@ definitions: from which the proof was retrieved. - ibc.connection.QueryConnectionsResponse: + ibc.core.connection.v1.QueryConnectionsResponse: type: object properties: connections: @@ -29013,7 +34627,21 @@ definitions: versions: type: array items: - type: string + type: object + properties: + identifier: + type: string + title: unique version identifier + features: + type: array + items: + type: string + title: list of features compatible with the specified identifier + description: >- + Version defines the versioning scheme used to negotiate the + IBC verison in + + the connection handshake. title: >- IBC version which can be utilised to determine encodings or protocols for @@ -29114,7 +34742,7 @@ definitions: RPC method. - ibc.connection.State: + ibc.core.connection.v1.State: type: string enum: - STATE_UNINITIALIZED_UNSPECIFIED @@ -29131,7 +34759,21 @@ definitions: - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty chain. - STATE_OPEN: A connection end has completed the handshake. - ibc.transfer.DenomTrace: + ibc.core.connection.v1.Version: + type: object + properties: + identifier: + type: string + title: unique version identifier + features: + type: array + items: + type: string + title: list of features compatible with the specified identifier + description: |- + Version defines the versioning scheme used to negotiate the IBC verison in + the connection handshake. + ibc.applications.transfer.v1.DenomTrace: type: object properties: path: @@ -29149,12 +34791,11 @@ definitions: the source tracing information path. - ibc.transfer.Params: + ibc.applications.transfer.v1.Params: type: object properties: send_enabled: type: boolean - format: boolean description: >- send_enabled enables or disables all cross-chain token transfers from this @@ -29162,7 +34803,6 @@ definitions: chain. receive_enabled: type: boolean - format: boolean description: >- receive_enabled enables or disables all cross-chain token transfers to this @@ -29177,7 +34817,7 @@ definitions: SendEnabled parameter for the denomination to false. - ibc.transfer.QueryDenomTraceResponse: + ibc.applications.transfer.v1.QueryDenomTraceResponse: type: object properties: denom_trace: @@ -29197,7 +34837,7 @@ definitions: description: |- QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC method. - ibc.transfer.QueryDenomTracesResponse: + ibc.applications.transfer.v1.QueryDenomTracesResponse: type: object properties: denom_traces: @@ -29244,7 +34884,7 @@ definitions: RPC method. - ibc.transfer.QueryParamsResponse: + ibc.applications.transfer.v1.QueryParamsResponse: type: object properties: params: @@ -29253,7 +34893,6 @@ definitions: properties: send_enabled: type: boolean - format: boolean description: >- send_enabled enables or disables all cross-chain token transfers from this @@ -29261,7 +34900,6 @@ definitions: chain. receive_enabled: type: boolean - format: boolean description: >- receive_enabled enables or disables all cross-chain token transfers to this diff --git a/docs/ibc/custom.md b/docs/ibc/custom.md index 56d25cd14afe..dd840ebf135e 100644 --- a/docs/ibc/custom.md +++ b/docs/ibc/custom.md @@ -286,7 +286,7 @@ keepers. Thus, the `OnRecvPacket` callback only needs to worry about making the changes given the packet data without worrying about whether the packet is valid or not. Modules must return an acknowledgement as a byte string and return it to the IBC handler. -The IBC handler will then commit this acknowledgment of the packet so that a relayer may relay the +The IBC handler will then commit this acknowledgement of the packet so that a relayer may relay the acknowledgement back to the sender module. ```go @@ -354,7 +354,7 @@ with some additional data that could be useful for remediation if the packet pro Since the modules are responsible for agreeing on an encoding/decoding standard for packet data and acknowledgements, IBC will pass in the acknowledgements as `[]byte` to this callback. The callback -is responsible for decoding the acknowledgment and processing it. +is responsible for decoding the acknowledgement and processing it. ```go OnAcknowledgementPacket( diff --git a/proto/ibc/core/channel/v1/channel.proto b/proto/ibc/core/channel/v1/channel.proto index 376ce9764e63..302a48068953 100644 --- a/proto/ibc/core/channel/v1/channel.proto +++ b/proto/ibc/core/channel/v1/channel.proto @@ -114,9 +114,11 @@ message Packet { uint64 timeout_timestamp = 8 [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; } -// PacketAckCommitment defines the genesis type necessary to retrieve and store -// acknowlegements. -message PacketAckCommitment { +// PacketState defines the generic type necessary to retrieve and store +// packet commitments, acknowledgements, and receipts. +// Caller is responsible for knowing the context necessary to interpret this +// state as a commitment, acknowledgement, or a receipt. +message PacketState { option (gogoproto.goproto_getters) = false; // channel port identifier. @@ -125,8 +127,8 @@ message PacketAckCommitment { string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; // packet sequence. uint64 sequence = 3; - // packet commitment hash. - bytes hash = 4; + // embedded data that represents packet state. + bytes data = 4; } // Acknowledgement is the recommended acknowledgement format to be used by @@ -142,4 +144,4 @@ message Acknowledgement { bytes result = 21; string error = 22; } -} \ No newline at end of file +} diff --git a/proto/ibc/core/channel/v1/genesis.proto b/proto/ibc/core/channel/v1/genesis.proto index c7ff9b33f9ee..98a7e630aa67 100644 --- a/proto/ibc/core/channel/v1/genesis.proto +++ b/proto/ibc/core/channel/v1/genesis.proto @@ -9,14 +9,14 @@ import "ibc/core/channel/v1/channel.proto"; // GenesisState defines the ibc channel submodule's genesis state. message GenesisState { repeated IdentifiedChannel channels = 1 [(gogoproto.casttype) = "IdentifiedChannel", (gogoproto.nullable) = false]; - repeated PacketAckCommitment acknowledgements = 2 - [(gogoproto.casttype) = "PacketAckCommitment", (gogoproto.nullable) = false]; - repeated PacketAckCommitment commitments = 3 [(gogoproto.nullable) = false]; - repeated PacketSequence send_sequences = 4 + repeated PacketState acknowledgements = 2 [(gogoproto.nullable) = false]; + repeated PacketState commitments = 3 [(gogoproto.nullable) = false]; + repeated PacketState receipts = 4 [(gogoproto.nullable) = false]; + repeated PacketSequence send_sequences = 5 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"send_sequences\""]; - repeated PacketSequence recv_sequences = 5 + repeated PacketSequence recv_sequences = 6 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"recv_sequences\""]; - repeated PacketSequence ack_sequences = 6 + repeated PacketSequence ack_sequences = 7 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"ack_sequences\""]; } diff --git a/proto/ibc/core/channel/v1/query.proto b/proto/ibc/core/channel/v1/query.proto index 16faf462d560..dcff04f7f457 100644 --- a/proto/ibc/core/channel/v1/query.proto +++ b/proto/ibc/core/channel/v1/query.proto @@ -47,29 +47,41 @@ service Query { "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}"; } - // PacketCommitments returns the all the packet commitments hashes associated + // PacketCommitments returns all the packet commitments hashes associated // with a channel. rpc PacketCommitments(QueryPacketCommitmentsRequest) returns (QueryPacketCommitmentsResponse) { option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments"; } + // PacketReceipt queries if a given packet sequence has been received on the queried chain + rpc PacketReceipt(QueryPacketReceiptRequest) returns (QueryPacketReceiptResponse) { + option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}"; + } + // PacketAcknowledgement queries a stored packet acknowledgement hash. rpc PacketAcknowledgement(QueryPacketAcknowledgementRequest) returns (QueryPacketAcknowledgementResponse) { option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}"; } - // UnreceivedPackets returns all the unrelayed IBC packets associated with a + // PacketAcknowledgements returns all the packet acknowledgements associated + // with a channel. + rpc PacketAcknowledgements(QueryPacketAcknowledgementsRequest) returns (QueryPacketAcknowledgementsResponse) { + option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements"; + } + + + // UnreceivedPackets returns all the unreceived IBC packets associated with a // channel and sequences. rpc UnreceivedPackets(QueryUnreceivedPacketsRequest) returns (QueryUnreceivedPacketsResponse) { option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/" "{packet_commitment_sequences}/unreceived_packets"; } - // UnrelayedAcks returns all the unrelayed IBC acknowledgements associated with a + // UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a // channel and sequences. - rpc UnrelayedAcks(QueryUnrelayedAcksRequest) returns (QueryUnrelayedAcksResponse) { + rpc UnreceivedAcks(QueryUnreceivedAcksRequest) returns (QueryUnreceivedAcksResponse) { option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/" - "{packet_commitment_sequences}/unrelayed_acks"; + "{packet_ack_sequences}/unreceived_acks"; } // NextSequenceReceive returns the next receive sequence for a given channel. @@ -192,7 +204,7 @@ message QueryPacketCommitmentRequest { } // QueryPacketCommitmentResponse defines the client query response for a packet -// which also includes a proof, its path and the height form which the proof was +// which also includes a proof and the height from which the proof was // retrieved message QueryPacketCommitmentResponse { // packet associated with the request fields @@ -217,13 +229,36 @@ message QueryPacketCommitmentsRequest { // QueryPacketCommitmentsResponse is the request type for the // Query/QueryPacketCommitments RPC method message QueryPacketCommitmentsResponse { - repeated ibc.core.channel.v1.PacketAckCommitment commitments = 1; + repeated ibc.core.channel.v1.PacketState commitments = 1; // pagination response cosmos.base.query.v1beta1.PageResponse pagination = 2; // query block height ibc.core.client.v1.Height height = 3 [(gogoproto.nullable) = false]; } +// QueryPacketReceiptRequest is the request type for the +// Query/PacketReceipt RPC method +message QueryPacketReceiptRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // packet sequence + uint64 sequence = 3; +} + +// QueryPacketReceiptResponse defines the client query response for a packet receipt +// which also includes a proof, and the height from which the proof was +// retrieved +message QueryPacketReceiptResponse { + // success flag for if receipt exists + bool received = 2; + // merkle proof of existence + bytes proof = 3; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; +} + // QueryPacketAcknowledgementRequest is the request type for the // Query/PacketAcknowledgement RPC method message QueryPacketAcknowledgementRequest { @@ -236,7 +271,7 @@ message QueryPacketAcknowledgementRequest { } // QueryPacketAcknowledgementResponse defines the client query response for a -// packet which also includes a proof, its path and the height form which the +// packet which also includes a proof and the height from which the // proof was retrieved message QueryPacketAcknowledgementResponse { // packet associated with the request fields @@ -247,6 +282,27 @@ message QueryPacketAcknowledgementResponse { ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } +// QueryPacketAcknowledgementsRequest is the request type for the +// Query/QueryPacketCommitments RPC method +message QueryPacketAcknowledgementsRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 3; +} + +// QueryPacketAcknowledgemetsResponse is the request type for the +// Query/QueryPacketAcknowledgements RPC method +message QueryPacketAcknowledgementsResponse { + repeated ibc.core.channel.v1.PacketState acknowledgements = 1; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; + // query block height + ibc.core.client.v1.Height height = 3 [(gogoproto.nullable) = false]; +} + // QueryUnreceivedPacketsRequest is the request type for the // Query/UnreceivedPackets RPC method message QueryUnreceivedPacketsRequest { @@ -267,21 +323,21 @@ message QueryUnreceivedPacketsResponse { ibc.core.client.v1.Height height = 2 [(gogoproto.nullable) = false]; } -// QueryUnrelayedAcksRequest is the request type for the -// Query/UnrelayedAcks RPC method -message QueryUnrelayedAcksRequest { +// QueryUnreceivedAcks is the request type for the +// Query/UnreceivedAcks RPC method +message QueryUnreceivedAcksRequest { // port unique identifier string port_id = 1; // channel unique identifier string channel_id = 2; - // list of commitment sequences - repeated uint64 packet_commitment_sequences = 3; + // list of acknowledgement sequences + repeated uint64 packet_ack_sequences = 3; } -// QueryUnrelayedAcksResponse is the response type for the -// Query/UnrelayedAcks RPC method -message QueryUnrelayedAcksResponse { - // list of unrelayed acknowledgement sequences +// QueryUnreceivedAcksResponse is the response type for the +// Query/UnreceivedAcks RPC method +message QueryUnreceivedAcksResponse { + // list of unreceived acknowledgement sequences repeated uint64 sequences = 1; // query block height ibc.core.client.v1.Height height = 2 [(gogoproto.nullable) = false]; diff --git a/x/ibc/core/04-channel/client/cli/cli.go b/x/ibc/core/04-channel/client/cli/cli.go index 5eb4d81ae432..baf386fecaf3 100644 --- a/x/ibc/core/04-channel/client/cli/cli.go +++ b/x/ibc/core/04-channel/client/cli/cli.go @@ -24,8 +24,10 @@ func GetQueryCmd() *cobra.Command { GetCmdQueryChannelClientState(), GetCmdQueryPacketCommitment(), GetCmdQueryPacketCommitments(), + GetCmdQueryPacketReceipt(), + GetCmdQueryPacketAcknowledgement(), GetCmdQueryUnreceivedPackets(), - GetCmdQueryUnrelayedAcks(), + GetCmdQueryUnreceivedAcks(), GetCmdQueryNextSequenceReceive(), // TODO: next sequence Send ? ) diff --git a/x/ibc/core/04-channel/client/cli/query.go b/x/ibc/core/04-channel/client/cli/query.go index 0f2f95dbc571..cfb10183d152 100644 --- a/x/ibc/core/04-channel/client/cli/query.go +++ b/x/ibc/core/04-channel/client/cli/query.go @@ -211,14 +211,14 @@ func GetCmdQueryPacketCommitments() *cobra.Command { return cmd } -// GetCmdQueryPacketCommitment defines the command to query a channel end +// GetCmdQueryPacketCommitment defines the command to query a packet commitment func GetCmdQueryPacketCommitment() *cobra.Command { cmd := &cobra.Command{ Use: "packet-commitment [port-id] [channel-id] [sequence]", Short: "Query a packet commitment", Long: "Query a packet commitment", Example: fmt.Sprintf( - "%s query %s %s end [port-id] [channel-id]", version.AppName, host.ModuleName, types.SubModuleName, + "%s query %s %s packet-commitment [port-id] [channel-id] [sequence]", version.AppName, host.ModuleName, types.SubModuleName, ), Args: cobra.ExactArgs(3), RunE: func(cmd *cobra.Command, args []string) error { @@ -252,6 +252,88 @@ func GetCmdQueryPacketCommitment() *cobra.Command { return cmd } +// GetCmdQueryPacketReceipt defines the command to query a packet receipt +func GetCmdQueryPacketReceipt() *cobra.Command { + cmd := &cobra.Command{ + Use: "packet-receipt [port-id] [channel-id] [sequence]", + Short: "Query a packet receipt", + Long: "Query a packet receipt", + Example: fmt.Sprintf( + "%s query %s %s packet-receipt [port-id] [channel-id] [sequence]", version.AppName, host.ModuleName, types.SubModuleName, + ), + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags()) + if err != nil { + return err + } + + portID := args[0] + channelID := args[1] + prove, _ := cmd.Flags().GetBool(flags.FlagProve) + + seq, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return err + } + + res, err := utils.QueryPacketReceipt(clientCtx, portID, channelID, seq, prove) + if err != nil { + return err + } + + return clientCtx.PrintOutput(res) + }, + } + + cmd.Flags().Bool(flags.FlagProve, true, "show proofs for the query results") + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryPacketAcknowledgement defines the command to query a packet acknowledgement +func GetCmdQueryPacketAcknowledgement() *cobra.Command { + cmd := &cobra.Command{ + Use: "packet-ack [port-id] [channel-id] [sequence]", + Short: "Query a packet acknowledgement", + Long: "Query a packet acknowledgement", + Example: fmt.Sprintf( + "%s query %s %s packet-ack [port-id] [channel-id] [sequence]", version.AppName, host.ModuleName, types.SubModuleName, + ), + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags()) + if err != nil { + return err + } + + portID := args[0] + channelID := args[1] + prove, _ := cmd.Flags().GetBool(flags.FlagProve) + + seq, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return err + } + + res, err := utils.QueryPacketAcknowledgement(clientCtx, portID, channelID, seq, prove) + if err != nil { + return err + } + + return clientCtx.PrintOutput(res) + }, + } + + cmd.Flags().Bool(flags.FlagProve, true, "show proofs for the query results") + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + // GetCmdQueryUnreceivedPackets defines the command to query all the unreceived // packets on the receiving chain func GetCmdQueryUnreceivedPackets() *cobra.Command { @@ -264,7 +346,7 @@ The return value represents: - Unreceived packet commitments: no acknowledgement exists on receiving chain for the given packet commitment sequence on sending chain. `, Example: fmt.Sprintf("%s query %s %s unreceived-packets [port-id] [channel-id] --sequences=1,2,3", version.AppName, host.ModuleName, types.SubModuleName), - Args: cobra.ExactArgs(3), + Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags()) @@ -304,18 +386,18 @@ The return value represents: return cmd } -// GetCmdQueryUnrelayedAcks defines the command to query all the unrelayed acks on the original sending chain -func GetCmdQueryUnrelayedAcks() *cobra.Command { +// GetCmdQueryUnreceivedAcks defines the command to query all the unreceived acks on the original sending chain +func GetCmdQueryUnreceivedAcks() *cobra.Command { cmd := &cobra.Command{ - Use: "unrelayed-acks [port-id] [channel-id]", - Short: "Query all the unrelayed acks associated with a channel", - Long: `Given a list of packet commitment sequences from counterparty, determine if an ack on executing chain has not been relayed to counterparty. + Use: "unreceived-acks [port-id] [channel-id]", + Short: "Query all the unreceived acks associated with a channel", + Long: `Given a list of acknowledgement sequences from counterparty, determine if an ack on the counterparty chain has been received on the executing chain. The return value represents: -- Unrelayed packet acknowledgement: packet commitment exists on original sending chain and ack exists on receiving (executing) chain. +- Unreceived packet acknowledgement: packet commitment exists on original sending (executing) chain and ack exists on receiving chain. `, - Example: fmt.Sprintf("%s query %s %s unrelayed-acks [port-id] [channel-id] --sequences=1,2,3", version.AppName, host.ModuleName, types.SubModuleName), - Args: cobra.ExactArgs(3), + Example: fmt.Sprintf("%s query %s %s unreceived-acks [port-id] [channel-id] --sequences=1,2,3", version.AppName, host.ModuleName, types.SubModuleName), + Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags()) @@ -334,13 +416,13 @@ The return value represents: seqs[i] = uint64(seqSlice[i]) } - req := &types.QueryUnrelayedAcksRequest{ - PortId: args[0], - ChannelId: args[1], - PacketCommitmentSequences: seqs, + req := &types.QueryUnreceivedAcksRequest{ + PortId: args[0], + ChannelId: args[1], + PacketAckSequences: seqs, } - res, err := queryClient.UnrelayedAcks(context.Background(), req) + res, err := queryClient.UnreceivedAcks(context.Background(), req) if err != nil { return err } diff --git a/x/ibc/core/04-channel/client/utils/utils.go b/x/ibc/core/04-channel/client/utils/utils.go index 4aa1363d3107..a5cae383bd6c 100644 --- a/x/ibc/core/04-channel/client/utils/utils.go +++ b/x/ibc/core/04-channel/client/utils/utils.go @@ -15,45 +15,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) -// QueryPacketCommitment returns a packet commitment. -// If prove is true, it performs an ABCI store query in order to retrieve the merkle proof. Otherwise, -// it uses the gRPC query client. -func QueryPacketCommitment( - clientCtx client.Context, portID, channelID string, - sequence uint64, prove bool, -) (*types.QueryPacketCommitmentResponse, error) { - if prove { - return queryPacketCommitmentABCI(clientCtx, portID, channelID, sequence) - } - - queryClient := types.NewQueryClient(clientCtx) - req := &types.QueryPacketCommitmentRequest{ - PortId: portID, - ChannelId: channelID, - Sequence: sequence, - } - - return queryClient.PacketCommitment(context.Background(), req) -} - -func queryPacketCommitmentABCI( - clientCtx client.Context, portID, channelID string, sequence uint64, -) (*types.QueryPacketCommitmentResponse, error) { - key := host.KeyPacketCommitment(portID, channelID, sequence) - - value, proofBz, proofHeight, err := ibcclient.QueryTendermintProof(clientCtx, key) - if err != nil { - return nil, err - } - - // check if packet commitment exists - if len(value) == 0 { - return nil, sdkerrors.Wrapf(types.ErrPacketCommitmentNotFound, "portID (%s), channelID (%s), sequence (%d)", portID, channelID, sequence) - } - - return types.NewQueryPacketCommitmentResponse(value, proofBz, proofHeight), nil -} - // QueryChannel returns a channel end. // If prove is true, it performs an ABCI store query in order to retrieve the merkle proof. Otherwise, // it uses the gRPC query client. @@ -232,6 +193,79 @@ func queryNextSequenceRecvABCI(clientCtx client.Context, portID, channelID strin return types.NewQueryNextSequenceReceiveResponse(sequence, proofBz, proofHeight), nil } +// QueryPacketCommitment returns a packet commitment. +// If prove is true, it performs an ABCI store query in order to retrieve the merkle proof. Otherwise, +// it uses the gRPC query client. +func QueryPacketCommitment( + clientCtx client.Context, portID, channelID string, + sequence uint64, prove bool, +) (*types.QueryPacketCommitmentResponse, error) { + if prove { + return queryPacketCommitmentABCI(clientCtx, portID, channelID, sequence) + } + + queryClient := types.NewQueryClient(clientCtx) + req := &types.QueryPacketCommitmentRequest{ + PortId: portID, + ChannelId: channelID, + Sequence: sequence, + } + + return queryClient.PacketCommitment(context.Background(), req) +} + +func queryPacketCommitmentABCI( + clientCtx client.Context, portID, channelID string, sequence uint64, +) (*types.QueryPacketCommitmentResponse, error) { + key := host.KeyPacketCommitment(portID, channelID, sequence) + + value, proofBz, proofHeight, err := ibcclient.QueryTendermintProof(clientCtx, key) + if err != nil { + return nil, err + } + + // check if packet commitment exists + if len(value) == 0 { + return nil, sdkerrors.Wrapf(types.ErrPacketCommitmentNotFound, "portID (%s), channelID (%s), sequence (%d)", portID, channelID, sequence) + } + + return types.NewQueryPacketCommitmentResponse(value, proofBz, proofHeight), nil +} + +// QueryPacketReceipt returns data about a packet receipt. +// If prove is true, it performs an ABCI store query in order to retrieve the merkle proof. Otherwise, +// it uses the gRPC query client. +func QueryPacketReceipt( + clientCtx client.Context, portID, channelID string, + sequence uint64, prove bool, +) (*types.QueryPacketReceiptResponse, error) { + if prove { + return queryPacketReceiptABCI(clientCtx, portID, channelID, sequence) + } + + queryClient := types.NewQueryClient(clientCtx) + req := &types.QueryPacketReceiptRequest{ + PortId: portID, + ChannelId: channelID, + Sequence: sequence, + } + + return queryClient.PacketReceipt(context.Background(), req) +} + +func queryPacketReceiptABCI( + clientCtx client.Context, portID, channelID string, sequence uint64, +) (*types.QueryPacketReceiptResponse, error) { + key := host.KeyPacketReceipt(portID, channelID, sequence) + + value, proofBz, proofHeight, err := ibcclient.QueryTendermintProof(clientCtx, key) + if err != nil { + return nil, err + } + + return types.NewQueryPacketReceiptResponse(value != nil, proofBz, proofHeight), nil +} + // QueryPacketAcknowledgement returns the data about a packet acknowledgement. // If prove is true, it performs an ABCI store query in order to retrieve the merkle proof. Otherwise, // it uses the gRPC query client diff --git a/x/ibc/core/04-channel/genesis.go b/x/ibc/core/04-channel/genesis.go index 24034f171ecd..bd557bc5bfb6 100644 --- a/x/ibc/core/04-channel/genesis.go +++ b/x/ibc/core/04-channel/genesis.go @@ -14,10 +14,13 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, gs types.GenesisState) { k.SetChannel(ctx, channel.PortId, channel.ChannelId, ch) } for _, ack := range gs.Acknowledgements { - k.SetPacketAcknowledgement(ctx, ack.PortId, ack.ChannelId, ack.Sequence, ack.Hash) + k.SetPacketAcknowledgement(ctx, ack.PortId, ack.ChannelId, ack.Sequence, ack.Data) } for _, commitment := range gs.Commitments { - k.SetPacketCommitment(ctx, commitment.PortId, commitment.ChannelId, commitment.Sequence, commitment.Hash) + k.SetPacketCommitment(ctx, commitment.PortId, commitment.ChannelId, commitment.Sequence, commitment.Data) + } + for _, receipt := range gs.Receipts { + k.SetPacketReceipt(ctx, receipt.PortId, receipt.ChannelId, receipt.Sequence) } for _, ss := range gs.SendSequences { k.SetNextSequenceSend(ctx, ss.PortId, ss.ChannelId, ss.Sequence) @@ -36,6 +39,7 @@ func ExportGenesis(ctx sdk.Context, k keeper.Keeper) types.GenesisState { Channels: k.GetAllChannels(ctx), Acknowledgements: k.GetAllPacketAcks(ctx), Commitments: k.GetAllPacketCommitments(ctx), + Receipts: k.GetAllPacketReceipts(ctx), SendSequences: k.GetAllPacketSendSeqs(ctx), RecvSequences: k.GetAllPacketRecvSeqs(ctx), AckSequences: k.GetAllPacketAckSeqs(ctx), diff --git a/x/ibc/core/04-channel/keeper/grpc_query.go b/x/ibc/core/04-channel/keeper/grpc_query.go index 86d340a507cc..5e279ee43591 100644 --- a/x/ibc/core/04-channel/keeper/grpc_query.go +++ b/x/ibc/core/04-channel/keeper/grpc_query.go @@ -237,7 +237,7 @@ func (q Keeper) PacketCommitments(c context.Context, req *types.QueryPacketCommi ctx := sdk.UnwrapSDKContext(c) - commitments := []*types.PacketAckCommitment{} + commitments := []*types.PacketState{} store := prefix.NewStore(ctx.KVStore(q.storeKey), []byte(host.PacketCommitmentPrefixPath(req.PortId, req.ChannelId))) pageRes, err := query.Paginate(store, req.Pagination, func(key, value []byte) error { @@ -248,7 +248,7 @@ func (q Keeper) PacketCommitments(c context.Context, req *types.QueryPacketCommi return err } - commitment := types.NewPacketAckCommitment(req.PortId, req.ChannelId, sequence, value) + commitment := types.NewPacketState(req.PortId, req.ChannelId, sequence, value) commitments = append(commitments, &commitment) return nil }) @@ -265,6 +265,28 @@ func (q Keeper) PacketCommitments(c context.Context, req *types.QueryPacketCommi }, nil } +// PacketReceipt implements the Query/PacketReceipt gRPC method +func (q Keeper) PacketReceipt(c context.Context, req *types.QueryPacketReceiptRequest) (*types.QueryPacketReceiptResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + if err := validategRPCRequest(req.PortId, req.ChannelId); err != nil { + return nil, err + } + + if req.Sequence == 0 { + return nil, status.Error(codes.InvalidArgument, "packet sequence cannot be 0") + } + + ctx := sdk.UnwrapSDKContext(c) + + _, recvd := q.GetPacketReceipt(ctx, req.PortId, req.ChannelId, req.Sequence) + + selfHeight := clienttypes.GetSelfHeight(ctx) + return types.NewQueryPacketReceiptResponse(recvd, nil, selfHeight), nil +} + // PacketAcknowledgement implements the Query/PacketAcknowledgement gRPC method func (q Keeper) PacketAcknowledgement(c context.Context, req *types.QueryPacketAcknowledgementRequest) (*types.QueryPacketAcknowledgementResponse, error) { if req == nil { @@ -290,9 +312,49 @@ func (q Keeper) PacketAcknowledgement(c context.Context, req *types.QueryPacketA return types.NewQueryPacketAcknowledgementResponse(acknowledgementBz, nil, selfHeight), nil } +// PacketAcknowledgements implements the Query/PacketAcknowledgements gRPC method +func (q Keeper) PacketAcknowledgements(c context.Context, req *types.QueryPacketAcknowledgementsRequest) (*types.QueryPacketAcknowledgementsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + if err := validategRPCRequest(req.PortId, req.ChannelId); err != nil { + return nil, err + } + + ctx := sdk.UnwrapSDKContext(c) + + acks := []*types.PacketState{} + store := prefix.NewStore(ctx.KVStore(q.storeKey), []byte(host.PacketAcknowledgementPrefixPath(req.PortId, req.ChannelId))) + + pageRes, err := query.Paginate(store, req.Pagination, func(key, value []byte) error { + keySplit := strings.Split(string(key), "/") + + sequence, err := strconv.ParseUint(keySplit[len(keySplit)-1], 10, 64) + if err != nil { + return err + } + + ack := types.NewPacketState(req.PortId, req.ChannelId, sequence, value) + acks = append(acks, &ack) + return nil + }) + + if err != nil { + return nil, err + } + + selfHeight := clienttypes.GetSelfHeight(ctx) + return &types.QueryPacketAcknowledgementsResponse{ + Acknowledgements: acks, + Pagination: pageRes, + Height: selfHeight, + }, nil +} + // UnreceivedPackets implements the Query/UnreceivedPackets gRPC method. Given // a list of counterparty packet commitments, the querier checks if the packet -// has already been received by checking if an acknowledgement exists on this +// has already been received by checking if a receipt exists on this // chain for the packet sequence. All packets that haven't been received yet // are returned in the response // Usage: To use this method correctly, first query all packet commitments on @@ -306,9 +368,6 @@ func (q Keeper) PacketAcknowledgement(c context.Context, req *types.QueryPacketA // commitments is correct and will not function properly if the list // is not up to date. Ideally the query height should equal the latest height // on the counterparty's client which represents this chain. -// TODO: Replace GetPacketAcknowledgement with GetPacketReceipt once async -// acknowledgements issue is implemented. -// Issue #7254: https://github.com/cosmos/cosmos-sdk/issues/7254 func (q Keeper) UnreceivedPackets(c context.Context, req *types.QueryUnreceivedPacketsRequest) (*types.QueryUnreceivedPacketsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") @@ -327,8 +386,8 @@ func (q Keeper) UnreceivedPackets(c context.Context, req *types.QueryUnreceivedP return nil, status.Errorf(codes.InvalidArgument, "packet sequence %d cannot be 0", i) } - // if acknowledgement exists on the receiving chain, then packet has already been received - if _, found := q.GetPacketAcknowledgement(ctx, req.PortId, req.ChannelId, seq); !found { + // if packet receipt exists on the receiving chain, then packet has already been received + if _, found := q.GetPacketReceipt(ctx, req.PortId, req.ChannelId, seq); !found { unreceivedSequences = append(unreceivedSequences, seq) } @@ -341,24 +400,24 @@ func (q Keeper) UnreceivedPackets(c context.Context, req *types.QueryUnreceivedP }, nil } -// UnrelayedAcks implements the Query/UnrelayedAcks gRPC method. Given +// UnreceivedAcks implements the Query/UnreceivedAcks gRPC method. Given // a list of counterparty packet acknowledgements, the querier checks if the packet // has already been received by checking if the packet commitment still exists on this // chain (original sender) for the packet sequence. // All acknowledgmeents that haven't been received yet are returned in the response. -// Usage: To use this method correctly, first query all packet commitments on -// the sending chain using the Query/PacketCommitments gRPC method. -// Then input the returned sequences into the QueryUnrelayedPacketsRequest -// and send the request to this Query/UnrelayedPackets on the **receiving** +// Usage: To use this method correctly, first query all packet acknowledgements on +// the original receiving chain (ie the chain that wrote the acks) using the Query/PacketAcknowledgements gRPC method. +// Then input the returned sequences into the QueryUnreceivedAcksRequest +// and send the request to this Query/UnreceivedAcks on the **original sending** // chain. This gRPC method will then return the list of packet sequences whose // acknowledgements are already written on the receiving chain but haven't yet -// been relayed back to the sending chain. +// been received back to the sending chain. // // NOTE: The querier makes the assumption that the provided list of packet // acknowledgements is correct and will not function properly if the list // is not up to date. Ideally the query height should equal the latest height // on the counterparty's client which represents this chain. -func (q Keeper) UnrelayedAcks(c context.Context, req *types.QueryUnrelayedAcksRequest) (*types.QueryUnrelayedAcksResponse, error) { +func (q Keeper) UnreceivedAcks(c context.Context, req *types.QueryUnreceivedAcksRequest) (*types.QueryUnreceivedAcksResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -369,24 +428,24 @@ func (q Keeper) UnrelayedAcks(c context.Context, req *types.QueryUnrelayedAcksRe ctx := sdk.UnwrapSDKContext(c) - var unrelayedSequences = []uint64{} + var unreceivedSequences = []uint64{} - for i, seq := range req.PacketCommitmentSequences { + for i, seq := range req.PacketAckSequences { if seq == 0 { return nil, status.Errorf(codes.InvalidArgument, "packet sequence %d cannot be 0", i) } // if packet commitment still exists on the original sending chain, then packet ack has not been received // since processing the ack will delete the packet commitment - if _, found := q.GetPacketAcknowledgement(ctx, req.PortId, req.ChannelId, seq); found { - unrelayedSequences = append(unrelayedSequences, seq) + if commitment := q.GetPacketCommitment(ctx, req.PortId, req.ChannelId, seq); len(commitment) != 0 { + unreceivedSequences = append(unreceivedSequences, seq) } } selfHeight := clienttypes.GetSelfHeight(ctx) - return &types.QueryUnrelayedAcksResponse{ - Sequences: unrelayedSequences, + return &types.QueryUnreceivedAcksResponse{ + Sequences: unreceivedSequences, Height: selfHeight, }, nil } diff --git a/x/ibc/core/04-channel/keeper/grpc_query_test.go b/x/ibc/core/04-channel/keeper/grpc_query_test.go index 9621c091682b..031b89cc103e 100644 --- a/x/ibc/core/04-channel/keeper/grpc_query_test.go +++ b/x/ibc/core/04-channel/keeper/grpc_query_test.go @@ -649,7 +649,7 @@ func (suite *KeeperTestSuite) TestQueryPacketCommitment() { func (suite *KeeperTestSuite) TestQueryPacketCommitments() { var ( req *types.QueryPacketCommitmentsRequest - expCommitments = []*types.PacketAckCommitment{} + expCommitments = []*types.PacketState{} ) testCases := []struct { @@ -677,7 +677,7 @@ func (suite *KeeperTestSuite) TestQueryPacketCommitments() { { "success, empty res", func() { - expCommitments = []*types.PacketAckCommitment{} + expCommitments = []*types.PacketState{} req = &types.QueryPacketCommitmentsRequest{ PortId: "test-port-id", @@ -696,11 +696,11 @@ func (suite *KeeperTestSuite) TestQueryPacketCommitments() { func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) - expCommitments = make([]*types.PacketAckCommitment, 9) + expCommitments = make([]*types.PacketState, 9) for i := uint64(0); i < 9; i++ { - commitment := types.NewPacketAckCommitment(channelA.PortID, channelA.ID, i, []byte(fmt.Sprintf("hash_%d", i))) - suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketCommitment(suite.chainA.GetContext(), commitment.PortId, commitment.ChannelId, commitment.Sequence, commitment.Hash) + commitment := types.NewPacketState(channelA.PortID, channelA.ID, i, []byte(fmt.Sprintf("hash_%d", i))) + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketCommitment(suite.chainA.GetContext(), commitment.PortId, commitment.ChannelId, commitment.Sequence, commitment.Data) expCommitments[i] = &commitment } @@ -738,6 +738,108 @@ func (suite *KeeperTestSuite) TestQueryPacketCommitments() { } } +func (suite *KeeperTestSuite) TestQueryPacketReceipt() { + var ( + req *types.QueryPacketReceiptRequest + expReceived bool + ) + + testCases := []struct { + msg string + malleate func() + expPass bool + }{ + { + "empty request", + func() { + req = nil + }, + false, + }, + { + "invalid port ID", + func() { + req = &types.QueryPacketReceiptRequest{ + PortId: "", + ChannelId: "test-channel-id", + Sequence: 1, + } + }, + false, + }, + { + "invalid channel ID", + func() { + req = &types.QueryPacketReceiptRequest{ + PortId: "test-port-id", + ChannelId: "", + Sequence: 1, + } + }, + false, + }, + {"invalid sequence", + func() { + req = &types.QueryPacketReceiptRequest{ + PortId: "test-port-id", + ChannelId: "test-channel-id", + Sequence: 0, + } + }, + false, + }, + { + "success: receipt not found", + func() { + _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketReceipt(suite.chainA.GetContext(), channelA.PortID, channelA.ID, 1) + + req = &types.QueryPacketReceiptRequest{ + PortId: channelA.PortID, + ChannelId: channelA.ID, + Sequence: 3, + } + expReceived = false + }, + true, + }, + { + "success: receipt found", + func() { + _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketReceipt(suite.chainA.GetContext(), channelA.PortID, channelA.ID, 1) + + req = &types.QueryPacketReceiptRequest{ + PortId: channelA.PortID, + ChannelId: channelA.ID, + Sequence: 1, + } + expReceived = true + }, + true, + }, + } + + for _, tc := range testCases { + suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { + suite.SetupTest() // reset + + tc.malleate() + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + + res, err := suite.chainA.QueryServer.PacketReceipt(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + suite.Require().Equal(expReceived, res.Received) + } else { + suite.Require().Error(err) + } + }) + } +} + func (suite *KeeperTestSuite) TestQueryPacketAcknowledgement() { var ( req *types.QueryPacketAcknowledgementRequest @@ -835,6 +937,98 @@ func (suite *KeeperTestSuite) TestQueryPacketAcknowledgement() { } } +func (suite *KeeperTestSuite) TestQueryPacketAcknowledgements() { + var ( + req *types.QueryPacketAcknowledgementsRequest + expAcknowledgements = []*types.PacketState{} + ) + + testCases := []struct { + msg string + malleate func() + expPass bool + }{ + { + "empty request", + func() { + req = nil + }, + false, + }, + { + "invalid ID", + func() { + req = &types.QueryPacketAcknowledgementsRequest{ + PortId: "", + ChannelId: "test-channel-id", + } + }, + false, + }, + { + "success, empty res", + func() { + expAcknowledgements = []*types.PacketState{} + + req = &types.QueryPacketAcknowledgementsRequest{ + PortId: "test-port-id", + ChannelId: "test-channel-id", + Pagination: &query.PageRequest{ + Key: nil, + Limit: 2, + CountTotal: true, + }, + } + }, + true, + }, + { + "success", + func() { + _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) + + expAcknowledgements = make([]*types.PacketState, 9) + + for i := uint64(0); i < 9; i++ { + ack := types.NewPacketState(channelA.PortID, channelA.ID, i, []byte(fmt.Sprintf("hash_%d", i))) + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketAcknowledgement(suite.chainA.GetContext(), ack.PortId, ack.ChannelId, ack.Sequence, ack.Data) + expAcknowledgements[i] = &ack + } + + req = &types.QueryPacketAcknowledgementsRequest{ + PortId: channelA.PortID, + ChannelId: channelA.ID, + Pagination: &query.PageRequest{ + Key: nil, + Limit: 11, + CountTotal: true, + }, + } + }, + true, + }, + } + + for _, tc := range testCases { + suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { + suite.SetupTest() // reset + + tc.malleate() + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + + res, err := suite.chainA.QueryServer.PacketAcknowledgements(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + suite.Require().Equal(expAcknowledgements, res.Acknowledgements) + } else { + suite.Require().Error(err) + } + }) + } +} + func (suite *KeeperTestSuite) TestQueryUnreceivedPackets() { var ( req *types.QueryUnreceivedPacketsRequest @@ -885,7 +1079,7 @@ func (suite *KeeperTestSuite) TestQueryUnreceivedPackets() { false, }, { - "basic success unrelayed packet commitments", + "basic success unreceived packet commitments", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) @@ -901,13 +1095,11 @@ func (suite *KeeperTestSuite) TestQueryUnreceivedPackets() { true, }, { - "basic success unrelayed packet commitments, nothing to relay", + "basic success unreceived packet commitments, nothing to relay", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) - // ack exists - ack := types.NewPacketAckCommitment(channelA.PortID, channelA.ID, 1, []byte("hash")) - suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketAcknowledgement(suite.chainA.GetContext(), channelA.PortID, channelA.ID, 1, ack.Hash) + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketReceipt(suite.chainA.GetContext(), channelA.PortID, channelA.ID, 1) expSeq = []uint64{} req = &types.QueryUnreceivedPacketsRequest{ @@ -919,19 +1111,18 @@ func (suite *KeeperTestSuite) TestQueryUnreceivedPackets() { true, }, { - "success multiple unrelayed packet commitments", + "success multiple unreceived packet commitments", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) expSeq = []uint64{} // reset packetCommitments := []uint64{} - // set ack for every other sequence + // set packet receipt for every other sequence for seq := uint64(1); seq < 10; seq++ { packetCommitments = append(packetCommitments, seq) if seq%2 == 0 { - ack := types.NewPacketAckCommitment(channelA.PortID, channelA.ID, seq, []byte("hash")) - suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketAcknowledgement(suite.chainA.GetContext(), channelA.PortID, channelA.ID, seq, ack.Hash) + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketReceipt(suite.chainA.GetContext(), channelA.PortID, channelA.ID, seq) } else { expSeq = append(expSeq, seq) } @@ -967,9 +1158,9 @@ func (suite *KeeperTestSuite) TestQueryUnreceivedPackets() { } } -func (suite *KeeperTestSuite) TestQueryUnrelayedAcks() { +func (suite *KeeperTestSuite) TestQueryUnreceivedAcks() { var ( - req *types.QueryUnrelayedAcksRequest + req *types.QueryUnreceivedAcksRequest expSeq = []uint64{} ) @@ -988,7 +1179,7 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedAcks() { { "invalid port ID", func() { - req = &types.QueryUnrelayedAcksRequest{ + req = &types.QueryUnreceivedAcksRequest{ PortId: "", ChannelId: "test-channel-id", } @@ -998,7 +1189,7 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedAcks() { { "invalid channel ID", func() { - req = &types.QueryUnrelayedAcksRequest{ + req = &types.QueryUnreceivedAcksRequest{ PortId: "test-port-id", ChannelId: "", } @@ -1008,70 +1199,65 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedAcks() { { "invalid seq", func() { - req = &types.QueryUnrelayedAcksRequest{ - PortId: "test-port-id", - ChannelId: "test-channel-id", - PacketCommitmentSequences: []uint64{0}, + req = &types.QueryUnreceivedAcksRequest{ + PortId: "test-port-id", + ChannelId: "test-channel-id", + PacketAckSequences: []uint64{0}, } }, false, }, { - "basic success unrelayed packet acks", + "basic success unreceived packet acks", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) - // ack exists - ack := types.NewPacketAckCommitment(channelA.PortID, channelA.ID, 1, []byte("hash")) - suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketAcknowledgement(suite.chainA.GetContext(), channelA.PortID, channelA.ID, 1, ack.Hash) + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketCommitment(suite.chainA.GetContext(), channelA.PortID, channelA.ID, 1, []byte("commitment")) expSeq = []uint64{1} - req = &types.QueryUnrelayedAcksRequest{ - PortId: channelA.PortID, - ChannelId: channelA.ID, - PacketCommitmentSequences: []uint64{1}, + req = &types.QueryUnreceivedAcksRequest{ + PortId: channelA.PortID, + ChannelId: channelA.ID, + PacketAckSequences: []uint64{1}, } }, true, }, { - "basic success unrelayed packet acknowledgements, nothing to relay", + "basic success unreceived packet acknowledgements, nothing to relay", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) - // no ack exists - expSeq = []uint64{} - req = &types.QueryUnrelayedAcksRequest{ - PortId: channelA.PortID, - ChannelId: channelA.ID, - PacketCommitmentSequences: []uint64{1}, + req = &types.QueryUnreceivedAcksRequest{ + PortId: channelA.PortID, + ChannelId: channelA.ID, + PacketAckSequences: []uint64{1}, } }, true, }, { - "success multiple unrelayed packet acknowledgements", + "success multiple unreceived packet acknowledgements", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) expSeq = []uint64{} // reset - packetCommitments := []uint64{} + packetAcks := []uint64{} - // set ack for every other sequence + // set packet commitment for every other sequence for seq := uint64(1); seq < 10; seq++ { - packetCommitments = append(packetCommitments, seq) + packetAcks = append(packetAcks, seq) if seq%2 == 0 { - ack := types.NewPacketAckCommitment(channelA.PortID, channelA.ID, seq, []byte("hash")) - suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketAcknowledgement(suite.chainA.GetContext(), channelA.PortID, channelA.ID, seq, ack.Hash) + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketCommitment(suite.chainA.GetContext(), channelA.PortID, channelA.ID, seq, []byte("commitement")) expSeq = append(expSeq, seq) } } - req = &types.QueryUnrelayedAcksRequest{ - PortId: channelA.PortID, - ChannelId: channelA.ID, - PacketCommitmentSequences: packetCommitments, + req = &types.QueryUnreceivedAcksRequest{ + PortId: channelA.PortID, + ChannelId: channelA.ID, + PacketAckSequences: packetAcks, } }, true, @@ -1085,7 +1271,7 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedAcks() { tc.malleate() ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) - res, err := suite.chainA.QueryServer.UnrelayedAcks(ctx, req) + res, err := suite.chainA.QueryServer.UnreceivedAcks(ctx, req) if tc.expPass { suite.Require().NoError(err) diff --git a/x/ibc/core/04-channel/keeper/keeper.go b/x/ibc/core/04-channel/keeper/keeper.go index f71abe055289..b3f23ca7fb2b 100644 --- a/x/ibc/core/04-channel/keeper/keeper.go +++ b/x/ibc/core/04-channel/keeper/keeper.go @@ -258,9 +258,9 @@ func (k Keeper) IteratePacketCommitment(ctx sdk.Context, cb func(portID, channel } // GetAllPacketCommitments returns all stored PacketCommitments objects. -func (k Keeper) GetAllPacketCommitments(ctx sdk.Context) (commitments []types.PacketAckCommitment) { +func (k Keeper) GetAllPacketCommitments(ctx sdk.Context) (commitments []types.PacketState) { k.IteratePacketCommitment(ctx, func(portID, channelID string, sequence uint64, hash []byte) bool { - pc := types.NewPacketAckCommitment(portID, channelID, sequence, hash) + pc := types.NewPacketState(portID, channelID, sequence, hash) commitments = append(commitments, pc) return false }) @@ -278,15 +278,34 @@ func (k Keeper) IteratePacketCommitmentAtChannel(ctx sdk.Context, portID, channe // GetAllPacketCommitmentsAtChannel returns all stored PacketCommitments objects for a specified // port ID and channel ID. -func (k Keeper) GetAllPacketCommitmentsAtChannel(ctx sdk.Context, portID, channelID string) (commitments []types.PacketAckCommitment) { +func (k Keeper) GetAllPacketCommitmentsAtChannel(ctx sdk.Context, portID, channelID string) (commitments []types.PacketState) { k.IteratePacketCommitmentAtChannel(ctx, portID, channelID, func(_, _ string, sequence uint64, hash []byte) bool { - pc := types.NewPacketAckCommitment(portID, channelID, sequence, hash) + pc := types.NewPacketState(portID, channelID, sequence, hash) commitments = append(commitments, pc) return false }) return commitments } +// IteratePacketReceipt provides an iterator over all PacketReceipt objects. For each +// receipt, cb will be called. If the cb returns true, the iterator will close +// and stop. +func (k Keeper) IteratePacketReceipt(ctx sdk.Context, cb func(portID, channelID string, sequence uint64, receipt []byte) bool) { + store := ctx.KVStore(k.storeKey) + iterator := sdk.KVStorePrefixIterator(store, []byte(host.KeyPacketReceiptPrefix)) + k.iterateHashes(ctx, iterator, cb) +} + +// GetAllPacketReceipts returns all stored PacketReceipt objects. +func (k Keeper) GetAllPacketReceipts(ctx sdk.Context) (receipts []types.PacketState) { + k.IteratePacketReceipt(ctx, func(portID, channelID string, sequence uint64, receipt []byte) bool { + packetReceipt := types.NewPacketState(portID, channelID, sequence, receipt) + receipts = append(receipts, packetReceipt) + return false + }) + return receipts +} + // IteratePacketAcknowledgement provides an iterator over all PacketAcknowledgement objects. For each // aknowledgement, cb will be called. If the cb returns true, the iterator will close // and stop. @@ -297,9 +316,9 @@ func (k Keeper) IteratePacketAcknowledgement(ctx sdk.Context, cb func(portID, ch } // GetAllPacketAcks returns all stored PacketAcknowledgements objects. -func (k Keeper) GetAllPacketAcks(ctx sdk.Context) (acks []types.PacketAckCommitment) { +func (k Keeper) GetAllPacketAcks(ctx sdk.Context) (acks []types.PacketState) { k.IteratePacketAcknowledgement(ctx, func(portID, channelID string, sequence uint64, ack []byte) bool { - packetAck := types.NewPacketAckCommitment(portID, channelID, sequence, ack) + packetAck := types.NewPacketState(portID, channelID, sequence, ack) acks = append(acks, packetAck) return false }) diff --git a/x/ibc/core/04-channel/keeper/keeper_test.go b/x/ibc/core/04-channel/keeper/keeper_test.go index d69ec96dcdf9..9fcc9e20da6b 100644 --- a/x/ibc/core/04-channel/keeper/keeper_test.go +++ b/x/ibc/core/04-channel/keeper/keeper_test.go @@ -143,51 +143,69 @@ func (suite KeeperTestSuite) TestGetAllSequences() { suite.Equal(expSeqs, ackSeqs) } -// TestGetAllCommitmentsAcks creates a set of acks and packet commitments on two different +// TestGetAllPacketState creates a set of acks, packet commitments, and receipts on two different // channels on chain A and tests their retrieval. -func (suite KeeperTestSuite) TestGetAllCommitmentsAcks() { +func (suite KeeperTestSuite) TestGetAllPacketState() { _, _, connA, connB, channelA0, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) channelA1, _ := suite.coordinator.CreateMockChannels(suite.chainA, suite.chainB, connA, connB, types.UNORDERED) // channel 0 acks - ack1 := types.NewPacketAckCommitment(channelA0.PortID, channelA0.ID, 1, []byte("ack")) - ack2 := types.NewPacketAckCommitment(channelA0.PortID, channelA0.ID, 2, []byte("ack")) + ack1 := types.NewPacketState(channelA0.PortID, channelA0.ID, 1, []byte("ack")) + ack2 := types.NewPacketState(channelA0.PortID, channelA0.ID, 2, []byte("ack")) // duplicate ack - ack2dup := types.NewPacketAckCommitment(channelA0.PortID, channelA0.ID, 2, []byte("ack")) + ack2dup := types.NewPacketState(channelA0.PortID, channelA0.ID, 2, []byte("ack")) // channel 1 acks - ack3 := types.NewPacketAckCommitment(channelA1.PortID, channelA1.ID, 1, []byte("ack")) + ack3 := types.NewPacketState(channelA1.PortID, channelA1.ID, 1, []byte("ack")) + + // create channel 0 receipts + rec1 := types.NewPacketState(channelA0.PortID, channelA0.ID, 1, []byte("")) + rec2 := types.NewPacketState(channelA0.PortID, channelA0.ID, 2, []byte("")) + + // channel 1 receipts + rec3 := types.NewPacketState(channelA1.PortID, channelA1.ID, 1, []byte("")) + rec4 := types.NewPacketState(channelA1.PortID, channelA1.ID, 2, []byte("")) // channel 0 packet commitments - comm1 := types.NewPacketAckCommitment(channelA0.PortID, channelA0.ID, 1, []byte("hash")) - comm2 := types.NewPacketAckCommitment(channelA0.PortID, channelA0.ID, 2, []byte("hash")) + comm1 := types.NewPacketState(channelA0.PortID, channelA0.ID, 1, []byte("hash")) + comm2 := types.NewPacketState(channelA0.PortID, channelA0.ID, 2, []byte("hash")) // channel 1 packet commitments - comm3 := types.NewPacketAckCommitment(channelA1.PortID, channelA1.ID, 1, []byte("hash")) - comm4 := types.NewPacketAckCommitment(channelA1.PortID, channelA1.ID, 2, []byte("hash")) + comm3 := types.NewPacketState(channelA1.PortID, channelA1.ID, 1, []byte("hash")) + comm4 := types.NewPacketState(channelA1.PortID, channelA1.ID, 2, []byte("hash")) - expAcks := []types.PacketAckCommitment{ack1, ack2, ack3} - expCommitments := []types.PacketAckCommitment{comm1, comm2, comm3, comm4} + expAcks := []types.PacketState{ack1, ack2, ack3} + expReceipts := []types.PacketState{rec1, rec2, rec3, rec4} + expCommitments := []types.PacketState{comm1, comm2, comm3, comm4} ctxA := suite.chainA.GetContext() // set acknowledgements - for _, ack := range []types.PacketAckCommitment{ack1, ack2, ack2dup, ack3} { - suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketAcknowledgement(ctxA, ack.PortId, ack.ChannelId, ack.Sequence, ack.Hash) + for _, ack := range []types.PacketState{ack1, ack2, ack2dup, ack3} { + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketAcknowledgement(ctxA, ack.PortId, ack.ChannelId, ack.Sequence, ack.Data) + } + + // set packet receipts + for _, rec := range expReceipts { + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketReceipt(ctxA, rec.PortId, rec.ChannelId, rec.Sequence) } // set packet commitments for _, comm := range expCommitments { - suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketCommitment(ctxA, comm.PortId, comm.ChannelId, comm.Sequence, comm.Hash) + suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketCommitment(ctxA, comm.PortId, comm.ChannelId, comm.Sequence, comm.Data) } acks := suite.chainA.App.IBCKeeper.ChannelKeeper.GetAllPacketAcks(ctxA) + receipts := suite.chainA.App.IBCKeeper.ChannelKeeper.GetAllPacketReceipts(ctxA) commitments := suite.chainA.App.IBCKeeper.ChannelKeeper.GetAllPacketCommitments(ctxA) + suite.Require().Len(acks, len(expAcks)) suite.Require().Len(commitments, len(expCommitments)) + suite.Require().Len(receipts, len(expReceipts)) suite.Require().Equal(expAcks, acks) + suite.Require().Equal(expReceipts, receipts) suite.Require().Equal(expCommitments, commitments) } @@ -275,7 +293,7 @@ func (suite *KeeperTestSuite) TestGetAllPacketCommitmentsAtChannel() { suite.True(expectedSeqs[packet.Sequence]) suite.Equal(channelA.PortID, packet.PortId) suite.Equal(channelA.ID, packet.ChannelId) - suite.Equal(hash, packet.Hash) + suite.Equal(hash, packet.Data) // prevent duplicates from passing checks expectedSeqs[packet.Sequence] = false diff --git a/x/ibc/core/04-channel/types/channel.pb.go b/x/ibc/core/04-channel/types/channel.pb.go index 19ca87cdbc40..e1be136186e6 100644 --- a/x/ibc/core/04-channel/types/channel.pb.go +++ b/x/ibc/core/04-channel/types/channel.pb.go @@ -299,31 +299,33 @@ func (m *Packet) XXX_DiscardUnknown() { var xxx_messageInfo_Packet proto.InternalMessageInfo -// PacketAckCommitment defines the genesis type necessary to retrieve and store -// acknowlegements. -type PacketAckCommitment struct { +// PacketState defines the generic type necessary to retrieve and store +// packet commitments, acknowledgements, and receipts. +// Caller is responsible for knowing the context necessary to interpret this +// state as a commitment, acknowledgement, or a receipt. +type PacketState struct { // channel port identifier. PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` // channel unique identifier. ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` // packet sequence. Sequence uint64 `protobuf:"varint,3,opt,name=sequence,proto3" json:"sequence,omitempty"` - // packet commitment hash. - Hash []byte `protobuf:"bytes,4,opt,name=hash,proto3" json:"hash,omitempty"` + // embedded data that represents packet state. + Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` } -func (m *PacketAckCommitment) Reset() { *m = PacketAckCommitment{} } -func (m *PacketAckCommitment) String() string { return proto.CompactTextString(m) } -func (*PacketAckCommitment) ProtoMessage() {} -func (*PacketAckCommitment) Descriptor() ([]byte, []int) { +func (m *PacketState) Reset() { *m = PacketState{} } +func (m *PacketState) String() string { return proto.CompactTextString(m) } +func (*PacketState) ProtoMessage() {} +func (*PacketState) Descriptor() ([]byte, []int) { return fileDescriptor_c3a07336710636a0, []int{4} } -func (m *PacketAckCommitment) XXX_Unmarshal(b []byte) error { +func (m *PacketState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *PacketAckCommitment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *PacketState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_PacketAckCommitment.Marshal(b, m, deterministic) + return xxx_messageInfo_PacketState.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -333,17 +335,17 @@ func (m *PacketAckCommitment) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *PacketAckCommitment) XXX_Merge(src proto.Message) { - xxx_messageInfo_PacketAckCommitment.Merge(m, src) +func (m *PacketState) XXX_Merge(src proto.Message) { + xxx_messageInfo_PacketState.Merge(m, src) } -func (m *PacketAckCommitment) XXX_Size() int { +func (m *PacketState) XXX_Size() int { return m.Size() } -func (m *PacketAckCommitment) XXX_DiscardUnknown() { - xxx_messageInfo_PacketAckCommitment.DiscardUnknown(m) +func (m *PacketState) XXX_DiscardUnknown() { + xxx_messageInfo_PacketState.DiscardUnknown(m) } -var xxx_messageInfo_PacketAckCommitment proto.InternalMessageInfo +var xxx_messageInfo_PacketState proto.InternalMessageInfo // Acknowledgement is the recommended acknowledgement format to be used by // app-specific protocols. @@ -446,72 +448,71 @@ func init() { proto.RegisterType((*IdentifiedChannel)(nil), "ibc.core.channel.v1.IdentifiedChannel") proto.RegisterType((*Counterparty)(nil), "ibc.core.channel.v1.Counterparty") proto.RegisterType((*Packet)(nil), "ibc.core.channel.v1.Packet") - proto.RegisterType((*PacketAckCommitment)(nil), "ibc.core.channel.v1.PacketAckCommitment") + proto.RegisterType((*PacketState)(nil), "ibc.core.channel.v1.PacketState") proto.RegisterType((*Acknowledgement)(nil), "ibc.core.channel.v1.Acknowledgement") } func init() { proto.RegisterFile("ibc/core/channel/v1/channel.proto", fileDescriptor_c3a07336710636a0) } var fileDescriptor_c3a07336710636a0 = []byte{ - // 916 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0xcd, 0x6e, 0xdb, 0x46, - 0x10, 0x16, 0x25, 0xea, 0x6f, 0x2c, 0xc9, 0xf2, 0xba, 0x56, 0x58, 0x36, 0x11, 0x15, 0xa2, 0x07, - 0x23, 0x45, 0xa4, 0x38, 0x0d, 0xda, 0x22, 0xa7, 0x5a, 0x3f, 0x81, 0x89, 0x06, 0x92, 0x41, 0xc9, - 0x87, 0xe6, 0xa2, 0xd2, 0xe4, 0x56, 0x22, 0x2c, 0x71, 0x55, 0x72, 0x65, 0xd7, 0x6f, 0x10, 0xe8, - 0xd4, 0x17, 0x10, 0x50, 0xa0, 0xe8, 0xb5, 0xd7, 0xbe, 0x42, 0x8e, 0x39, 0xf6, 0x24, 0x14, 0xf6, - 0xa1, 0x77, 0xbd, 0x40, 0x0b, 0xee, 0x2e, 0xf5, 0xe3, 0x04, 0x39, 0xf6, 0x94, 0x13, 0x77, 0xbe, - 0xef, 0x9b, 0x99, 0x8f, 0x3b, 0x03, 0x12, 0x1e, 0xba, 0xe7, 0x76, 0xcd, 0x26, 0x3e, 0xae, 0xd9, - 0x43, 0xcb, 0xf3, 0xf0, 0xa8, 0x76, 0x79, 0x14, 0x1d, 0xab, 0x13, 0x9f, 0x50, 0x82, 0xf6, 0xdd, - 0x73, 0xbb, 0x1a, 0x4a, 0xaa, 0x11, 0x7e, 0x79, 0xa4, 0x7e, 0x32, 0x20, 0x03, 0xc2, 0xf8, 0x5a, - 0x78, 0xe2, 0x52, 0x55, 0x5b, 0x57, 0x1b, 0xb9, 0xd8, 0xa3, 0xac, 0x18, 0x3b, 0x71, 0x81, 0xfe, - 0x7b, 0x1c, 0xd2, 0x0d, 0x5e, 0x05, 0x3d, 0x81, 0x64, 0x40, 0x2d, 0x8a, 0x15, 0xa9, 0x22, 0x1d, - 0x16, 0x9e, 0xaa, 0xd5, 0xf7, 0xf4, 0xa9, 0x76, 0x43, 0x85, 0xc9, 0x85, 0xe8, 0x2b, 0xc8, 0x10, - 0xdf, 0xc1, 0xbe, 0xeb, 0x0d, 0x94, 0xf8, 0x07, 0x92, 0x3a, 0xa1, 0xc8, 0x5c, 0x69, 0xd1, 0x77, - 0x90, 0xb3, 0xc9, 0xd4, 0xa3, 0xd8, 0x9f, 0x58, 0x3e, 0xbd, 0x56, 0x12, 0x15, 0xe9, 0x70, 0xe7, - 0xe9, 0xc3, 0xf7, 0xe6, 0x36, 0x36, 0x84, 0x75, 0xf9, 0xcd, 0x42, 0x8b, 0x99, 0x5b, 0xc9, 0xa8, - 0x01, 0xbb, 0x36, 0xf1, 0x3c, 0x6c, 0x53, 0x97, 0x78, 0xfd, 0x21, 0x99, 0x04, 0x8a, 0x5c, 0x49, - 0x1c, 0x66, 0xeb, 0xea, 0x72, 0xa1, 0x95, 0xae, 0xad, 0xf1, 0xe8, 0xb9, 0x7e, 0x47, 0xa0, 0x9b, - 0x85, 0x35, 0x72, 0x42, 0x26, 0x01, 0x52, 0x20, 0x7d, 0x89, 0xfd, 0xc0, 0x25, 0x9e, 0x92, 0xac, - 0x48, 0x87, 0x59, 0x33, 0x0a, 0x9f, 0xcb, 0xaf, 0x7f, 0xd5, 0x62, 0xfa, 0x3f, 0x71, 0xd8, 0x33, - 0x1c, 0xec, 0x51, 0xf7, 0x47, 0x17, 0x3b, 0x1f, 0x6f, 0xec, 0x03, 0x37, 0x86, 0xee, 0x41, 0x7a, - 0x42, 0x7c, 0xda, 0x77, 0x1d, 0x25, 0xc5, 0x98, 0x54, 0x18, 0x1a, 0x0e, 0x7a, 0x00, 0x20, 0x6c, - 0x86, 0x5c, 0x9a, 0x71, 0x59, 0x81, 0x18, 0x8e, 0xb8, 0xe9, 0x2b, 0xc8, 0x6d, 0xbe, 0x00, 0xfa, - 0x62, 0x5d, 0x2d, 0xbc, 0xe5, 0x6c, 0x1d, 0x2d, 0x17, 0x5a, 0x81, 0x9b, 0x14, 0x84, 0xbe, 0xea, - 0xf0, 0x6c, 0xab, 0x43, 0x9c, 0xe9, 0x0f, 0x96, 0x0b, 0x6d, 0x4f, 0xbc, 0xd4, 0x8a, 0xd3, 0xdf, - 0x6d, 0xfc, 0x6f, 0x02, 0x52, 0xa7, 0x96, 0x7d, 0x81, 0x29, 0x52, 0x21, 0x13, 0xe0, 0x9f, 0xa6, - 0xd8, 0xb3, 0xf9, 0x68, 0x65, 0x73, 0x15, 0xa3, 0xaf, 0x61, 0x27, 0x20, 0x53, 0xdf, 0xc6, 0xfd, - 0xb0, 0xa7, 0xe8, 0x51, 0x5a, 0x2e, 0x34, 0xc4, 0x7b, 0x6c, 0x90, 0xba, 0x09, 0x3c, 0x3a, 0x25, - 0x3e, 0x45, 0xdf, 0x42, 0x41, 0x70, 0xa2, 0x33, 0x1b, 0x62, 0xb6, 0xfe, 0xe9, 0x72, 0xa1, 0x1d, - 0x6c, 0xe5, 0x0a, 0x5e, 0x37, 0xf3, 0x1c, 0x88, 0xd6, 0xed, 0x05, 0x14, 0x1d, 0x1c, 0x50, 0xd7, - 0xb3, 0xd8, 0x5c, 0x58, 0x7f, 0x99, 0xd5, 0xf8, 0x6c, 0xb9, 0xd0, 0xee, 0xf1, 0x1a, 0x77, 0x15, - 0xba, 0xb9, 0xbb, 0x01, 0x31, 0x27, 0x1d, 0xd8, 0xdf, 0x54, 0x45, 0x76, 0xd8, 0x18, 0xeb, 0xe5, - 0xe5, 0x42, 0x53, 0xdf, 0x2d, 0xb5, 0xf2, 0x84, 0x36, 0xd0, 0xc8, 0x18, 0x02, 0xd9, 0xb1, 0xa8, - 0xc5, 0xc6, 0x9d, 0x33, 0xd9, 0x19, 0xfd, 0x00, 0x05, 0xea, 0x8e, 0x31, 0x99, 0xd2, 0xfe, 0x10, - 0xbb, 0x83, 0x21, 0x65, 0x03, 0xdf, 0xd9, 0xda, 0x77, 0xfe, 0x25, 0xba, 0x3c, 0xaa, 0x9e, 0x30, - 0x45, 0xfd, 0x41, 0xb8, 0xac, 0xeb, 0xeb, 0xd8, 0xce, 0xd7, 0xcd, 0xbc, 0x00, 0xb8, 0x1a, 0x19, - 0xb0, 0x17, 0x29, 0xc2, 0x67, 0x40, 0xad, 0xf1, 0x44, 0xc9, 0x84, 0xe3, 0xaa, 0xdf, 0x5f, 0x2e, - 0x34, 0x65, 0xbb, 0xc8, 0x4a, 0xa2, 0x9b, 0x45, 0x81, 0xf5, 0x22, 0x48, 0x6c, 0xc0, 0x1f, 0x12, - 0xec, 0xf3, 0x0d, 0x38, 0xb6, 0x2f, 0x1a, 0x64, 0x3c, 0x76, 0xe9, 0x18, 0x7b, 0xf4, 0x7f, 0x58, - 0xc1, 0xad, 0x8d, 0x4b, 0xdc, 0xd9, 0x38, 0x04, 0xf2, 0xd0, 0x0a, 0x86, 0x6c, 0xd4, 0x39, 0x93, - 0x9d, 0x85, 0xe1, 0x0e, 0xec, 0x1e, 0xdb, 0x17, 0x1e, 0xb9, 0x1a, 0x61, 0x67, 0x80, 0x99, 0x57, - 0x05, 0x52, 0x3e, 0x0e, 0xa6, 0x23, 0xaa, 0x1c, 0x84, 0xf2, 0x93, 0x98, 0x29, 0x62, 0x54, 0x82, - 0x24, 0xf6, 0x7d, 0xe2, 0x2b, 0xa5, 0xd0, 0xd3, 0x49, 0xcc, 0xe4, 0x61, 0x1d, 0x20, 0xe3, 0xe3, - 0x60, 0x42, 0xbc, 0x00, 0x3f, 0xfa, 0x53, 0x82, 0x64, 0x57, 0x7c, 0xa8, 0xb4, 0x6e, 0xef, 0xb8, - 0xd7, 0xea, 0x9f, 0xb5, 0x8d, 0xb6, 0xd1, 0x33, 0x8e, 0x5f, 0x1a, 0xaf, 0x5a, 0xcd, 0xfe, 0x59, - 0xbb, 0x7b, 0xda, 0x6a, 0x18, 0x2f, 0x8c, 0x56, 0xb3, 0x18, 0x53, 0xf7, 0x66, 0xf3, 0x4a, 0x7e, - 0x4b, 0x80, 0x14, 0x00, 0x9e, 0x17, 0x82, 0x45, 0x49, 0xcd, 0xcc, 0xe6, 0x15, 0x39, 0x3c, 0xa3, - 0x32, 0xe4, 0x39, 0xd3, 0x33, 0xbf, 0xef, 0x9c, 0xb6, 0xda, 0xc5, 0xb8, 0xba, 0x33, 0x9b, 0x57, - 0xd2, 0x22, 0x5c, 0x67, 0x32, 0x32, 0xc1, 0x33, 0x19, 0x73, 0x1f, 0x72, 0x9c, 0x69, 0xbc, 0xec, - 0x74, 0x5b, 0xcd, 0xa2, 0xac, 0xc2, 0x6c, 0x5e, 0x49, 0xf1, 0x48, 0x95, 0x5f, 0xff, 0x56, 0x8e, - 0x3d, 0xba, 0x82, 0x24, 0xfb, 0x66, 0xa2, 0xcf, 0xa1, 0xd4, 0x31, 0x9b, 0x2d, 0xb3, 0xdf, 0xee, - 0xb4, 0x5b, 0x77, 0xfc, 0xb2, 0x92, 0x21, 0x8e, 0x74, 0xd8, 0xe5, 0xaa, 0xb3, 0x36, 0x7b, 0xb6, - 0x9a, 0x45, 0x49, 0xcd, 0xcf, 0xe6, 0x95, 0xec, 0x0a, 0x08, 0x0d, 0x73, 0x4d, 0xa4, 0x10, 0x86, - 0x45, 0xc8, 0x1b, 0xd7, 0xcd, 0x37, 0x37, 0x65, 0xe9, 0xed, 0x4d, 0x59, 0xfa, 0xfb, 0xa6, 0x2c, - 0xfd, 0x72, 0x5b, 0x8e, 0xbd, 0xbd, 0x2d, 0xc7, 0xfe, 0xba, 0x2d, 0xc7, 0x5e, 0x7d, 0x33, 0x70, - 0xe9, 0x70, 0x7a, 0x5e, 0xb5, 0xc9, 0xb8, 0x66, 0x93, 0x60, 0x4c, 0x02, 0xf1, 0x78, 0x1c, 0x38, - 0x17, 0xb5, 0x9f, 0x6b, 0xab, 0x7f, 0xf3, 0x93, 0x67, 0x8f, 0xa3, 0x9f, 0x3d, 0xbd, 0x9e, 0xe0, - 0xe0, 0x3c, 0xc5, 0x7e, 0xce, 0x5f, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0xfd, 0xef, 0x9f, 0xe3, - 0x0d, 0x08, 0x00, 0x00, + // 904 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0xcb, 0x6e, 0xdb, 0x46, + 0x14, 0x15, 0x25, 0xea, 0x75, 0x65, 0xc9, 0xf2, 0xa4, 0x56, 0x58, 0x36, 0x11, 0x15, 0xa2, 0x0b, + 0x23, 0x45, 0xa4, 0x38, 0x0d, 0xda, 0x22, 0xab, 0x5a, 0x8f, 0xc0, 0x44, 0x03, 0xc9, 0xa0, 0xe4, + 0x45, 0xb3, 0x51, 0x65, 0x72, 0x2a, 0x11, 0x96, 0x38, 0x2a, 0x39, 0xb2, 0xeb, 0x3f, 0x08, 0xb4, + 0xea, 0x0f, 0x08, 0x28, 0x50, 0xb4, 0xbf, 0xd0, 0x5f, 0xc8, 0x32, 0xcb, 0xae, 0x88, 0xc2, 0x5e, + 0x74, 0xaf, 0x1f, 0x68, 0xc1, 0x99, 0xa1, 0x1e, 0x4e, 0xe0, 0x65, 0x57, 0x59, 0x71, 0xee, 0x39, + 0xe7, 0x3e, 0x74, 0xef, 0xd5, 0x0c, 0x3c, 0x72, 0xce, 0xac, 0x9a, 0x45, 0x3c, 0x5c, 0xb3, 0x46, + 0x03, 0xd7, 0xc5, 0xe3, 0xda, 0xc5, 0x61, 0x74, 0xac, 0x4e, 0x3d, 0x42, 0x09, 0xba, 0xe7, 0x9c, + 0x59, 0xd5, 0x50, 0x52, 0x8d, 0xf0, 0x8b, 0x43, 0xf5, 0x93, 0x21, 0x19, 0x12, 0xc6, 0xd7, 0xc2, + 0x13, 0x97, 0xaa, 0xda, 0x3a, 0xda, 0xd8, 0xc1, 0x2e, 0x65, 0xc1, 0xd8, 0x89, 0x0b, 0xf4, 0xdf, + 0xe3, 0x90, 0x6e, 0xf0, 0x28, 0xe8, 0x29, 0x24, 0x7d, 0x3a, 0xa0, 0x58, 0x91, 0x2a, 0xd2, 0x41, + 0xe1, 0x99, 0x5a, 0xfd, 0x40, 0x9e, 0x6a, 0x37, 0x54, 0x98, 0x5c, 0x88, 0xbe, 0x82, 0x0c, 0xf1, + 0x6c, 0xec, 0x39, 0xee, 0x50, 0x89, 0xdf, 0xe1, 0xd4, 0x09, 0x45, 0xe6, 0x4a, 0x8b, 0xbe, 0x83, + 0x1d, 0x8b, 0xcc, 0x5c, 0x8a, 0xbd, 0xe9, 0xc0, 0xa3, 0x57, 0x4a, 0xa2, 0x22, 0x1d, 0xe4, 0x9e, + 0x3d, 0xfa, 0xa0, 0x6f, 0x63, 0x43, 0x58, 0x97, 0xdf, 0x06, 0x5a, 0xcc, 0xdc, 0x72, 0x46, 0x0d, + 0xd8, 0xb5, 0x88, 0xeb, 0x62, 0x8b, 0x3a, 0xc4, 0xed, 0x8f, 0xc8, 0xd4, 0x57, 0xe4, 0x4a, 0xe2, + 0x20, 0x5b, 0x57, 0x97, 0x81, 0x56, 0xba, 0x1a, 0x4c, 0xc6, 0x2f, 0xf4, 0x5b, 0x02, 0xdd, 0x2c, + 0xac, 0x91, 0x63, 0x32, 0xf5, 0x91, 0x02, 0xe9, 0x0b, 0xec, 0xf9, 0x0e, 0x71, 0x95, 0x64, 0x45, + 0x3a, 0xc8, 0x9a, 0x91, 0xf9, 0x42, 0x7e, 0xf3, 0xab, 0x16, 0xd3, 0xff, 0x89, 0xc3, 0x9e, 0x61, + 0x63, 0x97, 0x3a, 0x3f, 0x3a, 0xd8, 0xfe, 0xd8, 0xb1, 0x3b, 0x3a, 0x86, 0xee, 0x43, 0x7a, 0x4a, + 0x3c, 0xda, 0x77, 0x6c, 0x25, 0xc5, 0x98, 0x54, 0x68, 0x1a, 0x36, 0x7a, 0x08, 0x20, 0xca, 0x0c, + 0xb9, 0x34, 0xe3, 0xb2, 0x02, 0x31, 0x6c, 0xd1, 0xe9, 0x4b, 0xd8, 0xd9, 0xfc, 0x01, 0xe8, 0x8b, + 0x75, 0xb4, 0xb0, 0xcb, 0xd9, 0x3a, 0x5a, 0x06, 0x5a, 0x81, 0x17, 0x29, 0x08, 0x7d, 0x95, 0xe1, + 0xf9, 0x56, 0x86, 0x38, 0xd3, 0xef, 0x2f, 0x03, 0x6d, 0x4f, 0xfc, 0xa8, 0x15, 0xa7, 0xbf, 0x9f, + 0xf8, 0xdf, 0x04, 0xa4, 0x4e, 0x06, 0xd6, 0x39, 0xa6, 0x48, 0x85, 0x8c, 0x8f, 0x7f, 0x9a, 0x61, + 0xd7, 0xe2, 0xa3, 0x95, 0xcd, 0x95, 0x8d, 0xbe, 0x86, 0x9c, 0x4f, 0x66, 0x9e, 0x85, 0xfb, 0x61, + 0x4e, 0x91, 0xa3, 0xb4, 0x0c, 0x34, 0xc4, 0x73, 0x6c, 0x90, 0xba, 0x09, 0xdc, 0x3a, 0x21, 0x1e, + 0x45, 0xdf, 0x42, 0x41, 0x70, 0x22, 0x33, 0x1b, 0x62, 0xb6, 0xfe, 0xe9, 0x32, 0xd0, 0xf6, 0xb7, + 0x7c, 0x05, 0xaf, 0x9b, 0x79, 0x0e, 0x44, 0xeb, 0xf6, 0x12, 0x8a, 0x36, 0xf6, 0xa9, 0xe3, 0x0e, + 0xd8, 0x5c, 0x58, 0x7e, 0x99, 0xc5, 0xf8, 0x6c, 0x19, 0x68, 0xf7, 0x79, 0x8c, 0xdb, 0x0a, 0xdd, + 0xdc, 0xdd, 0x80, 0x58, 0x25, 0x1d, 0xb8, 0xb7, 0xa9, 0x8a, 0xca, 0x61, 0x63, 0xac, 0x97, 0x97, + 0x81, 0xa6, 0xbe, 0x1f, 0x6a, 0x55, 0x13, 0xda, 0x40, 0xa3, 0xc2, 0x10, 0xc8, 0xf6, 0x80, 0x0e, + 0xd8, 0xb8, 0x77, 0x4c, 0x76, 0x46, 0x3f, 0x40, 0x81, 0x3a, 0x13, 0x4c, 0x66, 0xb4, 0x3f, 0xc2, + 0xce, 0x70, 0x44, 0xd9, 0xc0, 0x73, 0x5b, 0xfb, 0xce, 0x6f, 0xa2, 0x8b, 0xc3, 0xea, 0x31, 0x53, + 0xd4, 0x1f, 0x86, 0xcb, 0xba, 0x6e, 0xc7, 0xb6, 0xbf, 0x6e, 0xe6, 0x05, 0xc0, 0xd5, 0xc8, 0x80, + 0xbd, 0x48, 0x11, 0x7e, 0x7d, 0x3a, 0x98, 0x4c, 0x95, 0x4c, 0x38, 0xae, 0xfa, 0x83, 0x65, 0xa0, + 0x29, 0xdb, 0x41, 0x56, 0x12, 0xdd, 0x2c, 0x0a, 0xac, 0x17, 0x41, 0x62, 0x03, 0xfe, 0x90, 0x20, + 0xc7, 0x37, 0x80, 0xfd, 0x67, 0xff, 0x87, 0xd5, 0xdb, 0xda, 0xb4, 0xc4, 0xad, 0x4d, 0x8b, 0xba, + 0x2a, 0xaf, 0xbb, 0x2a, 0x0a, 0xed, 0xc0, 0xee, 0x91, 0x75, 0xee, 0x92, 0xcb, 0x31, 0xb6, 0x87, + 0x78, 0x82, 0x5d, 0x8a, 0x14, 0x48, 0x79, 0xd8, 0x9f, 0x8d, 0xa9, 0xb2, 0x1f, 0xca, 0x8f, 0x63, + 0xa6, 0xb0, 0x51, 0x09, 0x92, 0xd8, 0xf3, 0x88, 0xa7, 0x94, 0xc2, 0x9a, 0x8e, 0x63, 0x26, 0x37, + 0xeb, 0x00, 0x19, 0x0f, 0xfb, 0x53, 0xe2, 0xfa, 0xf8, 0xf1, 0x9f, 0x12, 0x24, 0xbb, 0xe2, 0x82, + 0xd2, 0xba, 0xbd, 0xa3, 0x5e, 0xab, 0x7f, 0xda, 0x36, 0xda, 0x46, 0xcf, 0x38, 0x7a, 0x65, 0xbc, + 0x6e, 0x35, 0xfb, 0xa7, 0xed, 0xee, 0x49, 0xab, 0x61, 0xbc, 0x34, 0x5a, 0xcd, 0x62, 0x4c, 0xdd, + 0x9b, 0x2f, 0x2a, 0xf9, 0x2d, 0x01, 0x52, 0x00, 0xb8, 0x5f, 0x08, 0x16, 0x25, 0x35, 0x33, 0x5f, + 0x54, 0xe4, 0xf0, 0x8c, 0xca, 0x90, 0xe7, 0x4c, 0xcf, 0xfc, 0xbe, 0x73, 0xd2, 0x6a, 0x17, 0xe3, + 0x6a, 0x6e, 0xbe, 0xa8, 0xa4, 0x85, 0xb9, 0xf6, 0x64, 0x64, 0x82, 0x7b, 0x32, 0xe6, 0x01, 0xec, + 0x70, 0xa6, 0xf1, 0xaa, 0xd3, 0x6d, 0x35, 0x8b, 0xb2, 0x0a, 0xf3, 0x45, 0x25, 0xc5, 0x2d, 0x55, + 0x7e, 0xf3, 0x5b, 0x39, 0xf6, 0xf8, 0x12, 0x92, 0xec, 0xae, 0x44, 0x9f, 0x43, 0xa9, 0x63, 0x36, + 0x5b, 0x66, 0xbf, 0xdd, 0x69, 0xb7, 0x6e, 0xd5, 0xcb, 0x42, 0x86, 0x38, 0xd2, 0x61, 0x97, 0xab, + 0x4e, 0xdb, 0xec, 0xdb, 0x6a, 0x16, 0x25, 0x35, 0x3f, 0x5f, 0x54, 0xb2, 0x2b, 0x20, 0x2c, 0x98, + 0x6b, 0x22, 0x85, 0x28, 0x58, 0x98, 0x3c, 0x71, 0xdd, 0x7c, 0x7b, 0x5d, 0x96, 0xde, 0x5d, 0x97, + 0xa5, 0xbf, 0xaf, 0xcb, 0xd2, 0x2f, 0x37, 0xe5, 0xd8, 0xbb, 0x9b, 0x72, 0xec, 0xaf, 0x9b, 0x72, + 0xec, 0xf5, 0x37, 0x43, 0x87, 0x8e, 0x66, 0x67, 0x55, 0x8b, 0x4c, 0x6a, 0x16, 0xf1, 0x27, 0xc4, + 0x17, 0x9f, 0x27, 0xbe, 0x7d, 0x5e, 0xfb, 0xb9, 0xb6, 0x7a, 0x93, 0x9f, 0x3e, 0x7f, 0x12, 0x3d, + 0xf2, 0xf4, 0x6a, 0x8a, 0xfd, 0xb3, 0x14, 0x7b, 0x94, 0xbf, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, + 0xd7, 0x33, 0x69, 0x35, 0x05, 0x08, 0x00, 0x00, } func (m *Channel) Marshal() (dAtA []byte, err error) { @@ -761,7 +762,7 @@ func (m *Packet) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *PacketAckCommitment) Marshal() (dAtA []byte, err error) { +func (m *PacketState) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -771,20 +772,20 @@ func (m *PacketAckCommitment) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *PacketAckCommitment) MarshalTo(dAtA []byte) (int, error) { +func (m *PacketState) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PacketAckCommitment) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *PacketState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Hash) > 0 { - i -= len(m.Hash) - copy(dAtA[i:], m.Hash) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Hash))) + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintChannel(dAtA, i, uint64(len(m.Data))) i-- dAtA[i] = 0x22 } @@ -1003,7 +1004,7 @@ func (m *Packet) Size() (n int) { return n } -func (m *PacketAckCommitment) Size() (n int) { +func (m *PacketState) Size() (n int) { if m == nil { return 0 } @@ -1020,7 +1021,7 @@ func (m *PacketAckCommitment) Size() (n int) { if m.Sequence != 0 { n += 1 + sovChannel(uint64(m.Sequence)) } - l = len(m.Hash) + l = len(m.Data) if l > 0 { n += 1 + l + sovChannel(uint64(l)) } @@ -1911,7 +1912,7 @@ func (m *Packet) Unmarshal(dAtA []byte) error { } return nil } -func (m *PacketAckCommitment) Unmarshal(dAtA []byte) error { +func (m *PacketState) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1934,10 +1935,10 @@ func (m *PacketAckCommitment) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PacketAckCommitment: wiretype end group for non-group") + return fmt.Errorf("proto: PacketState: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PacketAckCommitment: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PacketState: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2025,7 +2026,7 @@ func (m *PacketAckCommitment) Unmarshal(dAtA []byte) error { } case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { @@ -2052,9 +2053,9 @@ func (m *PacketAckCommitment) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Hash = append(m.Hash[:0], dAtA[iNdEx:postIndex]...) - if m.Hash == nil { - m.Hash = []byte{} + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} } iNdEx = postIndex default: diff --git a/x/ibc/core/04-channel/types/genesis.go b/x/ibc/core/04-channel/types/genesis.go index 708872eb86a7..51de68127136 100644 --- a/x/ibc/core/04-channel/types/genesis.go +++ b/x/ibc/core/04-channel/types/genesis.go @@ -7,21 +7,21 @@ import ( host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" ) -// NewPacketAckCommitment creates a new PacketAckCommitment instance. -func NewPacketAckCommitment(portID, channelID string, seq uint64, hash []byte) PacketAckCommitment { - return PacketAckCommitment{ +// NewPacketState creates a new PacketState instance. +func NewPacketState(portID, channelID string, seq uint64, data []byte) PacketState { + return PacketState{ PortId: portID, ChannelId: channelID, Sequence: seq, - Hash: hash, + Data: data, } } // Validate performs basic validation of fields returning an error upon any // failure. -func (pa PacketAckCommitment) Validate() error { - if len(pa.Hash) == 0 { - return errors.New("hash bytes cannot be empty") +func (pa PacketState) Validate() error { + if pa.Data == nil { + return errors.New("data bytes cannot be nil") } return validateGenFields(pa.PortId, pa.ChannelId, pa.Sequence) } @@ -43,7 +43,7 @@ func (ps PacketSequence) Validate() error { // NewGenesisState creates a GenesisState instance. func NewGenesisState( - channels []IdentifiedChannel, acks, commitments []PacketAckCommitment, + channels []IdentifiedChannel, acks, receipts, commitments []PacketState, sendSeqs, recvSeqs, ackSeqs []PacketSequence, ) GenesisState { return GenesisState{ @@ -60,8 +60,9 @@ func NewGenesisState( func DefaultGenesisState() GenesisState { return GenesisState{ Channels: []IdentifiedChannel{}, - Acknowledgements: []PacketAckCommitment{}, - Commitments: []PacketAckCommitment{}, + Acknowledgements: []PacketState{}, + Receipts: []PacketState{}, + Commitments: []PacketState{}, SendSequences: []PacketSequence{}, RecvSequences: []PacketSequence{}, AckSequences: []PacketSequence{}, @@ -81,12 +82,24 @@ func (gs GenesisState) Validate() error { if err := ack.Validate(); err != nil { return fmt.Errorf("invalid acknowledgement %v ack index %d: %w", ack, i, err) } + if len(ack.Data) == 0 { + return fmt.Errorf("invalid acknowledgement %v ack index %d: data bytes cannot be empty", ack, i) + } + } + + for i, receipt := range gs.Receipts { + if err := receipt.Validate(); err != nil { + return fmt.Errorf("invalid acknowledgement %v ack index %d: %w", receipt, i, err) + } } for i, commitment := range gs.Commitments { if err := commitment.Validate(); err != nil { return fmt.Errorf("invalid commitment %v index %d: %w", commitment, i, err) } + if len(commitment.Data) == 0 { + return fmt.Errorf("invalid acknowledgement %v ack index %d: data bytes cannot be empty", commitment, i) + } } for i, ss := range gs.SendSequences { diff --git a/x/ibc/core/04-channel/types/genesis.pb.go b/x/ibc/core/04-channel/types/genesis.pb.go index 53ddffa0ecc2..ca26a9bb5d15 100644 --- a/x/ibc/core/04-channel/types/genesis.pb.go +++ b/x/ibc/core/04-channel/types/genesis.pb.go @@ -25,12 +25,13 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the ibc channel submodule's genesis state. type GenesisState struct { - Channels []IdentifiedChannel `protobuf:"bytes,1,rep,name=channels,proto3,casttype=IdentifiedChannel" json:"channels"` - Acknowledgements []PacketAckCommitment `protobuf:"bytes,2,rep,name=acknowledgements,proto3,casttype=PacketAckCommitment" json:"acknowledgements"` - Commitments []PacketAckCommitment `protobuf:"bytes,3,rep,name=commitments,proto3" json:"commitments"` - SendSequences []PacketSequence `protobuf:"bytes,4,rep,name=send_sequences,json=sendSequences,proto3" json:"send_sequences" yaml:"send_sequences"` - RecvSequences []PacketSequence `protobuf:"bytes,5,rep,name=recv_sequences,json=recvSequences,proto3" json:"recv_sequences" yaml:"recv_sequences"` - AckSequences []PacketSequence `protobuf:"bytes,6,rep,name=ack_sequences,json=ackSequences,proto3" json:"ack_sequences" yaml:"ack_sequences"` + Channels []IdentifiedChannel `protobuf:"bytes,1,rep,name=channels,proto3,casttype=IdentifiedChannel" json:"channels"` + Acknowledgements []PacketState `protobuf:"bytes,2,rep,name=acknowledgements,proto3" json:"acknowledgements"` + Commitments []PacketState `protobuf:"bytes,3,rep,name=commitments,proto3" json:"commitments"` + Receipts []PacketState `protobuf:"bytes,4,rep,name=receipts,proto3" json:"receipts"` + SendSequences []PacketSequence `protobuf:"bytes,5,rep,name=send_sequences,json=sendSequences,proto3" json:"send_sequences" yaml:"send_sequences"` + RecvSequences []PacketSequence `protobuf:"bytes,6,rep,name=recv_sequences,json=recvSequences,proto3" json:"recv_sequences" yaml:"recv_sequences"` + AckSequences []PacketSequence `protobuf:"bytes,7,rep,name=ack_sequences,json=ackSequences,proto3" json:"ack_sequences" yaml:"ack_sequences"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -73,20 +74,27 @@ func (m *GenesisState) GetChannels() []IdentifiedChannel { return nil } -func (m *GenesisState) GetAcknowledgements() []PacketAckCommitment { +func (m *GenesisState) GetAcknowledgements() []PacketState { if m != nil { return m.Acknowledgements } return nil } -func (m *GenesisState) GetCommitments() []PacketAckCommitment { +func (m *GenesisState) GetCommitments() []PacketState { if m != nil { return m.Commitments } return nil } +func (m *GenesisState) GetReceipts() []PacketState { + if m != nil { + return m.Receipts + } + return nil +} + func (m *GenesisState) GetSendSequences() []PacketSequence { if m != nil { return m.SendSequences @@ -178,37 +186,37 @@ func init() { func init() { proto.RegisterFile("ibc/core/channel/v1/genesis.proto", fileDescriptor_cb06ec201f452595) } var fileDescriptor_cb06ec201f452595 = []byte{ - // 470 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x41, 0x6f, 0xd3, 0x30, - 0x18, 0x86, 0x9b, 0xb5, 0x94, 0xcd, 0x5b, 0x2b, 0xe6, 0x6d, 0x52, 0x28, 0x90, 0x94, 0x20, 0xa1, - 0x4a, 0x68, 0x09, 0x83, 0x1d, 0x10, 0x37, 0xb2, 0x03, 0xea, 0x6d, 0xf2, 0x6e, 0x48, 0x68, 0x4a, - 0x9d, 0x6f, 0x99, 0x95, 0x26, 0xee, 0x6a, 0xaf, 0xb0, 0x5f, 0x01, 0x3f, 0x6b, 0xc7, 0x1d, 0x39, - 0x45, 0xa8, 0xfd, 0x03, 0xa8, 0x47, 0x4e, 0xc8, 0x89, 0x9b, 0xb5, 0x5a, 0x84, 0x60, 0xa7, 0xc4, - 0x7e, 0xdf, 0xef, 0x79, 0x7c, 0xf9, 0xd0, 0x73, 0x36, 0xa0, 0x1e, 0xe5, 0x63, 0xf0, 0xe8, 0x79, - 0x90, 0xa6, 0x30, 0xf4, 0x26, 0x07, 0x5e, 0x04, 0x29, 0x08, 0x26, 0xdc, 0xd1, 0x98, 0x4b, 0x8e, - 0x77, 0xd8, 0x80, 0xba, 0xaa, 0xe2, 0xea, 0x8a, 0x3b, 0x39, 0xe8, 0xec, 0x46, 0x3c, 0xe2, 0x79, - 0xee, 0xa9, 0xbf, 0xa2, 0xda, 0xa9, 0xa4, 0x2d, 0xa6, 0xf2, 0x8a, 0xf3, 0xab, 0x81, 0xb6, 0x3e, - 0x16, 0xfc, 0x13, 0x19, 0x48, 0xc0, 0x9f, 0xd1, 0xba, 0x6e, 0x08, 0xd3, 0xe8, 0xd6, 0x7b, 0x9b, - 0x6f, 0x5e, 0xba, 0x15, 0x46, 0xb7, 0x1f, 0x42, 0x2a, 0xd9, 0x19, 0x83, 0xf0, 0xa8, 0xb8, 0xf4, - 0x1f, 0x5f, 0x67, 0x76, 0xed, 0x77, 0x66, 0x6f, 0xdf, 0x89, 0x48, 0x89, 0xc4, 0x17, 0xe8, 0x51, - 0x40, 0xe3, 0x94, 0x7f, 0x19, 0x42, 0x18, 0x41, 0x02, 0xa9, 0x14, 0xe6, 0x5a, 0xae, 0xe9, 0x55, - 0x6a, 0x8e, 0x03, 0x1a, 0x83, 0xfc, 0x40, 0xe3, 0x23, 0x9e, 0x24, 0x4c, 0xaa, 0x01, 0xff, 0x89, - 0x16, 0xed, 0x54, 0x84, 0xe4, 0x0e, 0x1e, 0x1f, 0xa3, 0x4d, 0x5a, 0xe6, 0xc2, 0xac, 0xff, 0xa7, - 0xad, 0xa1, 0x6c, 0x64, 0x19, 0x81, 0x19, 0x6a, 0x0b, 0x48, 0xc3, 0x53, 0x01, 0x17, 0x97, 0x90, - 0x52, 0x10, 0x66, 0x23, 0x87, 0xbe, 0xf8, 0x0b, 0xf4, 0x44, 0x77, 0xfd, 0x67, 0x8a, 0x37, 0xcf, - 0xec, 0xbd, 0xab, 0x20, 0x19, 0xbe, 0x77, 0x56, 0x41, 0x0e, 0x69, 0xa9, 0x8b, 0x45, 0x39, 0x57, - 0x8d, 0x81, 0x4e, 0x96, 0x54, 0x0f, 0xee, 0xad, 0x5a, 0x05, 0x39, 0xa4, 0xa5, 0x2e, 0x6e, 0x55, - 0x67, 0xa8, 0x15, 0xd0, 0x78, 0xc9, 0xd4, 0xfc, 0x77, 0xd3, 0x53, 0x6d, 0xda, 0x2d, 0x4c, 0x2b, - 0x1c, 0x87, 0x6c, 0x05, 0x34, 0x2e, 0x3d, 0xce, 0x37, 0x03, 0xb5, 0x57, 0xc7, 0xf1, 0x2b, 0xf4, - 0x70, 0xc4, 0xc7, 0xf2, 0x94, 0x85, 0xa6, 0xd1, 0x35, 0x7a, 0x1b, 0x3e, 0x9e, 0x67, 0x76, 0xbb, - 0x60, 0xe9, 0xc0, 0x21, 0x4d, 0xf5, 0xd7, 0x0f, 0xf1, 0x21, 0x42, 0xfa, 0x21, 0xaa, 0xbf, 0x96, - 0xf7, 0xf7, 0xe6, 0x99, 0xbd, 0x5d, 0xf4, 0x6f, 0x33, 0x87, 0x6c, 0xe8, 0x43, 0x3f, 0xc4, 0x1d, - 0xb4, 0xbe, 0x78, 0x91, 0x59, 0xef, 0x1a, 0xbd, 0x06, 0x29, 0xcf, 0x3e, 0xb9, 0x9e, 0x5a, 0xc6, - 0xcd, 0xd4, 0x32, 0x7e, 0x4e, 0x2d, 0xe3, 0xfb, 0xcc, 0xaa, 0xdd, 0xcc, 0xac, 0xda, 0x8f, 0x99, - 0x55, 0xfb, 0xf4, 0x2e, 0x62, 0xf2, 0xfc, 0x72, 0xe0, 0x52, 0x9e, 0x78, 0x94, 0x8b, 0x84, 0x0b, - 0xfd, 0xd9, 0x17, 0x61, 0xec, 0x7d, 0xf5, 0xca, 0x05, 0x7b, 0x7d, 0xb8, 0xbf, 0xd8, 0x31, 0x79, - 0x35, 0x02, 0x31, 0x68, 0xe6, 0xfb, 0xf5, 0xf6, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa6, 0x0a, - 0xe5, 0x3b, 0xd2, 0x03, 0x00, 0x00, + // 471 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x31, 0x6f, 0xd3, 0x40, + 0x14, 0xc7, 0xe3, 0x26, 0x4d, 0xd3, 0x6b, 0x13, 0xd1, 0xa3, 0x95, 0x4c, 0x04, 0x76, 0x30, 0x12, + 0x8a, 0x84, 0x6a, 0x53, 0xe8, 0x80, 0x18, 0xcd, 0x00, 0xd9, 0xd0, 0xb1, 0x21, 0xa1, 0xca, 0x39, + 0xbf, 0xba, 0x27, 0xc7, 0xbe, 0xe0, 0xbb, 0x06, 0xfa, 0x21, 0x10, 0x7c, 0xac, 0x8e, 0x1d, 0x99, + 0x2c, 0x94, 0x7c, 0x83, 0x8c, 0x4c, 0xc8, 0xe7, 0x8b, 0x9b, 0xa8, 0x11, 0x22, 0x4c, 0xf6, 0xbd, + 0xf7, 0x7f, 0xbf, 0xdf, 0x5b, 0x1e, 0x7a, 0xcc, 0x86, 0xd4, 0xa3, 0x3c, 0x03, 0x8f, 0x5e, 0x04, + 0x69, 0x0a, 0x23, 0x6f, 0x72, 0xe2, 0x45, 0x90, 0x82, 0x60, 0xc2, 0x1d, 0x67, 0x5c, 0x72, 0x7c, + 0x9f, 0x0d, 0xa9, 0x5b, 0x44, 0x5c, 0x1d, 0x71, 0x27, 0x27, 0xdd, 0xc3, 0x88, 0x47, 0x5c, 0xf5, + 0xbd, 0xe2, 0xaf, 0x8c, 0x76, 0xd7, 0xd2, 0x16, 0x53, 0x2a, 0xe2, 0x7c, 0xdb, 0x46, 0xfb, 0x6f, + 0x4b, 0xfe, 0x07, 0x19, 0x48, 0xc0, 0x9f, 0x50, 0x4b, 0x27, 0x84, 0x69, 0xf4, 0xea, 0xfd, 0xbd, + 0x17, 0x4f, 0xdd, 0x35, 0x46, 0x77, 0x10, 0x42, 0x2a, 0xd9, 0x39, 0x83, 0xf0, 0x4d, 0x59, 0xf4, + 0x1f, 0x5c, 0xe7, 0x76, 0xed, 0x77, 0x6e, 0x1f, 0xdc, 0x69, 0x91, 0x0a, 0x89, 0x09, 0xba, 0x17, + 0xd0, 0x38, 0xe5, 0x5f, 0x46, 0x10, 0x46, 0x90, 0x40, 0x2a, 0x85, 0xb9, 0xa5, 0x34, 0xbd, 0xb5, + 0x9a, 0xf7, 0x01, 0x8d, 0x41, 0xaa, 0xd5, 0xfc, 0x46, 0x21, 0x20, 0x77, 0xe6, 0xf1, 0x3b, 0xb4, + 0x47, 0x79, 0x92, 0x30, 0x59, 0xe2, 0xea, 0x1b, 0xe1, 0x96, 0x47, 0xb1, 0x8f, 0x5a, 0x19, 0x50, + 0x60, 0x63, 0x29, 0xcc, 0xc6, 0x46, 0x98, 0x6a, 0x0e, 0x33, 0xd4, 0x11, 0x90, 0x86, 0x67, 0x02, + 0x3e, 0x5f, 0x42, 0x4a, 0x41, 0x98, 0xdb, 0x8a, 0xf4, 0xe4, 0x6f, 0x24, 0x9d, 0xf5, 0x1f, 0x15, + 0xb0, 0x79, 0x6e, 0x1f, 0x5d, 0x05, 0xc9, 0xe8, 0xb5, 0xb3, 0x0a, 0x72, 0x48, 0xbb, 0x28, 0x2c, + 0xc2, 0x4a, 0x95, 0x01, 0x9d, 0x2c, 0xa9, 0x9a, 0xff, 0xad, 0x5a, 0x05, 0x39, 0xa4, 0x5d, 0x14, + 0x6e, 0x55, 0xe7, 0xa8, 0x1d, 0xd0, 0x78, 0xc9, 0xb4, 0xf3, 0xef, 0xa6, 0x87, 0xda, 0x74, 0x58, + 0x9a, 0x56, 0x38, 0x0e, 0xd9, 0x0f, 0x68, 0x5c, 0x79, 0x9c, 0xef, 0x06, 0xea, 0xac, 0x8e, 0xe3, + 0x67, 0x68, 0x67, 0xcc, 0x33, 0x79, 0xc6, 0x42, 0xd3, 0xe8, 0x19, 0xfd, 0x5d, 0x1f, 0xcf, 0x73, + 0xbb, 0x53, 0xb2, 0x74, 0xc3, 0x21, 0xcd, 0xe2, 0x6f, 0x10, 0xe2, 0x53, 0x84, 0xf4, 0x22, 0x45, + 0x7e, 0x4b, 0xe5, 0x8f, 0xe6, 0xb9, 0x7d, 0x50, 0xe6, 0x6f, 0x7b, 0x0e, 0xd9, 0xd5, 0x8f, 0x41, + 0x88, 0xbb, 0xa8, 0xb5, 0xd8, 0xc8, 0xac, 0xf7, 0x8c, 0x7e, 0x83, 0x54, 0x6f, 0x9f, 0x5c, 0x4f, + 0x2d, 0xe3, 0x66, 0x6a, 0x19, 0xbf, 0xa6, 0x96, 0xf1, 0x63, 0x66, 0xd5, 0x6e, 0x66, 0x56, 0xed, + 0xe7, 0xcc, 0xaa, 0x7d, 0x7c, 0x15, 0x31, 0x79, 0x71, 0x39, 0x74, 0x29, 0x4f, 0x3c, 0xca, 0x45, + 0xc2, 0x85, 0xfe, 0x1c, 0x8b, 0x30, 0xf6, 0xbe, 0x7a, 0xd5, 0xf5, 0x3d, 0x3f, 0x3d, 0x5e, 0x1c, + 0xa0, 0xbc, 0x1a, 0x83, 0x18, 0x36, 0xd5, 0xf1, 0xbd, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0x70, + 0xac, 0x09, 0x09, 0xef, 0x03, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -242,7 +250,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x32 + dAtA[i] = 0x3a } } if len(m.RecvSequences) > 0 { @@ -256,7 +264,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x32 } } if len(m.SendSequences) > 0 { @@ -270,6 +278,20 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- + dAtA[i] = 0x2a + } + } + if len(m.Receipts) > 0 { + for iNdEx := len(m.Receipts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Receipts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x22 } } @@ -395,6 +417,12 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } + if len(m.Receipts) > 0 { + for _, e := range m.Receipts { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } if len(m.SendSequences) > 0 { for _, e := range m.SendSequences { l = e.Size() @@ -534,7 +562,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Acknowledgements = append(m.Acknowledgements, PacketAckCommitment{}) + m.Acknowledgements = append(m.Acknowledgements, PacketState{}) if err := m.Acknowledgements[len(m.Acknowledgements)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -568,12 +596,46 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Commitments = append(m.Commitments, PacketAckCommitment{}) + m.Commitments = append(m.Commitments, PacketState{}) if err := m.Commitments[len(m.Commitments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receipts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receipts = append(m.Receipts, PacketState{}) + if err := m.Receipts[len(m.Receipts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SendSequences", wireType) } @@ -607,7 +669,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 5: + case 6: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field RecvSequences", wireType) } @@ -641,7 +703,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 6: + case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field AckSequences", wireType) } diff --git a/x/ibc/core/04-channel/types/genesis_test.go b/x/ibc/core/04-channel/types/genesis_test.go index 8110a50614a4..c1dbfd76e0c5 100644 --- a/x/ibc/core/04-channel/types/genesis_test.go +++ b/x/ibc/core/04-channel/types/genesis_test.go @@ -48,11 +48,14 @@ func TestValidateGenesis(t *testing.T) { ), ), }, - []types.PacketAckCommitment{ - types.NewPacketAckCommitment(testPort2, testChannel2, 1, []byte("ack")), + []types.PacketState{ + types.NewPacketState(testPort2, testChannel2, 1, []byte("ack")), }, - []types.PacketAckCommitment{ - types.NewPacketAckCommitment(testPort1, testChannel1, 1, []byte("commit_hash")), + []types.PacketState{ + types.NewPacketState(testPort2, testChannel2, 1, []byte("")), + }, + []types.PacketState{ + types.NewPacketState(testPort1, testChannel1, 1, []byte("commit_hash")), }, []types.PacketSequence{ types.NewPacketSequence(testPort1, testChannel1, 1), @@ -82,8 +85,8 @@ func TestValidateGenesis(t *testing.T) { { name: "invalid ack", genState: types.GenesisState{ - Acknowledgements: []types.PacketAckCommitment{ - types.NewPacketAckCommitment(testPort2, testChannel2, 1, nil), + Acknowledgements: []types.PacketState{ + types.NewPacketState(testPort2, testChannel2, 1, nil), }, }, expPass: false, @@ -91,8 +94,8 @@ func TestValidateGenesis(t *testing.T) { { name: "invalid commitment", genState: types.GenesisState{ - Commitments: []types.PacketAckCommitment{ - types.NewPacketAckCommitment(testPort1, testChannel1, 1, nil), + Commitments: []types.PacketState{ + types.NewPacketState(testPort1, testChannel1, 1, nil), }, }, expPass: false, diff --git a/x/ibc/core/04-channel/types/query.go b/x/ibc/core/04-channel/types/query.go index debe1acb33b3..1f1962a6e594 100644 --- a/x/ibc/core/04-channel/types/query.go +++ b/x/ibc/core/04-channel/types/query.go @@ -45,6 +45,17 @@ func NewQueryPacketCommitmentResponse( } } +// NewQueryPacketReceiptResponse creates a new QueryPacketReceiptResponse instance +func NewQueryPacketReceiptResponse( + recvd bool, proof []byte, height clienttypes.Height, +) *QueryPacketReceiptResponse { + return &QueryPacketReceiptResponse{ + Received: recvd, + Proof: proof, + ProofHeight: height, + } +} + // NewQueryPacketAcknowledgementResponse creates a new QueryPacketAcknowledgementResponse instance func NewQueryPacketAcknowledgementResponse( acknowledgement []byte, proof []byte, height clienttypes.Height, diff --git a/x/ibc/core/04-channel/types/query.pb.go b/x/ibc/core/04-channel/types/query.pb.go index 073e2c5bec13..d66ace7113a6 100644 --- a/x/ibc/core/04-channel/types/query.pb.go +++ b/x/ibc/core/04-channel/types/query.pb.go @@ -719,7 +719,7 @@ func (m *QueryPacketCommitmentRequest) GetSequence() uint64 { } // QueryPacketCommitmentResponse defines the client query response for a packet -// which also includes a proof, its path and the height form which the proof was +// which also includes a proof and the height from which the proof was // retrieved type QueryPacketCommitmentResponse struct { // packet associated with the request fields @@ -852,7 +852,7 @@ func (m *QueryPacketCommitmentsRequest) GetPagination() *query.PageRequest { // QueryPacketCommitmentsResponse is the request type for the // Query/QueryPacketCommitments RPC method type QueryPacketCommitmentsResponse struct { - Commitments []*PacketAckCommitment `protobuf:"bytes,1,rep,name=commitments,proto3" json:"commitments,omitempty"` + Commitments []*PacketState `protobuf:"bytes,1,rep,name=commitments,proto3" json:"commitments,omitempty"` // pagination response Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` // query block height @@ -892,7 +892,7 @@ func (m *QueryPacketCommitmentsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryPacketCommitmentsResponse proto.InternalMessageInfo -func (m *QueryPacketCommitmentsResponse) GetCommitments() []*PacketAckCommitment { +func (m *QueryPacketCommitmentsResponse) GetCommitments() []*PacketState { if m != nil { return m.Commitments } @@ -913,6 +913,137 @@ func (m *QueryPacketCommitmentsResponse) GetHeight() types.Height { return types.Height{} } +// QueryPacketReceiptRequest is the request type for the +// Query/PacketReceipt RPC method +type QueryPacketReceiptRequest struct { + // port unique identifier + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` + // channel unique identifier + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // packet sequence + Sequence uint64 `protobuf:"varint,3,opt,name=sequence,proto3" json:"sequence,omitempty"` +} + +func (m *QueryPacketReceiptRequest) Reset() { *m = QueryPacketReceiptRequest{} } +func (m *QueryPacketReceiptRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPacketReceiptRequest) ProtoMessage() {} +func (*QueryPacketReceiptRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_1034a1e9abc4cca1, []int{14} +} +func (m *QueryPacketReceiptRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPacketReceiptRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPacketReceiptRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryPacketReceiptRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPacketReceiptRequest.Merge(m, src) +} +func (m *QueryPacketReceiptRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryPacketReceiptRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPacketReceiptRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPacketReceiptRequest proto.InternalMessageInfo + +func (m *QueryPacketReceiptRequest) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *QueryPacketReceiptRequest) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +func (m *QueryPacketReceiptRequest) GetSequence() uint64 { + if m != nil { + return m.Sequence + } + return 0 +} + +// QueryPacketReceiptResponse defines the client query response for a packet receipt +// which also includes a proof, and the height from which the proof was +// retrieved +type QueryPacketReceiptResponse struct { + // success flag for if receipt exists + Received bool `protobuf:"varint,2,opt,name=received,proto3" json:"received,omitempty"` + // merkle proof of existence + Proof []byte `protobuf:"bytes,3,opt,name=proof,proto3" json:"proof,omitempty"` + // height at which the proof was retrieved + ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` +} + +func (m *QueryPacketReceiptResponse) Reset() { *m = QueryPacketReceiptResponse{} } +func (m *QueryPacketReceiptResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPacketReceiptResponse) ProtoMessage() {} +func (*QueryPacketReceiptResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_1034a1e9abc4cca1, []int{15} +} +func (m *QueryPacketReceiptResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPacketReceiptResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPacketReceiptResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryPacketReceiptResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPacketReceiptResponse.Merge(m, src) +} +func (m *QueryPacketReceiptResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryPacketReceiptResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPacketReceiptResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPacketReceiptResponse proto.InternalMessageInfo + +func (m *QueryPacketReceiptResponse) GetReceived() bool { + if m != nil { + return m.Received + } + return false +} + +func (m *QueryPacketReceiptResponse) GetProof() []byte { + if m != nil { + return m.Proof + } + return nil +} + +func (m *QueryPacketReceiptResponse) GetProofHeight() types.Height { + if m != nil { + return m.ProofHeight + } + return types.Height{} +} + // QueryPacketAcknowledgementRequest is the request type for the // Query/PacketAcknowledgement RPC method type QueryPacketAcknowledgementRequest struct { @@ -928,7 +1059,7 @@ func (m *QueryPacketAcknowledgementRequest) Reset() { *m = QueryPacketAc func (m *QueryPacketAcknowledgementRequest) String() string { return proto.CompactTextString(m) } func (*QueryPacketAcknowledgementRequest) ProtoMessage() {} func (*QueryPacketAcknowledgementRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1034a1e9abc4cca1, []int{14} + return fileDescriptor_1034a1e9abc4cca1, []int{16} } func (m *QueryPacketAcknowledgementRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -979,7 +1110,7 @@ func (m *QueryPacketAcknowledgementRequest) GetSequence() uint64 { } // QueryPacketAcknowledgementResponse defines the client query response for a -// packet which also includes a proof, its path and the height form which the +// packet which also includes a proof and the height from which the // proof was retrieved type QueryPacketAcknowledgementResponse struct { // packet associated with the request fields @@ -994,7 +1125,7 @@ func (m *QueryPacketAcknowledgementResponse) Reset() { *m = QueryPacketA func (m *QueryPacketAcknowledgementResponse) String() string { return proto.CompactTextString(m) } func (*QueryPacketAcknowledgementResponse) ProtoMessage() {} func (*QueryPacketAcknowledgementResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1034a1e9abc4cca1, []int{15} + return fileDescriptor_1034a1e9abc4cca1, []int{17} } func (m *QueryPacketAcknowledgementResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1044,6 +1175,135 @@ func (m *QueryPacketAcknowledgementResponse) GetProofHeight() types.Height { return types.Height{} } +// QueryPacketAcknowledgementsRequest is the request type for the +// Query/QueryPacketCommitments RPC method +type QueryPacketAcknowledgementsRequest struct { + // port unique identifier + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` + // channel unique identifier + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // pagination request + Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryPacketAcknowledgementsRequest) Reset() { *m = QueryPacketAcknowledgementsRequest{} } +func (m *QueryPacketAcknowledgementsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPacketAcknowledgementsRequest) ProtoMessage() {} +func (*QueryPacketAcknowledgementsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_1034a1e9abc4cca1, []int{18} +} +func (m *QueryPacketAcknowledgementsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPacketAcknowledgementsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPacketAcknowledgementsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryPacketAcknowledgementsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPacketAcknowledgementsRequest.Merge(m, src) +} +func (m *QueryPacketAcknowledgementsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryPacketAcknowledgementsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPacketAcknowledgementsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPacketAcknowledgementsRequest proto.InternalMessageInfo + +func (m *QueryPacketAcknowledgementsRequest) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *QueryPacketAcknowledgementsRequest) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +func (m *QueryPacketAcknowledgementsRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +// QueryPacketAcknowledgemetsResponse is the request type for the +// Query/QueryPacketAcknowledgements RPC method +type QueryPacketAcknowledgementsResponse struct { + Acknowledgements []*PacketState `protobuf:"bytes,1,rep,name=acknowledgements,proto3" json:"acknowledgements,omitempty"` + // pagination response + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + // query block height + Height types.Height `protobuf:"bytes,3,opt,name=height,proto3" json:"height"` +} + +func (m *QueryPacketAcknowledgementsResponse) Reset() { *m = QueryPacketAcknowledgementsResponse{} } +func (m *QueryPacketAcknowledgementsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPacketAcknowledgementsResponse) ProtoMessage() {} +func (*QueryPacketAcknowledgementsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_1034a1e9abc4cca1, []int{19} +} +func (m *QueryPacketAcknowledgementsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPacketAcknowledgementsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPacketAcknowledgementsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryPacketAcknowledgementsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPacketAcknowledgementsResponse.Merge(m, src) +} +func (m *QueryPacketAcknowledgementsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryPacketAcknowledgementsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPacketAcknowledgementsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPacketAcknowledgementsResponse proto.InternalMessageInfo + +func (m *QueryPacketAcknowledgementsResponse) GetAcknowledgements() []*PacketState { + if m != nil { + return m.Acknowledgements + } + return nil +} + +func (m *QueryPacketAcknowledgementsResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +func (m *QueryPacketAcknowledgementsResponse) GetHeight() types.Height { + if m != nil { + return m.Height + } + return types.Height{} +} + // QueryUnreceivedPacketsRequest is the request type for the // Query/UnreceivedPackets RPC method type QueryUnreceivedPacketsRequest struct { @@ -1059,7 +1319,7 @@ func (m *QueryUnreceivedPacketsRequest) Reset() { *m = QueryUnreceivedPa func (m *QueryUnreceivedPacketsRequest) String() string { return proto.CompactTextString(m) } func (*QueryUnreceivedPacketsRequest) ProtoMessage() {} func (*QueryUnreceivedPacketsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1034a1e9abc4cca1, []int{16} + return fileDescriptor_1034a1e9abc4cca1, []int{20} } func (m *QueryUnreceivedPacketsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1122,7 +1382,7 @@ func (m *QueryUnreceivedPacketsResponse) Reset() { *m = QueryUnreceivedP func (m *QueryUnreceivedPacketsResponse) String() string { return proto.CompactTextString(m) } func (*QueryUnreceivedPacketsResponse) ProtoMessage() {} func (*QueryUnreceivedPacketsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1034a1e9abc4cca1, []int{17} + return fileDescriptor_1034a1e9abc4cca1, []int{21} } func (m *QueryUnreceivedPacketsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1165,29 +1425,29 @@ func (m *QueryUnreceivedPacketsResponse) GetHeight() types.Height { return types.Height{} } -// QueryUnrelayedAcksRequest is the request type for the -// Query/UnrelayedAcks RPC method -type QueryUnrelayedAcksRequest struct { +// QueryUnreceivedAcks is the request type for the +// Query/UnreceivedAcks RPC method +type QueryUnreceivedAcksRequest struct { // port unique identifier PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` // channel unique identifier ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` - // list of commitment sequences - PacketCommitmentSequences []uint64 `protobuf:"varint,3,rep,packed,name=packet_commitment_sequences,json=packetCommitmentSequences,proto3" json:"packet_commitment_sequences,omitempty"` + // list of acknowledgement sequences + PacketAckSequences []uint64 `protobuf:"varint,3,rep,packed,name=packet_ack_sequences,json=packetAckSequences,proto3" json:"packet_ack_sequences,omitempty"` } -func (m *QueryUnrelayedAcksRequest) Reset() { *m = QueryUnrelayedAcksRequest{} } -func (m *QueryUnrelayedAcksRequest) String() string { return proto.CompactTextString(m) } -func (*QueryUnrelayedAcksRequest) ProtoMessage() {} -func (*QueryUnrelayedAcksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1034a1e9abc4cca1, []int{18} +func (m *QueryUnreceivedAcksRequest) Reset() { *m = QueryUnreceivedAcksRequest{} } +func (m *QueryUnreceivedAcksRequest) String() string { return proto.CompactTextString(m) } +func (*QueryUnreceivedAcksRequest) ProtoMessage() {} +func (*QueryUnreceivedAcksRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_1034a1e9abc4cca1, []int{22} } -func (m *QueryUnrelayedAcksRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryUnreceivedAcksRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryUnrelayedAcksRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryUnreceivedAcksRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryUnrelayedAcksRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryUnreceivedAcksRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1197,60 +1457,60 @@ func (m *QueryUnrelayedAcksRequest) XXX_Marshal(b []byte, deterministic bool) ([ return b[:n], nil } } -func (m *QueryUnrelayedAcksRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryUnrelayedAcksRequest.Merge(m, src) +func (m *QueryUnreceivedAcksRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUnreceivedAcksRequest.Merge(m, src) } -func (m *QueryUnrelayedAcksRequest) XXX_Size() int { +func (m *QueryUnreceivedAcksRequest) XXX_Size() int { return m.Size() } -func (m *QueryUnrelayedAcksRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryUnrelayedAcksRequest.DiscardUnknown(m) +func (m *QueryUnreceivedAcksRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUnreceivedAcksRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryUnrelayedAcksRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryUnreceivedAcksRequest proto.InternalMessageInfo -func (m *QueryUnrelayedAcksRequest) GetPortId() string { +func (m *QueryUnreceivedAcksRequest) GetPortId() string { if m != nil { return m.PortId } return "" } -func (m *QueryUnrelayedAcksRequest) GetChannelId() string { +func (m *QueryUnreceivedAcksRequest) GetChannelId() string { if m != nil { return m.ChannelId } return "" } -func (m *QueryUnrelayedAcksRequest) GetPacketCommitmentSequences() []uint64 { +func (m *QueryUnreceivedAcksRequest) GetPacketAckSequences() []uint64 { if m != nil { - return m.PacketCommitmentSequences + return m.PacketAckSequences } return nil } -// QueryUnrelayedAcksResponse is the response type for the -// Query/UnrelayedAcks RPC method -type QueryUnrelayedAcksResponse struct { - // list of unrelayed acknowledgement sequences +// QueryUnreceivedAcksResponse is the response type for the +// Query/UnreceivedAcks RPC method +type QueryUnreceivedAcksResponse struct { + // list of unreceived acknowledgement sequences Sequences []uint64 `protobuf:"varint,1,rep,packed,name=sequences,proto3" json:"sequences,omitempty"` // query block height Height types.Height `protobuf:"bytes,2,opt,name=height,proto3" json:"height"` } -func (m *QueryUnrelayedAcksResponse) Reset() { *m = QueryUnrelayedAcksResponse{} } -func (m *QueryUnrelayedAcksResponse) String() string { return proto.CompactTextString(m) } -func (*QueryUnrelayedAcksResponse) ProtoMessage() {} -func (*QueryUnrelayedAcksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1034a1e9abc4cca1, []int{19} +func (m *QueryUnreceivedAcksResponse) Reset() { *m = QueryUnreceivedAcksResponse{} } +func (m *QueryUnreceivedAcksResponse) String() string { return proto.CompactTextString(m) } +func (*QueryUnreceivedAcksResponse) ProtoMessage() {} +func (*QueryUnreceivedAcksResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_1034a1e9abc4cca1, []int{23} } -func (m *QueryUnrelayedAcksResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryUnreceivedAcksResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryUnrelayedAcksResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryUnreceivedAcksResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryUnrelayedAcksResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryUnreceivedAcksResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1260,26 +1520,26 @@ func (m *QueryUnrelayedAcksResponse) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } -func (m *QueryUnrelayedAcksResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryUnrelayedAcksResponse.Merge(m, src) +func (m *QueryUnreceivedAcksResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUnreceivedAcksResponse.Merge(m, src) } -func (m *QueryUnrelayedAcksResponse) XXX_Size() int { +func (m *QueryUnreceivedAcksResponse) XXX_Size() int { return m.Size() } -func (m *QueryUnrelayedAcksResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryUnrelayedAcksResponse.DiscardUnknown(m) +func (m *QueryUnreceivedAcksResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUnreceivedAcksResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryUnrelayedAcksResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryUnreceivedAcksResponse proto.InternalMessageInfo -func (m *QueryUnrelayedAcksResponse) GetSequences() []uint64 { +func (m *QueryUnreceivedAcksResponse) GetSequences() []uint64 { if m != nil { return m.Sequences } return nil } -func (m *QueryUnrelayedAcksResponse) GetHeight() types.Height { +func (m *QueryUnreceivedAcksResponse) GetHeight() types.Height { if m != nil { return m.Height } @@ -1299,7 +1559,7 @@ func (m *QueryNextSequenceReceiveRequest) Reset() { *m = QueryNextSequen func (m *QueryNextSequenceReceiveRequest) String() string { return proto.CompactTextString(m) } func (*QueryNextSequenceReceiveRequest) ProtoMessage() {} func (*QueryNextSequenceReceiveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1034a1e9abc4cca1, []int{20} + return fileDescriptor_1034a1e9abc4cca1, []int{24} } func (m *QueryNextSequenceReceiveRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1357,7 +1617,7 @@ func (m *QueryNextSequenceReceiveResponse) Reset() { *m = QueryNextSeque func (m *QueryNextSequenceReceiveResponse) String() string { return proto.CompactTextString(m) } func (*QueryNextSequenceReceiveResponse) ProtoMessage() {} func (*QueryNextSequenceReceiveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1034a1e9abc4cca1, []int{21} + return fileDescriptor_1034a1e9abc4cca1, []int{25} } func (m *QueryNextSequenceReceiveResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1422,12 +1682,16 @@ func init() { proto.RegisterType((*QueryPacketCommitmentResponse)(nil), "ibc.core.channel.v1.QueryPacketCommitmentResponse") proto.RegisterType((*QueryPacketCommitmentsRequest)(nil), "ibc.core.channel.v1.QueryPacketCommitmentsRequest") proto.RegisterType((*QueryPacketCommitmentsResponse)(nil), "ibc.core.channel.v1.QueryPacketCommitmentsResponse") + proto.RegisterType((*QueryPacketReceiptRequest)(nil), "ibc.core.channel.v1.QueryPacketReceiptRequest") + proto.RegisterType((*QueryPacketReceiptResponse)(nil), "ibc.core.channel.v1.QueryPacketReceiptResponse") proto.RegisterType((*QueryPacketAcknowledgementRequest)(nil), "ibc.core.channel.v1.QueryPacketAcknowledgementRequest") proto.RegisterType((*QueryPacketAcknowledgementResponse)(nil), "ibc.core.channel.v1.QueryPacketAcknowledgementResponse") + proto.RegisterType((*QueryPacketAcknowledgementsRequest)(nil), "ibc.core.channel.v1.QueryPacketAcknowledgementsRequest") + proto.RegisterType((*QueryPacketAcknowledgementsResponse)(nil), "ibc.core.channel.v1.QueryPacketAcknowledgementsResponse") proto.RegisterType((*QueryUnreceivedPacketsRequest)(nil), "ibc.core.channel.v1.QueryUnreceivedPacketsRequest") proto.RegisterType((*QueryUnreceivedPacketsResponse)(nil), "ibc.core.channel.v1.QueryUnreceivedPacketsResponse") - proto.RegisterType((*QueryUnrelayedAcksRequest)(nil), "ibc.core.channel.v1.QueryUnrelayedAcksRequest") - proto.RegisterType((*QueryUnrelayedAcksResponse)(nil), "ibc.core.channel.v1.QueryUnrelayedAcksResponse") + proto.RegisterType((*QueryUnreceivedAcksRequest)(nil), "ibc.core.channel.v1.QueryUnreceivedAcksRequest") + proto.RegisterType((*QueryUnreceivedAcksResponse)(nil), "ibc.core.channel.v1.QueryUnreceivedAcksResponse") proto.RegisterType((*QueryNextSequenceReceiveRequest)(nil), "ibc.core.channel.v1.QueryNextSequenceReceiveRequest") proto.RegisterType((*QueryNextSequenceReceiveResponse)(nil), "ibc.core.channel.v1.QueryNextSequenceReceiveResponse") } @@ -1435,92 +1699,100 @@ func init() { func init() { proto.RegisterFile("ibc/core/channel/v1/query.proto", fileDescriptor_1034a1e9abc4cca1) } var fileDescriptor_1034a1e9abc4cca1 = []byte{ - // 1353 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcf, 0x6f, 0xdc, 0xc4, - 0x17, 0xcf, 0xec, 0x6e, 0xdb, 0xe4, 0xf5, 0xd7, 0xb7, 0x93, 0x44, 0x4d, 0xdd, 0x74, 0x93, 0x5a, - 0xea, 0x97, 0xb4, 0x52, 0x3d, 0x6c, 0x52, 0x42, 0x84, 0xa0, 0x52, 0x12, 0x89, 0x36, 0x95, 0xda, - 0xa6, 0x8e, 0x2a, 0xb5, 0x3d, 0xb0, 0x78, 0xbd, 0x93, 0x8d, 0x95, 0xac, 0xbd, 0x5d, 0x7b, 0xb7, - 0x09, 0x61, 0x11, 0x2a, 0x12, 0xf4, 0x84, 0x90, 0x7a, 0x40, 0xe2, 0x82, 0xc4, 0x2d, 0x47, 0xfe, - 0x02, 0xae, 0xbd, 0x11, 0xa9, 0x1c, 0x90, 0x2a, 0x15, 0x94, 0x70, 0xe0, 0xc6, 0x89, 0x3b, 0xf2, - 0xcc, 0xd8, 0x6b, 0xef, 0xda, 0x4e, 0x36, 0x9b, 0x05, 0xc4, 0x29, 0xeb, 0xf1, 0x7b, 0x6f, 0x3e, - 0x9f, 0xcf, 0x7b, 0x1e, 0x7f, 0x1c, 0x18, 0x33, 0x0a, 0x3a, 0xd1, 0xad, 0x2a, 0x25, 0xfa, 0x8a, - 0x66, 0x9a, 0x74, 0x8d, 0xd4, 0x73, 0xe4, 0x71, 0x8d, 0x56, 0x37, 0x94, 0x4a, 0xd5, 0x72, 0x2c, - 0x3c, 0x68, 0x14, 0x74, 0xc5, 0x0d, 0x50, 0x44, 0x80, 0x52, 0xcf, 0x49, 0x81, 0xac, 0x35, 0x83, - 0x9a, 0x8e, 0x9b, 0xc4, 0x7f, 0xf1, 0x2c, 0xe9, 0x8a, 0x6e, 0xd9, 0x65, 0xcb, 0x26, 0x05, 0xcd, - 0xa6, 0xbc, 0x1c, 0xa9, 0xe7, 0x0a, 0xd4, 0xd1, 0x72, 0xa4, 0xa2, 0x95, 0x0c, 0x53, 0x73, 0x0c, - 0xcb, 0x14, 0xb1, 0x17, 0xa3, 0x20, 0x78, 0x9b, 0xf1, 0x90, 0xd1, 0x92, 0x65, 0x95, 0xd6, 0x28, - 0xd1, 0x2a, 0x06, 0xd1, 0x4c, 0xd3, 0x72, 0x58, 0xbe, 0x2d, 0xee, 0x9e, 0x13, 0x77, 0xd9, 0x55, - 0xa1, 0xb6, 0x4c, 0x34, 0x53, 0xa0, 0x97, 0x86, 0x4a, 0x56, 0xc9, 0x62, 0x3f, 0x89, 0xfb, 0x8b, - 0xaf, 0xca, 0xb7, 0x61, 0xf0, 0x9e, 0x8b, 0x69, 0x9e, 0x6f, 0xa2, 0xd2, 0xc7, 0x35, 0x6a, 0x3b, - 0xf8, 0x2c, 0x1c, 0xab, 0x58, 0x55, 0x27, 0x6f, 0x14, 0x47, 0xd0, 0x38, 0x9a, 0x18, 0x50, 0x8f, - 0xba, 0x97, 0x0b, 0x45, 0x7c, 0x01, 0x40, 0xe0, 0x71, 0xef, 0xa5, 0xd8, 0xbd, 0x01, 0xb1, 0xb2, - 0x50, 0x94, 0xb7, 0x10, 0x0c, 0x85, 0xeb, 0xd9, 0x15, 0xcb, 0xb4, 0x29, 0x9e, 0x86, 0x63, 0x22, - 0x8a, 0x15, 0x3c, 0x3e, 0x39, 0xaa, 0x44, 0xa8, 0xa9, 0x78, 0x69, 0x5e, 0x30, 0x1e, 0x82, 0x23, - 0x95, 0xaa, 0x65, 0x2d, 0xb3, 0xad, 0x4e, 0xa8, 0xfc, 0x02, 0xcf, 0xc3, 0x09, 0xf6, 0x23, 0xbf, - 0x42, 0x8d, 0xd2, 0x8a, 0x33, 0x92, 0x66, 0x25, 0xa5, 0x40, 0x49, 0xde, 0x81, 0x7a, 0x4e, 0xb9, - 0xc9, 0x22, 0xe6, 0x32, 0x2f, 0x5e, 0x8f, 0xf5, 0xa9, 0xc7, 0x59, 0x16, 0x5f, 0x92, 0x3f, 0x08, - 0x43, 0xb5, 0x3d, 0xee, 0xef, 0x03, 0x34, 0x1b, 0x23, 0xd0, 0xfe, 0x5f, 0xe1, 0x5d, 0x54, 0xdc, - 0x2e, 0x2a, 0x7c, 0x28, 0x44, 0x17, 0x95, 0x45, 0xad, 0x44, 0x45, 0xae, 0x1a, 0xc8, 0x94, 0x5f, - 0x23, 0x18, 0x6e, 0xd9, 0x40, 0x88, 0x31, 0x07, 0xfd, 0x82, 0x9f, 0x3d, 0x82, 0xc6, 0xd3, 0xac, - 0x7e, 0x94, 0x1a, 0x0b, 0x45, 0x6a, 0x3a, 0xc6, 0xb2, 0x41, 0x8b, 0x9e, 0x2e, 0x7e, 0x1e, 0xbe, - 0x11, 0x42, 0x99, 0x62, 0x28, 0xdf, 0xd8, 0x13, 0x25, 0x07, 0x10, 0x84, 0x89, 0x67, 0xe0, 0x68, - 0x87, 0x2a, 0x8a, 0x78, 0xf9, 0x19, 0x82, 0x2c, 0x27, 0x68, 0x99, 0x26, 0xd5, 0xdd, 0x6a, 0xad, - 0x5a, 0x66, 0x01, 0x74, 0xff, 0xa6, 0x18, 0xa5, 0xc0, 0x4a, 0x8b, 0xd6, 0xa9, 0x03, 0x6b, 0xfd, - 0x3b, 0x82, 0xb1, 0x58, 0x28, 0xff, 0x2d, 0xd5, 0x1f, 0x78, 0xa2, 0x73, 0x4c, 0xf3, 0x2c, 0x7a, - 0xc9, 0xd1, 0x1c, 0xda, 0xed, 0xc3, 0xfb, 0x8b, 0x2f, 0x62, 0x44, 0x69, 0x21, 0xa2, 0x06, 0x67, - 0x0d, 0x5f, 0x9f, 0x3c, 0x87, 0x9a, 0xb7, 0xdd, 0x10, 0xf1, 0xa4, 0x5c, 0x8e, 0x22, 0x12, 0x90, - 0x34, 0x50, 0x73, 0xd8, 0x88, 0x5a, 0xee, 0xe5, 0x23, 0xbf, 0x85, 0xe0, 0x62, 0x88, 0xa1, 0xcb, - 0xc9, 0xb4, 0x6b, 0xf6, 0x61, 0xe8, 0x87, 0x2f, 0xc1, 0xa9, 0x3a, 0xad, 0xda, 0x86, 0x65, 0xe6, - 0xcd, 0x5a, 0xb9, 0x40, 0xab, 0x0c, 0x64, 0x46, 0x3d, 0x29, 0x56, 0xef, 0xb0, 0xc5, 0x60, 0x98, - 0xe0, 0x92, 0x09, 0x85, 0x09, 0xac, 0xaf, 0x10, 0xc8, 0x49, 0x58, 0x45, 0x43, 0xde, 0x83, 0xd3, - 0xba, 0x77, 0x27, 0xd4, 0x88, 0x21, 0x85, 0xbf, 0x0b, 0x14, 0xef, 0x5d, 0xa0, 0xcc, 0x9a, 0x1b, - 0xea, 0x29, 0x3d, 0x54, 0x06, 0x9f, 0x87, 0x01, 0xd1, 0x44, 0x9f, 0x51, 0x3f, 0x5f, 0x58, 0x28, - 0x36, 0x3b, 0x91, 0x4e, 0xea, 0x44, 0xe6, 0x20, 0x9d, 0xa8, 0xc2, 0x28, 0x23, 0xb7, 0xa8, 0xe9, - 0xab, 0xd4, 0x99, 0xb7, 0xca, 0x65, 0xc3, 0x29, 0x53, 0xd3, 0xe9, 0xb6, 0x07, 0x12, 0xf4, 0xdb, - 0x6e, 0x09, 0x53, 0xa7, 0x42, 0x7d, 0xff, 0x5a, 0xfe, 0x06, 0xc1, 0x85, 0x98, 0x4d, 0x85, 0x98, - 0xec, 0xb8, 0xf2, 0x56, 0xd9, 0xc6, 0x27, 0xd4, 0xc0, 0x4a, 0x2f, 0x47, 0xf3, 0xdb, 0x38, 0x70, - 0x76, 0xb7, 0x92, 0x84, 0xcf, 0xd8, 0xf4, 0x81, 0xcf, 0xd8, 0x3f, 0xbc, 0xe3, 0x3e, 0x02, 0xa1, - 0xd0, 0xef, 0x16, 0x1c, 0x6f, 0xaa, 0xe5, 0x9d, 0xb2, 0x13, 0x91, 0xa7, 0x2c, 0x2f, 0x32, 0xab, - 0xaf, 0x06, 0xda, 0x10, 0x4c, 0xfe, 0x37, 0x1c, 0xb5, 0x4f, 0xc4, 0x69, 0xe1, 0x63, 0x35, 0xad, - 0x27, 0x6b, 0xb4, 0x58, 0xa2, 0xbd, 0x9e, 0xd4, 0x2d, 0xef, 0xd9, 0x8f, 0xd9, 0x59, 0xc8, 0x3d, - 0x01, 0xa7, 0xb5, 0xf0, 0x2d, 0x31, 0xb3, 0xad, 0xcb, 0xbd, 0x1c, 0xdc, 0xaf, 0xbd, 0xc1, 0xbd, - 0x6f, 0x56, 0xa9, 0x4e, 0x8d, 0x3a, 0x2d, 0x72, 0xd4, 0x5d, 0x0f, 0xee, 0x75, 0x38, 0x5f, 0x61, - 0x95, 0xf2, 0xcd, 0xb9, 0xc8, 0x7b, 0x1a, 0xd9, 0x23, 0xe9, 0xf1, 0xf4, 0x44, 0x46, 0x3d, 0x57, - 0x69, 0x99, 0xc6, 0x25, 0x2f, 0x40, 0x5e, 0x17, 0xf3, 0x1a, 0x01, 0x4c, 0x08, 0x38, 0x0a, 0x03, - 0xcd, 0x7a, 0x88, 0xd5, 0x6b, 0x2e, 0x04, 0x06, 0x27, 0xd5, 0xe1, 0xe0, 0x3c, 0x47, 0x70, 0xce, - 0xdf, 0x7a, 0x4d, 0xdb, 0xa0, 0xc5, 0x59, 0x7d, 0xf5, 0x1f, 0xd7, 0xc3, 0x01, 0x29, 0x0a, 0x54, - 0x8f, 0xb5, 0x78, 0x28, 0x4c, 0xc5, 0x1d, 0xba, 0xee, 0x63, 0x51, 0x79, 0x3f, 0xba, 0x35, 0x2c, - 0xdf, 0x23, 0x18, 0x8f, 0xaf, 0x2d, 0x78, 0x4d, 0xc2, 0xb0, 0x49, 0xd7, 0x9b, 0x42, 0xe5, 0xc5, - 0x30, 0xb0, 0xad, 0x32, 0xea, 0xa0, 0xd9, 0x9e, 0xdb, 0xc3, 0xc7, 0x65, 0xf2, 0x47, 0x0c, 0x47, - 0x18, 0x66, 0xfc, 0x1d, 0x82, 0x63, 0xe2, 0xdd, 0x8e, 0xa3, 0xcf, 0xc8, 0x88, 0x2f, 0x33, 0xe9, - 0xf2, 0x3e, 0x22, 0x39, 0x73, 0x79, 0xee, 0xe9, 0xcb, 0xdf, 0x9e, 0xa7, 0xde, 0xc5, 0xef, 0x10, - 0xf6, 0x59, 0xe9, 0x7f, 0x51, 0xf2, 0x8f, 0x4f, 0xcf, 0xd3, 0x92, 0xcd, 0xa6, 0xc4, 0x0d, 0xe2, - 0x0a, 0x6f, 0x93, 0x4d, 0xd1, 0x8e, 0x06, 0x7e, 0x86, 0xa0, 0xdf, 0x73, 0xd2, 0x78, 0xef, 0xbd, - 0xbd, 0x19, 0x97, 0xae, 0xec, 0x27, 0x54, 0xe0, 0xbc, 0xc4, 0x70, 0x8e, 0xe1, 0x0b, 0x89, 0x38, - 0xf1, 0x0f, 0x08, 0x70, 0xbb, 0xbd, 0xc7, 0x53, 0x09, 0x3b, 0xc5, 0x7d, 0x97, 0x48, 0xd7, 0x3a, - 0x4b, 0x12, 0x40, 0xaf, 0x33, 0xa0, 0x33, 0x78, 0x3a, 0x1a, 0xa8, 0x9f, 0xe8, 0x6a, 0xea, 0x5f, - 0x34, 0x9a, 0x0c, 0xb6, 0x5d, 0x06, 0x6d, 0xde, 0x3a, 0x91, 0x41, 0x9c, 0xc9, 0x4f, 0x64, 0x10, - 0x6b, 0xdf, 0xe5, 0xbb, 0x8c, 0xc1, 0x02, 0xbe, 0x71, 0xf0, 0x91, 0x20, 0x41, 0xd3, 0x8f, 0xbf, - 0x4c, 0xc1, 0x70, 0xa4, 0x41, 0xc5, 0xd3, 0x7b, 0x03, 0x8c, 0x72, 0xdf, 0xd2, 0xdb, 0x1d, 0xe7, - 0x09, 0x6e, 0x9f, 0x21, 0x46, 0xae, 0x81, 0x37, 0xbb, 0x21, 0x17, 0xf6, 0xd2, 0x44, 0x78, 0x72, - 0xb2, 0x19, 0x76, 0xf6, 0x0d, 0xc2, 0xcf, 0x80, 0xe6, 0x3a, 0xbf, 0x6e, 0xe0, 0x57, 0x08, 0xfe, - 0xd7, 0x6a, 0x90, 0x70, 0x2e, 0x9e, 0x53, 0x8c, 0x01, 0x96, 0x26, 0x3b, 0x49, 0x11, 0x0a, 0x7c, - 0xc8, 0x04, 0x78, 0x84, 0x1f, 0x74, 0x21, 0x40, 0xdb, 0x1b, 0xc6, 0x26, 0x9b, 0xde, 0xd1, 0xd9, - 0xc0, 0x2f, 0x11, 0x9c, 0x69, 0xb3, 0x7f, 0xb8, 0x03, 0xac, 0xfe, 0x13, 0x38, 0xd5, 0x51, 0x8e, - 0x20, 0x78, 0x9f, 0x11, 0xbc, 0x8b, 0x6f, 0x1f, 0x2a, 0x41, 0xbc, 0x8b, 0x60, 0x38, 0xd2, 0x69, - 0x25, 0x0d, 0x71, 0x92, 0x29, 0x4c, 0x1a, 0xe2, 0x44, 0x4b, 0x27, 0x3f, 0x64, 0x0c, 0x97, 0xf0, - 0xbd, 0xee, 0x19, 0x6a, 0xfa, 0x6a, 0xa8, 0x77, 0x9f, 0xa7, 0xe0, 0x4c, 0x9b, 0x15, 0x4a, 0xea, - 0x5d, 0x9c, 0xa1, 0x4b, 0xea, 0x5d, 0xac, 0xd7, 0x92, 0xbf, 0xe0, 0x8f, 0xe7, 0xa7, 0x08, 0x7f, - 0x72, 0xc8, 0xe3, 0x99, 0x60, 0x8a, 0x1a, 0xa4, 0xe6, 0x03, 0xca, 0x57, 0x04, 0xe5, 0x3f, 0x11, - 0x9c, 0x0c, 0x79, 0x20, 0xac, 0x24, 0x13, 0x6a, 0x75, 0x70, 0x12, 0xd9, 0x77, 0xbc, 0x20, 0xff, - 0x94, 0x93, 0xff, 0x18, 0x7f, 0xf4, 0x77, 0x73, 0x67, 0x58, 0xd8, 0x2c, 0xe0, 0x9f, 0x10, 0x0c, - 0x46, 0x38, 0x25, 0x9c, 0xf0, 0x2a, 0x89, 0x37, 0x6d, 0xd2, 0x5b, 0x1d, 0x66, 0x09, 0x25, 0x16, - 0x99, 0x10, 0xb7, 0xf0, 0xcd, 0x2e, 0x84, 0x08, 0xf9, 0xb9, 0x39, 0xf5, 0xc5, 0x4e, 0x16, 0x6d, - 0xef, 0x64, 0xd1, 0xaf, 0x3b, 0x59, 0xf4, 0xd5, 0x6e, 0xb6, 0x6f, 0x7b, 0x37, 0xdb, 0xf7, 0xf3, - 0x6e, 0xb6, 0xef, 0xd1, 0x4c, 0xc9, 0x70, 0x56, 0x6a, 0x05, 0x45, 0xb7, 0xca, 0x44, 0xfc, 0x17, - 0x9e, 0xff, 0xb9, 0x6a, 0x17, 0x57, 0xc9, 0x3a, 0xf1, 0xff, 0xdb, 0xfe, 0xe6, 0xb5, 0xab, 0x1e, - 0x12, 0x67, 0xa3, 0x42, 0xed, 0xc2, 0x51, 0xf6, 0x4f, 0x93, 0xa9, 0xbf, 0x02, 0x00, 0x00, 0xff, - 0xff, 0x4c, 0x6c, 0x44, 0xa5, 0x14, 0x18, 0x00, 0x00, + // 1488 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcf, 0x6f, 0x13, 0xc7, + 0x17, 0xcf, 0x38, 0x01, 0x92, 0xc7, 0xef, 0x49, 0x02, 0x61, 0x09, 0x4e, 0xf0, 0x57, 0x7c, 0x1b, + 0x90, 0xd8, 0x21, 0x81, 0xd2, 0xa8, 0x6a, 0x91, 0x48, 0xa4, 0x42, 0xaa, 0xf2, 0x6b, 0x29, 0x2a, + 0x20, 0xb5, 0xee, 0x7a, 0x3d, 0x38, 0xab, 0x24, 0xbb, 0xc6, 0xbb, 0x36, 0x41, 0xa9, 0xab, 0xaa, + 0x95, 0x80, 0x53, 0x55, 0x89, 0x43, 0xa5, 0x5e, 0x2a, 0x55, 0xbd, 0x70, 0xec, 0x5f, 0xd0, 0x2b, + 0xb7, 0x22, 0xd1, 0x43, 0x25, 0x24, 0x5a, 0x91, 0x4a, 0xf4, 0xda, 0x4b, 0xcf, 0xd5, 0xce, 0xbc, + 0x5d, 0xef, 0xda, 0xbb, 0x9b, 0x38, 0x8e, 0xa5, 0xa8, 0xa7, 0x78, 0x67, 0xe7, 0xbd, 0xf9, 0x7c, + 0x3e, 0x6f, 0xde, 0xf3, 0x7b, 0x0e, 0x8c, 0x99, 0x05, 0x83, 0x19, 0x76, 0x85, 0x33, 0x63, 0x5e, + 0xb7, 0x2c, 0xbe, 0xc8, 0x6a, 0x93, 0xec, 0x6e, 0x95, 0x57, 0xee, 0xab, 0xe5, 0x8a, 0xed, 0xda, + 0x74, 0xd0, 0x2c, 0x18, 0xaa, 0xb7, 0x41, 0xc5, 0x0d, 0x6a, 0x6d, 0x52, 0x09, 0x59, 0x2d, 0x9a, + 0xdc, 0x72, 0x3d, 0x23, 0xf9, 0x49, 0x5a, 0x29, 0x27, 0x0c, 0xdb, 0x59, 0xb2, 0x1d, 0x56, 0xd0, + 0x1d, 0x2e, 0xdd, 0xb1, 0xda, 0x64, 0x81, 0xbb, 0xfa, 0x24, 0x2b, 0xeb, 0x25, 0xd3, 0xd2, 0x5d, + 0xd3, 0xb6, 0x70, 0xef, 0xd1, 0x38, 0x08, 0xfe, 0x61, 0x72, 0xcb, 0x68, 0xc9, 0xb6, 0x4b, 0x8b, + 0x9c, 0xe9, 0x65, 0x93, 0xe9, 0x96, 0x65, 0xbb, 0xc2, 0xde, 0xc1, 0xb7, 0x87, 0xf0, 0xad, 0x78, + 0x2a, 0x54, 0xef, 0x30, 0xdd, 0x42, 0xf4, 0xca, 0x50, 0xc9, 0x2e, 0xd9, 0xe2, 0x23, 0xf3, 0x3e, + 0xc9, 0xd5, 0xdc, 0x25, 0x18, 0xbc, 0xe6, 0x61, 0x9a, 0x95, 0x87, 0x68, 0xfc, 0x6e, 0x95, 0x3b, + 0x2e, 0x3d, 0x08, 0x3b, 0xca, 0x76, 0xc5, 0xcd, 0x9b, 0xc5, 0x11, 0x32, 0x4e, 0x26, 0x06, 0xb4, + 0xed, 0xde, 0xe3, 0x5c, 0x91, 0x1e, 0x01, 0x40, 0x3c, 0xde, 0xbb, 0x8c, 0x78, 0x37, 0x80, 0x2b, + 0x73, 0xc5, 0xdc, 0x13, 0x02, 0x43, 0x51, 0x7f, 0x4e, 0xd9, 0xb6, 0x1c, 0x4e, 0xcf, 0xc2, 0x0e, + 0xdc, 0x25, 0x1c, 0xee, 0x9c, 0x1a, 0x55, 0x63, 0xd4, 0x54, 0x7d, 0x33, 0x7f, 0x33, 0x1d, 0x82, + 0x6d, 0xe5, 0x8a, 0x6d, 0xdf, 0x11, 0x47, 0xed, 0xd2, 0xe4, 0x03, 0x9d, 0x85, 0x5d, 0xe2, 0x43, + 0x7e, 0x9e, 0x9b, 0xa5, 0x79, 0x77, 0xa4, 0x57, 0xb8, 0x54, 0x42, 0x2e, 0x65, 0x04, 0x6a, 0x93, + 0xea, 0x45, 0xb1, 0x63, 0xa6, 0xef, 0xe9, 0xcb, 0xb1, 0x1e, 0x6d, 0xa7, 0xb0, 0x92, 0x4b, 0xb9, + 0x4f, 0xa2, 0x50, 0x1d, 0x9f, 0xfb, 0x7b, 0x00, 0x8d, 0xc0, 0x20, 0xda, 0xff, 0xab, 0x32, 0x8a, + 0xaa, 0x17, 0x45, 0x55, 0x5e, 0x0a, 0x8c, 0xa2, 0x7a, 0x55, 0x2f, 0x71, 0xb4, 0xd5, 0x42, 0x96, + 0xb9, 0x97, 0x04, 0x86, 0x9b, 0x0e, 0x40, 0x31, 0x66, 0xa0, 0x1f, 0xf9, 0x39, 0x23, 0x64, 0xbc, + 0x57, 0xf8, 0x8f, 0x53, 0x63, 0xae, 0xc8, 0x2d, 0xd7, 0xbc, 0x63, 0xf2, 0xa2, 0xaf, 0x4b, 0x60, + 0x47, 0x2f, 0x44, 0x50, 0x66, 0x04, 0xca, 0x37, 0xd6, 0x44, 0x29, 0x01, 0x84, 0x61, 0xd2, 0x69, + 0xd8, 0xde, 0xa6, 0x8a, 0xb8, 0x3f, 0xf7, 0x88, 0x40, 0x56, 0x12, 0xb4, 0x2d, 0x8b, 0x1b, 0x9e, + 0xb7, 0x66, 0x2d, 0xb3, 0x00, 0x46, 0xf0, 0x12, 0xaf, 0x52, 0x68, 0xa5, 0x49, 0xeb, 0xcc, 0x86, + 0xb5, 0xfe, 0x8b, 0xc0, 0x58, 0x22, 0x94, 0xff, 0x96, 0xea, 0x37, 0x7d, 0xd1, 0x25, 0xa6, 0x59, + 0xb1, 0xfb, 0xba, 0xab, 0xbb, 0xbc, 0xd3, 0xe4, 0xfd, 0x3d, 0x10, 0x31, 0xc6, 0x35, 0x8a, 0xa8, + 0xc3, 0x41, 0x33, 0xd0, 0x27, 0x2f, 0xa1, 0xe6, 0x1d, 0x6f, 0x0b, 0x66, 0xca, 0xf1, 0x38, 0x22, + 0x21, 0x49, 0x43, 0x3e, 0x87, 0xcd, 0xb8, 0xe5, 0x6e, 0xa6, 0xfc, 0x13, 0x02, 0x47, 0x23, 0x0c, + 0x3d, 0x4e, 0x96, 0x53, 0x75, 0x36, 0x43, 0x3f, 0x7a, 0x0c, 0xf6, 0xd4, 0x78, 0xc5, 0x31, 0x6d, + 0x2b, 0x6f, 0x55, 0x97, 0x0a, 0xbc, 0x22, 0x40, 0xf6, 0x69, 0xbb, 0x71, 0xf5, 0xb2, 0x58, 0x0c, + 0x6f, 0x43, 0x2e, 0x7d, 0x91, 0x6d, 0x88, 0xf5, 0x05, 0x81, 0x5c, 0x1a, 0x56, 0x0c, 0xc8, 0xbb, + 0xb0, 0xd7, 0xf0, 0xdf, 0x44, 0x02, 0x31, 0xa4, 0xca, 0xef, 0x02, 0xd5, 0xff, 0x2e, 0x50, 0xcf, + 0x5b, 0xf7, 0xb5, 0x3d, 0x46, 0xc4, 0x0d, 0x3d, 0x0c, 0x03, 0x18, 0xc4, 0x80, 0x51, 0xbf, 0x5c, + 0x98, 0x2b, 0x36, 0x22, 0xd1, 0x9b, 0x16, 0x89, 0xbe, 0x8d, 0x44, 0xa2, 0x02, 0xa3, 0x82, 0xdc, + 0x55, 0xdd, 0x58, 0xe0, 0xee, 0xac, 0xbd, 0xb4, 0x64, 0xba, 0x4b, 0xdc, 0x72, 0x3b, 0x8d, 0x81, + 0x02, 0xfd, 0x8e, 0xe7, 0xc2, 0x32, 0x38, 0xaa, 0x1f, 0x3c, 0xe7, 0xbe, 0x23, 0x70, 0x24, 0xe1, + 0x50, 0x14, 0x53, 0x94, 0x2b, 0x7f, 0x55, 0x1c, 0xbc, 0x4b, 0x0b, 0xad, 0x74, 0xf3, 0x6a, 0x7e, + 0x9f, 0x04, 0xce, 0xe9, 0x54, 0x92, 0x68, 0x8d, 0xed, 0xdd, 0x70, 0x8d, 0x7d, 0xed, 0x97, 0xfb, + 0x18, 0x84, 0x41, 0x89, 0xdd, 0xd9, 0x50, 0xcb, 0xaf, 0xb2, 0xe3, 0xb1, 0x55, 0x56, 0x3a, 0x91, + 0x77, 0x39, 0x6c, 0xb4, 0x15, 0x4a, 0xac, 0x0d, 0x87, 0x42, 0x44, 0x35, 0x6e, 0x70, 0xb3, 0xdc, + 0xd5, 0x9b, 0xf9, 0x98, 0x80, 0x12, 0x77, 0x22, 0xca, 0xaa, 0x40, 0x7f, 0xc5, 0x5b, 0xaa, 0x71, + 0xe9, 0xb7, 0x5f, 0x0b, 0x9e, 0xbb, 0x99, 0xa3, 0xf7, 0xb0, 0x58, 0x4a, 0x50, 0xe7, 0x8d, 0x05, + 0xcb, 0xbe, 0xb7, 0xc8, 0x8b, 0x25, 0xde, 0xed, 0x44, 0x7d, 0xe2, 0x97, 0xbe, 0x84, 0x93, 0x51, + 0x96, 0x09, 0xd8, 0xab, 0x47, 0x5f, 0x61, 0xca, 0x36, 0x2f, 0x77, 0x33, 0x6f, 0x7f, 0x4c, 0xc5, + 0xba, 0x65, 0x92, 0xf7, 0x1f, 0x02, 0xff, 0x4b, 0x85, 0x89, 0x9a, 0x7e, 0x00, 0xfb, 0x9a, 0xc4, + 0x5b, 0x7f, 0x1a, 0xb7, 0x58, 0x6e, 0x85, 0x5c, 0xfe, 0xd6, 0xaf, 0xab, 0x37, 0x2c, 0x3f, 0x67, + 0x24, 0xe6, 0x8e, 0x43, 0x73, 0x0e, 0x0e, 0x97, 0x85, 0xa7, 0x7c, 0xa3, 0x7c, 0xe5, 0xfd, 0x3b, + 0xec, 0x8c, 0xf4, 0x8e, 0xf7, 0x4e, 0xf4, 0x69, 0x87, 0xca, 0x4d, 0xc5, 0xf2, 0xba, 0xbf, 0x21, + 0xb7, 0x8c, 0xe5, 0x34, 0x06, 0x18, 0x06, 0x63, 0x14, 0x06, 0x1a, 0xfe, 0x88, 0xf0, 0xd7, 0x58, + 0x08, 0x69, 0x92, 0x69, 0x53, 0x93, 0x07, 0x7e, 0xb9, 0x69, 0x1c, 0x7d, 0xde, 0x58, 0xe8, 0x58, + 0x90, 0x53, 0x30, 0x84, 0x82, 0xe8, 0xc6, 0x42, 0x8b, 0x12, 0xb4, 0xec, 0xdf, 0xbc, 0x86, 0x04, + 0x55, 0x38, 0x1c, 0x8b, 0xa3, 0xcb, 0xfc, 0x6f, 0x61, 0x9f, 0x7b, 0x99, 0x2f, 0x07, 0xf1, 0xd0, + 0x24, 0x80, 0x4e, 0x7b, 0xe8, 0x9f, 0x08, 0x8c, 0x27, 0xfb, 0x46, 0x5e, 0x53, 0x30, 0x6c, 0xf1, + 0xe5, 0xc6, 0x65, 0xc9, 0x23, 0x7b, 0x71, 0x54, 0x9f, 0x36, 0x68, 0xb5, 0xda, 0x76, 0xb1, 0x84, + 0x4d, 0x3d, 0x3c, 0x00, 0xdb, 0x04, 0x66, 0xfa, 0x03, 0x81, 0x1d, 0xd8, 0x6e, 0xd2, 0x89, 0xd8, + 0x7c, 0x8f, 0xf9, 0xb1, 0x40, 0x39, 0xbe, 0x8e, 0x9d, 0x92, 0x79, 0x6e, 0xe6, 0xcb, 0xe7, 0x7f, + 0x3e, 0xce, 0xbc, 0x43, 0xdf, 0x66, 0xe2, 0x97, 0x8e, 0xe0, 0x47, 0x0e, 0xf9, 0x7b, 0x88, 0x3f, + 0x66, 0xb1, 0x95, 0x86, 0xc4, 0x75, 0xe6, 0x09, 0xef, 0xb0, 0x15, 0x0c, 0x47, 0x9d, 0x3e, 0x22, + 0xd0, 0xef, 0x0f, 0x77, 0x74, 0xed, 0xb3, 0xfd, 0x6b, 0xad, 0x9c, 0x58, 0xcf, 0x56, 0xc4, 0x79, + 0x4c, 0xe0, 0x1c, 0xa3, 0x47, 0x52, 0x71, 0xd2, 0x9f, 0x09, 0xd0, 0xd6, 0x89, 0x93, 0x9e, 0x4e, + 0x39, 0x29, 0x69, 0x54, 0x56, 0xce, 0xb4, 0x67, 0x84, 0x40, 0xcf, 0x09, 0xa0, 0xd3, 0xf4, 0x6c, + 0x3c, 0xd0, 0xc0, 0xd0, 0xd3, 0x34, 0x78, 0xa8, 0x37, 0x18, 0x3c, 0xf3, 0x18, 0xb4, 0x8c, 0x7b, + 0xa9, 0x0c, 0x92, 0xe6, 0xce, 0x54, 0x06, 0x89, 0x13, 0x65, 0xee, 0x8a, 0x60, 0x30, 0x47, 0x2f, + 0x6c, 0xfc, 0x4a, 0xb0, 0xf0, 0x1c, 0x4a, 0xbf, 0xce, 0xc0, 0x70, 0xec, 0xcc, 0x44, 0xcf, 0xae, + 0x0d, 0x30, 0x6e, 0x20, 0x54, 0xde, 0x6a, 0xdb, 0x0e, 0xb9, 0x7d, 0x45, 0x04, 0xb9, 0x3a, 0x5d, + 0xe9, 0x84, 0x5c, 0x74, 0xbc, 0x63, 0x38, 0x26, 0xb2, 0x95, 0xe8, 0xb0, 0x59, 0x67, 0xb2, 0x06, + 0x34, 0xd6, 0xe5, 0x73, 0x9d, 0xbe, 0x20, 0xb0, 0xaf, 0xb9, 0x67, 0xa7, 0x93, 0xc9, 0x9c, 0x12, + 0x66, 0x32, 0x65, 0xaa, 0x1d, 0x13, 0x54, 0xe0, 0x53, 0x21, 0xc0, 0x6d, 0x7a, 0xb3, 0x03, 0x01, + 0x5a, 0xbe, 0x65, 0x1d, 0xb6, 0xe2, 0x97, 0xce, 0x3a, 0x7d, 0x4e, 0x60, 0x7f, 0xcb, 0x44, 0x42, + 0xdb, 0xc0, 0x1a, 0x64, 0xe0, 0xe9, 0xb6, 0x6c, 0x90, 0xe0, 0x0d, 0x41, 0xf0, 0x0a, 0xbd, 0xb4, + 0xa9, 0x04, 0xe9, 0x2f, 0x04, 0x76, 0x47, 0x86, 0x01, 0xaa, 0xae, 0x85, 0x2e, 0x3a, 0xa7, 0x28, + 0x6c, 0xdd, 0xfb, 0x91, 0xc9, 0xc7, 0x82, 0xc9, 0x47, 0xf4, 0x46, 0xe7, 0x4c, 0x2a, 0xd2, 0x75, + 0x24, 0x4e, 0xab, 0x04, 0x86, 0x63, 0x9b, 0xcf, 0xb4, 0xb4, 0x4c, 0x1b, 0x3d, 0xd2, 0xd2, 0x32, + 0x75, 0x70, 0xc8, 0xdd, 0x12, 0x4c, 0xaf, 0xd3, 0x6b, 0x9d, 0x33, 0xd5, 0x8d, 0x85, 0x08, 0xcb, + 0xd7, 0x04, 0x0e, 0xc4, 0xb7, 0xd8, 0xb4, 0x5d, 0xb8, 0xc1, 0xbd, 0x9c, 0x6e, 0xdf, 0x10, 0x89, + 0xde, 0x16, 0x44, 0x3f, 0xa4, 0xda, 0xa6, 0x10, 0x8d, 0xd2, 0x79, 0x90, 0x81, 0xfd, 0x2d, 0xad, + 0x6b, 0x5a, 0xde, 0x25, 0x35, 0xe0, 0x69, 0x79, 0x97, 0xd8, 0x1b, 0xe7, 0x1e, 0xca, 0xd2, 0xfa, + 0x05, 0xa1, 0x9f, 0x6f, 0x72, 0x69, 0x49, 0x69, 0xea, 0xeb, 0xac, 0x1a, 0x00, 0xca, 0x97, 0x91, + 0xf2, 0xdf, 0x04, 0xf6, 0x44, 0x1b, 0x58, 0xca, 0xd6, 0xc3, 0x28, 0xd4, 0x72, 0x2b, 0xa7, 0xd6, + 0x6f, 0x80, 0xfc, 0x3f, 0x13, 0xf4, 0x6b, 0xd4, 0xed, 0x0e, 0xfb, 0x48, 0x07, 0x1f, 0xa1, 0xed, + 0xdd, 0x78, 0xfa, 0x2b, 0x81, 0xc1, 0x98, 0x0e, 0x97, 0xa6, 0xb4, 0x00, 0xc9, 0xcd, 0xb6, 0xf2, + 0x66, 0x9b, 0x56, 0x28, 0xc1, 0x55, 0x21, 0xc1, 0xfb, 0xf4, 0x62, 0x07, 0x12, 0x44, 0xfa, 0xf0, + 0x19, 0xed, 0xe9, 0xab, 0x2c, 0x79, 0xf6, 0x2a, 0x4b, 0xfe, 0x78, 0x95, 0x25, 0xdf, 0xac, 0x66, + 0x7b, 0x9e, 0xad, 0x66, 0x7b, 0x7e, 0x5b, 0xcd, 0xf6, 0xdc, 0x9e, 0x2e, 0x99, 0xee, 0x7c, 0xb5, + 0xa0, 0x1a, 0xf6, 0x12, 0xc3, 0x7f, 0xe8, 0xc9, 0x3f, 0x27, 0x9d, 0xe2, 0x02, 0x5b, 0x66, 0xc1, + 0x3f, 0xee, 0x4e, 0x9d, 0x39, 0xe9, 0x23, 0x71, 0xef, 0x97, 0xb9, 0x53, 0xd8, 0x2e, 0x7e, 0x7f, + 0x3d, 0xfd, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x22, 0x97, 0x6e, 0x5f, 0x1c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1550,17 +1822,22 @@ type QueryClient interface { ChannelConsensusState(ctx context.Context, in *QueryChannelConsensusStateRequest, opts ...grpc.CallOption) (*QueryChannelConsensusStateResponse, error) // PacketCommitment queries a stored packet commitment hash. PacketCommitment(ctx context.Context, in *QueryPacketCommitmentRequest, opts ...grpc.CallOption) (*QueryPacketCommitmentResponse, error) - // PacketCommitments returns the all the packet commitments hashes associated + // PacketCommitments returns all the packet commitments hashes associated // with a channel. PacketCommitments(ctx context.Context, in *QueryPacketCommitmentsRequest, opts ...grpc.CallOption) (*QueryPacketCommitmentsResponse, error) + // PacketReceipt queries if a given packet sequence has been received on the queried chain + PacketReceipt(ctx context.Context, in *QueryPacketReceiptRequest, opts ...grpc.CallOption) (*QueryPacketReceiptResponse, error) // PacketAcknowledgement queries a stored packet acknowledgement hash. PacketAcknowledgement(ctx context.Context, in *QueryPacketAcknowledgementRequest, opts ...grpc.CallOption) (*QueryPacketAcknowledgementResponse, error) - // UnreceivedPackets returns all the unrelayed IBC packets associated with a + // PacketAcknowledgements returns all the packet acknowledgements associated + // with a channel. + PacketAcknowledgements(ctx context.Context, in *QueryPacketAcknowledgementsRequest, opts ...grpc.CallOption) (*QueryPacketAcknowledgementsResponse, error) + // UnreceivedPackets returns all the unreceived IBC packets associated with a // channel and sequences. UnreceivedPackets(ctx context.Context, in *QueryUnreceivedPacketsRequest, opts ...grpc.CallOption) (*QueryUnreceivedPacketsResponse, error) - // UnrelayedAcks returns all the unrelayed IBC acknowledgements associated with a + // UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a // channel and sequences. - UnrelayedAcks(ctx context.Context, in *QueryUnrelayedAcksRequest, opts ...grpc.CallOption) (*QueryUnrelayedAcksResponse, error) + UnreceivedAcks(ctx context.Context, in *QueryUnreceivedAcksRequest, opts ...grpc.CallOption) (*QueryUnreceivedAcksResponse, error) // NextSequenceReceive returns the next receive sequence for a given channel. NextSequenceReceive(ctx context.Context, in *QueryNextSequenceReceiveRequest, opts ...grpc.CallOption) (*QueryNextSequenceReceiveResponse, error) } @@ -1636,6 +1913,15 @@ func (c *queryClient) PacketCommitments(ctx context.Context, in *QueryPacketComm return out, nil } +func (c *queryClient) PacketReceipt(ctx context.Context, in *QueryPacketReceiptRequest, opts ...grpc.CallOption) (*QueryPacketReceiptResponse, error) { + out := new(QueryPacketReceiptResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Query/PacketReceipt", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) PacketAcknowledgement(ctx context.Context, in *QueryPacketAcknowledgementRequest, opts ...grpc.CallOption) (*QueryPacketAcknowledgementResponse, error) { out := new(QueryPacketAcknowledgementResponse) err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Query/PacketAcknowledgement", in, out, opts...) @@ -1645,6 +1931,15 @@ func (c *queryClient) PacketAcknowledgement(ctx context.Context, in *QueryPacket return out, nil } +func (c *queryClient) PacketAcknowledgements(ctx context.Context, in *QueryPacketAcknowledgementsRequest, opts ...grpc.CallOption) (*QueryPacketAcknowledgementsResponse, error) { + out := new(QueryPacketAcknowledgementsResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Query/PacketAcknowledgements", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) UnreceivedPackets(ctx context.Context, in *QueryUnreceivedPacketsRequest, opts ...grpc.CallOption) (*QueryUnreceivedPacketsResponse, error) { out := new(QueryUnreceivedPacketsResponse) err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Query/UnreceivedPackets", in, out, opts...) @@ -1654,9 +1949,9 @@ func (c *queryClient) UnreceivedPackets(ctx context.Context, in *QueryUnreceived return out, nil } -func (c *queryClient) UnrelayedAcks(ctx context.Context, in *QueryUnrelayedAcksRequest, opts ...grpc.CallOption) (*QueryUnrelayedAcksResponse, error) { - out := new(QueryUnrelayedAcksResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Query/UnrelayedAcks", in, out, opts...) +func (c *queryClient) UnreceivedAcks(ctx context.Context, in *QueryUnreceivedAcksRequest, opts ...grpc.CallOption) (*QueryUnreceivedAcksResponse, error) { + out := new(QueryUnreceivedAcksResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Query/UnreceivedAcks", in, out, opts...) if err != nil { return nil, err } @@ -1689,17 +1984,22 @@ type QueryServer interface { ChannelConsensusState(context.Context, *QueryChannelConsensusStateRequest) (*QueryChannelConsensusStateResponse, error) // PacketCommitment queries a stored packet commitment hash. PacketCommitment(context.Context, *QueryPacketCommitmentRequest) (*QueryPacketCommitmentResponse, error) - // PacketCommitments returns the all the packet commitments hashes associated + // PacketCommitments returns all the packet commitments hashes associated // with a channel. PacketCommitments(context.Context, *QueryPacketCommitmentsRequest) (*QueryPacketCommitmentsResponse, error) + // PacketReceipt queries if a given packet sequence has been received on the queried chain + PacketReceipt(context.Context, *QueryPacketReceiptRequest) (*QueryPacketReceiptResponse, error) // PacketAcknowledgement queries a stored packet acknowledgement hash. PacketAcknowledgement(context.Context, *QueryPacketAcknowledgementRequest) (*QueryPacketAcknowledgementResponse, error) - // UnreceivedPackets returns all the unrelayed IBC packets associated with a + // PacketAcknowledgements returns all the packet acknowledgements associated + // with a channel. + PacketAcknowledgements(context.Context, *QueryPacketAcknowledgementsRequest) (*QueryPacketAcknowledgementsResponse, error) + // UnreceivedPackets returns all the unreceived IBC packets associated with a // channel and sequences. UnreceivedPackets(context.Context, *QueryUnreceivedPacketsRequest) (*QueryUnreceivedPacketsResponse, error) - // UnrelayedAcks returns all the unrelayed IBC acknowledgements associated with a + // UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a // channel and sequences. - UnrelayedAcks(context.Context, *QueryUnrelayedAcksRequest) (*QueryUnrelayedAcksResponse, error) + UnreceivedAcks(context.Context, *QueryUnreceivedAcksRequest) (*QueryUnreceivedAcksResponse, error) // NextSequenceReceive returns the next receive sequence for a given channel. NextSequenceReceive(context.Context, *QueryNextSequenceReceiveRequest) (*QueryNextSequenceReceiveResponse, error) } @@ -1729,14 +2029,20 @@ func (*UnimplementedQueryServer) PacketCommitment(ctx context.Context, req *Quer func (*UnimplementedQueryServer) PacketCommitments(ctx context.Context, req *QueryPacketCommitmentsRequest) (*QueryPacketCommitmentsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PacketCommitments not implemented") } +func (*UnimplementedQueryServer) PacketReceipt(ctx context.Context, req *QueryPacketReceiptRequest) (*QueryPacketReceiptResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PacketReceipt not implemented") +} func (*UnimplementedQueryServer) PacketAcknowledgement(ctx context.Context, req *QueryPacketAcknowledgementRequest) (*QueryPacketAcknowledgementResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PacketAcknowledgement not implemented") } +func (*UnimplementedQueryServer) PacketAcknowledgements(ctx context.Context, req *QueryPacketAcknowledgementsRequest) (*QueryPacketAcknowledgementsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PacketAcknowledgements not implemented") +} func (*UnimplementedQueryServer) UnreceivedPackets(ctx context.Context, req *QueryUnreceivedPacketsRequest) (*QueryUnreceivedPacketsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UnreceivedPackets not implemented") } -func (*UnimplementedQueryServer) UnrelayedAcks(ctx context.Context, req *QueryUnrelayedAcksRequest) (*QueryUnrelayedAcksResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UnrelayedAcks not implemented") +func (*UnimplementedQueryServer) UnreceivedAcks(ctx context.Context, req *QueryUnreceivedAcksRequest) (*QueryUnreceivedAcksResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UnreceivedAcks not implemented") } func (*UnimplementedQueryServer) NextSequenceReceive(ctx context.Context, req *QueryNextSequenceReceiveRequest) (*QueryNextSequenceReceiveResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method NextSequenceReceive not implemented") @@ -1872,6 +2178,24 @@ func _Query_PacketCommitments_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Query_PacketReceipt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPacketReceiptRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).PacketReceipt(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Query/PacketReceipt", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PacketReceipt(ctx, req.(*QueryPacketReceiptRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_PacketAcknowledgement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryPacketAcknowledgementRequest) if err := dec(in); err != nil { @@ -1890,6 +2214,24 @@ func _Query_PacketAcknowledgement_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _Query_PacketAcknowledgements_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPacketAcknowledgementsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).PacketAcknowledgements(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Query/PacketAcknowledgements", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PacketAcknowledgements(ctx, req.(*QueryPacketAcknowledgementsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_UnreceivedPackets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryUnreceivedPacketsRequest) if err := dec(in); err != nil { @@ -1908,20 +2250,20 @@ func _Query_UnreceivedPackets_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } -func _Query_UnrelayedAcks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryUnrelayedAcksRequest) +func _Query_UnreceivedAcks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryUnreceivedAcksRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).UnrelayedAcks(ctx, in) + return srv.(QueryServer).UnreceivedAcks(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/ibc.core.channel.v1.Query/UnrelayedAcks", + FullMethod: "/ibc.core.channel.v1.Query/UnreceivedAcks", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).UnrelayedAcks(ctx, req.(*QueryUnrelayedAcksRequest)) + return srv.(QueryServer).UnreceivedAcks(ctx, req.(*QueryUnreceivedAcksRequest)) } return interceptor(ctx, in, info, handler) } @@ -1976,17 +2318,25 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "PacketCommitments", Handler: _Query_PacketCommitments_Handler, }, + { + MethodName: "PacketReceipt", + Handler: _Query_PacketReceipt_Handler, + }, { MethodName: "PacketAcknowledgement", Handler: _Query_PacketAcknowledgement_Handler, }, + { + MethodName: "PacketAcknowledgements", + Handler: _Query_PacketAcknowledgements_Handler, + }, { MethodName: "UnreceivedPackets", Handler: _Query_UnreceivedPackets_Handler, }, { - MethodName: "UnrelayedAcks", - Handler: _Query_UnrelayedAcks_Handler, + MethodName: "UnreceivedAcks", + Handler: _Query_UnreceivedAcks_Handler, }, { MethodName: "NextSequenceReceive", @@ -2673,7 +3023,7 @@ func (m *QueryPacketCommitmentsResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryPacketAcknowledgementRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryPacketReceiptRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2683,12 +3033,12 @@ func (m *QueryPacketAcknowledgementRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryPacketAcknowledgementRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPacketReceiptRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPacketAcknowledgementRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPacketReceiptRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2715,7 +3065,7 @@ func (m *QueryPacketAcknowledgementRequest) MarshalToSizedBuffer(dAtA []byte) (i return len(dAtA) - i, nil } -func (m *QueryPacketAcknowledgementResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryPacketReceiptResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2725,12 +3075,12 @@ func (m *QueryPacketAcknowledgementResponse) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryPacketAcknowledgementResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPacketReceiptResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPacketAcknowledgementResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPacketReceiptResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2744,20 +3094,220 @@ func (m *QueryPacketAcknowledgementResponse) MarshalToSizedBuffer(dAtA []byte) ( i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x22 if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) i = encodeVarintQuery(dAtA, i, uint64(len(m.Proof))) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a } - if len(m.Acknowledgement) > 0 { - i -= len(m.Acknowledgement) - copy(dAtA[i:], m.Acknowledgement) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Acknowledgement))) + if m.Received { i-- - dAtA[i] = 0xa + if m.Received { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + return len(dAtA) - i, nil +} + +func (m *QueryPacketAcknowledgementRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryPacketAcknowledgementRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPacketAcknowledgementRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Sequence != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Sequence)) + i-- + dAtA[i] = 0x18 + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryPacketAcknowledgementResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryPacketAcknowledgementResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPacketAcknowledgementResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Proof) > 0 { + i -= len(m.Proof) + copy(dAtA[i:], m.Proof) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Proof))) + i-- + dAtA[i] = 0x12 + } + if len(m.Acknowledgement) > 0 { + i -= len(m.Acknowledgement) + copy(dAtA[i:], m.Acknowledgement) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Acknowledgement))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryPacketAcknowledgementsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryPacketAcknowledgementsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPacketAcknowledgementsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryPacketAcknowledgementsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryPacketAcknowledgementsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPacketAcknowledgementsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Height.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Acknowledgements) > 0 { + for iNdEx := len(m.Acknowledgements) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Acknowledgements[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } return len(dAtA) - i, nil } @@ -2783,20 +3333,20 @@ func (m *QueryUnreceivedPacketsRequest) MarshalToSizedBuffer(dAtA []byte) (int, var l int _ = l if len(m.PacketCommitmentSequences) > 0 { - dAtA19 := make([]byte, len(m.PacketCommitmentSequences)*10) - var j18 int + dAtA23 := make([]byte, len(m.PacketCommitmentSequences)*10) + var j22 int for _, num := range m.PacketCommitmentSequences { for num >= 1<<7 { - dAtA19[j18] = uint8(uint64(num)&0x7f | 0x80) + dAtA23[j22] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j18++ + j22++ } - dAtA19[j18] = uint8(num) - j18++ + dAtA23[j22] = uint8(num) + j22++ } - i -= j18 - copy(dAtA[i:], dAtA19[:j18]) - i = encodeVarintQuery(dAtA, i, uint64(j18)) + i -= j22 + copy(dAtA[i:], dAtA23[:j22]) + i = encodeVarintQuery(dAtA, i, uint64(j22)) i-- dAtA[i] = 0x1a } @@ -2848,27 +3398,27 @@ func (m *QueryUnreceivedPacketsResponse) MarshalToSizedBuffer(dAtA []byte) (int, i-- dAtA[i] = 0x12 if len(m.Sequences) > 0 { - dAtA22 := make([]byte, len(m.Sequences)*10) - var j21 int + dAtA26 := make([]byte, len(m.Sequences)*10) + var j25 int for _, num := range m.Sequences { for num >= 1<<7 { - dAtA22[j21] = uint8(uint64(num)&0x7f | 0x80) + dAtA26[j25] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j21++ + j25++ } - dAtA22[j21] = uint8(num) - j21++ + dAtA26[j25] = uint8(num) + j25++ } - i -= j21 - copy(dAtA[i:], dAtA22[:j21]) - i = encodeVarintQuery(dAtA, i, uint64(j21)) + i -= j25 + copy(dAtA[i:], dAtA26[:j25]) + i = encodeVarintQuery(dAtA, i, uint64(j25)) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryUnrelayedAcksRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryUnreceivedAcksRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2878,31 +3428,31 @@ func (m *QueryUnrelayedAcksRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryUnrelayedAcksRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryUnreceivedAcksRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryUnrelayedAcksRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryUnreceivedAcksRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.PacketCommitmentSequences) > 0 { - dAtA24 := make([]byte, len(m.PacketCommitmentSequences)*10) - var j23 int - for _, num := range m.PacketCommitmentSequences { + if len(m.PacketAckSequences) > 0 { + dAtA28 := make([]byte, len(m.PacketAckSequences)*10) + var j27 int + for _, num := range m.PacketAckSequences { for num >= 1<<7 { - dAtA24[j23] = uint8(uint64(num)&0x7f | 0x80) + dAtA28[j27] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j23++ + j27++ } - dAtA24[j23] = uint8(num) - j23++ + dAtA28[j27] = uint8(num) + j27++ } - i -= j23 - copy(dAtA[i:], dAtA24[:j23]) - i = encodeVarintQuery(dAtA, i, uint64(j23)) + i -= j27 + copy(dAtA[i:], dAtA28[:j27]) + i = encodeVarintQuery(dAtA, i, uint64(j27)) i-- dAtA[i] = 0x1a } @@ -2923,7 +3473,7 @@ func (m *QueryUnrelayedAcksRequest) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } -func (m *QueryUnrelayedAcksResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryUnreceivedAcksResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2933,12 +3483,12 @@ func (m *QueryUnrelayedAcksResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryUnrelayedAcksResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryUnreceivedAcksResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryUnrelayedAcksResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryUnreceivedAcksResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2954,20 +3504,20 @@ func (m *QueryUnrelayedAcksResponse) MarshalToSizedBuffer(dAtA []byte) (int, err i-- dAtA[i] = 0x12 if len(m.Sequences) > 0 { - dAtA27 := make([]byte, len(m.Sequences)*10) - var j26 int + dAtA31 := make([]byte, len(m.Sequences)*10) + var j30 int for _, num := range m.Sequences { for num >= 1<<7 { - dAtA27[j26] = uint8(uint64(num)&0x7f | 0x80) + dAtA31[j30] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j26++ + j30++ } - dAtA27[j26] = uint8(num) - j26++ + dAtA31[j30] = uint8(num) + j30++ } - i -= j26 - copy(dAtA[i:], dAtA27[:j26]) - i = encodeVarintQuery(dAtA, i, uint64(j26)) + i -= j30 + copy(dAtA[i:], dAtA31[:j30]) + i = encodeVarintQuery(dAtA, i, uint64(j30)) i-- dAtA[i] = 0xa } @@ -3338,6 +3888,44 @@ func (m *QueryPacketCommitmentsResponse) Size() (n int) { return n } +func (m *QueryPacketReceiptRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Sequence != 0 { + n += 1 + sovQuery(uint64(m.Sequence)) + } + return n +} + +func (m *QueryPacketReceiptResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Received { + n += 2 + } + l = len(m.Proof) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + func (m *QueryPacketAcknowledgementRequest) Size() (n int) { if m == nil { return 0 @@ -3377,7 +3965,7 @@ func (m *QueryPacketAcknowledgementResponse) Size() (n int) { return n } -func (m *QueryUnreceivedPacketsRequest) Size() (n int) { +func (m *QueryPacketAcknowledgementsRequest) Size() (n int) { if m == nil { return 0 } @@ -3391,35 +3979,35 @@ func (m *QueryUnreceivedPacketsRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - if len(m.PacketCommitmentSequences) > 0 { - l = 0 - for _, e := range m.PacketCommitmentSequences { - l += sovQuery(uint64(e)) - } - n += 1 + sovQuery(uint64(l)) + l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } return n } -func (m *QueryUnreceivedPacketsResponse) Size() (n int) { +func (m *QueryPacketAcknowledgementsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Sequences) > 0 { - l = 0 - for _, e := range m.Sequences { - l += sovQuery(uint64(e)) + if len(m.Acknowledgements) > 0 { + for _, e := range m.Acknowledgements { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) } - n += 1 + sovQuery(uint64(l)) + l + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } l = m.Height.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryUnrelayedAcksRequest) Size() (n int) { +func (m *QueryUnreceivedPacketsRequest) Size() (n int) { if m == nil { return 0 } @@ -3443,7 +4031,7 @@ func (m *QueryUnrelayedAcksRequest) Size() (n int) { return n } -func (m *QueryUnrelayedAcksResponse) Size() (n int) { +func (m *QueryUnreceivedPacketsResponse) Size() (n int) { if m == nil { return 0 } @@ -3461,7 +4049,7 @@ func (m *QueryUnrelayedAcksResponse) Size() (n int) { return n } -func (m *QueryNextSequenceReceiveRequest) Size() (n int) { +func (m *QueryUnreceivedAcksRequest) Size() (n int) { if m == nil { return 0 } @@ -3475,16 +4063,58 @@ func (m *QueryNextSequenceReceiveRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } + if len(m.PacketAckSequences) > 0 { + l = 0 + for _, e := range m.PacketAckSequences { + l += sovQuery(uint64(e)) + } + n += 1 + sovQuery(uint64(l)) + l + } return n } -func (m *QueryNextSequenceReceiveResponse) Size() (n int) { +func (m *QueryUnreceivedAcksResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.NextSequenceReceive != 0 { + if len(m.Sequences) > 0 { + l = 0 + for _, e := range m.Sequences { + l += sovQuery(uint64(e)) + } + n += 1 + sovQuery(uint64(l)) + l + } + l = m.Height.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryNextSequenceReceiveRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryNextSequenceReceiveResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NextSequenceReceive != 0 { n += 1 + sovQuery(uint64(m.NextSequenceReceive)) } l = len(m.Proof) @@ -3836,9 +4466,559 @@ func (m *QueryChannelsRequest) Unmarshal(dAtA []byte) error { if m.Pagination == nil { m.Pagination = &query.PageRequest{} } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryChannelsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryChannelsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryChannelsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Channels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Channels = append(m.Channels, &IdentifiedChannel{}) + if err := m.Channels[len(m.Channels)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Height.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryConnectionChannelsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryConnectionChannelsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryConnectionChannelsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Connection", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Connection = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryConnectionChannelsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryConnectionChannelsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryConnectionChannelsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Channels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Channels = append(m.Channels, &IdentifiedChannel{}) + if err := m.Channels[len(m.Channels)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Height.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryChannelClientStateRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryChannelClientStateRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryChannelClientStateRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF } + m.ChannelId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -3864,7 +5044,7 @@ func (m *QueryChannelsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryChannelsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryChannelClientStateResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3887,15 +5067,15 @@ func (m *QueryChannelsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryChannelsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryChannelClientStateResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryChannelsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryChannelClientStateResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Channels", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field IdentifiedClientState", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3922,16 +5102,18 @@ func (m *QueryChannelsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Channels = append(m.Channels, &IdentifiedChannel{}) - if err := m.Channels[len(m.Channels)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.IdentifiedClientState == nil { + m.IdentifiedClientState = &types.IdentifiedClientState{} + } + if err := m.IdentifiedClientState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) } - var msglen int + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -3941,31 +5123,29 @@ func (m *QueryChannelsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + if byteLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) + if m.Proof == nil { + m.Proof = []byte{} } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3992,7 +5172,7 @@ func (m *QueryChannelsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Height.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4020,7 +5200,7 @@ func (m *QueryChannelsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryConnectionChannelsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryChannelConsensusStateRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4043,15 +5223,15 @@ func (m *QueryConnectionChannelsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryConnectionChannelsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryChannelConsensusStateRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryConnectionChannelsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryChannelConsensusStateRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Connection", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -4079,13 +5259,13 @@ func (m *QueryConnectionChannelsRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Connection = string(dAtA[iNdEx:postIndex]) + m.PortId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4095,28 +5275,62 @@ func (m *QueryConnectionChannelsRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field VersionNumber", wireType) } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.VersionNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.VersionNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field VersionHeight", wireType) + } + m.VersionHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.VersionHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -4141,7 +5355,7 @@ func (m *QueryConnectionChannelsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryConnectionChannelsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryChannelConsensusStateResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4164,15 +5378,15 @@ func (m *QueryConnectionChannelsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryConnectionChannelsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryChannelConsensusStateResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryConnectionChannelsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryChannelConsensusStateResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Channels", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConsensusState", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4199,16 +5413,18 @@ func (m *QueryConnectionChannelsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Channels = append(m.Channels, &IdentifiedChannel{}) - if err := m.Channels[len(m.Channels)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.ConsensusState == nil { + m.ConsensusState = &types1.Any{} + } + if err := m.ConsensusState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4218,31 +5434,61 @@ func (m *QueryConnectionChannelsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) + if m.Proof == nil { + m.Proof = []byte{} } iNdEx = postIndex - case 3: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4269,7 +5515,7 @@ func (m *QueryConnectionChannelsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Height.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4297,7 +5543,7 @@ func (m *QueryConnectionChannelsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryChannelClientStateRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPacketCommitmentRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4320,10 +5566,10 @@ func (m *QueryChannelClientStateRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryChannelClientStateRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketCommitmentRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryChannelClientStateRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketCommitmentRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4390,6 +5636,25 @@ func (m *QueryChannelClientStateRequest) Unmarshal(dAtA []byte) error { } m.ChannelId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequence", wireType) + } + m.Sequence = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Sequence |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -4414,7 +5679,7 @@ func (m *QueryChannelClientStateRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryChannelClientStateResponse) Unmarshal(dAtA []byte) error { +func (m *QueryPacketCommitmentResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4437,17 +5702,17 @@ func (m *QueryChannelClientStateResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryChannelClientStateResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketCommitmentResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryChannelClientStateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketCommitmentResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IdentifiedClientState", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Commitment", wireType) } - var msglen int + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4457,26 +5722,24 @@ func (m *QueryChannelClientStateResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + if byteLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.IdentifiedClientState == nil { - m.IdentifiedClientState = &types.IdentifiedClientState{} - } - if err := m.IdentifiedClientState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.Commitment = append(m.Commitment[:0], dAtA[iNdEx:postIndex]...) + if m.Commitment == nil { + m.Commitment = []byte{} } iNdEx = postIndex case 2: @@ -4570,7 +5833,7 @@ func (m *QueryChannelClientStateResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryChannelConsensusStateRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPacketCommitmentsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4593,10 +5856,10 @@ func (m *QueryChannelConsensusStateRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryChannelConsensusStateRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketCommitmentsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryChannelConsensusStateRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketCommitmentsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4664,10 +5927,10 @@ func (m *QueryChannelConsensusStateRequest) Unmarshal(dAtA []byte) error { m.ChannelId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field VersionNumber", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - m.VersionNumber = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4677,30 +5940,28 @@ func (m *QueryChannelConsensusStateRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.VersionNumber |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field VersionHeight", wireType) + if msglen < 0 { + return ErrInvalidLengthQuery } - m.VersionHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.VersionHeight |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -4725,7 +5986,7 @@ func (m *QueryChannelConsensusStateRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryChannelConsensusStateResponse) Unmarshal(dAtA []byte) error { +func (m *QueryPacketCommitmentsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4748,15 +6009,15 @@ func (m *QueryChannelConsensusStateResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryChannelConsensusStateResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketCommitmentsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryChannelConsensusStateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketCommitmentsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsensusState", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Commitments", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4783,18 +6044,16 @@ func (m *QueryChannelConsensusStateResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ConsensusState == nil { - m.ConsensusState = &types1.Any{} - } - if err := m.ConsensusState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Commitments = append(m.Commitments, &PacketState{}) + if err := m.Commitments[len(m.Commitments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4804,61 +6063,31 @@ func (m *QueryChannelConsensusStateResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.ClientId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} } - m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) - if m.Proof == nil { - m.Proof = []byte{} + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } iNdEx = postIndex - case 4: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4885,7 +6114,7 @@ func (m *QueryChannelConsensusStateResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Height.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4913,7 +6142,7 @@ func (m *QueryChannelConsensusStateResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPacketCommitmentRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPacketReceiptRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4936,10 +6165,10 @@ func (m *QueryPacketCommitmentRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPacketCommitmentRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketReceiptRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPacketCommitmentRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketReceiptRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5049,7 +6278,7 @@ func (m *QueryPacketCommitmentRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPacketCommitmentResponse) Unmarshal(dAtA []byte) error { +func (m *QueryPacketReceiptResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5072,17 +6301,17 @@ func (m *QueryPacketCommitmentResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPacketCommitmentResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketReceiptResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPacketCommitmentResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketReceiptResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Commitment", wireType) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Received", wireType) } - var byteLen int + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5092,27 +6321,13 @@ func (m *QueryPacketCommitmentResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Commitment = append(m.Commitment[:0], dAtA[iNdEx:postIndex]...) - if m.Commitment == nil { - m.Commitment = []byte{} - } - iNdEx = postIndex - case 2: + m.Received = bool(v != 0) + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) } @@ -5146,7 +6361,7 @@ func (m *QueryPacketCommitmentResponse) Unmarshal(dAtA []byte) error { m.Proof = []byte{} } iNdEx = postIndex - case 3: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -5203,7 +6418,7 @@ func (m *QueryPacketCommitmentResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPacketCommitmentsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPacketAcknowledgementRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5226,10 +6441,10 @@ func (m *QueryPacketCommitmentsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPacketCommitmentsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketAcknowledgementRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPacketCommitmentsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketAcknowledgementRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5297,10 +6512,10 @@ func (m *QueryPacketCommitmentsRequest) Unmarshal(dAtA []byte) error { m.ChannelId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequence", wireType) } - var msglen int + m.Sequence = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5310,28 +6525,11 @@ func (m *QueryPacketCommitmentsRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Sequence |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -5356,7 +6554,7 @@ func (m *QueryPacketCommitmentsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPacketCommitmentsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryPacketAcknowledgementResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5379,17 +6577,17 @@ func (m *QueryPacketCommitmentsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPacketCommitmentsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketAcknowledgementResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPacketCommitmentsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketAcknowledgementResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Commitments", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Acknowledgement", wireType) } - var msglen int + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5399,31 +6597,31 @@ func (m *QueryPacketCommitmentsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + if byteLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Commitments = append(m.Commitments, &PacketAckCommitment{}) - if err := m.Commitments[len(m.Commitments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.Acknowledgement = append(m.Acknowledgement[:0], dAtA[iNdEx:postIndex]...) + if m.Acknowledgement == nil { + m.Acknowledgement = []byte{} } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) } - var msglen int + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5433,31 +6631,29 @@ func (m *QueryPacketCommitmentsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + if byteLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) + if m.Proof == nil { + m.Proof = []byte{} } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5484,7 +6680,7 @@ func (m *QueryPacketCommitmentsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Height.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5512,7 +6708,7 @@ func (m *QueryPacketCommitmentsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPacketAcknowledgementRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPacketAcknowledgementsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5535,10 +6731,10 @@ func (m *QueryPacketAcknowledgementRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPacketAcknowledgementRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketAcknowledgementsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPacketAcknowledgementRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketAcknowledgementsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5606,10 +6802,10 @@ func (m *QueryPacketAcknowledgementRequest) Unmarshal(dAtA []byte) error { m.ChannelId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Sequence", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - m.Sequence = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5619,11 +6815,28 @@ func (m *QueryPacketAcknowledgementRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Sequence |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -5648,7 +6861,7 @@ func (m *QueryPacketAcknowledgementRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPacketAcknowledgementResponse) Unmarshal(dAtA []byte) error { +func (m *QueryPacketAcknowledgementsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5671,17 +6884,17 @@ func (m *QueryPacketAcknowledgementResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPacketAcknowledgementResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPacketAcknowledgementsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPacketAcknowledgementResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPacketAcknowledgementsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Acknowledgement", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Acknowledgements", wireType) } - var byteLen int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5691,31 +6904,31 @@ func (m *QueryPacketAcknowledgementResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + byteLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Acknowledgement = append(m.Acknowledgement[:0], dAtA[iNdEx:postIndex]...) - if m.Acknowledgement == nil { - m.Acknowledgement = []byte{} + m.Acknowledgements = append(m.Acknowledgements, &PacketState{}) + if err := m.Acknowledgements[len(m.Acknowledgements)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var byteLen int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5725,29 +6938,31 @@ func (m *QueryPacketAcknowledgementResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + byteLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) - if m.Proof == nil { - m.Proof = []byte{} + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5774,7 +6989,7 @@ func (m *QueryPacketAcknowledgementResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Height.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -6157,7 +7372,7 @@ func (m *QueryUnreceivedPacketsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryUnrelayedAcksRequest) Unmarshal(dAtA []byte) error { +func (m *QueryUnreceivedAcksRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6180,10 +7395,10 @@ func (m *QueryUnrelayedAcksRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryUnrelayedAcksRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryUnreceivedAcksRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryUnrelayedAcksRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryUnreceivedAcksRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6267,7 +7482,7 @@ func (m *QueryUnrelayedAcksRequest) Unmarshal(dAtA []byte) error { break } } - m.PacketCommitmentSequences = append(m.PacketCommitmentSequences, v) + m.PacketAckSequences = append(m.PacketAckSequences, v) } else if wireType == 2 { var packedLen int for shift := uint(0); ; shift += 7 { @@ -6302,8 +7517,8 @@ func (m *QueryUnrelayedAcksRequest) Unmarshal(dAtA []byte) error { } } elementCount = count - if elementCount != 0 && len(m.PacketCommitmentSequences) == 0 { - m.PacketCommitmentSequences = make([]uint64, 0, elementCount) + if elementCount != 0 && len(m.PacketAckSequences) == 0 { + m.PacketAckSequences = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -6321,10 +7536,10 @@ func (m *QueryUnrelayedAcksRequest) Unmarshal(dAtA []byte) error { break } } - m.PacketCommitmentSequences = append(m.PacketCommitmentSequences, v) + m.PacketAckSequences = append(m.PacketAckSequences, v) } } else { - return fmt.Errorf("proto: wrong wireType = %d for field PacketCommitmentSequences", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PacketAckSequences", wireType) } default: iNdEx = preIndex @@ -6350,7 +7565,7 @@ func (m *QueryUnrelayedAcksRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryUnrelayedAcksResponse) Unmarshal(dAtA []byte) error { +func (m *QueryUnreceivedAcksResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6373,10 +7588,10 @@ func (m *QueryUnrelayedAcksResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryUnrelayedAcksResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryUnreceivedAcksResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryUnrelayedAcksResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryUnreceivedAcksResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/x/ibc/core/04-channel/types/query.pb.gw.go b/x/ibc/core/04-channel/types/query.pb.gw.go index 8b74a6799cf2..a2ae71d96b7a 100644 --- a/x/ibc/core/04-channel/types/query.pb.gw.go +++ b/x/ibc/core/04-channel/types/query.pb.gw.go @@ -603,6 +603,104 @@ func local_request_Query_PacketCommitments_0(ctx context.Context, marshaler runt } +func request_Query_PacketReceipt_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPacketReceiptRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + val, ok = pathParams["sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "sequence") + } + + protoReq.Sequence, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "sequence", err) + } + + msg, err := client.PacketReceipt(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_PacketReceipt_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPacketReceiptRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + val, ok = pathParams["sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "sequence") + } + + protoReq.Sequence, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "sequence", err) + } + + msg, err := server.PacketReceipt(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_PacketAcknowledgement_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryPacketAcknowledgementRequest var metadata runtime.ServerMetadata @@ -701,6 +799,100 @@ func local_request_Query_PacketAcknowledgement_0(ctx context.Context, marshaler } +var ( + filter_Query_PacketAcknowledgements_0 = &utilities.DoubleArray{Encoding: map[string]int{"channel_id": 0, "port_id": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_Query_PacketAcknowledgements_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPacketAcknowledgementsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PacketAcknowledgements_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.PacketAcknowledgements(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_PacketAcknowledgements_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPacketAcknowledgementsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PacketAcknowledgements_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.PacketAcknowledgements(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_UnreceivedPackets_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryUnreceivedPacketsRequest var metadata runtime.ServerMetadata @@ -799,8 +991,8 @@ func local_request_Query_UnreceivedPackets_0(ctx context.Context, marshaler runt } -func request_Query_UnrelayedAcks_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryUnrelayedAcksRequest +func request_Query_UnreceivedAcks_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUnreceivedAcksRequest var metadata runtime.ServerMetadata var ( @@ -832,24 +1024,24 @@ func request_Query_UnrelayedAcks_0(ctx context.Context, marshaler runtime.Marsha return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) } - val, ok = pathParams["packet_commitment_sequences"] + val, ok = pathParams["packet_ack_sequences"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_commitment_sequences") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_ack_sequences") } - protoReq.PacketCommitmentSequences, err = runtime.Uint64Slice(val, ",") + protoReq.PacketAckSequences, err = runtime.Uint64Slice(val, ",") if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_commitment_sequences", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_ack_sequences", err) } - msg, err := client.UnrelayedAcks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.UnreceivedAcks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_UnrelayedAcks_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryUnrelayedAcksRequest +func local_request_Query_UnreceivedAcks_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUnreceivedAcksRequest var metadata runtime.ServerMetadata var ( @@ -881,18 +1073,18 @@ func local_request_Query_UnrelayedAcks_0(ctx context.Context, marshaler runtime. return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) } - val, ok = pathParams["packet_commitment_sequences"] + val, ok = pathParams["packet_ack_sequences"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_commitment_sequences") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_ack_sequences") } - protoReq.PacketCommitmentSequences, err = runtime.Uint64Slice(val, ",") + protoReq.PacketAckSequences, err = runtime.Uint64Slice(val, ",") if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_commitment_sequences", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_ack_sequences", err) } - msg, err := server.UnrelayedAcks(ctx, &protoReq) + msg, err := server.UnreceivedAcks(ctx, &protoReq) return msg, metadata, err } @@ -1119,6 +1311,26 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_PacketReceipt_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_PacketReceipt_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_PacketReceipt_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_PacketAcknowledgement_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1139,6 +1351,26 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_PacketAcknowledgements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_PacketAcknowledgements_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_PacketAcknowledgements_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_UnreceivedPackets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1159,7 +1391,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_UnrelayedAcks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_UnreceivedAcks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1168,14 +1400,14 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_UnrelayedAcks_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_UnreceivedAcks_0(rctx, inboundMarshaler, server, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_UnrelayedAcks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_UnreceivedAcks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1380,6 +1612,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_PacketReceipt_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_PacketReceipt_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_PacketReceipt_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_PacketAcknowledgement_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1400,6 +1652,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_PacketAcknowledgements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_PacketAcknowledgements_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_PacketAcknowledgements_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_UnreceivedPackets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1420,7 +1692,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_UnrelayedAcks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_UnreceivedAcks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1429,14 +1701,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_UnrelayedAcks_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_UnreceivedAcks_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_UnrelayedAcks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_UnreceivedAcks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1478,11 +1750,15 @@ var ( pattern_Query_PacketCommitments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"ibc", "channel", "v1beta1", "channels", "channel_id", "ports", "port_id", "packet_commitments"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_PacketReceipt_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8}, []string{"ibc", "channel", "v1beta1", "channels", "channel_id", "ports", "port_id", "packet_receipts", "sequence"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_PacketAcknowledgement_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8}, []string{"ibc", "channel", "v1beta1", "channels", "channel_id", "ports", "port_id", "packet_acks", "sequence"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_PacketAcknowledgements_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"ibc", "channel", "v1beta1", "channels", "channel_id", "ports", "port_id", "packet_acknowledgements"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_UnreceivedPackets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8, 2, 9}, []string{"ibc", "channel", "v1beta1", "channels", "channel_id", "ports", "port_id", "packet_commitments", "packet_commitment_sequences", "unreceived_packets"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Query_UnrelayedAcks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8, 2, 9}, []string{"ibc", "channel", "v1beta1", "channels", "channel_id", "ports", "port_id", "packet_commitments", "packet_commitment_sequences", "unrelayed_acks"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_UnreceivedAcks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8, 2, 9}, []string{"ibc", "channel", "v1beta1", "channels", "channel_id", "ports", "port_id", "packet_commitments", "packet_ack_sequences", "unreceived_acks"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Query_NextSequenceReceive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"ibc", "channel", "v1beta1", "channels", "channel_id", "ports", "port_id", "next_sequence"}, "", runtime.AssumeColonVerbOpt(true))) ) @@ -1502,11 +1778,15 @@ var ( forward_Query_PacketCommitments_0 = runtime.ForwardResponseMessage + forward_Query_PacketReceipt_0 = runtime.ForwardResponseMessage + forward_Query_PacketAcknowledgement_0 = runtime.ForwardResponseMessage + forward_Query_PacketAcknowledgements_0 = runtime.ForwardResponseMessage + forward_Query_UnreceivedPackets_0 = runtime.ForwardResponseMessage - forward_Query_UnrelayedAcks_0 = runtime.ForwardResponseMessage + forward_Query_UnreceivedAcks_0 = runtime.ForwardResponseMessage forward_Query_NextSequenceReceive_0 = runtime.ForwardResponseMessage ) diff --git a/x/ibc/core/24-host/keys.go b/x/ibc/core/24-host/keys.go index c2f344028ef8..0ab66467dc74 100644 --- a/x/ibc/core/24-host/keys.go +++ b/x/ibc/core/24-host/keys.go @@ -144,6 +144,11 @@ func PacketAcknowledgementPath(portID, channelID string, sequence uint64) string return fmt.Sprintf("%s/", KeyPacketAckPrefix) + channelPath(portID, channelID) + fmt.Sprintf("/acknowledgements/%d", sequence) } +// PacketAcknowledgementPrefixPath defines the prefix for commitments to packet data fields store path. +func PacketAcknowledgementPrefixPath(portID, channelID string) string { + return fmt.Sprintf("%s/", KeyPacketAckPrefix) + channelPath(portID, channelID) +} + // PacketReceiptPath defines the packet receipt store path func PacketReceiptPath(portID, channelID string, sequence uint64) string { return fmt.Sprintf("%s/", KeyPacketReceiptPrefix) + channelPath(portID, channelID) + fmt.Sprintf("/receipts/%d", sequence) diff --git a/x/ibc/core/genesis_test.go b/x/ibc/core/genesis_test.go index 482027fb8800..d4cf1ec3aab6 100644 --- a/x/ibc/core/genesis_test.go +++ b/x/ibc/core/genesis_test.go @@ -115,11 +115,14 @@ func (suite *IBCTestSuite) TestValidateGenesis() { ), ), }, - []channeltypes.PacketAckCommitment{ - channeltypes.NewPacketAckCommitment(port2, channel2, 1, []byte("ack")), + []channeltypes.PacketState{ + channeltypes.NewPacketState(port2, channel2, 1, []byte("ack")), }, - []channeltypes.PacketAckCommitment{ - channeltypes.NewPacketAckCommitment(port1, channel1, 1, []byte("commit_hash")), + []channeltypes.PacketState{ + channeltypes.NewPacketState(port2, channel2, 1, []byte("")), + }, + []channeltypes.PacketState{ + channeltypes.NewPacketState(port1, channel1, 1, []byte("commit_hash")), }, []channeltypes.PacketSequence{ channeltypes.NewPacketSequence(port1, channel1, 1), @@ -174,8 +177,8 @@ func (suite *IBCTestSuite) TestValidateGenesis() { ClientGenesis: clienttypes.DefaultGenesisState(), ConnectionGenesis: connectiontypes.DefaultGenesisState(), ChannelGenesis: channeltypes.GenesisState{ - Acknowledgements: []channeltypes.PacketAckCommitment{ - channeltypes.NewPacketAckCommitment("(portID)", channel1, 1, []byte("ack")), + Acknowledgements: []channeltypes.PacketState{ + channeltypes.NewPacketState("(portID)", channel1, 1, []byte("ack")), }, }, }, @@ -249,11 +252,14 @@ func (suite *IBCTestSuite) TestInitGenesis() { ), ), }, - []channeltypes.PacketAckCommitment{ - channeltypes.NewPacketAckCommitment(port2, channel2, 1, []byte("ack")), + []channeltypes.PacketState{ + channeltypes.NewPacketState(port2, channel2, 1, []byte("ack")), + }, + []channeltypes.PacketState{ + channeltypes.NewPacketState(port2, channel2, 1, []byte("")), }, - []channeltypes.PacketAckCommitment{ - channeltypes.NewPacketAckCommitment(port1, channel1, 1, []byte("commit_hash")), + []channeltypes.PacketState{ + channeltypes.NewPacketState(port1, channel1, 1, []byte("commit_hash")), }, []channeltypes.PacketSequence{ channeltypes.NewPacketSequence(port1, channel1, 1), diff --git a/x/ibc/core/keeper/grpc_query.go b/x/ibc/core/keeper/grpc_query.go index f15b116561e9..e7dbe2610931 100644 --- a/x/ibc/core/keeper/grpc_query.go +++ b/x/ibc/core/keeper/grpc_query.go @@ -88,19 +88,29 @@ func (q Keeper) PacketCommitments(c context.Context, req *channeltypes.QueryPack return q.ChannelKeeper.PacketCommitments(c, req) } +// PacketReceipt implements the IBC QueryServer interface +func (q Keeper) PacketReceipt(c context.Context, req *channeltypes.QueryPacketReceiptRequest) (*channeltypes.QueryPacketReceiptResponse, error) { + return q.ChannelKeeper.PacketReceipt(c, req) +} + // PacketAcknowledgement implements the IBC QueryServer interface func (q Keeper) PacketAcknowledgement(c context.Context, req *channeltypes.QueryPacketAcknowledgementRequest) (*channeltypes.QueryPacketAcknowledgementResponse, error) { return q.ChannelKeeper.PacketAcknowledgement(c, req) } +// PacketAcknowledgements implements the IBC QueryServer interface +func (q Keeper) PacketAcknowledgements(c context.Context, req *channeltypes.QueryPacketAcknowledgementsRequest) (*channeltypes.QueryPacketAcknowledgementsResponse, error) { + return q.ChannelKeeper.PacketAcknowledgements(c, req) +} + // UnreceivedPackets implements the IBC QueryServer interface func (q Keeper) UnreceivedPackets(c context.Context, req *channeltypes.QueryUnreceivedPacketsRequest) (*channeltypes.QueryUnreceivedPacketsResponse, error) { return q.ChannelKeeper.UnreceivedPackets(c, req) } -// UnrelayedAcks implements the IBC QueryServer interface -func (q Keeper) UnrelayedAcks(c context.Context, req *channeltypes.QueryUnrelayedAcksRequest) (*channeltypes.QueryUnrelayedAcksResponse, error) { - return q.ChannelKeeper.UnrelayedAcks(c, req) +// UnreceivedAcks implements the IBC QueryServer interface +func (q Keeper) UnreceivedAcks(c context.Context, req *channeltypes.QueryUnreceivedAcksRequest) (*channeltypes.QueryUnreceivedAcksResponse, error) { + return q.ChannelKeeper.UnreceivedAcks(c, req) } // NextSequenceReceive implements the IBC QueryServer interface diff --git a/x/ibc/light-clients/09-localhost/types/client_state_test.go b/x/ibc/light-clients/09-localhost/types/client_state_test.go index abe6f20b60be..6b5c0b41ca29 100644 --- a/x/ibc/light-clients/09-localhost/types/client_state_test.go +++ b/x/ibc/light-clients/09-localhost/types/client_state_test.go @@ -375,7 +375,7 @@ func (suite *LocalhostTestSuite) TestVerifyPacketAcknowledgement() { host.KeyPacketAcknowledgement(testPortID, testChannelID, testSequence), []byte("different"), ) }, - ack: []byte("acknowledgment"), + ack: []byte("acknowledgement"), expPass: false, }, { diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 60d666c6823e..8b54a0ed2989 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1216,605 +1216,606 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 9556 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x70, 0x1c, 0xc9, - 0x79, 0x18, 0x67, 0x77, 0x01, 0xec, 0x7e, 0x58, 0x00, 0x8b, 0x06, 0x48, 0x2e, 0xf7, 0x78, 0x00, - 0x6e, 0xee, 0xc5, 0xe3, 0xdd, 0x01, 0x77, 0xbc, 0x23, 0x8f, 0x5c, 0x4a, 0x77, 0xc6, 0x02, 0x4b, - 0x10, 0x24, 0x5e, 0x37, 0x00, 0x78, 0x7a, 0x39, 0x5b, 0x83, 0xd9, 0xc6, 0x62, 0x0e, 0xbb, 0x33, - 0x73, 0x33, 0xb3, 0x24, 0x71, 0x92, 0xaa, 0xce, 0x92, 0xa2, 0x48, 0x74, 0x1c, 0x49, 0x96, 0xcb, - 0x91, 0x4e, 0xa2, 0x22, 0x59, 0x4e, 0xe4, 0xc8, 0x4a, 0xfc, 0x90, 0xa2, 0xc4, 0x49, 0xaa, 0x22, - 0xa7, 0xe2, 0x58, 0x52, 0x2a, 0x2e, 0xa9, 0xe2, 0x4a, 0x1c, 0x57, 0x4c, 0x3b, 0x27, 0x95, 0x73, - 0x51, 0x94, 0x58, 0xa6, 0xe5, 0xc4, 0x29, 0xfd, 0x48, 0xaa, 0x5f, 0xf3, 0xda, 0xc7, 0x2c, 0x20, - 0x52, 0x27, 0xc7, 0xf9, 0x85, 0x9d, 0xee, 0xef, 0xfb, 0xfa, 0x7b, 0xf5, 0xf7, 0x7d, 0xdd, 0xd3, - 0x3d, 0x80, 0x4f, 0x9c, 0x87, 0xa9, 0x9a, 0x69, 0xd6, 0xea, 0x78, 0xc6, 0xb2, 0x4d, 0xd7, 0xdc, - 0x6a, 0x6e, 0xcf, 0x54, 0xb1, 0xa3, 0xd9, 0xba, 0xe5, 0x9a, 0xf6, 0x34, 0x6d, 0x43, 0x23, 0x0c, - 0x62, 0x5a, 0x40, 0xc8, 0xcb, 0x30, 0x7a, 0x41, 0xaf, 0xe3, 0x79, 0x0f, 0x70, 0x1d, 0xbb, 0xe8, - 0x2c, 0xa4, 0xb6, 0xf5, 0x3a, 0xce, 0x4b, 0x53, 0xc9, 0x13, 0x83, 0xa7, 0x1e, 0x98, 0x8e, 0x20, - 0x4d, 0x87, 0x31, 0xd6, 0x48, 0xb3, 0x42, 0x31, 0xe4, 0x6f, 0xa7, 0x60, 0xac, 0x4d, 0x2f, 0x42, - 0x90, 0x32, 0xd4, 0x06, 0xa1, 0x28, 0x9d, 0xc8, 0x28, 0xf4, 0x37, 0xca, 0xc3, 0x80, 0xa5, 0x6a, - 0xbb, 0x6a, 0x0d, 0xe7, 0x13, 0xb4, 0x59, 0x3c, 0xa2, 0x09, 0x80, 0x2a, 0xb6, 0xb0, 0x51, 0xc5, - 0x86, 0xb6, 0x97, 0x4f, 0x4e, 0x25, 0x4f, 0x64, 0x94, 0x40, 0x0b, 0x7a, 0x14, 0x46, 0xad, 0xe6, - 0x56, 0x5d, 0xd7, 0x2a, 0x01, 0x30, 0x98, 0x4a, 0x9e, 0xe8, 0x53, 0x72, 0xac, 0x63, 0xde, 0x07, - 0x7e, 0x18, 0x46, 0xae, 0x61, 0x75, 0x37, 0x08, 0x3a, 0x48, 0x41, 0x87, 0x49, 0x73, 0x00, 0x70, - 0x0e, 0xb2, 0x0d, 0xec, 0x38, 0x6a, 0x0d, 0x57, 0xdc, 0x3d, 0x0b, 0xe7, 0x53, 0x54, 0xfa, 0xa9, - 0x16, 0xe9, 0xa3, 0x92, 0x0f, 0x72, 0xac, 0x8d, 0x3d, 0x0b, 0xa3, 0x59, 0xc8, 0x60, 0xa3, 0xd9, - 0x60, 0x14, 0xfa, 0x3a, 0xe8, 0xaf, 0x6c, 0x34, 0x1b, 0x51, 0x2a, 0x69, 0x82, 0xc6, 0x49, 0x0c, - 0x38, 0xd8, 0xbe, 0xaa, 0x6b, 0x38, 0xdf, 0x4f, 0x09, 0x3c, 0xdc, 0x42, 0x60, 0x9d, 0xf5, 0x47, - 0x69, 0x08, 0x3c, 0x34, 0x07, 0x19, 0x7c, 0xdd, 0xc5, 0x86, 0xa3, 0x9b, 0x46, 0x7e, 0x80, 0x12, - 0x79, 0xb0, 0x8d, 0x15, 0x71, 0xbd, 0x1a, 0x25, 0xe1, 0xe3, 0xa1, 0x33, 0x30, 0x60, 0x5a, 0xae, - 0x6e, 0x1a, 0x4e, 0x3e, 0x3d, 0x25, 0x9d, 0x18, 0x3c, 0x75, 0xbc, 0xad, 0x23, 0xac, 0x32, 0x18, - 0x45, 0x00, 0xa3, 0x45, 0xc8, 0x39, 0x66, 0xd3, 0xd6, 0x70, 0x45, 0x33, 0xab, 0xb8, 0xa2, 0x1b, - 0xdb, 0x66, 0x3e, 0x43, 0x09, 0x4c, 0xb6, 0x0a, 0x42, 0x01, 0xe7, 0xcc, 0x2a, 0x5e, 0x34, 0xb6, - 0x4d, 0x65, 0xd8, 0x09, 0x3d, 0xa3, 0x23, 0xd0, 0xef, 0xec, 0x19, 0xae, 0x7a, 0x3d, 0x9f, 0xa5, - 0x1e, 0xc2, 0x9f, 0xe4, 0xdf, 0xe8, 0x87, 0x91, 0x5e, 0x5c, 0xec, 0x3c, 0xf4, 0x6d, 0x13, 0x29, - 0xf3, 0x89, 0xfd, 0xe8, 0x80, 0xe1, 0x84, 0x95, 0xd8, 0x7f, 0x40, 0x25, 0xce, 0xc2, 0xa0, 0x81, - 0x1d, 0x17, 0x57, 0x99, 0x47, 0x24, 0x7b, 0xf4, 0x29, 0x60, 0x48, 0xad, 0x2e, 0x95, 0x3a, 0x90, - 0x4b, 0xbd, 0x05, 0x46, 0x3c, 0x96, 0x2a, 0xb6, 0x6a, 0xd4, 0x84, 0x6f, 0xce, 0xc4, 0x71, 0x32, - 0x5d, 0x16, 0x78, 0x0a, 0x41, 0x53, 0x86, 0x71, 0xe8, 0x19, 0xcd, 0x03, 0x98, 0x06, 0x36, 0xb7, - 0x2b, 0x55, 0xac, 0xd5, 0xf3, 0xe9, 0x0e, 0x5a, 0x5a, 0x25, 0x20, 0x2d, 0x5a, 0x32, 0x59, 0xab, - 0x56, 0x47, 0xe7, 0x7c, 0x57, 0x1b, 0xe8, 0xe0, 0x29, 0xcb, 0x6c, 0x92, 0xb5, 0x78, 0xdb, 0x26, - 0x0c, 0xdb, 0x98, 0xf8, 0x3d, 0xae, 0x72, 0xc9, 0x32, 0x94, 0x89, 0xe9, 0x58, 0xc9, 0x14, 0x8e, - 0xc6, 0x04, 0x1b, 0xb2, 0x83, 0x8f, 0xe8, 0x7e, 0xf0, 0x1a, 0x2a, 0xd4, 0xad, 0x80, 0x46, 0xa1, - 0xac, 0x68, 0x5c, 0x51, 0x1b, 0xb8, 0xf0, 0x32, 0x0c, 0x87, 0xd5, 0x83, 0xc6, 0xa1, 0xcf, 0x71, - 0x55, 0xdb, 0xa5, 0x5e, 0xd8, 0xa7, 0xb0, 0x07, 0x94, 0x83, 0x24, 0x36, 0xaa, 0x34, 0xca, 0xf5, - 0x29, 0xe4, 0x27, 0xfa, 0x09, 0x5f, 0xe0, 0x24, 0x15, 0xf8, 0xa1, 0x56, 0x8b, 0x86, 0x28, 0x47, - 0xe5, 0x2e, 0x3c, 0x03, 0x43, 0x21, 0x01, 0x7a, 0x1d, 0x5a, 0x7e, 0x17, 0x1c, 0x6e, 0x4b, 0x1a, - 0xbd, 0x05, 0xc6, 0x9b, 0x86, 0x6e, 0xb8, 0xd8, 0xb6, 0x6c, 0x4c, 0x3c, 0x96, 0x0d, 0x95, 0xff, - 0x2f, 0x03, 0x1d, 0x7c, 0x6e, 0x33, 0x08, 0xcd, 0xa8, 0x28, 0x63, 0xcd, 0xd6, 0xc6, 0x93, 0x99, - 0xf4, 0xeb, 0x03, 0xb9, 0x57, 0x5e, 0x79, 0xe5, 0x95, 0x84, 0xfc, 0xb1, 0x7e, 0x18, 0x6f, 0x37, - 0x67, 0xda, 0x4e, 0xdf, 0x23, 0xd0, 0x6f, 0x34, 0x1b, 0x5b, 0xd8, 0xa6, 0x4a, 0xea, 0x53, 0xf8, - 0x13, 0x9a, 0x85, 0xbe, 0xba, 0xba, 0x85, 0xeb, 0xf9, 0xd4, 0x94, 0x74, 0x62, 0xf8, 0xd4, 0xa3, - 0x3d, 0xcd, 0xca, 0xe9, 0x25, 0x82, 0xa2, 0x30, 0x4c, 0xf4, 0x2c, 0xa4, 0x78, 0x88, 0x26, 0x14, - 0x4e, 0xf6, 0x46, 0x81, 0xcc, 0x25, 0x85, 0xe2, 0xa1, 0x7b, 0x20, 0x43, 0xfe, 0x32, 0xdf, 0xe8, - 0xa7, 0x3c, 0xa7, 0x49, 0x03, 0xf1, 0x0b, 0x54, 0x80, 0x34, 0x9d, 0x26, 0x55, 0x2c, 0x52, 0x9b, - 0xf7, 0x4c, 0x1c, 0xab, 0x8a, 0xb7, 0xd5, 0x66, 0xdd, 0xad, 0x5c, 0x55, 0xeb, 0x4d, 0x4c, 0x1d, - 0x3e, 0xa3, 0x64, 0x79, 0xe3, 0x15, 0xd2, 0x86, 0x26, 0x61, 0x90, 0xcd, 0x2a, 0xdd, 0xa8, 0xe2, - 0xeb, 0x34, 0x7a, 0xf6, 0x29, 0x6c, 0xa2, 0x2d, 0x92, 0x16, 0x32, 0xfc, 0x8b, 0x8e, 0x69, 0x08, - 0xd7, 0xa4, 0x43, 0x90, 0x06, 0x3a, 0xfc, 0x33, 0xd1, 0xc0, 0x7d, 0x6f, 0x7b, 0xf1, 0xa2, 0x3e, - 0x25, 0x7f, 0x39, 0x01, 0x29, 0x1a, 0x2f, 0x46, 0x60, 0x70, 0xe3, 0xad, 0x6b, 0xe5, 0xca, 0xfc, - 0xea, 0x66, 0x69, 0xa9, 0x9c, 0x93, 0xd0, 0x30, 0x00, 0x6d, 0xb8, 0xb0, 0xb4, 0x3a, 0xbb, 0x91, - 0x4b, 0x78, 0xcf, 0x8b, 0x2b, 0x1b, 0x67, 0x9e, 0xce, 0x25, 0x3d, 0x84, 0x4d, 0xd6, 0x90, 0x0a, - 0x02, 0x3c, 0x75, 0x2a, 0xd7, 0x87, 0x72, 0x90, 0x65, 0x04, 0x16, 0xdf, 0x52, 0x9e, 0x3f, 0xf3, - 0x74, 0xae, 0x3f, 0xdc, 0xf2, 0xd4, 0xa9, 0xdc, 0x00, 0x1a, 0x82, 0x0c, 0x6d, 0x29, 0xad, 0xae, - 0x2e, 0xe5, 0xd2, 0x1e, 0xcd, 0xf5, 0x0d, 0x65, 0x71, 0x65, 0x21, 0x97, 0xf1, 0x68, 0x2e, 0x28, - 0xab, 0x9b, 0x6b, 0x39, 0xf0, 0x28, 0x2c, 0x97, 0xd7, 0xd7, 0x67, 0x17, 0xca, 0xb9, 0x41, 0x0f, - 0xa2, 0xf4, 0xd6, 0x8d, 0xf2, 0x7a, 0x2e, 0x1b, 0x62, 0xeb, 0xa9, 0x53, 0xb9, 0x21, 0x6f, 0x88, - 0xf2, 0xca, 0xe6, 0x72, 0x6e, 0x18, 0x8d, 0xc2, 0x10, 0x1b, 0x42, 0x30, 0x31, 0x12, 0x69, 0x3a, - 0xf3, 0x74, 0x2e, 0xe7, 0x33, 0xc2, 0xa8, 0x8c, 0x86, 0x1a, 0xce, 0x3c, 0x9d, 0x43, 0xf2, 0x1c, - 0xf4, 0x51, 0xef, 0x42, 0x08, 0x86, 0x97, 0x66, 0x4b, 0xe5, 0xa5, 0xca, 0xea, 0xda, 0xc6, 0xe2, - 0xea, 0xca, 0xec, 0x52, 0x4e, 0xf2, 0xdb, 0x94, 0xf2, 0xf3, 0x9b, 0x8b, 0x4a, 0x79, 0x3e, 0x97, - 0x08, 0xb6, 0xad, 0x95, 0x67, 0x37, 0xca, 0xf3, 0xb9, 0xa4, 0xac, 0xc1, 0x78, 0xbb, 0x38, 0xd9, - 0x76, 0x66, 0x04, 0x4c, 0x9c, 0xe8, 0x60, 0x62, 0x4a, 0xab, 0xc5, 0xc4, 0xdf, 0x4a, 0xc0, 0x58, - 0x9b, 0x5c, 0xd1, 0x76, 0x90, 0xe7, 0xa0, 0x8f, 0xb9, 0x28, 0xcb, 0x9e, 0x8f, 0xb4, 0x4d, 0x3a, - 0xd4, 0x61, 0x5b, 0x32, 0x28, 0xc5, 0x0b, 0x56, 0x10, 0xc9, 0x0e, 0x15, 0x04, 0x21, 0xd1, 0x12, - 0xd3, 0x7f, 0xb2, 0x25, 0xa6, 0xb3, 0xb4, 0x77, 0xa6, 0x97, 0xb4, 0x47, 0xdb, 0xf6, 0x17, 0xdb, - 0xfb, 0xda, 0xc4, 0xf6, 0xf3, 0x30, 0xda, 0x42, 0xa8, 0xe7, 0x18, 0xfb, 0x5e, 0x09, 0xf2, 0x9d, - 0x94, 0x13, 0x13, 0xe9, 0x12, 0xa1, 0x48, 0x77, 0x3e, 0xaa, 0xc1, 0xfb, 0x3a, 0x1b, 0xa1, 0xc5, - 0xd6, 0x9f, 0x93, 0xe0, 0x48, 0xfb, 0x4a, 0xb1, 0x2d, 0x0f, 0xcf, 0x42, 0x7f, 0x03, 0xbb, 0x3b, - 0xa6, 0xa8, 0x96, 0x1e, 0x6a, 0x93, 0x83, 0x49, 0x77, 0xd4, 0xd8, 0x1c, 0x2b, 0x98, 0xc4, 0x93, - 0x9d, 0xca, 0x3d, 0xc6, 0x4d, 0x0b, 0xa7, 0x1f, 0x4c, 0xc0, 0xe1, 0xb6, 0xc4, 0xdb, 0x32, 0x7a, - 0x2f, 0x80, 0x6e, 0x58, 0x4d, 0x97, 0x55, 0x44, 0x2c, 0xc0, 0x66, 0x68, 0x0b, 0x0d, 0x5e, 0x24, - 0x78, 0x36, 0x5d, 0xaf, 0x3f, 0x49, 0xfb, 0x81, 0x35, 0x51, 0x80, 0xb3, 0x3e, 0xa3, 0x29, 0xca, - 0xe8, 0x44, 0x07, 0x49, 0x5b, 0x1c, 0xf3, 0x09, 0xc8, 0x69, 0x75, 0x1d, 0x1b, 0x6e, 0xc5, 0x71, - 0x6d, 0xac, 0x36, 0x74, 0xa3, 0x46, 0x33, 0x48, 0xba, 0xd8, 0xb7, 0xad, 0xd6, 0x1d, 0xac, 0x8c, - 0xb0, 0xee, 0x75, 0xd1, 0x4b, 0x30, 0xa8, 0x03, 0xd9, 0x01, 0x8c, 0xfe, 0x10, 0x06, 0xeb, 0xf6, - 0x30, 0xe4, 0x9f, 0xcd, 0xc0, 0x60, 0xa0, 0xae, 0x46, 0xf7, 0x41, 0xf6, 0x45, 0xf5, 0xaa, 0x5a, - 0x11, 0x6b, 0x25, 0xa6, 0x89, 0x41, 0xd2, 0xb6, 0xc6, 0xd7, 0x4b, 0x4f, 0xc0, 0x38, 0x05, 0x31, - 0x9b, 0x2e, 0xb6, 0x2b, 0x5a, 0x5d, 0x75, 0x1c, 0xaa, 0xb4, 0x34, 0x05, 0x45, 0xa4, 0x6f, 0x95, - 0x74, 0xcd, 0x89, 0x1e, 0x74, 0x1a, 0xc6, 0x28, 0x46, 0xa3, 0x59, 0x77, 0x75, 0xab, 0x8e, 0x2b, - 0x64, 0xf5, 0xe6, 0xd0, 0x4c, 0xe2, 0x71, 0x36, 0x4a, 0x20, 0x96, 0x39, 0x00, 0xe1, 0xc8, 0x41, - 0xf3, 0x70, 0x2f, 0x45, 0xab, 0x61, 0x03, 0xdb, 0xaa, 0x8b, 0x2b, 0xf8, 0xa5, 0xa6, 0x5a, 0x77, - 0x2a, 0xaa, 0x51, 0xad, 0xec, 0xa8, 0xce, 0x4e, 0x7e, 0x9c, 0x10, 0x28, 0x25, 0xf2, 0x92, 0x72, - 0x8c, 0x00, 0x2e, 0x70, 0xb8, 0x32, 0x05, 0x9b, 0x35, 0xaa, 0x17, 0x55, 0x67, 0x07, 0x15, 0xe1, - 0x08, 0xa5, 0xe2, 0xb8, 0xb6, 0x6e, 0xd4, 0x2a, 0xda, 0x0e, 0xd6, 0x76, 0x2b, 0x4d, 0x77, 0xfb, - 0x6c, 0xfe, 0x9e, 0xe0, 0xf8, 0x94, 0xc3, 0x75, 0x0a, 0x33, 0x47, 0x40, 0x36, 0xdd, 0xed, 0xb3, - 0x68, 0x1d, 0xb2, 0xc4, 0x18, 0x0d, 0xfd, 0x65, 0x5c, 0xd9, 0x36, 0x6d, 0x9a, 0x1a, 0x87, 0xdb, - 0x84, 0xa6, 0x80, 0x06, 0xa7, 0x57, 0x39, 0xc2, 0xb2, 0x59, 0xc5, 0xc5, 0xbe, 0xf5, 0xb5, 0x72, - 0x79, 0x5e, 0x19, 0x14, 0x54, 0x2e, 0x98, 0x36, 0x71, 0xa8, 0x9a, 0xe9, 0x29, 0x78, 0x90, 0x39, - 0x54, 0xcd, 0x14, 0xea, 0x3d, 0x0d, 0x63, 0x9a, 0xc6, 0x64, 0xd6, 0xb5, 0x0a, 0x5f, 0x63, 0x39, - 0xf9, 0x5c, 0x48, 0x59, 0x9a, 0xb6, 0xc0, 0x00, 0xb8, 0x8f, 0x3b, 0xe8, 0x1c, 0x1c, 0xf6, 0x95, - 0x15, 0x44, 0x1c, 0x6d, 0x91, 0x32, 0x8a, 0x7a, 0x1a, 0xc6, 0xac, 0xbd, 0x56, 0x44, 0x14, 0x1a, - 0xd1, 0xda, 0x8b, 0xa2, 0x3d, 0x03, 0xe3, 0xd6, 0x8e, 0xd5, 0x8a, 0x77, 0x32, 0x88, 0x87, 0xac, - 0x1d, 0x2b, 0x8a, 0xf8, 0x20, 0x5d, 0x70, 0xdb, 0x58, 0x53, 0x5d, 0x5c, 0xcd, 0x1f, 0x0d, 0x82, - 0x07, 0x3a, 0xd0, 0x0c, 0xe4, 0x34, 0xad, 0x82, 0x0d, 0x75, 0xab, 0x8e, 0x2b, 0xaa, 0x8d, 0x0d, - 0xd5, 0xc9, 0x4f, 0x06, 0x81, 0x87, 0x35, 0xad, 0x4c, 0x7b, 0x67, 0x69, 0x27, 0x3a, 0x09, 0xa3, - 0xe6, 0xd6, 0x8b, 0x1a, 0x73, 0xc9, 0x8a, 0x65, 0xe3, 0x6d, 0xfd, 0x7a, 0xfe, 0x01, 0xaa, 0xdf, - 0x11, 0xd2, 0x41, 0x1d, 0x72, 0x8d, 0x36, 0xa3, 0x47, 0x20, 0xa7, 0x39, 0x3b, 0xaa, 0x6d, 0xd1, - 0x98, 0xec, 0x58, 0xaa, 0x86, 0xf3, 0x0f, 0x32, 0x50, 0xd6, 0xbe, 0x22, 0x9a, 0xc9, 0x94, 0x70, - 0xae, 0xe9, 0xdb, 0xae, 0xa0, 0xf8, 0x30, 0x9b, 0x12, 0xb4, 0x8d, 0x53, 0x3b, 0x01, 0x39, 0xa2, - 0x8a, 0xd0, 0xc0, 0x27, 0x28, 0xd8, 0xb0, 0xb5, 0x63, 0x05, 0xc7, 0xbd, 0x1f, 0x86, 0x08, 0xa4, - 0x3f, 0xe8, 0x23, 0xac, 0x20, 0xb3, 0x76, 0x02, 0x23, 0x3e, 0x0d, 0x47, 0x08, 0x50, 0x03, 0xbb, - 0x6a, 0x55, 0x75, 0xd5, 0x00, 0xf4, 0x63, 0x14, 0x9a, 0xe8, 0x7d, 0x99, 0x77, 0x86, 0xf8, 0xb4, - 0x9b, 0x5b, 0x7b, 0x9e, 0x67, 0x3d, 0xce, 0xf8, 0x24, 0x6d, 0xc2, 0xb7, 0xee, 0x5a, 0xd1, 0x2d, - 0x17, 0x21, 0x1b, 0x74, 0x7c, 0x94, 0x01, 0xe6, 0xfa, 0x39, 0x89, 0x54, 0x41, 0x73, 0xab, 0xf3, - 0xa4, 0x7e, 0x79, 0x5b, 0x39, 0x97, 0x20, 0x75, 0xd4, 0xd2, 0xe2, 0x46, 0xb9, 0xa2, 0x6c, 0xae, - 0x6c, 0x2c, 0x2e, 0x97, 0x73, 0xc9, 0x40, 0xc1, 0x7e, 0x29, 0x95, 0x7e, 0x28, 0xf7, 0xb0, 0xfc, - 0xcd, 0x04, 0x0c, 0x87, 0x57, 0x60, 0xe8, 0x4d, 0x70, 0x54, 0x6c, 0x97, 0x38, 0xd8, 0xad, 0x5c, - 0xd3, 0x6d, 0x3a, 0x23, 0x1b, 0x2a, 0xcb, 0x8e, 0x9e, 0x4f, 0x8c, 0x73, 0xa8, 0x75, 0xec, 0xbe, - 0xa0, 0xdb, 0x64, 0xbe, 0x35, 0x54, 0x17, 0x2d, 0xc1, 0xa4, 0x61, 0x56, 0x1c, 0x57, 0x35, 0xaa, - 0xaa, 0x5d, 0xad, 0xf8, 0x1b, 0x55, 0x15, 0x55, 0xd3, 0xb0, 0xe3, 0x98, 0x2c, 0x13, 0x7a, 0x54, - 0x8e, 0x1b, 0xe6, 0x3a, 0x07, 0xf6, 0x53, 0xc4, 0x2c, 0x07, 0x8d, 0xf8, 0x6f, 0xb2, 0x93, 0xff, - 0xde, 0x03, 0x99, 0x86, 0x6a, 0x55, 0xb0, 0xe1, 0xda, 0x7b, 0xb4, 0xee, 0x4e, 0x2b, 0xe9, 0x86, - 0x6a, 0x95, 0xc9, 0xf3, 0x8f, 0x64, 0xf9, 0x73, 0x29, 0x95, 0x4e, 0xe7, 0x32, 0x97, 0x52, 0xe9, - 0x4c, 0x0e, 0xe4, 0xd7, 0x92, 0x90, 0x0d, 0xd6, 0xe1, 0x64, 0x59, 0xa3, 0xd1, 0x94, 0x25, 0xd1, - 0xa0, 0x76, 0x7f, 0xd7, 0xaa, 0x7d, 0x7a, 0x8e, 0xe4, 0xb2, 0x62, 0x3f, 0xab, 0x8e, 0x15, 0x86, - 0x49, 0xea, 0x08, 0xe2, 0x6c, 0x98, 0x55, 0x23, 0x69, 0x85, 0x3f, 0xa1, 0x05, 0xe8, 0x7f, 0xd1, - 0xa1, 0xb4, 0xfb, 0x29, 0xed, 0x07, 0xba, 0xd3, 0xbe, 0xb4, 0x4e, 0x89, 0x67, 0x2e, 0xad, 0x57, - 0x56, 0x56, 0x95, 0xe5, 0xd9, 0x25, 0x85, 0xa3, 0xa3, 0x63, 0x90, 0xaa, 0xab, 0x2f, 0xef, 0x85, - 0xb3, 0x1e, 0x6d, 0xea, 0xd5, 0x08, 0xc7, 0x20, 0x75, 0x0d, 0xab, 0xbb, 0xe1, 0x5c, 0x43, 0x9b, - 0xee, 0xe2, 0x64, 0x98, 0x81, 0x3e, 0xaa, 0x2f, 0x04, 0xc0, 0x35, 0x96, 0x3b, 0x84, 0xd2, 0x90, - 0x9a, 0x5b, 0x55, 0xc8, 0x84, 0xc8, 0x41, 0x96, 0xb5, 0x56, 0xd6, 0x16, 0xcb, 0x73, 0xe5, 0x5c, - 0x42, 0x3e, 0x0d, 0xfd, 0x4c, 0x09, 0x64, 0xb2, 0x78, 0x6a, 0xc8, 0x1d, 0xe2, 0x8f, 0x9c, 0x86, - 0x24, 0x7a, 0x37, 0x97, 0x4b, 0x65, 0x25, 0x97, 0x08, 0x9b, 0x3a, 0x95, 0xeb, 0x93, 0x1d, 0xc8, - 0x06, 0x0b, 0xf1, 0x1f, 0xcd, 0x22, 0xfb, 0x2b, 0x12, 0x0c, 0x06, 0x0a, 0x6b, 0x52, 0x11, 0xa9, - 0xf5, 0xba, 0x79, 0xad, 0xa2, 0xd6, 0x75, 0xd5, 0xe1, 0xae, 0x01, 0xb4, 0x69, 0x96, 0xb4, 0xf4, - 0x6a, 0xba, 0x1f, 0xd1, 0x14, 0xe9, 0xcb, 0xf5, 0xcb, 0x9f, 0x92, 0x20, 0x17, 0xad, 0x6c, 0x23, - 0x6c, 0x4a, 0x6f, 0x24, 0x9b, 0xf2, 0x27, 0x25, 0x18, 0x0e, 0x97, 0xb3, 0x11, 0xf6, 0xee, 0x7b, - 0x43, 0xd9, 0xfb, 0xa3, 0x04, 0x0c, 0x85, 0x8a, 0xd8, 0x5e, 0xb9, 0x7b, 0x09, 0x46, 0xf5, 0x2a, - 0x6e, 0x58, 0xa6, 0x8b, 0x0d, 0x6d, 0xaf, 0x52, 0xc7, 0x57, 0x71, 0x3d, 0x2f, 0xd3, 0xa0, 0x31, - 0xd3, 0xbd, 0x4c, 0x9e, 0x5e, 0xf4, 0xf1, 0x96, 0x08, 0x5a, 0x71, 0x6c, 0x71, 0xbe, 0xbc, 0xbc, - 0xb6, 0xba, 0x51, 0x5e, 0x99, 0x7b, 0x6b, 0x65, 0x73, 0xe5, 0xf2, 0xca, 0xea, 0x0b, 0x2b, 0x4a, - 0x4e, 0x8f, 0x80, 0xdd, 0xc5, 0x69, 0xbf, 0x06, 0xb9, 0x28, 0x53, 0xe8, 0x28, 0xb4, 0x63, 0x2b, - 0x77, 0x08, 0x8d, 0xc1, 0xc8, 0xca, 0x6a, 0x65, 0x7d, 0x71, 0xbe, 0x5c, 0x29, 0x5f, 0xb8, 0x50, - 0x9e, 0xdb, 0x58, 0x67, 0x1b, 0x1f, 0x1e, 0xf4, 0x46, 0x68, 0x82, 0xcb, 0xaf, 0x26, 0x61, 0xac, - 0x0d, 0x27, 0x68, 0x96, 0x2f, 0x59, 0xd8, 0x2a, 0xea, 0xf1, 0x5e, 0xb8, 0x9f, 0x26, 0x35, 0xc3, - 0x9a, 0x6a, 0xbb, 0x7c, 0x85, 0xf3, 0x08, 0x10, 0x2d, 0x19, 0xae, 0xbe, 0xad, 0x63, 0x9b, 0xef, - 0x13, 0xb1, 0x75, 0xcc, 0x88, 0xdf, 0xce, 0xb6, 0x8a, 0x1e, 0x03, 0x64, 0x99, 0x8e, 0xee, 0xea, - 0x57, 0x71, 0x45, 0x37, 0xc4, 0xa6, 0x12, 0x59, 0xd7, 0xa4, 0x94, 0x9c, 0xe8, 0x59, 0x34, 0x5c, - 0x0f, 0xda, 0xc0, 0x35, 0x35, 0x02, 0x4d, 0x82, 0x79, 0x52, 0xc9, 0x89, 0x1e, 0x0f, 0xfa, 0x3e, - 0xc8, 0x56, 0xcd, 0x26, 0x29, 0xf6, 0x18, 0x1c, 0xc9, 0x1d, 0x92, 0x32, 0xc8, 0xda, 0x3c, 0x10, - 0x5e, 0xc6, 0xfb, 0xbb, 0x59, 0x59, 0x65, 0x90, 0xb5, 0x31, 0x90, 0x87, 0x61, 0x44, 0xad, 0xd5, - 0x6c, 0x42, 0x5c, 0x10, 0x62, 0x0b, 0x93, 0x61, 0xaf, 0x99, 0x02, 0x16, 0x2e, 0x41, 0x5a, 0xe8, - 0x81, 0xa4, 0x6a, 0xa2, 0x89, 0x8a, 0xc5, 0x56, 0xdb, 0x89, 0x13, 0x19, 0x25, 0x6d, 0x88, 0xce, - 0xfb, 0x20, 0xab, 0x3b, 0x15, 0x7f, 0x73, 0x3e, 0x31, 0x95, 0x38, 0x91, 0x56, 0x06, 0x75, 0xc7, - 0xdb, 0xd8, 0x94, 0x3f, 0x97, 0x80, 0xe1, 0xf0, 0xcb, 0x05, 0x34, 0x0f, 0xe9, 0xba, 0xa9, 0xa9, - 0xd4, 0xb5, 0xd8, 0x9b, 0xad, 0x13, 0x31, 0xef, 0x23, 0xa6, 0x97, 0x38, 0xbc, 0xe2, 0x61, 0x16, - 0x7e, 0x47, 0x82, 0xb4, 0x68, 0x46, 0x47, 0x20, 0x65, 0xa9, 0xee, 0x0e, 0x25, 0xd7, 0x57, 0x4a, - 0xe4, 0x24, 0x85, 0x3e, 0x93, 0x76, 0xc7, 0x52, 0x0d, 0xea, 0x02, 0xbc, 0x9d, 0x3c, 0x13, 0xbb, - 0xd6, 0xb1, 0x5a, 0xa5, 0xab, 0x1e, 0xb3, 0xd1, 0xc0, 0x86, 0xeb, 0x08, 0xbb, 0xf2, 0xf6, 0x39, - 0xde, 0x8c, 0x1e, 0x85, 0x51, 0xd7, 0x56, 0xf5, 0x7a, 0x08, 0x36, 0x45, 0x61, 0x73, 0xa2, 0xc3, - 0x03, 0x2e, 0xc2, 0x31, 0x41, 0xb7, 0x8a, 0x5d, 0x55, 0xdb, 0xc1, 0x55, 0x1f, 0xa9, 0x9f, 0xee, - 0x6e, 0x1c, 0xe5, 0x00, 0xf3, 0xbc, 0x5f, 0xe0, 0xca, 0xdf, 0x94, 0x60, 0x54, 0xac, 0xd3, 0xaa, - 0x9e, 0xb2, 0x96, 0x01, 0x54, 0xc3, 0x30, 0xdd, 0xa0, 0xba, 0x5a, 0x5d, 0xb9, 0x05, 0x6f, 0x7a, - 0xd6, 0x43, 0x52, 0x02, 0x04, 0x0a, 0x0d, 0x00, 0xbf, 0xa7, 0xa3, 0xda, 0x26, 0x61, 0x90, 0xbf, - 0x39, 0xa2, 0xaf, 0x1f, 0xd9, 0xca, 0x1e, 0x58, 0x13, 0x59, 0xd0, 0xa1, 0x71, 0xe8, 0xdb, 0xc2, - 0x35, 0xdd, 0xe0, 0xfb, 0xc1, 0xec, 0x41, 0xec, 0xbf, 0xa4, 0xbc, 0xfd, 0x97, 0xd2, 0x87, 0x24, - 0x18, 0xd3, 0xcc, 0x46, 0x94, 0xdf, 0x52, 0x2e, 0xb2, 0xbd, 0xe0, 0x5c, 0x94, 0xde, 0xf6, 0x6c, - 0x4d, 0x77, 0x77, 0x9a, 0x5b, 0xd3, 0x9a, 0xd9, 0x98, 0xa9, 0x99, 0x75, 0xd5, 0xa8, 0xf9, 0xef, - 0x4f, 0xe9, 0x0f, 0xed, 0xf1, 0x1a, 0x36, 0x1e, 0xaf, 0x99, 0x81, 0xb7, 0xa9, 0xe7, 0xfd, 0x9f, - 0x7f, 0x21, 0x49, 0xbf, 0x90, 0x48, 0x2e, 0xac, 0x95, 0x3e, 0x9f, 0x28, 0x2c, 0xb0, 0xe1, 0xd6, - 0x84, 0x7a, 0x14, 0xbc, 0x5d, 0xc7, 0x1a, 0x11, 0x19, 0xbe, 0xf3, 0x28, 0x8c, 0xd7, 0xcc, 0x9a, - 0x49, 0x29, 0xce, 0x90, 0x5f, 0xfc, 0x8d, 0x6c, 0xc6, 0x6b, 0x2d, 0xc4, 0xbe, 0xbe, 0x2d, 0xae, - 0xc0, 0x18, 0x07, 0xae, 0xd0, 0x57, 0x42, 0x6c, 0x61, 0x83, 0xba, 0x6e, 0xab, 0xe5, 0x7f, 0xed, - 0xdb, 0x34, 0xa1, 0x2b, 0xa3, 0x1c, 0x95, 0xf4, 0xb1, 0xb5, 0x4f, 0x51, 0x81, 0xc3, 0x21, 0x7a, - 0x6c, 0xda, 0x62, 0x3b, 0x86, 0xe2, 0x6f, 0x71, 0x8a, 0x63, 0x01, 0x8a, 0xeb, 0x1c, 0xb5, 0x38, - 0x07, 0x43, 0xfb, 0xa1, 0xf5, 0xaf, 0x39, 0xad, 0x2c, 0x0e, 0x12, 0x59, 0x80, 0x11, 0x4a, 0x44, - 0x6b, 0x3a, 0xae, 0xd9, 0xa0, 0x31, 0xb1, 0x3b, 0x99, 0xdf, 0xfe, 0x36, 0x9b, 0x47, 0xc3, 0x04, - 0x6d, 0xce, 0xc3, 0x2a, 0x16, 0x81, 0xbe, 0x05, 0xab, 0x62, 0xad, 0x1e, 0x43, 0xe1, 0xab, 0x9c, - 0x11, 0x0f, 0xbe, 0x78, 0x05, 0xc6, 0xc9, 0x6f, 0x1a, 0xb2, 0x82, 0x9c, 0xc4, 0xef, 0xc1, 0xe5, - 0xbf, 0xf9, 0x5e, 0x36, 0x55, 0xc7, 0x3c, 0x02, 0x01, 0x9e, 0x02, 0x56, 0xac, 0x61, 0xd7, 0xc5, - 0xb6, 0x53, 0x51, 0xeb, 0xed, 0xd8, 0x0b, 0x6c, 0x62, 0xe4, 0x3f, 0xfe, 0xdd, 0xb0, 0x15, 0x17, - 0x18, 0xe6, 0x6c, 0xbd, 0x5e, 0xdc, 0x84, 0xa3, 0x6d, 0xbc, 0xa2, 0x07, 0x9a, 0xaf, 0x72, 0x9a, - 0xe3, 0x2d, 0x9e, 0x41, 0xc8, 0xae, 0x81, 0x68, 0xf7, 0x6c, 0xd9, 0x03, 0xcd, 0x4f, 0x70, 0x9a, - 0x88, 0xe3, 0x0a, 0x93, 0x12, 0x8a, 0x97, 0x60, 0xf4, 0x2a, 0xb6, 0xb7, 0x4c, 0x87, 0x6f, 0x1c, - 0xf5, 0x40, 0xee, 0x93, 0x9c, 0xdc, 0x08, 0x47, 0xa4, 0x3b, 0x49, 0x84, 0xd6, 0x39, 0x48, 0x6f, - 0xab, 0x1a, 0xee, 0x81, 0xc4, 0x4d, 0x4e, 0x62, 0x80, 0xc0, 0x13, 0xd4, 0x59, 0xc8, 0xd6, 0x4c, - 0x9e, 0xb5, 0xe2, 0xd1, 0x3f, 0xc5, 0xd1, 0x07, 0x05, 0x0e, 0x27, 0x61, 0x99, 0x56, 0xb3, 0x4e, - 0x52, 0x5a, 0x3c, 0x89, 0xbf, 0x23, 0x48, 0x08, 0x1c, 0x4e, 0x62, 0x1f, 0x6a, 0xfd, 0xb4, 0x20, - 0xe1, 0x04, 0xf4, 0xf9, 0x1c, 0x0c, 0x9a, 0x46, 0x7d, 0xcf, 0x34, 0x7a, 0x61, 0xe2, 0x33, 0x9c, - 0x02, 0x70, 0x14, 0x42, 0xe0, 0x3c, 0x64, 0x7a, 0x35, 0xc4, 0xdf, 0xfd, 0xae, 0x98, 0x1e, 0xc2, - 0x02, 0x0b, 0x30, 0x22, 0x02, 0x94, 0x6e, 0x1a, 0x3d, 0x90, 0xf8, 0x7b, 0x9c, 0xc4, 0x70, 0x00, - 0x8d, 0x8b, 0xe1, 0x62, 0xc7, 0xad, 0xe1, 0x5e, 0x88, 0x7c, 0x4e, 0x88, 0xc1, 0x51, 0xb8, 0x2a, - 0xb7, 0xb0, 0xa1, 0xed, 0xf4, 0x46, 0xe1, 0x97, 0x84, 0x2a, 0x05, 0x0e, 0x21, 0x31, 0x07, 0x43, - 0x0d, 0xd5, 0x76, 0x76, 0xd4, 0x7a, 0x4f, 0xe6, 0xf8, 0xfb, 0x9c, 0x46, 0xd6, 0x43, 0xe2, 0x1a, - 0x69, 0x1a, 0xfb, 0x21, 0xf3, 0x79, 0xa1, 0x91, 0x00, 0x1a, 0x9f, 0x7a, 0x8e, 0x4b, 0x77, 0xd9, - 0xf6, 0x43, 0xed, 0x97, 0xc5, 0xd4, 0x63, 0xb8, 0xcb, 0x41, 0x8a, 0xe7, 0x21, 0xe3, 0xe8, 0x2f, - 0xf7, 0x44, 0xe6, 0x0b, 0xc2, 0xd2, 0x14, 0x81, 0x20, 0xbf, 0x15, 0x8e, 0xb5, 0x4d, 0x13, 0x3d, - 0x10, 0xfb, 0x07, 0x9c, 0xd8, 0x91, 0x36, 0xa9, 0x82, 0x87, 0x84, 0xfd, 0x92, 0xfc, 0x87, 0x22, - 0x24, 0xe0, 0x08, 0xad, 0x35, 0xb2, 0x8e, 0x70, 0xd4, 0xed, 0xfd, 0x69, 0xed, 0x57, 0x84, 0xd6, - 0x18, 0x6e, 0x48, 0x6b, 0x1b, 0x70, 0x84, 0x53, 0xdc, 0x9f, 0x5d, 0x7f, 0x55, 0x04, 0x56, 0x86, - 0xbd, 0x19, 0xb6, 0xee, 0xdb, 0xa1, 0xe0, 0xa9, 0x53, 0x14, 0xac, 0x4e, 0xa5, 0xa1, 0x5a, 0x3d, - 0x50, 0xfe, 0x35, 0x4e, 0x59, 0x44, 0x7c, 0xaf, 0xe2, 0x75, 0x96, 0x55, 0x8b, 0x10, 0x7f, 0x0b, - 0xe4, 0x05, 0xf1, 0xa6, 0x61, 0x63, 0xcd, 0xac, 0x19, 0xfa, 0xcb, 0xb8, 0xda, 0x03, 0xe9, 0x5f, - 0x8f, 0x98, 0x6a, 0x33, 0x80, 0x4e, 0x28, 0x2f, 0x42, 0xce, 0xab, 0x55, 0x2a, 0x7a, 0xc3, 0x32, - 0x6d, 0x37, 0x86, 0xe2, 0x17, 0x85, 0xa5, 0x3c, 0xbc, 0x45, 0x8a, 0x56, 0x2c, 0xc3, 0x30, 0x7d, - 0xec, 0xd5, 0x25, 0xbf, 0xc4, 0x09, 0x0d, 0xf9, 0x58, 0x3c, 0x70, 0x68, 0x66, 0xc3, 0x52, 0xed, - 0x5e, 0xe2, 0xdf, 0x3f, 0x12, 0x81, 0x83, 0xa3, 0xf0, 0xc0, 0xe1, 0xee, 0x59, 0x98, 0x64, 0xfb, - 0x1e, 0x28, 0x7c, 0x59, 0x04, 0x0e, 0x81, 0xc3, 0x49, 0x88, 0x82, 0xa1, 0x07, 0x12, 0xff, 0x58, - 0x90, 0x10, 0x38, 0x84, 0xc4, 0xf3, 0x7e, 0xa2, 0xb5, 0x71, 0x4d, 0x77, 0x5c, 0x9b, 0x95, 0xc9, - 0xdd, 0x49, 0xfd, 0x93, 0xef, 0x86, 0x8b, 0x30, 0x25, 0x80, 0x4a, 0x22, 0x11, 0xdf, 0x76, 0xa5, - 0xab, 0xa8, 0x78, 0xc6, 0x7e, 0x43, 0x44, 0xa2, 0x00, 0x1a, 0xe1, 0x2d, 0x50, 0x21, 0x12, 0xb5, - 0x6b, 0x64, 0xed, 0xd0, 0x03, 0xb9, 0x7f, 0x1a, 0x61, 0x6e, 0x5d, 0xe0, 0x12, 0x9a, 0x81, 0xfa, - 0xa7, 0x69, 0xec, 0xe2, 0xbd, 0x9e, 0xbc, 0xf3, 0x9f, 0x45, 0xea, 0x9f, 0x4d, 0x86, 0xc9, 0x62, - 0xc8, 0x48, 0xa4, 0x9e, 0x42, 0x71, 0xe7, 0x87, 0xf2, 0x3f, 0xf5, 0x7d, 0x2e, 0x6f, 0xb8, 0x9c, - 0x2a, 0x2e, 0x11, 0x27, 0x0f, 0x17, 0x3d, 0xf1, 0xc4, 0xde, 0xfb, 0x7d, 0xcf, 0xcf, 0x43, 0x35, - 0x4f, 0xf1, 0x02, 0x0c, 0x85, 0x0a, 0x9e, 0x78, 0x52, 0xef, 0xe3, 0xa4, 0xb2, 0xc1, 0x7a, 0xa7, - 0x78, 0x1a, 0x52, 0xa4, 0x78, 0x89, 0x47, 0xff, 0xeb, 0x1c, 0x9d, 0x82, 0x17, 0xdf, 0x0c, 0x69, - 0x51, 0xb4, 0xc4, 0xa3, 0xbe, 0x9f, 0xa3, 0x7a, 0x28, 0x04, 0x5d, 0x14, 0x2c, 0xf1, 0xe8, 0x7f, - 0x43, 0xa0, 0x0b, 0x14, 0x82, 0xde, 0xbb, 0x0a, 0xbf, 0xf2, 0xd3, 0x29, 0x9e, 0x74, 0x84, 0xee, - 0xce, 0xc3, 0x00, 0xaf, 0x54, 0xe2, 0xb1, 0x3f, 0xc8, 0x07, 0x17, 0x18, 0xc5, 0x67, 0xa0, 0xaf, - 0x47, 0x85, 0xff, 0x0c, 0x47, 0x65, 0xf0, 0xc5, 0x39, 0x18, 0x0c, 0x54, 0x27, 0xf1, 0xe8, 0x7f, - 0x8b, 0xa3, 0x07, 0xb1, 0x08, 0xeb, 0xbc, 0x3a, 0x89, 0x27, 0xf0, 0x21, 0xc1, 0x3a, 0xc7, 0x20, - 0x6a, 0x13, 0x85, 0x49, 0x3c, 0xf6, 0x87, 0x85, 0xd6, 0x05, 0x4a, 0xf1, 0x39, 0xc8, 0x78, 0xc9, - 0x26, 0x1e, 0xff, 0x23, 0x1c, 0xdf, 0xc7, 0x21, 0x1a, 0x08, 0x24, 0xbb, 0x78, 0x12, 0x3f, 0x2b, - 0x34, 0x10, 0xc0, 0x22, 0xd3, 0x28, 0x5a, 0xc0, 0xc4, 0x53, 0xfa, 0xa8, 0x98, 0x46, 0x91, 0xfa, - 0x85, 0x58, 0x93, 0xc6, 0xfc, 0x78, 0x12, 0x3f, 0x27, 0xac, 0x49, 0xe1, 0x09, 0x1b, 0xd1, 0x8a, - 0x20, 0x9e, 0xc6, 0xdf, 0x16, 0x6c, 0x44, 0x0a, 0x82, 0xe2, 0x1a, 0xa0, 0xd6, 0x6a, 0x20, 0x9e, - 0xde, 0xc7, 0x38, 0xbd, 0xd1, 0x96, 0x62, 0xa0, 0xf8, 0x02, 0x1c, 0x69, 0x5f, 0x09, 0xc4, 0x53, - 0xfd, 0xf8, 0xf7, 0x23, 0x6b, 0xb7, 0x60, 0x21, 0x50, 0xdc, 0xf0, 0x53, 0x4a, 0xb0, 0x0a, 0x88, - 0x27, 0xfb, 0xea, 0xf7, 0xc3, 0x81, 0x3b, 0x58, 0x04, 0x14, 0x67, 0x01, 0xfc, 0x04, 0x1c, 0x4f, - 0xeb, 0x93, 0x9c, 0x56, 0x00, 0x89, 0x4c, 0x0d, 0x9e, 0x7f, 0xe3, 0xf1, 0x6f, 0x8a, 0xa9, 0xc1, - 0x31, 0xc8, 0xd4, 0x10, 0xa9, 0x37, 0x1e, 0xfb, 0x53, 0x62, 0x6a, 0x08, 0x14, 0xe2, 0xd9, 0x81, - 0xec, 0x16, 0x4f, 0xe1, 0x33, 0xc2, 0xb3, 0x03, 0x58, 0xc5, 0x15, 0x18, 0x6d, 0x49, 0x88, 0xf1, - 0xa4, 0x7e, 0x81, 0x93, 0xca, 0x45, 0xf3, 0x61, 0x30, 0x79, 0xf1, 0x64, 0x18, 0x4f, 0xed, 0xb3, - 0x91, 0xe4, 0xc5, 0x73, 0x61, 0xf1, 0x3c, 0xa4, 0x8d, 0x66, 0xbd, 0x4e, 0x26, 0x0f, 0xea, 0x7e, - 0xe6, 0x2f, 0xff, 0x5f, 0x7f, 0xc0, 0xb5, 0x23, 0x10, 0x8a, 0xa7, 0xa1, 0x0f, 0x37, 0xb6, 0x70, - 0x35, 0x0e, 0xf3, 0x3b, 0x3f, 0x10, 0x01, 0x93, 0x40, 0x17, 0x9f, 0x03, 0x60, 0x5b, 0x23, 0xf4, - 0xf5, 0x60, 0x0c, 0xee, 0x7f, 0xfb, 0x01, 0x3f, 0x8d, 0xe3, 0xa3, 0xf8, 0x04, 0xd8, 0xd9, 0x9e, - 0xee, 0x04, 0xbe, 0x1b, 0x26, 0x40, 0x2d, 0x72, 0x0e, 0x06, 0x5e, 0x74, 0x4c, 0xc3, 0x55, 0x6b, - 0x71, 0xd8, 0xff, 0x9d, 0x63, 0x0b, 0x78, 0xa2, 0xb0, 0x86, 0x69, 0x63, 0x57, 0xad, 0x39, 0x71, - 0xb8, 0xff, 0x83, 0xe3, 0x7a, 0x08, 0x04, 0x59, 0x53, 0x1d, 0xb7, 0x17, 0xb9, 0xff, 0x44, 0x20, - 0x0b, 0x04, 0xc2, 0x34, 0xf9, 0xbd, 0x8b, 0xf7, 0xe2, 0x70, 0xbf, 0x27, 0x98, 0xe6, 0xf0, 0xc5, - 0x37, 0x43, 0x86, 0xfc, 0x64, 0x47, 0xec, 0x62, 0x90, 0xff, 0x94, 0x23, 0xfb, 0x18, 0x64, 0x64, - 0xc7, 0xad, 0xba, 0x7a, 0xbc, 0xb2, 0x6f, 0x73, 0x4b, 0x0b, 0xf8, 0xe2, 0x2c, 0x0c, 0x3a, 0x6e, - 0xb5, 0xda, 0xe4, 0xf5, 0x69, 0x0c, 0xfa, 0x9f, 0xfd, 0xc0, 0xdb, 0xb2, 0xf0, 0x70, 0x88, 0xb5, - 0xaf, 0xed, 0xba, 0x96, 0x49, 0x5f, 0x81, 0xc4, 0x51, 0xf8, 0x3e, 0xa7, 0x10, 0x40, 0x29, 0xce, - 0x41, 0x96, 0xc8, 0x62, 0x63, 0x0b, 0xd3, 0xf7, 0x55, 0x31, 0x24, 0xfe, 0x9c, 0x2b, 0x20, 0x84, - 0x54, 0xfa, 0xc9, 0xaf, 0xbe, 0x36, 0x21, 0x7d, 0xe3, 0xb5, 0x09, 0xe9, 0x8f, 0x5e, 0x9b, 0x90, - 0x3e, 0xfc, 0xad, 0x89, 0x43, 0xdf, 0xf8, 0xd6, 0xc4, 0xa1, 0xdf, 0xfb, 0xd6, 0xc4, 0xa1, 0xf6, - 0xdb, 0xc6, 0xb0, 0x60, 0x2e, 0x98, 0x6c, 0xc3, 0xf8, 0x6d, 0x72, 0x68, 0xbb, 0xb8, 0x66, 0xfa, - 0xbb, 0xb5, 0xde, 0x22, 0x07, 0xfe, 0x5c, 0x22, 0x0b, 0xe6, 0xf0, 0x5e, 0xae, 0x6a, 0xec, 0x75, - 0xb8, 0x83, 0x53, 0x68, 0xbb, 0x31, 0x2c, 0xbf, 0x09, 0x92, 0xb3, 0xc6, 0x1e, 0x3a, 0xc6, 0x62, - 0x5e, 0xa5, 0x69, 0xd7, 0xf9, 0xd1, 0xaf, 0x01, 0xf2, 0xbc, 0x69, 0xd7, 0xd1, 0xb8, 0x7f, 0x3e, - 0x53, 0x3a, 0x91, 0xe5, 0x87, 0x2e, 0x8b, 0xa9, 0xef, 0x7d, 0x66, 0xf2, 0x50, 0x69, 0x37, 0x2a, - 0xe1, 0x57, 0x62, 0xa5, 0x4c, 0xcf, 0x1a, 0x7b, 0x54, 0xc8, 0x35, 0xe9, 0x6d, 0x7d, 0x64, 0x0c, - 0x47, 0x6c, 0x6c, 0x4f, 0x44, 0x37, 0xb6, 0x5f, 0xc0, 0xf5, 0xfa, 0x65, 0xc3, 0xbc, 0x66, 0x6c, - 0x10, 0xb0, 0xad, 0x7e, 0x4a, 0xe3, 0x29, 0xf8, 0x9b, 0x09, 0x98, 0x68, 0xd9, 0xc3, 0xe6, 0x96, - 0xef, 0x74, 0x01, 0xa9, 0x08, 0xe9, 0x79, 0xe1, 0x50, 0x79, 0x18, 0x70, 0xb0, 0x66, 0x1a, 0x55, - 0x87, 0x8a, 0x9a, 0x54, 0xc4, 0x23, 0x11, 0xd5, 0x50, 0x0d, 0xd3, 0xe1, 0xc7, 0x23, 0xd9, 0x43, - 0xe9, 0xe7, 0xa4, 0xfd, 0xd9, 0x71, 0x48, 0x8c, 0x24, 0xc4, 0x3c, 0xd9, 0x6d, 0xef, 0x9f, 0xaa, - 0xc0, 0xe3, 0x3f, 0xb0, 0xcf, 0xdf, 0xab, 0x3a, 0x3e, 0x9c, 0x80, 0xc9, 0xa8, 0x3a, 0xc8, 0x3c, - 0x72, 0x5c, 0xb5, 0x61, 0x75, 0xd2, 0xc7, 0x79, 0xc8, 0x6c, 0x08, 0x98, 0x7d, 0x2b, 0xe4, 0xe7, - 0xf7, 0xa9, 0x90, 0x61, 0x6f, 0x28, 0xa1, 0x91, 0x47, 0xe3, 0x35, 0xe2, 0x89, 0x70, 0x00, 0x95, - 0xbc, 0x27, 0x09, 0xc7, 0x34, 0xd3, 0x69, 0x98, 0x4e, 0x85, 0x39, 0x3c, 0x7b, 0xe0, 0xca, 0xc8, - 0x06, 0xbb, 0x7a, 0x78, 0x1d, 0x72, 0x11, 0x86, 0x69, 0x50, 0xa0, 0x1b, 0xc1, 0x34, 0x0e, 0xc7, - 0xa6, 0xce, 0xaf, 0xfd, 0xfb, 0x3e, 0x3a, 0x89, 0x86, 0x3c, 0x44, 0x7a, 0xd2, 0x65, 0x03, 0xc6, - 0xf5, 0x86, 0x55, 0xc7, 0xf4, 0x95, 0x58, 0xc5, 0xeb, 0x8b, 0xa7, 0xf7, 0x75, 0x4e, 0x6f, 0xcc, - 0x47, 0x5f, 0x14, 0xd8, 0xc5, 0x25, 0x18, 0x55, 0x35, 0x0d, 0x5b, 0x21, 0x92, 0x31, 0x01, 0x4b, - 0x30, 0x98, 0xe3, 0x98, 0x1e, 0xb5, 0xd2, 0x73, 0x9d, 0x6c, 0xfb, 0xb6, 0x07, 0x03, 0x46, 0xb3, - 0x71, 0x0d, 0x1b, 0x8f, 0x1b, 0xd8, 0xbd, 0x66, 0xda, 0xbb, 0x5c, 0xbd, 0x8f, 0xb3, 0xa1, 0x84, - 0x11, 0xde, 0x97, 0x84, 0x09, 0xd6, 0x31, 0xb3, 0xa5, 0x3a, 0x78, 0xe6, 0xea, 0x93, 0x5b, 0xd8, - 0x55, 0x9f, 0x9c, 0xd1, 0x4c, 0x5d, 0x4c, 0xd3, 0x31, 0x6e, 0x17, 0xd2, 0x3f, 0xcd, 0xfb, 0x3b, - 0xc4, 0xa9, 0x05, 0x48, 0xcd, 0x99, 0xba, 0x41, 0x3c, 0xb2, 0x8a, 0x0d, 0xb3, 0xc1, 0xa3, 0x14, - 0x7b, 0x40, 0xf7, 0x43, 0xbf, 0xda, 0x30, 0x9b, 0x86, 0xcb, 0xde, 0xe6, 0x95, 0x06, 0xbf, 0x7a, - 0x6b, 0xf2, 0xd0, 0xef, 0xdf, 0x9a, 0x4c, 0x2e, 0x1a, 0xae, 0xc2, 0xbb, 0x8a, 0xa9, 0xd7, 0x3f, - 0x3d, 0x29, 0xc9, 0x97, 0x60, 0x60, 0x1e, 0x6b, 0x07, 0xa1, 0x35, 0x8f, 0xb5, 0x08, 0xad, 0x47, - 0x20, 0xbd, 0x68, 0xb8, 0xec, 0x08, 0xf1, 0xbd, 0x90, 0xd4, 0x0d, 0x76, 0x28, 0x2d, 0x32, 0x3e, - 0x69, 0x27, 0xa0, 0xf3, 0x58, 0xf3, 0x40, 0xab, 0x58, 0x8b, 0x82, 0x12, 0xf2, 0xa4, 0xbd, 0x34, - 0xff, 0x7b, 0xff, 0x79, 0xe2, 0xd0, 0x2b, 0xaf, 0x4d, 0x1c, 0xea, 0x68, 0x89, 0x60, 0x76, 0xe0, - 0x2a, 0xe6, 0x26, 0x70, 0xaa, 0xbb, 0x33, 0x6e, 0x68, 0x2e, 0x7c, 0x3e, 0x05, 0xf7, 0xd2, 0x4b, - 0x21, 0x76, 0x43, 0x37, 0xdc, 0x19, 0xcd, 0xde, 0xb3, 0x5c, 0x9a, 0x4e, 0xcc, 0x6d, 0x6e, 0x85, - 0x51, 0xbf, 0x7b, 0x9a, 0x75, 0x77, 0xb0, 0xc1, 0x36, 0xf4, 0xad, 0x11, 0x3c, 0xa2, 0x38, 0xd7, - 0x74, 0xd5, 0x3a, 0x0f, 0x17, 0xec, 0x81, 0xb4, 0xb2, 0x8b, 0x24, 0x09, 0xd6, 0xaa, 0x8b, 0x3b, - 0x24, 0x75, 0xac, 0x6e, 0xb3, 0x83, 0xbb, 0x49, 0x9a, 0x42, 0xd2, 0xa4, 0x81, 0x9e, 0xd1, 0x1d, - 0x87, 0x3e, 0xb5, 0xc9, 0x5e, 0x39, 0x27, 0x49, 0x6e, 0xa1, 0x0f, 0xf2, 0x65, 0x18, 0xe0, 0xaf, - 0xb9, 0x50, 0x0e, 0x92, 0xbb, 0x78, 0x8f, 0x8e, 0x93, 0x55, 0xc8, 0x4f, 0x34, 0x0d, 0x7d, 0x94, - 0x79, 0x7e, 0x23, 0x21, 0x3f, 0xdd, 0xc2, 0xfd, 0x34, 0x65, 0x52, 0x61, 0x60, 0xf2, 0x25, 0x48, - 0xcf, 0x9b, 0x0d, 0xdd, 0x30, 0xc3, 0xd4, 0x32, 0x8c, 0x1a, 0xe5, 0xd9, 0x6a, 0x72, 0x5b, 0x2b, - 0xec, 0x01, 0x1d, 0x81, 0x7e, 0x76, 0x90, 0x9b, 0xbf, 0x36, 0xe7, 0x4f, 0xf2, 0x1c, 0x0c, 0x50, - 0xda, 0xab, 0x16, 0x42, 0xfc, 0x66, 0x0f, 0x3f, 0x31, 0x4e, 0xc3, 0x02, 0x27, 0x9f, 0xf0, 0x99, - 0x45, 0x90, 0xaa, 0xaa, 0xae, 0xca, 0xe5, 0xa6, 0xbf, 0xe5, 0x67, 0x21, 0xcd, 0x89, 0x38, 0xe8, - 0x14, 0x24, 0x4d, 0xcb, 0xe1, 0x2f, 0xbe, 0x0b, 0x9d, 0x44, 0x59, 0xb5, 0x4a, 0x29, 0xe2, 0x25, - 0x0a, 0x01, 0x2e, 0x29, 0x1d, 0xdd, 0xe2, 0x6c, 0xc0, 0x2d, 0x02, 0x26, 0x0f, 0xfc, 0x64, 0x26, - 0x6d, 0x71, 0x07, 0xcf, 0x59, 0x3e, 0x93, 0x80, 0x89, 0x40, 0xef, 0x55, 0x6c, 0x93, 0xb5, 0x1e, - 0xf3, 0x28, 0xee, 0x2d, 0x28, 0xc0, 0x24, 0xef, 0xef, 0xe0, 0x2e, 0x6f, 0x86, 0xe4, 0xac, 0x65, - 0xa1, 0x02, 0xa4, 0xd9, 0x0b, 0x6e, 0x93, 0xf9, 0x4b, 0x4a, 0xf1, 0x9e, 0x49, 0x9f, 0x63, 0x6e, - 0xbb, 0xd7, 0x54, 0xdb, 0xbb, 0xc2, 0x24, 0x9e, 0xe5, 0x73, 0x90, 0x99, 0x33, 0x0d, 0x07, 0x1b, - 0x4e, 0x93, 0x26, 0xa2, 0xad, 0xba, 0xa9, 0xed, 0x72, 0x0a, 0xec, 0x81, 0x28, 0x5c, 0xb5, 0x2c, - 0x8a, 0x99, 0x52, 0xc8, 0x4f, 0x36, 0x2f, 0x4b, 0xeb, 0x1d, 0x55, 0x74, 0x6e, 0xff, 0x2a, 0xe2, - 0x42, 0x7a, 0x3a, 0xfa, 0x03, 0x09, 0x8e, 0xb7, 0x4e, 0xa8, 0x5d, 0xbc, 0xe7, 0xec, 0x77, 0x3e, - 0x9d, 0x85, 0xcc, 0x1a, 0xbd, 0x47, 0x7c, 0x19, 0xef, 0xa1, 0x02, 0x0c, 0xe0, 0xea, 0xa9, 0xd3, - 0xa7, 0x9f, 0x3c, 0xc7, 0xbc, 0xfd, 0xe2, 0x21, 0x45, 0x34, 0x14, 0xd3, 0x44, 0xaa, 0xd7, 0x3f, - 0x33, 0x29, 0x95, 0xfa, 0x20, 0xe9, 0x34, 0x1b, 0x77, 0xd5, 0x07, 0x5e, 0xed, 0x83, 0xa9, 0x20, - 0x26, 0xcd, 0xc6, 0x57, 0xd5, 0xba, 0x5e, 0x55, 0xfd, 0x1b, 0xde, 0xb9, 0x80, 0x8c, 0x14, 0xa2, - 0xbd, 0x88, 0x85, 0xae, 0x9a, 0x92, 0x7f, 0x5d, 0x82, 0xec, 0x15, 0x41, 0x79, 0x1d, 0xbb, 0xe8, - 0x3c, 0x80, 0x37, 0x92, 0x98, 0x16, 0xf7, 0x4c, 0x47, 0xc7, 0x9a, 0xf6, 0x70, 0x94, 0x00, 0x38, - 0x7a, 0x86, 0x3a, 0x9a, 0x65, 0x3a, 0xfc, 0x7e, 0x4b, 0x0c, 0xaa, 0x07, 0x8c, 0x1e, 0x03, 0x44, - 0x23, 0x58, 0xe5, 0xaa, 0xe9, 0xea, 0x46, 0xad, 0x62, 0x99, 0xd7, 0xf8, 0x65, 0xc0, 0xa4, 0x92, - 0xa3, 0x3d, 0x57, 0x68, 0xc7, 0x1a, 0x69, 0x27, 0x4c, 0x67, 0x3c, 0x2a, 0xa4, 0x76, 0x52, 0xab, - 0x55, 0x1b, 0x3b, 0x0e, 0x0f, 0x52, 0xe2, 0x11, 0x9d, 0x87, 0x01, 0xab, 0xb9, 0x55, 0x11, 0x11, - 0x61, 0xf0, 0xd4, 0xf1, 0x76, 0xf3, 0x5b, 0xd8, 0x9f, 0xcf, 0xf0, 0x7e, 0xab, 0xb9, 0x45, 0xbc, - 0xe1, 0x3e, 0xc8, 0xb6, 0x61, 0x66, 0xf0, 0xaa, 0xcf, 0x07, 0xbd, 0x9e, 0xce, 0x25, 0xa8, 0x58, - 0xb6, 0x6e, 0xda, 0xba, 0xbb, 0x47, 0x4f, 0xa7, 0x24, 0x95, 0x9c, 0xe8, 0x58, 0xe3, 0xed, 0xf2, - 0x2e, 0x8c, 0xac, 0xd3, 0xda, 0xc1, 0xe7, 0xfc, 0xb4, 0xcf, 0x9f, 0x14, 0xcf, 0x5f, 0x47, 0xce, - 0x12, 0x2d, 0x9c, 0x95, 0x9e, 0xef, 0xe8, 0x9d, 0xcf, 0xec, 0xdf, 0x3b, 0xc3, 0xd9, 0xec, 0x4f, - 0x8e, 0x85, 0x26, 0x1f, 0x2f, 0x15, 0x03, 0xe1, 0xa9, 0x57, 0xc7, 0x8c, 0x2b, 0x99, 0x0b, 0xdd, - 0x93, 0x66, 0x21, 0x26, 0x4c, 0x16, 0x62, 0xa7, 0x90, 0x7c, 0x0e, 0x86, 0xd6, 0x54, 0xdb, 0x5d, - 0xc7, 0xee, 0x45, 0xac, 0x56, 0xb1, 0x1d, 0xce, 0xaa, 0x43, 0x22, 0xab, 0x22, 0x48, 0xd1, 0xd4, - 0xc9, 0xb2, 0x0a, 0xfd, 0x2d, 0xef, 0x40, 0x8a, 0x9e, 0x50, 0xf3, 0x32, 0x2e, 0xc7, 0x60, 0x19, - 0x97, 0xc4, 0xca, 0x3d, 0x17, 0x3b, 0x62, 0xc1, 0x46, 0x1f, 0xd0, 0xd3, 0x22, 0x6f, 0x26, 0xbb, - 0xe7, 0x4d, 0xee, 0x88, 0x3c, 0x7b, 0xd6, 0x61, 0xa0, 0x44, 0x42, 0xed, 0xe2, 0xbc, 0xc7, 0x88, - 0xe4, 0x33, 0x82, 0x96, 0x61, 0xc4, 0x52, 0x6d, 0x97, 0x1e, 0xcd, 0xdf, 0xa1, 0x52, 0x70, 0x5f, - 0x9f, 0x6c, 0x9d, 0x79, 0x21, 0x61, 0xf9, 0x28, 0x43, 0x56, 0xb0, 0x51, 0xfe, 0xe3, 0x14, 0xf4, - 0x73, 0x65, 0xbc, 0x19, 0x06, 0xb8, 0x5a, 0xb9, 0x77, 0xde, 0x3b, 0xdd, 0x9a, 0x78, 0xa6, 0xbd, - 0x04, 0xc1, 0xe9, 0x09, 0x1c, 0xf4, 0x10, 0xa4, 0xb5, 0x1d, 0x55, 0x37, 0x2a, 0x7a, 0x55, 0x94, - 0x71, 0xaf, 0xdd, 0x9a, 0x1c, 0x98, 0x23, 0x6d, 0x8b, 0xf3, 0xca, 0x00, 0xed, 0x5c, 0xac, 0x92, - 0x4c, 0xbf, 0x83, 0xf5, 0xda, 0x8e, 0xcb, 0x67, 0x18, 0x7f, 0x42, 0x67, 0x21, 0x45, 0x1c, 0x82, - 0xdf, 0xdc, 0x2a, 0xb4, 0x14, 0xd3, 0xde, 0x8a, 0xa6, 0x94, 0x26, 0x03, 0x7f, 0xf8, 0x0f, 0x27, - 0x25, 0x85, 0x62, 0xa0, 0x39, 0x18, 0xaa, 0xab, 0x8e, 0x5b, 0xa1, 0x19, 0x8a, 0x0c, 0xdf, 0x47, - 0x49, 0x1c, 0x6b, 0x55, 0x08, 0x57, 0x2c, 0x67, 0x7d, 0x90, 0x60, 0xb1, 0xa6, 0x2a, 0x3a, 0x01, - 0x39, 0x4a, 0x44, 0x33, 0x1b, 0x0d, 0xdd, 0x65, 0xb5, 0x53, 0x3f, 0xd5, 0xfb, 0x30, 0x69, 0x9f, - 0xa3, 0xcd, 0xb4, 0x82, 0xba, 0x07, 0x32, 0xf4, 0xaa, 0x08, 0x05, 0x61, 0xc7, 0x22, 0xd3, 0xa4, - 0x81, 0x76, 0x3e, 0x0c, 0x23, 0x7e, 0x7c, 0x64, 0x20, 0x69, 0x46, 0xc5, 0x6f, 0xa6, 0x80, 0x4f, - 0xc0, 0xb8, 0x81, 0xaf, 0xd3, 0x83, 0x9a, 0x21, 0xe8, 0x0c, 0x85, 0x46, 0xa4, 0xef, 0x4a, 0x18, - 0xe3, 0x41, 0x18, 0xd6, 0x84, 0xf2, 0x19, 0x2c, 0x50, 0xd8, 0x21, 0xaf, 0x95, 0x82, 0x1d, 0x83, - 0xb4, 0x6a, 0x59, 0x0c, 0x60, 0x90, 0xc7, 0x47, 0xcb, 0xa2, 0x5d, 0x27, 0x61, 0x94, 0xca, 0x68, - 0x63, 0xa7, 0x59, 0x77, 0x39, 0x91, 0x2c, 0x85, 0x19, 0x21, 0x1d, 0x0a, 0x6b, 0xa7, 0xb0, 0xf7, - 0xc3, 0x10, 0xbe, 0xaa, 0x57, 0xb1, 0xa1, 0x61, 0x06, 0x37, 0x44, 0xe1, 0xb2, 0xa2, 0x91, 0x02, - 0x3d, 0x02, 0x5e, 0xdc, 0xab, 0x88, 0x98, 0x3c, 0xcc, 0xe8, 0x89, 0xf6, 0x59, 0xd6, 0x2c, 0xe7, - 0x21, 0x35, 0xaf, 0xba, 0x2a, 0x29, 0x20, 0xdc, 0xeb, 0x2c, 0xd1, 0x64, 0x15, 0xf2, 0x53, 0x7e, - 0x3d, 0x01, 0xa9, 0x2b, 0xa6, 0x8b, 0xd1, 0x53, 0x81, 0x02, 0x6f, 0xb8, 0x9d, 0x3f, 0xaf, 0xeb, - 0x35, 0x03, 0x57, 0x97, 0x9d, 0x5a, 0xe0, 0xbe, 0xb6, 0xef, 0x4e, 0x89, 0x90, 0x3b, 0x8d, 0x43, - 0x9f, 0x6d, 0x36, 0x8d, 0xaa, 0x38, 0x51, 0x48, 0x1f, 0x50, 0x19, 0xd2, 0x9e, 0x97, 0xa4, 0xe2, - 0xbc, 0x64, 0x84, 0x78, 0x09, 0xf1, 0x61, 0xde, 0xa0, 0x0c, 0x6c, 0x71, 0x67, 0x29, 0x41, 0xc6, - 0x0b, 0x5e, 0xdc, 0xdb, 0x7a, 0x73, 0x58, 0x1f, 0x8d, 0x24, 0x13, 0xcf, 0xf6, 0x9e, 0xf2, 0x98, - 0xc7, 0xe5, 0xbc, 0x0e, 0xae, 0xbd, 0x90, 0x5b, 0xf1, 0xbb, 0xe3, 0x03, 0x54, 0x2e, 0xdf, 0xad, - 0xd8, 0xfd, 0xf1, 0xe3, 0x90, 0x71, 0xf4, 0x9a, 0xa1, 0xba, 0x4d, 0x1b, 0x73, 0xcf, 0xf3, 0x1b, - 0xe4, 0xaf, 0x48, 0xd0, 0xcf, 0x3c, 0x39, 0xa0, 0x37, 0xa9, 0xbd, 0xde, 0x12, 0x9d, 0xf4, 0x96, - 0x3c, 0xb8, 0xde, 0x66, 0x01, 0x3c, 0x66, 0x1c, 0x7e, 0xf7, 0xb7, 0x4d, 0xc5, 0xc0, 0x58, 0x5c, - 0xd7, 0x6b, 0x7c, 0xa2, 0x06, 0x90, 0xe4, 0x3f, 0x90, 0x48, 0x91, 0xca, 0xfb, 0xd1, 0x2c, 0x0c, - 0x09, 0xbe, 0x2a, 0xdb, 0x75, 0xb5, 0xc6, 0x7d, 0xe7, 0xde, 0x8e, 0xcc, 0x5d, 0xa8, 0xab, 0x35, - 0x65, 0x90, 0xf3, 0x43, 0x1e, 0xda, 0xdb, 0x21, 0xd1, 0xc1, 0x0e, 0x21, 0xc3, 0x27, 0x0f, 0x66, - 0xf8, 0x90, 0x89, 0x52, 0x51, 0x13, 0x7d, 0x31, 0x41, 0x17, 0x2b, 0x96, 0xe9, 0xa8, 0xf5, 0x1f, - 0xc5, 0x8c, 0xb8, 0x07, 0x32, 0x96, 0x59, 0xaf, 0xb0, 0x1e, 0x76, 0xd2, 0x36, 0x6d, 0x99, 0x75, - 0xa5, 0xc5, 0xec, 0x7d, 0x77, 0x68, 0xba, 0xf4, 0xdf, 0x01, 0xad, 0x0d, 0x44, 0xb5, 0x66, 0x43, - 0x96, 0xa9, 0x82, 0xe7, 0xb2, 0x27, 0x88, 0x0e, 0x68, 0x72, 0x94, 0x5a, 0x73, 0x2f, 0x63, 0x9b, - 0x41, 0x2a, 0x1c, 0x8e, 0x60, 0xb0, 0xd0, 0xdf, 0x6e, 0x95, 0x1b, 0x74, 0x4b, 0x85, 0xc3, 0xc9, - 0x3f, 0x2f, 0x01, 0x2c, 0x11, 0xcd, 0x52, 0x79, 0x49, 0x16, 0x72, 0x28, 0x0b, 0x95, 0xd0, 0xc8, - 0x13, 0x9d, 0x8c, 0xc6, 0xc7, 0xcf, 0x3a, 0x41, 0xbe, 0xe7, 0x60, 0xc8, 0x77, 0x46, 0x07, 0x0b, - 0x66, 0x26, 0xba, 0x54, 0xd5, 0xeb, 0xd8, 0x55, 0xb2, 0x57, 0x03, 0x4f, 0xf2, 0xbf, 0x94, 0x20, - 0x43, 0x79, 0x5a, 0xc6, 0xae, 0x1a, 0xb2, 0xa1, 0x74, 0x70, 0x1b, 0xde, 0x0b, 0xc0, 0xc8, 0x38, - 0xfa, 0xcb, 0x98, 0x7b, 0x56, 0x86, 0xb6, 0xac, 0xeb, 0x2f, 0x63, 0x74, 0xc6, 0x53, 0x78, 0xb2, - 0xbb, 0xc2, 0x45, 0xd5, 0xcd, 0xd5, 0x7e, 0x14, 0x06, 0xe8, 0x27, 0x70, 0xae, 0x3b, 0xbc, 0x90, - 0xee, 0x37, 0x9a, 0x8d, 0x8d, 0xeb, 0x8e, 0xfc, 0x22, 0x0c, 0x6c, 0x5c, 0x67, 0x7b, 0x1f, 0xf7, - 0x40, 0xc6, 0x36, 0x4d, 0x9e, 0x93, 0x59, 0x2d, 0x94, 0x26, 0x0d, 0x34, 0x05, 0x89, 0xf5, 0x7e, - 0xc2, 0x5f, 0xef, 0xfb, 0x1b, 0x16, 0xc9, 0x9e, 0x36, 0x2c, 0x4e, 0xfe, 0x07, 0x09, 0x06, 0x03, - 0xf1, 0x01, 0x3d, 0x09, 0x87, 0x4b, 0x4b, 0xab, 0x73, 0x97, 0x2b, 0x8b, 0xf3, 0x95, 0x0b, 0x4b, - 0xb3, 0x0b, 0xfe, 0x5d, 0x92, 0xc2, 0x91, 0x1b, 0x37, 0xa7, 0x50, 0x00, 0x76, 0xd3, 0xd8, 0x35, - 0xcc, 0x6b, 0x06, 0x9a, 0x81, 0xf1, 0x30, 0xca, 0x6c, 0x69, 0xbd, 0xbc, 0xb2, 0x91, 0x93, 0x0a, - 0x87, 0x6f, 0xdc, 0x9c, 0x1a, 0x0d, 0x60, 0xcc, 0x6e, 0x39, 0xd8, 0x70, 0x5b, 0x11, 0xe6, 0x56, - 0x97, 0x97, 0x17, 0x37, 0x72, 0x89, 0x16, 0x04, 0x1e, 0xb0, 0x1f, 0x81, 0xd1, 0x30, 0xc2, 0xca, - 0xe2, 0x52, 0x2e, 0x59, 0x40, 0x37, 0x6e, 0x4e, 0x0d, 0x07, 0xa0, 0x57, 0xf4, 0x7a, 0x21, 0xfd, - 0x81, 0xcf, 0x4e, 0x1c, 0xfa, 0xa5, 0x5f, 0x9c, 0x90, 0x88, 0x64, 0x43, 0xa1, 0x18, 0x81, 0x1e, - 0x83, 0xa3, 0xeb, 0x8b, 0x0b, 0x2b, 0xe5, 0xf9, 0xca, 0xf2, 0xfa, 0x42, 0x85, 0x7d, 0x44, 0xc3, - 0x93, 0x6e, 0xe4, 0xc6, 0xcd, 0xa9, 0x41, 0x2e, 0x52, 0x27, 0xe8, 0x35, 0xa5, 0x7c, 0x65, 0x75, - 0xa3, 0x9c, 0x93, 0x18, 0xf4, 0x9a, 0x8d, 0xaf, 0x9a, 0x2e, 0xfb, 0x46, 0xd6, 0x13, 0x70, 0xac, - 0x0d, 0xb4, 0x27, 0xd8, 0xe8, 0x8d, 0x9b, 0x53, 0x43, 0x6b, 0x36, 0x66, 0xf3, 0x87, 0x62, 0x4c, - 0x43, 0xbe, 0x15, 0x63, 0x75, 0x6d, 0x75, 0x7d, 0x76, 0x29, 0x37, 0x55, 0xc8, 0xdd, 0xb8, 0x39, - 0x95, 0x15, 0xc1, 0x90, 0xc0, 0xfb, 0x92, 0xdd, 0xcd, 0x15, 0xcf, 0x9f, 0x3d, 0x0e, 0x0f, 0xf0, - 0x3d, 0x3e, 0xc7, 0x55, 0x77, 0x75, 0xa3, 0xe6, 0xed, 0xa4, 0xf2, 0x67, 0xbe, 0xf2, 0x39, 0xc2, - 0x37, 0x53, 0x45, 0x6b, 0xd7, 0xfd, 0xd4, 0x42, 0xe7, 0x37, 0x47, 0x85, 0x98, 0x97, 0x2b, 0xf1, - 0x4b, 0xa7, 0xce, 0x7b, 0xef, 0x85, 0x98, 0x1d, 0xe1, 0x42, 0xd7, 0xc5, 0x9d, 0xfc, 0x41, 0x09, - 0x86, 0x2f, 0xea, 0x8e, 0x6b, 0xda, 0xba, 0xa6, 0xd6, 0xe9, 0x0d, 0x92, 0x33, 0xbd, 0xc6, 0xd6, - 0xc8, 0x54, 0x7f, 0x0e, 0xfa, 0xaf, 0xaa, 0x75, 0x16, 0xd4, 0x92, 0xf4, 0x8b, 0x17, 0xed, 0xd5, - 0xe7, 0x87, 0x36, 0x41, 0x80, 0xa1, 0xc9, 0xbf, 0x92, 0x80, 0x11, 0x3a, 0x19, 0x1c, 0xf6, 0x89, - 0x23, 0xb2, 0xc6, 0x2a, 0x41, 0xca, 0x56, 0x5d, 0xbe, 0x29, 0x58, 0x9a, 0xe6, 0x3b, 0xbb, 0x0f, - 0xc5, 0xef, 0xd6, 0x4e, 0xcf, 0x63, 0x4d, 0xa1, 0xb8, 0xe8, 0x1d, 0x90, 0x6e, 0xa8, 0xd7, 0x2b, - 0x94, 0x0e, 0x5b, 0xb9, 0xcc, 0xee, 0x8f, 0xce, 0xed, 0x5b, 0x93, 0x23, 0x7b, 0x6a, 0xa3, 0x5e, - 0x94, 0x05, 0x1d, 0x59, 0x19, 0x68, 0xa8, 0xd7, 0x09, 0x8b, 0xc8, 0x82, 0x11, 0xd2, 0xaa, 0xed, - 0xa8, 0x46, 0x0d, 0xb3, 0x41, 0xe8, 0x16, 0x67, 0xe9, 0xe2, 0xbe, 0x07, 0x39, 0xe2, 0x0f, 0x12, - 0x20, 0x27, 0x2b, 0x43, 0x0d, 0xf5, 0xfa, 0x1c, 0x6d, 0x20, 0x23, 0x16, 0xd3, 0x1f, 0xfb, 0xf4, - 0xe4, 0x21, 0xba, 0x5b, 0xfe, 0x4d, 0x09, 0xc0, 0xd7, 0x18, 0x7a, 0x07, 0xe4, 0x34, 0xef, 0x89, - 0xe2, 0x3a, 0xdc, 0x86, 0x0f, 0x77, 0xb2, 0x45, 0x44, 0xdf, 0x2c, 0x37, 0x7f, 0xe3, 0xd6, 0xa4, - 0xa4, 0x8c, 0x68, 0x11, 0x53, 0xbc, 0x1d, 0x06, 0x9b, 0x56, 0x55, 0x75, 0x71, 0x85, 0xae, 0xe3, - 0x12, 0xb1, 0x79, 0x7e, 0x82, 0xd0, 0xba, 0x7d, 0x6b, 0x12, 0x31, 0xb1, 0x02, 0xc8, 0x32, 0xcd, - 0xfe, 0xc0, 0x5a, 0x08, 0x42, 0x40, 0xa6, 0xaf, 0x49, 0x30, 0x38, 0x1f, 0x38, 0xc9, 0x95, 0x87, - 0x81, 0x86, 0x69, 0xe8, 0xbb, 0xdc, 0x1f, 0x33, 0x8a, 0x78, 0x44, 0x05, 0x48, 0xb3, 0x4b, 0x75, - 0xee, 0x9e, 0xd8, 0xea, 0x14, 0xcf, 0x04, 0xeb, 0x1a, 0xde, 0x72, 0x74, 0x61, 0x0d, 0x45, 0x3c, - 0xa2, 0x0b, 0x90, 0x73, 0xb0, 0xd6, 0xb4, 0x75, 0x77, 0xaf, 0xa2, 0x99, 0x86, 0xab, 0x6a, 0x2e, - 0xbb, 0x9e, 0x55, 0xba, 0xe7, 0xf6, 0xad, 0xc9, 0xa3, 0x8c, 0xd7, 0x28, 0x84, 0xac, 0x8c, 0x88, - 0xa6, 0x39, 0xd6, 0x42, 0x46, 0xa8, 0x62, 0x57, 0xd5, 0xeb, 0x4e, 0x9e, 0xbd, 0xf8, 0x11, 0x8f, - 0x01, 0x59, 0xbe, 0x30, 0x10, 0xdc, 0xd8, 0xba, 0x00, 0x39, 0xd3, 0xc2, 0x76, 0xa8, 0x10, 0x95, - 0xa2, 0x23, 0x47, 0x21, 0x64, 0x65, 0x44, 0x34, 0x89, 0x22, 0xd5, 0x25, 0x66, 0x16, 0x0b, 0x45, - 0xab, 0xb9, 0xe5, 0xef, 0x87, 0x8d, 0xb7, 0x58, 0x63, 0xd6, 0xd8, 0x2b, 0x3d, 0xe5, 0x53, 0x8f, - 0xe2, 0xc9, 0x5f, 0xff, 0xd2, 0xe3, 0xe3, 0xdc, 0x35, 0xfc, 0xfd, 0xa9, 0xcb, 0x78, 0x8f, 0x98, - 0x9f, 0x83, 0xae, 0x51, 0x48, 0x52, 0x76, 0xbe, 0xa8, 0xea, 0x75, 0x71, 0xcd, 0x58, 0xe1, 0x4f, - 0xa8, 0x08, 0xfd, 0x8e, 0xab, 0xba, 0x4d, 0x87, 0x7f, 0xd4, 0x4b, 0xee, 0xe4, 0x6a, 0x25, 0xd3, - 0xa8, 0xae, 0x53, 0x48, 0x85, 0x63, 0xa0, 0x0b, 0xd0, 0xef, 0x9a, 0xbb, 0xd8, 0xe0, 0x2a, 0xdc, - 0xd7, 0xfc, 0xa6, 0xef, 0xa1, 0x18, 0x36, 0xd1, 0x48, 0x15, 0xd7, 0x71, 0x8d, 0x95, 0x55, 0x3b, - 0x2a, 0x59, 0x7d, 0xd0, 0x6f, 0x7b, 0x95, 0x16, 0xf7, 0x3d, 0x09, 0xb9, 0xa6, 0xa2, 0xf4, 0x64, - 0x65, 0xc4, 0x6b, 0x5a, 0xa7, 0x2d, 0xe8, 0x72, 0xe8, 0xc8, 0x21, 0xff, 0x00, 0xde, 0xfd, 0x9d, - 0xc4, 0x0f, 0xf8, 0xb4, 0xd8, 0x9f, 0x08, 0x1e, 0x58, 0xbc, 0x00, 0xb9, 0xa6, 0xb1, 0x65, 0x1a, - 0xf4, 0x2e, 0x20, 0xaf, 0xef, 0xc9, 0xfa, 0x2e, 0x19, 0x74, 0x8e, 0x28, 0x84, 0xac, 0x8c, 0x78, - 0x4d, 0x17, 0xd9, 0x2a, 0xa0, 0x0a, 0xc3, 0x3e, 0x14, 0x9d, 0xa8, 0x99, 0xd8, 0x89, 0x7a, 0x1f, - 0x9f, 0xa8, 0x87, 0xa3, 0xa3, 0xf8, 0x73, 0x75, 0xc8, 0x6b, 0x24, 0x68, 0xe8, 0x22, 0x80, 0x1f, - 0x1e, 0xe8, 0x3e, 0xc5, 0x60, 0x67, 0xc3, 0xfb, 0x31, 0x46, 0xac, 0xf7, 0x7c, 0x5c, 0xf4, 0x2e, - 0x18, 0x6b, 0xe8, 0x46, 0xc5, 0xc1, 0xf5, 0xed, 0x0a, 0x57, 0x30, 0x21, 0x49, 0xbf, 0xe5, 0x52, - 0x5a, 0xda, 0x9f, 0x3f, 0xdc, 0xbe, 0x35, 0x59, 0xe0, 0x21, 0xb4, 0x95, 0xa4, 0xac, 0x8c, 0x36, - 0x74, 0x63, 0x1d, 0xd7, 0xb7, 0xe7, 0xbd, 0xb6, 0x62, 0xf6, 0x03, 0x9f, 0x9e, 0x3c, 0xc4, 0xa7, - 0xeb, 0x21, 0xf9, 0x0c, 0xdd, 0x3b, 0xe7, 0xd3, 0x0c, 0x3b, 0x64, 0x4d, 0xa2, 0x8a, 0x07, 0xba, - 0xa3, 0x91, 0x51, 0xfc, 0x06, 0x36, 0xcd, 0x5f, 0xf9, 0x4f, 0x53, 0x92, 0xfc, 0x05, 0x09, 0xfa, - 0xe7, 0xaf, 0xac, 0xa9, 0xba, 0x8d, 0x16, 0x61, 0xd4, 0xf7, 0x9c, 0xf0, 0x24, 0x3f, 0x7e, 0xfb, - 0xd6, 0x64, 0x3e, 0xea, 0x5c, 0xde, 0x2c, 0xf7, 0x1d, 0x58, 0x4c, 0xf3, 0xc5, 0x4e, 0x0b, 0xd7, - 0x10, 0xa9, 0x16, 0x10, 0xb9, 0x75, 0x59, 0x1b, 0x11, 0xb3, 0x0c, 0x03, 0x8c, 0x5b, 0x07, 0x15, - 0xa1, 0xcf, 0x22, 0x3f, 0xf8, 0x8b, 0x81, 0x89, 0x8e, 0xce, 0x4b, 0xe1, 0xbd, 0x8d, 0x4c, 0x82, - 0x22, 0x7f, 0x24, 0x01, 0x30, 0x7f, 0xe5, 0xca, 0x86, 0xad, 0x5b, 0x75, 0xec, 0xde, 0x49, 0xc9, - 0x37, 0xe0, 0x70, 0x60, 0x95, 0x64, 0x6b, 0x11, 0xe9, 0xa7, 0x6e, 0xdf, 0x9a, 0x3c, 0x1e, 0x95, - 0x3e, 0x00, 0x26, 0x2b, 0x63, 0xfe, 0x7a, 0xc9, 0xd6, 0xda, 0x52, 0xad, 0x3a, 0xae, 0x47, 0x35, - 0xd9, 0x99, 0x6a, 0x00, 0x2c, 0x48, 0x75, 0xde, 0x71, 0xdb, 0xab, 0x76, 0x1d, 0x06, 0x7d, 0x95, - 0x38, 0x68, 0x1e, 0xd2, 0x2e, 0xff, 0xcd, 0x35, 0x2c, 0x77, 0xd6, 0xb0, 0x40, 0xe3, 0x5a, 0xf6, - 0x30, 0xe5, 0xbf, 0x90, 0x00, 0x7c, 0x9f, 0xfd, 0xf1, 0x74, 0x31, 0x12, 0xca, 0x79, 0xe0, 0x4d, - 0x1e, 0xa8, 0x54, 0xe3, 0xd8, 0x11, 0x7d, 0xfe, 0x74, 0x02, 0xc6, 0x36, 0x45, 0xe4, 0xf9, 0xb1, - 0xd7, 0xc1, 0x1a, 0x0c, 0x60, 0xc3, 0xb5, 0x75, 0xaa, 0x04, 0x62, 0xed, 0x27, 0x3a, 0x59, 0xbb, - 0x8d, 0x4c, 0xf4, 0x63, 0x36, 0x62, 0xd3, 0x9d, 0x93, 0x89, 0x68, 0xe3, 0x43, 0x49, 0xc8, 0x77, - 0xc2, 0x44, 0x73, 0x30, 0xa2, 0xd9, 0x98, 0x36, 0x54, 0x82, 0x3b, 0x7f, 0xa5, 0x82, 0x5f, 0x59, - 0x46, 0x00, 0x64, 0x65, 0x58, 0xb4, 0xf0, 0xec, 0x51, 0x03, 0x52, 0xf6, 0x11, 0xb7, 0x23, 0x50, - 0x3d, 0xd6, 0x79, 0x32, 0x4f, 0x1f, 0x62, 0x90, 0x30, 0x01, 0x96, 0x3f, 0x86, 0xfd, 0x56, 0x9a, - 0x40, 0x5e, 0x82, 0x11, 0xdd, 0xd0, 0x5d, 0x5d, 0xad, 0x57, 0xb6, 0xd4, 0xba, 0x6a, 0x68, 0x07, - 0xa9, 0x9a, 0x59, 0xc8, 0xe7, 0xc3, 0x46, 0xc8, 0xc9, 0xca, 0x30, 0x6f, 0x29, 0xb1, 0x06, 0x74, - 0x11, 0x06, 0xc4, 0x50, 0xa9, 0x03, 0x55, 0x1b, 0x02, 0x3d, 0x50, 0xe0, 0xfd, 0x4c, 0x12, 0x46, - 0x15, 0x5c, 0xfd, 0xff, 0xa6, 0xd8, 0x9f, 0x29, 0x96, 0x01, 0xd8, 0x74, 0x27, 0x01, 0xf6, 0x00, - 0xd6, 0x20, 0x01, 0x23, 0xc3, 0x28, 0xcc, 0x3b, 0x6e, 0xc0, 0x1e, 0xb7, 0x12, 0x90, 0x0d, 0xda, - 0xe3, 0xaf, 0x68, 0x56, 0x42, 0x8b, 0x7e, 0x24, 0x4a, 0xf1, 0x6f, 0x80, 0x76, 0x88, 0x44, 0x2d, - 0xde, 0xdb, 0x3d, 0x04, 0xfd, 0xcf, 0x04, 0xf4, 0xaf, 0xa9, 0xb6, 0xda, 0x70, 0x90, 0xd6, 0x52, - 0x69, 0x8a, 0xed, 0xc7, 0x96, 0x0f, 0x38, 0xf3, 0xdd, 0x8e, 0x98, 0x42, 0xf3, 0x63, 0x6d, 0x0a, - 0xcd, 0x9f, 0x80, 0x61, 0xb2, 0x1c, 0x0e, 0x1c, 0x61, 0x20, 0xda, 0x1e, 0x2a, 0x1d, 0xf3, 0xa9, - 0x84, 0xfb, 0xd9, 0x6a, 0xf9, 0x4a, 0xf0, 0x0c, 0xc3, 0x20, 0x81, 0xf0, 0x03, 0x33, 0x41, 0x3f, - 0xe2, 0x2f, 0x4b, 0x03, 0x9d, 0xb2, 0x02, 0x0d, 0xf5, 0x7a, 0x99, 0x3d, 0xa0, 0x25, 0x40, 0x3b, - 0xde, 0xce, 0x48, 0xc5, 0x57, 0x27, 0xc1, 0xbf, 0xf7, 0xf6, 0xad, 0xc9, 0x63, 0x0c, 0xbf, 0x15, - 0x46, 0x56, 0x46, 0xfd, 0x46, 0x41, 0xed, 0x69, 0x00, 0x22, 0x57, 0x85, 0x1d, 0x8f, 0x63, 0xcb, - 0x9d, 0xc3, 0xb7, 0x6f, 0x4d, 0x8e, 0x32, 0x2a, 0x7e, 0x9f, 0xac, 0x64, 0xc8, 0xc3, 0x3c, 0xf9, - 0x1d, 0xf0, 0xec, 0xcf, 0x4a, 0x80, 0xfc, 0x90, 0xaf, 0x60, 0xc7, 0x22, 0xeb, 0x33, 0x52, 0x88, - 0x07, 0xaa, 0x66, 0xa9, 0x7b, 0x21, 0xee, 0xe3, 0x8b, 0x42, 0x3c, 0x30, 0x53, 0xce, 0xf9, 0xe1, - 0x31, 0xc1, 0xed, 0xd8, 0xe6, 0x2c, 0xe1, 0xf4, 0x9c, 0xa9, 0x0b, 0xec, 0x96, 0x78, 0x78, 0x48, - 0xfe, 0x37, 0x12, 0x1c, 0x6b, 0xf1, 0x28, 0x8f, 0xd9, 0xbf, 0x06, 0xc8, 0x0e, 0x74, 0xf2, 0xef, - 0xb9, 0x31, 0xa6, 0xf7, 0xed, 0xa0, 0xa3, 0x76, 0x4b, 0xdc, 0xbd, 0x73, 0x11, 0x9e, 0x1d, 0x46, - 0xfc, 0x17, 0x12, 0x8c, 0x07, 0x87, 0xf7, 0x04, 0x59, 0x81, 0x6c, 0x70, 0x74, 0x2e, 0xc2, 0x03, - 0xbd, 0x88, 0xc0, 0xb9, 0x0f, 0xe1, 0xa3, 0xe7, 0xfd, 0xe9, 0xca, 0xf6, 0xce, 0x9e, 0xec, 0x59, - 0x1b, 0x82, 0xa7, 0xe8, 0xb4, 0x4d, 0x51, 0x7b, 0xfc, 0x1f, 0x09, 0x52, 0x6b, 0xa6, 0x59, 0x47, - 0x26, 0x8c, 0x1a, 0xa6, 0x5b, 0x21, 0x9e, 0x85, 0xab, 0x15, 0xbe, 0xe8, 0x66, 0x71, 0x70, 0x6e, - 0x7f, 0x4a, 0xfa, 0xce, 0xad, 0xc9, 0x56, 0x52, 0xca, 0x88, 0x61, 0xba, 0x25, 0xda, 0xb2, 0xc1, - 0x96, 0xe4, 0xef, 0x82, 0xa1, 0xf0, 0x60, 0x2c, 0x4a, 0xbe, 0xb0, 0xef, 0xc1, 0xc2, 0x64, 0x6e, - 0xdf, 0x9a, 0x1c, 0xf7, 0x67, 0x8c, 0xd7, 0x2c, 0x2b, 0xd9, 0xad, 0xc0, 0xe8, 0xec, 0x78, 0xd7, - 0xf7, 0x3e, 0x3d, 0x29, 0x9d, 0xfc, 0xb2, 0x04, 0xe0, 0xef, 0x3c, 0xa0, 0xc7, 0xe0, 0x68, 0x69, - 0x75, 0x65, 0xbe, 0xb2, 0xbe, 0x31, 0xbb, 0xb1, 0xb9, 0x5e, 0xd9, 0x5c, 0x59, 0x5f, 0x2b, 0xcf, - 0x2d, 0x5e, 0x58, 0x2c, 0xcf, 0xfb, 0xdb, 0xe3, 0x8e, 0x85, 0x35, 0x7d, 0x5b, 0xc7, 0x55, 0xf4, - 0x10, 0x8c, 0x87, 0xa1, 0xc9, 0x53, 0x79, 0x3e, 0x27, 0x15, 0xb2, 0x37, 0x6e, 0x4e, 0xa5, 0x59, - 0x2d, 0x86, 0xab, 0xe8, 0x04, 0x1c, 0x6e, 0x85, 0x5b, 0x5c, 0x59, 0xc8, 0x25, 0x0a, 0x43, 0x37, - 0x6e, 0x4e, 0x65, 0xbc, 0xa2, 0x0d, 0xc9, 0x80, 0x82, 0x90, 0x9c, 0x5e, 0xb2, 0x00, 0x37, 0x6e, - 0x4e, 0xf5, 0x33, 0x05, 0x16, 0x52, 0x1f, 0xf8, 0xec, 0xc4, 0xa1, 0xd2, 0x85, 0x8e, 0x1b, 0xe0, - 0x8f, 0x75, 0xd5, 0xdd, 0x75, 0x6f, 0x53, 0x3b, 0xbc, 0xeb, 0xfd, 0xa7, 0x03, 0x1d, 0x77, 0xbd, - 0x6b, 0xd8, 0xc0, 0x8e, 0xee, 0x1c, 0x68, 0xd7, 0xbb, 0xa7, 0x9d, 0x74, 0xf9, 0x77, 0xfb, 0x20, - 0xbb, 0xc0, 0x46, 0x21, 0x86, 0xc0, 0xe8, 0x4d, 0xd0, 0x6f, 0xd1, 0x34, 0xe2, 0xbd, 0x46, 0xeb, - 0xe0, 0xf0, 0x2c, 0xd9, 0x78, 0x67, 0xb9, 0x58, 0xea, 0x71, 0xf8, 0x61, 0x0e, 0x76, 0xc6, 0xcc, - 0x3f, 0x35, 0x95, 0xdd, 0xd7, 0x7e, 0x0f, 0xab, 0x59, 0xf8, 0xd6, 0x4a, 0x94, 0x9e, 0xcc, 0xce, - 0x85, 0x6c, 0x90, 0x16, 0x76, 0x3a, 0xec, 0x7d, 0x12, 0x1c, 0xa6, 0x50, 0x7e, 0x22, 0xa6, 0x90, - 0xa2, 0xd8, 0x3f, 0xd9, 0x49, 0x84, 0x25, 0xd5, 0xf1, 0xcf, 0x7a, 0xb0, 0xf3, 0x5c, 0x0f, 0xf0, - 0x44, 0x78, 0x3c, 0x30, 0x78, 0x94, 0xac, 0xac, 0x8c, 0xd5, 0x5b, 0x30, 0x1d, 0xb4, 0x10, 0x3a, - 0xd0, 0x97, 0xda, 0xdf, 0x56, 0x7b, 0xf0, 0x70, 0xdf, 0x25, 0x18, 0xf4, 0x63, 0x89, 0xc3, 0xff, - 0xaf, 0x44, 0xef, 0xb9, 0x23, 0x88, 0x8c, 0xde, 0x2f, 0xc1, 0x61, 0x3f, 0x9b, 0x07, 0xc9, 0xb2, - 0xff, 0xbf, 0xf1, 0xe8, 0x3e, 0x16, 0x42, 0x51, 0xe5, 0xb4, 0xa5, 0x2b, 0x2b, 0xe3, 0xcd, 0x56, - 0x54, 0xb2, 0x04, 0x1b, 0x0a, 0x46, 0x56, 0x27, 0x2f, 0x3e, 0x45, 0xd7, 0x7b, 0x68, 0x0e, 0x13, - 0x60, 0xff, 0x13, 0xc0, 0x32, 0x6d, 0x17, 0x57, 0xe9, 0x86, 0x5c, 0x5a, 0xf1, 0x9e, 0xe5, 0x15, - 0x40, 0xad, 0xc6, 0x8d, 0x1e, 0x60, 0xcc, 0xf8, 0x07, 0x18, 0xc7, 0xa1, 0x2f, 0x78, 0xc4, 0x8f, - 0x3d, 0x14, 0xd3, 0x1f, 0xe0, 0xe9, 0xf3, 0x8e, 0xcf, 0xf9, 0x7f, 0x95, 0x80, 0x93, 0xc1, 0xd7, - 0x43, 0x2f, 0x35, 0xb1, 0xbd, 0xe7, 0x4d, 0x51, 0x4b, 0xad, 0xe9, 0x46, 0xf0, 0x8e, 0xcf, 0xb1, - 0x60, 0xc2, 0xa7, 0xb0, 0x42, 0x4f, 0xb2, 0x01, 0x83, 0x6b, 0x6a, 0x0d, 0x2b, 0xf8, 0xa5, 0x26, - 0x76, 0xdc, 0x36, 0x87, 0xc8, 0x8f, 0x40, 0xbf, 0xb9, 0xbd, 0x2d, 0x5e, 0x69, 0xa7, 0x14, 0xfe, - 0x44, 0x44, 0xae, 0xeb, 0x0d, 0x9d, 0x9d, 0x06, 0x4b, 0x29, 0xec, 0x01, 0x4d, 0xc2, 0xa0, 0x66, - 0x36, 0x0d, 0x3e, 0xe3, 0xf2, 0x29, 0xf1, 0x81, 0x87, 0xa6, 0xc1, 0x66, 0x9c, 0xfc, 0x1c, 0x64, - 0xd9, 0x78, 0x3c, 0xe3, 0x1e, 0x83, 0x34, 0x3d, 0x4e, 0xe5, 0x8f, 0x3a, 0x40, 0x9e, 0x2f, 0xb3, - 0x03, 0xe7, 0x8c, 0x0a, 0x1b, 0x98, 0x3d, 0x94, 0x4a, 0x1d, 0x55, 0x79, 0x22, 0x3e, 0x34, 0x30, - 0x45, 0x79, 0x6a, 0xfc, 0xad, 0x3e, 0x38, 0xcc, 0xdf, 0xd0, 0xa9, 0x96, 0x3e, 0xb3, 0xe3, 0xba, - 0xe2, 0x16, 0x10, 0xf0, 0x52, 0x57, 0xb5, 0x74, 0x79, 0x0f, 0x52, 0x17, 0x5d, 0xd7, 0x42, 0x27, - 0xa1, 0xcf, 0x6e, 0xd6, 0xb1, 0xd8, 0xf1, 0xf1, 0xf6, 0xe4, 0x55, 0x4b, 0x9f, 0x26, 0x00, 0x4a, - 0xb3, 0x8e, 0x15, 0x06, 0x82, 0xca, 0x30, 0xb9, 0xdd, 0xac, 0xd7, 0xf7, 0x2a, 0x55, 0x4c, 0xff, - 0xe7, 0x8e, 0xf7, 0x79, 0x7b, 0x7c, 0xdd, 0x52, 0xc5, 0x37, 0xf2, 0x88, 0x6e, 0x8e, 0x53, 0xb0, - 0x79, 0x0a, 0x25, 0x3e, 0x6d, 0x5f, 0x16, 0x30, 0xf2, 0xef, 0x27, 0x20, 0x2d, 0x48, 0xd3, 0x13, - 0xe0, 0xb8, 0x8e, 0x35, 0xd7, 0x14, 0x6f, 0x4c, 0xbc, 0x67, 0x84, 0x20, 0x59, 0xe3, 0x26, 0xca, - 0x5c, 0x3c, 0xa4, 0x90, 0x07, 0xd2, 0xe6, 0x9d, 0xcb, 0x27, 0x6d, 0x56, 0x93, 0x58, 0x2d, 0x65, - 0x99, 0x62, 0x69, 0x76, 0xf1, 0x90, 0x42, 0x9f, 0x50, 0x1e, 0xfa, 0xc9, 0xcc, 0x70, 0xd9, 0x87, - 0x07, 0x49, 0x3b, 0x7f, 0x46, 0x47, 0xa0, 0xcf, 0x52, 0x5d, 0x8d, 0x1d, 0xa9, 0x23, 0x1d, 0xec, - 0x11, 0x3d, 0x03, 0xfd, 0xec, 0xc2, 0x67, 0xf4, 0x1f, 0x5a, 0x10, 0x65, 0xb0, 0x2f, 0x6b, 0x11, - 0xbe, 0xd7, 0x54, 0xd7, 0xc5, 0xb6, 0x41, 0x08, 0x32, 0x70, 0x84, 0x20, 0xb5, 0x65, 0x56, 0xf7, - 0xf8, 0x3f, 0xd9, 0xa0, 0xbf, 0xf9, 0xe7, 0xff, 0xa9, 0x3f, 0x54, 0x68, 0x27, 0xfb, 0xdf, 0x42, - 0x59, 0xd1, 0x58, 0x22, 0x40, 0x65, 0x18, 0x53, 0xab, 0x55, 0x9d, 0x78, 0x35, 0x59, 0x81, 0xea, - 0x34, 0x42, 0x38, 0xf4, 0x3f, 0x47, 0x75, 0xb2, 0x05, 0xf2, 0x11, 0x4a, 0x1c, 0xbe, 0x94, 0x81, - 0x01, 0x8b, 0x31, 0x25, 0x9f, 0x87, 0xd1, 0x16, 0x4e, 0x09, 0x7f, 0xbb, 0xba, 0x51, 0x15, 0x97, - 0x15, 0xc8, 0x6f, 0xd2, 0x46, 0xbf, 0x8e, 0xc7, 0xde, 0x45, 0xd1, 0xdf, 0xa5, 0xf7, 0x74, 0xbe, - 0xd8, 0x35, 0x1c, 0xb8, 0xd8, 0xa5, 0x5a, 0x7a, 0x29, 0x43, 0xe9, 0xf3, 0xeb, 0x5c, 0xb3, 0xbc, - 0x83, 0x5d, 0xe5, 0x9a, 0x36, 0xed, 0x1a, 0xc9, 0xd2, 0x22, 0xfb, 0x92, 0x2e, 0xd5, 0xd2, 0x1d, - 0xea, 0x8e, 0xfe, 0xd7, 0xfa, 0x9c, 0xf3, 0x81, 0xdf, 0xf4, 0x92, 0x57, 0x6a, 0x61, 0x76, 0x6d, - 0xd1, 0xf3, 0xe3, 0xdf, 0x4c, 0xc0, 0xf1, 0x80, 0x1f, 0x07, 0x80, 0x5b, 0xdd, 0xb9, 0xd0, 0xde, - 0xe3, 0x7b, 0xb8, 0xdc, 0x75, 0x19, 0x52, 0x04, 0x1e, 0xc5, 0x7c, 0x9c, 0x3f, 0xff, 0xab, 0x5f, - 0xff, 0xe7, 0x72, 0xf8, 0xad, 0x55, 0xc8, 0x2a, 0x94, 0x48, 0xe9, 0xfd, 0xbd, 0xeb, 0x2f, 0xe7, - 0x7f, 0xa8, 0xd0, 0xb9, 0x73, 0x6a, 0x8c, 0xea, 0xf0, 0xdb, 0xa7, 0x41, 0xee, 0x50, 0xf2, 0xb0, - 0x88, 0xd9, 0xbd, 0x88, 0xda, 0x47, 0x38, 0xee, 0x74, 0xfe, 0xbf, 0x9b, 0x05, 0x7b, 0x2c, 0xc7, - 0xae, 0xc3, 0x91, 0xe7, 0xc9, 0xd8, 0xfe, 0x32, 0x59, 0x04, 0xf6, 0x23, 0xde, 0xdb, 0x3c, 0x89, - 0xff, 0xe3, 0x2e, 0xf1, 0xa6, 0x0e, 0x7c, 0xfe, 0xf8, 0x02, 0xf1, 0xa1, 0xe9, 0x8e, 0xf9, 0x62, - 0x3a, 0x90, 0x2c, 0x94, 0x00, 0xa6, 0xfc, 0xcb, 0x12, 0x1c, 0x6d, 0x19, 0x9a, 0xc7, 0xf8, 0x85, - 0x36, 0x57, 0x15, 0x0e, 0x54, 0xd9, 0x2c, 0xb4, 0x61, 0xf6, 0xe1, 0x58, 0x66, 0x19, 0x17, 0x21, - 0x6e, 0x9f, 0x85, 0xc3, 0x61, 0x66, 0x85, 0x9a, 0x1e, 0x84, 0xe1, 0xf0, 0x8e, 0x30, 0x57, 0xd7, - 0x50, 0x68, 0x4f, 0x58, 0xae, 0x44, 0xf5, 0xec, 0xc9, 0x5a, 0x86, 0x8c, 0x07, 0xca, 0x4b, 0xe0, - 0x9e, 0x45, 0xf5, 0x31, 0xe5, 0x8f, 0x48, 0x30, 0x15, 0x1e, 0x21, 0x50, 0x0c, 0xed, 0x8f, 0xd9, - 0x3b, 0x66, 0xe2, 0xd7, 0x25, 0xb8, 0xaf, 0x0b, 0x4f, 0x5c, 0x01, 0x2f, 0xc3, 0x78, 0x60, 0x27, - 0x40, 0x84, 0x70, 0x61, 0xf6, 0x93, 0xf1, 0x65, 0xa8, 0xb7, 0xf0, 0xbd, 0x87, 0x28, 0xe5, 0xf3, - 0x7f, 0x38, 0x39, 0xd6, 0xda, 0xe7, 0x28, 0x63, 0xad, 0xab, 0xf7, 0x3b, 0xe8, 0x1f, 0xaf, 0x4a, - 0xf0, 0x48, 0x58, 0xd4, 0x36, 0xf5, 0xec, 0x1b, 0x65, 0x87, 0xff, 0x28, 0xc1, 0xc9, 0x5e, 0x98, - 0xe3, 0x06, 0xd9, 0x82, 0x31, 0xbf, 0xd2, 0x8e, 0xda, 0x63, 0x5f, 0xf5, 0x3b, 0xf3, 0x52, 0xe4, - 0x51, 0xbb, 0x0b, 0x8a, 0xb7, 0xf8, 0xc4, 0x0a, 0x9a, 0xdc, 0x53, 0x72, 0x78, 0x37, 0x57, 0x28, - 0x39, 0xb4, 0x9f, 0xdb, 0xc6, 0x16, 0x89, 0x36, 0xb6, 0xf0, 0x4b, 0x73, 0xf9, 0x2a, 0x8f, 0x5b, - 0x6d, 0xf6, 0xe0, 0xde, 0x0e, 0x63, 0x6d, 0x5c, 0x99, 0xcf, 0xea, 0x7d, 0x78, 0xb2, 0x82, 0x5a, - 0x9d, 0x55, 0xde, 0x83, 0x49, 0x3a, 0x6e, 0x1b, 0x45, 0xdf, 0x6d, 0x91, 0x1b, 0x3c, 0xb6, 0xb4, - 0x1d, 0x9a, 0xcb, 0xbe, 0x08, 0xfd, 0xcc, 0xce, 0x5c, 0xdc, 0x03, 0x38, 0x0a, 0x27, 0x20, 0x7f, - 0x42, 0xc4, 0xb2, 0x79, 0xc1, 0x76, 0xfb, 0x39, 0xd4, 0x8b, 0xac, 0x77, 0x68, 0x0e, 0x05, 0x94, - 0xf1, 0x4d, 0x11, 0xd5, 0xda, 0x73, 0xc7, 0xd5, 0xa1, 0xdd, 0xb1, 0xa8, 0xc6, 0x74, 0x73, 0x77, - 0xc3, 0xd7, 0x2f, 0x8a, 0xf0, 0xe5, 0xc9, 0x14, 0x13, 0xbe, 0xde, 0x18, 0xd5, 0x7b, 0x81, 0x2c, - 0x86, 0xcd, 0xbf, 0x8c, 0x81, 0xec, 0x7b, 0x12, 0x1c, 0xa3, 0xb2, 0x05, 0x37, 0x22, 0xf6, 0xab, - 0xf2, 0xc7, 0x00, 0x39, 0xb6, 0x56, 0x69, 0x3b, 0xbb, 0x73, 0x8e, 0xad, 0x5d, 0x09, 0xe5, 0x97, - 0xc7, 0x00, 0x55, 0x43, 0xdb, 0x4d, 0x14, 0x9a, 0x9d, 0x92, 0xcb, 0x55, 0x03, 0xbb, 0x19, 0x6d, - 0xcc, 0x99, 0xba, 0x03, 0xe6, 0xfc, 0x86, 0x04, 0x85, 0x76, 0x22, 0x73, 0xf3, 0xe9, 0x70, 0x24, - 0xf4, 0x92, 0x20, 0x6a, 0xc1, 0xc7, 0x7a, 0xd9, 0xca, 0x89, 0x4c, 0xa3, 0xc3, 0x36, 0xbe, 0xdb, - 0x75, 0xc0, 0x64, 0xd8, 0x43, 0x5b, 0x2b, 0xeb, 0x37, 0x6c, 0xfa, 0x7c, 0xa9, 0x25, 0xae, 0xfe, - 0xa5, 0xa8, 0xbd, 0xaf, 0xc3, 0x44, 0x07, 0xae, 0xef, 0x76, 0xde, 0xdb, 0xe9, 0x68, 0xcc, 0x3b, - 0x5d, 0xbe, 0x3f, 0xcd, 0x67, 0x42, 0xf8, 0x04, 0x76, 0x60, 0x2d, 0xd6, 0xee, 0x0a, 0x97, 0xfc, - 0x56, 0xb8, 0xa7, 0x2d, 0x16, 0xe7, 0xad, 0x08, 0xa9, 0x1d, 0xdd, 0x71, 0x39, 0x5b, 0x0f, 0x75, - 0x62, 0x2b, 0x82, 0x4d, 0x71, 0x64, 0x04, 0x39, 0x4a, 0x7a, 0xcd, 0x34, 0xeb, 0x9c, 0x0d, 0xf9, - 0x32, 0x8c, 0x06, 0xda, 0xf8, 0x20, 0x67, 0x20, 0x65, 0x99, 0xfc, 0xf3, 0x03, 0x83, 0xa7, 0x8e, - 0x77, 0xdc, 0xbd, 0x37, 0xcd, 0x3a, 0x17, 0x9b, 0xc2, 0xcb, 0xe3, 0x80, 0x18, 0x31, 0xba, 0x91, - 0x2f, 0x86, 0x58, 0x87, 0xb1, 0x50, 0x2b, 0x1f, 0xe4, 0x87, 0x7a, 0x49, 0x70, 0xea, 0x3b, 0x87, - 0xa1, 0x8f, 0x52, 0x45, 0x1f, 0x97, 0x00, 0x02, 0x6f, 0x84, 0xa7, 0x3b, 0x91, 0x69, 0xbf, 0x26, - 0x2e, 0xcc, 0xf4, 0x0c, 0xcf, 0x6b, 0xb6, 0x93, 0xef, 0xf9, 0x77, 0xdf, 0xfe, 0x68, 0xe2, 0x01, - 0x24, 0xcf, 0x74, 0x58, 0x8d, 0x07, 0xe6, 0xcb, 0xe7, 0x42, 0x77, 0xdf, 0x1f, 0xef, 0x6d, 0x28, - 0xc1, 0xd9, 0x74, 0xaf, 0xe0, 0x9c, 0xb1, 0xf3, 0x94, 0xb1, 0xd3, 0xe8, 0xa9, 0x78, 0xc6, 0x66, - 0xde, 0x19, 0x9e, 0x34, 0xef, 0x46, 0xbf, 0x2b, 0xc1, 0x78, 0xbb, 0x25, 0x1d, 0x3a, 0xdb, 0x1b, - 0x17, 0xad, 0x25, 0x45, 0xe1, 0xdc, 0x01, 0x30, 0xb9, 0x28, 0x0b, 0x54, 0x94, 0x59, 0xf4, 0xdc, - 0x01, 0x44, 0x99, 0x09, 0xee, 0xef, 0xff, 0x6f, 0x09, 0xee, 0xed, 0xba, 0x42, 0x42, 0xb3, 0xbd, - 0x71, 0xd9, 0xa5, 0x76, 0x2a, 0x94, 0x7e, 0x18, 0x12, 0x5c, 0xe2, 0xe7, 0xa9, 0xc4, 0x97, 0xd1, - 0xe2, 0x41, 0x24, 0x6e, 0xfb, 0x12, 0x05, 0xfd, 0x76, 0xf8, 0x64, 0x61, 0x77, 0x77, 0x6a, 0x59, - 0x78, 0xc4, 0x4c, 0x8c, 0xd6, 0xa2, 0x56, 0x7e, 0x0b, 0x15, 0x41, 0x41, 0x6b, 0x3f, 0xa4, 0xd1, - 0x66, 0xde, 0x19, 0x0e, 0xfc, 0xef, 0x46, 0xff, 0x4b, 0x6a, 0x7f, 0x50, 0xf0, 0x99, 0xae, 0x2c, - 0x76, 0x5e, 0x54, 0x15, 0xce, 0xee, 0x1f, 0x91, 0x0b, 0xd9, 0xa0, 0x42, 0xd6, 0x10, 0xbe, 0xd3, - 0x42, 0xb6, 0x35, 0x22, 0xfa, 0x9a, 0x04, 0xe3, 0xed, 0xd6, 0x24, 0x31, 0xd3, 0xb2, 0xcb, 0x22, - 0x2b, 0x66, 0x5a, 0x76, 0x5b, 0x00, 0xc9, 0x6f, 0xa2, 0xc2, 0x9f, 0x41, 0x4f, 0x77, 0x12, 0xbe, - 0xab, 0x15, 0xc9, 0x5c, 0xec, 0x5a, 0xe4, 0xc7, 0xcc, 0xc5, 0x5e, 0xd6, 0x31, 0x31, 0x73, 0xb1, - 0xa7, 0x35, 0x46, 0xfc, 0x5c, 0xf4, 0x24, 0xeb, 0xd1, 0x8c, 0x0e, 0xfa, 0x4d, 0x09, 0x86, 0x42, - 0x15, 0x31, 0x7a, 0xb2, 0x2b, 0xa3, 0xed, 0x16, 0x0c, 0x85, 0x53, 0xfb, 0x41, 0xe1, 0xb2, 0x2c, - 0x52, 0x59, 0xe6, 0xd0, 0xec, 0x41, 0x64, 0x09, 0xbf, 0x2b, 0xfd, 0x86, 0x04, 0x63, 0x6d, 0xaa, - 0xcc, 0x98, 0x59, 0xd8, 0xb9, 0x68, 0x2e, 0x9c, 0xdd, 0x3f, 0x22, 0x97, 0xea, 0x02, 0x95, 0xea, - 0x27, 0xd0, 0xb3, 0x07, 0x91, 0x2a, 0x90, 0x9f, 0x6f, 0xf9, 0xe7, 0xae, 0x02, 0xe3, 0xa0, 0x33, - 0xfb, 0x64, 0x4c, 0x08, 0xf4, 0xcc, 0xbe, 0xf1, 0xb8, 0x3c, 0x2f, 0x50, 0x79, 0x9e, 0x47, 0xab, - 0x3f, 0x9c, 0x3c, 0xad, 0x69, 0xfd, 0x8b, 0xad, 0x37, 0x00, 0xbb, 0x7b, 0x51, 0xdb, 0x62, 0xb5, - 0xf0, 0xd4, 0xbe, 0x70, 0xb8, 0x50, 0x67, 0xa9, 0x50, 0xa7, 0xd0, 0x13, 0x9d, 0x84, 0x0a, 0x1c, - 0xae, 0xd3, 0x8d, 0x6d, 0x73, 0xe6, 0x9d, 0xac, 0x04, 0x7e, 0x37, 0xfa, 0x29, 0x71, 0xb0, 0xe9, - 0x44, 0xd7, 0x71, 0x03, 0x75, 0x6c, 0xe1, 0x91, 0x1e, 0x20, 0x39, 0x5f, 0x0f, 0x50, 0xbe, 0x26, - 0xd0, 0xf1, 0x4e, 0x7c, 0x91, 0x5a, 0x16, 0x7d, 0x50, 0xf2, 0xce, 0x42, 0x9e, 0xec, 0x4e, 0x3b, - 0x58, 0xec, 0x16, 0x1e, 0xed, 0x09, 0x96, 0x73, 0xf2, 0x10, 0xe5, 0x64, 0x0a, 0x4d, 0x74, 0xe4, - 0x84, 0x95, 0xbe, 0x77, 0xfa, 0xe4, 0xc0, 0x8d, 0xa3, 0x30, 0xd9, 0x61, 0x44, 0xf7, 0x7a, 0xcc, - 0x3b, 0xae, 0x2e, 0x17, 0x61, 0x63, 0x2f, 0xba, 0x76, 0xb8, 0x5a, 0x7b, 0xf0, 0xeb, 0xaf, 0xbd, - 0xbd, 0x10, 0xfb, 0xb7, 0x29, 0x40, 0xcb, 0x4e, 0x6d, 0xce, 0xc6, 0xec, 0x9f, 0xda, 0xf1, 0x59, - 0x1e, 0xb9, 0xe1, 0x25, 0xfd, 0x50, 0x37, 0xbc, 0x96, 0x43, 0x77, 0xa6, 0x12, 0xfb, 0xbb, 0x97, - 0xd9, 0xf3, 0xc5, 0xa9, 0xe4, 0x8f, 0xe4, 0xe2, 0x54, 0xfb, 0x73, 0xd5, 0xa9, 0x3b, 0x77, 0x01, - 0xa3, 0xef, 0xa0, 0x97, 0x50, 0xf8, 0x7d, 0xc8, 0xfe, 0x2e, 0xf7, 0x21, 0xf3, 0x1d, 0x2f, 0x3d, - 0x72, 0x6c, 0x74, 0x5a, 0x7c, 0xa0, 0x77, 0xa0, 0xb7, 0x93, 0xb0, 0xfc, 0x0b, 0xbe, 0xfe, 0x16, - 0xc2, 0x71, 0x28, 0xb4, 0xba, 0x93, 0x37, 0xa9, 0x3f, 0x9a, 0x84, 0xdc, 0xb2, 0x53, 0x2b, 0x57, - 0x75, 0xf7, 0x2e, 0xf9, 0xda, 0x73, 0x9d, 0x2f, 0xb5, 0xa0, 0xdb, 0xb7, 0x26, 0x87, 0x99, 0x4e, - 0xbb, 0x68, 0xb2, 0x01, 0x23, 0x91, 0xab, 0xc4, 0xdc, 0xb3, 0xe6, 0x0f, 0x72, 0xa3, 0x39, 0x42, - 0x4a, 0xa6, 0x77, 0x10, 0x02, 0xfe, 0x8d, 0xae, 0xb7, 0x77, 0x66, 0xe6, 0x50, 0x17, 0xef, 0xe6, - 0x0d, 0x40, 0xdf, 0x66, 0x05, 0xc8, 0x47, 0x8d, 0xe2, 0x59, 0xec, 0x8f, 0x25, 0x18, 0x5c, 0x76, - 0x44, 0x29, 0x88, 0x7f, 0x4c, 0xef, 0x1f, 0x3d, 0xe3, 0x7d, 0x67, 0x35, 0xd9, 0x9b, 0xdf, 0x8a, - 0x6f, 0xaf, 0xfa, 0x4a, 0x38, 0x0c, 0x63, 0x01, 0x39, 0x3d, 0xf9, 0x7f, 0x27, 0x41, 0xe3, 0x63, - 0x09, 0xd7, 0x74, 0xc3, 0xab, 0x22, 0xf1, 0x5f, 0xd5, 0xdb, 0x15, 0xbe, 0x9e, 0x53, 0x07, 0xd5, - 0xf3, 0x2e, 0x0d, 0x10, 0x11, 0x7d, 0x7a, 0x1b, 0x5f, 0xcb, 0xad, 0x77, 0x7f, 0xa4, 0x7d, 0x7c, - 0x56, 0x27, 0x72, 0xc3, 0x47, 0x7e, 0x5d, 0x82, 0xa1, 0x65, 0xa7, 0xb6, 0x69, 0x54, 0xff, 0x9f, - 0xf7, 0xdf, 0x6d, 0x38, 0x1c, 0x92, 0xf4, 0x2e, 0xa9, 0xf4, 0xd4, 0xab, 0x29, 0x48, 0x2e, 0x3b, - 0x35, 0xf4, 0x12, 0x8c, 0x44, 0x8b, 0x86, 0x8e, 0xb5, 0x60, 0x6b, 0x46, 0xe8, 0xbc, 0x5e, 0xeb, - 0x9c, 0x3d, 0xd0, 0x2e, 0x0c, 0x85, 0x33, 0xc7, 0x89, 0x2e, 0x44, 0x42, 0x90, 0x85, 0x27, 0x7a, - 0x85, 0xf4, 0x06, 0x7b, 0x07, 0xa4, 0xbd, 0xa0, 0x77, 0x7f, 0x17, 0x6c, 0x01, 0xd4, 0xb9, 0xba, - 0x6d, 0x13, 0x56, 0x88, 0xf6, 0xa2, 0x21, 0xa5, 0x9b, 0xf6, 0x22, 0xb0, 0x5d, 0xb5, 0xd7, 0x69, - 0x6a, 0x6d, 0x01, 0x04, 0xe6, 0xc1, 0x83, 0x5d, 0x28, 0xf8, 0x60, 0x85, 0xc7, 0x7b, 0x02, 0xf3, - 0x5e, 0x3a, 0xdd, 0xe1, 0x62, 0xfc, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xcd, 0x83, 0x8b, - 0x22, 0x94, 0x00, 0x00, + // 9584 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0xd7, + 0x71, 0xd8, 0xcd, 0x7e, 0x00, 0xbb, 0x8d, 0x05, 0xb0, 0x78, 0xc0, 0xdd, 0xed, 0x2d, 0x8f, 0x00, + 0x38, 0xfc, 0x3a, 0x1e, 0x49, 0x80, 0x3c, 0xf2, 0x8e, 0xc7, 0x3d, 0x89, 0x34, 0x16, 0xbb, 0x87, + 0x03, 0x0f, 0x5f, 0x1c, 0x00, 0x47, 0x7d, 0x39, 0x5b, 0x83, 0xdd, 0x87, 0xc5, 0x10, 0xbb, 0x33, + 0xc3, 0x99, 0xd9, 0x3b, 0x80, 0x92, 0xaa, 0x68, 0x49, 0x51, 0xa4, 0x73, 0x1c, 0x49, 0x91, 0xcb, + 0x91, 0x68, 0x9d, 0x22, 0x59, 0x4e, 0xe4, 0xc8, 0x4a, 0xfc, 0x21, 0x45, 0x89, 0x93, 0x54, 0x45, + 0x4a, 0xe2, 0x58, 0x52, 0x2a, 0x2e, 0xa9, 0xe2, 0x4a, 0x1c, 0x57, 0x7c, 0x76, 0x28, 0x95, 0xc3, + 0x28, 0x4a, 0x2c, 0x9f, 0xe5, 0xc4, 0x29, 0xfd, 0x48, 0xea, 0x7d, 0xcd, 0xd7, 0x7e, 0xcc, 0x02, + 0xba, 0x13, 0xe5, 0x38, 0xbf, 0xb0, 0xd3, 0xaf, 0xbb, 0x5f, 0x77, 0xbf, 0xee, 0x7e, 0xfd, 0xde, + 0xbc, 0x37, 0x80, 0x7f, 0x79, 0x01, 0xa6, 0xeb, 0x86, 0x51, 0x6f, 0xe0, 0x59, 0xd3, 0x32, 0x1c, + 0x63, 0xab, 0xb5, 0x3d, 0x5b, 0xc3, 0x76, 0xd5, 0xd2, 0x4c, 0xc7, 0xb0, 0x66, 0x28, 0x0c, 0x8d, + 0x32, 0x8c, 0x19, 0x81, 0x21, 0x2f, 0xc3, 0xd8, 0x45, 0xad, 0x81, 0x4b, 0x2e, 0xe2, 0x3a, 0x76, + 0xd0, 0x79, 0x48, 0x6c, 0x6b, 0x0d, 0x9c, 0x93, 0xa6, 0xe3, 0xa7, 0x86, 0xce, 0xdc, 0x37, 0x13, + 0x22, 0x9a, 0x09, 0x52, 0xac, 0x11, 0xb0, 0x42, 0x29, 0xe4, 0x6f, 0x27, 0x60, 0xbc, 0x43, 0x2b, + 0x42, 0x90, 0xd0, 0xd5, 0x26, 0xe1, 0x28, 0x9d, 0x4a, 0x2b, 0xf4, 0x37, 0xca, 0xc1, 0xa0, 0xa9, + 0x56, 0x77, 0xd5, 0x3a, 0xce, 0xc5, 0x28, 0x58, 0x3c, 0xa2, 0x49, 0x80, 0x1a, 0x36, 0xb1, 0x5e, + 0xc3, 0x7a, 0x75, 0x3f, 0x17, 0x9f, 0x8e, 0x9f, 0x4a, 0x2b, 0x3e, 0x08, 0x7a, 0x18, 0xc6, 0xcc, + 0xd6, 0x56, 0x43, 0xab, 0x56, 0x7c, 0x68, 0x30, 0x1d, 0x3f, 0x95, 0x54, 0xb2, 0xac, 0xa1, 0xe4, + 0x21, 0x3f, 0x08, 0xa3, 0xd7, 0xb0, 0xba, 0xeb, 0x47, 0x1d, 0xa2, 0xa8, 0x23, 0x04, 0xec, 0x43, + 0x9c, 0x87, 0x4c, 0x13, 0xdb, 0xb6, 0x5a, 0xc7, 0x15, 0x67, 0xdf, 0xc4, 0xb9, 0x04, 0xd5, 0x7e, + 0xba, 0x4d, 0xfb, 0xb0, 0xe6, 0x43, 0x9c, 0x6a, 0x63, 0xdf, 0xc4, 0x68, 0x0e, 0xd2, 0x58, 0x6f, + 0x35, 0x19, 0x87, 0x64, 0x17, 0xfb, 0x95, 0xf5, 0x56, 0x33, 0xcc, 0x25, 0x45, 0xc8, 0x38, 0x8b, + 0x41, 0x1b, 0x5b, 0x57, 0xb5, 0x2a, 0xce, 0x0d, 0x50, 0x06, 0x0f, 0xb6, 0x31, 0x58, 0x67, 0xed, + 0x61, 0x1e, 0x82, 0x0e, 0xcd, 0x43, 0x1a, 0xef, 0x39, 0x58, 0xb7, 0x35, 0x43, 0xcf, 0x0d, 0x52, + 0x26, 0xf7, 0x77, 0x18, 0x45, 0xdc, 0xa8, 0x85, 0x59, 0x78, 0x74, 0xe8, 0x1c, 0x0c, 0x1a, 0xa6, + 0xa3, 0x19, 0xba, 0x9d, 0x4b, 0x4d, 0x4b, 0xa7, 0x86, 0xce, 0x9c, 0xec, 0xe8, 0x08, 0xab, 0x0c, + 0x47, 0x11, 0xc8, 0x68, 0x11, 0xb2, 0xb6, 0xd1, 0xb2, 0xaa, 0xb8, 0x52, 0x35, 0x6a, 0xb8, 0xa2, + 0xe9, 0xdb, 0x46, 0x2e, 0x4d, 0x19, 0x4c, 0xb5, 0x2b, 0x42, 0x11, 0xe7, 0x8d, 0x1a, 0x5e, 0xd4, + 0xb7, 0x0d, 0x65, 0xc4, 0x0e, 0x3c, 0xa3, 0x63, 0x30, 0x60, 0xef, 0xeb, 0x8e, 0xba, 0x97, 0xcb, + 0x50, 0x0f, 0xe1, 0x4f, 0xf2, 0x6f, 0x0c, 0xc0, 0x68, 0x3f, 0x2e, 0x76, 0x01, 0x92, 0xdb, 0x44, + 0xcb, 0x5c, 0xec, 0x20, 0x36, 0x60, 0x34, 0x41, 0x23, 0x0e, 0x1c, 0xd2, 0x88, 0x73, 0x30, 0xa4, + 0x63, 0xdb, 0xc1, 0x35, 0xe6, 0x11, 0xf1, 0x3e, 0x7d, 0x0a, 0x18, 0x51, 0xbb, 0x4b, 0x25, 0x0e, + 0xe5, 0x52, 0x6f, 0x81, 0x51, 0x57, 0xa4, 0x8a, 0xa5, 0xea, 0x75, 0xe1, 0x9b, 0xb3, 0x51, 0x92, + 0xcc, 0x94, 0x05, 0x9d, 0x42, 0xc8, 0x94, 0x11, 0x1c, 0x78, 0x46, 0x25, 0x00, 0x43, 0xc7, 0xc6, + 0x76, 0xa5, 0x86, 0xab, 0x8d, 0x5c, 0xaa, 0x8b, 0x95, 0x56, 0x09, 0x4a, 0x9b, 0x95, 0x0c, 0x06, + 0xad, 0x36, 0xd0, 0xd3, 0x9e, 0xab, 0x0d, 0x76, 0xf1, 0x94, 0x65, 0x16, 0x64, 0x6d, 0xde, 0xb6, + 0x09, 0x23, 0x16, 0x26, 0x7e, 0x8f, 0x6b, 0x5c, 0xb3, 0x34, 0x15, 0x62, 0x26, 0x52, 0x33, 0x85, + 0x93, 0x31, 0xc5, 0x86, 0x2d, 0xff, 0x23, 0xba, 0x17, 0x5c, 0x40, 0x85, 0xba, 0x15, 0xd0, 0x2c, + 0x94, 0x11, 0xc0, 0x15, 0xb5, 0x89, 0xf3, 0x2f, 0xc3, 0x48, 0xd0, 0x3c, 0x68, 0x02, 0x92, 0xb6, + 0xa3, 0x5a, 0x0e, 0xf5, 0xc2, 0xa4, 0xc2, 0x1e, 0x50, 0x16, 0xe2, 0x58, 0xaf, 0xd1, 0x2c, 0x97, + 0x54, 0xc8, 0x4f, 0xf4, 0x13, 0x9e, 0xc2, 0x71, 0xaa, 0xf0, 0x03, 0xed, 0x23, 0x1a, 0xe0, 0x1c, + 0xd6, 0x3b, 0xff, 0x14, 0x0c, 0x07, 0x14, 0xe8, 0xb7, 0x6b, 0xf9, 0x5d, 0x70, 0xb4, 0x23, 0x6b, + 0xf4, 0x16, 0x98, 0x68, 0xe9, 0x9a, 0xee, 0x60, 0xcb, 0xb4, 0x30, 0xf1, 0x58, 0xd6, 0x55, 0xee, + 0xbf, 0x0c, 0x76, 0xf1, 0xb9, 0x4d, 0x3f, 0x36, 0xe3, 0xa2, 0x8c, 0xb7, 0xda, 0x81, 0xa7, 0xd3, + 0xa9, 0xd7, 0x07, 0xb3, 0xaf, 0xbc, 0xf2, 0xca, 0x2b, 0x31, 0xf9, 0x2b, 0x03, 0x30, 0xd1, 0x29, + 0x66, 0x3a, 0x86, 0xef, 0x31, 0x18, 0xd0, 0x5b, 0xcd, 0x2d, 0x6c, 0x51, 0x23, 0x25, 0x15, 0xfe, + 0x84, 0xe6, 0x20, 0xd9, 0x50, 0xb7, 0x70, 0x23, 0x97, 0x98, 0x96, 0x4e, 0x8d, 0x9c, 0x79, 0xb8, + 0xaf, 0xa8, 0x9c, 0x59, 0x22, 0x24, 0x0a, 0xa3, 0x44, 0xcf, 0x40, 0x82, 0xa7, 0x68, 0xc2, 0xe1, + 0x74, 0x7f, 0x1c, 0x48, 0x2c, 0x29, 0x94, 0x0e, 0xdd, 0x05, 0x69, 0xf2, 0x97, 0xf9, 0xc6, 0x00, + 0x95, 0x39, 0x45, 0x00, 0xc4, 0x2f, 0x50, 0x1e, 0x52, 0x34, 0x4c, 0x6a, 0x58, 0x4c, 0x6d, 0xee, + 0x33, 0x71, 0xac, 0x1a, 0xde, 0x56, 0x5b, 0x0d, 0xa7, 0x72, 0x55, 0x6d, 0xb4, 0x30, 0x75, 0xf8, + 0xb4, 0x92, 0xe1, 0xc0, 0x2b, 0x04, 0x86, 0xa6, 0x60, 0x88, 0x45, 0x95, 0xa6, 0xd7, 0xf0, 0x1e, + 0xcd, 0x9e, 0x49, 0x85, 0x05, 0xda, 0x22, 0x81, 0x90, 0xee, 0x5f, 0xb4, 0x0d, 0x5d, 0xb8, 0x26, + 0xed, 0x82, 0x00, 0x68, 0xf7, 0x4f, 0x85, 0x13, 0xf7, 0xdd, 0x9d, 0xd5, 0x6b, 0x8b, 0xa5, 0x07, + 0x61, 0x94, 0x62, 0x3c, 0xc1, 0x87, 0x5e, 0x6d, 0xe4, 0xc6, 0xa6, 0xa5, 0x53, 0x29, 0x65, 0x84, + 0x81, 0x57, 0x39, 0x54, 0xfe, 0x52, 0x0c, 0x12, 0x34, 0xb1, 0x8c, 0xc2, 0xd0, 0xc6, 0x5b, 0xd7, + 0xca, 0x95, 0xd2, 0xea, 0x66, 0x71, 0xa9, 0x9c, 0x95, 0xd0, 0x08, 0x00, 0x05, 0x5c, 0x5c, 0x5a, + 0x9d, 0xdb, 0xc8, 0xc6, 0xdc, 0xe7, 0xc5, 0x95, 0x8d, 0x73, 0x4f, 0x66, 0xe3, 0x2e, 0xc1, 0x26, + 0x03, 0x24, 0xfc, 0x08, 0x4f, 0x9c, 0xc9, 0x26, 0x51, 0x16, 0x32, 0x8c, 0xc1, 0xe2, 0x5b, 0xca, + 0xa5, 0x73, 0x4f, 0x66, 0x07, 0x82, 0x90, 0x27, 0xce, 0x64, 0x07, 0xd1, 0x30, 0xa4, 0x29, 0xa4, + 0xb8, 0xba, 0xba, 0x94, 0x4d, 0xb9, 0x3c, 0xd7, 0x37, 0x94, 0xc5, 0x95, 0x85, 0x6c, 0xda, 0xe5, + 0xb9, 0xa0, 0xac, 0x6e, 0xae, 0x65, 0xc1, 0xe5, 0xb0, 0x5c, 0x5e, 0x5f, 0x9f, 0x5b, 0x28, 0x67, + 0x87, 0x5c, 0x8c, 0xe2, 0x5b, 0x37, 0xca, 0xeb, 0xd9, 0x4c, 0x40, 0xac, 0x27, 0xce, 0x64, 0x87, + 0xdd, 0x2e, 0xca, 0x2b, 0x9b, 0xcb, 0xd9, 0x11, 0x34, 0x06, 0xc3, 0xac, 0x0b, 0x21, 0xc4, 0x68, + 0x08, 0x74, 0xee, 0xc9, 0x6c, 0xd6, 0x13, 0x84, 0x71, 0x19, 0x0b, 0x00, 0xce, 0x3d, 0x99, 0x45, + 0xf2, 0x3c, 0x24, 0xa9, 0x1b, 0x22, 0x04, 0x23, 0x4b, 0x73, 0xc5, 0xf2, 0x52, 0x65, 0x75, 0x6d, + 0x63, 0x71, 0x75, 0x65, 0x6e, 0x29, 0x2b, 0x79, 0x30, 0xa5, 0xfc, 0xfc, 0xe6, 0xa2, 0x52, 0x2e, + 0x65, 0x63, 0x7e, 0xd8, 0x5a, 0x79, 0x6e, 0xa3, 0x5c, 0xca, 0xc6, 0xe5, 0x2a, 0x4c, 0x74, 0x4a, + 0xa8, 0x1d, 0x43, 0xc8, 0xe7, 0x0b, 0xb1, 0x2e, 0xbe, 0x40, 0x79, 0x85, 0x7d, 0x41, 0xfe, 0x56, + 0x0c, 0xc6, 0x3b, 0x4c, 0x2a, 0x1d, 0x3b, 0x79, 0x16, 0x92, 0xcc, 0x97, 0xd9, 0x34, 0xfb, 0x50, + 0xc7, 0xd9, 0x89, 0x7a, 0x76, 0xdb, 0x54, 0x4b, 0xe9, 0xfc, 0xa5, 0x46, 0xbc, 0x4b, 0xa9, 0x41, + 0x58, 0xb4, 0x39, 0xec, 0x4f, 0xb6, 0x25, 0x7f, 0x36, 0x3f, 0x9e, 0xeb, 0x67, 0x7e, 0xa4, 0xb0, + 0x83, 0x4d, 0x02, 0xc9, 0x0e, 0x93, 0xc0, 0x05, 0x18, 0x6b, 0x63, 0xd4, 0x77, 0x32, 0x7e, 0xaf, + 0x04, 0xb9, 0x6e, 0xc6, 0x89, 0x48, 0x89, 0xb1, 0x40, 0x4a, 0xbc, 0x10, 0xb6, 0xe0, 0x3d, 0xdd, + 0x07, 0xa1, 0x6d, 0xac, 0x3f, 0x2b, 0xc1, 0xb1, 0xce, 0x25, 0x65, 0x47, 0x19, 0x9e, 0x81, 0x81, + 0x26, 0x76, 0x76, 0x0c, 0x51, 0x56, 0x3d, 0xd0, 0x61, 0xb2, 0x26, 0xcd, 0xe1, 0xc1, 0xe6, 0x54, + 0xfe, 0xd9, 0x3e, 0xde, 0xad, 0x2e, 0x64, 0xd2, 0xb4, 0x49, 0xfa, 0xc1, 0x18, 0x1c, 0xed, 0xc8, + 0xbc, 0xa3, 0xa0, 0x77, 0x03, 0x68, 0xba, 0xd9, 0x72, 0x58, 0xe9, 0xc4, 0x32, 0x71, 0x9a, 0x42, + 0x68, 0xf2, 0x22, 0x59, 0xb6, 0xe5, 0xb8, 0xed, 0x71, 0xda, 0x0e, 0x0c, 0x44, 0x11, 0xce, 0x7b, + 0x82, 0x26, 0xa8, 0xa0, 0x93, 0x5d, 0x34, 0x6d, 0x73, 0xcc, 0xc7, 0x20, 0x5b, 0x6d, 0x68, 0x58, + 0x77, 0x2a, 0xb6, 0x63, 0x61, 0xb5, 0xa9, 0xe9, 0x75, 0x3a, 0xd5, 0xa4, 0x0a, 0xc9, 0x6d, 0xb5, + 0x61, 0x63, 0x65, 0x94, 0x35, 0xaf, 0x8b, 0x56, 0x42, 0x41, 0x1d, 0xc8, 0xf2, 0x51, 0x0c, 0x04, + 0x28, 0x58, 0xb3, 0x4b, 0x21, 0x7f, 0x24, 0x0d, 0x43, 0xbe, 0x02, 0x1c, 0xdd, 0x03, 0x99, 0x17, + 0xd5, 0xab, 0x6a, 0x45, 0x2c, 0xaa, 0x98, 0x25, 0x86, 0x08, 0x6c, 0x8d, 0x2f, 0xac, 0x1e, 0x83, + 0x09, 0x8a, 0x62, 0xb4, 0x1c, 0x6c, 0x55, 0xaa, 0x0d, 0xd5, 0xb6, 0xa9, 0xd1, 0x52, 0x14, 0x15, + 0x91, 0xb6, 0x55, 0xd2, 0x34, 0x2f, 0x5a, 0xd0, 0x59, 0x18, 0xa7, 0x14, 0xcd, 0x56, 0xc3, 0xd1, + 0xcc, 0x06, 0xae, 0x90, 0x65, 0x9e, 0x4d, 0xa7, 0x1c, 0x57, 0xb2, 0x31, 0x82, 0xb1, 0xcc, 0x11, + 0x88, 0x44, 0x36, 0x2a, 0xc1, 0xdd, 0x94, 0xac, 0x8e, 0x75, 0x6c, 0xa9, 0x0e, 0xae, 0xe0, 0x97, + 0x5a, 0x6a, 0xc3, 0xae, 0xa8, 0x7a, 0xad, 0xb2, 0xa3, 0xda, 0x3b, 0xb9, 0x09, 0xc2, 0xa0, 0x18, + 0xcb, 0x49, 0xca, 0x09, 0x82, 0xb8, 0xc0, 0xf1, 0xca, 0x14, 0x6d, 0x4e, 0xaf, 0x5d, 0x52, 0xed, + 0x1d, 0x54, 0x80, 0x63, 0x94, 0x8b, 0xed, 0x58, 0x9a, 0x5e, 0xaf, 0x54, 0x77, 0x70, 0x75, 0xb7, + 0xd2, 0x72, 0xb6, 0xcf, 0xe7, 0xee, 0xf2, 0xf7, 0x4f, 0x25, 0x5c, 0xa7, 0x38, 0xf3, 0x04, 0x65, + 0xd3, 0xd9, 0x3e, 0x8f, 0xd6, 0x21, 0x43, 0x06, 0xa3, 0xa9, 0xbd, 0x8c, 0x2b, 0xdb, 0x86, 0x45, + 0xe7, 0xd0, 0x91, 0x0e, 0xa9, 0xc9, 0x67, 0xc1, 0x99, 0x55, 0x4e, 0xb0, 0x6c, 0xd4, 0x70, 0x21, + 0xb9, 0xbe, 0x56, 0x2e, 0x97, 0x94, 0x21, 0xc1, 0xe5, 0xa2, 0x61, 0x11, 0x87, 0xaa, 0x1b, 0xae, + 0x81, 0x87, 0x98, 0x43, 0xd5, 0x0d, 0x61, 0xde, 0xb3, 0x30, 0x5e, 0xad, 0x32, 0x9d, 0xb5, 0x6a, + 0x85, 0x2f, 0xc6, 0xec, 0x5c, 0x36, 0x60, 0xac, 0x6a, 0x75, 0x81, 0x21, 0x70, 0x1f, 0xb7, 0xd1, + 0xd3, 0x70, 0xd4, 0x33, 0x96, 0x9f, 0x70, 0xac, 0x4d, 0xcb, 0x30, 0xe9, 0x59, 0x18, 0x37, 0xf7, + 0xdb, 0x09, 0x51, 0xa0, 0x47, 0x73, 0x3f, 0x4c, 0xf6, 0x14, 0x4c, 0x98, 0x3b, 0x66, 0x3b, 0xdd, + 0x69, 0x3f, 0x1d, 0x32, 0x77, 0xcc, 0x30, 0xe1, 0xfd, 0x74, 0x65, 0x6e, 0xe1, 0xaa, 0xea, 0xe0, + 0x5a, 0xee, 0xb8, 0x1f, 0xdd, 0xd7, 0x80, 0x66, 0x20, 0x5b, 0xad, 0x56, 0xb0, 0xae, 0x6e, 0x35, + 0x70, 0x45, 0xb5, 0xb0, 0xae, 0xda, 0xb9, 0x29, 0x8a, 0x9c, 0x70, 0xac, 0x16, 0x56, 0x46, 0xaa, + 0xd5, 0x32, 0x6d, 0x9c, 0xa3, 0x6d, 0xe8, 0x34, 0x8c, 0x19, 0x5b, 0x2f, 0x56, 0x99, 0x47, 0x56, + 0x4c, 0x0b, 0x6f, 0x6b, 0x7b, 0xb9, 0xfb, 0xa8, 0x79, 0x47, 0x49, 0x03, 0xf5, 0xc7, 0x35, 0x0a, + 0x46, 0x0f, 0x41, 0xb6, 0x6a, 0xef, 0xa8, 0x96, 0x49, 0x53, 0xb2, 0x6d, 0xaa, 0x55, 0x9c, 0xbb, + 0x9f, 0xa1, 0x32, 0xf8, 0x8a, 0x00, 0x93, 0x88, 0xb0, 0xaf, 0x69, 0xdb, 0x8e, 0xe0, 0xf8, 0x20, + 0x8b, 0x08, 0x0a, 0xe3, 0xdc, 0x4e, 0x41, 0x96, 0x58, 0x22, 0xd0, 0xf1, 0x29, 0x8a, 0x36, 0x62, + 0xee, 0x98, 0xfe, 0x7e, 0xef, 0x85, 0x61, 0x82, 0xe9, 0x75, 0xfa, 0x10, 0x2b, 0xdc, 0xcc, 0x1d, + 0x5f, 0x8f, 0x4f, 0xc2, 0x31, 0x82, 0xd4, 0xc4, 0x8e, 0x5a, 0x53, 0x1d, 0xd5, 0x87, 0xfd, 0x08, + 0xc5, 0x26, 0x66, 0x5f, 0xe6, 0x8d, 0x01, 0x39, 0xad, 0xd6, 0xd6, 0xbe, 0xeb, 0x58, 0x8f, 0x32, + 0x39, 0x09, 0x4c, 0xb8, 0xd6, 0x1d, 0x2b, 0xce, 0xe5, 0x02, 0x64, 0xfc, 0x7e, 0x8f, 0xd2, 0xc0, + 0x3c, 0x3f, 0x2b, 0x91, 0x22, 0x68, 0x7e, 0xb5, 0x44, 0xca, 0x97, 0xb7, 0x95, 0xb3, 0x31, 0x52, + 0x46, 0x2d, 0x2d, 0x6e, 0x94, 0x2b, 0xca, 0xe6, 0xca, 0xc6, 0xe2, 0x72, 0x39, 0x1b, 0xf7, 0x15, + 0xf6, 0xcf, 0x25, 0x52, 0x0f, 0x64, 0x1f, 0x94, 0xbf, 0x19, 0x83, 0x91, 0xe0, 0x4a, 0x0d, 0xbd, + 0x09, 0x8e, 0x8b, 0x6d, 0x15, 0x1b, 0x3b, 0x95, 0x6b, 0x9a, 0x45, 0x03, 0xb2, 0xa9, 0xb2, 0xc9, + 0xd1, 0xf5, 0x9f, 0x09, 0x8e, 0xb5, 0x8e, 0x9d, 0x17, 0x34, 0x8b, 0x84, 0x5b, 0x53, 0x75, 0xd0, + 0x12, 0x4c, 0xe9, 0x46, 0xc5, 0x76, 0x54, 0xbd, 0xa6, 0x5a, 0xb5, 0x8a, 0xb7, 0xa1, 0x55, 0x51, + 0xab, 0x55, 0x6c, 0xdb, 0x06, 0x9b, 0x08, 0x5d, 0x2e, 0x27, 0x75, 0x63, 0x9d, 0x23, 0x7b, 0x33, + 0xc4, 0x1c, 0x47, 0x0d, 0xb9, 0x6f, 0xbc, 0x9b, 0xfb, 0xde, 0x05, 0xe9, 0xa6, 0x6a, 0x56, 0xb0, + 0xee, 0x58, 0xfb, 0xb4, 0x3e, 0x4f, 0x29, 0xa9, 0xa6, 0x6a, 0x96, 0xc9, 0xf3, 0x8f, 0x64, 0x99, + 0xf4, 0x5c, 0x22, 0x95, 0xca, 0xa6, 0x9f, 0x4b, 0xa4, 0xd2, 0x59, 0x90, 0x5f, 0x8b, 0x43, 0xc6, + 0x5f, 0xaf, 0x93, 0xe5, 0x4f, 0x95, 0xce, 0x58, 0x12, 0xcd, 0x69, 0xf7, 0xf6, 0xac, 0xee, 0x67, + 0xe6, 0xc9, 0x54, 0x56, 0x18, 0x60, 0xc5, 0xb1, 0xc2, 0x28, 0x49, 0x19, 0x41, 0x9c, 0x0d, 0xb3, + 0x62, 0x24, 0xa5, 0xf0, 0x27, 0xb4, 0x00, 0x03, 0x2f, 0xda, 0x94, 0xf7, 0x00, 0xe5, 0x7d, 0x5f, + 0x6f, 0xde, 0xcf, 0xad, 0x53, 0xe6, 0xe9, 0xe7, 0xd6, 0x2b, 0x2b, 0xab, 0xca, 0xf2, 0xdc, 0x92, + 0xc2, 0xc9, 0xd1, 0x09, 0x48, 0x34, 0xd4, 0x97, 0xf7, 0x83, 0x93, 0x1e, 0x05, 0xf5, 0x3b, 0x08, + 0x27, 0x20, 0x71, 0x0d, 0xab, 0xbb, 0xc1, 0xa9, 0x86, 0x82, 0xee, 0x60, 0x30, 0xcc, 0x42, 0x92, + 0xda, 0x0b, 0x01, 0x70, 0x8b, 0x65, 0x8f, 0xa0, 0x14, 0x24, 0xe6, 0x57, 0x15, 0x12, 0x10, 0x59, + 0xc8, 0x30, 0x68, 0x65, 0x6d, 0xb1, 0x3c, 0x5f, 0xce, 0xc6, 0xe4, 0xb3, 0x30, 0xc0, 0x8c, 0x40, + 0x82, 0xc5, 0x35, 0x43, 0xf6, 0x08, 0x7f, 0xe4, 0x3c, 0x24, 0xd1, 0xba, 0xb9, 0x5c, 0x2c, 0x2b, + 0xd9, 0x58, 0x70, 0xa8, 0x13, 0xd9, 0xa4, 0x6c, 0x43, 0xc6, 0x5f, 0x87, 0xff, 0x68, 0x16, 0xe3, + 0x5f, 0x96, 0x60, 0xc8, 0x57, 0x57, 0x93, 0x82, 0x48, 0x6d, 0x34, 0x8c, 0x6b, 0x15, 0xb5, 0xa1, + 0xa9, 0x36, 0x77, 0x0d, 0xa0, 0xa0, 0x39, 0x02, 0xe9, 0x77, 0xe8, 0x7e, 0x44, 0x21, 0x92, 0xcc, + 0x0e, 0xc8, 0x9f, 0x94, 0x20, 0x1b, 0x2e, 0x6c, 0x43, 0x62, 0x4a, 0x6f, 0xa4, 0x98, 0xf2, 0x27, + 0x24, 0x18, 0x09, 0x56, 0xb3, 0x21, 0xf1, 0xee, 0x79, 0x43, 0xc5, 0xfb, 0xc3, 0x18, 0x0c, 0x07, + 0x6a, 0xd8, 0x7e, 0xa5, 0x7b, 0x09, 0xc6, 0xb4, 0x1a, 0x6e, 0x9a, 0x86, 0x83, 0xf5, 0xea, 0x7e, + 0xa5, 0x81, 0xaf, 0xe2, 0x46, 0x4e, 0xa6, 0x49, 0x63, 0xb6, 0x77, 0x95, 0x3c, 0xb3, 0xe8, 0xd1, + 0x2d, 0x11, 0xb2, 0xc2, 0xf8, 0x62, 0xa9, 0xbc, 0xbc, 0xb6, 0xba, 0x51, 0x5e, 0x99, 0x7f, 0x6b, + 0x65, 0x73, 0xe5, 0xf2, 0xca, 0xea, 0x0b, 0x2b, 0x4a, 0x56, 0x0b, 0xa1, 0xdd, 0xc1, 0xb0, 0x5f, + 0x83, 0x6c, 0x58, 0x28, 0x74, 0x1c, 0x3a, 0x89, 0x95, 0x3d, 0x82, 0xc6, 0x61, 0x74, 0x65, 0xb5, + 0xb2, 0xbe, 0x58, 0x2a, 0x57, 0xca, 0x17, 0x2f, 0x96, 0xe7, 0x37, 0xd6, 0xd9, 0xbe, 0x87, 0x8b, + 0xbd, 0x11, 0x08, 0x70, 0xf9, 0xd5, 0x38, 0x8c, 0x77, 0x90, 0x04, 0xcd, 0xf1, 0x15, 0x0b, 0x5b, + 0x44, 0x3d, 0xda, 0x8f, 0xf4, 0x33, 0xa4, 0x66, 0x58, 0x53, 0x2d, 0x87, 0x2f, 0x70, 0x1e, 0x02, + 0x62, 0x25, 0xdd, 0xd1, 0xb6, 0x35, 0x6c, 0xf1, 0xfd, 0x24, 0xb6, 0x8c, 0x19, 0xf5, 0xe0, 0x6c, + 0x4b, 0xe9, 0x11, 0x40, 0xa6, 0x61, 0x6b, 0x8e, 0x76, 0x15, 0x57, 0x34, 0x5d, 0x6c, 0x3e, 0x91, + 0x65, 0x4d, 0x42, 0xc9, 0x8a, 0x96, 0x45, 0xdd, 0x71, 0xb1, 0x75, 0x5c, 0x57, 0x43, 0xd8, 0x24, + 0x99, 0xc7, 0x95, 0xac, 0x68, 0x71, 0xb1, 0xef, 0x81, 0x4c, 0xcd, 0x68, 0x91, 0x5a, 0x8f, 0xe1, + 0x91, 0xb9, 0x43, 0x52, 0x86, 0x18, 0xcc, 0x45, 0xe1, 0x55, 0xbc, 0xb7, 0xeb, 0x95, 0x51, 0x86, + 0x18, 0x8c, 0xa1, 0x3c, 0x08, 0xa3, 0x6a, 0xbd, 0x6e, 0x11, 0xe6, 0x82, 0x11, 0x5b, 0x97, 0x8c, + 0xb8, 0x60, 0x8a, 0x98, 0x7f, 0x0e, 0x52, 0xc2, 0x0e, 0x64, 0xaa, 0x26, 0x96, 0xa8, 0x98, 0x6c, + 0xb1, 0x1d, 0x3b, 0x95, 0x56, 0x52, 0xba, 0x68, 0xbc, 0x07, 0x32, 0x9a, 0x5d, 0xf1, 0x36, 0xf1, + 0x63, 0xd3, 0xb1, 0x53, 0x29, 0x65, 0x48, 0xb3, 0xdd, 0x0d, 0x50, 0xf9, 0xb3, 0x31, 0x18, 0x09, + 0xbe, 0x84, 0x40, 0x25, 0x48, 0x35, 0x8c, 0xaa, 0x4a, 0x5d, 0x8b, 0xbd, 0x01, 0x3b, 0x15, 0xf1, + 0xde, 0x62, 0x66, 0x89, 0xe3, 0x2b, 0x2e, 0x65, 0xfe, 0xb7, 0x25, 0x48, 0x09, 0x30, 0x3a, 0x06, + 0x09, 0x53, 0x75, 0x76, 0x28, 0xbb, 0x64, 0x31, 0x96, 0x95, 0x14, 0xfa, 0x4c, 0xe0, 0xb6, 0xa9, + 0xea, 0xd4, 0x05, 0x38, 0x9c, 0x3c, 0x93, 0x71, 0x6d, 0x60, 0xb5, 0x46, 0x17, 0x3d, 0x46, 0xb3, + 0x89, 0x75, 0xc7, 0x16, 0xe3, 0xca, 0xe1, 0xf3, 0x1c, 0x8c, 0x1e, 0x86, 0x31, 0xc7, 0x52, 0xb5, + 0x46, 0x00, 0x37, 0x41, 0x71, 0xb3, 0xa2, 0xc1, 0x45, 0x2e, 0xc0, 0x09, 0xc1, 0xb7, 0x86, 0x1d, + 0xb5, 0xba, 0x83, 0x6b, 0x1e, 0xd1, 0x00, 0xdd, 0xdc, 0x38, 0xce, 0x11, 0x4a, 0xbc, 0x5d, 0xd0, + 0xca, 0xdf, 0x94, 0x60, 0x4c, 0x2c, 0xd3, 0x6a, 0xae, 0xb1, 0x96, 0x01, 0x54, 0x5d, 0x37, 0x1c, + 0xbf, 0xb9, 0xda, 0x5d, 0xb9, 0x8d, 0x6e, 0x66, 0xce, 0x25, 0x52, 0x7c, 0x0c, 0xf2, 0x4d, 0x00, + 0xaf, 0xa5, 0xab, 0xd9, 0xa6, 0x60, 0x88, 0xbf, 0x61, 0xa2, 0xaf, 0x29, 0xd9, 0xc2, 0x1e, 0x18, + 0x88, 0xac, 0xe7, 0xd0, 0x04, 0x24, 0xb7, 0x70, 0x5d, 0xd3, 0xf9, 0xbe, 0x31, 0x7b, 0x10, 0xdb, + 0x2f, 0x09, 0x77, 0xfb, 0xa5, 0xf8, 0x21, 0x09, 0xc6, 0xab, 0x46, 0x33, 0x2c, 0x6f, 0x31, 0x1b, + 0xda, 0x5d, 0xb0, 0x2f, 0x49, 0x6f, 0x7b, 0xa6, 0xae, 0x39, 0x3b, 0xad, 0xad, 0x99, 0xaa, 0xd1, + 0x9c, 0xad, 0x1b, 0x0d, 0x55, 0xaf, 0x7b, 0xef, 0x59, 0xe9, 0x8f, 0xea, 0xa3, 0x75, 0xac, 0x3f, + 0x5a, 0x37, 0x7c, 0x6f, 0x5d, 0x2f, 0x78, 0x3f, 0xff, 0x5c, 0x92, 0x7e, 0x21, 0x16, 0x5f, 0x58, + 0x2b, 0x7e, 0x2e, 0x96, 0x5f, 0x60, 0xdd, 0xad, 0x09, 0xf3, 0x28, 0x78, 0xbb, 0x81, 0xab, 0x44, + 0x65, 0xf8, 0xce, 0xc3, 0x30, 0x51, 0x37, 0xea, 0x06, 0xe5, 0x38, 0x4b, 0x7e, 0xf1, 0x37, 0xb7, + 0x69, 0x17, 0x9a, 0x8f, 0x7c, 0xcd, 0x5b, 0x58, 0x81, 0x71, 0x8e, 0x5c, 0xa1, 0xaf, 0x8e, 0xd8, + 0xc2, 0x06, 0xf5, 0xdc, 0x55, 0xcb, 0xfd, 0xda, 0xb7, 0xe9, 0x84, 0xae, 0x8c, 0x71, 0x52, 0xd2, + 0xc6, 0xd6, 0x3e, 0x05, 0x05, 0x8e, 0x06, 0xf8, 0xb1, 0xb0, 0xc5, 0x56, 0x04, 0xc7, 0xdf, 0xe4, + 0x1c, 0xc7, 0x7d, 0x1c, 0xd7, 0x39, 0x69, 0x61, 0x1e, 0x86, 0x0f, 0xc2, 0xeb, 0x5f, 0x73, 0x5e, + 0x19, 0xec, 0x67, 0xb2, 0x00, 0xa3, 0x94, 0x49, 0xb5, 0x65, 0x3b, 0x46, 0x93, 0xe6, 0xc4, 0xde, + 0x6c, 0x7e, 0xeb, 0xdb, 0x2c, 0x8e, 0x46, 0x08, 0xd9, 0xbc, 0x4b, 0x55, 0x28, 0x00, 0x7d, 0x5b, + 0x56, 0xc3, 0xd5, 0x46, 0x04, 0x87, 0xaf, 0x72, 0x41, 0x5c, 0xfc, 0xc2, 0x15, 0x98, 0x20, 0xbf, + 0x69, 0xca, 0xf2, 0x4b, 0x12, 0xbd, 0x05, 0x97, 0xfb, 0xe6, 0x7b, 0x59, 0xa8, 0x8e, 0xbb, 0x0c, + 0x7c, 0x32, 0xf9, 0x46, 0xb1, 0x8e, 0x1d, 0x07, 0x5b, 0x76, 0x45, 0x6d, 0x74, 0x12, 0xcf, 0xb7, + 0x87, 0x91, 0xfb, 0xf8, 0x77, 0x83, 0xa3, 0xb8, 0xc0, 0x28, 0xe7, 0x1a, 0x8d, 0xc2, 0x26, 0x1c, + 0xef, 0xe0, 0x15, 0x7d, 0xf0, 0x7c, 0x95, 0xf3, 0x9c, 0x68, 0xf3, 0x0c, 0xc2, 0x76, 0x0d, 0x04, + 0xdc, 0x1d, 0xcb, 0x3e, 0x78, 0xfe, 0x3c, 0xe7, 0x89, 0x38, 0xad, 0x18, 0x52, 0xc2, 0xf1, 0x39, + 0x18, 0xbb, 0x8a, 0xad, 0x2d, 0xc3, 0xe6, 0xfb, 0x46, 0x7d, 0xb0, 0xfb, 0x04, 0x67, 0x37, 0xca, + 0x09, 0xe9, 0x46, 0x12, 0xe1, 0xf5, 0x34, 0xa4, 0xb6, 0xd5, 0x2a, 0xee, 0x83, 0xc5, 0x0d, 0xce, + 0x62, 0x90, 0xe0, 0x13, 0xd2, 0x39, 0xc8, 0xd4, 0x0d, 0x3e, 0x6b, 0x45, 0x93, 0x7f, 0x92, 0x93, + 0x0f, 0x09, 0x1a, 0xce, 0xc2, 0x34, 0xcc, 0x56, 0x83, 0x4c, 0x69, 0xd1, 0x2c, 0xfe, 0xb6, 0x60, + 0x21, 0x68, 0x38, 0x8b, 0x03, 0x98, 0xf5, 0x53, 0x82, 0x85, 0xed, 0xb3, 0xe7, 0xb3, 0x30, 0x64, + 0xe8, 0x8d, 0x7d, 0x43, 0xef, 0x47, 0x88, 0x4f, 0x73, 0x0e, 0xc0, 0x49, 0x08, 0x83, 0x0b, 0x90, + 0xee, 0x77, 0x20, 0xfe, 0xce, 0x77, 0x45, 0x78, 0x88, 0x11, 0x58, 0x80, 0x51, 0x91, 0xa0, 0x34, + 0x43, 0xef, 0x83, 0xc5, 0xdf, 0xe5, 0x2c, 0x46, 0x7c, 0x64, 0x5c, 0x0d, 0x07, 0xdb, 0x4e, 0x1d, + 0xf7, 0xc3, 0xe4, 0xb3, 0x42, 0x0d, 0x4e, 0xc2, 0x4d, 0xb9, 0x85, 0xf5, 0xea, 0x4e, 0x7f, 0x1c, + 0x7e, 0x49, 0x98, 0x52, 0xd0, 0x10, 0x16, 0xf3, 0x30, 0xdc, 0x54, 0x2d, 0x7b, 0x47, 0x6d, 0xf4, + 0x35, 0x1c, 0x7f, 0x8f, 0xf3, 0xc8, 0xb8, 0x44, 0xdc, 0x22, 0x2d, 0xfd, 0x20, 0x6c, 0x3e, 0x27, + 0x2c, 0xe2, 0x23, 0xe3, 0xa1, 0x67, 0x3b, 0x74, 0x93, 0xed, 0x20, 0xdc, 0x7e, 0x59, 0x84, 0x1e, + 0xa3, 0x5d, 0xf6, 0x73, 0xbc, 0x00, 0x69, 0x5b, 0x7b, 0xb9, 0x2f, 0x36, 0x9f, 0x17, 0x23, 0x4d, + 0x09, 0x08, 0xf1, 0x5b, 0xe1, 0x44, 0xc7, 0x69, 0xa2, 0x0f, 0x66, 0x7f, 0x9f, 0x33, 0x3b, 0xd6, + 0x61, 0xaa, 0xe0, 0x29, 0xe1, 0xa0, 0x2c, 0xff, 0x81, 0x48, 0x09, 0x38, 0xc4, 0x6b, 0x8d, 0xac, + 0x23, 0x6c, 0x75, 0xfb, 0x60, 0x56, 0xfb, 0x15, 0x61, 0x35, 0x46, 0x1b, 0xb0, 0xda, 0x06, 0x1c, + 0xe3, 0x1c, 0x0f, 0x36, 0xae, 0xbf, 0x2a, 0x12, 0x2b, 0xa3, 0xde, 0x0c, 0x8e, 0xee, 0xdb, 0x21, + 0xef, 0x9a, 0x53, 0x14, 0xac, 0x76, 0xa5, 0xa9, 0x9a, 0x7d, 0x70, 0xfe, 0x35, 0xce, 0x59, 0x64, + 0x7c, 0xb7, 0xe2, 0xb5, 0x97, 0x55, 0x93, 0x30, 0x7f, 0x0b, 0xe4, 0x04, 0xf3, 0x96, 0x6e, 0xe1, + 0xaa, 0x51, 0xd7, 0xb5, 0x97, 0x71, 0xad, 0x0f, 0xd6, 0xbf, 0x1e, 0x1a, 0xaa, 0x4d, 0x1f, 0x39, + 0xe1, 0xbc, 0x08, 0x59, 0xb7, 0x56, 0xa9, 0x68, 0x4d, 0xd3, 0xb0, 0x9c, 0x08, 0x8e, 0x5f, 0x10, + 0x23, 0xe5, 0xd2, 0x2d, 0x52, 0xb2, 0x42, 0x19, 0xd8, 0x9b, 0xe7, 0x7e, 0x5d, 0xf2, 0x8b, 0x9c, + 0xd1, 0xb0, 0x47, 0xc5, 0x13, 0x47, 0xd5, 0x68, 0x9a, 0xaa, 0xd5, 0x4f, 0xfe, 0xfb, 0x87, 0x22, + 0x71, 0x70, 0x12, 0x9e, 0x38, 0x9c, 0x7d, 0x13, 0x93, 0xd9, 0xbe, 0x0f, 0x0e, 0x5f, 0x12, 0x89, + 0x43, 0xd0, 0x70, 0x16, 0xa2, 0x60, 0xe8, 0x83, 0xc5, 0x3f, 0x12, 0x2c, 0x04, 0x0d, 0x61, 0xf1, + 0xbc, 0x37, 0xd1, 0x5a, 0xb8, 0xae, 0xd9, 0x8e, 0xc5, 0xca, 0xe4, 0xde, 0xac, 0xfe, 0xf1, 0x77, + 0x83, 0x45, 0x98, 0xe2, 0x23, 0x25, 0x99, 0x88, 0x6f, 0xbb, 0xd2, 0x55, 0x54, 0xb4, 0x60, 0xbf, + 0x21, 0x32, 0x91, 0x8f, 0x8c, 0xc8, 0xe6, 0xab, 0x10, 0x89, 0xd9, 0xab, 0x64, 0xed, 0xd0, 0x07, + 0xbb, 0x7f, 0x12, 0x12, 0x6e, 0x5d, 0xd0, 0x12, 0x9e, 0xbe, 0xfa, 0xa7, 0xa5, 0xef, 0xe2, 0xfd, + 0xbe, 0xbc, 0xf3, 0x9f, 0x86, 0xea, 0x9f, 0x4d, 0x46, 0xc9, 0x72, 0xc8, 0x68, 0xa8, 0x9e, 0x42, + 0x51, 0xe7, 0x8c, 0x72, 0x3f, 0xf5, 0x7d, 0xae, 0x6f, 0xb0, 0x9c, 0x2a, 0x2c, 0x11, 0x27, 0x0f, + 0x16, 0x3d, 0xd1, 0xcc, 0xde, 0xfb, 0x7d, 0xd7, 0xcf, 0x03, 0x35, 0x4f, 0xe1, 0x22, 0x0c, 0x07, + 0x0a, 0x9e, 0x68, 0x56, 0xef, 0xe3, 0xac, 0x32, 0xfe, 0x7a, 0xa7, 0x70, 0x16, 0x12, 0xa4, 0x78, + 0x89, 0x26, 0xff, 0xab, 0x9c, 0x9c, 0xa2, 0x17, 0xde, 0x0c, 0x29, 0x51, 0xb4, 0x44, 0x93, 0xbe, + 0x9f, 0x93, 0xba, 0x24, 0x84, 0x5c, 0x14, 0x2c, 0xd1, 0xe4, 0x7f, 0x4d, 0x90, 0x0b, 0x12, 0x42, + 0xde, 0xbf, 0x09, 0xbf, 0xfc, 0xd3, 0x09, 0x3e, 0xe9, 0x08, 0xdb, 0x5d, 0x80, 0x41, 0x5e, 0xa9, + 0x44, 0x53, 0x7f, 0x90, 0x77, 0x2e, 0x28, 0x0a, 0x4f, 0x41, 0xb2, 0x4f, 0x83, 0xff, 0x0c, 0x27, + 0x65, 0xf8, 0x85, 0x79, 0x18, 0xf2, 0x55, 0x27, 0xd1, 0xe4, 0x7f, 0x83, 0x93, 0xfb, 0xa9, 0x88, + 0xe8, 0xbc, 0x3a, 0x89, 0x66, 0xf0, 0x21, 0x21, 0x3a, 0xa7, 0x20, 0x66, 0x13, 0x85, 0x49, 0x34, + 0xf5, 0x87, 0x85, 0xd5, 0x05, 0x49, 0xe1, 0x59, 0x48, 0xbb, 0x93, 0x4d, 0x34, 0xfd, 0x47, 0x38, + 0xbd, 0x47, 0x43, 0x2c, 0xe0, 0x9b, 0xec, 0xa2, 0x59, 0xfc, 0x4d, 0x61, 0x01, 0x1f, 0x15, 0x09, + 0xa3, 0x70, 0x01, 0x13, 0xcd, 0xe9, 0xa3, 0x22, 0x8c, 0x42, 0xf5, 0x0b, 0x19, 0x4d, 0x9a, 0xf3, + 0xa3, 0x59, 0xfc, 0xac, 0x18, 0x4d, 0x8a, 0x4f, 0xc4, 0x08, 0x57, 0x04, 0xd1, 0x3c, 0xfe, 0x96, + 0x10, 0x23, 0x54, 0x10, 0x14, 0xd6, 0x00, 0xb5, 0x57, 0x03, 0xd1, 0xfc, 0x3e, 0xc6, 0xf9, 0x8d, + 0xb5, 0x15, 0x03, 0x85, 0x17, 0xe0, 0x58, 0xe7, 0x4a, 0x20, 0x9a, 0xeb, 0xc7, 0xbf, 0x1f, 0x5a, + 0xbb, 0xf9, 0x0b, 0x81, 0xc2, 0x86, 0x37, 0xa5, 0xf8, 0xab, 0x80, 0x68, 0xb6, 0xaf, 0x7e, 0x3f, + 0x98, 0xb8, 0xfd, 0x45, 0x40, 0x61, 0x0e, 0xc0, 0x9b, 0x80, 0xa3, 0x79, 0x7d, 0x82, 0xf3, 0xf2, + 0x11, 0x91, 0xd0, 0xe0, 0xf3, 0x6f, 0x34, 0xfd, 0x0d, 0x11, 0x1a, 0x9c, 0x82, 0x84, 0x86, 0x98, + 0x7a, 0xa3, 0xa9, 0x3f, 0x29, 0x42, 0x43, 0x90, 0x10, 0xcf, 0xf6, 0xcd, 0x6e, 0xd1, 0x1c, 0x3e, + 0x2d, 0x3c, 0xdb, 0x47, 0x55, 0x58, 0x81, 0xb1, 0xb6, 0x09, 0x31, 0x9a, 0xd5, 0x2f, 0x70, 0x56, + 0xd9, 0xf0, 0x7c, 0xe8, 0x9f, 0xbc, 0xf8, 0x64, 0x18, 0xcd, 0xed, 0x33, 0xa1, 0xc9, 0x8b, 0xcf, + 0x85, 0x85, 0x0b, 0x90, 0xd2, 0x5b, 0x8d, 0x06, 0x09, 0x1e, 0xd4, 0xfb, 0x6c, 0x60, 0xee, 0xbf, + 0xfe, 0x80, 0x5b, 0x47, 0x10, 0x14, 0xce, 0x42, 0x12, 0x37, 0xb7, 0x70, 0x2d, 0x8a, 0xf2, 0x3b, + 0x3f, 0x10, 0x09, 0x93, 0x60, 0x17, 0x9e, 0x05, 0x60, 0x5b, 0x23, 0xf4, 0xf5, 0x60, 0x04, 0xed, + 0x7f, 0xfb, 0x01, 0x3f, 0x8c, 0xe3, 0x91, 0x78, 0x0c, 0xd8, 0xd1, 0x9e, 0xde, 0x0c, 0xbe, 0x1b, + 0x64, 0x40, 0x47, 0xe4, 0x69, 0x18, 0x7c, 0xd1, 0x36, 0x74, 0x47, 0xad, 0x47, 0x51, 0xff, 0x77, + 0x4e, 0x2d, 0xf0, 0x89, 0xc1, 0x9a, 0x86, 0x85, 0x1d, 0xb5, 0x6e, 0x47, 0xd1, 0xfe, 0x0f, 0x4e, + 0xeb, 0x12, 0x10, 0xe2, 0xaa, 0x6a, 0x3b, 0xfd, 0xe8, 0xfd, 0xc7, 0x82, 0x58, 0x10, 0x10, 0xa1, + 0xc9, 0xef, 0x5d, 0xbc, 0x1f, 0x45, 0xfb, 0x3d, 0x21, 0x34, 0xc7, 0x2f, 0xbc, 0x19, 0xd2, 0xe4, + 0x27, 0x3b, 0x61, 0x17, 0x41, 0xfc, 0x27, 0x9c, 0xd8, 0xa3, 0x20, 0x3d, 0xdb, 0x4e, 0xcd, 0xd1, + 0xa2, 0x8d, 0x7d, 0x8b, 0x8f, 0xb4, 0xc0, 0x2f, 0xcc, 0xc1, 0x90, 0xed, 0xd4, 0x6a, 0x2d, 0x5e, + 0x9f, 0x46, 0x90, 0xff, 0xe9, 0x0f, 0xdc, 0x2d, 0x0b, 0x97, 0x86, 0x8c, 0xf6, 0xb5, 0x5d, 0xc7, + 0x34, 0xe8, 0x2b, 0x90, 0x28, 0x0e, 0xdf, 0xe7, 0x1c, 0x7c, 0x24, 0x85, 0x79, 0xc8, 0x10, 0x5d, + 0x2c, 0x6c, 0x62, 0xfa, 0xbe, 0x2a, 0x82, 0xc5, 0x9f, 0x71, 0x03, 0x04, 0x88, 0x8a, 0x3f, 0xf9, + 0xd5, 0xd7, 0x26, 0xa5, 0x6f, 0xbc, 0x36, 0x29, 0xfd, 0xe1, 0x6b, 0x93, 0xd2, 0x87, 0xbf, 0x35, + 0x79, 0xe4, 0x1b, 0xdf, 0x9a, 0x3c, 0xf2, 0xbb, 0xdf, 0x9a, 0x3c, 0xd2, 0x79, 0xdb, 0x18, 0x16, + 0x8c, 0x05, 0x83, 0x6d, 0x18, 0xbf, 0x4d, 0x0e, 0x6c, 0x17, 0xd7, 0x0d, 0x6f, 0xb7, 0xd6, 0x5d, + 0xe4, 0xc0, 0x9f, 0x49, 0x64, 0xc1, 0x1c, 0xdc, 0xcb, 0x55, 0xf5, 0xfd, 0x2e, 0x77, 0x75, 0xf2, + 0x1d, 0x37, 0x86, 0xe5, 0x37, 0x41, 0x7c, 0x4e, 0xdf, 0x47, 0x27, 0x58, 0xce, 0xab, 0xb4, 0xac, + 0x06, 0x3f, 0xf9, 0x35, 0x48, 0x9e, 0x37, 0xad, 0x06, 0x9a, 0xf0, 0x8e, 0x67, 0x4a, 0xa7, 0x32, + 0xfc, 0xcc, 0x65, 0x21, 0xf1, 0xbd, 0x4f, 0x4f, 0x1d, 0x29, 0xee, 0x86, 0x35, 0xfc, 0x72, 0xa4, + 0x96, 0xa9, 0x39, 0x7d, 0x9f, 0x2a, 0xb9, 0x26, 0xbd, 0x2d, 0x49, 0xfa, 0xb0, 0xc5, 0xc6, 0xf6, + 0x64, 0x78, 0x63, 0xfb, 0x05, 0xdc, 0x68, 0x5c, 0xd6, 0x8d, 0x6b, 0xfa, 0x06, 0x41, 0xdb, 0x1a, + 0x60, 0xc7, 0x88, 0xe1, 0xc3, 0x31, 0x98, 0x0a, 0xeb, 0x4d, 0x1c, 0xc7, 0x76, 0xd4, 0xa6, 0xd9, + 0xed, 0xa6, 0xd2, 0x05, 0x48, 0x6f, 0x08, 0x1c, 0x94, 0x83, 0x41, 0x1b, 0x57, 0x0d, 0xbd, 0x66, + 0x53, 0x65, 0xe3, 0x8a, 0x78, 0x24, 0xca, 0xea, 0xaa, 0x6e, 0xd8, 0xfc, 0x7c, 0x24, 0x7b, 0x28, + 0xfe, 0x9c, 0x74, 0xb0, 0x91, 0x1c, 0x71, 0xbb, 0x12, 0x9a, 0x3e, 0xdc, 0x6b, 0xfb, 0x9f, 0x5a, + 0xc1, 0x53, 0xc1, 0xb7, 0xd7, 0xdf, 0xaf, 0x49, 0xde, 0x13, 0x87, 0x13, 0x55, 0xc3, 0x6e, 0x1a, + 0x76, 0x85, 0x8d, 0x30, 0x7b, 0xe0, 0xc6, 0xc8, 0xf8, 0x9b, 0xfa, 0xd8, 0xff, 0xbf, 0x04, 0x23, + 0x34, 0x0a, 0xe8, 0xce, 0x27, 0x4d, 0x3c, 0x91, 0x73, 0xc5, 0xd7, 0xfe, 0x7d, 0x92, 0x7a, 0xcd, + 0xb0, 0x4b, 0x48, 0x8f, 0x76, 0x6c, 0xc0, 0x84, 0xd6, 0x34, 0x1b, 0x98, 0xbe, 0x03, 0xaa, 0xb8, + 0x6d, 0xd1, 0xfc, 0xbe, 0xce, 0xf9, 0x8d, 0x7b, 0xe4, 0x8b, 0x82, 0xba, 0xb0, 0x04, 0x63, 0x6a, + 0xb5, 0x8a, 0xcd, 0x00, 0xcb, 0x88, 0x08, 0x15, 0x02, 0x66, 0x39, 0xa5, 0xcb, 0xad, 0xf8, 0x6c, + 0xb7, 0xb1, 0x7d, 0xdb, 0xfd, 0xbe, 0x41, 0xb3, 0x70, 0x1d, 0xeb, 0x8f, 0xea, 0xd8, 0xb9, 0x66, + 0x58, 0xbb, 0xdc, 0xbc, 0x8f, 0xb2, 0xae, 0xc4, 0x20, 0xbc, 0x2f, 0x0e, 0x93, 0xac, 0x61, 0x76, + 0x4b, 0xb5, 0xf1, 0xec, 0xd5, 0xc7, 0xb7, 0xb0, 0xa3, 0x3e, 0x3e, 0x5b, 0x35, 0x34, 0x9d, 0x8f, + 0xc4, 0x38, 0x1f, 0x17, 0xd2, 0x3e, 0xc3, 0xdb, 0xbb, 0x04, 0xe6, 0x02, 0x24, 0xe6, 0x0d, 0x4d, + 0x27, 0x1e, 0x59, 0xc3, 0xba, 0xd1, 0xe4, 0x61, 0xc9, 0x1e, 0xd0, 0xbd, 0x30, 0xa0, 0x36, 0x8d, + 0x96, 0xee, 0xb0, 0xd7, 0x57, 0xc5, 0xa1, 0xaf, 0xde, 0x9c, 0x3a, 0xf2, 0x7b, 0x37, 0xa7, 0xe2, + 0x8b, 0xba, 0xa3, 0xf0, 0xa6, 0x42, 0xe2, 0xf5, 0x4f, 0x4d, 0x49, 0xf2, 0x73, 0x30, 0x58, 0xc2, + 0xd5, 0xc3, 0xf0, 0x2a, 0xe1, 0x6a, 0x88, 0xd7, 0x43, 0x90, 0x5a, 0xd4, 0x1d, 0x76, 0x64, 0xf6, + 0x6e, 0x88, 0x6b, 0x3a, 0x3b, 0x85, 0x15, 0xea, 0x9f, 0xc0, 0x09, 0x6a, 0x09, 0x57, 0x5d, 0xd4, + 0x1a, 0xae, 0x86, 0x51, 0x09, 0x7b, 0x02, 0x2f, 0x96, 0x7e, 0xf7, 0x3f, 0x4f, 0x1e, 0x79, 0xe5, + 0xb5, 0xc9, 0x23, 0x5d, 0x47, 0xc2, 0x9f, 0x0e, 0xb9, 0x89, 0xf9, 0x10, 0xd8, 0xb5, 0xdd, 0x59, + 0x27, 0x10, 0x0b, 0x7f, 0x3d, 0x06, 0x93, 0x6d, 0x2e, 0xce, 0x27, 0x86, 0x6e, 0xd9, 0xa1, 0x00, + 0xa9, 0x92, 0x98, 0x6f, 0x0e, 0x9a, 0x1c, 0x7e, 0xf6, 0x80, 0xc9, 0x61, 0x58, 0xf4, 0x24, 0x72, + 0xc3, 0xe9, 0xe8, 0xdc, 0x20, 0xe4, 0x3f, 0x44, 0x6a, 0xf8, 0x5c, 0x02, 0xee, 0xa6, 0x97, 0x47, + 0xac, 0xa6, 0xa6, 0x3b, 0xb3, 0x55, 0x6b, 0xdf, 0x74, 0xe8, 0x74, 0x62, 0x6c, 0x73, 0x6b, 0x8c, + 0x79, 0xcd, 0x33, 0xac, 0xb9, 0x8b, 0x4b, 0x6e, 0x43, 0x72, 0x8d, 0xd0, 0x11, 0x43, 0x38, 0x86, + 0xa3, 0x36, 0xb8, 0x81, 0xd8, 0x03, 0x81, 0xb2, 0x0b, 0x27, 0x31, 0x06, 0xd5, 0xc4, 0x5d, 0x93, + 0x06, 0x56, 0xb7, 0xd9, 0xb9, 0xdd, 0x38, 0x9d, 0x42, 0x52, 0x04, 0x40, 0x8f, 0xe8, 0x4e, 0x40, + 0x52, 0x6d, 0xb1, 0x57, 0xce, 0x71, 0x32, 0xb7, 0xd0, 0x07, 0xf9, 0x32, 0x0c, 0xf2, 0xd7, 0x5c, + 0x28, 0x0b, 0xf1, 0x5d, 0xbc, 0x4f, 0xfb, 0xc9, 0x28, 0xe4, 0x27, 0x9a, 0x81, 0x24, 0x15, 0x9e, + 0x5f, 0x48, 0xc8, 0xcd, 0xb4, 0x49, 0x3f, 0x43, 0x85, 0x54, 0x18, 0x9a, 0xfc, 0x1c, 0xa4, 0x4a, + 0x46, 0x53, 0xd3, 0x8d, 0x20, 0xb7, 0x34, 0xe3, 0x46, 0x65, 0x36, 0x5b, 0xdc, 0xf5, 0x15, 0xf6, + 0x80, 0x8e, 0xc1, 0x00, 0x3b, 0xc7, 0xcd, 0x5f, 0x9b, 0xf3, 0x27, 0x79, 0x1e, 0x06, 0x29, 0xef, + 0x55, 0x13, 0x21, 0x7e, 0x03, 0x88, 0x1f, 0x18, 0xa7, 0x59, 0x92, 0xb3, 0x8f, 0x79, 0xc2, 0x22, + 0x48, 0xd4, 0x54, 0x47, 0xe5, 0x7a, 0xd3, 0xdf, 0xf2, 0x33, 0x90, 0xe2, 0x4c, 0x6c, 0x74, 0x06, + 0xe2, 0x86, 0x69, 0xf3, 0x17, 0xdf, 0xf9, 0x6e, 0xaa, 0xac, 0x9a, 0xc5, 0x04, 0x09, 0x1a, 0x85, + 0x20, 0x17, 0x95, 0xae, 0x51, 0x72, 0xde, 0xe7, 0x48, 0xbe, 0x21, 0xf7, 0xfd, 0x64, 0x43, 0xda, + 0xe6, 0x0e, 0xae, 0xb3, 0x7c, 0x3a, 0x06, 0x93, 0xbe, 0xd6, 0xab, 0xd8, 0x22, 0x6b, 0x3d, 0x16, + 0x60, 0xdc, 0x5b, 0x90, 0x4f, 0x48, 0xde, 0xde, 0xc5, 0x5d, 0xde, 0x0c, 0xf1, 0x39, 0xd3, 0x44, + 0x79, 0x48, 0xb1, 0x17, 0xdc, 0x06, 0xf3, 0x97, 0x84, 0xe2, 0x3e, 0x93, 0x36, 0xdb, 0xd8, 0x76, + 0xae, 0xa9, 0x96, 0x7b, 0xd5, 0x49, 0x3c, 0xcb, 0x4f, 0x43, 0x7a, 0xde, 0xd0, 0x6d, 0xac, 0xdb, + 0x2d, 0x1a, 0x7a, 0x5b, 0x0d, 0xa3, 0xba, 0xcb, 0x39, 0xb0, 0x07, 0x62, 0x70, 0xd5, 0x34, 0x29, + 0x65, 0x42, 0x21, 0x3f, 0x59, 0x9a, 0x2a, 0xae, 0x77, 0x35, 0xd1, 0xd3, 0x07, 0x37, 0x11, 0x57, + 0xd2, 0xb5, 0xd1, 0xef, 0x4b, 0x70, 0xb2, 0x3d, 0xa0, 0x76, 0xf1, 0xbe, 0x7d, 0xd0, 0x78, 0x3a, + 0x0f, 0xe9, 0x35, 0x7a, 0xdf, 0xf8, 0x32, 0xde, 0x47, 0x79, 0x18, 0xc4, 0xb5, 0x33, 0x67, 0xcf, + 0x3e, 0xfe, 0x34, 0xf3, 0xf6, 0x4b, 0x47, 0x14, 0x01, 0x28, 0xa4, 0x88, 0x56, 0xaf, 0x7f, 0x7a, + 0x4a, 0x2a, 0x26, 0x21, 0x6e, 0xb7, 0x9a, 0x77, 0xd4, 0x07, 0x5e, 0x4d, 0xc2, 0xb4, 0x9f, 0x92, + 0x26, 0xa0, 0xab, 0x6a, 0x43, 0xab, 0xa9, 0xde, 0x4d, 0xf0, 0xac, 0x4f, 0x47, 0x8a, 0xd1, 0x59, + 0xc5, 0x7c, 0x4f, 0x4b, 0xc9, 0xbf, 0x2e, 0x41, 0xe6, 0x8a, 0xe0, 0xbc, 0x8e, 0x1d, 0x74, 0x01, + 0xc0, 0xed, 0x49, 0x84, 0xc5, 0x5d, 0x33, 0xe1, 0xbe, 0x66, 0x5c, 0x1a, 0xc5, 0x87, 0x8e, 0x9e, + 0xa2, 0x8e, 0x66, 0x1a, 0x36, 0xbf, 0xde, 0x12, 0x41, 0xea, 0x22, 0xa3, 0x47, 0x00, 0xd1, 0x0c, + 0x56, 0xb9, 0x6a, 0x38, 0x9a, 0x5e, 0xaf, 0x98, 0xc6, 0x35, 0x7e, 0x69, 0x30, 0xae, 0x64, 0x69, + 0xcb, 0x15, 0xda, 0xb0, 0x46, 0xe0, 0x44, 0xe8, 0xb4, 0xcb, 0x85, 0xcc, 0x16, 0x6a, 0xad, 0x66, + 0x61, 0xdb, 0xe6, 0x49, 0x4a, 0x3c, 0xa2, 0x0b, 0x30, 0x68, 0xb6, 0xb6, 0x2a, 0x22, 0x23, 0x0c, + 0x9d, 0x39, 0xd9, 0x29, 0xbe, 0xc5, 0xf8, 0xf3, 0x08, 0x1f, 0x30, 0x5b, 0x5b, 0xc4, 0x1b, 0xee, + 0x81, 0x4c, 0x07, 0x61, 0x86, 0xae, 0x7a, 0x72, 0xd0, 0x6b, 0xec, 0x5c, 0x83, 0x8a, 0x69, 0x69, + 0x86, 0xa5, 0x39, 0xfb, 0xf4, 0x74, 0x4a, 0x5c, 0xc9, 0x8a, 0x86, 0x35, 0x0e, 0x97, 0x77, 0x61, + 0x74, 0x9d, 0x96, 0x52, 0x9e, 0xe4, 0x67, 0x3d, 0xf9, 0xa4, 0x68, 0xf9, 0xba, 0x4a, 0x16, 0x6b, + 0x93, 0xac, 0xf8, 0x7c, 0x57, 0xef, 0x7c, 0xea, 0xe0, 0xde, 0x19, 0x9c, 0xdc, 0xff, 0xf8, 0x44, + 0x20, 0xf8, 0x78, 0xe5, 0xec, 0x4b, 0x4f, 0xfd, 0x3a, 0x66, 0xd4, 0x0a, 0x22, 0xdf, 0x7b, 0xd2, + 0xcc, 0x47, 0xa4, 0xc9, 0x7c, 0x64, 0x08, 0xc9, 0x4f, 0xc3, 0xf0, 0x9a, 0x6a, 0x39, 0xeb, 0xd8, + 0xb9, 0x84, 0xd5, 0x1a, 0xb6, 0x82, 0xb3, 0xea, 0xb0, 0x98, 0x55, 0x11, 0x24, 0xe8, 0xd4, 0xc9, + 0x66, 0x15, 0xfa, 0x5b, 0xde, 0x81, 0x04, 0x3d, 0xa1, 0xe6, 0xce, 0xb8, 0x9c, 0x82, 0xcd, 0xb8, + 0x24, 0x57, 0xee, 0x3b, 0xd8, 0x16, 0x0b, 0x36, 0xfa, 0x80, 0x9e, 0x14, 0xf3, 0x66, 0xbc, 0xf7, + 0xbc, 0xc9, 0x1d, 0x91, 0xcf, 0x9e, 0x0d, 0x18, 0x2c, 0x92, 0x54, 0xbb, 0x58, 0x72, 0x05, 0x91, + 0x3c, 0x41, 0xd0, 0x32, 0x8c, 0x9a, 0xaa, 0xe5, 0xd0, 0xa3, 0xf9, 0x3b, 0x54, 0x0b, 0xee, 0xeb, + 0x53, 0xed, 0x91, 0x17, 0x50, 0x96, 0xf7, 0x32, 0x6c, 0xfa, 0x81, 0xf2, 0x1f, 0x25, 0x60, 0x80, + 0x1b, 0xe3, 0xcd, 0x30, 0xc8, 0xcd, 0xca, 0xbd, 0xf3, 0xee, 0x99, 0xf6, 0x89, 0x67, 0xc6, 0x9d, + 0x20, 0x38, 0x3f, 0x41, 0x83, 0x1e, 0x80, 0x54, 0x75, 0x47, 0xd5, 0xf4, 0x8a, 0x56, 0x13, 0x55, + 0xed, 0x6b, 0x37, 0xa7, 0x06, 0xe7, 0x09, 0x6c, 0xb1, 0xa4, 0x0c, 0xd2, 0xc6, 0xc5, 0x1a, 0x99, + 0xe9, 0x77, 0xb0, 0x56, 0xdf, 0x71, 0x78, 0x84, 0xf1, 0x27, 0x74, 0x1e, 0x12, 0xc4, 0x21, 0xf8, + 0xc5, 0xad, 0x7c, 0xdb, 0xda, 0xc2, 0x5d, 0xe0, 0x15, 0x53, 0xa4, 0xe3, 0x0f, 0xff, 0xc1, 0x94, + 0xa4, 0x50, 0x0a, 0x34, 0x0f, 0xc3, 0x0d, 0xd5, 0x76, 0x2a, 0x74, 0x86, 0x22, 0xdd, 0x27, 0x29, + 0x8b, 0x13, 0xed, 0x06, 0xe1, 0x86, 0xe5, 0xa2, 0x0f, 0x11, 0x2a, 0x06, 0xaa, 0xa1, 0x53, 0x90, + 0xa5, 0x4c, 0xaa, 0x46, 0xb3, 0xa9, 0x39, 0xac, 0x76, 0x1a, 0xa0, 0x76, 0x1f, 0x21, 0xf0, 0x79, + 0x0a, 0xa6, 0x15, 0xd4, 0x5d, 0x90, 0xa6, 0x57, 0x45, 0x28, 0x0a, 0x3b, 0x16, 0x99, 0x22, 0x00, + 0xda, 0xf8, 0x20, 0x8c, 0x7a, 0xf9, 0x91, 0xa1, 0xa4, 0x18, 0x17, 0x0f, 0x4c, 0x11, 0x1f, 0x83, + 0x09, 0x1d, 0xef, 0xd1, 0x83, 0x9a, 0x01, 0xec, 0x34, 0xc5, 0x46, 0xa4, 0xed, 0x4a, 0x90, 0xe2, + 0x7e, 0x18, 0xa9, 0x0a, 0xe3, 0x33, 0x5c, 0xa0, 0xb8, 0xc3, 0x2e, 0x94, 0xa2, 0x9d, 0x80, 0x94, + 0x6a, 0x9a, 0x0c, 0x61, 0x88, 0xe7, 0x47, 0xd3, 0xa4, 0x4d, 0xa7, 0x61, 0x8c, 0xea, 0x68, 0x61, + 0xbb, 0xd5, 0x70, 0x38, 0x93, 0x0c, 0xc5, 0x19, 0x25, 0x0d, 0x0a, 0x83, 0x53, 0xdc, 0x7b, 0x61, + 0x18, 0x5f, 0xd5, 0x6a, 0x58, 0xaf, 0x62, 0x86, 0x37, 0x4c, 0xf1, 0x32, 0x02, 0x48, 0x91, 0x1e, + 0x02, 0x37, 0xef, 0x55, 0x44, 0x4e, 0x1e, 0x61, 0xfc, 0x04, 0x7c, 0x8e, 0x81, 0xe5, 0x1c, 0x24, + 0x4a, 0xaa, 0xa3, 0x92, 0x02, 0xc2, 0xd9, 0x63, 0x13, 0x4d, 0x46, 0x21, 0x3f, 0xe5, 0xd7, 0x63, + 0x90, 0xb8, 0x62, 0x38, 0x18, 0x3d, 0xe1, 0x2b, 0xf0, 0x46, 0x3a, 0xf9, 0xf3, 0xba, 0x56, 0xd7, + 0x71, 0x6d, 0xd9, 0xae, 0xfb, 0xee, 0x75, 0x7b, 0xee, 0x14, 0x0b, 0xb8, 0xd3, 0x04, 0x24, 0x2d, + 0xa3, 0xa5, 0xd7, 0xc4, 0x89, 0x42, 0xfa, 0x80, 0xca, 0x90, 0x72, 0xbd, 0x24, 0x11, 0xe5, 0x25, + 0xa3, 0xc4, 0x4b, 0x88, 0x0f, 0x73, 0x80, 0x32, 0xb8, 0xc5, 0x9d, 0xa5, 0x08, 0x69, 0x37, 0x79, + 0x71, 0x6f, 0xeb, 0xcf, 0x61, 0x3d, 0x32, 0x32, 0x99, 0xb8, 0x63, 0xef, 0x1a, 0x8f, 0x79, 0x5c, + 0xd6, 0x6d, 0xe0, 0xd6, 0x0b, 0xb8, 0x15, 0xbf, 0x63, 0x3e, 0x48, 0xf5, 0xf2, 0xdc, 0x8a, 0xdd, + 0x33, 0x3f, 0x09, 0x69, 0x5b, 0xab, 0xeb, 0xaa, 0xd3, 0xb2, 0x30, 0xf7, 0x3c, 0x0f, 0x20, 0x7f, + 0x59, 0x82, 0x01, 0xe6, 0xc9, 0x3e, 0xbb, 0x49, 0x9d, 0xed, 0x16, 0xeb, 0x66, 0xb7, 0xf8, 0xe1, + 0xed, 0x36, 0x07, 0xe0, 0x0a, 0x63, 0xf3, 0xab, 0xbf, 0x1d, 0x2a, 0x06, 0x26, 0xe2, 0xba, 0x56, + 0xe7, 0x81, 0xea, 0x23, 0x92, 0x7f, 0x5f, 0x22, 0x45, 0x2a, 0x6f, 0x47, 0x73, 0x30, 0x2c, 0xe4, + 0xaa, 0x6c, 0x37, 0xd4, 0x3a, 0xf7, 0x9d, 0xbb, 0xbb, 0x0a, 0x77, 0xb1, 0xa1, 0xd6, 0x95, 0x21, + 0x2e, 0x0f, 0x79, 0xe8, 0x3c, 0x0e, 0xb1, 0x2e, 0xe3, 0x10, 0x18, 0xf8, 0xf8, 0xe1, 0x06, 0x3e, + 0x30, 0x44, 0x89, 0xf0, 0x10, 0x7d, 0x21, 0x46, 0x17, 0x2b, 0xa6, 0x61, 0xab, 0x8d, 0x1f, 0x45, + 0x44, 0xdc, 0x05, 0x69, 0xd3, 0x68, 0x54, 0x58, 0x0b, 0x3b, 0x69, 0x9b, 0x32, 0x8d, 0x86, 0xd2, + 0x36, 0xec, 0xc9, 0xdb, 0x14, 0x2e, 0x03, 0xb7, 0xc1, 0x6a, 0x83, 0x61, 0xab, 0x59, 0x90, 0x61, + 0xa6, 0xe0, 0x73, 0xd9, 0x63, 0xc4, 0x06, 0x74, 0x72, 0x94, 0xda, 0xe7, 0x5e, 0x26, 0x36, 0xc3, + 0x54, 0x38, 0x1e, 0xa1, 0x60, 0xa9, 0xbf, 0xd3, 0x2a, 0xd7, 0xef, 0x96, 0x0a, 0xc7, 0x93, 0x7f, + 0x4e, 0x02, 0x58, 0x22, 0x96, 0xa5, 0xfa, 0x92, 0x59, 0xc8, 0xa6, 0x22, 0x54, 0x02, 0x3d, 0x4f, + 0x76, 0x1b, 0x34, 0xde, 0x7f, 0xc6, 0xf6, 0xcb, 0x3d, 0x0f, 0xc3, 0x9e, 0x33, 0xda, 0x58, 0x08, + 0x33, 0xd9, 0xa3, 0xaa, 0x5e, 0xc7, 0x8e, 0x92, 0xb9, 0xea, 0x7b, 0x92, 0xff, 0x85, 0x04, 0x69, + 0x2a, 0xd3, 0x32, 0x76, 0xd4, 0xc0, 0x18, 0x4a, 0x87, 0x1f, 0xc3, 0xbb, 0x01, 0x18, 0x1b, 0x5b, + 0x7b, 0x19, 0x73, 0xcf, 0x4a, 0x53, 0xc8, 0xba, 0xf6, 0x32, 0x46, 0xe7, 0x5c, 0x83, 0xc7, 0x7b, + 0x1b, 0x5c, 0x54, 0xdd, 0xdc, 0xec, 0xc7, 0x61, 0x90, 0x7e, 0x2a, 0x67, 0xcf, 0xe6, 0x85, 0xf4, + 0x80, 0xde, 0x6a, 0x6e, 0xec, 0xd9, 0xf2, 0x8b, 0x30, 0xb8, 0xb1, 0xc7, 0xf6, 0x3e, 0xee, 0x82, + 0xb4, 0x65, 0x18, 0x7c, 0x4e, 0x66, 0xb5, 0x50, 0x8a, 0x00, 0xe8, 0x14, 0x24, 0xd6, 0xfb, 0x31, + 0x6f, 0xbd, 0xef, 0x6d, 0x58, 0xc4, 0xfb, 0xda, 0xb0, 0x38, 0xfd, 0x1f, 0x24, 0x18, 0xf2, 0xe5, + 0x07, 0xf4, 0x38, 0x1c, 0x2d, 0x2e, 0xad, 0xce, 0x5f, 0xae, 0x2c, 0x96, 0x2a, 0x17, 0x97, 0xe6, + 0x16, 0xbc, 0xbb, 0x24, 0xf9, 0x63, 0xd7, 0x6f, 0x4c, 0x23, 0x1f, 0xee, 0xa6, 0xbe, 0xab, 0x1b, + 0xd7, 0x74, 0x34, 0x0b, 0x13, 0x41, 0x92, 0xb9, 0xe2, 0x7a, 0x79, 0x65, 0x23, 0x2b, 0xe5, 0x8f, + 0x5e, 0xbf, 0x31, 0x3d, 0xe6, 0xa3, 0x98, 0xdb, 0xb2, 0xb1, 0xee, 0xb4, 0x13, 0xcc, 0xaf, 0x2e, + 0x2f, 0x2f, 0x6e, 0x64, 0x63, 0x6d, 0x04, 0x3c, 0x61, 0x3f, 0x04, 0x63, 0x41, 0x82, 0x95, 0xc5, + 0xa5, 0x6c, 0x3c, 0x8f, 0xae, 0xdf, 0x98, 0x1e, 0xf1, 0x61, 0xaf, 0x68, 0x8d, 0x7c, 0xea, 0x03, + 0x9f, 0x99, 0x3c, 0xf2, 0x4b, 0xbf, 0x38, 0x29, 0x11, 0xcd, 0x86, 0x03, 0x39, 0x02, 0x3d, 0x02, + 0xc7, 0xd7, 0x17, 0x17, 0x56, 0xca, 0xa5, 0xca, 0xf2, 0xfa, 0x42, 0x85, 0x7d, 0x43, 0xc3, 0xd5, + 0x6e, 0xf4, 0xfa, 0x8d, 0xe9, 0x21, 0xae, 0x52, 0x37, 0xec, 0x35, 0xa5, 0x7c, 0x65, 0x75, 0xa3, + 0x9c, 0x95, 0x18, 0xf6, 0x9a, 0x85, 0xaf, 0x1a, 0x0e, 0xfb, 0x96, 0xd6, 0x63, 0x70, 0xa2, 0x03, + 0xb6, 0xab, 0xd8, 0xd8, 0xf5, 0x1b, 0xd3, 0xc3, 0x6b, 0x16, 0x66, 0xf1, 0x43, 0x29, 0x66, 0x20, + 0xd7, 0x4e, 0xb1, 0xba, 0xb6, 0xba, 0x3e, 0xb7, 0x94, 0x9d, 0xce, 0x67, 0xaf, 0xdf, 0x98, 0xce, + 0x88, 0x64, 0x48, 0xf0, 0x3d, 0xcd, 0xee, 0xe4, 0x8a, 0xe7, 0x4f, 0x1f, 0x85, 0xfb, 0xf8, 0x96, + 0xa7, 0xed, 0xa8, 0xbb, 0x9a, 0x5e, 0x77, 0x37, 0x96, 0xf9, 0x33, 0x5f, 0xf9, 0x1c, 0xe3, 0x7b, + 0xcb, 0x02, 0xda, 0x73, 0x7b, 0x39, 0xdf, 0xfd, 0xcd, 0x51, 0x3e, 0x62, 0xf7, 0x34, 0x7a, 0xe9, + 0xd4, 0xfd, 0x55, 0x44, 0x3e, 0x62, 0x83, 0x3c, 0xdf, 0x73, 0x71, 0x27, 0x7f, 0x50, 0x82, 0x91, + 0x4b, 0x9a, 0xed, 0x18, 0x96, 0x56, 0x55, 0x1b, 0xf4, 0x06, 0xc9, 0xb9, 0x7e, 0x73, 0x6b, 0x28, + 0xd4, 0x9f, 0x85, 0x81, 0xab, 0x6a, 0x83, 0x25, 0xb5, 0x38, 0xfd, 0xe0, 0x45, 0x67, 0xf3, 0x79, + 0xa9, 0x4d, 0x30, 0x60, 0x64, 0xf2, 0xaf, 0xc4, 0x60, 0x94, 0x06, 0x83, 0xcd, 0x3e, 0x85, 0x44, + 0xd6, 0x58, 0x45, 0x48, 0x58, 0xaa, 0xc3, 0x37, 0x05, 0x8b, 0x33, 0x7c, 0xa3, 0xfb, 0x81, 0xe8, + 0xcd, 0xeb, 0x99, 0x12, 0xae, 0x2a, 0x94, 0x16, 0xbd, 0x03, 0x52, 0x4d, 0x75, 0xaf, 0x42, 0xf9, + 0xb0, 0x95, 0xcb, 0xdc, 0xc1, 0xf8, 0xdc, 0xba, 0x39, 0x35, 0xba, 0xaf, 0x36, 0x1b, 0x05, 0x59, + 0xf0, 0x91, 0x95, 0xc1, 0xa6, 0xba, 0x47, 0x44, 0x44, 0x26, 0x8c, 0x12, 0x68, 0x75, 0x47, 0xd5, + 0xeb, 0x98, 0x75, 0x42, 0xb7, 0x38, 0x8b, 0x97, 0x0e, 0xdc, 0xc9, 0x31, 0xaf, 0x13, 0x1f, 0x3b, + 0x59, 0x19, 0x6e, 0xaa, 0x7b, 0xf3, 0x14, 0x40, 0x7a, 0x2c, 0xa4, 0x3e, 0xf6, 0xa9, 0xa9, 0x23, + 0xf4, 0xe5, 0xc1, 0x37, 0x25, 0x00, 0xcf, 0x62, 0xe8, 0x1d, 0x90, 0xad, 0xba, 0x4f, 0x94, 0xd6, + 0xe6, 0x63, 0xf8, 0x60, 0xb7, 0xb1, 0x08, 0xd9, 0x9b, 0xcd, 0xcd, 0xdf, 0xb8, 0x39, 0x25, 0x29, + 0xa3, 0xd5, 0xd0, 0x50, 0xbc, 0x1d, 0x86, 0x5a, 0x66, 0x4d, 0x75, 0x70, 0x85, 0xae, 0xe3, 0x62, + 0x91, 0xf3, 0xfc, 0x24, 0xe1, 0x75, 0xeb, 0xe6, 0x14, 0x62, 0x6a, 0xf9, 0x88, 0x65, 0x3a, 0xfb, + 0x03, 0x83, 0x10, 0x02, 0x9f, 0x4e, 0x5f, 0x93, 0x60, 0xa8, 0xe4, 0x3b, 0xc9, 0x95, 0x83, 0xc1, + 0xa6, 0xa1, 0x6b, 0xbb, 0xdc, 0x1f, 0xd3, 0x8a, 0x78, 0x44, 0x79, 0x48, 0xb1, 0x4b, 0x75, 0xce, + 0xbe, 0xd8, 0xea, 0x14, 0xcf, 0x84, 0xea, 0x1a, 0xde, 0xb2, 0x35, 0x31, 0x1a, 0x8a, 0x78, 0x44, + 0x17, 0x21, 0x6b, 0xe3, 0x6a, 0xcb, 0xd2, 0x9c, 0xfd, 0x4a, 0xd5, 0xd0, 0x1d, 0xb5, 0xea, 0xb0, + 0xeb, 0x59, 0xc5, 0xbb, 0x6e, 0xdd, 0x9c, 0x3a, 0xce, 0x64, 0x0d, 0x63, 0xc8, 0xca, 0xa8, 0x00, + 0xcd, 0x33, 0x08, 0xe9, 0xa1, 0x86, 0x1d, 0x55, 0x6b, 0xd8, 0x39, 0xf6, 0x1e, 0x4c, 0x3c, 0xfa, + 0x74, 0xf9, 0xfc, 0xa0, 0x7f, 0x63, 0xeb, 0x22, 0x64, 0x0d, 0x13, 0x5b, 0x81, 0x42, 0x54, 0x0a, + 0xf7, 0x1c, 0xc6, 0x90, 0x95, 0x51, 0x01, 0x12, 0x45, 0xaa, 0x43, 0x86, 0x59, 0x2c, 0x14, 0xcd, + 0xd6, 0x96, 0xb7, 0x1f, 0x36, 0xd1, 0x36, 0x1a, 0x73, 0xfa, 0x7e, 0xf1, 0x09, 0x8f, 0x7b, 0x98, + 0x4e, 0xfe, 0xfa, 0x17, 0x1f, 0x9d, 0xe0, 0xae, 0xe1, 0xed, 0x4f, 0x5d, 0xc6, 0xfb, 0x64, 0xf8, + 0x39, 0xea, 0x1a, 0xc5, 0x24, 0x65, 0xe7, 0x8b, 0xaa, 0xd6, 0x10, 0xd7, 0x8c, 0x15, 0xfe, 0x84, + 0x0a, 0x30, 0x60, 0x3b, 0xaa, 0xd3, 0xb2, 0xf9, 0xc7, 0xbf, 0xe4, 0x6e, 0xae, 0x56, 0x34, 0xf4, + 0xda, 0x3a, 0xc5, 0x54, 0x38, 0x05, 0xba, 0x08, 0x03, 0x8e, 0xb1, 0x8b, 0x75, 0x6e, 0xc2, 0x03, + 0xc5, 0x37, 0x7d, 0x2d, 0xc7, 0xa8, 0x89, 0x45, 0x6a, 0xb8, 0x81, 0xeb, 0xac, 0xac, 0xda, 0x51, + 0xc9, 0xea, 0x83, 0x7e, 0x03, 0xac, 0xb8, 0x78, 0xe0, 0x20, 0xe4, 0x96, 0x0a, 0xf3, 0x93, 0x95, + 0x51, 0x17, 0xb4, 0x4e, 0x21, 0xe8, 0x72, 0xe0, 0xc8, 0x21, 0xff, 0x50, 0xde, 0xbd, 0xdd, 0xd4, + 0xf7, 0xf9, 0xb4, 0xd8, 0x9f, 0xf0, 0x1f, 0x58, 0xbc, 0x08, 0xd9, 0x96, 0xbe, 0x65, 0xe8, 0xf4, + 0x2e, 0x20, 0xaf, 0xef, 0xc9, 0xfa, 0x2e, 0xee, 0x77, 0x8e, 0x30, 0x86, 0xac, 0x8c, 0xba, 0xa0, + 0x4b, 0x6c, 0x15, 0x50, 0x83, 0x11, 0x0f, 0x8b, 0x06, 0x6a, 0x3a, 0x32, 0x50, 0xef, 0xe1, 0x81, + 0x7a, 0x34, 0xdc, 0x8b, 0x17, 0xab, 0xc3, 0x2e, 0x90, 0x90, 0xa1, 0x4b, 0x00, 0x5e, 0x7a, 0xa0, + 0xfb, 0x14, 0x43, 0xdd, 0x07, 0xde, 0xcb, 0x31, 0x62, 0xbd, 0xe7, 0xd1, 0xa2, 0x77, 0xc1, 0x78, + 0x53, 0xd3, 0x2b, 0x36, 0x6e, 0x6c, 0x57, 0xb8, 0x81, 0x09, 0x4b, 0xfa, 0x29, 0x97, 0xe2, 0xd2, + 0xc1, 0xfc, 0xe1, 0xd6, 0xcd, 0xa9, 0x3c, 0x4f, 0xa1, 0xed, 0x2c, 0x65, 0x65, 0xac, 0xa9, 0xe9, + 0xeb, 0xb8, 0xb1, 0x5d, 0x72, 0x61, 0x85, 0xcc, 0x07, 0x3e, 0x35, 0x75, 0x84, 0x87, 0xeb, 0x11, + 0xf9, 0x1c, 0xdd, 0x3b, 0xe7, 0x61, 0x86, 0x6d, 0xb2, 0x26, 0x51, 0xc5, 0x03, 0xdd, 0xd1, 0x48, + 0x2b, 0x1e, 0x80, 0x85, 0xf9, 0x2b, 0xff, 0x69, 0x5a, 0x92, 0x3f, 0x2f, 0xc1, 0x40, 0xe9, 0xca, + 0x9a, 0xaa, 0x59, 0x68, 0x11, 0xc6, 0x3c, 0xcf, 0x09, 0x06, 0xf9, 0xc9, 0x5b, 0x37, 0xa7, 0x72, + 0x61, 0xe7, 0x72, 0xa3, 0xdc, 0x73, 0x60, 0x11, 0xe6, 0x8b, 0xdd, 0x16, 0xae, 0x01, 0x56, 0x6d, + 0x28, 0x72, 0xfb, 0xb2, 0x36, 0xa4, 0x66, 0x19, 0x06, 0x99, 0xb4, 0x36, 0x2a, 0x40, 0xd2, 0x24, + 0x3f, 0xf8, 0x8b, 0x81, 0xc9, 0xae, 0xce, 0x4b, 0xf1, 0xdd, 0x8d, 0x4c, 0x42, 0x22, 0x7f, 0x24, + 0x06, 0x50, 0xba, 0x72, 0x65, 0xc3, 0xd2, 0xcc, 0x06, 0x76, 0x6e, 0xa7, 0xe6, 0x1b, 0x70, 0xd4, + 0xb7, 0x4a, 0xb2, 0xaa, 0x21, 0xed, 0xa7, 0x6f, 0xdd, 0x9c, 0x3a, 0x19, 0xd6, 0xde, 0x87, 0x26, + 0x2b, 0xe3, 0xde, 0x7a, 0xc9, 0xaa, 0x76, 0xe4, 0x5a, 0xb3, 0x1d, 0x97, 0x6b, 0xbc, 0x3b, 0x57, + 0x1f, 0x9a, 0x9f, 0x6b, 0xc9, 0x76, 0x3a, 0x9b, 0x76, 0x1d, 0x86, 0x3c, 0x93, 0xd8, 0xa8, 0x04, + 0x29, 0x87, 0xff, 0xe6, 0x16, 0x96, 0xbb, 0x5b, 0x58, 0x90, 0x71, 0x2b, 0xbb, 0x94, 0xf2, 0x9f, + 0x4b, 0x00, 0x9e, 0xcf, 0xfe, 0x78, 0xba, 0x18, 0x49, 0xe5, 0x3c, 0xf1, 0xc6, 0x0f, 0x55, 0xaa, + 0x71, 0xea, 0x90, 0x3d, 0x7f, 0x3a, 0x06, 0xe3, 0x9b, 0x22, 0xf3, 0xfc, 0xd8, 0xdb, 0x60, 0x0d, + 0x06, 0xb1, 0xee, 0x58, 0x1a, 0x35, 0x02, 0x19, 0xed, 0xc7, 0xba, 0x8d, 0x76, 0x07, 0x9d, 0xe8, + 0xc7, 0x6c, 0xc4, 0xa6, 0x3b, 0x67, 0x13, 0xb2, 0xc6, 0x87, 0xe2, 0x90, 0xeb, 0x46, 0x89, 0xe6, + 0x61, 0xb4, 0x6a, 0x61, 0x0a, 0xa8, 0xf8, 0x77, 0xfe, 0x8a, 0x79, 0xaf, 0xb2, 0x0c, 0x21, 0xc8, + 0xca, 0x88, 0x80, 0xf0, 0xd9, 0xa3, 0x0e, 0xa4, 0xec, 0x23, 0x6e, 0x47, 0xb0, 0xfa, 0xac, 0xf3, + 0x64, 0x3e, 0x7d, 0x88, 0x4e, 0x82, 0x0c, 0xd8, 0xfc, 0x31, 0xe2, 0x41, 0xe9, 0x04, 0xf2, 0x12, + 0x8c, 0x6a, 0xba, 0xe6, 0x68, 0x6a, 0xa3, 0xb2, 0xa5, 0x36, 0x54, 0xbd, 0x7a, 0x98, 0xaa, 0x99, + 0xa5, 0x7c, 0xde, 0x6d, 0x88, 0x9d, 0xac, 0x8c, 0x70, 0x48, 0x91, 0x01, 0xd0, 0x25, 0x18, 0x14, + 0x5d, 0x25, 0x0e, 0x55, 0x6d, 0x08, 0x72, 0x5f, 0x81, 0xf7, 0x33, 0x71, 0x18, 0x53, 0x70, 0xed, + 0xff, 0x0f, 0xc5, 0xc1, 0x86, 0x62, 0x19, 0x80, 0x85, 0x3b, 0x49, 0xb0, 0x87, 0x18, 0x0d, 0x92, + 0x30, 0xd2, 0x8c, 0x43, 0xc9, 0x76, 0x7c, 0xe3, 0x71, 0x33, 0x06, 0x19, 0xff, 0x78, 0xfc, 0x25, + 0x9d, 0x95, 0xd0, 0xa2, 0x97, 0x89, 0x12, 0xfc, 0x13, 0xa0, 0x5d, 0x32, 0x51, 0x9b, 0xf7, 0xf6, + 0x4e, 0x41, 0xff, 0x33, 0x06, 0x03, 0x6b, 0xaa, 0xa5, 0x36, 0x6d, 0x54, 0x6d, 0xab, 0x34, 0xc5, + 0xf6, 0x63, 0xdb, 0x87, 0x9e, 0xf9, 0x6e, 0x47, 0x44, 0xa1, 0xf9, 0xb1, 0x0e, 0x85, 0xe6, 0x4f, + 0xc0, 0x08, 0x59, 0x0e, 0xfb, 0x8e, 0x30, 0x10, 0x6b, 0x0f, 0x17, 0x4f, 0x78, 0x5c, 0x82, 0xed, + 0x6c, 0xb5, 0x7c, 0xc5, 0x7f, 0x86, 0x61, 0x88, 0x60, 0x78, 0x89, 0x99, 0x90, 0x1f, 0xf3, 0x96, + 0xa5, 0xbe, 0x46, 0x59, 0x81, 0xa6, 0xba, 0x57, 0x66, 0x0f, 0x68, 0x09, 0xd0, 0x8e, 0xbb, 0x33, + 0x52, 0xf1, 0xcc, 0x49, 0xe8, 0xef, 0xbe, 0x75, 0x73, 0xea, 0x04, 0xa3, 0x6f, 0xc7, 0x91, 0x95, + 0x31, 0x0f, 0x28, 0xb8, 0x3d, 0x09, 0x40, 0xf4, 0xaa, 0xb0, 0xd3, 0x82, 0x6c, 0xb9, 0x73, 0xf4, + 0xd6, 0xcd, 0xa9, 0x31, 0xc6, 0xc5, 0x6b, 0x93, 0x95, 0x34, 0x79, 0x28, 0x91, 0xdf, 0x3e, 0xcf, + 0xfe, 0x8c, 0x04, 0xc8, 0x4b, 0xf9, 0x0a, 0xb6, 0x4d, 0xb2, 0x3e, 0x23, 0x85, 0xb8, 0xaf, 0x6a, + 0x96, 0x7a, 0x17, 0xe2, 0x1e, 0xbd, 0x28, 0xc4, 0x7d, 0x91, 0xf2, 0xb4, 0x97, 0x1e, 0x63, 0x7c, + 0x1c, 0x3b, 0x1c, 0xad, 0x9c, 0x99, 0x37, 0x34, 0x41, 0xdd, 0x96, 0x0f, 0x8f, 0xc8, 0xff, 0x46, + 0x82, 0x13, 0x6d, 0x1e, 0xe5, 0x0a, 0xfb, 0x57, 0x00, 0x59, 0xbe, 0x46, 0xfe, 0x3d, 0x37, 0x26, + 0xf4, 0x81, 0x1d, 0x74, 0xcc, 0x6a, 0xcb, 0xbb, 0xb7, 0x2f, 0xc3, 0xb3, 0xb3, 0x99, 0xff, 0x5c, + 0x82, 0x09, 0x7f, 0xf7, 0xae, 0x22, 0x2b, 0x90, 0xf1, 0xf7, 0xce, 0x55, 0xb8, 0xaf, 0x1f, 0x15, + 0xb8, 0xf4, 0x01, 0x7a, 0xf4, 0xbc, 0x17, 0xae, 0x6c, 0xef, 0xec, 0xf1, 0xbe, 0xad, 0x21, 0x64, + 0x0a, 0x87, 0x6d, 0x82, 0x8e, 0xc7, 0xff, 0x91, 0x20, 0xb1, 0x66, 0x18, 0x0d, 0x64, 0xc0, 0x98, + 0x6e, 0x38, 0x15, 0xe2, 0x59, 0xb8, 0x56, 0xe1, 0x8b, 0x6e, 0x96, 0x07, 0xe7, 0x0f, 0x66, 0xa4, + 0xef, 0xdc, 0x9c, 0x6a, 0x67, 0xa5, 0x8c, 0xea, 0x86, 0x53, 0xa4, 0x90, 0x0d, 0xb6, 0x24, 0x7f, + 0x17, 0x0c, 0x07, 0x3b, 0x63, 0x59, 0xf2, 0x85, 0x03, 0x77, 0x16, 0x64, 0x73, 0xeb, 0xe6, 0xd4, + 0x84, 0x17, 0x31, 0x2e, 0x58, 0x56, 0x32, 0x5b, 0xbe, 0xde, 0xd9, 0xf1, 0xae, 0xef, 0x7d, 0x6a, + 0x4a, 0x3a, 0xfd, 0x25, 0x09, 0xc0, 0xdb, 0x79, 0x40, 0x8f, 0xc0, 0xf1, 0xe2, 0xea, 0x4a, 0xa9, + 0xb2, 0xbe, 0x31, 0xb7, 0xb1, 0xb9, 0x5e, 0xd9, 0x5c, 0x59, 0x5f, 0x2b, 0xcf, 0x2f, 0x5e, 0x5c, + 0x2c, 0x97, 0xbc, 0xed, 0x71, 0xdb, 0xc4, 0x55, 0x6d, 0x5b, 0xc3, 0x35, 0xf4, 0x00, 0x4c, 0x04, + 0xb1, 0xc9, 0x53, 0xb9, 0x94, 0x95, 0xf2, 0x99, 0xeb, 0x37, 0xa6, 0x53, 0xac, 0x16, 0xc3, 0x35, + 0x74, 0x0a, 0x8e, 0xb6, 0xe3, 0x2d, 0xae, 0x2c, 0x64, 0x63, 0xf9, 0xe1, 0xeb, 0x37, 0xa6, 0xd3, + 0x6e, 0xd1, 0x86, 0x64, 0x40, 0x7e, 0x4c, 0xce, 0x2f, 0x9e, 0x87, 0xeb, 0x37, 0xa6, 0x07, 0x98, + 0x01, 0xf3, 0x89, 0x0f, 0x7c, 0x66, 0xf2, 0x48, 0xf1, 0x62, 0xd7, 0x0d, 0xf0, 0x47, 0x7a, 0xda, + 0x6e, 0xcf, 0xdd, 0xd4, 0x0e, 0xee, 0x7a, 0x5f, 0x3f, 0x0e, 0x53, 0x5d, 0x76, 0xbd, 0x9d, 0xbd, + 0x88, 0x0d, 0xef, 0x1e, 0x5b, 0xdb, 0x91, 0x5b, 0xd7, 0x5d, 0x36, 0xcb, 0x0f, 0xbf, 0xa1, 0xdd, + 0xd7, 0xde, 0xbd, 0xfc, 0x6f, 0x13, 0x80, 0x96, 0xed, 0xfa, 0x3c, 0x29, 0xaa, 0x7c, 0x47, 0xb4, + 0x42, 0x7b, 0x36, 0xd2, 0x0f, 0xb5, 0x67, 0xb3, 0x1c, 0xd8, 0x05, 0x89, 0x1d, 0x6c, 0xa7, 0xb5, + 0xef, 0xad, 0x90, 0xf8, 0x8f, 0x64, 0x2b, 0xa4, 0x73, 0xa5, 0x94, 0xb8, 0x7d, 0x4b, 0xaa, 0xe4, + 0x61, 0x97, 0x95, 0x7c, 0x87, 0x73, 0xa0, 0xc7, 0x0e, 0x67, 0xae, 0xeb, 0x36, 0x26, 0xa7, 0x46, + 0x67, 0xc5, 0x95, 0x9b, 0xc1, 0xfe, 0xe6, 0x36, 0x7e, 0x27, 0x27, 0xf5, 0x01, 0x31, 0xb3, 0x9d, + 0x84, 0x7c, 0xbb, 0x3b, 0x89, 0xe4, 0x2b, 0x7f, 0x34, 0x0e, 0xd9, 0x65, 0xbb, 0x5e, 0xae, 0x69, + 0xce, 0x1d, 0xf2, 0xb5, 0x67, 0xbb, 0x2f, 0x53, 0xd1, 0xad, 0x9b, 0x53, 0x23, 0xcc, 0xa6, 0x3d, + 0x2c, 0xd9, 0x84, 0xd1, 0xd0, 0xcb, 0x01, 0xee, 0x59, 0xa5, 0xc3, 0xbc, 0xa3, 0x08, 0xb1, 0x92, + 0xe9, 0xaa, 0xc2, 0xe7, 0xdf, 0x68, 0xaf, 0xb3, 0x33, 0x33, 0x87, 0xba, 0x74, 0x27, 0xf7, 0xf4, + 0xbc, 0x31, 0xcb, 0x43, 0x2e, 0x3c, 0x28, 0xee, 0x88, 0xfd, 0x91, 0x04, 0x43, 0xcb, 0xb6, 0x58, + 0x45, 0xe3, 0x1f, 0xd3, 0x1d, 0x85, 0xa7, 0xdc, 0x8b, 0x24, 0xf1, 0xfe, 0xfc, 0x56, 0x5c, 0x2e, + 0xf1, 0x8c, 0x70, 0x14, 0xc6, 0x7d, 0x7a, 0xba, 0xfa, 0xff, 0x76, 0x8c, 0xe6, 0xc7, 0x22, 0xae, + 0x6b, 0xba, 0x5b, 0x54, 0xe0, 0xbf, 0xac, 0xeb, 0x25, 0xcf, 0xce, 0x89, 0xc3, 0xda, 0x79, 0x97, + 0x26, 0x88, 0x90, 0x3d, 0xdd, 0x8a, 0x71, 0xb9, 0x7d, 0x35, 0x2f, 0x1d, 0xe0, 0xa0, 0x4c, 0x68, + 0xcd, 0x2e, 0xbf, 0x2e, 0xc1, 0xf0, 0xb2, 0x5d, 0xdf, 0xd4, 0x6b, 0xff, 0xcf, 0xfb, 0xef, 0x36, + 0x1c, 0x0d, 0x68, 0x7a, 0x87, 0x4c, 0x7a, 0xe6, 0xd5, 0x04, 0xc4, 0x97, 0xed, 0x3a, 0x7a, 0x09, + 0x46, 0xc3, 0x45, 0xc3, 0xe9, 0x6e, 0x39, 0xbb, 0x7d, 0x46, 0xc8, 0x9f, 0xe9, 0x1f, 0xd7, 0xd5, + 0x64, 0x17, 0x86, 0x83, 0x33, 0xc7, 0xa9, 0x1e, 0x4c, 0x02, 0x98, 0xf9, 0xc7, 0xfa, 0xc5, 0x74, + 0x3b, 0x7b, 0x07, 0xa4, 0xdc, 0xa4, 0x77, 0x6f, 0x0f, 0x6a, 0x81, 0x94, 0x7f, 0xb8, 0x0f, 0x24, + 0x97, 0xfb, 0x4b, 0x30, 0x1a, 0x4e, 0x29, 0xbd, 0xac, 0x17, 0xc2, 0xed, 0x69, 0xbd, 0x6e, 0xa1, + 0xb5, 0x05, 0xe0, 0x8b, 0x83, 0xfb, 0x7b, 0x70, 0xf0, 0xd0, 0xf2, 0x8f, 0xf6, 0x85, 0xe6, 0x2e, + 0xae, 0x6e, 0x77, 0x31, 0xfe, 0xaf, 0x62, 0x70, 0xda, 0x5f, 0xe6, 0xbe, 0xd4, 0xc2, 0xd6, 0xbe, + 0x5b, 0xc9, 0x9a, 0x6a, 0x5d, 0xd3, 0xfd, 0xb7, 0xeb, 0x4e, 0xf8, 0xa3, 0x86, 0xe2, 0x0a, 0x79, + 0x65, 0x1d, 0x86, 0xd6, 0xd4, 0x3a, 0x56, 0xf0, 0x4b, 0x2d, 0x6c, 0x3b, 0x1d, 0x6e, 0x77, 0x1d, + 0x83, 0x01, 0x63, 0x7b, 0x5b, 0x9c, 0x35, 0x4b, 0x28, 0xfc, 0x09, 0x4d, 0x40, 0xb2, 0xa1, 0x35, + 0x35, 0x16, 0x99, 0x09, 0x85, 0x3d, 0xa0, 0x29, 0x18, 0xaa, 0x92, 0x00, 0xac, 0xb0, 0x73, 0xf3, + 0x09, 0xf1, 0xe5, 0xa5, 0x96, 0xee, 0x6c, 0x10, 0x88, 0xfc, 0x2c, 0x64, 0x58, 0x7f, 0xdc, 0xfa, + 0x27, 0x20, 0x45, 0xcf, 0x39, 0x7b, 0xbd, 0x0e, 0x92, 0xe7, 0xcb, 0xec, 0x26, 0x18, 0xe3, 0xc2, + 0x3a, 0x66, 0x0f, 0xc5, 0x62, 0x57, 0x53, 0x9e, 0x8a, 0xae, 0x08, 0x98, 0xa1, 0x5c, 0x33, 0xfe, + 0x66, 0x12, 0x8e, 0xf2, 0xf5, 0x87, 0x6a, 0x6a, 0xb3, 0x3b, 0x8e, 0x23, 0x6e, 0x2b, 0x03, 0x4f, + 0x01, 0xaa, 0xa9, 0xc9, 0xfb, 0x90, 0xb8, 0xe4, 0x38, 0x26, 0x3a, 0x0d, 0x49, 0xab, 0xd5, 0xc0, + 0xe2, 0x55, 0x8c, 0x5b, 0x4a, 0xaa, 0xa6, 0x36, 0x43, 0x10, 0x94, 0x56, 0x03, 0x2b, 0x0c, 0x05, + 0x95, 0x61, 0x6a, 0xbb, 0xd5, 0x68, 0xec, 0x57, 0x6a, 0x98, 0xfe, 0xd3, 0x3c, 0xf7, 0xdf, 0xce, + 0xe0, 0x3d, 0x53, 0xd5, 0xdd, 0x7a, 0x3f, 0xa5, 0x9c, 0xa4, 0x68, 0x25, 0x8a, 0x25, 0xfe, 0xe5, + 0x4c, 0x59, 0xe0, 0xc8, 0xbf, 0x17, 0x83, 0x94, 0x60, 0x4d, 0xaf, 0x66, 0xe1, 0x06, 0xae, 0x3a, + 0x86, 0x38, 0xca, 0xe0, 0x3e, 0x23, 0x04, 0xf1, 0x3a, 0x1f, 0xa2, 0xf4, 0xa5, 0x23, 0x0a, 0x79, + 0x20, 0x30, 0xf7, 0xc2, 0x1c, 0x81, 0x99, 0x2d, 0x32, 0x6a, 0x09, 0xd3, 0x10, 0x7b, 0xa6, 0x97, + 0x8e, 0x28, 0xf4, 0x09, 0xe5, 0x60, 0x80, 0xb8, 0xac, 0xc3, 0xbe, 0x08, 0x4c, 0xe0, 0xfc, 0x19, + 0x1d, 0x83, 0xa4, 0xa9, 0x3a, 0x55, 0x76, 0xd6, 0x9d, 0x34, 0xb0, 0x47, 0x92, 0x98, 0xd9, 0x97, + 0x18, 0xc2, 0xff, 0x91, 0x8a, 0x18, 0x83, 0x7d, 0xf2, 0x92, 0xc8, 0xbd, 0xa6, 0x3a, 0x0e, 0xb6, + 0x74, 0xc2, 0x90, 0xa1, 0x23, 0x04, 0x89, 0x2d, 0xa3, 0xb6, 0xcf, 0xff, 0x4b, 0x16, 0xfd, 0xcd, + 0xff, 0x2d, 0x0f, 0xf5, 0x87, 0x0a, 0x6d, 0x64, 0xff, 0x1c, 0x30, 0x23, 0x80, 0x45, 0x82, 0x54, + 0x86, 0x71, 0xb5, 0x56, 0xd3, 0xd8, 0x3f, 0xac, 0xaa, 0x6c, 0x69, 0x74, 0x3d, 0x6c, 0xd3, 0x7f, + 0xfd, 0xd8, 0x6d, 0x2c, 0x90, 0x47, 0x50, 0xe4, 0xf8, 0xc5, 0x34, 0x0c, 0x9a, 0x4c, 0x28, 0xf9, + 0x02, 0x8c, 0xb5, 0x49, 0x4a, 0xe4, 0xdb, 0xd5, 0xf4, 0x9a, 0xb8, 0x45, 0x48, 0x7e, 0x13, 0x18, + 0xfd, 0x6c, 0x2d, 0x3b, 0x24, 0x42, 0x7f, 0x17, 0xdf, 0xd3, 0xfd, 0x8e, 0xe9, 0x88, 0xef, 0x8e, + 0xa9, 0x6a, 0x6a, 0xc5, 0x34, 0xe5, 0xcf, 0xaf, 0x96, 0xce, 0xf1, 0x06, 0x76, 0xad, 0x74, 0xc6, + 0xb0, 0xea, 0xb3, 0x75, 0xac, 0x8b, 0xf5, 0x2d, 0x69, 0x52, 0x4d, 0xcd, 0xa6, 0xee, 0xe8, 0x7d, + 0x46, 0xd7, 0xbe, 0xe0, 0xfb, 0x4d, 0x6f, 0x9c, 0x26, 0x16, 0xe6, 0xd6, 0x16, 0x5d, 0x3f, 0xfe, + 0x4a, 0x0c, 0x4e, 0xfa, 0xfc, 0xd8, 0x87, 0xdc, 0xee, 0xce, 0xf9, 0xce, 0x1e, 0xdf, 0xc7, 0x25, + 0xf4, 0xcb, 0x90, 0x20, 0xf8, 0x28, 0xe2, 0x9f, 0xe6, 0xe4, 0x7e, 0xf5, 0xeb, 0xff, 0x4c, 0x0e, + 0x2e, 0xb6, 0x02, 0xa3, 0x42, 0x99, 0x14, 0xdf, 0xdf, 0xbf, 0xfd, 0xb2, 0xde, 0x17, 0x84, 0xed, + 0xdb, 0x67, 0xc6, 0xb0, 0x0d, 0xbf, 0x7d, 0x16, 0xe4, 0x2e, 0x3b, 0x03, 0x2c, 0x63, 0xf6, 0xde, + 0xe2, 0x38, 0x40, 0x3a, 0xee, 0x76, 0x31, 0xaf, 0xd7, 0x08, 0xf6, 0xb9, 0x6b, 0xb1, 0x07, 0xc7, + 0x9e, 0x27, 0x7d, 0x7b, 0xfb, 0xd7, 0x22, 0xb1, 0x1f, 0x73, 0x8f, 0xd9, 0x48, 0xfc, 0x3f, 0x6f, + 0x8a, 0x23, 0x34, 0xe0, 0xc9, 0xc7, 0xf7, 0x20, 0x1e, 0x98, 0xe9, 0x3a, 0x5f, 0xcc, 0xf8, 0x26, + 0x0b, 0xc5, 0x47, 0x29, 0xff, 0xb2, 0x04, 0xc7, 0xdb, 0xba, 0xe6, 0x39, 0x7e, 0xa1, 0xc3, 0x1d, + 0xc2, 0xbe, 0x4f, 0xf7, 0xf9, 0xef, 0x13, 0x2e, 0x74, 0x10, 0xf6, 0xc1, 0x48, 0x61, 0x99, 0x14, + 0x01, 0x69, 0x9f, 0x81, 0xa3, 0x41, 0x61, 0x85, 0x99, 0xee, 0x87, 0x91, 0x60, 0x61, 0xca, 0xcd, + 0x35, 0x1c, 0x28, 0x4d, 0xe5, 0x4a, 0xd8, 0xce, 0xae, 0xae, 0x65, 0x48, 0xbb, 0xa8, 0xbc, 0x9e, + 0xec, 0x5b, 0x55, 0x8f, 0x52, 0xfe, 0x88, 0x04, 0xd3, 0xc1, 0x1e, 0xbc, 0x15, 0xaa, 0x7d, 0x30, + 0x61, 0x6f, 0xdb, 0x10, 0xbf, 0x2e, 0xc1, 0x3d, 0x3d, 0x64, 0xe2, 0x06, 0x78, 0x19, 0x26, 0x7c, + 0x5b, 0xf4, 0x22, 0x85, 0x8b, 0x61, 0x3f, 0x1d, 0xfd, 0x6e, 0xc1, 0x2d, 0x9a, 0xee, 0x22, 0x46, + 0xf9, 0xdc, 0x1f, 0x4c, 0x8d, 0xb7, 0xb7, 0xd9, 0xca, 0x78, 0xfb, 0xb6, 0xfa, 0x6d, 0xf4, 0x8f, + 0x57, 0x25, 0x78, 0x28, 0xa8, 0x6a, 0x87, 0xf7, 0xe6, 0x6f, 0xd4, 0x38, 0xfc, 0x47, 0x09, 0x4e, + 0xf7, 0x23, 0x9c, 0x5b, 0xdf, 0x8e, 0x7b, 0x2f, 0xca, 0xc2, 0xe3, 0xf1, 0xf0, 0x01, 0x4e, 0x18, + 0x70, 0x2f, 0x45, 0x2e, 0xb7, 0x3b, 0x60, 0x78, 0x93, 0x07, 0x96, 0x7f, 0xc8, 0x5d, 0x23, 0x07, + 0x57, 0x9f, 0xc2, 0xc8, 0x81, 0xf5, 0x67, 0x87, 0xb1, 0x88, 0x75, 0x18, 0x0b, 0xdf, 0xfa, 0xf0, + 0x2a, 0xcf, 0x5b, 0x1d, 0x5e, 0x8e, 0xbd, 0x1d, 0xc6, 0x3b, 0xb8, 0x32, 0x8f, 0xea, 0x03, 0x78, + 0xb2, 0x82, 0xda, 0x9d, 0x55, 0xde, 0x87, 0x29, 0xda, 0x6f, 0x07, 0x43, 0xdf, 0x69, 0x95, 0x9b, + 0x3c, 0xb7, 0x74, 0xec, 0x9a, 0xeb, 0xbe, 0x08, 0x03, 0x6c, 0x9c, 0xb9, 0xba, 0x87, 0x70, 0x14, + 0xce, 0x40, 0xfe, 0x79, 0x91, 0xcb, 0x4a, 0x42, 0xec, 0xce, 0x31, 0xd4, 0x8f, 0xae, 0xb7, 0x29, + 0x86, 0x7c, 0xc6, 0xf8, 0xa6, 0xc8, 0x6a, 0x9d, 0xa5, 0xe3, 0xe6, 0xa8, 0xde, 0xb6, 0xac, 0xc6, + 0x6c, 0x73, 0x67, 0xd3, 0xd7, 0x2f, 0x8a, 0xf4, 0xe5, 0xea, 0x14, 0x91, 0xbe, 0xde, 0x18, 0xd3, + 0xbb, 0x89, 0x2c, 0x42, 0xcc, 0xbf, 0x88, 0x89, 0xec, 0x7b, 0x12, 0x9c, 0xa0, 0xba, 0xf9, 0xdf, + 0xb8, 0x1e, 0xd4, 0xe4, 0x8f, 0x00, 0xb2, 0xad, 0x6a, 0xa5, 0x63, 0x74, 0x67, 0x6d, 0xab, 0x7a, + 0x25, 0x30, 0xbf, 0x3c, 0x02, 0xa8, 0x66, 0x3b, 0x61, 0x6c, 0x76, 0x7c, 0x3d, 0x5b, 0xb3, 0x9d, + 0x2b, 0x3d, 0x66, 0xa3, 0xc4, 0x6d, 0x18, 0xce, 0x6f, 0x48, 0x90, 0xef, 0xa4, 0x32, 0x1f, 0x3e, + 0x0d, 0x8e, 0x05, 0xde, 0xde, 0x87, 0x47, 0xf0, 0x91, 0x7e, 0xde, 0x59, 0x87, 0xc2, 0xe8, 0xa8, + 0x85, 0xef, 0x74, 0x1d, 0x30, 0x15, 0xf4, 0xd0, 0xf6, 0xca, 0xfa, 0x0d, 0x0b, 0x9f, 0x2f, 0xb6, + 0xe5, 0xd5, 0xbf, 0x10, 0xb5, 0xf7, 0x1e, 0x4c, 0x76, 0x91, 0xfa, 0x4e, 0xcf, 0x7b, 0x3b, 0x5d, + 0x07, 0xf3, 0x76, 0x97, 0xef, 0x4f, 0xf2, 0x48, 0x08, 0x5e, 0x8d, 0xf2, 0xad, 0xc5, 0x3a, 0xdd, + 0xad, 0x96, 0xdf, 0x0a, 0x77, 0x75, 0xa4, 0xe2, 0xb2, 0x15, 0x20, 0xb1, 0xa3, 0xd9, 0x0e, 0x17, + 0xeb, 0x81, 0x6e, 0x62, 0x85, 0xa8, 0x29, 0x8d, 0x8c, 0x20, 0x4b, 0x59, 0xaf, 0x19, 0x46, 0x83, + 0x8b, 0x21, 0x5f, 0x86, 0x31, 0x1f, 0x8c, 0x77, 0x72, 0x0e, 0x12, 0xa6, 0xc1, 0xbf, 0x0b, 0x34, + 0x74, 0xe6, 0x64, 0xb7, 0x4e, 0x08, 0x0d, 0x57, 0x9b, 0xe2, 0xcb, 0x13, 0x80, 0x18, 0x33, 0x7a, + 0xb8, 0x4b, 0x74, 0xb1, 0x0e, 0xe3, 0x01, 0x28, 0xef, 0xe4, 0x4d, 0x30, 0x60, 0x52, 0x88, 0x7b, + 0x09, 0xb6, 0x5b, 0x37, 0x14, 0xcb, 0xfd, 0x12, 0x0b, 0x7d, 0x3a, 0xf3, 0x9d, 0xa3, 0x90, 0xa4, + 0x5c, 0xd1, 0xc7, 0x25, 0x00, 0xdf, 0x51, 0xad, 0x99, 0x6e, 0x6c, 0x3a, 0xaf, 0x89, 0xf3, 0xb3, + 0x7d, 0xe3, 0xf3, 0x9a, 0xed, 0xf4, 0x7b, 0xfe, 0xdd, 0xb7, 0x3f, 0x1a, 0xbb, 0x0f, 0xc9, 0xb3, + 0x5d, 0x56, 0xe3, 0xbe, 0x78, 0xf9, 0x6c, 0xe0, 0xa3, 0x34, 0x8f, 0xf6, 0xd7, 0x95, 0x90, 0x6c, + 0xa6, 0x5f, 0x74, 0x2e, 0xd8, 0x05, 0x2a, 0xd8, 0x59, 0xf4, 0x44, 0xb4, 0x60, 0xb3, 0xef, 0x0c, + 0x06, 0xcd, 0xbb, 0xd1, 0xef, 0x48, 0x30, 0xd1, 0x69, 0x49, 0x87, 0xce, 0xf7, 0x27, 0x45, 0x7b, + 0x49, 0x91, 0x7f, 0xfa, 0x10, 0x94, 0x5c, 0x95, 0x05, 0xaa, 0xca, 0x1c, 0x7a, 0xf6, 0x10, 0xaa, + 0xcc, 0xfa, 0xe6, 0x1d, 0xf4, 0xbf, 0x25, 0xb8, 0xbb, 0xe7, 0x0a, 0x09, 0xcd, 0xf5, 0x27, 0x65, + 0x8f, 0xda, 0x29, 0x5f, 0xfc, 0x61, 0x58, 0x70, 0x8d, 0x9f, 0xa7, 0x1a, 0x5f, 0x46, 0x8b, 0x87, + 0xd1, 0xd8, 0xab, 0x88, 0xfc, 0xba, 0xff, 0x56, 0xf0, 0xc8, 0x7f, 0x6f, 0x77, 0x6a, 0x5b, 0x78, + 0x44, 0x04, 0x46, 0x7b, 0x51, 0x2b, 0xbf, 0x85, 0xaa, 0xa0, 0xa0, 0xb5, 0x1f, 0x72, 0xd0, 0x66, + 0xdf, 0x19, 0x4c, 0xfc, 0xef, 0x46, 0xff, 0x4b, 0xea, 0x7c, 0x82, 0xff, 0xa9, 0x9e, 0x22, 0x76, + 0x5f, 0x54, 0xe5, 0xcf, 0x1f, 0x9c, 0x90, 0x2b, 0xd9, 0xa4, 0x4a, 0xd6, 0x11, 0xbe, 0xdd, 0x4a, + 0x76, 0x1c, 0x44, 0xf4, 0x35, 0x09, 0x26, 0x3a, 0xad, 0x49, 0x22, 0xc2, 0xb2, 0xc7, 0x22, 0x2b, + 0x22, 0x2c, 0x7b, 0x2d, 0x80, 0xe4, 0x37, 0x51, 0xe5, 0xcf, 0xa1, 0x27, 0xbb, 0x29, 0xdf, 0x73, + 0x14, 0x49, 0x2c, 0xf6, 0x2c, 0xf2, 0x23, 0x62, 0xb1, 0x9f, 0x75, 0x4c, 0x44, 0x2c, 0xf6, 0xb5, + 0xc6, 0x88, 0x8e, 0x45, 0x57, 0xb3, 0x3e, 0x87, 0xd1, 0x46, 0x5f, 0x91, 0x60, 0x38, 0x50, 0x11, + 0xa3, 0xc7, 0x7b, 0x0a, 0xda, 0x69, 0xc1, 0xd0, 0xfd, 0xc5, 0x66, 0xf7, 0x82, 0x5b, 0x5e, 0xa4, + 0xba, 0xcc, 0xa3, 0xb9, 0xc3, 0xe8, 0x62, 0x05, 0x24, 0xfe, 0x86, 0x04, 0xe3, 0x1d, 0xaa, 0xcc, + 0x88, 0x28, 0xec, 0x5e, 0x34, 0xe7, 0xcf, 0x1f, 0x9c, 0x90, 0x6b, 0x75, 0x91, 0x6a, 0xf5, 0x13, + 0xe8, 0x99, 0xc3, 0x68, 0xe5, 0x9b, 0x9f, 0x6f, 0x7a, 0x07, 0xa2, 0x7d, 0xfd, 0xa0, 0x73, 0x07, + 0x14, 0x4c, 0x28, 0xf4, 0xd4, 0x81, 0xe9, 0xb8, 0x3e, 0x2f, 0x50, 0x7d, 0x9e, 0x47, 0xab, 0x3f, + 0x9c, 0x3e, 0xed, 0xd3, 0xfa, 0x17, 0xda, 0xaf, 0xe6, 0xf7, 0xf6, 0xa2, 0x8e, 0xc5, 0x6a, 0xfe, + 0x89, 0x03, 0xd1, 0x70, 0xa5, 0xce, 0x53, 0xa5, 0xce, 0xa0, 0xc7, 0xba, 0x29, 0xe5, 0x3b, 0xf5, + 0xae, 0xe9, 0xdb, 0xc6, 0xec, 0x3b, 0x59, 0x09, 0xfc, 0x6e, 0xf4, 0x53, 0xe2, 0xc4, 0xf1, 0xa9, + 0x9e, 0xfd, 0xfa, 0xea, 0xd8, 0xfc, 0x43, 0x7d, 0x60, 0x72, 0xb9, 0xee, 0xa3, 0x72, 0x4d, 0xa2, + 0x93, 0xdd, 0xe4, 0x22, 0xb5, 0x2c, 0xfa, 0xa0, 0xe4, 0x5e, 0x52, 0x38, 0xdd, 0x9b, 0xb7, 0xbf, + 0xd8, 0xed, 0x7e, 0xd0, 0xa1, 0x43, 0x09, 0x2c, 0x3f, 0x40, 0x25, 0x99, 0x46, 0x93, 0x5d, 0x25, + 0x61, 0xa5, 0xef, 0xed, 0x3e, 0x39, 0xf0, 0x27, 0x83, 0x5d, 0x3f, 0x5e, 0x51, 0xc7, 0x3a, 0xb6, + 0x35, 0xfb, 0x50, 0x1f, 0xaf, 0xe8, 0xef, 0xf5, 0xd4, 0xef, 0x24, 0x21, 0xb3, 0xc0, 0x7a, 0x59, + 0x77, 0x54, 0xe7, 0x87, 0x5c, 0x08, 0x20, 0x9b, 0x7f, 0x93, 0x8d, 0x7d, 0x2a, 0xd2, 0xfb, 0xf8, + 0x61, 0xe6, 0x40, 0xd7, 0xb6, 0xd9, 0x21, 0x41, 0x7e, 0x43, 0x3a, 0xcc, 0x4f, 0x66, 0x9f, 0x77, + 0xa3, 0x67, 0x17, 0xd8, 0x47, 0x1e, 0xdf, 0x27, 0xc1, 0x51, 0x8a, 0xe5, 0xc5, 0x1b, 0xc5, 0x14, + 0x77, 0xf6, 0xba, 0x7a, 0xcc, 0x92, 0xea, 0xdb, 0x82, 0x61, 0x9f, 0x65, 0xbc, 0x8f, 0xdf, 0x67, + 0x39, 0xe9, 0xeb, 0x3c, 0xcc, 0x56, 0x56, 0xc6, 0x1b, 0x6d, 0x94, 0x76, 0x68, 0x5d, 0x9f, 0x38, + 0xfc, 0xba, 0xfe, 0x39, 0x18, 0xf2, 0x65, 0xfa, 0x5c, 0x32, 0xe2, 0x9a, 0x69, 0x78, 0x13, 0xcd, + 0x4f, 0x8c, 0xde, 0x2f, 0xc1, 0xd1, 0x8e, 0x93, 0x20, 0xfd, 0x5f, 0xb4, 0x07, 0xdc, 0xa4, 0x0b, + 0x19, 0xa7, 0x23, 0x5f, 0x59, 0x99, 0x68, 0x75, 0xaa, 0x26, 0xd6, 0x60, 0x38, 0x30, 0x81, 0xe5, + 0xc4, 0x7f, 0x94, 0xee, 0xff, 0x86, 0x45, 0x90, 0x01, 0xca, 0x43, 0x0a, 0xef, 0x99, 0x86, 0xe5, + 0xe0, 0x1a, 0x3d, 0xf2, 0x90, 0x52, 0xdc, 0x67, 0x79, 0x05, 0x50, 0xfb, 0xe0, 0x86, 0xbf, 0x43, + 0x9a, 0xf6, 0xbe, 0x43, 0x3a, 0x01, 0x49, 0xff, 0x97, 0x3a, 0xd9, 0x83, 0xb7, 0x4f, 0x71, 0xbb, + 0x63, 0xfe, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x5a, 0x69, 0x9a, 0x3e, 0x4a, 0x94, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r)