diff --git a/client/grpc-gateway/swagger.json b/client/grpc-gateway/swagger.json index f99d7fed26be..58a05b6a77ed 100644 --- a/client/grpc-gateway/swagger.json +++ b/client/grpc-gateway/swagger.json @@ -286,8 +286,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -399,16 +398,14 @@ "type": "string" }, "enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } }, "description": "SendEnabled maps coin denom to a send_enabled status (whether a denom is sendable)." } }, "default_send_enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } }, "description": "Params defines the parameters for the bank module." @@ -1026,8 +1023,7 @@ "type": "string" }, "withdraw_addr_enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } } } @@ -1377,8 +1373,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -1502,8 +1497,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -1933,8 +1927,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2232,8 +2225,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2563,8 +2555,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3070,7 +3061,6 @@ }, "tombstoned": { "type": "boolean", - "format": "boolean", "title": "whether or not a validator has been tombstoned (killed out of validator set)" }, "missed_blocks_counter": { @@ -3167,8 +3157,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3211,7 +3200,6 @@ }, "tombstoned": { "type": "boolean", - "format": "boolean", "title": "whether or not a validator has been tombstoned (killed out of validator set)" }, "missed_blocks_counter": { @@ -3416,8 +3404,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3625,8 +3612,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3776,8 +3762,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3808,8 +3793,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -3975,8 +3959,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -4006,8 +3989,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -4261,8 +4243,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -4555,8 +4536,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -4721,8 +4701,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -4752,8 +4731,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -5017,8 +4995,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -5382,8 +5359,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -5593,7 +5569,7 @@ "items": { "type": "string" }, - "title": "list of connection identifiers, in order, along which packets sent on this\nchannel will travel" + "title": "list of connection identifiers, in order, along which packets sent on\nthis channel will travel" }, "version": { "type": "string", @@ -5717,8 +5693,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -5783,7 +5758,7 @@ "items": { "type": "string" }, - "title": "list of connection identifiers, in order, along which packets sent on this\nchannel will travel" + "title": "list of connection identifiers, in order, along which packets sent on\nthis channel will travel" }, "version": { "type": "string", @@ -5880,6 +5855,116 @@ ] } }, + "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/acks/{packet_ack_sequences}/unrelayed_acks": { + "get": { + "summary": "UnreceivedAcks returns all the unrelayed IBC acknowledgements associated with a\nchannel and sequences.", + "operationId": "UnreceivedAcks", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "sequences": { + "type": "array", + "items": { + "type": "string", + "format": "uint64" + }, + "title": "list of unreceived acknowledgement sequences" + }, + "height": { + "title": "query block height", + "type": "object", + "properties": { + "epoch_number": { + "type": "string", + "format": "uint64", + "title": "the epoch that the client is currently on" + }, + "epoch_height": { + "type": "string", + "format": "uint64", + "title": "the height within the given epoch" + } + }, + "description": "Normally the EpochHeight is incremented at each height while keeping epoch\nnumber the same However some consensus algorithms may choose to reset the\nheight in certain conditions e.g. hard forks, state-machine breaking changes\nIn these cases, the epoch number is incremented so that height continues to\nbe monitonically increasing even as the EpochHeight gets reset" + } + }, + "title": "QueryUnreceivedAcksResponse is the response type for the\nQuery/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": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused 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\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + } + } + } + } + } + }, + "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}/client_state": { "get": { "summary": "ChannelClientState queries for the client state for the channel associated\nwith the provided channel identifiers.", @@ -5915,7 +6000,7 @@ "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, - "description": "IdentifiedClientState defines a client state with additional client\nidentifier field." + "description": "IdentifiedClientState defines a client state with an additional client\nidentifier field." }, "proof": { "type": "string", @@ -6509,8 +6594,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -6518,10 +6602,10 @@ ] } }, - "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/packet_acks/{acknowledgements}/unrelayed_packets": { + "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unrelayed_packets": { "get": { - "summary": "UnrelayedPackets returns all the unrelayed IBC packets associated with a\nchannel and sequences.", - "operationId": "UnrelayedPackets", + "summary": "UnreceivedPackets returns all the unrelayed IBC packets associated with a\nchannel and sequences.", + "operationId": "UnreceivedPackets", "responses": { "200": { "description": "A successful response.", @@ -6534,7 +6618,7 @@ "type": "string", "format": "uint64" }, - "title": "list of unrelayed packet sequences" + "title": "list of unreceived packet sequences" }, "height": { "title": "query block height", @@ -6554,7 +6638,7 @@ "description": "Normally the EpochHeight is incremented at each height while keeping epoch\nnumber the same However some consensus algorithms may choose to reset the\nheight in certain conditions e.g. hard forks, state-machine breaking changes\nIn these cases, the epoch number is incremented so that height continues to\nbe monitonically increasing even as the EpochHeight gets reset" } }, - "title": "QueryUnrelayedPacketsResponse is the request type for the\nQuery/UnrelayedPacketCommitments RPC method" + "title": "QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method" } }, "default": { @@ -6621,14 +6705,6 @@ }, "collectionFormat": "csv", "minItems": 1 - }, - { - "name": "acknowledgements", - "description": "flag indicating if the return value is packet commitments or\nacknowledgements", - "in": "path", - "required": true, - "type": "boolean", - "format": "boolean" } ], "tags": [ @@ -6805,7 +6881,7 @@ "items": { "type": "string" }, - "title": "list of connection identifiers, in order, along which packets sent on this\nchannel will travel" + "title": "list of connection identifiers, in order, along which packets sent on\nthis channel will travel" }, "version": { "type": "string", @@ -6936,8 +7012,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -6981,7 +7056,7 @@ "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, - "description": "IdentifiedClientState defines a client state with additional client\nidentifier field." + "description": "IdentifiedClientState defines a client state with an additional client\nidentifier field." }, "description": "list of stored ClientStates of the chain." }, @@ -7073,8 +7148,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -7204,17 +7278,41 @@ "items": { "type": "object", "properties": { - "type_url": { - "type": "string", - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + "height": { + "title": "consensus state height", + "type": "object", + "properties": { + "epoch_number": { + "type": "string", + "format": "uint64", + "title": "the epoch that the client is currently on" + }, + "epoch_height": { + "type": "string", + "format": "uint64", + "title": "the height within the given epoch" + } + }, + "description": "Normally the EpochHeight is incremented at each height while keeping epoch\nnumber the same However some consensus algorithms may choose to reset the\nheight in certain conditions e.g. hard forks, state-machine breaking changes\nIn these cases, the epoch number is incremented so that height continues to\nbe monitonically increasing even as the EpochHeight gets reset" }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." + "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\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused 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\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "ConsensusStateWithHeight defines a consensus state with an additional height field." }, "title": "consensus states associated with the identifier" }, @@ -7313,8 +7411,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -7444,8 +7541,7 @@ "description": "latest_height overrrides the height field and queries the latest stored ConsensusState.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -7726,8 +7822,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -7914,7 +8009,7 @@ "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, - "description": "IdentifiedClientState defines a client state with additional client\nidentifier field." + "description": "IdentifiedClientState defines a client state with an additional client\nidentifier field." }, "proof": { "type": "string", @@ -8139,14 +8234,14 @@ "properties": { "path": { "type": "string", - "description": "path defines the chain of port/channel identifiers used for tracing the source of the fungible\ntoken." + "description": "path defines the chain of port/channel identifiers used for tracing the\nsource 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\ninformation path." + "description": "DenomTrace contains the base denomination for ICS20 fungible tokens and the\nsource tracing information path." }, "description": "denom_traces returns all denominations trace information." }, @@ -8237,8 +8332,7 @@ "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -8262,7 +8356,7 @@ "properties": { "path": { "type": "string", - "description": "path defines the chain of port/channel identifiers used for tracing the source of the fungible\ntoken." + "description": "path defines the chain of port/channel identifiers used for tracing the\nsource of the fungible token." }, "base_denom": { "type": "string", @@ -8341,13 +8435,11 @@ "properties": { "send_enabled": { "type": "boolean", - "format": "boolean", - "description": "send_enabled enables or disables all cross-chain token transfers from this chain." + "description": "send_enabled enables or disables all cross-chain token transfers from this\nchain." }, "receive_enabled": { "type": "boolean", - "format": "boolean", - "description": "receive_enabled enables or disables all cross-chain token transfers to this chain." + "description": "receive_enabled enables or disables all cross-chain token transfers to this\nchain." } } } @@ -8538,16 +8630,14 @@ "type": "string" }, "enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } }, "description": "SendEnabled maps coin denom to a send_enabled status (whether a denom is sendable)." } }, "default_send_enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } }, "description": "Params defines the parameters for the bank module." @@ -8623,16 +8713,14 @@ "type": "string" }, "enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } }, "description": "SendEnabled maps coin denom to a send_enabled status (whether a denom is sendable)." } }, "default_send_enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } }, "description": "Params defines the parameters for the bank module." @@ -8687,8 +8775,7 @@ "type": "string" }, "enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } }, "description": "SendEnabled maps coin denom to a send_enabled status (whether a denom is sendable)." @@ -8713,7 +8800,6 @@ }, "count_total": { "type": "boolean", - "format": "boolean", "description": "count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs. count_total\nis only respected when offset is used. It is ignored when key is set." } }, @@ -8798,8 +8884,7 @@ "type": "string" }, "withdraw_addr_enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } }, "description": "Params defines the set of params for the distribution module." @@ -8941,8 +9026,7 @@ "type": "string" }, "withdraw_addr_enabled": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } } } @@ -10076,7 +10160,6 @@ }, "tombstoned": { "type": "boolean", - "format": "boolean", "title": "whether or not a validator has been tombstoned (killed out of validator set)" }, "missed_blocks_counter": { @@ -10119,7 +10202,6 @@ }, "tombstoned": { "type": "boolean", - "format": "boolean", "title": "whether or not a validator has been tombstoned (killed out of validator set)" }, "missed_blocks_counter": { @@ -10175,7 +10257,6 @@ }, "tombstoned": { "type": "boolean", - "format": "boolean", "title": "whether or not a validator has been tombstoned (killed out of validator set)" }, "missed_blocks_counter": { @@ -10410,8 +10491,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -10702,8 +10782,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -10793,8 +10872,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -11002,8 +11080,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -11351,8 +11428,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -11504,8 +11580,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -11835,8 +11910,7 @@ "type": "string" }, "jailed": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "status": { "type": "integer", @@ -12166,7 +12240,7 @@ "items": { "type": "string" }, - "title": "list of connection identifiers, in order, along which packets sent on this\nchannel will travel" + "title": "list of connection identifiers, in order, along which packets sent on\nthis channel will travel" }, "version": { "type": "string", @@ -12235,7 +12309,7 @@ "items": { "type": "string" }, - "title": "list of connection identifiers, in order, along which packets sent on this\nchannel will travel" + "title": "list of connection identifiers, in order, along which packets sent on\nthis channel will travel" }, "version": { "type": "string", @@ -12315,7 +12389,7 @@ "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, - "description": "IdentifiedClientState defines a client state with additional client\nidentifier field." + "description": "IdentifiedClientState defines a client state with an additional client\nidentifier field." }, "proof": { "type": "string", @@ -12448,7 +12522,7 @@ "items": { "type": "string" }, - "title": "list of connection identifiers, in order, along which packets sent on this\nchannel will travel" + "title": "list of connection identifiers, in order, along which packets sent on\nthis channel will travel" }, "version": { "type": "string", @@ -12537,7 +12611,7 @@ "items": { "type": "string" }, - "title": "list of connection identifiers, in order, along which packets sent on this\nchannel will travel" + "title": "list of connection identifiers, in order, along which packets sent on\nthis channel will travel" }, "version": { "type": "string", @@ -12644,7 +12718,7 @@ "items": { "type": "string" }, - "title": "list of connection identifiers, in order, along which packets sent on this\nchannel will travel" + "title": "list of connection identifiers, in order, along which packets sent on\nthis channel will travel" }, "version": { "type": "string", @@ -12878,7 +12952,7 @@ }, "title": "QueryPacketCommitmentsResponse is the request type for the\nQuery/QueryPacketCommitments RPC method" }, - "ibc.channel.QueryUnrelayedPacketsResponse": { + "ibc.channel.QueryUnreceivedAcksResponse": { "type": "object", "properties": { "sequences": { @@ -12887,7 +12961,7 @@ "type": "string", "format": "uint64" }, - "title": "list of unrelayed packet sequences" + "title": "list of unreceived acknowledgement sequences" }, "height": { "title": "query block height", @@ -12907,7 +12981,38 @@ "description": "Normally the EpochHeight is incremented at each height while keeping epoch\nnumber the same However some consensus algorithms may choose to reset the\nheight in certain conditions e.g. hard forks, state-machine breaking changes\nIn these cases, the epoch number is incremented so that height continues to\nbe monitonically increasing even as the EpochHeight gets reset" } }, - "title": "QueryUnrelayedPacketsResponse is the request type for the\nQuery/UnrelayedPacketCommitments RPC method" + "title": "QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method" + }, + "ibc.channel.QueryUnreceivedPacketsResponse": { + "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": { + "epoch_number": { + "type": "string", + "format": "uint64", + "title": "the epoch that the client is currently on" + }, + "epoch_height": { + "type": "string", + "format": "uint64", + "title": "the height within the given epoch" + } + }, + "description": "Normally the EpochHeight is incremented at each height while keeping epoch\nnumber the same However some consensus algorithms may choose to reset the\nheight in certain conditions e.g. hard forks, state-machine breaking changes\nIn these cases, the epoch number is incremented so that height continues to\nbe monitonically increasing even as the EpochHeight gets reset" + } + }, + "title": "QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method" }, "ibc.channel.State": { "type": "string", @@ -12962,7 +13067,46 @@ "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, - "description": "IdentifiedClientState defines a client state with additional client\nidentifier field." + "description": "IdentifiedClientState defines a client state with an additional client\nidentifier field." + }, + "ibc.client.ConsensusStateWithHeight": { + "type": "object", + "properties": { + "height": { + "title": "consensus state height", + "type": "object", + "properties": { + "epoch_number": { + "type": "string", + "format": "uint64", + "title": "the epoch that the client is currently on" + }, + "epoch_height": { + "type": "string", + "format": "uint64", + "title": "the height within the given epoch" + } + }, + "description": "Normally the EpochHeight is incremented at each height while keeping epoch\nnumber the same However some consensus algorithms may choose to reset the\nheight in certain conditions e.g. hard forks, state-machine breaking changes\nIn these cases, the epoch number is incremented so that height continues to\nbe monitonically increasing even as the EpochHeight 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\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused 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\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + } + }, + "description": "ConsensusStateWithHeight defines a consensus state with an additional height field." }, "ibc.client.QueryClientStateResponse": { "type": "object", @@ -13041,7 +13185,7 @@ "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, - "description": "IdentifiedClientState defines a client state with additional client\nidentifier field." + "description": "IdentifiedClientState defines a client state with an additional client\nidentifier field." }, "description": "list of stored ClientStates of the chain." }, @@ -13121,17 +13265,41 @@ "items": { "type": "object", "properties": { - "type_url": { - "type": "string", - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + "height": { + "title": "consensus state height", + "type": "object", + "properties": { + "epoch_number": { + "type": "string", + "format": "uint64", + "title": "the epoch that the client is currently on" + }, + "epoch_height": { + "type": "string", + "format": "uint64", + "title": "the height within the given epoch" + } + }, + "description": "Normally the EpochHeight is incremented at each height while keeping epoch\nnumber the same However some consensus algorithms may choose to reset the\nheight in certain conditions e.g. hard forks, state-machine breaking changes\nIn these cases, the epoch number is incremented so that height continues to\nbe monitonically increasing even as the EpochHeight gets reset" }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." + "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\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused 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\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "ConsensusStateWithHeight defines a consensus state with an additional height field." }, "title": "consensus states associated with the identifier" }, @@ -13364,7 +13532,7 @@ "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, - "description": "IdentifiedClientState defines a client state with additional client\nidentifier field." + "description": "IdentifiedClientState defines a client state with an additional client\nidentifier field." }, "proof": { "type": "string", @@ -13648,30 +13816,28 @@ "properties": { "path": { "type": "string", - "description": "path defines the chain of port/channel identifiers used for tracing the source of the fungible\ntoken." + "description": "path defines the chain of port/channel identifiers used for tracing the\nsource 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\ninformation path." + "description": "DenomTrace contains the base denomination for ICS20 fungible tokens and the\nsource tracing information path." }, "ibc.transfer.Params": { "type": "object", "properties": { "send_enabled": { "type": "boolean", - "format": "boolean", - "description": "send_enabled enables or disables all cross-chain token transfers from this chain." + "description": "send_enabled enables or disables all cross-chain token transfers from this\nchain." }, "receive_enabled": { "type": "boolean", - "format": "boolean", - "description": "receive_enabled enables or disables all cross-chain token transfers to this chain." + "description": "receive_enabled enables or disables all cross-chain token transfers to this\nchain." } }, - "description": "Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the TransfersEnabled parameter to\ntrue and then set the bank module's SendEnabled parameter for the denomination to false." + "description": "Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the\nTransfersEnabled parameter to true and then set the bank module's SendEnabled\nparameter for the denomination to false." }, "ibc.transfer.QueryDenomTraceResponse": { "type": "object", @@ -13682,7 +13848,7 @@ "properties": { "path": { "type": "string", - "description": "path defines the chain of port/channel identifiers used for tracing the source of the fungible\ntoken." + "description": "path defines the chain of port/channel identifiers used for tracing the\nsource of the fungible token." }, "base_denom": { "type": "string", @@ -13703,14 +13869,14 @@ "properties": { "path": { "type": "string", - "description": "path defines the chain of port/channel identifiers used for tracing the source of the fungible\ntoken." + "description": "path defines the chain of port/channel identifiers used for tracing the\nsource 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\ninformation path." + "description": "DenomTrace contains the base denomination for ICS20 fungible tokens and the\nsource tracing information path." }, "description": "denom_traces returns all denominations trace information." }, @@ -13742,13 +13908,11 @@ "properties": { "send_enabled": { "type": "boolean", - "format": "boolean", - "description": "send_enabled enables or disables all cross-chain token transfers from this chain." + "description": "send_enabled enables or disables all cross-chain token transfers from this\nchain." }, "receive_enabled": { "type": "boolean", - "format": "boolean", - "description": "receive_enabled enables or disables all cross-chain token transfers to this chain." + "description": "receive_enabled enables or disables all cross-chain token transfers to this\nchain." } } } diff --git a/proto/ibc/channel/query.proto b/proto/ibc/channel/query.proto index a325c9f1d8cf..b0a82c04914f 100644 --- a/proto/ibc/channel/query.proto +++ b/proto/ibc/channel/query.proto @@ -58,13 +58,21 @@ service Query { option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}"; } - // UnrelayedPackets returns all the unrelayed IBC packets associated with a + // UnreceivedPackets returns all the unrelayed IBC packets associated with a // channel and sequences. - rpc UnrelayedPackets(QueryUnrelayedPacketsRequest) returns (QueryUnrelayedPacketsResponse) { + rpc UnreceivedPackets(QueryUnreceivedPacketsRequest) returns (QueryUnreceivedPacketsResponse) { option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/" - "{packet_commitment_sequences}/packet_acks/{acknowledgements}/unrelayed_packets"; + "{packet_commitment_sequences}/unreceived_packets"; } + // UnrelayedAcks returns all the unrelayed IBC acknowledgements associated with a + // channel and sequences. + rpc UnrelayedAcks(QueryUnrelayedAcksRequest) returns (QueryUnrelayedAcksResponse) { + option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/" + "{packet_commitment_sequences}/unrelayed_acks"; + } + + // NextSequenceReceive returns the next receive sequence for a given channel. rpc NextSequenceReceive(QueryNextSequenceReceiveRequest) returns (QueryNextSequenceReceiveResponse) { option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence"; @@ -250,24 +258,41 @@ message QueryPacketAcknowledgementResponse { ibc.client.Height proof_height = 4 [(gogoproto.nullable) = false]; } -// QueryUnrelayedPacketsRequest is the request type for the -// Query/UnrelayedPackets RPC method -message QueryUnrelayedPacketsRequest { +// QueryUnreceivedPacketsRequest is the request type for the +// Query/UnreceivedPackets RPC method +message QueryUnreceivedPacketsRequest { // port unique identifier string port_id = 1; // channel unique identifier string channel_id = 2; // list of packet sequences repeated uint64 packet_commitment_sequences = 3; - // flag indicating if the return value is packet commitments or - // acknowledgements - bool acknowledgements = 4; } -// QueryUnrelayedPacketsResponse is the request type for the -// Query/UnrelayedPacketCommitments RPC method -message QueryUnrelayedPacketsResponse { - // list of unrelayed packet sequences +// QueryUnreceivedPacketsResponse is the response type for the +// Query/UnreceivedPacketCommitments RPC method +message QueryUnreceivedPacketsResponse { + // list of unreceived packet sequences + repeated uint64 sequences = 1; + // query block height + ibc.client.Height height = 2 [(gogoproto.nullable) = false]; +} + +// QueryUnrelayedAcksRequest is the request type for the +// Query/UnrelayedAcks RPC method +message QueryUnrelayedAcksRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // list of commitment sequences + repeated uint64 packet_commitment_sequences = 3; +} + +// QueryUnrelayedAcksResponse is the response type for the +// Query/UnrelayedAcks RPC method +message QueryUnrelayedAcksResponse { + // list of unrelayed acknowledgement sequences repeated uint64 sequences = 1; // query block height ibc.client.Height height = 2 [(gogoproto.nullable) = false]; diff --git a/x/ibc/04-channel/client/cli/cli.go b/x/ibc/04-channel/client/cli/cli.go index 6a8c0f02e76f..5b885058a0da 100644 --- a/x/ibc/04-channel/client/cli/cli.go +++ b/x/ibc/04-channel/client/cli/cli.go @@ -24,7 +24,8 @@ func GetQueryCmd() *cobra.Command { GetCmdQueryChannelClientState(), GetCmdQueryPacketCommitment(), GetCmdQueryPacketCommitments(), - GetCmdQueryUnrelayedPackets(), + GetCmdQueryUnreceivedPackets(), + GetCmdQueryUnrelayedAcks(), GetCmdQueryNextSequenceReceive(), // TODO: next sequence Send ? ) diff --git a/x/ibc/04-channel/client/cli/query.go b/x/ibc/04-channel/client/cli/query.go index aa9e5dfe9c74..bc900d88a3c7 100644 --- a/x/ibc/04-channel/client/cli/query.go +++ b/x/ibc/04-channel/client/cli/query.go @@ -16,8 +16,7 @@ import ( ) const ( - flagSequences = "sequences" - flagAcknowledgements = "acknowledgements" + flagSequences = "sequences" ) // GetCmdQueryChannels defines the command to query all the channels ends @@ -253,20 +252,18 @@ func GetCmdQueryPacketCommitment() *cobra.Command { return cmd } -// GetCmdQueryUnrelayedPackets defines the command to query all the unrelayed -// packets for either packet commitments or acknowledgements. -func GetCmdQueryUnrelayedPackets() *cobra.Command { +// GetCmdQueryUnreceivedPackets defines the command to query all the unreceived +// packets on the receiving chain +func GetCmdQueryUnreceivedPackets() *cobra.Command { cmd := &cobra.Command{ - Use: "unrelayed-packets [port-id] [channel-id]", - Short: "Query all the unrelayed packets associated with a channel", - Long: `Determine if a packet, given a list of packet commitment sequences, is unrelayed. - -If the '-acknowledgements' flag is false (default) then the return value represents: -- Unrelayed packet commitments: no acknowledgement exists for the given packet commitment sequence. - -Otherwise, the return value represents: -- Unrelayed packet acknowledgements: an acknowledgement exists for the given packet commitment sequence.`, - Example: fmt.Sprintf("%s query %s %s unrelayed-packets [port-id] [channel-id] --sequences=1,2,3 --acknowledgements=false", version.AppName, host.ModuleName, types.SubModuleName), + Use: "unreceived-packets [port-id] [channel-id]", + Short: "Query all the unreceived packets associated with a channel", + Long: `Determine if a packet, given a list of packet commitment sequences, is unreceived. + +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), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) @@ -281,7 +278,53 @@ Otherwise, the return value represents: return err } - acknowledgements, err := cmd.Flags().GetBool(flagAcknowledgements) + seqs := make([]uint64, len(seqSlice)) + for i := range seqSlice { + seqs[i] = uint64(seqSlice[i]) + } + + req := &types.QueryUnreceivedPacketsRequest{ + PortId: args[0], + ChannelId: args[1], + PacketCommitmentSequences: seqs, + } + + res, err := queryClient.UnreceivedPackets(context.Background(), req) + if err != nil { + return err + } + + return clientCtx.PrintOutput(res) + }, + } + + cmd.Flags().Int64Slice(flagSequences, []int64{}, "comma separated list of packet sequence numbers") + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryUnrelayedAcks defines the command to query all the unrelayed acks on the original sending chain +func GetCmdQueryUnrelayedAcks() *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. + +The return value represents: +- Unrelayed packet acknowledgement: packet commitment exists on original sending chain and ack exists on receiving (executing) 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), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags()) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + seqSlice, err := cmd.Flags().GetInt64Slice(flagSequences) if err != nil { return err } @@ -291,14 +334,13 @@ Otherwise, the return value represents: seqs[i] = uint64(seqSlice[i]) } - req := &types.QueryUnrelayedPacketsRequest{ + req := &types.QueryUnrelayedAcksRequest{ PortId: args[0], ChannelId: args[1], PacketCommitmentSequences: seqs, - Acknowledgements: acknowledgements, } - res, err := queryClient.UnrelayedPackets(context.Background(), req) + res, err := queryClient.UnrelayedAcks(context.Background(), req) if err != nil { return err } @@ -308,7 +350,6 @@ Otherwise, the return value represents: } cmd.Flags().Int64Slice(flagSequences, []int64{}, "comma separated list of packet sequence numbers") - cmd.Flags().Bool(flagAcknowledgements, false, "boolean indicating if unrelayed acknowledgements (true) or unrelayed packet commitments (false) are returned.") flags.AddQueryFlagsToCmd(cmd) return cmd diff --git a/x/ibc/04-channel/keeper/grpc_query.go b/x/ibc/04-channel/keeper/grpc_query.go index 912da126b558..faa51fee8ff2 100644 --- a/x/ibc/04-channel/keeper/grpc_query.go +++ b/x/ibc/04-channel/keeper/grpc_query.go @@ -309,17 +309,75 @@ func (q Keeper) PacketAcknowledgement(c context.Context, req *types.QueryPacketA return types.NewQueryPacketAcknowledgementResponse(req.PortId, req.ChannelId, req.Sequence, acknowledgementBz, nil, selfHeight), nil } -// UnrelayedPackets implements the Query/UnrelayedPackets gRPC method. Given +// UnreceivedPackets implements the Query/UnreceivedPackets gRPC method. Given // a list of counterparty packet commitments, the querier checks if the packet -// sequence has an acknowledgement stored. If req.Acknowledgements is true then -// all unrelayed acknowledgements are returned (ack exists), otherwise all -// unrelayed packet commitments are returned (ack does not exist). +// has already been received by checking if an acknowledgement 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 +// the sending chain using the Query/PacketCommitments gRPC method. +// Then input the returned sequences into the QueryUnreceivedPacketsRequest +// and send the request to this Query/UnreceivedPackets on the **receiving** +// chain. This gRPC method will then return the list of packet sequences that +// are yet to be received on the receiving chain. // // NOTE: The querier makes the assumption that the provided list of packet // 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. -func (q Keeper) UnrelayedPackets(c context.Context, req *types.QueryUnrelayedPacketsRequest) (*types.QueryUnrelayedPacketsResponse, error) { +// 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") + } + + if err := validategRPCRequest(req.PortId, req.ChannelId); err != nil { + return nil, err + } + + ctx := sdk.UnwrapSDKContext(c) + + var unreceivedSequences = []uint64{} + + for i, seq := range req.PacketCommitmentSequences { + if seq == 0 { + 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 { + unreceivedSequences = append(unreceivedSequences, seq) + } + + } + + selfHeight := clienttypes.GetSelfHeight(ctx) + return &types.QueryUnreceivedPacketsResponse{ + Sequences: unreceivedSequences, + Height: selfHeight, + }, nil +} + +// UnrelayedAcks implements the Query/UnrelayedAcks 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** +// 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. +// +// 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) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -337,16 +395,16 @@ func (q Keeper) UnrelayedPackets(c context.Context, req *types.QueryUnrelayedPac return nil, status.Errorf(codes.InvalidArgument, "packet sequence %d cannot be 0", i) } - // if req.Acknowledgements is true append sequences with an existing acknowledgement - // otherwise append sequences without an existing acknowledgement. - if _, found := q.GetPacketAcknowledgement(ctx, req.PortId, req.ChannelId, seq); found == req.Acknowledgements { + // 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) } } selfHeight := clienttypes.GetSelfHeight(ctx) - return &types.QueryUnrelayedPacketsResponse{ + return &types.QueryUnrelayedAcksResponse{ Sequences: unrelayedSequences, Height: selfHeight, }, nil diff --git a/x/ibc/04-channel/keeper/grpc_query_test.go b/x/ibc/04-channel/keeper/grpc_query_test.go index 76a6f0a476b9..d0a1e97f15c0 100644 --- a/x/ibc/04-channel/keeper/grpc_query_test.go +++ b/x/ibc/04-channel/keeper/grpc_query_test.go @@ -835,9 +835,9 @@ func (suite *KeeperTestSuite) TestQueryPacketAcknowledgement() { } } -func (suite *KeeperTestSuite) TestQueryUnrelayedPackets() { +func (suite *KeeperTestSuite) TestQueryUnreceivedPackets() { var ( - req *types.QueryUnrelayedPacketsRequest + req *types.QueryUnreceivedPacketsRequest expSeq = []uint64{} ) @@ -856,7 +856,7 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedPackets() { { "invalid port ID", func() { - req = &types.QueryUnrelayedPacketsRequest{ + req = &types.QueryUnreceivedPacketsRequest{ PortId: "", ChannelId: "test-channel-id", } @@ -866,7 +866,7 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedPackets() { { "invalid channel ID", func() { - req = &types.QueryUnrelayedPacketsRequest{ + req = &types.QueryUnreceivedPacketsRequest{ PortId: "test-port-id", ChannelId: "", } @@ -876,7 +876,7 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedPackets() { { "invalid seq", func() { - req = &types.QueryUnrelayedPacketsRequest{ + req = &types.QueryUnreceivedPacketsRequest{ PortId: "test-port-id", ChannelId: "test-channel-id", PacketCommitmentSequences: []uint64{0}, @@ -892,11 +892,10 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedPackets() { // no ack exists expSeq = []uint64{1} - req = &types.QueryUnrelayedPacketsRequest{ + req = &types.QueryUnreceivedPacketsRequest{ PortId: channelA.PortID, ChannelId: channelA.ID, PacketCommitmentSequences: []uint64{1}, - Acknowledgements: false, } }, true, @@ -911,81 +910,148 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedPackets() { suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketAcknowledgement(suite.chainA.GetContext(), channelA.PortID, channelA.ID, 1, ack.Hash) expSeq = []uint64{} - req = &types.QueryUnrelayedPacketsRequest{ + req = &types.QueryUnreceivedPacketsRequest{ PortId: channelA.PortID, ChannelId: channelA.ID, PacketCommitmentSequences: []uint64{1}, - Acknowledgements: false, } }, true, }, { - "basic success unrelayed acknowledgements", + "success multiple unrelayed packet commitments", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) + expSeq = []uint64{} // reset + packetCommitments := []uint64{} - // 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) + // set ack for every other sequence + for seq := uint64(1); seq < 10; seq++ { + packetCommitments = append(packetCommitments, seq) - expSeq = []uint64{1} - req = &types.QueryUnrelayedPacketsRequest{ + 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) + } else { + expSeq = append(expSeq, seq) + } + } + + req = &types.QueryUnreceivedPacketsRequest{ PortId: channelA.PortID, ChannelId: channelA.ID, - PacketCommitmentSequences: []uint64{1}, - Acknowledgements: true, + PacketCommitmentSequences: packetCommitments, } }, 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.UnreceivedPackets(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + suite.Require().Equal(expSeq, res.Sequences) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestQueryUnrelayedAcks() { + var ( + req *types.QueryUnrelayedAcksRequest + expSeq = []uint64{} + ) + + testCases := []struct { + msg string + malleate func() + expPass bool + }{ { - "basic success unrelayed acknowledgements, nothing to relay", + "empty request", + func() { + req = nil + }, + false, + }, + { + "invalid port ID", + func() { + req = &types.QueryUnrelayedAcksRequest{ + PortId: "", + ChannelId: "test-channel-id", + } + }, + false, + }, + { + "invalid channel ID", + func() { + req = &types.QueryUnrelayedAcksRequest{ + PortId: "test-port-id", + ChannelId: "", + } + }, + false, + }, + { + "invalid seq", + func() { + req = &types.QueryUnrelayedAcksRequest{ + PortId: "test-port-id", + ChannelId: "test-channel-id", + PacketCommitmentSequences: []uint64{0}, + } + }, + false, + }, + { + "basic success unrelayed packet acks", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) - // no ack exists + // 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) - expSeq = []uint64{} - req = &types.QueryUnrelayedPacketsRequest{ + expSeq = []uint64{1} + req = &types.QueryUnrelayedAcksRequest{ PortId: channelA.PortID, ChannelId: channelA.ID, PacketCommitmentSequences: []uint64{1}, - Acknowledgements: true, } }, true, }, { - "success multiple unrelayed packet commitments", + "basic success unrelayed packet acknowledgements, nothing to relay", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) - expSeq = []uint64{} // reset - packetCommitments := []uint64{} - // set ack 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) - } else { - expSeq = append(expSeq, seq) - } - } + // no ack exists - req = &types.QueryUnrelayedPacketsRequest{ + expSeq = []uint64{} + req = &types.QueryUnrelayedAcksRequest{ PortId: channelA.PortID, ChannelId: channelA.ID, - PacketCommitmentSequences: packetCommitments, - Acknowledgements: false, + PacketCommitmentSequences: []uint64{1}, } }, true, }, { - "success multiple unrelayed acknowledgements", + "success multiple unrelayed packet acknowledgements", func() { _, _, _, _, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB, types.UNORDERED) expSeq = []uint64{} // reset @@ -1002,11 +1068,10 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedPackets() { } } - req = &types.QueryUnrelayedPacketsRequest{ + req = &types.QueryUnrelayedAcksRequest{ PortId: channelA.PortID, ChannelId: channelA.ID, PacketCommitmentSequences: packetCommitments, - Acknowledgements: true, } }, true, @@ -1020,7 +1085,7 @@ func (suite *KeeperTestSuite) TestQueryUnrelayedPackets() { tc.malleate() ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) - res, err := suite.chainA.QueryServer.UnrelayedPackets(ctx, req) + res, err := suite.chainA.QueryServer.UnrelayedAcks(ctx, req) if tc.expPass { suite.Require().NoError(err) diff --git a/x/ibc/04-channel/types/query.pb.go b/x/ibc/04-channel/types/query.pb.go index 6f477460c371..8f8bfcfb7529 100644 --- a/x/ibc/04-channel/types/query.pb.go +++ b/x/ibc/04-channel/types/query.pb.go @@ -1089,32 +1089,29 @@ func (m *QueryPacketAcknowledgementResponse) GetProofHeight() types.Height { return types.Height{} } -// QueryUnrelayedPacketsRequest is the request type for the -// Query/UnrelayedPackets RPC method -type QueryUnrelayedPacketsRequest struct { +// QueryUnreceivedPacketsRequest is the request type for the +// Query/UnreceivedPackets RPC method +type QueryUnreceivedPacketsRequest 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 packet sequences PacketCommitmentSequences []uint64 `protobuf:"varint,3,rep,packed,name=packet_commitment_sequences,json=packetCommitmentSequences,proto3" json:"packet_commitment_sequences,omitempty"` - // flag indicating if the return value is packet commitments or - // acknowledgements - Acknowledgements bool `protobuf:"varint,4,opt,name=acknowledgements,proto3" json:"acknowledgements,omitempty"` } -func (m *QueryUnrelayedPacketsRequest) Reset() { *m = QueryUnrelayedPacketsRequest{} } -func (m *QueryUnrelayedPacketsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryUnrelayedPacketsRequest) ProtoMessage() {} -func (*QueryUnrelayedPacketsRequest) Descriptor() ([]byte, []int) { +func (m *QueryUnreceivedPacketsRequest) Reset() { *m = QueryUnreceivedPacketsRequest{} } +func (m *QueryUnreceivedPacketsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryUnreceivedPacketsRequest) ProtoMessage() {} +func (*QueryUnreceivedPacketsRequest) Descriptor() ([]byte, []int) { return fileDescriptor_2150995751d4f15a, []int{16} } -func (m *QueryUnrelayedPacketsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryUnreceivedPacketsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryUnrelayedPacketsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryUnreceivedPacketsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryUnrelayedPacketsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryUnreceivedPacketsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1124,67 +1121,181 @@ func (m *QueryUnrelayedPacketsRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryUnrelayedPacketsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryUnrelayedPacketsRequest.Merge(m, src) +func (m *QueryUnreceivedPacketsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUnreceivedPacketsRequest.Merge(m, src) } -func (m *QueryUnrelayedPacketsRequest) XXX_Size() int { +func (m *QueryUnreceivedPacketsRequest) XXX_Size() int { return m.Size() } -func (m *QueryUnrelayedPacketsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryUnrelayedPacketsRequest.DiscardUnknown(m) +func (m *QueryUnreceivedPacketsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUnreceivedPacketsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryUnrelayedPacketsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryUnreceivedPacketsRequest proto.InternalMessageInfo -func (m *QueryUnrelayedPacketsRequest) GetPortId() string { +func (m *QueryUnreceivedPacketsRequest) GetPortId() string { if m != nil { return m.PortId } return "" } -func (m *QueryUnrelayedPacketsRequest) GetChannelId() string { +func (m *QueryUnreceivedPacketsRequest) GetChannelId() string { if m != nil { return m.ChannelId } return "" } -func (m *QueryUnrelayedPacketsRequest) GetPacketCommitmentSequences() []uint64 { +func (m *QueryUnreceivedPacketsRequest) GetPacketCommitmentSequences() []uint64 { if m != nil { return m.PacketCommitmentSequences } return nil } -func (m *QueryUnrelayedPacketsRequest) GetAcknowledgements() bool { +// QueryUnreceivedPacketsResponse is the response type for the +// Query/UnreceivedPacketCommitments RPC method +type QueryUnreceivedPacketsResponse struct { + // list of unreceived packet 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 *QueryUnreceivedPacketsResponse) Reset() { *m = QueryUnreceivedPacketsResponse{} } +func (m *QueryUnreceivedPacketsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryUnreceivedPacketsResponse) ProtoMessage() {} +func (*QueryUnreceivedPacketsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_2150995751d4f15a, []int{17} +} +func (m *QueryUnreceivedPacketsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryUnreceivedPacketsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryUnreceivedPacketsResponse.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 *QueryUnreceivedPacketsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUnreceivedPacketsResponse.Merge(m, src) +} +func (m *QueryUnreceivedPacketsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryUnreceivedPacketsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUnreceivedPacketsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryUnreceivedPacketsResponse proto.InternalMessageInfo + +func (m *QueryUnreceivedPacketsResponse) GetSequences() []uint64 { + if m != nil { + return m.Sequences + } + return nil +} + +func (m *QueryUnreceivedPacketsResponse) GetHeight() types.Height { + if m != nil { + return m.Height + } + return types.Height{} +} + +// QueryUnrelayedAcksRequest is the request type for the +// Query/UnrelayedAcks RPC method +type QueryUnrelayedAcksRequest 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"` +} + +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_2150995751d4f15a, []int{18} +} +func (m *QueryUnrelayedAcksRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryUnrelayedAcksRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryUnrelayedAcksRequest.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 *QueryUnrelayedAcksRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUnrelayedAcksRequest.Merge(m, src) +} +func (m *QueryUnrelayedAcksRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryUnrelayedAcksRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUnrelayedAcksRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryUnrelayedAcksRequest proto.InternalMessageInfo + +func (m *QueryUnrelayedAcksRequest) GetPortId() string { if m != nil { - return m.Acknowledgements + return m.PortId + } + return "" +} + +func (m *QueryUnrelayedAcksRequest) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +func (m *QueryUnrelayedAcksRequest) GetPacketCommitmentSequences() []uint64 { + if m != nil { + return m.PacketCommitmentSequences } - return false + return nil } -// QueryUnrelayedPacketsResponse is the request type for the -// Query/UnrelayedPacketCommitments RPC method -type QueryUnrelayedPacketsResponse struct { - // list of unrelayed packet sequences +// QueryUnrelayedAcksResponse is the response type for the +// Query/UnrelayedAcks RPC method +type QueryUnrelayedAcksResponse 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 *QueryUnrelayedPacketsResponse) Reset() { *m = QueryUnrelayedPacketsResponse{} } -func (m *QueryUnrelayedPacketsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryUnrelayedPacketsResponse) ProtoMessage() {} -func (*QueryUnrelayedPacketsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2150995751d4f15a, []int{17} +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_2150995751d4f15a, []int{19} } -func (m *QueryUnrelayedPacketsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryUnrelayedAcksResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryUnrelayedPacketsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryUnrelayedAcksResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryUnrelayedPacketsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryUnrelayedAcksResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1194,26 +1305,26 @@ func (m *QueryUnrelayedPacketsResponse) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } -func (m *QueryUnrelayedPacketsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryUnrelayedPacketsResponse.Merge(m, src) +func (m *QueryUnrelayedAcksResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUnrelayedAcksResponse.Merge(m, src) } -func (m *QueryUnrelayedPacketsResponse) XXX_Size() int { +func (m *QueryUnrelayedAcksResponse) XXX_Size() int { return m.Size() } -func (m *QueryUnrelayedPacketsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryUnrelayedPacketsResponse.DiscardUnknown(m) +func (m *QueryUnrelayedAcksResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUnrelayedAcksResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryUnrelayedPacketsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryUnrelayedAcksResponse proto.InternalMessageInfo -func (m *QueryUnrelayedPacketsResponse) GetSequences() []uint64 { +func (m *QueryUnrelayedAcksResponse) GetSequences() []uint64 { if m != nil { return m.Sequences } return nil } -func (m *QueryUnrelayedPacketsResponse) GetHeight() types.Height { +func (m *QueryUnrelayedAcksResponse) GetHeight() types.Height { if m != nil { return m.Height } @@ -1233,7 +1344,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_2150995751d4f15a, []int{18} + return fileDescriptor_2150995751d4f15a, []int{20} } func (m *QueryNextSequenceReceiveRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1293,7 +1404,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_2150995751d4f15a, []int{19} + return fileDescriptor_2150995751d4f15a, []int{21} } func (m *QueryNextSequenceReceiveResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1367,8 +1478,10 @@ func init() { proto.RegisterType((*QueryPacketCommitmentsResponse)(nil), "ibc.channel.QueryPacketCommitmentsResponse") proto.RegisterType((*QueryPacketAcknowledgementRequest)(nil), "ibc.channel.QueryPacketAcknowledgementRequest") proto.RegisterType((*QueryPacketAcknowledgementResponse)(nil), "ibc.channel.QueryPacketAcknowledgementResponse") - proto.RegisterType((*QueryUnrelayedPacketsRequest)(nil), "ibc.channel.QueryUnrelayedPacketsRequest") - proto.RegisterType((*QueryUnrelayedPacketsResponse)(nil), "ibc.channel.QueryUnrelayedPacketsResponse") + proto.RegisterType((*QueryUnreceivedPacketsRequest)(nil), "ibc.channel.QueryUnreceivedPacketsRequest") + proto.RegisterType((*QueryUnreceivedPacketsResponse)(nil), "ibc.channel.QueryUnreceivedPacketsResponse") + proto.RegisterType((*QueryUnrelayedAcksRequest)(nil), "ibc.channel.QueryUnrelayedAcksRequest") + proto.RegisterType((*QueryUnrelayedAcksResponse)(nil), "ibc.channel.QueryUnrelayedAcksResponse") proto.RegisterType((*QueryNextSequenceReceiveRequest)(nil), "ibc.channel.QueryNextSequenceReceiveRequest") proto.RegisterType((*QueryNextSequenceReceiveResponse)(nil), "ibc.channel.QueryNextSequenceReceiveResponse") } @@ -1376,89 +1489,92 @@ func init() { func init() { proto.RegisterFile("ibc/channel/query.proto", fileDescriptor_2150995751d4f15a) } var fileDescriptor_2150995751d4f15a = []byte{ - // 1307 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4d, 0x6c, 0x1b, 0x45, - 0x14, 0xce, 0xd8, 0xce, 0xdf, 0x38, 0x22, 0x61, 0x92, 0x28, 0xa9, 0x9b, 0x38, 0xc9, 0x4a, 0x40, - 0x48, 0xc9, 0x4e, 0x9b, 0x22, 0x84, 0x0a, 0x54, 0x6a, 0x22, 0xd1, 0x06, 0x29, 0x6d, 0xba, 0x51, - 0xa5, 0xa6, 0x07, 0xcc, 0x7a, 0x3d, 0xb1, 0x57, 0x89, 0x77, 0xb7, 0xde, 0x75, 0x93, 0x28, 0xf2, - 0x85, 0x13, 0x47, 0x54, 0xae, 0x48, 0x15, 0x17, 0xae, 0x88, 0x1b, 0xc7, 0x0a, 0x38, 0x44, 0xaa, - 0x84, 0x2a, 0xf5, 0xd2, 0x13, 0xa0, 0x84, 0x33, 0x07, 0x2e, 0x5c, 0xd1, 0xce, 0xbc, 0xb1, 0x77, - 0xed, 0x5d, 0xc7, 0xc4, 0x81, 0xa8, 0x27, 0xef, 0xbe, 0x79, 0x33, 0xef, 0xfb, 0xbe, 0xf7, 0x66, - 0xe6, 0xad, 0xf1, 0x84, 0x99, 0x37, 0xa8, 0x51, 0xd2, 0x2d, 0x8b, 0xed, 0xd0, 0x87, 0x55, 0x56, - 0xd9, 0x57, 0x9d, 0x8a, 0xed, 0xd9, 0x24, 0x6d, 0xe6, 0x0d, 0x15, 0x06, 0x32, 0xc2, 0x6b, 0xc7, - 0x64, 0x96, 0x07, 0x3f, 0xc2, 0x2b, 0xb3, 0x60, 0xd8, 0x6e, 0xd9, 0x76, 0x69, 0x5e, 0x77, 0x99, - 0x98, 0x4e, 0x1f, 0x5d, 0xc9, 0x33, 0x4f, 0xbf, 0x42, 0x1d, 0xbd, 0x68, 0x5a, 0xba, 0x67, 0xda, - 0x16, 0xf8, 0x5e, 0x08, 0x86, 0x82, 0x5f, 0x18, 0x9a, 0x2a, 0xda, 0x76, 0x71, 0x87, 0x51, 0xdd, - 0x31, 0xa9, 0x6e, 0x59, 0xb6, 0xc7, 0xe7, 0xb9, 0x72, 0x22, 0x8c, 0xf2, 0xb7, 0x7c, 0x75, 0x8b, - 0xea, 0x16, 0xa0, 0xcc, 0x8c, 0x15, 0xed, 0xa2, 0xcd, 0x1f, 0xa9, 0xff, 0x24, 0xac, 0xca, 0x1a, - 0x1e, 0xbd, 0xeb, 0x63, 0x59, 0x11, 0x41, 0x34, 0xf6, 0xb0, 0xca, 0x5c, 0x8f, 0x4c, 0xe0, 0x7e, - 0xc7, 0xae, 0x78, 0x39, 0xb3, 0x30, 0x89, 0x66, 0xd1, 0xfc, 0xa0, 0xd6, 0xe7, 0xbf, 0xae, 0x16, - 0xc8, 0x34, 0xc6, 0x80, 0xc7, 0x1f, 0x4b, 0xf0, 0xb1, 0x41, 0xb0, 0xac, 0x16, 0x94, 0x1f, 0x10, - 0x1e, 0x0b, 0xaf, 0xe7, 0x3a, 0xb6, 0xe5, 0x32, 0xa2, 0xe2, 0x7e, 0xf0, 0xe2, 0x0b, 0xa6, 0x97, - 0xc6, 0xd4, 0x80, 0x6a, 0xaa, 0x74, 0x97, 0x4e, 0x64, 0x0c, 0xf7, 0x3a, 0x15, 0xdb, 0xde, 0xe2, - 0x21, 0x86, 0x34, 0xf1, 0xe2, 0x47, 0xe7, 0x0f, 0x39, 0x47, 0xf7, 0x4a, 0x93, 0x49, 0x11, 0x9d, - 0x5b, 0xd6, 0x75, 0xaf, 0x44, 0x3e, 0xc0, 0x43, 0x62, 0xb8, 0xc4, 0xcc, 0x62, 0xc9, 0x9b, 0x4c, - 0xf1, 0x48, 0x44, 0x44, 0x12, 0xb9, 0xb8, 0xc5, 0x47, 0x96, 0x53, 0x87, 0xbf, 0xce, 0xf4, 0x68, - 0x69, 0xee, 0x2d, 0x4c, 0xca, 0xa7, 0x61, 0xe4, 0xae, 0x94, 0xe2, 0x63, 0x8c, 0x1b, 0xf9, 0x01, - 0xf0, 0x6f, 0xaa, 0x22, 0x99, 0xaa, 0x9f, 0x4c, 0x55, 0xd4, 0x02, 0x24, 0x53, 0x5d, 0xd7, 0x8b, - 0x0c, 0xe6, 0x6a, 0x81, 0x99, 0xca, 0x2f, 0x08, 0x8f, 0x37, 0x05, 0x00, 0x6d, 0xae, 0xe1, 0x01, - 0xa0, 0xed, 0x4e, 0xa2, 0xd9, 0xe4, 0x7c, 0x7a, 0x29, 0x1b, 0x12, 0x67, 0xb5, 0xc0, 0x2c, 0xcf, - 0xdc, 0x32, 0x59, 0x41, 0xca, 0x54, 0xf7, 0x27, 0x37, 0x43, 0xe8, 0x12, 0x1c, 0xdd, 0x5b, 0x27, - 0xa2, 0x13, 0x81, 0x83, 0xf0, 0xc8, 0x65, 0xdc, 0x07, 0xaa, 0x25, 0x4f, 0x50, 0x0d, 0xfc, 0x94, - 0x2f, 0x10, 0xce, 0x0a, 0x42, 0xb6, 0x65, 0x31, 0xc3, 0x5f, 0xa5, 0x59, 0xbb, 0x2c, 0xc6, 0x46, - 0x7d, 0x10, 0x2a, 0x29, 0x60, 0x69, 0xd2, 0x36, 0x71, 0x6a, 0x6d, 0x5f, 0x22, 0x3c, 0x13, 0x0b, - 0xe5, 0xd5, 0x56, 0xf9, 0xbe, 0x14, 0x59, 0x60, 0x59, 0xe1, 0xae, 0x1b, 0x9e, 0xee, 0xb1, 0x6e, - 0xf7, 0xea, 0x9f, 0x75, 0xd1, 0x22, 0x96, 0x06, 0xd1, 0x36, 0xf1, 0x84, 0x59, 0xd7, 0x25, 0x27, - 0x70, 0xe6, 0x5c, 0xdf, 0x05, 0x76, 0xc2, 0x5c, 0x90, 0x40, 0x40, 0xc2, 0xc0, 0x5a, 0xe3, 0x66, - 0x94, 0xf9, 0x1c, 0x76, 0xf8, 0x37, 0x08, 0xcf, 0x85, 0x08, 0xfb, 0x14, 0x2d, 0xb7, 0xea, 0x9e, - 0x85, 0x9c, 0x64, 0x0e, 0x0f, 0x31, 0xc7, 0x36, 0x4a, 0x39, 0xab, 0x5a, 0xce, 0xb3, 0x0a, 0xc7, - 0x9e, 0xd2, 0xd2, 0xdc, 0x76, 0x9b, 0x9b, 0x1a, 0x2e, 0x01, 0xf4, 0xd2, 0x05, 0x30, 0xfe, 0x85, - 0xb0, 0xd2, 0x0e, 0x23, 0xe4, 0xe5, 0x23, 0x3c, 0x6c, 0xc8, 0x91, 0x50, 0x3e, 0xc6, 0x54, 0x71, - 0x03, 0xa8, 0xf2, 0x06, 0x50, 0x6f, 0x58, 0xfb, 0xda, 0x6b, 0x46, 0x68, 0x19, 0x72, 0x11, 0x0f, - 0x42, 0x2e, 0xeb, 0x4c, 0x06, 0x84, 0x61, 0xb5, 0xd0, 0x48, 0x4c, 0x32, 0x3e, 0x31, 0xa9, 0x93, - 0x12, 0xd3, 0xfb, 0x6f, 0x12, 0x53, 0xc1, 0x53, 0x9c, 0xf3, 0xba, 0x6e, 0x6c, 0x33, 0x6f, 0xc5, - 0x2e, 0x97, 0x4d, 0xaf, 0xcc, 0x2c, 0xaf, 0xdb, 0x94, 0x64, 0xf0, 0x80, 0xeb, 0x2f, 0x61, 0x19, - 0x0c, 0xd2, 0x51, 0x7f, 0x57, 0xbe, 0x47, 0x78, 0x3a, 0x26, 0x28, 0x68, 0xcc, 0x0f, 0x2f, 0x69, - 0xe5, 0x81, 0x87, 0xb4, 0x80, 0xe5, 0x1c, 0x0a, 0xf8, 0x49, 0x1c, 0x66, 0xb7, 0x5b, 0xa5, 0xc2, - 0x07, 0x71, 0xf2, 0xd4, 0x07, 0xf1, 0x6f, 0xf2, 0x4e, 0x88, 0x40, 0x08, 0xb2, 0x2e, 0xe3, 0x74, - 0x43, 0x44, 0x79, 0x14, 0xcf, 0x86, 0x8e, 0x62, 0x31, 0xf9, 0x86, 0xb1, 0x1d, 0xc8, 0x4a, 0x70, - 0xd2, 0x79, 0x9e, 0xc7, 0xbb, 0x70, 0x86, 0xd4, 0x31, 0x5a, 0xf6, 0xee, 0x0e, 0x2b, 0x14, 0xd9, - 0x7f, 0x5d, 0xb0, 0x4f, 0xe5, 0xc9, 0x10, 0x13, 0x19, 0xe4, 0x9d, 0xc7, 0xc3, 0x7a, 0x78, 0x08, - 0x4a, 0xb7, 0xd9, 0x7c, 0x0e, 0xf5, 0xfb, 0x23, 0x82, 0x8d, 0x7e, 0xcf, 0xaa, 0xb0, 0x1d, 0x7d, - 0x9f, 0x15, 0x04, 0x97, 0xae, 0xcb, 0xf7, 0x3a, 0xbe, 0xe8, 0xf0, 0x95, 0x72, 0x8d, 0x2a, 0xc9, - 0x49, 0xe5, 0xdc, 0xc9, 0xe4, 0x6c, 0x72, 0x3e, 0xa5, 0x5d, 0x70, 0x9a, 0x6a, 0x72, 0x43, 0x3a, - 0x90, 0x05, 0x3c, 0xd2, 0xa4, 0x8e, 0xcb, 0x99, 0x0d, 0x68, 0x2d, 0x76, 0xc5, 0x86, 0x3d, 0xd8, - 0xca, 0x01, 0x32, 0x30, 0x85, 0x07, 0x1b, 0xa1, 0x11, 0x0f, 0xdd, 0x30, 0x04, 0x2a, 0x2e, 0xd1, - 0x61, 0xc5, 0x6d, 0xc2, 0x35, 0x7d, 0x9b, 0xed, 0xd5, 0x21, 0x6b, 0xcc, 0x60, 0xe6, 0xa3, 0xae, - 0x5b, 0x80, 0x43, 0x84, 0x67, 0xe3, 0xd7, 0x06, 0x3e, 0x4b, 0x78, 0xdc, 0x62, 0x7b, 0x0d, 0x3d, - 0x73, 0x15, 0xe1, 0xc0, 0x43, 0xa5, 0xb4, 0x51, 0xab, 0x75, 0xee, 0xff, 0x5f, 0x5b, 0x4b, 0xcf, - 0x86, 0x71, 0x2f, 0xa7, 0x42, 0x1e, 0x23, 0xdc, 0x0f, 0xb7, 0x27, 0x09, 0x9f, 0x2b, 0x11, 0x5f, - 0x3a, 0x99, 0xb9, 0x36, 0x1e, 0x42, 0x00, 0x65, 0xf9, 0xf3, 0x17, 0x7f, 0x7c, 0x95, 0xf8, 0x90, - 0x5c, 0xa3, 0xc1, 0xcf, 0x32, 0xf9, 0xf1, 0x26, 0x9b, 0x44, 0x7a, 0xd0, 0x50, 0xba, 0x46, 0x7d, - 0xfd, 0x5d, 0x7a, 0x00, 0x59, 0xa9, 0x91, 0x3d, 0x3c, 0x20, 0x3b, 0x52, 0x12, 0x1f, 0x52, 0x6e, - 0x84, 0x8c, 0xd2, 0xce, 0x05, 0x60, 0xbd, 0xc1, 0x61, 0xcd, 0x90, 0xe9, 0xb6, 0xb0, 0xc8, 0x77, - 0x08, 0x93, 0xd6, 0xb6, 0x98, 0x5c, 0x8a, 0x88, 0x10, 0xd7, 0xc7, 0x67, 0xde, 0xe9, 0xcc, 0x19, - 0x80, 0x5d, 0xe7, 0xc0, 0xde, 0x27, 0xef, 0x45, 0x03, 0xab, 0x4f, 0xf4, 0x25, 0xab, 0xbf, 0xd4, - 0x1a, 0x88, 0x9f, 0xfa, 0x88, 0x5b, 0x7a, 0xd2, 0x48, 0xc4, 0x71, 0x4d, 0x71, 0x24, 0xe2, 0xd8, - 0x36, 0x57, 0xb9, 0xc3, 0x11, 0xaf, 0x92, 0x9b, 0xa7, 0xcf, 0x30, 0x0d, 0x36, 0xc7, 0xe4, 0x6f, - 0x84, 0xc7, 0x23, 0x3b, 0x38, 0xa2, 0xc6, 0x03, 0x8b, 0x6a, 0x47, 0x33, 0xb4, 0x63, 0x7f, 0xe0, - 0x52, 0xe3, 0x5c, 0x76, 0x49, 0xb5, 0x1b, 0x2e, 0xe1, 0xde, 0x92, 0xf2, 0x0e, 0x95, 0x1e, 0x04, - 0xfb, 0xdb, 0x1a, 0x15, 0xbb, 0x54, 0x5a, 0xc5, 0x5b, 0x8d, 0x3c, 0x43, 0x78, 0xa4, 0xf9, 0xf2, - 0x27, 0x6f, 0xb7, 0x92, 0x88, 0xe9, 0xf5, 0x32, 0x0b, 0x9d, 0xb8, 0x02, 0xd5, 0xcf, 0x38, 0xd5, - 0x07, 0xe4, 0x7e, 0x17, 0x54, 0x5b, 0xee, 0x0d, 0x97, 0x1e, 0xc8, 0x93, 0xae, 0x46, 0x7e, 0x42, - 0xf8, 0xf5, 0x96, 0x56, 0x86, 0x74, 0x80, 0xb1, 0xbe, 0x75, 0x2e, 0x75, 0xe4, 0x0b, 0x84, 0xee, - 0x71, 0x42, 0x77, 0xc8, 0xda, 0x99, 0x12, 0x22, 0x2f, 0x10, 0x1e, 0x8f, 0xec, 0x1a, 0xa2, 0xaa, - 0xb1, 0x5d, 0x63, 0x13, 0x55, 0x8d, 0x6d, 0xdb, 0x11, 0x65, 0x93, 0x33, 0xda, 0x20, 0x77, 0xbb, - 0x67, 0xa4, 0x1b, 0xdb, 0xa1, 0xdc, 0x3c, 0x4e, 0xe0, 0x91, 0xe6, 0x4b, 0x38, 0xaa, 0xd2, 0x62, - 0x9a, 0x8d, 0xa8, 0x4a, 0x8b, 0xbb, 0xd3, 0x95, 0x6f, 0x11, 0xe7, 0xf1, 0x04, 0x91, 0xaf, 0xd1, - 0x19, 0x17, 0x5b, 0x9b, 0xc6, 0xa5, 0x89, 0x7a, 0x73, 0x2b, 0x52, 0xa3, 0x55, 0x89, 0x37, 0xe7, - 0x00, 0xff, 0x9f, 0x11, 0x1e, 0x8d, 0xb8, 0xcc, 0x49, 0xc4, 0x79, 0x18, 0xdf, 0x4f, 0x64, 0x16, - 0x3b, 0xf4, 0x06, 0x75, 0xd6, 0xb9, 0x38, 0x9f, 0x90, 0x5b, 0x5d, 0x48, 0x13, 0x6a, 0x31, 0x96, - 0xd7, 0x0e, 0x8f, 0xb2, 0xe8, 0xf9, 0x51, 0x16, 0xfd, 0x7e, 0x94, 0x45, 0x5f, 0x1e, 0x67, 0x7b, - 0x9e, 0x1f, 0x67, 0x7b, 0x5e, 0x1e, 0x67, 0x7b, 0x1e, 0x5c, 0x2d, 0x9a, 0x5e, 0xa9, 0x9a, 0x57, - 0x0d, 0xbb, 0x4c, 0xe1, 0x1f, 0x55, 0xf1, 0xb3, 0xe8, 0x16, 0xb6, 0xe9, 0x1e, 0x47, 0x70, 0xf9, - 0xdd, 0x45, 0x09, 0xc2, 0xdb, 0x77, 0x98, 0x9b, 0xef, 0xe3, 0x5f, 0xc3, 0x57, 0xff, 0x09, 0x00, - 0x00, 0xff, 0xff, 0x4f, 0x95, 0x7c, 0xa2, 0xc3, 0x15, 0x00, 0x00, + // 1345 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xcd, 0x6f, 0x1b, 0xc5, + 0x1b, 0xce, 0xc4, 0xce, 0xd7, 0xeb, 0xfc, 0x7e, 0x25, 0x93, 0x44, 0x49, 0xb6, 0x89, 0x93, 0xac, + 0x44, 0x1b, 0x5a, 0xb2, 0xdb, 0xa6, 0x08, 0xa1, 0x02, 0x95, 0x92, 0x48, 0xb4, 0x41, 0x4a, 0x9b, + 0x3a, 0xaa, 0xd4, 0xf4, 0x80, 0x59, 0xaf, 0x27, 0xf6, 0x2a, 0xf6, 0xee, 0xd6, 0xbb, 0x6e, 0x12, + 0x82, 0x11, 0xea, 0x05, 0x8e, 0x88, 0x1e, 0x7a, 0x44, 0xfc, 0x05, 0x88, 0x1b, 0xc7, 0x4a, 0x70, + 0x88, 0x84, 0x84, 0x2a, 0xf5, 0xd2, 0x13, 0xa0, 0x04, 0xae, 0x1c, 0x38, 0xc0, 0x15, 0xed, 0x7c, + 0xac, 0x77, 0xed, 0x5d, 0xc7, 0xc4, 0x69, 0x23, 0x4e, 0xde, 0x9d, 0x79, 0x67, 0xde, 0xe7, 0x79, + 0xde, 0x77, 0x67, 0x9f, 0x35, 0x8c, 0x19, 0x39, 0x5d, 0xd5, 0x8b, 0x9a, 0x69, 0x92, 0x92, 0x7a, + 0xbf, 0x4a, 0x2a, 0xbb, 0x8a, 0x5d, 0xb1, 0x5c, 0x0b, 0xa7, 0x8c, 0x9c, 0xae, 0xf0, 0x09, 0x89, + 0x45, 0x95, 0x0c, 0x62, 0xba, 0xfc, 0x87, 0x45, 0x49, 0x17, 0x74, 0xcb, 0x29, 0x5b, 0x8e, 0x9a, + 0xd3, 0x1c, 0xc2, 0x96, 0xab, 0x0f, 0x2e, 0xe7, 0x88, 0xab, 0x5d, 0x56, 0x6d, 0xad, 0x60, 0x98, + 0x9a, 0x6b, 0x58, 0x26, 0x8f, 0x9d, 0x08, 0xa6, 0xe2, 0xbf, 0x7c, 0x6a, 0xb2, 0x60, 0x59, 0x85, + 0x12, 0x51, 0x35, 0xdb, 0x50, 0x35, 0xd3, 0xb4, 0x5c, 0xba, 0xce, 0x11, 0x0b, 0xf9, 0x2c, 0xbd, + 0xcb, 0x55, 0x37, 0x55, 0xcd, 0xe4, 0x28, 0xa5, 0x91, 0x82, 0x55, 0xb0, 0xe8, 0xa5, 0xea, 0x5d, + 0xb1, 0x51, 0x79, 0x15, 0x86, 0x6f, 0x7b, 0x58, 0x96, 0x59, 0x92, 0x0c, 0xb9, 0x5f, 0x25, 0x8e, + 0x8b, 0xc7, 0xa0, 0xcf, 0xb6, 0x2a, 0x6e, 0xd6, 0xc8, 0x8f, 0xa3, 0x19, 0x34, 0x37, 0x90, 0xe9, + 0xf5, 0x6e, 0x57, 0xf2, 0x78, 0x0a, 0x80, 0xe3, 0xf1, 0xe6, 0xba, 0xe9, 0xdc, 0x00, 0x1f, 0x59, + 0xc9, 0xcb, 0xdf, 0x21, 0x18, 0x09, 0xef, 0xe7, 0xd8, 0x96, 0xe9, 0x10, 0xac, 0x40, 0x1f, 0x8f, + 0xa2, 0x1b, 0xa6, 0x16, 0x46, 0x94, 0x80, 0x6a, 0x8a, 0x08, 0x17, 0x41, 0x78, 0x04, 0x7a, 0xec, + 0x8a, 0x65, 0x6d, 0xd2, 0x14, 0x83, 0x19, 0x76, 0xe3, 0x65, 0xa7, 0x17, 0x59, 0x5b, 0x73, 0x8b, + 0xe3, 0x09, 0x96, 0x9d, 0x8e, 0xac, 0x69, 0x6e, 0x11, 0xbf, 0x0d, 0x83, 0x6c, 0xba, 0x48, 0x8c, + 0x42, 0xd1, 0x1d, 0x4f, 0xd2, 0x4c, 0x98, 0x65, 0x62, 0xb5, 0xb8, 0x41, 0x67, 0x96, 0x92, 0xfb, + 0x3f, 0x4f, 0x77, 0x65, 0x52, 0x34, 0x9a, 0x0d, 0xc9, 0x1f, 0x84, 0x91, 0x3b, 0x42, 0x8a, 0xf7, + 0x00, 0xea, 0xf5, 0xe1, 0xe0, 0xcf, 0x29, 0xac, 0x98, 0x8a, 0x57, 0x4c, 0x85, 0xf5, 0x02, 0x2f, + 0xa6, 0xb2, 0xa6, 0x15, 0x08, 0x5f, 0x9b, 0x09, 0xac, 0x94, 0x7f, 0x42, 0x30, 0xda, 0x90, 0x80, + 0x6b, 0x73, 0x15, 0xfa, 0x39, 0x6d, 0x67, 0x1c, 0xcd, 0x24, 0xe6, 0x52, 0x0b, 0xe9, 0x90, 0x38, + 0x2b, 0x79, 0x62, 0xba, 0xc6, 0xa6, 0x41, 0xf2, 0x42, 0x26, 0x3f, 0x1e, 0x5f, 0x0f, 0xa1, 0xeb, + 0xa6, 0xe8, 0xce, 0x1f, 0x89, 0x8e, 0x25, 0x0e, 0xc2, 0xc3, 0x97, 0xa0, 0x97, 0xab, 0x96, 0x38, + 0x42, 0x35, 0x1e, 0x27, 0x7f, 0x8e, 0x20, 0xcd, 0x08, 0x59, 0xa6, 0x49, 0x74, 0x6f, 0x97, 0x46, + 0xed, 0xd2, 0x00, 0xba, 0x3f, 0xc9, 0x3b, 0x29, 0x30, 0xd2, 0xa0, 0x6d, 0xf7, 0xb1, 0xb5, 0x7d, + 0x8e, 0x60, 0x3a, 0x16, 0xca, 0x7f, 0x5b, 0xe5, 0xbb, 0x42, 0x64, 0x86, 0x65, 0x99, 0x86, 0xae, + 0xbb, 0x9a, 0x4b, 0x3a, 0x7d, 0x56, 0xff, 0xf0, 0x45, 0x8b, 0xd8, 0x9a, 0x8b, 0xb6, 0x01, 0x63, + 0x86, 0xaf, 0x4b, 0x96, 0xe1, 0xcc, 0x3a, 0x5e, 0x08, 0x7f, 0x12, 0x66, 0x83, 0x04, 0x02, 0x12, + 0x06, 0xf6, 0x1a, 0x35, 0xa2, 0x86, 0x4f, 0xe1, 0x09, 0xff, 0x1a, 0xc1, 0x6c, 0x88, 0xb0, 0x47, + 0xd1, 0x74, 0xaa, 0xce, 0x49, 0xc8, 0x89, 0x67, 0x61, 0x90, 0xd8, 0x96, 0x5e, 0xcc, 0x9a, 0xd5, + 0x72, 0x8e, 0x54, 0x28, 0xf6, 0x64, 0x26, 0x45, 0xc7, 0x6e, 0xd2, 0xa1, 0x7a, 0x48, 0x00, 0xbd, + 0x08, 0xe1, 0x18, 0xff, 0x44, 0x20, 0xb7, 0xc2, 0xc8, 0xeb, 0xf2, 0x2e, 0x9c, 0xd1, 0xc5, 0x4c, + 0xa8, 0x1e, 0x23, 0x0a, 0x7b, 0x03, 0x28, 0xe2, 0x0d, 0xa0, 0x2c, 0x9a, 0xbb, 0x99, 0xff, 0xeb, + 0xa1, 0x6d, 0xf0, 0x59, 0x18, 0xe0, 0xb5, 0xf4, 0x99, 0xf4, 0xb3, 0x81, 0x95, 0x7c, 0xbd, 0x30, + 0x89, 0xf8, 0xc2, 0x24, 0x8f, 0x2a, 0x4c, 0xcf, 0xbf, 0x29, 0x4c, 0x05, 0x26, 0x29, 0xe7, 0x35, + 0x4d, 0xdf, 0x22, 0xee, 0xb2, 0x55, 0x2e, 0x1b, 0x6e, 0x99, 0x98, 0x6e, 0xa7, 0x25, 0x91, 0xa0, + 0xdf, 0xf1, 0xb6, 0x30, 0x75, 0xc2, 0xcb, 0xe1, 0xdf, 0xcb, 0xdf, 0x22, 0x98, 0x8a, 0x49, 0xca, + 0x35, 0xa6, 0x87, 0x97, 0x18, 0xa5, 0x89, 0x07, 0x33, 0x81, 0x91, 0x53, 0x68, 0xe0, 0xaf, 0xe2, + 0x30, 0x3b, 0x9d, 0x2a, 0x15, 0x3e, 0x88, 0x13, 0xc7, 0x3e, 0x88, 0x7f, 0x11, 0xef, 0x84, 0x08, + 0x84, 0x5c, 0xd6, 0x25, 0x48, 0xd5, 0x45, 0x14, 0x47, 0xf1, 0x4c, 0xe8, 0x28, 0x66, 0x8b, 0x17, + 0xf5, 0xad, 0x40, 0x55, 0x82, 0x8b, 0x4e, 0xf3, 0x3c, 0xde, 0xe6, 0x67, 0x88, 0x8f, 0xd1, 0xb4, + 0xb6, 0x4b, 0x24, 0x5f, 0x20, 0x2f, 0xba, 0x61, 0x9f, 0x88, 0x93, 0x21, 0x26, 0x33, 0x97, 0x77, + 0x0e, 0xce, 0x68, 0xe1, 0x29, 0xde, 0xba, 0x8d, 0xc3, 0xa7, 0xd0, 0xbf, 0x8f, 0x45, 0xff, 0xde, + 0x31, 0x2b, 0x44, 0x27, 0xc6, 0x03, 0x92, 0x67, 0x64, 0x3a, 0xee, 0xdf, 0x6b, 0x70, 0xd6, 0xa6, + 0x3b, 0x65, 0xeb, 0x6d, 0x92, 0x15, 0xd2, 0x39, 0xe3, 0x89, 0x99, 0xc4, 0x5c, 0x32, 0x33, 0x61, + 0x37, 0x34, 0xe5, 0xba, 0x08, 0x90, 0x6d, 0xde, 0xb6, 0x11, 0xc0, 0xb8, 0xae, 0x93, 0x30, 0x50, + 0xdf, 0x0f, 0xd1, 0xfd, 0xea, 0x03, 0x81, 0x3e, 0xea, 0x6e, 0xb3, 0x8f, 0x1e, 0x21, 0x98, 0xf0, + 0x53, 0x96, 0xb4, 0x5d, 0x92, 0x5f, 0xd4, 0xb7, 0x4e, 0x5d, 0x87, 0x12, 0x48, 0x51, 0xa0, 0x5e, + 0x90, 0x06, 0x1b, 0xdc, 0x80, 0xdc, 0x24, 0x3b, 0x3e, 0x86, 0x0c, 0xd3, 0xbf, 0x53, 0x73, 0xb3, + 0x8f, 0x60, 0x26, 0x7e, 0x6f, 0xce, 0x67, 0x01, 0x46, 0x4d, 0xb2, 0x53, 0x17, 0x28, 0xcb, 0x8b, + 0x4f, 0x53, 0x25, 0x33, 0xc3, 0x66, 0xf3, 0xda, 0x97, 0xff, 0xd4, 0x2c, 0x3c, 0x1e, 0x82, 0x1e, + 0x4a, 0x05, 0x7f, 0x89, 0xa0, 0x8f, 0xfb, 0x02, 0x1c, 0x3e, 0x31, 0x23, 0xbe, 0xe1, 0xa4, 0xd9, + 0x16, 0x11, 0x4c, 0x00, 0x79, 0xe9, 0xe1, 0xb3, 0xdf, 0x1e, 0x75, 0xbf, 0x83, 0xaf, 0xaa, 0xc1, + 0x0f, 0x4e, 0xf1, 0x59, 0x2a, 0xec, 0xaf, 0xba, 0x57, 0x57, 0xba, 0xa6, 0x7a, 0xfa, 0x3b, 0xea, + 0x1e, 0xaf, 0x4a, 0x0d, 0xef, 0x40, 0xbf, 0xf0, 0xda, 0x38, 0x3e, 0xa5, 0xe8, 0x6c, 0x49, 0x6e, + 0x15, 0xc2, 0x61, 0xbd, 0x4a, 0x61, 0x4d, 0xe3, 0xa9, 0x96, 0xb0, 0xf0, 0x37, 0x08, 0x70, 0xb3, + 0xe1, 0xc7, 0x17, 0x23, 0x32, 0xc4, 0x7d, 0xa1, 0x48, 0xaf, 0xb7, 0x17, 0xcc, 0x81, 0x5d, 0xa3, + 0xc0, 0xde, 0xc2, 0x6f, 0x46, 0x03, 0xf3, 0x17, 0x7a, 0x92, 0xf9, 0x37, 0xb5, 0x3a, 0xe2, 0x27, + 0x1e, 0xe2, 0x26, 0xb7, 0x1d, 0x89, 0x38, 0xce, 0xee, 0x47, 0x22, 0x8e, 0x35, 0xf0, 0xf2, 0x2d, + 0x8a, 0x78, 0x05, 0x5f, 0x3f, 0x7e, 0x85, 0xd5, 0xa0, 0xed, 0xc7, 0x7f, 0x23, 0x18, 0x8d, 0xf4, + 0xa6, 0x58, 0x89, 0x07, 0x16, 0x65, 0xb4, 0x25, 0xb5, 0xed, 0x78, 0xce, 0xa5, 0x46, 0xb9, 0x6c, + 0xe3, 0x6a, 0x27, 0x5c, 0xc2, 0xae, 0x59, 0xa5, 0xde, 0x5b, 0xdd, 0x0b, 0x3a, 0xf7, 0x9a, 0xca, + 0x9e, 0x52, 0x31, 0xca, 0xee, 0x6a, 0xf8, 0x47, 0x04, 0xaf, 0x34, 0xda, 0x1a, 0xfc, 0x5a, 0x33, + 0x89, 0x18, 0x17, 0x2b, 0x5d, 0x68, 0x27, 0x94, 0x53, 0xfd, 0x90, 0x52, 0xbd, 0x87, 0xef, 0x76, + 0x40, 0xb5, 0xe9, 0x45, 0xe0, 0xa8, 0x7b, 0xe2, 0xa4, 0xab, 0xe1, 0xef, 0x11, 0x0c, 0x35, 0x99, + 0x34, 0xdc, 0x06, 0x46, 0xff, 0xd1, 0xb9, 0xd8, 0x56, 0x2c, 0x27, 0x74, 0x87, 0x12, 0xba, 0x85, + 0x57, 0x4f, 0x94, 0x10, 0x7e, 0x86, 0x60, 0x34, 0xd2, 0x0f, 0x45, 0x75, 0x63, 0x2b, 0xcb, 0x16, + 0xd5, 0x8d, 0x2d, 0x8d, 0x96, 0xbc, 0x41, 0x19, 0xad, 0xe3, 0xdb, 0x9d, 0x33, 0xd2, 0xf4, 0xad, + 0x50, 0x6d, 0xfe, 0x42, 0x30, 0xd4, 0xe4, 0x44, 0xa2, 0x6a, 0x13, 0xe7, 0xa3, 0xa2, 0x6a, 0x13, + 0x6b, 0x6d, 0xe4, 0xcf, 0x10, 0xa5, 0xf2, 0x29, 0xc2, 0x9f, 0x9c, 0x70, 0xbb, 0xb5, 0xf0, 0x22, + 0x35, 0xb5, 0xea, 0x03, 0xca, 0xda, 0x9c, 0xe2, 0xef, 0x08, 0xfe, 0x17, 0xb2, 0x1e, 0xf8, 0x5c, + 0x34, 0x91, 0x46, 0xc3, 0x24, 0x9d, 0x3f, 0x32, 0x8e, 0x93, 0x7d, 0xc8, 0xc8, 0x7e, 0x8c, 0x3f, + 0x7a, 0xd9, 0x5c, 0x29, 0x16, 0x5a, 0x6b, 0xfc, 0x03, 0x82, 0xe1, 0x08, 0x63, 0x82, 0x23, 0xce, + 0xf6, 0x78, 0x6f, 0x24, 0xcd, 0xb7, 0x19, 0xcd, 0x99, 0xaf, 0x51, 0xe2, 0xef, 0xe3, 0x1b, 0x1d, + 0x10, 0x0f, 0xd9, 0xa5, 0xa5, 0xd5, 0xfd, 0x83, 0x34, 0x7a, 0x7a, 0x90, 0x46, 0xbf, 0x1e, 0xa4, + 0xd1, 0x17, 0x87, 0xe9, 0xae, 0xa7, 0x87, 0xe9, 0xae, 0xe7, 0x87, 0xe9, 0xae, 0x7b, 0x57, 0x0a, + 0x86, 0x5b, 0xac, 0xe6, 0x14, 0xdd, 0x2a, 0xab, 0xfc, 0x7f, 0x6f, 0xf6, 0x33, 0xef, 0xe4, 0xb7, + 0xd4, 0x1d, 0x8a, 0xe0, 0xd2, 0x1b, 0xf3, 0x02, 0x84, 0xbb, 0x6b, 0x13, 0x27, 0xd7, 0x4b, 0xff, + 0xb3, 0xb8, 0xf2, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x51, 0x33, 0x85, 0xa4, 0x69, 0x17, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1493,9 +1609,12 @@ type QueryClient interface { PacketCommitments(ctx context.Context, in *QueryPacketCommitmentsRequest, opts ...grpc.CallOption) (*QueryPacketCommitmentsResponse, error) // PacketAcknowledgement queries a stored packet acknowledgement hash. PacketAcknowledgement(ctx context.Context, in *QueryPacketAcknowledgementRequest, opts ...grpc.CallOption) (*QueryPacketAcknowledgementResponse, error) - // UnrelayedPackets returns all the unrelayed IBC packets associated with a + // UnreceivedPackets returns all the unrelayed IBC packets associated with a // channel and sequences. - UnrelayedPackets(ctx context.Context, in *QueryUnrelayedPacketsRequest, opts ...grpc.CallOption) (*QueryUnrelayedPacketsResponse, error) + UnreceivedPackets(ctx context.Context, in *QueryUnreceivedPacketsRequest, opts ...grpc.CallOption) (*QueryUnreceivedPacketsResponse, error) + // UnrelayedAcks returns all the unrelayed IBC acknowledgements associated with a + // channel and sequences. + UnrelayedAcks(ctx context.Context, in *QueryUnrelayedAcksRequest, opts ...grpc.CallOption) (*QueryUnrelayedAcksResponse, error) // NextSequenceReceive returns the next receive sequence for a given channel. NextSequenceReceive(ctx context.Context, in *QueryNextSequenceReceiveRequest, opts ...grpc.CallOption) (*QueryNextSequenceReceiveResponse, error) } @@ -1580,9 +1699,18 @@ func (c *queryClient) PacketAcknowledgement(ctx context.Context, in *QueryPacket return out, nil } -func (c *queryClient) UnrelayedPackets(ctx context.Context, in *QueryUnrelayedPacketsRequest, opts ...grpc.CallOption) (*QueryUnrelayedPacketsResponse, error) { - out := new(QueryUnrelayedPacketsResponse) - err := c.cc.Invoke(ctx, "/ibc.channel.Query/UnrelayedPackets", in, out, opts...) +func (c *queryClient) UnreceivedPackets(ctx context.Context, in *QueryUnreceivedPacketsRequest, opts ...grpc.CallOption) (*QueryUnreceivedPacketsResponse, error) { + out := new(QueryUnreceivedPacketsResponse) + err := c.cc.Invoke(ctx, "/ibc.channel.Query/UnreceivedPackets", in, out, opts...) + if err != nil { + return nil, err + } + 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.channel.Query/UnrelayedAcks", in, out, opts...) if err != nil { return nil, err } @@ -1620,9 +1748,12 @@ type QueryServer interface { PacketCommitments(context.Context, *QueryPacketCommitmentsRequest) (*QueryPacketCommitmentsResponse, error) // PacketAcknowledgement queries a stored packet acknowledgement hash. PacketAcknowledgement(context.Context, *QueryPacketAcknowledgementRequest) (*QueryPacketAcknowledgementResponse, error) - // UnrelayedPackets returns all the unrelayed IBC packets associated with a + // UnreceivedPackets returns all the unrelayed IBC packets associated with a + // channel and sequences. + UnreceivedPackets(context.Context, *QueryUnreceivedPacketsRequest) (*QueryUnreceivedPacketsResponse, error) + // UnrelayedAcks returns all the unrelayed IBC acknowledgements associated with a // channel and sequences. - UnrelayedPackets(context.Context, *QueryUnrelayedPacketsRequest) (*QueryUnrelayedPacketsResponse, error) + UnrelayedAcks(context.Context, *QueryUnrelayedAcksRequest) (*QueryUnrelayedAcksResponse, error) // NextSequenceReceive returns the next receive sequence for a given channel. NextSequenceReceive(context.Context, *QueryNextSequenceReceiveRequest) (*QueryNextSequenceReceiveResponse, error) } @@ -1655,8 +1786,11 @@ func (*UnimplementedQueryServer) PacketCommitments(ctx context.Context, req *Que func (*UnimplementedQueryServer) PacketAcknowledgement(ctx context.Context, req *QueryPacketAcknowledgementRequest) (*QueryPacketAcknowledgementResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PacketAcknowledgement not implemented") } -func (*UnimplementedQueryServer) UnrelayedPackets(ctx context.Context, req *QueryUnrelayedPacketsRequest) (*QueryUnrelayedPacketsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UnrelayedPackets 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) NextSequenceReceive(ctx context.Context, req *QueryNextSequenceReceiveRequest) (*QueryNextSequenceReceiveResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method NextSequenceReceive not implemented") @@ -1810,20 +1944,38 @@ func _Query_PacketAcknowledgement_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } -func _Query_UnrelayedPackets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryUnrelayedPacketsRequest) +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 { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).UnreceivedPackets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.channel.Query/UnreceivedPackets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).UnreceivedPackets(ctx, req.(*QueryUnreceivedPacketsRequest)) + } + 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) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).UnrelayedPackets(ctx, in) + return srv.(QueryServer).UnrelayedAcks(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/ibc.channel.Query/UnrelayedPackets", + FullMethod: "/ibc.channel.Query/UnrelayedAcks", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).UnrelayedPackets(ctx, req.(*QueryUnrelayedPacketsRequest)) + return srv.(QueryServer).UnrelayedAcks(ctx, req.(*QueryUnrelayedAcksRequest)) } return interceptor(ctx, in, info, handler) } @@ -1883,8 +2035,12 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_PacketAcknowledgement_Handler, }, { - MethodName: "UnrelayedPackets", - Handler: _Query_UnrelayedPackets_Handler, + MethodName: "UnreceivedPackets", + Handler: _Query_UnreceivedPackets_Handler, + }, + { + MethodName: "UnrelayedAcks", + Handler: _Query_UnrelayedAcks_Handler, }, { MethodName: "NextSequenceReceive", @@ -2695,7 +2851,7 @@ func (m *QueryPacketAcknowledgementResponse) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } -func (m *QueryUnrelayedPacketsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryUnreceivedPacketsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2705,26 +2861,16 @@ func (m *QueryUnrelayedPacketsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryUnrelayedPacketsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryUnreceivedPacketsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryUnrelayedPacketsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryUnreceivedPacketsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Acknowledgements { - i-- - if m.Acknowledgements { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - } if len(m.PacketCommitmentSequences) > 0 { dAtA19 := make([]byte, len(m.PacketCommitmentSequences)*10) var j18 int @@ -2760,7 +2906,7 @@ func (m *QueryUnrelayedPacketsRequest) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryUnrelayedPacketsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryUnreceivedPacketsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2770,12 +2916,12 @@ func (m *QueryUnrelayedPacketsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryUnrelayedPacketsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryUnreceivedPacketsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryUnrelayedPacketsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryUnreceivedPacketsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2811,6 +2957,112 @@ func (m *QueryUnrelayedPacketsResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *QueryUnrelayedAcksRequest) 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 *QueryUnrelayedAcksRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUnrelayedAcksRequest) 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 { + for num >= 1<<7 { + dAtA24[j23] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j23++ + } + dAtA24[j23] = uint8(num) + j23++ + } + i -= j23 + copy(dAtA[i:], dAtA24[:j23]) + i = encodeVarintQuery(dAtA, i, uint64(j23)) + 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 *QueryUnrelayedAcksResponse) 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 *QueryUnrelayedAcksResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUnrelayedAcksResponse) 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] = 0x12 + if len(m.Sequences) > 0 { + dAtA27 := make([]byte, len(m.Sequences)*10) + var j26 int + for _, num := range m.Sequences { + for num >= 1<<7 { + dAtA27[j26] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j26++ + } + dAtA27[j26] = uint8(num) + j26++ + } + i -= j26 + copy(dAtA[i:], dAtA27[:j26]) + i = encodeVarintQuery(dAtA, i, uint64(j26)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *QueryNextSequenceReceiveRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3241,7 +3493,7 @@ func (m *QueryPacketAcknowledgementResponse) Size() (n int) { return n } -func (m *QueryUnrelayedPacketsRequest) Size() (n int) { +func (m *QueryUnreceivedPacketsRequest) Size() (n int) { if m == nil { return 0 } @@ -3262,13 +3514,52 @@ func (m *QueryUnrelayedPacketsRequest) Size() (n int) { } n += 1 + sovQuery(uint64(l)) + l } - if m.Acknowledgements { - n += 2 + return n +} + +func (m *QueryUnreceivedPacketsResponse) 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)) + } + n += 1 + sovQuery(uint64(l)) + l + } + l = m.Height.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryUnrelayedAcksRequest) 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 len(m.PacketCommitmentSequences) > 0 { + l = 0 + for _, e := range m.PacketCommitmentSequences { + l += sovQuery(uint64(e)) + } + n += 1 + sovQuery(uint64(l)) + l } return n } -func (m *QueryUnrelayedPacketsResponse) Size() (n int) { +func (m *QueryUnrelayedAcksResponse) Size() (n int) { if m == nil { return 0 } @@ -5791,7 +6082,7 @@ func (m *QueryPacketAcknowledgementResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryUnrelayedPacketsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryUnreceivedPacketsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5814,10 +6105,10 @@ func (m *QueryUnrelayedPacketsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryUnrelayedPacketsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryUnreceivedPacketsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryUnrelayedPacketsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryUnreceivedPacketsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5960,26 +6251,361 @@ func (m *QueryUnrelayedPacketsRequest) Unmarshal(dAtA []byte) error { } else { return fmt.Errorf("proto: wrong wireType = %d for field PacketCommitmentSequences", wireType) } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Acknowledgements", wireType) + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } + 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 *QueryUnreceivedPacketsResponse) 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: QueryUnreceivedPacketsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryUnreceivedPacketsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Sequences = append(m.Sequences, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Sequences) == 0 { + m.Sequences = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Sequences = append(m.Sequences, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field Sequences", wireType) + } + case 2: + 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 *QueryUnrelayedAcksRequest) 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: QueryUnrelayedAcksRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryUnrelayedAcksRequest: 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 + case 3: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PacketCommitmentSequences = append(m.PacketCommitmentSequences, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.PacketCommitmentSequences) == 0 { + m.PacketCommitmentSequences = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PacketCommitmentSequences = append(m.PacketCommitmentSequences, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field PacketCommitmentSequences", wireType) } - m.Acknowledgements = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -6004,7 +6630,7 @@ func (m *QueryUnrelayedPacketsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryUnrelayedPacketsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryUnrelayedAcksResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6027,10 +6653,10 @@ func (m *QueryUnrelayedPacketsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryUnrelayedPacketsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryUnrelayedAcksResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryUnrelayedPacketsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryUnrelayedAcksResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/x/ibc/04-channel/types/query.pb.gw.go b/x/ibc/04-channel/types/query.pb.gw.go index 933cba2d78fd..9155e761f52f 100644 --- a/x/ibc/04-channel/types/query.pb.gw.go +++ b/x/ibc/04-channel/types/query.pb.gw.go @@ -701,8 +701,8 @@ func local_request_Query_PacketAcknowledgement_0(ctx context.Context, marshaler } -func request_Query_UnrelayedPackets_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryUnrelayedPacketsRequest +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 var ( @@ -745,24 +745,62 @@ func request_Query_UnrelayedPackets_0(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_commitment_sequences", err) } - val, ok = pathParams["acknowledgements"] + msg, err := client.UnreceivedPackets(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_UnreceivedPackets_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUnreceivedPacketsRequest + 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", "acknowledgements") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") } - protoReq.Acknowledgements, err = runtime.Bool(val) + 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", "acknowledgements", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) } - msg, err := client.UnrelayedPackets(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + val, ok = pathParams["packet_commitment_sequences"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_commitment_sequences") + } + + protoReq.PacketCommitmentSequences, err = runtime.Uint64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_commitment_sequences", err) + } + + msg, err := server.UnreceivedPackets(ctx, &protoReq) return msg, metadata, err } -func local_request_Query_UnrelayedPackets_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryUnrelayedPacketsRequest +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 var metadata runtime.ServerMetadata var ( @@ -805,18 +843,56 @@ func local_request_Query_UnrelayedPackets_0(ctx context.Context, marshaler runti return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_commitment_sequences", err) } - val, ok = pathParams["acknowledgements"] + msg, err := client.UnrelayedAcks(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 + 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", "acknowledgements") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") } - protoReq.Acknowledgements, err = runtime.Bool(val) + protoReq.PortId, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "acknowledgements", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + val, ok = pathParams["packet_commitment_sequences"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_commitment_sequences") } - msg, err := server.UnrelayedPackets(ctx, &protoReq) + protoReq.PacketCommitmentSequences, err = runtime.Uint64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_commitment_sequences", err) + } + + msg, err := server.UnrelayedAcks(ctx, &protoReq) return msg, metadata, err } @@ -1063,7 +1139,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_UnrelayedPackets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + 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() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1072,14 +1148,34 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_UnrelayedPackets_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_UnreceivedPackets_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_UnrelayedPackets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_UnreceivedPackets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UnrelayedAcks_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_UnrelayedAcks_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()...) }) @@ -1304,7 +1400,27 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_UnrelayedPackets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + 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() + 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_UnreceivedPackets_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_UnreceivedPackets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UnrelayedAcks_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) @@ -1313,14 +1429,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_UnrelayedPackets_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_UnrelayedAcks_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_UnrelayedPackets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_UnrelayedAcks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1364,7 +1480,9 @@ var ( 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_UnrelayedPackets_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, 1, 0, 4, 1, 5, 10, 2, 11}, []string{"ibc", "channel", "v1beta1", "channels", "channel_id", "ports", "port_id", "packet_commitments", "packet_commitment_sequences", "packet_acks", "acknowledgements", "unrelayed_packets"}, "", 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_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))) ) @@ -1386,7 +1504,9 @@ var ( forward_Query_PacketAcknowledgement_0 = runtime.ForwardResponseMessage - forward_Query_UnrelayedPackets_0 = runtime.ForwardResponseMessage + forward_Query_UnreceivedPackets_0 = runtime.ForwardResponseMessage + + forward_Query_UnrelayedAcks_0 = runtime.ForwardResponseMessage forward_Query_NextSequenceReceive_0 = runtime.ForwardResponseMessage ) diff --git a/x/ibc/keeper/grpc_query.go b/x/ibc/keeper/grpc_query.go index 870e589946bf..da49b00426b3 100644 --- a/x/ibc/keeper/grpc_query.go +++ b/x/ibc/keeper/grpc_query.go @@ -93,9 +93,14 @@ func (q Keeper) PacketAcknowledgement(c context.Context, req *channeltypes.Query return q.ChannelKeeper.PacketAcknowledgement(c, req) } -// UnrelayedPackets implements the IBC QueryServer interface -func (q Keeper) UnrelayedPackets(c context.Context, req *channeltypes.QueryUnrelayedPacketsRequest) (*channeltypes.QueryUnrelayedPacketsResponse, error) { - return q.ChannelKeeper.UnrelayedPackets(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) } // NextSequenceReceive implements the IBC QueryServer interface diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 5d53eaf0737c..b67c039138d9 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1265,586 +1265,587 @@ 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{ - // 9250 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x74, 0x1c, 0xe7, - 0x75, 0x18, 0x67, 0x1f, 0xc0, 0xee, 0x5d, 0x3c, 0x16, 0x1f, 0x40, 0x68, 0xb9, 0x24, 0x01, 0x6a, - 0x24, 0x4b, 0x14, 0x25, 0x01, 0x12, 0x45, 0x52, 0xe4, 0x32, 0xb6, 0x8c, 0x05, 0x96, 0x20, 0x48, - 0xbc, 0x34, 0x00, 0x29, 0xd9, 0x4e, 0x3a, 0x67, 0x30, 0xfb, 0x61, 0x31, 0xe2, 0xee, 0xcc, 0x68, - 0x66, 0x96, 0x04, 0x68, 0xfb, 0x1c, 0x25, 0x7e, 0x34, 0x56, 0x9b, 0xda, 0x79, 0x9c, 0xd4, 0x76, - 0x2c, 0xd7, 0x8f, 0xb6, 0x4e, 0x9d, 0xb6, 0x79, 0x38, 0x4d, 0x9b, 0xb6, 0xa7, 0x75, 0x5a, 0x27, - 0x71, 0xda, 0xa6, 0xc7, 0x3a, 0x75, 0xdb, 0x34, 0xa7, 0xa1, 0x53, 0xd9, 0xa7, 0x55, 0x5c, 0xb7, - 0x49, 0x59, 0x35, 0x7d, 0xe8, 0x47, 0x7a, 0xbe, 0xd7, 0x3c, 0xf6, 0x81, 0x59, 0x40, 0xa4, 0x6c, - 0x9d, 0xe8, 0x17, 0xf6, 0xbb, 0x73, 0xef, 0xfd, 0xee, 0xbd, 0xdf, 0xbd, 0xf7, 0xbb, 0xdf, 0x63, - 0x06, 0xf0, 0x73, 0xe7, 0xe1, 0x58, 0xcd, 0xb2, 0x6a, 0x75, 0x3c, 0x6d, 0x3b, 0x96, 0x67, 0x6d, - 0x34, 0x37, 0xa7, 0xab, 0xd8, 0xd5, 0x1d, 0xc3, 0xf6, 0x2c, 0x67, 0x8a, 0xc2, 0xd0, 0x30, 0xc3, - 0x98, 0x12, 0x18, 0xf2, 0x12, 0x8c, 0x5c, 0x30, 0xea, 0x78, 0xce, 0x47, 0x5c, 0xc3, 0x1e, 0x3a, - 0x0b, 0xa9, 0x4d, 0xa3, 0x8e, 0x0b, 0xd2, 0xb1, 0xe4, 0xf1, 0xdc, 0xc9, 0xfb, 0xa7, 0x5a, 0x88, - 0xa6, 0xa2, 0x14, 0xab, 0x04, 0xac, 0x50, 0x0a, 0xf9, 0x3b, 0x29, 0x18, 0xed, 0xf0, 0x14, 0x21, - 0x48, 0x99, 0x5a, 0x83, 0x70, 0x94, 0x8e, 0x67, 0x15, 0xfa, 0x1b, 0x15, 0xa0, 0xdf, 0xd6, 0xf4, - 0x6b, 0x5a, 0x0d, 0x17, 0x12, 0x14, 0x2c, 0x9a, 0x68, 0x02, 0xa0, 0x8a, 0x6d, 0x6c, 0x56, 0xb1, - 0xa9, 0xef, 0x14, 0x92, 0xc7, 0x92, 0xc7, 0xb3, 0x4a, 0x08, 0x82, 0x1e, 0x86, 0x11, 0xbb, 0xb9, - 0x51, 0x37, 0x74, 0x35, 0x84, 0x06, 0xc7, 0x92, 0xc7, 0xd3, 0x4a, 0x9e, 0x3d, 0x98, 0x0b, 0x90, - 0x1f, 0x84, 0xe1, 0x1b, 0x58, 0xbb, 0x16, 0x46, 0xcd, 0x51, 0xd4, 0x21, 0x02, 0x0e, 0x21, 0xce, - 0xc2, 0x40, 0x03, 0xbb, 0xae, 0x56, 0xc3, 0xaa, 0xb7, 0x63, 0xe3, 0x42, 0x8a, 0x6a, 0x7f, 0xac, - 0x4d, 0xfb, 0x56, 0xcd, 0x73, 0x9c, 0x6a, 0x7d, 0xc7, 0xc6, 0x68, 0x06, 0xb2, 0xd8, 0x6c, 0x36, - 0x18, 0x87, 0x74, 0x17, 0xfb, 0x55, 0xcc, 0x66, 0xa3, 0x95, 0x4b, 0x86, 0x90, 0x71, 0x16, 0xfd, - 0x2e, 0x76, 0xae, 0x1b, 0x3a, 0x2e, 0xf4, 0x51, 0x06, 0x0f, 0xb6, 0x31, 0x58, 0x63, 0xcf, 0x5b, - 0x79, 0x08, 0x3a, 0x34, 0x0b, 0x59, 0xbc, 0xed, 0x61, 0xd3, 0x35, 0x2c, 0xb3, 0xd0, 0x4f, 0x99, - 0xbc, 0xa3, 0xc3, 0x28, 0xe2, 0x7a, 0xb5, 0x95, 0x45, 0x40, 0x87, 0xce, 0x40, 0xbf, 0x65, 0x7b, - 0x86, 0x65, 0xba, 0x85, 0xcc, 0x31, 0xe9, 0x78, 0xee, 0xe4, 0x91, 0x8e, 0x8e, 0xb0, 0xc2, 0x70, - 0x14, 0x81, 0x8c, 0x16, 0x20, 0xef, 0x5a, 0x4d, 0x47, 0xc7, 0xaa, 0x6e, 0x55, 0xb1, 0x6a, 0x98, - 0x9b, 0x56, 0x21, 0x4b, 0x19, 0x4c, 0xb6, 0x2b, 0x42, 0x11, 0x67, 0xad, 0x2a, 0x5e, 0x30, 0x37, - 0x2d, 0x65, 0xc8, 0x8d, 0xb4, 0xd1, 0x38, 0xf4, 0xb9, 0x3b, 0xa6, 0xa7, 0x6d, 0x17, 0x06, 0xa8, - 0x87, 0xf0, 0x96, 0xfc, 0xeb, 0x7d, 0x30, 0xdc, 0x8b, 0x8b, 0x9d, 0x87, 0xf4, 0x26, 0xd1, 0xb2, - 0x90, 0xd8, 0x8b, 0x0d, 0x18, 0x4d, 0xd4, 0x88, 0x7d, 0xfb, 0x34, 0xe2, 0x0c, 0xe4, 0x4c, 0xec, - 0x7a, 0xb8, 0xca, 0x3c, 0x22, 0xd9, 0xa3, 0x4f, 0x01, 0x23, 0x6a, 0x77, 0xa9, 0xd4, 0xbe, 0x5c, - 0xea, 0x59, 0x18, 0xf6, 0x45, 0x52, 0x1d, 0xcd, 0xac, 0x09, 0xdf, 0x9c, 0x8e, 0x93, 0x64, 0xaa, - 0x22, 0xe8, 0x14, 0x42, 0xa6, 0x0c, 0xe1, 0x48, 0x1b, 0xcd, 0x01, 0x58, 0x26, 0xb6, 0x36, 0xd5, - 0x2a, 0xd6, 0xeb, 0x85, 0x4c, 0x17, 0x2b, 0xad, 0x10, 0x94, 0x36, 0x2b, 0x59, 0x0c, 0xaa, 0xd7, - 0xd1, 0xb9, 0xc0, 0xd5, 0xfa, 0xbb, 0x78, 0xca, 0x12, 0x0b, 0xb2, 0x36, 0x6f, 0xbb, 0x02, 0x43, - 0x0e, 0x26, 0x7e, 0x8f, 0xab, 0x5c, 0xb3, 0x2c, 0x15, 0x62, 0x2a, 0x56, 0x33, 0x85, 0x93, 0x31, - 0xc5, 0x06, 0x9d, 0x70, 0x13, 0xdd, 0x07, 0x3e, 0x40, 0xa5, 0x6e, 0x05, 0x34, 0x0b, 0x0d, 0x08, - 0xe0, 0xb2, 0xd6, 0xc0, 0xc5, 0x9b, 0x30, 0x14, 0x35, 0x0f, 0x1a, 0x83, 0xb4, 0xeb, 0x69, 0x8e, - 0x47, 0xbd, 0x30, 0xad, 0xb0, 0x06, 0xca, 0x43, 0x12, 0x9b, 0x55, 0x9a, 0xe5, 0xd2, 0x0a, 0xf9, - 0x89, 0xde, 0x1d, 0x28, 0x9c, 0xa4, 0x0a, 0x3f, 0xd0, 0x3e, 0xa2, 0x11, 0xce, 0xad, 0x7a, 0x17, - 0x9f, 0x84, 0xc1, 0x88, 0x02, 0xbd, 0x76, 0x2d, 0x7f, 0x00, 0x0e, 0x76, 0x64, 0x8d, 0x9e, 0x85, - 0xb1, 0xa6, 0x69, 0x98, 0x1e, 0x76, 0x6c, 0x07, 0x13, 0x8f, 0x65, 0x5d, 0x15, 0xfe, 0x4b, 0x7f, - 0x17, 0x9f, 0xbb, 0x12, 0xc6, 0x66, 0x5c, 0x94, 0xd1, 0x66, 0x3b, 0xf0, 0x44, 0x36, 0xf3, 0x6a, - 0x7f, 0xfe, 0x85, 0x17, 0x5e, 0x78, 0x21, 0x21, 0x7f, 0xb2, 0x0f, 0xc6, 0x3a, 0xc5, 0x4c, 0xc7, - 0xf0, 0x1d, 0x87, 0x3e, 0xb3, 0xd9, 0xd8, 0xc0, 0x0e, 0x35, 0x52, 0x5a, 0xe1, 0x2d, 0x34, 0x03, - 0xe9, 0xba, 0xb6, 0x81, 0xeb, 0x85, 0xd4, 0x31, 0xe9, 0xf8, 0xd0, 0xc9, 0x87, 0x7b, 0x8a, 0xca, - 0xa9, 0x45, 0x42, 0xa2, 0x30, 0x4a, 0xf4, 0x2e, 0x48, 0xf1, 0x14, 0x4d, 0x38, 0x9c, 0xe8, 0x8d, - 0x03, 0x89, 0x25, 0x85, 0xd2, 0xa1, 0xc3, 0x90, 0x25, 0x7f, 0x99, 0x6f, 0xf4, 0x51, 0x99, 0x33, - 0x04, 0x40, 0xfc, 0x02, 0x15, 0x21, 0x43, 0xc3, 0xa4, 0x8a, 0xc5, 0xd4, 0xe6, 0xb7, 0x89, 0x63, - 0x55, 0xf1, 0xa6, 0xd6, 0xac, 0x7b, 0xea, 0x75, 0xad, 0xde, 0xc4, 0xd4, 0xe1, 0xb3, 0xca, 0x00, - 0x07, 0x5e, 0x25, 0x30, 0x34, 0x09, 0x39, 0x16, 0x55, 0x86, 0x59, 0xc5, 0xdb, 0x34, 0x7b, 0xa6, - 0x15, 0x16, 0x68, 0x0b, 0x04, 0x42, 0xba, 0x7f, 0xce, 0xb5, 0x4c, 0xe1, 0x9a, 0xb4, 0x0b, 0x02, - 0xa0, 0xdd, 0x3f, 0xd9, 0x9a, 0xb8, 0x8f, 0x76, 0x56, 0xaf, 0xd5, 0xa7, 0xe4, 0x5f, 0x4b, 0x40, - 0x8a, 0xe6, 0x8b, 0x61, 0xc8, 0xad, 0xbf, 0x67, 0xb5, 0xa2, 0xce, 0xad, 0x5c, 0x29, 0x2f, 0x56, - 0xf2, 0x12, 0x1a, 0x02, 0xa0, 0x80, 0x0b, 0x8b, 0x2b, 0x33, 0xeb, 0xf9, 0x84, 0xdf, 0x5e, 0x58, - 0x5e, 0x3f, 0x73, 0x2a, 0x9f, 0xf4, 0x09, 0xae, 0x30, 0x40, 0x2a, 0x8c, 0xf0, 0xc4, 0xc9, 0x7c, - 0x1a, 0xe5, 0x61, 0x80, 0x31, 0x58, 0x78, 0xb6, 0x32, 0x77, 0xe6, 0x54, 0xbe, 0x2f, 0x0a, 0x79, - 0xe2, 0x64, 0xbe, 0x1f, 0x0d, 0x42, 0x96, 0x42, 0xca, 0x2b, 0x2b, 0x8b, 0xf9, 0x8c, 0xcf, 0x73, - 0x6d, 0x5d, 0x59, 0x58, 0x9e, 0xcf, 0x67, 0x7d, 0x9e, 0xf3, 0xca, 0xca, 0x95, 0xd5, 0x3c, 0xf8, - 0x1c, 0x96, 0x2a, 0x6b, 0x6b, 0x33, 0xf3, 0x95, 0x7c, 0xce, 0xc7, 0x28, 0xbf, 0x67, 0xbd, 0xb2, - 0x96, 0x1f, 0x88, 0x88, 0xf5, 0xc4, 0xc9, 0xfc, 0xa0, 0xdf, 0x45, 0x65, 0xf9, 0xca, 0x52, 0x7e, - 0x08, 0x8d, 0xc0, 0x20, 0xeb, 0x42, 0x08, 0x31, 0xdc, 0x02, 0x3a, 0x73, 0x2a, 0x9f, 0x0f, 0x04, - 0x61, 0x5c, 0x46, 0x22, 0x80, 0x33, 0xa7, 0xf2, 0x48, 0x9e, 0x85, 0x34, 0xf5, 0x2e, 0x84, 0x60, - 0x68, 0x71, 0xa6, 0x5c, 0x59, 0x54, 0x57, 0x56, 0xd7, 0x17, 0x56, 0x96, 0x67, 0x16, 0xf3, 0x52, - 0x00, 0x53, 0x2a, 0x4f, 0x5f, 0x59, 0x50, 0x2a, 0x73, 0xf9, 0x44, 0x18, 0xb6, 0x5a, 0x99, 0x59, - 0xaf, 0xcc, 0xe5, 0x93, 0xb2, 0x0e, 0x63, 0x9d, 0xf2, 0x64, 0xc7, 0xc8, 0x08, 0x0d, 0x71, 0xa2, - 0xcb, 0x10, 0x53, 0x5e, 0x6d, 0x43, 0xfc, 0xed, 0x04, 0x8c, 0x76, 0x98, 0x2b, 0x3a, 0x76, 0xf2, - 0x14, 0xa4, 0x99, 0x8b, 0xb2, 0xd9, 0xf3, 0xa1, 0x8e, 0x93, 0x0e, 0x75, 0xd8, 0xb6, 0x19, 0x94, - 0xd2, 0x85, 0x2b, 0x88, 0x64, 0x97, 0x0a, 0x82, 0xb0, 0x68, 0xcb, 0xe9, 0x3f, 0xd2, 0x96, 0xd3, - 0xd9, 0xb4, 0x77, 0xa6, 0x97, 0x69, 0x8f, 0xc2, 0xf6, 0x96, 0xdb, 0xd3, 0x1d, 0x72, 0xfb, 0x79, - 0x18, 0x69, 0x63, 0xd4, 0x73, 0x8e, 0xfd, 0x90, 0x04, 0x85, 0x6e, 0xc6, 0x89, 0xc9, 0x74, 0x89, - 0x48, 0xa6, 0x3b, 0xdf, 0x6a, 0xc1, 0x7b, 0xbb, 0x0f, 0x42, 0xdb, 0x58, 0x7f, 0x49, 0x82, 0xf1, - 0xce, 0x95, 0x62, 0x47, 0x19, 0xde, 0x05, 0x7d, 0x0d, 0xec, 0x6d, 0x59, 0xa2, 0x5a, 0x7a, 0xa0, - 0xc3, 0x1c, 0x4c, 0x1e, 0xb7, 0x0e, 0x36, 0xa7, 0x0a, 0x4f, 0xe2, 0xc9, 0x6e, 0xe5, 0x1e, 0x93, - 0xa6, 0x4d, 0xd2, 0x8f, 0x25, 0xe0, 0x60, 0x47, 0xe6, 0x1d, 0x05, 0x3d, 0x0a, 0x60, 0x98, 0x76, - 0xd3, 0x63, 0x15, 0x11, 0x4b, 0xb0, 0x59, 0x0a, 0xa1, 0xc9, 0x8b, 0x24, 0xcf, 0xa6, 0xe7, 0x3f, - 0x4f, 0xd2, 0xe7, 0xc0, 0x40, 0x14, 0xe1, 0x6c, 0x20, 0x68, 0x8a, 0x0a, 0x3a, 0xd1, 0x45, 0xd3, - 0x36, 0xc7, 0x7c, 0x0c, 0xf2, 0x7a, 0xdd, 0xc0, 0xa6, 0xa7, 0xba, 0x9e, 0x83, 0xb5, 0x86, 0x61, - 0xd6, 0xe8, 0x0c, 0x92, 0x29, 0xa5, 0x37, 0xb5, 0xba, 0x8b, 0x95, 0x61, 0xf6, 0x78, 0x4d, 0x3c, - 0x25, 0x14, 0xd4, 0x81, 0x9c, 0x10, 0x45, 0x5f, 0x84, 0x82, 0x3d, 0xf6, 0x29, 0xe4, 0x9f, 0xca, - 0x42, 0x2e, 0x54, 0x57, 0xa3, 0x7b, 0x61, 0xe0, 0x39, 0xed, 0xba, 0xa6, 0x8a, 0xb5, 0x12, 0xb3, - 0x44, 0x8e, 0xc0, 0x56, 0xf9, 0x7a, 0xe9, 0x31, 0x18, 0xa3, 0x28, 0x56, 0xd3, 0xc3, 0x8e, 0xaa, - 0xd7, 0x35, 0xd7, 0xa5, 0x46, 0xcb, 0x50, 0x54, 0x44, 0x9e, 0xad, 0x90, 0x47, 0xb3, 0xe2, 0x09, - 0x3a, 0x0d, 0xa3, 0x94, 0xa2, 0xd1, 0xac, 0x7b, 0x86, 0x5d, 0xc7, 0x2a, 0x59, 0xbd, 0xb9, 0x74, - 0x26, 0xf1, 0x25, 0x1b, 0x21, 0x18, 0x4b, 0x1c, 0x81, 0x48, 0xe4, 0xa2, 0x39, 0x38, 0x4a, 0xc9, - 0x6a, 0xd8, 0xc4, 0x8e, 0xe6, 0x61, 0x15, 0x3f, 0xdf, 0xd4, 0xea, 0xae, 0xaa, 0x99, 0x55, 0x75, - 0x4b, 0x73, 0xb7, 0x0a, 0x63, 0x84, 0x41, 0x39, 0x51, 0x90, 0x94, 0x43, 0x04, 0x71, 0x9e, 0xe3, - 0x55, 0x28, 0xda, 0x8c, 0x59, 0xbd, 0xa8, 0xb9, 0x5b, 0xa8, 0x04, 0xe3, 0x94, 0x8b, 0xeb, 0x39, - 0x86, 0x59, 0x53, 0xf5, 0x2d, 0xac, 0x5f, 0x53, 0x9b, 0xde, 0xe6, 0xd9, 0xc2, 0xe1, 0x70, 0xff, - 0x54, 0xc2, 0x35, 0x8a, 0x33, 0x4b, 0x50, 0xae, 0x78, 0x9b, 0x67, 0xd1, 0x1a, 0x0c, 0x90, 0xc1, - 0x68, 0x18, 0x37, 0xb1, 0xba, 0x69, 0x39, 0x74, 0x6a, 0x1c, 0xea, 0x90, 0x9a, 0x42, 0x16, 0x9c, - 0x5a, 0xe1, 0x04, 0x4b, 0x56, 0x15, 0x97, 0xd2, 0x6b, 0xab, 0x95, 0xca, 0x9c, 0x92, 0x13, 0x5c, - 0x2e, 0x58, 0x0e, 0x71, 0xa8, 0x9a, 0xe5, 0x1b, 0x38, 0xc7, 0x1c, 0xaa, 0x66, 0x09, 0xf3, 0x9e, - 0x86, 0x51, 0x5d, 0x67, 0x3a, 0x1b, 0xba, 0xca, 0xd7, 0x58, 0x6e, 0x21, 0x1f, 0x31, 0x96, 0xae, - 0xcf, 0x33, 0x04, 0xee, 0xe3, 0x2e, 0x3a, 0x07, 0x07, 0x03, 0x63, 0x85, 0x09, 0x47, 0xda, 0xb4, - 0x6c, 0x25, 0x3d, 0x0d, 0xa3, 0xf6, 0x4e, 0x3b, 0x21, 0x8a, 0xf4, 0x68, 0xef, 0xb4, 0x92, 0x3d, - 0x09, 0x63, 0xf6, 0x96, 0xdd, 0x4e, 0x77, 0x22, 0x4c, 0x87, 0xec, 0x2d, 0xbb, 0x95, 0xf0, 0x1d, - 0x74, 0xc1, 0xed, 0x60, 0x5d, 0xf3, 0x70, 0xb5, 0x70, 0x4f, 0x18, 0x3d, 0xf4, 0x00, 0x4d, 0x43, - 0x5e, 0xd7, 0x55, 0x6c, 0x6a, 0x1b, 0x75, 0xac, 0x6a, 0x0e, 0x36, 0x35, 0xb7, 0x30, 0x19, 0x46, - 0x1e, 0xd2, 0xf5, 0x0a, 0x7d, 0x3a, 0x43, 0x1f, 0xa2, 0x13, 0x30, 0x62, 0x6d, 0x3c, 0xa7, 0x33, - 0x97, 0x54, 0x6d, 0x07, 0x6f, 0x1a, 0xdb, 0x85, 0xfb, 0xa9, 0x7d, 0x87, 0xc9, 0x03, 0xea, 0x90, - 0xab, 0x14, 0x8c, 0x1e, 0x82, 0xbc, 0xee, 0x6e, 0x69, 0x8e, 0x4d, 0x73, 0xb2, 0x6b, 0x6b, 0x3a, - 0x2e, 0xbc, 0x83, 0xa1, 0x32, 0xf8, 0xb2, 0x00, 0x93, 0x90, 0x70, 0x6f, 0x18, 0x9b, 0x9e, 0xe0, - 0xf8, 0x20, 0x0b, 0x09, 0x0a, 0xe3, 0xdc, 0x8e, 0x43, 0x9e, 0x98, 0x22, 0xd2, 0xf1, 0x71, 0x8a, - 0x36, 0x64, 0x6f, 0xd9, 0xe1, 0x7e, 0xef, 0x83, 0x41, 0x82, 0x19, 0x74, 0xfa, 0x10, 0x2b, 0xc8, - 0xec, 0xad, 0x50, 0x8f, 0xa7, 0x60, 0x9c, 0x20, 0x35, 0xb0, 0xa7, 0x55, 0x35, 0x4f, 0x0b, 0x61, - 0x3f, 0x42, 0xb1, 0x89, 0xdd, 0x97, 0xf8, 0xc3, 0x88, 0x9c, 0x4e, 0x73, 0x63, 0xc7, 0xf7, 0xac, - 0x47, 0x99, 0x9c, 0x04, 0x26, 0x7c, 0xeb, 0xae, 0x15, 0xdd, 0x72, 0x09, 0x06, 0xc2, 0x8e, 0x8f, - 0xb2, 0xc0, 0x5c, 0x3f, 0x2f, 0x91, 0x2a, 0x68, 0x76, 0x65, 0x8e, 0xd4, 0x2f, 0xef, 0xad, 0xe4, - 0x13, 0xa4, 0x8e, 0x5a, 0x5c, 0x58, 0xaf, 0xa8, 0xca, 0x95, 0xe5, 0xf5, 0x85, 0xa5, 0x4a, 0x3e, - 0x19, 0x2a, 0xd8, 0x2f, 0xa5, 0x32, 0x0f, 0xe4, 0x1f, 0x94, 0x5f, 0x4e, 0xc0, 0x50, 0x74, 0x05, - 0x86, 0x7e, 0x08, 0xee, 0x11, 0xdb, 0x25, 0x2e, 0xf6, 0xd4, 0x1b, 0x86, 0x43, 0x23, 0xb2, 0xa1, - 0xb1, 0xd9, 0xd1, 0xf7, 0x89, 0x31, 0x8e, 0xb5, 0x86, 0xbd, 0x67, 0x0c, 0x87, 0xc4, 0x5b, 0x43, - 0xf3, 0xd0, 0x22, 0x4c, 0x9a, 0x96, 0xea, 0x7a, 0x9a, 0x59, 0xd5, 0x9c, 0xaa, 0x1a, 0x6c, 0x54, - 0xa9, 0x9a, 0xae, 0x63, 0xd7, 0xb5, 0xd8, 0x4c, 0xe8, 0x73, 0x39, 0x62, 0x5a, 0x6b, 0x1c, 0x39, - 0x98, 0x22, 0x66, 0x38, 0x6a, 0x8b, 0xff, 0x26, 0xbb, 0xf9, 0xef, 0x61, 0xc8, 0x36, 0x34, 0x5b, - 0xc5, 0xa6, 0xe7, 0xec, 0xd0, 0xba, 0x3b, 0xa3, 0x64, 0x1a, 0x9a, 0x5d, 0x21, 0xed, 0x37, 0x65, - 0xf9, 0x73, 0x29, 0x95, 0xc9, 0xe4, 0xb3, 0x97, 0x52, 0x99, 0x6c, 0x1e, 0xe4, 0x57, 0x92, 0x30, - 0x10, 0xae, 0xc3, 0xc9, 0xb2, 0x46, 0xa7, 0x53, 0x96, 0x44, 0x93, 0xda, 0x7d, 0xbb, 0x56, 0xed, - 0x53, 0xb3, 0x64, 0x2e, 0x2b, 0xf5, 0xb1, 0xea, 0x58, 0x61, 0x94, 0xa4, 0x8e, 0x20, 0xce, 0x86, - 0x59, 0x35, 0x92, 0x51, 0x78, 0x0b, 0xcd, 0x43, 0xdf, 0x73, 0x2e, 0xe5, 0xdd, 0x47, 0x79, 0xdf, - 0xbf, 0x3b, 0xef, 0x4b, 0x6b, 0x94, 0x79, 0xf6, 0xd2, 0x9a, 0xba, 0xbc, 0xa2, 0x2c, 0xcd, 0x2c, - 0x2a, 0x9c, 0x1c, 0x1d, 0x82, 0x54, 0x5d, 0xbb, 0xb9, 0x13, 0x9d, 0xf5, 0x28, 0xa8, 0xd7, 0x41, - 0x38, 0x04, 0xa9, 0x1b, 0x58, 0xbb, 0x16, 0x9d, 0x6b, 0x28, 0xe8, 0x2e, 0x06, 0xc3, 0x34, 0xa4, - 0xa9, 0xbd, 0x10, 0x00, 0xb7, 0x58, 0xfe, 0x00, 0xca, 0x40, 0x6a, 0x76, 0x45, 0x21, 0x01, 0x91, - 0x87, 0x01, 0x06, 0x55, 0x57, 0x17, 0x2a, 0xb3, 0x95, 0x7c, 0x42, 0x3e, 0x0d, 0x7d, 0xcc, 0x08, - 0x24, 0x58, 0x7c, 0x33, 0xe4, 0x0f, 0xf0, 0x26, 0xe7, 0x21, 0x89, 0xa7, 0x57, 0x96, 0xca, 0x15, - 0x25, 0x9f, 0x88, 0x0e, 0x75, 0x2a, 0x9f, 0x96, 0x5d, 0x18, 0x08, 0x17, 0xe2, 0x6f, 0xce, 0x22, - 0xfb, 0xab, 0x12, 0xe4, 0x42, 0x85, 0x35, 0xa9, 0x88, 0xb4, 0x7a, 0xdd, 0xba, 0xa1, 0x6a, 0x75, - 0x43, 0x73, 0xb9, 0x6b, 0x00, 0x05, 0xcd, 0x10, 0x48, 0xaf, 0x43, 0xf7, 0x26, 0x85, 0x48, 0x3a, - 0xdf, 0x27, 0x7f, 0x56, 0x82, 0x7c, 0x6b, 0x65, 0xdb, 0x22, 0xa6, 0xf4, 0xfd, 0x14, 0x53, 0xfe, - 0x8c, 0x04, 0x43, 0xd1, 0x72, 0xb6, 0x45, 0xbc, 0x7b, 0xbf, 0xaf, 0xe2, 0xfd, 0x61, 0x02, 0x06, - 0x23, 0x45, 0x6c, 0xaf, 0xd2, 0x3d, 0x0f, 0x23, 0x46, 0x15, 0x37, 0x6c, 0xcb, 0xc3, 0xa6, 0xbe, - 0xa3, 0xd6, 0xf1, 0x75, 0x5c, 0x2f, 0xc8, 0x34, 0x69, 0x4c, 0xef, 0x5e, 0x26, 0x4f, 0x2d, 0x04, - 0x74, 0x8b, 0x84, 0xac, 0x34, 0xba, 0x30, 0x57, 0x59, 0x5a, 0x5d, 0x59, 0xaf, 0x2c, 0xcf, 0xbe, - 0x47, 0xbd, 0xb2, 0x7c, 0x79, 0x79, 0xe5, 0x99, 0x65, 0x25, 0x6f, 0xb4, 0xa0, 0xdd, 0xc5, 0xb0, - 0x5f, 0x85, 0x7c, 0xab, 0x50, 0xe8, 0x1e, 0xe8, 0x24, 0x56, 0xfe, 0x00, 0x1a, 0x85, 0xe1, 0xe5, - 0x15, 0x75, 0x6d, 0x61, 0xae, 0xa2, 0x56, 0x2e, 0x5c, 0xa8, 0xcc, 0xae, 0xaf, 0xb1, 0x8d, 0x0f, - 0x1f, 0x7b, 0x3d, 0x12, 0xe0, 0xf2, 0xa7, 0x93, 0x30, 0xda, 0x41, 0x12, 0x34, 0xc3, 0x97, 0x2c, - 0x6c, 0x15, 0xf5, 0x68, 0x2f, 0xd2, 0x4f, 0x91, 0x9a, 0x61, 0x55, 0x73, 0x3c, 0xbe, 0xc2, 0x79, - 0x08, 0x88, 0x95, 0x4c, 0xcf, 0xd8, 0x34, 0xb0, 0xc3, 0xf7, 0x89, 0xd8, 0x3a, 0x66, 0x38, 0x80, - 0xb3, 0xad, 0xa2, 0x47, 0x00, 0xd9, 0x96, 0x6b, 0x78, 0xc6, 0x75, 0xac, 0x1a, 0xa6, 0xd8, 0x54, - 0x22, 0xeb, 0x9a, 0x94, 0x92, 0x17, 0x4f, 0x16, 0x4c, 0xcf, 0xc7, 0x36, 0x71, 0x4d, 0x6b, 0xc1, - 0x26, 0xc9, 0x3c, 0xa9, 0xe4, 0xc5, 0x13, 0x1f, 0xfb, 0x5e, 0x18, 0xa8, 0x5a, 0x4d, 0x52, 0xec, - 0x31, 0x3c, 0x32, 0x77, 0x48, 0x4a, 0x8e, 0xc1, 0x7c, 0x14, 0x5e, 0xc6, 0x07, 0xbb, 0x59, 0x03, - 0x4a, 0x8e, 0xc1, 0x18, 0xca, 0x83, 0x30, 0xac, 0xd5, 0x6a, 0x0e, 0x61, 0x2e, 0x18, 0xb1, 0x85, - 0xc9, 0x90, 0x0f, 0xa6, 0x88, 0xc5, 0x4b, 0x90, 0x11, 0x76, 0x20, 0x53, 0x35, 0xb1, 0x84, 0x6a, - 0xb3, 0xd5, 0x76, 0xe2, 0x78, 0x56, 0xc9, 0x98, 0xe2, 0xe1, 0xbd, 0x30, 0x60, 0xb8, 0x6a, 0xb0, - 0x39, 0x9f, 0x38, 0x96, 0x38, 0x9e, 0x51, 0x72, 0x86, 0xeb, 0x6f, 0x6c, 0xca, 0x5f, 0x4a, 0xc0, - 0x50, 0xf4, 0x70, 0x01, 0xcd, 0x41, 0xa6, 0x6e, 0xe9, 0x1a, 0x75, 0x2d, 0x76, 0xb2, 0x75, 0x3c, - 0xe6, 0x3c, 0x62, 0x6a, 0x91, 0xe3, 0x2b, 0x3e, 0x65, 0xf1, 0x5f, 0x4b, 0x90, 0x11, 0x60, 0x34, - 0x0e, 0x29, 0x5b, 0xf3, 0xb6, 0x28, 0xbb, 0x74, 0x39, 0x91, 0x97, 0x14, 0xda, 0x26, 0x70, 0xd7, - 0xd6, 0x4c, 0xea, 0x02, 0x1c, 0x4e, 0xda, 0x64, 0x5c, 0xeb, 0x58, 0xab, 0xd2, 0x55, 0x8f, 0xd5, - 0x68, 0x60, 0xd3, 0x73, 0xc5, 0xb8, 0x72, 0xf8, 0x2c, 0x07, 0xa3, 0x87, 0x61, 0xc4, 0x73, 0x34, - 0xa3, 0x1e, 0xc1, 0x4d, 0x51, 0xdc, 0xbc, 0x78, 0xe0, 0x23, 0x97, 0xe0, 0x90, 0xe0, 0x5b, 0xc5, - 0x9e, 0xa6, 0x6f, 0xe1, 0x6a, 0x40, 0xd4, 0x47, 0x77, 0x37, 0xee, 0xe1, 0x08, 0x73, 0xfc, 0xb9, - 0xa0, 0x95, 0x5f, 0x96, 0x60, 0x44, 0xac, 0xd3, 0xaa, 0xbe, 0xb1, 0x96, 0x00, 0x34, 0xd3, 0xb4, - 0xbc, 0xb0, 0xb9, 0xda, 0x5d, 0xb9, 0x8d, 0x6e, 0x6a, 0xc6, 0x27, 0x52, 0x42, 0x0c, 0x8a, 0x0d, - 0x80, 0xe0, 0x49, 0x57, 0xb3, 0x4d, 0x42, 0x8e, 0x9f, 0x1c, 0xd1, 0xe3, 0x47, 0xb6, 0xb2, 0x07, - 0x06, 0x22, 0x0b, 0x3a, 0x34, 0x06, 0xe9, 0x0d, 0x5c, 0x33, 0x4c, 0xbe, 0x1f, 0xcc, 0x1a, 0x62, - 0xff, 0x25, 0xe5, 0xef, 0xbf, 0x94, 0x3f, 0x2e, 0xc1, 0xa8, 0x6e, 0x35, 0x5a, 0xe5, 0x2d, 0xe7, - 0x5b, 0xb6, 0x17, 0xdc, 0x8b, 0xd2, 0x7b, 0xdf, 0x55, 0x33, 0xbc, 0xad, 0xe6, 0xc6, 0x94, 0x6e, - 0x35, 0xa6, 0x6b, 0x56, 0x5d, 0x33, 0x6b, 0xc1, 0xf9, 0x29, 0xfd, 0xa1, 0x3f, 0x5a, 0xc3, 0xe6, - 0xa3, 0x35, 0x2b, 0x74, 0x9a, 0x7a, 0x3e, 0xf8, 0xf9, 0x7f, 0x24, 0xe9, 0x0b, 0x89, 0xe4, 0xfc, - 0x6a, 0xf9, 0xcb, 0x89, 0xe2, 0x3c, 0xeb, 0x6e, 0x55, 0x98, 0x47, 0xc1, 0x9b, 0x75, 0xac, 0x13, - 0x95, 0xe1, 0xbb, 0x0f, 0xc3, 0x58, 0xcd, 0xaa, 0x59, 0x94, 0xe3, 0x34, 0xf9, 0xc5, 0x4f, 0x64, - 0xb3, 0x3e, 0xb4, 0x18, 0x7b, 0x7c, 0x5b, 0x5a, 0x86, 0x51, 0x8e, 0xac, 0xd2, 0x23, 0x21, 0xb6, - 0xb0, 0x41, 0xbb, 0x6e, 0xab, 0x15, 0x7e, 0xf9, 0x3b, 0x74, 0x42, 0x57, 0x46, 0x38, 0x29, 0x79, - 0xc6, 0xd6, 0x3e, 0x25, 0x05, 0x0e, 0x46, 0xf8, 0xb1, 0xb0, 0xc5, 0x4e, 0x0c, 0xc7, 0xdf, 0xe4, - 0x1c, 0x47, 0x43, 0x1c, 0xd7, 0x38, 0x69, 0x69, 0x16, 0x06, 0xf7, 0xc2, 0xeb, 0xb7, 0x38, 0xaf, - 0x01, 0x1c, 0x66, 0x32, 0x0f, 0xc3, 0x94, 0x89, 0xde, 0x74, 0x3d, 0xab, 0x41, 0x73, 0xe2, 0xee, - 0x6c, 0x7e, 0xfb, 0x3b, 0x2c, 0x8e, 0x86, 0x08, 0xd9, 0xac, 0x4f, 0x55, 0x2a, 0x01, 0x3d, 0x05, - 0xab, 0x62, 0xbd, 0x1e, 0xc3, 0xe1, 0xeb, 0x5c, 0x10, 0x1f, 0xbf, 0x74, 0x15, 0xc6, 0xc8, 0x6f, - 0x9a, 0xb2, 0xc2, 0x92, 0xc4, 0xef, 0xc1, 0x15, 0x5e, 0xfe, 0x10, 0x0b, 0xd5, 0x51, 0x9f, 0x41, - 0x48, 0xa6, 0xd0, 0x28, 0xd6, 0xb0, 0xe7, 0x61, 0xc7, 0x55, 0xb5, 0x7a, 0x27, 0xf1, 0x42, 0x9b, - 0x18, 0x85, 0x4f, 0x7d, 0x2f, 0x3a, 0x8a, 0xf3, 0x8c, 0x72, 0xa6, 0x5e, 0x2f, 0x5d, 0x81, 0x7b, - 0x3a, 0x78, 0x45, 0x0f, 0x3c, 0x3f, 0xcd, 0x79, 0x8e, 0xb5, 0x79, 0x06, 0x61, 0xbb, 0x0a, 0x02, - 0xee, 0x8f, 0x65, 0x0f, 0x3c, 0x7f, 0x8e, 0xf3, 0x44, 0x9c, 0x56, 0x0c, 0x29, 0xe1, 0x78, 0x09, - 0x46, 0xae, 0x63, 0x67, 0xc3, 0x72, 0xf9, 0xc6, 0x51, 0x0f, 0xec, 0x3e, 0xc3, 0xd9, 0x0d, 0x73, - 0x42, 0xba, 0x93, 0x44, 0x78, 0x9d, 0x83, 0xcc, 0xa6, 0xa6, 0xe3, 0x1e, 0x58, 0xbc, 0xc4, 0x59, - 0xf4, 0x13, 0x7c, 0x42, 0x3a, 0x03, 0x03, 0x35, 0x8b, 0xcf, 0x5a, 0xf1, 0xe4, 0x9f, 0xe5, 0xe4, - 0x39, 0x41, 0xc3, 0x59, 0xd8, 0x96, 0xdd, 0xac, 0x93, 0x29, 0x2d, 0x9e, 0xc5, 0x5f, 0x13, 0x2c, - 0x04, 0x0d, 0x67, 0xb1, 0x07, 0xb3, 0x7e, 0x4e, 0xb0, 0x70, 0x43, 0xf6, 0x7c, 0x0a, 0x72, 0x96, - 0x59, 0xdf, 0xb1, 0xcc, 0x5e, 0x84, 0xf8, 0x3c, 0xe7, 0x00, 0x9c, 0x84, 0x30, 0x38, 0x0f, 0xd9, - 0x5e, 0x07, 0xe2, 0x6f, 0x7c, 0x4f, 0x84, 0x87, 0x18, 0x81, 0x79, 0x18, 0x16, 0x09, 0xca, 0xb0, - 0xcc, 0x1e, 0x58, 0xfc, 0x4d, 0xce, 0x62, 0x28, 0x44, 0xc6, 0xd5, 0xf0, 0xb0, 0xeb, 0xd5, 0x70, - 0x2f, 0x4c, 0xbe, 0x24, 0xd4, 0xe0, 0x24, 0xdc, 0x94, 0x1b, 0xd8, 0xd4, 0xb7, 0x7a, 0xe3, 0xf0, - 0xf3, 0xc2, 0x94, 0x82, 0x86, 0xb0, 0x98, 0x85, 0xc1, 0x86, 0xe6, 0xb8, 0x5b, 0x5a, 0xbd, 0xa7, - 0xe1, 0xf8, 0x5b, 0x9c, 0xc7, 0x80, 0x4f, 0xc4, 0x2d, 0xd2, 0x34, 0xf7, 0xc2, 0xe6, 0xcb, 0xc2, - 0x22, 0x21, 0x32, 0x1e, 0x7a, 0xae, 0x47, 0x77, 0xd9, 0xf6, 0xc2, 0xed, 0x17, 0x44, 0xe8, 0x31, - 0xda, 0xa5, 0x30, 0xc7, 0xf3, 0x90, 0x75, 0x8d, 0x9b, 0x3d, 0xb1, 0xf9, 0xdb, 0x62, 0xa4, 0x29, - 0x01, 0x21, 0x7e, 0x0f, 0x1c, 0xea, 0x38, 0x4d, 0xf4, 0xc0, 0xec, 0xef, 0x70, 0x66, 0xe3, 0x1d, - 0xa6, 0x0a, 0x9e, 0x12, 0xf6, 0xca, 0xf2, 0xef, 0x8a, 0x94, 0x80, 0x5b, 0x78, 0xad, 0x92, 0x75, - 0x84, 0xab, 0x6d, 0xee, 0xcd, 0x6a, 0xbf, 0x28, 0xac, 0xc6, 0x68, 0x23, 0x56, 0x5b, 0x87, 0x71, - 0xce, 0x71, 0x6f, 0xe3, 0xfa, 0x4b, 0x22, 0xb1, 0x32, 0xea, 0x2b, 0xd1, 0xd1, 0x7d, 0x1f, 0x14, - 0x7d, 0x73, 0x8a, 0x82, 0xd5, 0x55, 0x1b, 0x9a, 0xdd, 0x03, 0xe7, 0x5f, 0xe6, 0x9c, 0x45, 0xc6, - 0xf7, 0x2b, 0x5e, 0x77, 0x49, 0xb3, 0x09, 0xf3, 0x67, 0xa1, 0x20, 0x98, 0x37, 0x4d, 0x07, 0xeb, - 0x56, 0xcd, 0x34, 0x6e, 0xe2, 0x6a, 0x0f, 0xac, 0x7f, 0xa5, 0x65, 0xa8, 0xae, 0x84, 0xc8, 0x09, - 0xe7, 0x05, 0xc8, 0xfb, 0xb5, 0x8a, 0x6a, 0x34, 0x6c, 0xcb, 0xf1, 0x62, 0x38, 0x7e, 0x45, 0x8c, - 0x94, 0x4f, 0xb7, 0x40, 0xc9, 0x4a, 0x15, 0x18, 0xa2, 0xcd, 0x5e, 0x5d, 0xf2, 0x57, 0x39, 0xa3, - 0xc1, 0x80, 0x8a, 0x27, 0x0e, 0xdd, 0x6a, 0xd8, 0x9a, 0xd3, 0x4b, 0xfe, 0xfb, 0x7b, 0x22, 0x71, - 0x70, 0x12, 0x9e, 0x38, 0xbc, 0x1d, 0x1b, 0x93, 0xd9, 0xbe, 0x07, 0x0e, 0xbf, 0x26, 0x12, 0x87, - 0xa0, 0xe1, 0x2c, 0x44, 0xc1, 0xd0, 0x03, 0x8b, 0xbf, 0x2f, 0x58, 0x08, 0x1a, 0xc2, 0xe2, 0xe9, - 0x60, 0xa2, 0x75, 0x70, 0xcd, 0x70, 0x3d, 0x87, 0x95, 0xc9, 0xbb, 0xb3, 0xfa, 0x07, 0xdf, 0x8b, - 0x16, 0x61, 0x4a, 0x88, 0x94, 0x64, 0x22, 0xbe, 0xed, 0x4a, 0x57, 0x51, 0xf1, 0x82, 0xfd, 0xba, - 0xc8, 0x44, 0x21, 0x32, 0x22, 0x5b, 0xa8, 0x42, 0x24, 0x66, 0xd7, 0xc9, 0xda, 0xa1, 0x07, 0x76, - 0xff, 0xb0, 0x45, 0xb8, 0x35, 0x41, 0x4b, 0x78, 0x86, 0xea, 0x9f, 0xa6, 0x79, 0x0d, 0xef, 0xf4, - 0xe4, 0x9d, 0xff, 0xa8, 0xa5, 0xfe, 0xb9, 0xc2, 0x28, 0x59, 0x0e, 0x19, 0x6e, 0xa9, 0xa7, 0x50, - 0xdc, 0xfd, 0xa1, 0xc2, 0x8f, 0xbe, 0xc6, 0xf5, 0x8d, 0x96, 0x53, 0xa5, 0x45, 0xe2, 0xe4, 0xd1, - 0xa2, 0x27, 0x9e, 0xd9, 0x87, 0x5e, 0xf3, 0xfd, 0x3c, 0x52, 0xf3, 0x94, 0x2e, 0xc0, 0x60, 0xa4, - 0xe0, 0x89, 0x67, 0xf5, 0x61, 0xce, 0x6a, 0x20, 0x5c, 0xef, 0x94, 0x4e, 0x43, 0x8a, 0x14, 0x2f, - 0xf1, 0xe4, 0x1f, 0xe1, 0xe4, 0x14, 0xbd, 0xf4, 0x4e, 0xc8, 0x88, 0xa2, 0x25, 0x9e, 0xf4, 0xa3, - 0x9c, 0xd4, 0x27, 0x21, 0xe4, 0xa2, 0x60, 0x89, 0x27, 0xff, 0x8b, 0x82, 0x5c, 0x90, 0x10, 0xf2, - 0xde, 0x4d, 0xf8, 0xd5, 0xbf, 0x94, 0xe2, 0x93, 0x8e, 0xb0, 0xdd, 0x79, 0xe8, 0xe7, 0x95, 0x4a, - 0x3c, 0xf5, 0xc7, 0x78, 0xe7, 0x82, 0xa2, 0xf4, 0x24, 0xa4, 0x7b, 0x34, 0xf8, 0x4f, 0x70, 0x52, - 0x86, 0x5f, 0x9a, 0x85, 0x5c, 0xa8, 0x3a, 0x89, 0x27, 0xff, 0x2b, 0x9c, 0x3c, 0x4c, 0x45, 0x44, - 0xe7, 0xd5, 0x49, 0x3c, 0x83, 0x8f, 0x0b, 0xd1, 0x39, 0x05, 0x31, 0x9b, 0x28, 0x4c, 0xe2, 0xa9, - 0x3f, 0x21, 0xac, 0x2e, 0x48, 0x4a, 0x4f, 0x41, 0xd6, 0x9f, 0x6c, 0xe2, 0xe9, 0x7f, 0x92, 0xd3, - 0x07, 0x34, 0xc4, 0x02, 0xa1, 0xc9, 0x2e, 0x9e, 0xc5, 0x4f, 0x09, 0x0b, 0x84, 0xa8, 0x48, 0x18, - 0xb5, 0x16, 0x30, 0xf1, 0x9c, 0x7e, 0x5a, 0x84, 0x51, 0x4b, 0xfd, 0x42, 0x46, 0x93, 0xe6, 0xfc, - 0x78, 0x16, 0x3f, 0x23, 0x46, 0x93, 0xe2, 0x13, 0x31, 0x5a, 0x2b, 0x82, 0x78, 0x1e, 0x7f, 0x55, - 0x88, 0xd1, 0x52, 0x10, 0x94, 0x56, 0x01, 0xb5, 0x57, 0x03, 0xf1, 0xfc, 0x3e, 0xc9, 0xf9, 0x8d, - 0xb4, 0x15, 0x03, 0xa5, 0x67, 0x60, 0xbc, 0x73, 0x25, 0x10, 0xcf, 0xf5, 0x53, 0xaf, 0xb5, 0xac, - 0xdd, 0xc2, 0x85, 0x40, 0x69, 0x3d, 0x98, 0x52, 0xc2, 0x55, 0x40, 0x3c, 0xdb, 0x4f, 0xbf, 0x16, - 0x4d, 0xdc, 0xe1, 0x22, 0xa0, 0x34, 0x03, 0x10, 0x4c, 0xc0, 0xf1, 0xbc, 0x3e, 0xc3, 0x79, 0x85, - 0x88, 0x48, 0x68, 0xf0, 0xf9, 0x37, 0x9e, 0xfe, 0x25, 0x11, 0x1a, 0x9c, 0x82, 0x84, 0x86, 0x98, - 0x7a, 0xe3, 0xa9, 0x3f, 0x2b, 0x42, 0x43, 0x90, 0x10, 0xcf, 0x0e, 0xcd, 0x6e, 0xf1, 0x1c, 0x3e, - 0x2f, 0x3c, 0x3b, 0x44, 0x55, 0x5a, 0x86, 0x91, 0xb6, 0x09, 0x31, 0x9e, 0xd5, 0x17, 0x38, 0xab, - 0x7c, 0xeb, 0x7c, 0x18, 0x9e, 0xbc, 0xf8, 0x64, 0x18, 0xcf, 0xed, 0x8b, 0x2d, 0x93, 0x17, 0x9f, - 0x0b, 0x4b, 0xe7, 0x21, 0x63, 0x36, 0xeb, 0x75, 0x12, 0x3c, 0x68, 0xf7, 0x3b, 0x7f, 0x85, 0x3f, - 0x7a, 0x9d, 0x5b, 0x47, 0x10, 0x94, 0x4e, 0x43, 0x1a, 0x37, 0x36, 0x70, 0x35, 0x8e, 0xf2, 0xbb, - 0xaf, 0x8b, 0x84, 0x49, 0xb0, 0x4b, 0x4f, 0x01, 0xb0, 0xad, 0x11, 0x7a, 0x3c, 0x18, 0x43, 0xfb, - 0x5f, 0x5f, 0xe7, 0xb7, 0x71, 0x02, 0x92, 0x80, 0x01, 0xbb, 0xdb, 0xb3, 0x3b, 0x83, 0xef, 0x45, - 0x19, 0xd0, 0x11, 0x39, 0x07, 0xfd, 0xcf, 0xb9, 0x96, 0xe9, 0x69, 0xb5, 0x38, 0xea, 0xff, 0xc6, - 0xa9, 0x05, 0x3e, 0x31, 0x58, 0xc3, 0x72, 0xb0, 0xa7, 0xd5, 0xdc, 0x38, 0xda, 0xff, 0xce, 0x69, - 0x7d, 0x02, 0x42, 0xac, 0x6b, 0xae, 0xd7, 0x8b, 0xde, 0x7f, 0x2c, 0x88, 0x05, 0x01, 0x11, 0x9a, - 0xfc, 0xbe, 0x86, 0x77, 0xe2, 0x68, 0xff, 0x44, 0x08, 0xcd, 0xf1, 0x4b, 0xef, 0x84, 0x2c, 0xf9, - 0xc9, 0xae, 0xd8, 0xc5, 0x10, 0xff, 0x0f, 0x4e, 0x1c, 0x50, 0x90, 0x9e, 0x5d, 0xaf, 0xea, 0x19, - 0xf1, 0xc6, 0xbe, 0xcd, 0x47, 0x5a, 0xe0, 0x97, 0x66, 0x20, 0xe7, 0x7a, 0xd5, 0x6a, 0x93, 0xd7, - 0xa7, 0x31, 0xe4, 0xff, 0xf3, 0x75, 0x7f, 0xcb, 0xc2, 0xa7, 0x21, 0xa3, 0x7d, 0xe3, 0x9a, 0x67, - 0x5b, 0xf4, 0x08, 0x24, 0x8e, 0xc3, 0x6b, 0x9c, 0x43, 0x88, 0xa4, 0x34, 0x0b, 0x03, 0x44, 0x17, - 0x07, 0xdb, 0x98, 0x9e, 0x57, 0xc5, 0xb0, 0xf8, 0x5f, 0xdc, 0x00, 0x11, 0xa2, 0xf2, 0x8f, 0x7c, - 0xfd, 0x95, 0x09, 0xe9, 0x1b, 0xaf, 0x4c, 0x48, 0x7f, 0xf8, 0xca, 0x84, 0xf4, 0x89, 0x6f, 0x4f, - 0x1c, 0xf8, 0xc6, 0xb7, 0x27, 0x0e, 0xfc, 0xde, 0xb7, 0x27, 0x0e, 0x74, 0xde, 0x36, 0x86, 0x79, - 0x6b, 0xde, 0x62, 0x1b, 0xc6, 0xef, 0x95, 0x23, 0xdb, 0xc5, 0x35, 0x2b, 0xd8, 0xad, 0xf5, 0x17, - 0x39, 0xf0, 0xe1, 0x24, 0x4c, 0xe8, 0x96, 0xdb, 0xb0, 0xdc, 0xe9, 0x0d, 0xcd, 0xc5, 0xd3, 0xd7, - 0x1f, 0xdf, 0xc0, 0x9e, 0xf6, 0xf8, 0xb4, 0x6e, 0x19, 0x26, 0xdf, 0xf6, 0x1d, 0x65, 0xcf, 0xa7, - 0xc8, 0xf3, 0x29, 0xfe, 0xbc, 0xd8, 0x71, 0x87, 0x58, 0x9e, 0x87, 0xd4, 0xac, 0x65, 0x98, 0x68, - 0x0c, 0xd2, 0x55, 0x6c, 0x5a, 0x0d, 0x7e, 0x03, 0x8c, 0x35, 0xd0, 0x7d, 0xd0, 0xa7, 0x35, 0xac, - 0xa6, 0xe9, 0xb1, 0xed, 0xf2, 0x72, 0xee, 0xeb, 0xb7, 0x26, 0x0f, 0xfc, 0xfe, 0xad, 0xc9, 0xe4, - 0x82, 0xe9, 0x29, 0xfc, 0x51, 0x29, 0xf5, 0xea, 0xe7, 0x26, 0x25, 0xf9, 0x12, 0xf4, 0xcf, 0x61, - 0x7d, 0x3f, 0xbc, 0xe6, 0xb0, 0xde, 0xc2, 0xeb, 0x21, 0xc8, 0x2c, 0x98, 0x1e, 0xbb, 0xa3, 0x77, - 0x14, 0x92, 0x86, 0xc9, 0x6e, 0x7d, 0xb4, 0xf4, 0x4f, 0xe0, 0x04, 0x75, 0x0e, 0xeb, 0x3e, 0x6a, - 0x15, 0xeb, 0xad, 0xa8, 0x84, 0x3d, 0x81, 0x97, 0xe7, 0x7e, 0xef, 0x3f, 0x4d, 0x1c, 0x78, 0xe1, - 0x95, 0x89, 0x03, 0xdd, 0xc6, 0x27, 0x62, 0x7e, 0x6e, 0x62, 0xf6, 0xe7, 0x51, 0xb7, 0x7a, 0x6d, - 0x9a, 0x84, 0x96, 0xbb, 0xd1, 0x47, 0xed, 0xf6, 0x04, 0x7c, 0x22, 0x01, 0x93, 0xad, 0x5b, 0xea, - 0xc4, 0x8f, 0x5d, 0x4f, 0x6b, 0xd8, 0xdd, 0x5e, 0x88, 0x3a, 0x0f, 0xd9, 0x75, 0x81, 0x83, 0x0a, - 0xd0, 0xef, 0x62, 0xdd, 0x32, 0xab, 0x2e, 0x15, 0x39, 0xa9, 0x88, 0x26, 0x31, 0xa0, 0xa9, 0x99, - 0x96, 0xcb, 0xef, 0x6b, 0xb2, 0x46, 0xf9, 0x67, 0xa5, 0xbd, 0x39, 0xd6, 0x90, 0xdf, 0x15, 0x35, - 0xcf, 0xaa, 0xf4, 0xde, 0x87, 0x77, 0x3b, 0x8d, 0xa0, 0xea, 0x05, 0x2a, 0x84, 0x8e, 0x1e, 0x26, - 0x5a, 0x8f, 0x1e, 0x9e, 0xc1, 0xf5, 0xfa, 0x65, 0xd3, 0xba, 0x61, 0xae, 0x47, 0x4c, 0xf2, 0xbb, - 0x12, 0x1c, 0xa3, 0x17, 0xd1, 0x9d, 0x86, 0x61, 0x7a, 0xd3, 0x75, 0x63, 0xc3, 0x9d, 0xde, 0x30, - 0x3c, 0x97, 0x59, 0x8e, 0xdb, 0x64, 0x2c, 0xc0, 0x98, 0x22, 0x18, 0x53, 0x04, 0x43, 0x3e, 0x05, - 0x99, 0xb2, 0xe1, 0xcd, 0x38, 0x8e, 0xb6, 0x83, 0x10, 0xa4, 0x08, 0x8c, 0x1b, 0x85, 0xfe, 0x26, - 0x16, 0xc1, 0x75, 0xdc, 0x70, 0xe9, 0xa1, 0x57, 0x4a, 0x61, 0x8d, 0xf2, 0x95, 0xae, 0x23, 0x79, - 0x3e, 0xa4, 0x69, 0x48, 0xa4, 0xd0, 0x4f, 0x16, 0x09, 0x9d, 0xc4, 0xf5, 0xf5, 0xf9, 0x72, 0x0a, - 0x8e, 0x86, 0x10, 0x74, 0x67, 0xc7, 0xf6, 0x68, 0x48, 0x5a, 0x9b, 0x5c, 0x99, 0x91, 0x90, 0x32, - 0xec, 0x71, 0x97, 0x30, 0xdb, 0x84, 0xf4, 0x2a, 0xa1, 0x23, 0x8a, 0x78, 0x96, 0xa7, 0xd5, 0xb9, - 0x76, 0xac, 0x41, 0xa0, 0xec, 0x32, 0x7e, 0x82, 0x41, 0x0d, 0x71, 0x0f, 0xbf, 0x8e, 0xb5, 0x4d, - 0x76, 0xf9, 0x31, 0x49, 0xcf, 0x3e, 0x33, 0x04, 0x40, 0xef, 0x39, 0x8e, 0x41, 0x5a, 0x6b, 0xb2, - 0x63, 0xbb, 0xe4, 0xf1, 0x01, 0x85, 0x35, 0xe4, 0xcb, 0xd0, 0xcf, 0x8f, 0x0a, 0x50, 0x1e, 0x92, - 0xd7, 0xf0, 0x0e, 0xed, 0x67, 0x40, 0x21, 0x3f, 0xd1, 0x14, 0xa4, 0xa9, 0xf0, 0xfc, 0x56, 0x77, - 0x61, 0xaa, 0x4d, 0xfa, 0x29, 0x2a, 0xa4, 0xc2, 0xd0, 0xe4, 0x4b, 0x90, 0x99, 0xb3, 0x1a, 0x86, - 0x69, 0x45, 0xb9, 0x65, 0x19, 0x37, 0x2a, 0xb3, 0xdd, 0xe4, 0xe1, 0xac, 0xb0, 0x06, 0x1a, 0x87, - 0x3e, 0x76, 0x19, 0x96, 0x1f, 0x3d, 0xf2, 0x96, 0x3c, 0x0b, 0xfd, 0x94, 0xf7, 0x8a, 0x4d, 0xc6, - 0xd7, 0xbf, 0x88, 0x94, 0xe5, 0x6f, 0x3c, 0x70, 0xf6, 0x89, 0x40, 0x58, 0x04, 0xa9, 0xaa, 0xe6, - 0x69, 0x5c, 0x6f, 0xfa, 0x5b, 0x7e, 0x17, 0x64, 0x38, 0x13, 0x17, 0x9d, 0x84, 0xa4, 0x65, 0xbb, - 0xfc, 0xf0, 0xb0, 0xd8, 0x4d, 0x95, 0x15, 0xbb, 0x9c, 0x22, 0x89, 0x40, 0x21, 0xc8, 0x65, 0xa5, - 0xab, 0xbf, 0x9c, 0xdd, 0xbb, 0xbf, 0xb0, 0x6e, 0x7c, 0x67, 0xf9, 0x7c, 0x02, 0x26, 0x42, 0x4f, - 0xaf, 0x63, 0x87, 0xd4, 0xcb, 0x11, 0xd7, 0x47, 0x21, 0x21, 0xf9, 0xf3, 0x2e, 0xee, 0xf2, 0x4e, - 0x48, 0xce, 0xd8, 0x36, 0x2a, 0x42, 0x86, 0x1d, 0x12, 0x5a, 0xcc, 0x5f, 0x52, 0x8a, 0xdf, 0x26, - 0xcf, 0x5c, 0x6b, 0xd3, 0xbb, 0xa1, 0x39, 0xfe, 0x6b, 0x20, 0xa2, 0x2d, 0x9f, 0x83, 0xec, 0xac, - 0x65, 0xba, 0xd8, 0x74, 0x9b, 0x34, 0x74, 0x36, 0xea, 0x96, 0x7e, 0x8d, 0x73, 0x60, 0x0d, 0x62, - 0x70, 0xcd, 0xb6, 0x29, 0x65, 0x4a, 0x21, 0x3f, 0x59, 0xea, 0x2d, 0xaf, 0x75, 0x35, 0xd1, 0xb9, - 0xbd, 0x9b, 0x88, 0x2b, 0xe9, 0xdb, 0xe8, 0x0f, 0x24, 0x38, 0xd2, 0x1e, 0x50, 0xd7, 0xf0, 0x8e, - 0xbb, 0xd7, 0x78, 0x3a, 0x0b, 0xd9, 0x55, 0xfa, 0x2e, 0xe6, 0x65, 0xbc, 0x83, 0x8a, 0xd0, 0x8f, - 0xab, 0x27, 0x4f, 0x9f, 0x7e, 0xfc, 0x1c, 0xf3, 0xf6, 0x8b, 0x07, 0x14, 0x01, 0x28, 0x65, 0x88, - 0x56, 0xaf, 0x7e, 0x7e, 0x52, 0x2a, 0xa7, 0x21, 0xe9, 0x36, 0x1b, 0x77, 0xd5, 0x07, 0x3e, 0x9d, - 0x8e, 0x24, 0x40, 0x96, 0x51, 0xaf, 0x6b, 0x75, 0xa3, 0xaa, 0x05, 0x6f, 0xc9, 0xe6, 0x43, 0x3a, - 0x52, 0x8c, 0xce, 0x2a, 0x16, 0x77, 0xb5, 0x94, 0xfc, 0x2b, 0x12, 0x0c, 0x5c, 0x15, 0x9c, 0xd7, - 0xb0, 0x87, 0xce, 0x03, 0xf8, 0x3d, 0x89, 0xb0, 0x38, 0x3c, 0xd5, 0xda, 0xd7, 0x94, 0x4f, 0xa3, - 0x84, 0xd0, 0xd1, 0x93, 0xd4, 0xd1, 0x6c, 0xcb, 0xe5, 0xef, 0x08, 0xc4, 0x90, 0xfa, 0xc8, 0xe8, - 0x11, 0x40, 0x34, 0x83, 0xa9, 0xd7, 0x2d, 0xcf, 0x30, 0x6b, 0xaa, 0x6d, 0xdd, 0xe0, 0x2f, 0x54, - 0x25, 0x95, 0x3c, 0x7d, 0x72, 0x95, 0x3e, 0x58, 0x25, 0x70, 0x22, 0x74, 0xd6, 0xe7, 0x42, 0xe6, - 0x3f, 0xad, 0x5a, 0x75, 0xb0, 0xeb, 0xf2, 0x24, 0x25, 0x9a, 0xe8, 0x3c, 0xf4, 0xdb, 0xcd, 0x0d, - 0x55, 0x64, 0x84, 0xdc, 0xc9, 0x23, 0x9d, 0xe2, 0x5b, 0x8c, 0x3f, 0x8f, 0xf0, 0x3e, 0xbb, 0xb9, - 0x41, 0xbc, 0xe1, 0x5e, 0x18, 0xe8, 0x20, 0x4c, 0xee, 0x7a, 0x20, 0x07, 0x7d, 0xc5, 0x97, 0x6b, - 0xa0, 0xda, 0x8e, 0x61, 0x39, 0x86, 0xb7, 0x43, 0x4f, 0xf8, 0x93, 0x4a, 0x5e, 0x3c, 0x58, 0xe5, - 0x70, 0xf9, 0x1a, 0x0c, 0xaf, 0x19, 0x0d, 0x9b, 0xde, 0x49, 0xe1, 0x92, 0x9f, 0x0e, 0xe4, 0x93, - 0xe2, 0xe5, 0xeb, 0x2a, 0x59, 0xa2, 0x4d, 0xb2, 0xf2, 0xd3, 0x5d, 0xbd, 0xf3, 0xc9, 0xbd, 0x7b, - 0x67, 0xb4, 0x60, 0xf9, 0xd3, 0x62, 0x24, 0xf8, 0xf8, 0x74, 0x1f, 0x4a, 0x4f, 0xbd, 0x3a, 0x66, - 0x5c, 0xd9, 0x53, 0x8c, 0x2d, 0x02, 0x8a, 0xbb, 0x4f, 0xab, 0xc5, 0x98, 0x44, 0x5a, 0x8c, 0x0d, - 0x32, 0xf9, 0x1c, 0x0c, 0xae, 0x6a, 0x8e, 0xb7, 0x86, 0xbd, 0x8b, 0x58, 0xab, 0x62, 0x27, 0x3a, - 0xef, 0x0e, 0x8a, 0x79, 0x17, 0x41, 0x8a, 0x4e, 0xae, 0x6c, 0xde, 0xa1, 0xbf, 0xe5, 0x2d, 0x48, - 0xd1, 0x7b, 0x40, 0xfe, 0x9c, 0xcc, 0x29, 0xd8, 0x9c, 0x4c, 0xb2, 0xe9, 0x8e, 0x87, 0x5d, 0x4e, - 0xc2, 0x1a, 0xe8, 0x94, 0x98, 0x59, 0x93, 0xbb, 0xcf, 0xac, 0xdc, 0x55, 0xf9, 0xfc, 0x5a, 0x87, - 0xfe, 0x32, 0x49, 0xc6, 0x0b, 0x73, 0xbe, 0x20, 0x52, 0x20, 0x08, 0x5a, 0x82, 0x61, 0x5b, 0x73, - 0x3c, 0x7a, 0x01, 0x7a, 0x8b, 0x6a, 0xc1, 0xa3, 0x61, 0xb2, 0x3d, 0x36, 0x23, 0xca, 0xf2, 0x5e, - 0x06, 0xed, 0x30, 0x50, 0xfe, 0xcf, 0x29, 0xe8, 0xe3, 0xc6, 0x78, 0x27, 0xf4, 0x73, 0xb3, 0x72, - 0xff, 0x3d, 0x3a, 0xd5, 0x3e, 0x35, 0x4d, 0xf9, 0x53, 0x08, 0xe7, 0x27, 0x68, 0xd0, 0x03, 0x90, - 0xd1, 0xb7, 0x34, 0xc3, 0x54, 0x8d, 0xaa, 0xa8, 0xe5, 0x5f, 0xb9, 0x35, 0xd9, 0x3f, 0x4b, 0x60, - 0x0b, 0x73, 0x4a, 0x3f, 0x7d, 0xb8, 0x50, 0x25, 0xb5, 0xc0, 0x16, 0x36, 0x6a, 0x5b, 0x1e, 0x8f, - 0x41, 0xde, 0x42, 0x67, 0x21, 0x45, 0x5c, 0x86, 0xbf, 0x1f, 0x53, 0x6c, 0x5b, 0x63, 0xf9, 0x75, - 0x6b, 0x39, 0x43, 0x3a, 0xfe, 0xc4, 0xb7, 0x26, 0x25, 0x85, 0x52, 0xa0, 0x59, 0x18, 0xac, 0x6b, - 0xae, 0xa7, 0xd2, 0x39, 0x8c, 0x74, 0x9f, 0xa6, 0x2c, 0x0e, 0xb5, 0x1b, 0x84, 0x1b, 0x96, 0x8b, - 0x9e, 0x23, 0x54, 0x0c, 0x54, 0x45, 0xc7, 0x21, 0x4f, 0x99, 0xe8, 0x56, 0xa3, 0x61, 0x78, 0xac, - 0xba, 0xea, 0xa3, 0x76, 0x1f, 0x22, 0xf0, 0x59, 0x0a, 0xa6, 0x35, 0xd6, 0x61, 0xc8, 0xd2, 0x0b, - 0xf9, 0x14, 0x85, 0x5d, 0x3e, 0xcb, 0x10, 0x00, 0x7d, 0xf8, 0x20, 0x0c, 0x07, 0x19, 0x94, 0xa1, - 0x64, 0x18, 0x97, 0x00, 0x4c, 0x11, 0x1f, 0x83, 0x31, 0x13, 0x6f, 0xd3, 0xeb, 0x70, 0x11, 0xec, - 0x2c, 0xc5, 0x46, 0xe4, 0xd9, 0xd5, 0x28, 0xc5, 0x3b, 0x60, 0x48, 0x17, 0xc6, 0x67, 0xb8, 0x40, - 0x71, 0x07, 0x7d, 0x28, 0x45, 0x3b, 0x04, 0x19, 0xcd, 0xb6, 0x19, 0x42, 0x8e, 0x67, 0x50, 0xdb, - 0xa6, 0x8f, 0x4e, 0xc0, 0x08, 0xd5, 0xd1, 0xc1, 0x6e, 0xb3, 0xee, 0x71, 0x26, 0x03, 0x14, 0x67, - 0x98, 0x3c, 0x50, 0x18, 0x9c, 0xe2, 0xde, 0x07, 0x83, 0xf8, 0xba, 0x51, 0xc5, 0xa6, 0x8e, 0x19, - 0xde, 0x20, 0xc5, 0x1b, 0x10, 0x40, 0x8a, 0xf4, 0x10, 0xf8, 0x99, 0x51, 0x15, 0x59, 0x7b, 0x88, - 0xf1, 0x13, 0xf0, 0x19, 0x06, 0x96, 0x1f, 0x81, 0xd4, 0x9c, 0xe6, 0x69, 0xa4, 0xc4, 0xf0, 0xb6, - 0xd9, 0x54, 0x34, 0xa0, 0x90, 0x9f, 0x1d, 0xc3, 0xed, 0xd5, 0x04, 0xa4, 0xae, 0x5a, 0x1e, 0x46, - 0x4f, 0x84, 0xca, 0xc2, 0xa1, 0x4e, 0x3e, 0xbe, 0x66, 0xd4, 0x4c, 0x5c, 0x5d, 0x72, 0x6b, 0xa1, - 0x37, 0x65, 0x03, 0x17, 0x4b, 0x44, 0x5c, 0x6c, 0x0c, 0xd2, 0x8e, 0xd5, 0x34, 0xab, 0xe2, 0x2e, - 0x17, 0x6d, 0xa0, 0x0a, 0x64, 0x7c, 0xcf, 0x49, 0xc5, 0x79, 0xce, 0x30, 0xf1, 0x1c, 0xe2, 0xd7, - 0x1c, 0xa0, 0xf4, 0x6f, 0x70, 0x07, 0x2a, 0x43, 0xd6, 0x4f, 0x79, 0xdc, 0x03, 0x7b, 0x73, 0xe2, - 0x80, 0x8c, 0x4c, 0x41, 0xbe, 0x3f, 0xf8, 0x06, 0x65, 0x5e, 0x98, 0xf7, 0x1f, 0x70, 0x8b, 0x46, - 0x5c, 0x8d, 0xbf, 0xb5, 0xdb, 0x4f, 0xf5, 0x0a, 0x5c, 0x8d, 0xbd, 0xb9, 0x7b, 0x04, 0xb2, 0xae, - 0x51, 0x33, 0x35, 0xaf, 0xe9, 0x60, 0xee, 0x8d, 0x01, 0x40, 0xfe, 0xc9, 0x04, 0xf4, 0x31, 0xef, - 0x0e, 0xd9, 0x4d, 0xea, 0x6c, 0xb7, 0x44, 0x37, 0xbb, 0x25, 0xf7, 0x6f, 0xb7, 0x19, 0x00, 0x5f, - 0x18, 0x97, 0xbf, 0x75, 0xd9, 0xa1, 0xce, 0x60, 0x22, 0xae, 0x19, 0x35, 0x1e, 0xbc, 0x21, 0x22, - 0xdf, 0x83, 0xd2, 0xa1, 0x3c, 0x79, 0x1e, 0xb2, 0x1b, 0x86, 0xa7, 0x6a, 0x64, 0xf1, 0x48, 0x4d, - 0x98, 0x3b, 0x39, 0x31, 0xd5, 0x69, 0x95, 0x39, 0x25, 0x96, 0x98, 0x4a, 0x66, 0x83, 0xff, 0x92, - 0xff, 0x40, 0x22, 0xb5, 0x32, 0xef, 0x10, 0xcd, 0xc0, 0xa0, 0x50, 0x54, 0xdd, 0xac, 0x6b, 0x35, - 0xee, 0x8c, 0x47, 0xbb, 0x6a, 0x7b, 0xa1, 0xae, 0xd5, 0x94, 0x1c, 0x57, 0x90, 0x34, 0x3a, 0x0f, - 0x6c, 0xa2, 0xcb, 0xc0, 0x46, 0x3c, 0x29, 0xb9, 0x3f, 0x4f, 0x8a, 0x8c, 0x79, 0xaa, 0x75, 0xcc, - 0xbf, 0x92, 0xa0, 0x6b, 0x26, 0xdb, 0x72, 0xb5, 0xfa, 0x9b, 0x11, 0x62, 0x87, 0x21, 0x6b, 0x5b, - 0x75, 0x95, 0x3d, 0x61, 0x97, 0x26, 0x33, 0xb6, 0x55, 0x57, 0xda, 0xfc, 0x28, 0x7d, 0x87, 0xe2, - 0xaf, 0xef, 0x0e, 0x58, 0xad, 0xbf, 0xd5, 0x6a, 0x0e, 0x0c, 0x30, 0x53, 0xf0, 0x09, 0xf3, 0x31, - 0x62, 0x03, 0x3a, 0x03, 0x4b, 0xed, 0x13, 0x3c, 0x13, 0x9b, 0x61, 0x2a, 0x1c, 0x8f, 0x50, 0xb0, - 0xf9, 0xa5, 0xd3, 0x62, 0x3b, 0xec, 0xe7, 0x0a, 0xc7, 0x93, 0x7f, 0x56, 0x02, 0x58, 0x24, 0x96, - 0xa5, 0xfa, 0x92, 0xa9, 0xce, 0xa5, 0x22, 0xa8, 0x91, 0x9e, 0x27, 0xba, 0x0d, 0x1a, 0xef, 0x7f, - 0xc0, 0x0d, 0xcb, 0x3d, 0x0b, 0x83, 0x81, 0x33, 0xba, 0x58, 0x08, 0x33, 0xb1, 0x4b, 0x71, 0xbf, - 0x86, 0x3d, 0x65, 0xe0, 0x7a, 0xa8, 0x25, 0xff, 0x33, 0x09, 0xb2, 0x54, 0xa6, 0x25, 0xec, 0x69, - 0x91, 0x31, 0x94, 0xf6, 0x3f, 0x86, 0x47, 0x01, 0x18, 0x1b, 0xd7, 0xb8, 0x89, 0xb9, 0x67, 0x65, - 0x29, 0x64, 0xcd, 0xb8, 0x89, 0xd1, 0x19, 0xdf, 0xe0, 0xc9, 0xdd, 0x0d, 0x2e, 0x8a, 0x7f, 0x6e, - 0xf6, 0x7b, 0xa0, 0x9f, 0x7e, 0xcd, 0x64, 0xdb, 0xe5, 0xf5, 0x7c, 0x9f, 0xd9, 0x6c, 0xac, 0x6f, - 0xbb, 0xf2, 0x73, 0xd0, 0xbf, 0xbe, 0xcd, 0xb6, 0x60, 0x0e, 0x43, 0xd6, 0xb1, 0x2c, 0x3e, 0xf1, - 0xb3, 0x82, 0x2b, 0x43, 0x00, 0x74, 0x9e, 0x13, 0xdb, 0x0e, 0x89, 0x60, 0xdb, 0x21, 0xd8, 0x37, - 0x49, 0xf6, 0xb4, 0x6f, 0x72, 0xe2, 0xdf, 0x4b, 0x90, 0x0b, 0xe5, 0x07, 0xf4, 0x38, 0x1c, 0x2c, - 0x2f, 0xae, 0xcc, 0x5e, 0x56, 0x17, 0xe6, 0xd4, 0x0b, 0x8b, 0x33, 0xf3, 0xc1, 0x6b, 0x01, 0xc5, - 0xf1, 0x17, 0x5f, 0x3a, 0x86, 0x42, 0xb8, 0x57, 0xcc, 0x6b, 0xa6, 0x75, 0xc3, 0x44, 0xd3, 0x30, - 0x16, 0x25, 0x99, 0x29, 0xaf, 0x55, 0x96, 0xd7, 0xf3, 0x52, 0xf1, 0xe0, 0x8b, 0x2f, 0x1d, 0x1b, - 0x09, 0x51, 0xcc, 0x6c, 0xb8, 0xd8, 0xf4, 0xda, 0x09, 0x66, 0x57, 0x96, 0x96, 0x16, 0xd6, 0xf3, - 0x89, 0x36, 0x02, 0x3e, 0x03, 0x3c, 0x04, 0x23, 0x51, 0x82, 0xe5, 0x85, 0xc5, 0x7c, 0xb2, 0x88, - 0x5e, 0x7c, 0xe9, 0xd8, 0x50, 0x08, 0x7b, 0xd9, 0xa8, 0x17, 0x33, 0x3f, 0xfe, 0xc5, 0x89, 0x03, - 0x3f, 0xff, 0xd7, 0x27, 0x24, 0xa2, 0xd9, 0x60, 0x24, 0x47, 0xa0, 0x47, 0xe0, 0x9e, 0xb5, 0x85, - 0xf9, 0xe5, 0xca, 0x9c, 0xba, 0xb4, 0x36, 0xaf, 0xb2, 0xef, 0x21, 0xf8, 0xda, 0x0d, 0xbf, 0xf8, - 0xd2, 0xb1, 0x1c, 0x57, 0xa9, 0x1b, 0xf6, 0xaa, 0x52, 0xb9, 0xba, 0xb2, 0x5e, 0xc9, 0x4b, 0x0c, - 0x7b, 0xd5, 0xc1, 0xd7, 0x2d, 0x8f, 0x7d, 0xee, 0xe8, 0x31, 0x38, 0xd4, 0x01, 0xdb, 0x57, 0x6c, - 0xe4, 0xc5, 0x97, 0x8e, 0x0d, 0xae, 0x3a, 0x98, 0xc5, 0x0f, 0xa5, 0x98, 0x82, 0x42, 0x3b, 0xc5, - 0xca, 0xea, 0xca, 0xda, 0xcc, 0x62, 0xfe, 0x58, 0x31, 0xff, 0xe2, 0x4b, 0xc7, 0x06, 0x44, 0x32, - 0x24, 0xf8, 0x81, 0x66, 0x77, 0x73, 0xe1, 0xf5, 0x97, 0x13, 0x30, 0xd1, 0x76, 0xf9, 0x9a, 0x1f, - 0x59, 0x74, 0xdb, 0x28, 0x2e, 0x41, 0x66, 0x4e, 0x9c, 0x84, 0xec, 0x75, 0x9f, 0xf8, 0x67, 0xf6, - 0xb8, 0x4f, 0x3c, 0x28, 0x7a, 0x12, 0xdb, 0xc4, 0x27, 0xe2, 0xb7, 0x89, 0x85, 0xfc, 0xfb, 0xd8, - 0x25, 0xfe, 0xc8, 0xe3, 0x70, 0x3f, 0xdf, 0x5c, 0x77, 0x3d, 0xed, 0x9a, 0x61, 0xd6, 0xfc, 0x23, - 0x0c, 0xde, 0xe6, 0x46, 0x19, 0xe7, 0xa7, 0x18, 0x02, 0xba, 0xeb, 0x41, 0x46, 0x71, 0xd7, 0xb5, - 0x6d, 0xfc, 0x9a, 0x35, 0x66, 0x84, 0x8a, 0x31, 0x47, 0x2e, 0xf2, 0xc7, 0x24, 0x18, 0xba, 0x68, - 0xb8, 0x9e, 0xe5, 0x18, 0xba, 0x56, 0xa7, 0x6f, 0x39, 0x9c, 0xe9, 0x75, 0xd2, 0x68, 0xc9, 0x61, - 0x4f, 0x41, 0xdf, 0x75, 0xad, 0xce, 0xb2, 0x75, 0x92, 0x7e, 0x95, 0xa1, 0xb3, 0x21, 0x82, 0x9c, - 0x2d, 0x18, 0x30, 0x32, 0xf9, 0x17, 0x13, 0x30, 0x4c, 0xa3, 0xdc, 0x65, 0x9f, 0xe1, 0x21, 0x2b, - 0xd4, 0x32, 0xa4, 0x1c, 0xcd, 0xe3, 0x9b, 0xae, 0xe5, 0x29, 0x7e, 0x38, 0xf2, 0x40, 0xfc, 0x81, - 0xc7, 0xd4, 0x1c, 0xd6, 0x15, 0x4a, 0x8b, 0x7e, 0x18, 0x32, 0x0d, 0x6d, 0x5b, 0xa5, 0x7c, 0xd8, - 0xba, 0x6f, 0x66, 0x6f, 0x7c, 0x6e, 0xdf, 0x9a, 0x1c, 0xde, 0xd1, 0x1a, 0xf5, 0x92, 0x2c, 0xf8, - 0xc8, 0x4a, 0x7f, 0x43, 0xdb, 0x26, 0x22, 0x22, 0x1b, 0x86, 0x09, 0x54, 0xdf, 0xd2, 0xcc, 0x1a, - 0x66, 0x9d, 0xd0, 0x2d, 0xe4, 0xf2, 0xc5, 0x3d, 0x77, 0x32, 0x1e, 0x74, 0x12, 0x62, 0x27, 0x2b, - 0x83, 0x0d, 0x6d, 0x7b, 0x96, 0x02, 0x48, 0x8f, 0xa5, 0xcc, 0x27, 0x3f, 0x37, 0x79, 0x80, 0x1e, - 0x38, 0xbd, 0x2c, 0x01, 0x04, 0x16, 0x43, 0x3f, 0x0c, 0x79, 0xdd, 0x6f, 0x51, 0x5a, 0x97, 0x8f, - 0xe1, 0x83, 0xdd, 0xc6, 0xa2, 0xc5, 0xde, 0xac, 0xe8, 0xf8, 0xc6, 0xad, 0x49, 0x49, 0x19, 0xd6, - 0x5b, 0x86, 0xe2, 0x7d, 0x90, 0x6b, 0xda, 0x55, 0xcd, 0xc3, 0x2a, 0x5d, 0x05, 0x27, 0x62, 0x0b, - 0x98, 0x09, 0xc2, 0xeb, 0xf6, 0xad, 0x49, 0xc4, 0xd4, 0x0a, 0x11, 0xcb, 0xb4, 0xac, 0x01, 0x06, - 0x21, 0x04, 0x21, 0x9d, 0x7e, 0x47, 0x82, 0xdc, 0x5c, 0xe8, 0xb6, 0x51, 0x01, 0xfa, 0x1b, 0x96, - 0x69, 0x5c, 0xe3, 0xfe, 0x98, 0x55, 0x44, 0x13, 0x15, 0x21, 0xc3, 0x5e, 0xfc, 0xf2, 0x76, 0xc4, - 0x56, 0xb2, 0x68, 0x13, 0xaa, 0x1b, 0x78, 0xc3, 0x35, 0xc4, 0x68, 0x28, 0xa2, 0x89, 0x2e, 0x40, - 0xde, 0xc5, 0x7a, 0xd3, 0x31, 0xbc, 0x1d, 0x55, 0xb7, 0x4c, 0x4f, 0xd3, 0x3d, 0xf6, 0x0a, 0x51, - 0xf9, 0xf0, 0xed, 0x5b, 0x93, 0xf7, 0x30, 0x59, 0x5b, 0x31, 0x64, 0x65, 0x58, 0x80, 0x66, 0x19, - 0x84, 0xf4, 0x50, 0xc5, 0x9e, 0x66, 0xd4, 0x5d, 0x5a, 0x13, 0x66, 0x15, 0xd1, 0x0c, 0xe9, 0xf2, - 0x4f, 0xfa, 0xc3, 0x1b, 0x87, 0x37, 0x20, 0x6f, 0xd9, 0xd8, 0x89, 0x54, 0xd8, 0x74, 0x1e, 0x2f, - 0x2f, 0x06, 0x3d, 0xb7, 0x62, 0xc8, 0xff, 0xef, 0xd6, 0xe4, 0xa3, 0x3d, 0x78, 0xd0, 0x55, 0xad, - 0xce, 0xab, 0x73, 0x65, 0x58, 0xf0, 0x10, 0xe5, 0xfa, 0x05, 0xe2, 0x17, 0x62, 0x5d, 0x6e, 0x37, - 0x37, 0xc4, 0x06, 0x65, 0x44, 0xe5, 0x56, 0x0c, 0x99, 0x78, 0x00, 0x07, 0xad, 0x52, 0x08, 0x29, - 0xa9, 0x9f, 0xd3, 0x8c, 0xba, 0x78, 0x1b, 0x56, 0xe1, 0x2d, 0xb4, 0x00, 0x7d, 0xae, 0xa7, 0x79, - 0x4d, 0x56, 0xbc, 0xa4, 0xcb, 0x8f, 0xf7, 0x28, 0x73, 0xd9, 0x32, 0xab, 0x6b, 0x94, 0x50, 0xe1, - 0x0c, 0xd0, 0x05, 0xe8, 0xf3, 0xac, 0x6b, 0xd8, 0xe4, 0x46, 0xdd, 0x53, 0xc4, 0xd3, 0xc3, 0x5d, - 0x46, 0x8d, 0x3c, 0xc8, 0x57, 0x71, 0x1d, 0xd7, 0x58, 0x05, 0xb9, 0xa5, 0x91, 0x95, 0x1b, 0xfd, - 0x22, 0x55, 0x79, 0x61, 0xcf, 0x61, 0xc9, 0x0d, 0xd4, 0xca, 0x4f, 0x56, 0x86, 0x7d, 0xd0, 0x1a, - 0x85, 0xa0, 0xcb, 0x91, 0x8b, 0x72, 0xfc, 0xb3, 0x6d, 0xf7, 0x75, 0x8b, 0xbd, 0x90, 0x97, 0x8b, - 0xfd, 0x9e, 0xf0, 0x35, 0xbb, 0x0b, 0x90, 0x6f, 0x9a, 0x1b, 0x96, 0x49, 0xdf, 0x60, 0xe3, 0x4b, - 0x19, 0xb2, 0x36, 0x4e, 0x86, 0x47, 0xad, 0x15, 0x43, 0x56, 0x86, 0x7d, 0xd0, 0x45, 0xb6, 0xe0, - 0xa9, 0xc2, 0x50, 0x80, 0x45, 0x43, 0x37, 0x1b, 0x1b, 0xba, 0xf7, 0xf2, 0xd0, 0x3d, 0xd8, 0xda, - 0x4b, 0x10, 0xbd, 0x83, 0x3e, 0x90, 0x90, 0xa1, 0x8b, 0x00, 0x41, 0xc2, 0xa0, 0xfb, 0x3e, 0xb9, - 0x93, 0x72, 0x7c, 0xd6, 0x11, 0x6b, 0xe5, 0x80, 0x16, 0x7d, 0x00, 0x46, 0x1b, 0x86, 0xa9, 0xba, - 0xb8, 0xbe, 0xa9, 0x72, 0x03, 0x13, 0x96, 0xf4, 0x0b, 0x24, 0xe5, 0xc5, 0xbd, 0xf9, 0xc3, 0xed, - 0x5b, 0x93, 0x45, 0x9e, 0x54, 0xdb, 0x59, 0xca, 0xca, 0x48, 0xc3, 0x30, 0xd7, 0x70, 0x7d, 0x73, - 0xce, 0x87, 0x95, 0x06, 0x7e, 0xfc, 0x73, 0x93, 0x07, 0xfc, 0x00, 0x36, 0xe8, 0x69, 0x05, 0x8f, - 0x23, 0xec, 0xa2, 0x15, 0xc8, 0x6a, 0xa2, 0xc1, 0x76, 0x88, 0x7a, 0x76, 0xf6, 0x50, 0x80, 0x06, - 0x3c, 0x58, 0xae, 0x78, 0xe1, 0x3f, 0x1e, 0x93, 0xe4, 0x17, 0x13, 0xd0, 0x37, 0x77, 0x75, 0x55, - 0x33, 0x1c, 0x74, 0x13, 0x46, 0x02, 0x67, 0x8b, 0x66, 0x8a, 0xa5, 0xdb, 0xb7, 0x26, 0x0b, 0xad, - 0xfe, 0xb8, 0xc7, 0x54, 0x31, 0xa3, 0xeb, 0x42, 0x92, 0x20, 0x48, 0x44, 0xae, 0xb8, 0xd9, 0x75, - 0x1f, 0x20, 0xdc, 0x77, 0x1b, 0xca, 0x3e, 0xd2, 0x54, 0xdb, 0xb6, 0x42, 0x28, 0x71, 0x56, 0xa0, - 0x9f, 0xd9, 0xc2, 0x45, 0x25, 0x48, 0xdb, 0xe4, 0x07, 0x3f, 0x1b, 0x9a, 0xe8, 0x1a, 0x4d, 0x14, - 0xdf, 0xdf, 0xa9, 0x26, 0x24, 0xf2, 0x17, 0x92, 0x00, 0x73, 0x57, 0xaf, 0xae, 0x3b, 0x86, 0x5d, - 0xc7, 0xde, 0xf7, 0xd5, 0xae, 0x1f, 0x91, 0xe0, 0x60, 0x68, 0x4d, 0xeb, 0xe8, 0x2d, 0xc6, 0x7d, - 0xfa, 0xf6, 0xad, 0xc9, 0x23, 0xad, 0xc6, 0x0d, 0xa1, 0xed, 0xc3, 0xc0, 0xa3, 0xc1, 0x72, 0xd8, - 0xd1, 0x3b, 0xcb, 0x51, 0x75, 0x3d, 0x5f, 0x8e, 0x64, 0x77, 0x39, 0x42, 0x68, 0x6f, 0x48, 0x8e, - 0x39, 0xd7, 0x6b, 0x1f, 0xeb, 0x35, 0xc8, 0x05, 0x63, 0xe4, 0xa2, 0x39, 0xc8, 0x78, 0xfc, 0x37, - 0x1f, 0x72, 0xb9, 0xfb, 0x90, 0x0b, 0x32, 0x3e, 0xec, 0x3e, 0xa5, 0xfc, 0xef, 0x12, 0x00, 0x41, - 0x54, 0xff, 0x79, 0x8d, 0x28, 0x32, 0x9d, 0xf2, 0xc9, 0x2f, 0xb9, 0xaf, 0x02, 0x9a, 0x53, 0x87, - 0x46, 0xeb, 0x8f, 0x12, 0x30, 0x7a, 0x45, 0x64, 0xfe, 0xb7, 0x2d, 0x8c, 0x56, 0xa1, 0x1f, 0x9b, - 0x9e, 0x63, 0x50, 0x13, 0x13, 0x6f, 0x7d, 0xac, 0x9b, 0xb7, 0x76, 0xb0, 0x1a, 0xfd, 0xc8, 0x8e, - 0x38, 0xa6, 0xe2, 0x6c, 0x42, 0xb6, 0xfe, 0x78, 0x12, 0x0a, 0xdd, 0xa8, 0xd0, 0x2c, 0x0c, 0xeb, - 0x0e, 0xa6, 0x00, 0x35, 0xbc, 0x27, 0x5e, 0x2e, 0x06, 0x2b, 0x89, 0x16, 0x04, 0x59, 0x19, 0x12, - 0x10, 0x5e, 0x1b, 0xd4, 0x80, 0x94, 0xf9, 0x24, 0x64, 0x08, 0x56, 0x8f, 0x75, 0xbd, 0xcc, 0x8b, - 0x03, 0xd1, 0x49, 0x94, 0x01, 0xab, 0x0e, 0x86, 0x02, 0x28, 0x2d, 0x0f, 0x9e, 0x87, 0x61, 0xc3, - 0x34, 0x3c, 0x43, 0xab, 0xab, 0x1b, 0x5a, 0x5d, 0x33, 0xf5, 0xfd, 0xac, 0x92, 0xd8, 0x84, 0xce, - 0xbb, 0x6d, 0x61, 0x27, 0x2b, 0x43, 0x1c, 0x52, 0x66, 0x00, 0x74, 0x11, 0xfa, 0x45, 0x57, 0xa9, - 0x7d, 0xd5, 0x92, 0x82, 0x3c, 0x34, 0x22, 0x3f, 0x91, 0x84, 0x11, 0x05, 0x57, 0xdf, 0x1e, 0x8a, - 0xbd, 0x0d, 0xc5, 0x12, 0x00, 0x4b, 0x24, 0x64, 0x26, 0xd9, 0xc7, 0x68, 0x90, 0x54, 0x94, 0x65, - 0x1c, 0xe6, 0x5c, 0x2f, 0x34, 0x1e, 0x7f, 0x9c, 0x84, 0x81, 0xf0, 0x78, 0xbc, 0x3d, 0xc5, 0xff, - 0xe0, 0x4c, 0xf1, 0x68, 0x21, 0x48, 0x8d, 0x29, 0xfe, 0xb1, 0xd4, 0x2e, 0xa9, 0xb1, 0x2d, 0xa4, - 0xba, 0xe7, 0xc4, 0x3f, 0x4d, 0x40, 0xdf, 0xaa, 0xe6, 0x68, 0x0d, 0x17, 0xe9, 0x6d, 0x0b, 0x1b, - 0xb1, 0xb1, 0xdf, 0xf6, 0x95, 0x6b, 0xbe, 0x29, 0x16, 0xb3, 0xae, 0xf9, 0x64, 0x87, 0x75, 0xcd, - 0xbb, 0x61, 0xa8, 0xa1, 0x6d, 0x87, 0x0e, 0xc1, 0xe9, 0x60, 0x0e, 0x96, 0x0f, 0x05, 0x5c, 0xa2, - 0xcf, 0xd9, 0x76, 0xcd, 0xd5, 0xf0, 0x25, 0xa5, 0x1c, 0xc1, 0x08, 0x66, 0x09, 0x42, 0x3e, 0x1e, - 0xec, 0x8b, 0x84, 0x1e, 0xca, 0x0a, 0x34, 0xb4, 0xed, 0x0a, 0x6b, 0xa0, 0x45, 0x40, 0x5b, 0xfe, - 0xd6, 0x9c, 0x1a, 0x98, 0x92, 0xd0, 0x1f, 0xbd, 0x7d, 0x6b, 0xf2, 0x10, 0xa3, 0x6f, 0xc7, 0x91, - 0x95, 0x91, 0x00, 0x28, 0xb8, 0x9d, 0x02, 0x20, 0x7a, 0xa9, 0xec, 0x8a, 0x33, 0x5b, 0x5d, 0x1f, - 0xbc, 0x7d, 0x6b, 0x72, 0x84, 0x71, 0x09, 0x9e, 0xc9, 0x4a, 0x96, 0x34, 0xe6, 0xc8, 0xef, 0x90, - 0xe1, 0xbf, 0x28, 0x01, 0x0a, 0xe6, 0x20, 0x05, 0xbb, 0xb6, 0x65, 0xba, 0x74, 0xdd, 0x17, 0x5a, - 0xa4, 0x49, 0xbb, 0xaf, 0xfb, 0x02, 0x7a, 0xb1, 0xee, 0x0b, 0x85, 0xee, 0xb9, 0x20, 0x5f, 0x27, - 0xf8, 0x38, 0x76, 0xb8, 0x0f, 0x3e, 0x35, 0x6b, 0x19, 0x82, 0xba, 0x43, 0x82, 0xfe, 0x97, 0x12, - 0x1c, 0x6a, 0xf3, 0x26, 0x5f, 0xd8, 0xbf, 0x00, 0xc8, 0x09, 0x3d, 0xe4, 0x1f, 0xbd, 0x63, 0x42, - 0xef, 0xd9, 0x39, 0x47, 0x9c, 0xb6, 0x89, 0xe0, 0xce, 0x4d, 0x39, 0xec, 0x42, 0xf9, 0x3f, 0x95, - 0x60, 0x2c, 0xdc, 0xbd, 0xaf, 0xc8, 0x32, 0x0c, 0x84, 0x7b, 0xe7, 0x2a, 0xdc, 0xdf, 0x8b, 0x0a, - 0x5c, 0xfa, 0x08, 0x3d, 0x7a, 0x3a, 0x08, 0x55, 0xb6, 0x79, 0xfb, 0x78, 0xcf, 0xd6, 0x10, 0x32, - 0xb5, 0x86, 0x2c, 0xd3, 0xe0, 0xcf, 0x24, 0x48, 0xad, 0x5a, 0x56, 0x1d, 0x59, 0x30, 0x62, 0x5a, - 0x9e, 0x4a, 0x3c, 0x0b, 0x57, 0x55, 0xbe, 0xc7, 0xc3, 0x76, 0x75, 0x67, 0xf7, 0x66, 0xa4, 0xef, - 0xde, 0x9a, 0x6c, 0x67, 0xa5, 0x0c, 0x9b, 0x96, 0x57, 0xa6, 0x90, 0x75, 0xb6, 0x03, 0xf4, 0x01, - 0x18, 0x8c, 0x76, 0xc6, 0x76, 0xbc, 0x9e, 0xd9, 0x73, 0x67, 0x51, 0x36, 0xb7, 0x6f, 0x4d, 0x8e, - 0x05, 0x11, 0xe3, 0x83, 0x65, 0x65, 0x60, 0x23, 0xd4, 0x3b, 0xbb, 0xbf, 0xf9, 0x27, 0x9f, 0x9b, - 0x94, 0xca, 0x17, 0xba, 0x9e, 0xd0, 0x3c, 0xb2, 0xab, 0x08, 0xdb, 0xfe, 0x31, 0x43, 0xf4, 0x58, - 0xe6, 0x93, 0xa3, 0x30, 0xd9, 0xe5, 0x1c, 0xc2, 0xdb, 0xde, 0xd7, 0x11, 0x44, 0xcc, 0x19, 0x41, - 0xb1, 0xa7, 0x63, 0x0f, 0xf9, 0xf5, 0x14, 0xa0, 0x25, 0xb7, 0x36, 0x4b, 0xaa, 0x9a, 0xd0, 0x9d, - 0xc3, 0x96, 0x2d, 0x31, 0xe9, 0x0d, 0x6d, 0x89, 0x2d, 0x45, 0x36, 0x99, 0x12, 0x7b, 0xdb, 0xda, - 0xee, 0x79, 0xa7, 0x29, 0xf9, 0xa6, 0xec, 0x34, 0x75, 0x2e, 0x55, 0x52, 0xdf, 0xc7, 0x15, 0x53, - 0xfa, 0xcd, 0x59, 0x31, 0x8d, 0x43, 0x1f, 0xdf, 0x83, 0x66, 0xff, 0x22, 0x80, 0xb7, 0xd0, 0x69, - 0xf1, 0x65, 0xf5, 0xfe, 0xde, 0xb2, 0x3f, 0xc3, 0xe6, 0x79, 0xe6, 0xab, 0x49, 0xc8, 0x2f, 0xb9, - 0xb5, 0x4a, 0xd5, 0xf0, 0xee, 0x92, 0xef, 0xd9, 0xdd, 0x17, 0x99, 0xb3, 0xb7, 0x6f, 0x4d, 0x0e, - 0x31, 0x93, 0xdd, 0x49, 0x43, 0x35, 0x60, 0xb8, 0xe5, 0x38, 0x87, 0xbb, 0xe6, 0xdc, 0x7e, 0x4e, - 0x95, 0x5a, 0x58, 0xc9, 0x74, 0x5d, 0x10, 0x0a, 0x10, 0xb4, 0xdd, 0x39, 0x1a, 0xd8, 0x44, 0x76, - 0xf1, 0x6e, 0xee, 0xb9, 0xb2, 0x21, 0xfc, 0x5a, 0x02, 0x72, 0x4b, 0xae, 0x58, 0xe7, 0xe2, 0x3f, - 0xb7, 0x3b, 0x0a, 0x4f, 0xfa, 0x2f, 0x9c, 0x25, 0x7b, 0x0b, 0x84, 0xe8, 0x4b, 0x68, 0xdf, 0x4a, - 0xd2, 0x3c, 0x5c, 0xc6, 0x35, 0xc3, 0xf4, 0x27, 0x6b, 0xfc, 0xf6, 0xc2, 0xe8, 0x07, 0x68, 0x61, - 0x14, 0x8c, 0x70, 0x6a, 0x3f, 0x23, 0xfc, 0x5b, 0x09, 0x18, 0x5c, 0x72, 0x6b, 0x57, 0xcc, 0xea, - 0xdb, 0xa1, 0xf2, 0x46, 0x42, 0xe5, 0x8e, 0x97, 0x66, 0x5f, 0x4b, 0xc0, 0x89, 0x70, 0x2d, 0xf5, - 0x7c, 0x13, 0x3b, 0x3b, 0x7e, 0xb9, 0x64, 0x6b, 0x35, 0xc3, 0x0c, 0xdf, 0x9e, 0x39, 0x14, 0x16, - 0x96, 0xe2, 0x0a, 0x91, 0x65, 0x13, 0x72, 0xab, 0x5a, 0x0d, 0x2b, 0xf8, 0xf9, 0x26, 0x76, 0xbd, - 0x0e, 0xef, 0xc4, 0x8d, 0x43, 0x9f, 0xb5, 0xb9, 0x29, 0xae, 0xc6, 0xa5, 0x14, 0xde, 0x42, 0x63, - 0x90, 0xae, 0x1b, 0x0d, 0x83, 0x19, 0x24, 0xa5, 0xb0, 0x06, 0x9a, 0x84, 0x9c, 0x4e, 0xf4, 0x56, - 0xd9, 0xbb, 0x04, 0x29, 0xf1, 0xcd, 0x9f, 0xa6, 0xe9, 0xad, 0x13, 0x88, 0xfc, 0x14, 0x0c, 0xb0, - 0xfe, 0xf8, 0xfa, 0xe2, 0x10, 0x64, 0xe8, 0xdd, 0xef, 0xa0, 0xd7, 0x7e, 0xd2, 0xbe, 0xcc, 0xde, - 0x9f, 0x63, 0x5c, 0x58, 0xc7, 0xac, 0x51, 0x2e, 0x77, 0x35, 0xe5, 0xf1, 0xf8, 0x41, 0x66, 0x86, - 0xf2, 0xcd, 0xf8, 0x9b, 0x69, 0x38, 0xc8, 0xaf, 0xb5, 0x68, 0xb6, 0x31, 0xbd, 0xe5, 0x79, 0xe2, - 0xc5, 0x54, 0xe0, 0x0b, 0x7b, 0xcd, 0x36, 0xe4, 0x1d, 0x48, 0x5d, 0xf4, 0x3c, 0x1b, 0x9d, 0x80, - 0xb4, 0xd3, 0xac, 0x63, 0x71, 0x58, 0x30, 0x36, 0x15, 0xe0, 0x4c, 0x11, 0x04, 0xa5, 0x59, 0xc7, - 0x0a, 0x43, 0x41, 0x15, 0x98, 0xdc, 0x6c, 0xd6, 0xeb, 0x3b, 0x6a, 0x15, 0xd3, 0x7f, 0xc3, 0xe6, - 0xff, 0xc7, 0x13, 0xbc, 0x6d, 0x6b, 0xa6, 0x5f, 0x54, 0x66, 0x94, 0x23, 0x14, 0x6d, 0x8e, 0x62, - 0x89, 0xff, 0x76, 0x52, 0x11, 0x38, 0xf2, 0xef, 0x27, 0x20, 0x23, 0x58, 0xd3, 0x17, 0xda, 0x70, - 0x1d, 0xeb, 0x9e, 0x25, 0x2e, 0x28, 0xf8, 0x6d, 0x84, 0x20, 0x59, 0xe3, 0x43, 0x94, 0xbd, 0x78, - 0x40, 0x21, 0x0d, 0x02, 0xf3, 0x5f, 0x33, 0x24, 0x30, 0xbb, 0x49, 0x46, 0x2d, 0x65, 0x5b, 0x62, - 0x67, 0xec, 0xe2, 0x01, 0x85, 0xb6, 0x50, 0x01, 0xfa, 0x48, 0xb4, 0x79, 0xec, 0x5b, 0xb4, 0x04, - 0xce, 0xdb, 0x68, 0x1c, 0xd2, 0xb6, 0xe6, 0xe9, 0xec, 0xfe, 0x3f, 0x79, 0xc0, 0x9a, 0x24, 0x1e, - 0xd8, 0x37, 0x00, 0x5a, 0xff, 0xc7, 0x11, 0x31, 0x06, 0xfb, 0xd8, 0x22, 0x91, 0x7b, 0x55, 0xf3, - 0x3c, 0xec, 0x98, 0x84, 0x21, 0x43, 0xa7, 0xef, 0xae, 0x5a, 0xd5, 0x1d, 0xfe, 0x7f, 0x97, 0xe8, - 0x6f, 0xfe, 0x1f, 0x61, 0xa8, 0x3f, 0xa8, 0xf4, 0x21, 0xfb, 0x77, 0x73, 0x03, 0x02, 0x58, 0x26, - 0x48, 0x15, 0x18, 0xd5, 0xaa, 0x55, 0x83, 0x78, 0xb5, 0x56, 0x57, 0x37, 0x0c, 0xba, 0x71, 0xe2, - 0xd2, 0x7f, 0x26, 0xd8, 0x6d, 0x2c, 0x50, 0x40, 0x50, 0xe6, 0xf8, 0xe5, 0x2c, 0xf4, 0xdb, 0x4c, - 0x28, 0xf9, 0x3c, 0x8c, 0xb4, 0x49, 0x4a, 0xe4, 0xbb, 0x66, 0x98, 0x55, 0xf1, 0xee, 0x25, 0xf9, - 0x4d, 0x60, 0xf4, 0x83, 0xa9, 0xec, 0xea, 0x07, 0xfd, 0x5d, 0xfe, 0xb1, 0xee, 0x77, 0xc8, 0x86, - 0x42, 0x77, 0xc8, 0x34, 0xdb, 0x28, 0x67, 0x29, 0x7f, 0x7e, 0x75, 0x6c, 0x86, 0x3f, 0x60, 0xd7, - 0xc6, 0xa6, 0x2c, 0xa7, 0x36, 0x5d, 0xc3, 0xa6, 0x58, 0x29, 0x91, 0x47, 0x9a, 0x6d, 0xb8, 0xd4, - 0x1d, 0x83, 0x0f, 0xb8, 0xba, 0xe7, 0x43, 0xbf, 0xe9, 0x8d, 0xb2, 0xd4, 0xfc, 0xcc, 0xea, 0x82, - 0xef, 0xc7, 0xbf, 0x91, 0x80, 0x23, 0x21, 0x3f, 0x0e, 0x21, 0xb7, 0xbb, 0x73, 0xb1, 0xb3, 0xc7, - 0xf7, 0xf0, 0xf9, 0xd3, 0xcb, 0x90, 0x22, 0xf8, 0x28, 0xe6, 0xff, 0xb5, 0x14, 0x7e, 0xe9, 0x5f, - 0xfc, 0x63, 0x99, 0x3a, 0x45, 0xe7, 0x51, 0xa1, 0x4c, 0xca, 0x1f, 0xed, 0xdd, 0x7e, 0xf9, 0xe0, - 0xdb, 0xb5, 0xee, 0x9d, 0x33, 0x63, 0xab, 0x0d, 0x3f, 0x7b, 0x1e, 0xe4, 0x2e, 0xcb, 0x4f, 0x96, - 0x31, 0x77, 0x5f, 0xf0, 0xee, 0x21, 0x1d, 0x77, 0xbb, 0x9f, 0xb7, 0xdb, 0x08, 0xf6, 0xb8, 0x34, - 0xde, 0x86, 0xf1, 0xa7, 0x49, 0xdf, 0xc1, 0xa6, 0xa0, 0x48, 0xec, 0xe3, 0xfe, 0xcd, 0x19, 0x89, - 0xff, 0x2f, 0x47, 0x71, 0x0d, 0x06, 0x02, 0xf9, 0xf8, 0x42, 0xf7, 0x81, 0xa9, 0xae, 0xf3, 0xc5, - 0x54, 0x68, 0xb2, 0x50, 0x42, 0x94, 0xf2, 0x2f, 0x48, 0x70, 0x4f, 0x5b, 0xd7, 0x3c, 0xc7, 0xcf, - 0x77, 0x78, 0xf3, 0xb2, 0xe7, 0x3b, 0x7b, 0xe1, 0xb7, 0x30, 0xe7, 0x3b, 0x08, 0xfb, 0x60, 0xac, - 0xb0, 0x4c, 0x8a, 0x88, 0xb4, 0xcf, 0xc3, 0xc1, 0xa8, 0xb0, 0xc2, 0x4c, 0xcf, 0xc2, 0x50, 0xb4, - 0x80, 0xe0, 0xc5, 0xcd, 0x3e, 0xee, 0x5e, 0x0c, 0x46, 0x8a, 0x08, 0x59, 0x6d, 0x1d, 0x1a, 0xdf, - 0x3c, 0x15, 0xc8, 0xfa, 0xa8, 0x7c, 0xe9, 0xd8, 0xb3, 0x75, 0x02, 0x4a, 0xf9, 0x6b, 0x12, 0x1c, - 0x8b, 0xf6, 0x10, 0x2c, 0x7c, 0xdc, 0xbb, 0xae, 0xdf, 0x1d, 0x73, 0xa4, 0x57, 0x25, 0xb8, 0x77, - 0x17, 0x35, 0xb8, 0xcd, 0x6e, 0xc2, 0x58, 0x68, 0x77, 0x55, 0x4c, 0x14, 0xc2, 0xb9, 0x4e, 0xc4, - 0x6f, 0x0b, 0xfb, 0x9b, 0x89, 0x87, 0x89, 0x1d, 0xbf, 0xfc, 0xad, 0xc9, 0xd1, 0xf6, 0x67, 0xae, - 0x32, 0xda, 0xbe, 0x23, 0x7a, 0x07, 0xbd, 0xf0, 0x77, 0x25, 0x78, 0x28, 0xaa, 0x6a, 0x87, 0x33, - 0xd8, 0xb7, 0xd0, 0xd0, 0xfd, 0x07, 0x09, 0x4e, 0xf4, 0xa2, 0x0f, 0x1f, 0xc3, 0x0d, 0x18, 0x0d, - 0x8e, 0x45, 0x5a, 0x87, 0xf0, 0xe1, 0x3d, 0x1c, 0x6e, 0xf3, 0x58, 0x40, 0x3e, 0xb7, 0xbb, 0x30, - 0x56, 0xff, 0x4a, 0xe2, 0xf1, 0x1b, 0x76, 0x13, 0x7f, 0x60, 0xa2, 0x0b, 0x9e, 0x3d, 0x0e, 0x4c, - 0x68, 0xd1, 0x33, 0x18, 0x59, 0xf4, 0x74, 0x18, 0xf2, 0xc4, 0x1d, 0xca, 0x46, 0xd7, 0x79, 0xb6, - 0xee, 0x70, 0xce, 0xf2, 0x3e, 0x18, 0xed, 0x10, 0x5a, 0x3c, 0x31, 0xed, 0x21, 0xb2, 0x14, 0xd4, - 0x1e, 0x3c, 0xf2, 0xbf, 0x95, 0x60, 0x92, 0x76, 0xdc, 0x61, 0x18, 0xdf, 0xca, 0xf6, 0x6c, 0xf0, - 0xdc, 0xdb, 0x51, 0x2d, 0x6e, 0xd8, 0x05, 0xe8, 0x63, 0x1e, 0xca, 0x6d, 0xb9, 0x0f, 0x17, 0xe7, - 0x0c, 0x82, 0x5c, 0x3f, 0x27, 0xf4, 0xeb, 0x9c, 0x30, 0xee, 0x92, 0x1d, 0xef, 0x54, 0xc2, 0x78, - 0x59, 0xe4, 0xfa, 0xce, 0x6a, 0x70, 0xbb, 0xe9, 0x77, 0x2c, 0xd7, 0x33, 0x23, 0xbe, 0x49, 0x49, - 0xdd, 0xd7, 0x29, 0x26, 0xa9, 0xff, 0x80, 0x8f, 0x91, 0x9f, 0xd4, 0x63, 0xf4, 0x79, 0x2b, 0x26, - 0xf5, 0x3f, 0x4b, 0xc0, 0x21, 0xaa, 0x5b, 0xf8, 0xac, 0xf1, 0x4d, 0x18, 0x1b, 0x15, 0x90, 0xeb, - 0xe8, 0xea, 0x9d, 0xca, 0x45, 0x79, 0xd7, 0xd1, 0xaf, 0x46, 0x66, 0x74, 0x15, 0x50, 0xd5, 0xf5, - 0x5a, 0x3b, 0x48, 0xee, 0xbb, 0x83, 0xaa, 0xeb, 0x5d, 0xdd, 0xa5, 0x64, 0x48, 0xed, 0xdb, 0xbb, - 0xbe, 0x21, 0x41, 0xb1, 0xd3, 0x08, 0x70, 0x6f, 0x32, 0x60, 0x3c, 0x72, 0x8c, 0xde, 0xea, 0x50, - 0x8f, 0xf4, 0x72, 0x78, 0xdc, 0x12, 0xfe, 0x07, 0x1d, 0x7c, 0x57, 0x13, 0xc0, 0x3f, 0x17, 0x53, - 0x9c, 0x1f, 0x30, 0xed, 0xab, 0xb1, 0x1f, 0xfc, 0xb0, 0xff, 0xd5, 0xb6, 0x19, 0xe6, 0x2d, 0xb1, - 0xb0, 0xfb, 0xa6, 0x04, 0x13, 0x5d, 0xc4, 0x7e, 0x2b, 0x97, 0x17, 0x5b, 0x5d, 0x5d, 0xea, 0x4e, - 0xaf, 0x22, 0x4f, 0xf1, 0x78, 0x8c, 0xbe, 0xaa, 0x17, 0xda, 0x45, 0xe8, 0xf4, 0x55, 0x04, 0xf9, - 0x3d, 0x70, 0xb8, 0x23, 0x15, 0x97, 0xad, 0x04, 0xa9, 0x2d, 0xc3, 0xf5, 0xb8, 0x58, 0x0f, 0x74, - 0x13, 0xab, 0x85, 0x9a, 0xd2, 0xc8, 0x08, 0xf2, 0x94, 0xf5, 0xaa, 0x65, 0xd5, 0xb9, 0x18, 0xf2, - 0x65, 0x18, 0x09, 0xc1, 0x78, 0x27, 0x67, 0x20, 0x65, 0x5b, 0xfc, 0x3b, 0x60, 0xb9, 0x93, 0x47, - 0xba, 0x75, 0x42, 0x68, 0xb8, 0xda, 0x14, 0x5f, 0x1e, 0x03, 0xc4, 0x98, 0xd1, 0xbb, 0x5e, 0xa2, - 0x8b, 0x35, 0x18, 0x8d, 0x40, 0x79, 0x27, 0x3f, 0x04, 0x7d, 0x36, 0x85, 0xf8, 0x6f, 0x9b, 0x77, - 0xeb, 0x86, 0x62, 0xf9, 0x5f, 0x5e, 0xa2, 0xad, 0x93, 0xdf, 0x3d, 0x08, 0x69, 0xca, 0x15, 0x7d, - 0x4a, 0x02, 0x08, 0xdd, 0xdc, 0x9a, 0xea, 0xc6, 0xa6, 0xf3, 0x6e, 0x4e, 0x71, 0xba, 0x67, 0x7c, - 0x5e, 0x77, 0x9f, 0xf8, 0xb1, 0x7f, 0xf3, 0x9d, 0x9f, 0x4e, 0xdc, 0x8f, 0xe4, 0xe9, 0x2e, 0xfb, - 0x48, 0xa1, 0x60, 0xfc, 0x52, 0xe4, 0x23, 0x54, 0x8f, 0xf6, 0xd6, 0x95, 0x90, 0x6c, 0xaa, 0x57, - 0x74, 0x2e, 0xd8, 0x79, 0x2a, 0xd8, 0x69, 0xf4, 0x44, 0xbc, 0x60, 0xd3, 0xef, 0x8f, 0x46, 0xd7, - 0x07, 0xd1, 0x37, 0x25, 0x18, 0xeb, 0xb4, 0x4d, 0x80, 0xce, 0xf6, 0x26, 0x45, 0x7b, 0x41, 0x56, - 0x3c, 0xb7, 0x0f, 0x4a, 0xae, 0xca, 0x3c, 0x55, 0x65, 0x06, 0x3d, 0xb5, 0x0f, 0x55, 0xa6, 0x43, - 0xb3, 0x1f, 0xfa, 0xbf, 0x12, 0x1c, 0xdd, 0x75, 0x09, 0x8d, 0x66, 0x7a, 0x93, 0x72, 0x97, 0xca, - 0xb3, 0x58, 0x7e, 0x23, 0x2c, 0xb8, 0xc6, 0x4f, 0x53, 0x8d, 0x2f, 0xa3, 0x85, 0xfd, 0x68, 0x1c, - 0x94, 0x89, 0x61, 0xdd, 0x7f, 0x5b, 0x8a, 0xbc, 0x4e, 0xb1, 0xbb, 0x3b, 0xb5, 0xad, 0x1d, 0x63, - 0x02, 0xa3, 0x7d, 0x49, 0x20, 0x3f, 0x4b, 0x55, 0x50, 0xd0, 0xea, 0x1b, 0x1c, 0xb4, 0xe9, 0xf7, - 0x47, 0x27, 0x95, 0x0f, 0xa2, 0xff, 0x2d, 0x75, 0x7e, 0x7f, 0xe1, 0xc9, 0x5d, 0x45, 0xec, 0xbe, - 0x2e, 0x2e, 0x9e, 0xdd, 0x3b, 0x21, 0x57, 0xb2, 0x41, 0x95, 0xac, 0x21, 0x7c, 0xa7, 0x95, 0xec, - 0x38, 0x88, 0xe8, 0x77, 0x24, 0x18, 0xeb, 0xb4, 0xa2, 0x8b, 0x09, 0xcb, 0x5d, 0xd6, 0xb2, 0x31, - 0x61, 0xb9, 0xdb, 0xf2, 0x51, 0xfe, 0x21, 0xaa, 0xfc, 0x19, 0x74, 0xaa, 0x9b, 0xf2, 0xbb, 0x8e, - 0x22, 0x89, 0xc5, 0x5d, 0x57, 0x3e, 0x31, 0xb1, 0xd8, 0xcb, 0x2a, 0x30, 0x26, 0x16, 0x7b, 0x5a, - 0x78, 0xc5, 0xc7, 0xa2, 0xaf, 0x59, 0x8f, 0xc3, 0xe8, 0xa2, 0xdf, 0x90, 0x60, 0x30, 0x52, 0x97, - 0xa3, 0xc7, 0x77, 0x15, 0xb4, 0xd3, 0x2a, 0xaa, 0x78, 0x72, 0x2f, 0x24, 0x5c, 0x97, 0x05, 0xaa, - 0xcb, 0x2c, 0x9a, 0xd9, 0x8f, 0x2e, 0x4e, 0x44, 0xe2, 0x6f, 0x48, 0x30, 0xda, 0xa1, 0x84, 0x8d, - 0x89, 0xc2, 0xee, 0xa5, 0x7b, 0xf1, 0xec, 0xde, 0x09, 0xb9, 0x56, 0x17, 0xa8, 0x56, 0xef, 0x46, - 0xef, 0xda, 0x8f, 0x56, 0xa1, 0xf9, 0xf9, 0x56, 0x70, 0x3f, 0x3a, 0xd4, 0x0f, 0x3a, 0xb3, 0x47, - 0xc1, 0x84, 0x42, 0x4f, 0xee, 0x99, 0x8e, 0xeb, 0xf3, 0x0c, 0xd5, 0xe7, 0x69, 0xb4, 0xf2, 0xc6, - 0xf4, 0x69, 0x9f, 0xd6, 0xbf, 0xd2, 0xfe, 0xa9, 0x88, 0xdd, 0xbd, 0xa8, 0x63, 0xb1, 0x5a, 0x7c, - 0x62, 0x4f, 0x34, 0x5c, 0xa9, 0xb3, 0x54, 0xa9, 0x93, 0xe8, 0xb1, 0x6e, 0x4a, 0x85, 0x2e, 0xc1, - 0x1b, 0xe6, 0xa6, 0x35, 0xfd, 0x7e, 0x56, 0x02, 0x7f, 0x10, 0xfd, 0xa8, 0xb8, 0x80, 0x7c, 0x7c, - 0xd7, 0x7e, 0x43, 0x75, 0x6c, 0xf1, 0xa1, 0x1e, 0x30, 0xb9, 0x5c, 0xf7, 0x53, 0xb9, 0x26, 0xd0, - 0x91, 0x6e, 0x72, 0x91, 0x5a, 0x16, 0x7d, 0x4c, 0xf2, 0xdf, 0x59, 0x38, 0xb1, 0x3b, 0xef, 0x70, - 0xb1, 0x5b, 0x7c, 0xb8, 0x27, 0x5c, 0x2e, 0xc9, 0x03, 0x54, 0x92, 0x63, 0x68, 0xa2, 0xab, 0x24, - 0xac, 0xf4, 0xbd, 0xd3, 0x77, 0x5e, 0x3e, 0x9d, 0xe9, 0xfa, 0x59, 0x94, 0x1a, 0x36, 0xb1, 0x6b, - 0xb8, 0xfb, 0xba, 0x93, 0xdc, 0xdb, 0xc1, 0xea, 0x37, 0xd3, 0x30, 0x30, 0xcf, 0x7a, 0x59, 0xf3, - 0x34, 0xef, 0x0d, 0x2e, 0x04, 0x90, 0xcb, 0xbf, 0xb0, 0xc8, 0x3e, 0x0d, 0x1b, 0x7c, 0xec, 0x74, - 0x60, 0x4f, 0x1f, 0x0d, 0x60, 0x57, 0x20, 0xf9, 0xfb, 0xf9, 0xad, 0xfc, 0x64, 0xf6, 0xb1, 0x46, - 0x7a, 0xeb, 0x86, 0x7d, 0xd4, 0xf5, 0xc3, 0x12, 0x1c, 0xa4, 0x58, 0x41, 0xbc, 0x51, 0x4c, 0xf1, - 0x3e, 0x61, 0x57, 0x8f, 0x59, 0xd4, 0x42, 0xdb, 0x3f, 0xec, 0x33, 0xac, 0xf7, 0xf3, 0xd7, 0x5b, - 0x8e, 0x84, 0x3a, 0x6f, 0x65, 0x2b, 0x2b, 0xa3, 0xf5, 0x36, 0x4a, 0xb7, 0x65, 0xd3, 0x20, 0xb5, - 0xff, 0x4d, 0x83, 0x4b, 0x90, 0x0b, 0x65, 0xfa, 0x42, 0x3a, 0xe6, 0x15, 0xde, 0xd6, 0x9d, 0xc5, - 0x30, 0x31, 0xfa, 0xa8, 0x04, 0x07, 0x3b, 0x4e, 0x82, 0xf4, 0xff, 0xf7, 0xee, 0x71, 0xe7, 0xb2, - 0xc5, 0x38, 0x1d, 0xf9, 0xca, 0xca, 0x58, 0xb3, 0x53, 0x35, 0xb1, 0x0a, 0x83, 0x91, 0x09, 0xac, - 0x20, 0xfe, 0x0b, 0x77, 0xef, 0x2f, 0x5c, 0x44, 0x19, 0xa0, 0x22, 0x64, 0xf0, 0xb6, 0x6d, 0x39, - 0x1e, 0xae, 0xd2, 0xcb, 0x3a, 0x19, 0xc5, 0x6f, 0xcb, 0x37, 0x00, 0xb5, 0x0f, 0x2e, 0xba, 0xdc, - 0xf2, 0xdd, 0xe1, 0xfd, 0x6c, 0x60, 0xf8, 0x9f, 0x2a, 0x1e, 0x83, 0x74, 0xf8, 0x63, 0xbe, 0xac, - 0x71, 0xa7, 0x93, 0xc3, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x8c, 0x8b, 0x36, 0x50, 0x7f, 0x95, - 0x00, 0x00, + // 9278 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x74, 0x1c, 0xe7, + 0x75, 0x18, 0xce, 0xd9, 0x07, 0xb0, 0x7b, 0x17, 0x8f, 0xc5, 0x07, 0x10, 0x5a, 0x2e, 0x49, 0x00, + 0x1a, 0xc9, 0x12, 0x45, 0x49, 0x80, 0x44, 0x91, 0x14, 0xb9, 0xb4, 0x2d, 0x63, 0x81, 0x25, 0x08, + 0x12, 0x2f, 0x0d, 0x40, 0x4a, 0xb6, 0x93, 0xdf, 0x9e, 0xc1, 0xec, 0x87, 0xc5, 0x88, 0xbb, 0x33, + 0xa3, 0x99, 0x59, 0x12, 0xa0, 0xed, 0x73, 0x94, 0xf8, 0xf1, 0x8b, 0xd5, 0xa6, 0xb6, 0x9b, 0x9c, + 0xd4, 0x56, 0x2d, 0x57, 0xb6, 0xdb, 0x3a, 0x75, 0xda, 0xe6, 0xe1, 0x34, 0x6d, 0xda, 0x9e, 0xd6, + 0x6e, 0x9c, 0xc4, 0x69, 0x9b, 0x1e, 0xe9, 0xd4, 0x6d, 0xd3, 0x9c, 0x86, 0x4e, 0x65, 0x9f, 0x56, + 0x71, 0xdd, 0x26, 0x65, 0xd5, 0xf4, 0xa1, 0x3f, 0xd2, 0xf3, 0xbd, 0xe6, 0xb1, 0x0f, 0xcc, 0x2e, + 0x44, 0xca, 0xd6, 0x89, 0xfe, 0xc2, 0x7e, 0x77, 0xee, 0xbd, 0xdf, 0xbd, 0xf7, 0xbb, 0xf7, 0x7e, + 0xf7, 0x7b, 0xcc, 0x00, 0x7e, 0xe3, 0x1c, 0x4c, 0x55, 0x4d, 0xb3, 0x5a, 0xc3, 0x33, 0x96, 0x6d, + 0xba, 0xe6, 0x66, 0x63, 0x6b, 0xa6, 0x82, 0x1d, 0xcd, 0xd6, 0x2d, 0xd7, 0xb4, 0xa7, 0x29, 0x0c, + 0x0d, 0x33, 0x8c, 0x69, 0x81, 0x21, 0x2f, 0xc3, 0xc8, 0x79, 0xbd, 0x86, 0xe7, 0x3d, 0xc4, 0x75, + 0xec, 0xa2, 0x33, 0x90, 0xd8, 0xd2, 0x6b, 0x38, 0x27, 0x4d, 0xc5, 0x8f, 0x65, 0x4e, 0xdc, 0x3b, + 0xdd, 0x44, 0x34, 0x1d, 0xa6, 0x58, 0x23, 0x60, 0x85, 0x52, 0xc8, 0xdf, 0x4b, 0xc0, 0x68, 0x9b, + 0xa7, 0x08, 0x41, 0xc2, 0x50, 0xeb, 0x84, 0xa3, 0x74, 0x2c, 0xad, 0xd0, 0xdf, 0x28, 0x07, 0xfd, + 0x96, 0xaa, 0x5d, 0x55, 0xab, 0x38, 0x17, 0xa3, 0x60, 0xd1, 0x44, 0x13, 0x00, 0x15, 0x6c, 0x61, + 0xa3, 0x82, 0x0d, 0x6d, 0x37, 0x17, 0x9f, 0x8a, 0x1f, 0x4b, 0x2b, 0x01, 0x08, 0x7a, 0x10, 0x46, + 0xac, 0xc6, 0x66, 0x4d, 0xd7, 0xca, 0x01, 0x34, 0x98, 0x8a, 0x1f, 0x4b, 0x2a, 0x59, 0xf6, 0x60, + 0xde, 0x47, 0xbe, 0x1f, 0x86, 0xaf, 0x63, 0xf5, 0x6a, 0x10, 0x35, 0x43, 0x51, 0x87, 0x08, 0x38, + 0x80, 0x38, 0x07, 0x03, 0x75, 0xec, 0x38, 0x6a, 0x15, 0x97, 0xdd, 0x5d, 0x0b, 0xe7, 0x12, 0x54, + 0xfb, 0xa9, 0x16, 0xed, 0x9b, 0x35, 0xcf, 0x70, 0xaa, 0x8d, 0x5d, 0x0b, 0xa3, 0x59, 0x48, 0x63, + 0xa3, 0x51, 0x67, 0x1c, 0x92, 0x1d, 0xec, 0x57, 0x32, 0x1a, 0xf5, 0x66, 0x2e, 0x29, 0x42, 0xc6, + 0x59, 0xf4, 0x3b, 0xd8, 0xbe, 0xa6, 0x6b, 0x38, 0xd7, 0x47, 0x19, 0xdc, 0xdf, 0xc2, 0x60, 0x9d, + 0x3d, 0x6f, 0xe6, 0x21, 0xe8, 0xd0, 0x1c, 0xa4, 0xf1, 0x8e, 0x8b, 0x0d, 0x47, 0x37, 0x8d, 0x5c, + 0x3f, 0x65, 0xf2, 0xae, 0x36, 0xa3, 0x88, 0x6b, 0x95, 0x66, 0x16, 0x3e, 0x1d, 0x3a, 0x0d, 0xfd, + 0xa6, 0xe5, 0xea, 0xa6, 0xe1, 0xe4, 0x52, 0x53, 0xd2, 0xb1, 0xcc, 0x89, 0x23, 0x6d, 0x1d, 0x61, + 0x95, 0xe1, 0x28, 0x02, 0x19, 0x2d, 0x42, 0xd6, 0x31, 0x1b, 0xb6, 0x86, 0xcb, 0x9a, 0x59, 0xc1, + 0x65, 0xdd, 0xd8, 0x32, 0x73, 0x69, 0xca, 0x60, 0xb2, 0x55, 0x11, 0x8a, 0x38, 0x67, 0x56, 0xf0, + 0xa2, 0xb1, 0x65, 0x2a, 0x43, 0x4e, 0xa8, 0x8d, 0xc6, 0xa1, 0xcf, 0xd9, 0x35, 0x5c, 0x75, 0x27, + 0x37, 0x40, 0x3d, 0x84, 0xb7, 0xe4, 0x5f, 0xef, 0x83, 0xe1, 0x6e, 0x5c, 0xec, 0x1c, 0x24, 0xb7, + 0x88, 0x96, 0xb9, 0x58, 0x2f, 0x36, 0x60, 0x34, 0x61, 0x23, 0xf6, 0xed, 0xd3, 0x88, 0xb3, 0x90, + 0x31, 0xb0, 0xe3, 0xe2, 0x0a, 0xf3, 0x88, 0x78, 0x97, 0x3e, 0x05, 0x8c, 0xa8, 0xd5, 0xa5, 0x12, + 0xfb, 0x72, 0xa9, 0xa7, 0x61, 0xd8, 0x13, 0xa9, 0x6c, 0xab, 0x46, 0x55, 0xf8, 0xe6, 0x4c, 0x94, + 0x24, 0xd3, 0x25, 0x41, 0xa7, 0x10, 0x32, 0x65, 0x08, 0x87, 0xda, 0x68, 0x1e, 0xc0, 0x34, 0xb0, + 0xb9, 0x55, 0xae, 0x60, 0xad, 0x96, 0x4b, 0x75, 0xb0, 0xd2, 0x2a, 0x41, 0x69, 0xb1, 0x92, 0xc9, + 0xa0, 0x5a, 0x0d, 0x9d, 0xf5, 0x5d, 0xad, 0xbf, 0x83, 0xa7, 0x2c, 0xb3, 0x20, 0x6b, 0xf1, 0xb6, + 0xcb, 0x30, 0x64, 0x63, 0xe2, 0xf7, 0xb8, 0xc2, 0x35, 0x4b, 0x53, 0x21, 0xa6, 0x23, 0x35, 0x53, + 0x38, 0x19, 0x53, 0x6c, 0xd0, 0x0e, 0x36, 0xd1, 0x3d, 0xe0, 0x01, 0xca, 0xd4, 0xad, 0x80, 0x66, + 0xa1, 0x01, 0x01, 0x5c, 0x51, 0xeb, 0x38, 0x7f, 0x03, 0x86, 0xc2, 0xe6, 0x41, 0x63, 0x90, 0x74, + 0x5c, 0xd5, 0x76, 0xa9, 0x17, 0x26, 0x15, 0xd6, 0x40, 0x59, 0x88, 0x63, 0xa3, 0x42, 0xb3, 0x5c, + 0x52, 0x21, 0x3f, 0xd1, 0xfb, 0x7c, 0x85, 0xe3, 0x54, 0xe1, 0xfb, 0x5a, 0x47, 0x34, 0xc4, 0xb9, + 0x59, 0xef, 0xfc, 0xe3, 0x30, 0x18, 0x52, 0xa0, 0xdb, 0xae, 0xe5, 0x0f, 0xc3, 0xc1, 0xb6, 0xac, + 0xd1, 0xd3, 0x30, 0xd6, 0x30, 0x74, 0xc3, 0xc5, 0xb6, 0x65, 0x63, 0xe2, 0xb1, 0xac, 0xab, 0xdc, + 0x7f, 0xee, 0xef, 0xe0, 0x73, 0x97, 0x83, 0xd8, 0x8c, 0x8b, 0x32, 0xda, 0x68, 0x05, 0x1e, 0x4f, + 0xa7, 0x5e, 0xeb, 0xcf, 0x3e, 0xf7, 0xdc, 0x73, 0xcf, 0xc5, 0xe4, 0x6f, 0xf4, 0xc1, 0x58, 0xbb, + 0x98, 0x69, 0x1b, 0xbe, 0xe3, 0xd0, 0x67, 0x34, 0xea, 0x9b, 0xd8, 0xa6, 0x46, 0x4a, 0x2a, 0xbc, + 0x85, 0x66, 0x21, 0x59, 0x53, 0x37, 0x71, 0x2d, 0x97, 0x98, 0x92, 0x8e, 0x0d, 0x9d, 0x78, 0xb0, + 0xab, 0xa8, 0x9c, 0x5e, 0x22, 0x24, 0x0a, 0xa3, 0x44, 0xef, 0x85, 0x04, 0x4f, 0xd1, 0x84, 0xc3, + 0xf1, 0xee, 0x38, 0x90, 0x58, 0x52, 0x28, 0x1d, 0x3a, 0x0c, 0x69, 0xf2, 0x97, 0xf9, 0x46, 0x1f, + 0x95, 0x39, 0x45, 0x00, 0xc4, 0x2f, 0x50, 0x1e, 0x52, 0x34, 0x4c, 0x2a, 0x58, 0x4c, 0x6d, 0x5e, + 0x9b, 0x38, 0x56, 0x05, 0x6f, 0xa9, 0x8d, 0x9a, 0x5b, 0xbe, 0xa6, 0xd6, 0x1a, 0x98, 0x3a, 0x7c, + 0x5a, 0x19, 0xe0, 0xc0, 0x2b, 0x04, 0x86, 0x26, 0x21, 0xc3, 0xa2, 0x4a, 0x37, 0x2a, 0x78, 0x87, + 0x66, 0xcf, 0xa4, 0xc2, 0x02, 0x6d, 0x91, 0x40, 0x48, 0xf7, 0xcf, 0x38, 0xa6, 0x21, 0x5c, 0x93, + 0x76, 0x41, 0x00, 0xb4, 0xfb, 0xc7, 0x9b, 0x13, 0xf7, 0xd1, 0xf6, 0xea, 0xb5, 0xc4, 0xd2, 0xfd, + 0x30, 0x4c, 0x31, 0x1e, 0xe3, 0x43, 0xaf, 0xd6, 0x72, 0x23, 0x53, 0xd2, 0xb1, 0x94, 0x32, 0xc4, + 0xc0, 0xab, 0x1c, 0x2a, 0xff, 0x5a, 0x0c, 0x12, 0x34, 0xb1, 0x0c, 0x43, 0x66, 0xe3, 0xfd, 0x6b, + 0xa5, 0xf2, 0xfc, 0xea, 0xe5, 0xe2, 0x52, 0x29, 0x2b, 0xa1, 0x21, 0x00, 0x0a, 0x38, 0xbf, 0xb4, + 0x3a, 0xbb, 0x91, 0x8d, 0x79, 0xed, 0xc5, 0x95, 0x8d, 0xd3, 0x27, 0xb3, 0x71, 0x8f, 0xe0, 0x32, + 0x03, 0x24, 0x82, 0x08, 0x8f, 0x9d, 0xc8, 0x26, 0x51, 0x16, 0x06, 0x18, 0x83, 0xc5, 0xa7, 0x4b, + 0xf3, 0xa7, 0x4f, 0x66, 0xfb, 0xc2, 0x90, 0xc7, 0x4e, 0x64, 0xfb, 0xd1, 0x20, 0xa4, 0x29, 0xa4, + 0xb8, 0xba, 0xba, 0x94, 0x4d, 0x79, 0x3c, 0xd7, 0x37, 0x94, 0xc5, 0x95, 0x85, 0x6c, 0xda, 0xe3, + 0xb9, 0xa0, 0xac, 0x5e, 0x5e, 0xcb, 0x82, 0xc7, 0x61, 0xb9, 0xb4, 0xbe, 0x3e, 0xbb, 0x50, 0xca, + 0x66, 0x3c, 0x8c, 0xe2, 0xfb, 0x37, 0x4a, 0xeb, 0xd9, 0x81, 0x90, 0x58, 0x8f, 0x9d, 0xc8, 0x0e, + 0x7a, 0x5d, 0x94, 0x56, 0x2e, 0x2f, 0x67, 0x87, 0xd0, 0x08, 0x0c, 0xb2, 0x2e, 0x84, 0x10, 0xc3, + 0x4d, 0xa0, 0xd3, 0x27, 0xb3, 0x59, 0x5f, 0x10, 0xc6, 0x65, 0x24, 0x04, 0x38, 0x7d, 0x32, 0x8b, + 0xe4, 0x39, 0x48, 0x52, 0x37, 0x44, 0x08, 0x86, 0x96, 0x66, 0x8b, 0xa5, 0xa5, 0xf2, 0xea, 0xda, + 0xc6, 0xe2, 0xea, 0xca, 0xec, 0x52, 0x56, 0xf2, 0x61, 0x4a, 0xe9, 0xc9, 0xcb, 0x8b, 0x4a, 0x69, + 0x3e, 0x1b, 0x0b, 0xc2, 0xd6, 0x4a, 0xb3, 0x1b, 0xa5, 0xf9, 0x6c, 0x5c, 0xd6, 0x60, 0xac, 0x5d, + 0x42, 0x6d, 0x1b, 0x42, 0x01, 0x5f, 0x88, 0x75, 0xf0, 0x05, 0xca, 0xab, 0xd9, 0x17, 0xe4, 0xef, + 0xc6, 0x60, 0xb4, 0xcd, 0xa4, 0xd2, 0xb6, 0x93, 0x27, 0x20, 0xc9, 0x7c, 0x99, 0x4d, 0xb3, 0x0f, + 0xb4, 0x9d, 0x9d, 0xa8, 0x67, 0xb7, 0x4c, 0xb5, 0x94, 0x2e, 0x58, 0x6a, 0xc4, 0x3b, 0x94, 0x1a, + 0x84, 0x45, 0x8b, 0xc3, 0xfe, 0x78, 0x4b, 0xf2, 0x67, 0xf3, 0xe3, 0xe9, 0x6e, 0xe6, 0x47, 0x0a, + 0xeb, 0x6d, 0x12, 0x48, 0xb6, 0x99, 0x04, 0xce, 0xc1, 0x48, 0x0b, 0xa3, 0xae, 0x93, 0xf1, 0x47, + 0x25, 0xc8, 0x75, 0x32, 0x4e, 0x44, 0x4a, 0x8c, 0x85, 0x52, 0xe2, 0xb9, 0x66, 0x0b, 0xde, 0xdd, + 0x79, 0x10, 0x5a, 0xc6, 0xfa, 0x2b, 0x12, 0x8c, 0xb7, 0x2f, 0x29, 0xdb, 0xca, 0xf0, 0x5e, 0xe8, + 0xab, 0x63, 0x77, 0xdb, 0x14, 0x65, 0xd5, 0x7d, 0x6d, 0x26, 0x6b, 0xf2, 0xb8, 0x79, 0xb0, 0x39, + 0x55, 0x70, 0xb6, 0x8f, 0x77, 0xaa, 0x0b, 0x99, 0x34, 0x2d, 0x92, 0x7e, 0x32, 0x06, 0x07, 0xdb, + 0x32, 0x6f, 0x2b, 0xe8, 0x51, 0x00, 0xdd, 0xb0, 0x1a, 0x2e, 0x2b, 0x9d, 0x58, 0x26, 0x4e, 0x53, + 0x08, 0x4d, 0x5e, 0x24, 0xcb, 0x36, 0x5c, 0xef, 0x79, 0x9c, 0x3e, 0x07, 0x06, 0xa2, 0x08, 0x67, + 0x7c, 0x41, 0x13, 0x54, 0xd0, 0x89, 0x0e, 0x9a, 0xb6, 0x38, 0xe6, 0x23, 0x90, 0xd5, 0x6a, 0x3a, + 0x36, 0xdc, 0xb2, 0xe3, 0xda, 0x58, 0xad, 0xeb, 0x46, 0x95, 0x4e, 0x35, 0xa9, 0x42, 0x72, 0x4b, + 0xad, 0x39, 0x58, 0x19, 0x66, 0x8f, 0xd7, 0xc5, 0x53, 0x42, 0x41, 0x1d, 0xc8, 0x0e, 0x50, 0xf4, + 0x85, 0x28, 0xd8, 0x63, 0x8f, 0x42, 0xfe, 0x4c, 0x1a, 0x32, 0x81, 0x02, 0x1c, 0xdd, 0x0d, 0x03, + 0xcf, 0xa8, 0xd7, 0xd4, 0xb2, 0x58, 0x54, 0x31, 0x4b, 0x64, 0x08, 0x6c, 0x8d, 0x2f, 0xac, 0x1e, + 0x81, 0x31, 0x8a, 0x62, 0x36, 0x5c, 0x6c, 0x97, 0xb5, 0x9a, 0xea, 0x38, 0xd4, 0x68, 0x29, 0x8a, + 0x8a, 0xc8, 0xb3, 0x55, 0xf2, 0x68, 0x4e, 0x3c, 0x41, 0xa7, 0x60, 0x94, 0x52, 0xd4, 0x1b, 0x35, + 0x57, 0xb7, 0x6a, 0xb8, 0x4c, 0x96, 0x79, 0x0e, 0x9d, 0x72, 0x3c, 0xc9, 0x46, 0x08, 0xc6, 0x32, + 0x47, 0x20, 0x12, 0x39, 0x68, 0x1e, 0x8e, 0x52, 0xb2, 0x2a, 0x36, 0xb0, 0xad, 0xba, 0xb8, 0x8c, + 0x9f, 0x6d, 0xa8, 0x35, 0xa7, 0xac, 0x1a, 0x95, 0xf2, 0xb6, 0xea, 0x6c, 0xe7, 0xc6, 0x08, 0x83, + 0x62, 0x2c, 0x27, 0x29, 0x87, 0x08, 0xe2, 0x02, 0xc7, 0x2b, 0x51, 0xb4, 0x59, 0xa3, 0x72, 0x41, + 0x75, 0xb6, 0x51, 0x01, 0xc6, 0x29, 0x17, 0xc7, 0xb5, 0x75, 0xa3, 0x5a, 0xd6, 0xb6, 0xb1, 0x76, + 0xb5, 0xdc, 0x70, 0xb7, 0xce, 0xe4, 0x0e, 0x07, 0xfb, 0xa7, 0x12, 0xae, 0x53, 0x9c, 0x39, 0x82, + 0x72, 0xd9, 0xdd, 0x3a, 0x83, 0xd6, 0x61, 0x80, 0x0c, 0x46, 0x5d, 0xbf, 0x81, 0xcb, 0x5b, 0xa6, + 0x4d, 0xe7, 0xd0, 0xa1, 0x36, 0xa9, 0x29, 0x60, 0xc1, 0xe9, 0x55, 0x4e, 0xb0, 0x6c, 0x56, 0x70, + 0x21, 0xb9, 0xbe, 0x56, 0x2a, 0xcd, 0x2b, 0x19, 0xc1, 0xe5, 0xbc, 0x69, 0x13, 0x87, 0xaa, 0x9a, + 0x9e, 0x81, 0x33, 0xcc, 0xa1, 0xaa, 0xa6, 0x30, 0xef, 0x29, 0x18, 0xd5, 0x34, 0xa6, 0xb3, 0xae, + 0x95, 0xf9, 0x62, 0xcc, 0xc9, 0x65, 0x43, 0xc6, 0xd2, 0xb4, 0x05, 0x86, 0xc0, 0x7d, 0xdc, 0x41, + 0x67, 0xe1, 0xa0, 0x6f, 0xac, 0x20, 0xe1, 0x48, 0x8b, 0x96, 0xcd, 0xa4, 0xa7, 0x60, 0xd4, 0xda, + 0x6d, 0x25, 0x44, 0xa1, 0x1e, 0xad, 0xdd, 0x66, 0xb2, 0xc7, 0x61, 0xcc, 0xda, 0xb6, 0x5a, 0xe9, + 0x8e, 0x07, 0xe9, 0x90, 0xb5, 0x6d, 0x35, 0x13, 0xbe, 0x8b, 0xae, 0xcc, 0x6d, 0xac, 0xa9, 0x2e, + 0xae, 0xe4, 0xee, 0x0a, 0xa2, 0x07, 0x1e, 0xa0, 0x69, 0xc8, 0x6a, 0x5a, 0x19, 0x1b, 0xea, 0x66, + 0x0d, 0x97, 0x55, 0x1b, 0x1b, 0xaa, 0x93, 0x9b, 0xa4, 0xc8, 0x09, 0xd7, 0x6e, 0x60, 0x65, 0x48, + 0xd3, 0x4a, 0xf4, 0xe1, 0x2c, 0x7d, 0x86, 0x8e, 0xc3, 0x88, 0xb9, 0xf9, 0x8c, 0xc6, 0x3c, 0xb2, + 0x6c, 0xd9, 0x78, 0x4b, 0xdf, 0xc9, 0xdd, 0x4b, 0xcd, 0x3b, 0x4c, 0x1e, 0x50, 0x7f, 0x5c, 0xa3, + 0x60, 0xf4, 0x00, 0x64, 0x35, 0x67, 0x5b, 0xb5, 0x2d, 0x9a, 0x92, 0x1d, 0x4b, 0xd5, 0x70, 0xee, + 0x5d, 0x0c, 0x95, 0xc1, 0x57, 0x04, 0x98, 0x44, 0x84, 0x73, 0x5d, 0xdf, 0x72, 0x05, 0xc7, 0xfb, + 0x59, 0x44, 0x50, 0x18, 0xe7, 0x76, 0x0c, 0xb2, 0xc4, 0x12, 0xa1, 0x8e, 0x8f, 0x51, 0xb4, 0x21, + 0x6b, 0xdb, 0x0a, 0xf6, 0x7b, 0x0f, 0x0c, 0x12, 0x4c, 0xbf, 0xd3, 0x07, 0x58, 0xe1, 0x66, 0x6d, + 0x07, 0x7a, 0x3c, 0x09, 0xe3, 0x04, 0xa9, 0x8e, 0x5d, 0xb5, 0xa2, 0xba, 0x6a, 0x00, 0xfb, 0x21, + 0x8a, 0x4d, 0xcc, 0xbe, 0xcc, 0x1f, 0x86, 0xe4, 0xb4, 0x1b, 0x9b, 0xbb, 0x9e, 0x63, 0x3d, 0xcc, + 0xe4, 0x24, 0x30, 0xe1, 0x5a, 0x77, 0xac, 0x38, 0x97, 0x0b, 0x30, 0x10, 0xf4, 0x7b, 0x94, 0x06, + 0xe6, 0xf9, 0x59, 0x89, 0x14, 0x41, 0x73, 0xab, 0xf3, 0xa4, 0x7c, 0xf9, 0x40, 0x29, 0x1b, 0x23, + 0x65, 0xd4, 0xd2, 0xe2, 0x46, 0xa9, 0xac, 0x5c, 0x5e, 0xd9, 0x58, 0x5c, 0x2e, 0x65, 0xe3, 0x81, + 0xc2, 0xfe, 0x62, 0x22, 0x75, 0x5f, 0xf6, 0x7e, 0xf9, 0x95, 0x18, 0x0c, 0x85, 0x57, 0x6a, 0xe8, + 0xdd, 0x70, 0x97, 0xd8, 0x56, 0x71, 0xb0, 0x5b, 0xbe, 0xae, 0xdb, 0x34, 0x20, 0xeb, 0x2a, 0x9b, + 0x1c, 0x3d, 0xff, 0x19, 0xe3, 0x58, 0xeb, 0xd8, 0x7d, 0x4a, 0xb7, 0x49, 0xb8, 0xd5, 0x55, 0x17, + 0x2d, 0xc1, 0xa4, 0x61, 0x96, 0x1d, 0x57, 0x35, 0x2a, 0xaa, 0x5d, 0x29, 0xfb, 0x1b, 0x5a, 0x65, + 0x55, 0xd3, 0xb0, 0xe3, 0x98, 0x6c, 0x22, 0xf4, 0xb8, 0x1c, 0x31, 0xcc, 0x75, 0x8e, 0xec, 0xcf, + 0x10, 0xb3, 0x1c, 0xb5, 0xc9, 0x7d, 0xe3, 0x9d, 0xdc, 0xf7, 0x30, 0xa4, 0xeb, 0xaa, 0x55, 0xc6, + 0x86, 0x6b, 0xef, 0xd2, 0xfa, 0x3c, 0xa5, 0xa4, 0xea, 0xaa, 0x55, 0x22, 0xed, 0xb7, 0x64, 0x99, + 0x74, 0x31, 0x91, 0x4a, 0x65, 0xd3, 0x17, 0x13, 0xa9, 0x74, 0x16, 0xe4, 0x57, 0xe3, 0x30, 0x10, + 0xac, 0xd7, 0xc9, 0xf2, 0x47, 0xa3, 0x33, 0x96, 0x44, 0x73, 0xda, 0x3d, 0x7b, 0x56, 0xf7, 0xd3, + 0x73, 0x64, 0x2a, 0x2b, 0xf4, 0xb1, 0xe2, 0x58, 0x61, 0x94, 0xa4, 0x8c, 0x20, 0xce, 0x86, 0x59, + 0x31, 0x92, 0x52, 0x78, 0x0b, 0x2d, 0x40, 0xdf, 0x33, 0x0e, 0xe5, 0xdd, 0x47, 0x79, 0xdf, 0xbb, + 0x37, 0xef, 0x8b, 0xeb, 0x94, 0x79, 0xfa, 0xe2, 0x7a, 0x79, 0x65, 0x55, 0x59, 0x9e, 0x5d, 0x52, + 0x38, 0x39, 0x3a, 0x04, 0x89, 0x9a, 0x7a, 0x63, 0x37, 0x3c, 0xe9, 0x51, 0x50, 0xb7, 0x83, 0x70, + 0x08, 0x12, 0xd7, 0xb1, 0x7a, 0x35, 0x3c, 0xd5, 0x50, 0xd0, 0x1d, 0x0c, 0x86, 0x19, 0x48, 0x52, + 0x7b, 0x21, 0x00, 0x6e, 0xb1, 0xec, 0x01, 0x94, 0x82, 0xc4, 0xdc, 0xaa, 0x42, 0x02, 0x22, 0x0b, + 0x03, 0x0c, 0x5a, 0x5e, 0x5b, 0x2c, 0xcd, 0x95, 0xb2, 0x31, 0xf9, 0x14, 0xf4, 0x31, 0x23, 0x90, + 0x60, 0xf1, 0xcc, 0x90, 0x3d, 0xc0, 0x9b, 0x9c, 0x87, 0x24, 0x9e, 0x5e, 0x5e, 0x2e, 0x96, 0x94, + 0x6c, 0x2c, 0x3c, 0xd4, 0x89, 0x6c, 0x52, 0x76, 0x60, 0x20, 0x58, 0x87, 0xbf, 0x35, 0x8b, 0xf1, + 0xaf, 0x4b, 0x90, 0x09, 0xd4, 0xd5, 0xa4, 0x20, 0x52, 0x6b, 0x35, 0xf3, 0x7a, 0x59, 0xad, 0xe9, + 0xaa, 0xc3, 0x5d, 0x03, 0x28, 0x68, 0x96, 0x40, 0xba, 0x1d, 0xba, 0xb7, 0x28, 0x44, 0x92, 0xd9, + 0x3e, 0xf9, 0x0b, 0x12, 0x64, 0x9b, 0x0b, 0xdb, 0x26, 0x31, 0xa5, 0x1f, 0xa6, 0x98, 0xf2, 0xe7, + 0x25, 0x18, 0x0a, 0x57, 0xb3, 0x4d, 0xe2, 0xdd, 0xfd, 0x43, 0x15, 0xef, 0x0f, 0x63, 0x30, 0x18, + 0xaa, 0x61, 0xbb, 0x95, 0xee, 0x59, 0x18, 0xd1, 0x2b, 0xb8, 0x6e, 0x99, 0x2e, 0x36, 0xb4, 0xdd, + 0x72, 0x0d, 0x5f, 0xc3, 0xb5, 0x9c, 0x4c, 0x93, 0xc6, 0xcc, 0xde, 0x55, 0xf2, 0xf4, 0xa2, 0x4f, + 0xb7, 0x44, 0xc8, 0x0a, 0xa3, 0x8b, 0xf3, 0xa5, 0xe5, 0xb5, 0xd5, 0x8d, 0xd2, 0xca, 0xdc, 0xfb, + 0xcb, 0x97, 0x57, 0x2e, 0xad, 0xac, 0x3e, 0xb5, 0xa2, 0x64, 0xf5, 0x26, 0xb4, 0x3b, 0x18, 0xf6, + 0x6b, 0x90, 0x6d, 0x16, 0x0a, 0xdd, 0x05, 0xed, 0xc4, 0xca, 0x1e, 0x40, 0xa3, 0x30, 0xbc, 0xb2, + 0x5a, 0x5e, 0x5f, 0x9c, 0x2f, 0x95, 0x4b, 0xe7, 0xcf, 0x97, 0xe6, 0x36, 0xd6, 0xd9, 0xbe, 0x87, + 0x87, 0xbd, 0x11, 0x0a, 0x70, 0xf9, 0x85, 0x38, 0x8c, 0xb6, 0x91, 0x04, 0xcd, 0xf2, 0x15, 0x0b, + 0x5b, 0x44, 0x3d, 0xdc, 0x8d, 0xf4, 0xd3, 0xa4, 0x66, 0x58, 0x53, 0x6d, 0x97, 0x2f, 0x70, 0x1e, + 0x00, 0x62, 0x25, 0xc3, 0xd5, 0xb7, 0x74, 0x6c, 0xf3, 0xfd, 0x24, 0xb6, 0x8c, 0x19, 0xf6, 0xe1, + 0x6c, 0x4b, 0xe9, 0x21, 0x40, 0x96, 0xe9, 0xe8, 0xae, 0x7e, 0x0d, 0x97, 0x75, 0x43, 0x6c, 0x3e, + 0x91, 0x65, 0x4d, 0x42, 0xc9, 0x8a, 0x27, 0x8b, 0x86, 0xeb, 0x61, 0x1b, 0xb8, 0xaa, 0x36, 0x61, + 0x93, 0x64, 0x1e, 0x57, 0xb2, 0xe2, 0x89, 0x87, 0x7d, 0x37, 0x0c, 0x54, 0xcc, 0x06, 0xa9, 0xf5, + 0x18, 0x1e, 0x99, 0x3b, 0x24, 0x25, 0xc3, 0x60, 0x1e, 0x0a, 0xaf, 0xe2, 0xfd, 0x5d, 0xaf, 0x01, + 0x25, 0xc3, 0x60, 0x0c, 0xe5, 0x7e, 0x18, 0x56, 0xab, 0x55, 0x9b, 0x30, 0x17, 0x8c, 0xd8, 0xba, + 0x64, 0xc8, 0x03, 0x53, 0xc4, 0xfc, 0x45, 0x48, 0x09, 0x3b, 0x90, 0xa9, 0x9a, 0x58, 0xa2, 0x6c, + 0xb1, 0xc5, 0x76, 0xec, 0x58, 0x5a, 0x49, 0x19, 0xe2, 0xe1, 0xdd, 0x30, 0xa0, 0x3b, 0x65, 0x7f, + 0x13, 0x3f, 0x36, 0x15, 0x3b, 0x96, 0x52, 0x32, 0xba, 0xe3, 0x6d, 0x80, 0xca, 0x5f, 0x89, 0xc1, + 0x50, 0xf8, 0x10, 0x02, 0xcd, 0x43, 0xaa, 0x66, 0x6a, 0x2a, 0x75, 0x2d, 0x76, 0x02, 0x76, 0x2c, + 0xe2, 0xdc, 0x62, 0x7a, 0x89, 0xe3, 0x2b, 0x1e, 0x65, 0xfe, 0x5f, 0x49, 0x90, 0x12, 0x60, 0x34, + 0x0e, 0x09, 0x4b, 0x75, 0xb7, 0x29, 0xbb, 0x64, 0x31, 0x96, 0x95, 0x14, 0xda, 0x26, 0x70, 0xc7, + 0x52, 0x0d, 0xea, 0x02, 0x1c, 0x4e, 0xda, 0x64, 0x5c, 0x6b, 0x58, 0xad, 0xd0, 0x45, 0x8f, 0x59, + 0xaf, 0x63, 0xc3, 0x75, 0xc4, 0xb8, 0x72, 0xf8, 0x1c, 0x07, 0xa3, 0x07, 0x61, 0xc4, 0xb5, 0x55, + 0xbd, 0x16, 0xc2, 0x4d, 0x50, 0xdc, 0xac, 0x78, 0xe0, 0x21, 0x17, 0xe0, 0x90, 0xe0, 0x5b, 0xc1, + 0xae, 0xaa, 0x6d, 0xe3, 0x8a, 0x4f, 0xd4, 0x47, 0x37, 0x37, 0xee, 0xe2, 0x08, 0xf3, 0xfc, 0xb9, + 0xa0, 0x95, 0x5f, 0x91, 0x60, 0x44, 0x2c, 0xd3, 0x2a, 0x9e, 0xb1, 0x96, 0x01, 0x54, 0xc3, 0x30, + 0xdd, 0xa0, 0xb9, 0x5a, 0x5d, 0xb9, 0x85, 0x6e, 0x7a, 0xd6, 0x23, 0x52, 0x02, 0x0c, 0xf2, 0x75, + 0x00, 0xff, 0x49, 0x47, 0xb3, 0x4d, 0x42, 0x86, 0x9f, 0x30, 0xd1, 0x63, 0x4a, 0xb6, 0xb0, 0x07, + 0x06, 0x22, 0xeb, 0x39, 0x34, 0x06, 0xc9, 0x4d, 0x5c, 0xd5, 0x0d, 0xbe, 0x6f, 0xcc, 0x1a, 0x62, + 0xfb, 0x25, 0xe1, 0x6d, 0xbf, 0x14, 0x3f, 0x25, 0xc1, 0xa8, 0x66, 0xd6, 0x9b, 0xe5, 0x2d, 0x66, + 0x9b, 0x76, 0x17, 0x9c, 0x0b, 0xd2, 0x07, 0xde, 0x5b, 0xd5, 0xdd, 0xed, 0xc6, 0xe6, 0xb4, 0x66, + 0xd6, 0x67, 0xaa, 0x66, 0x4d, 0x35, 0xaa, 0xfe, 0x39, 0x2b, 0xfd, 0xa1, 0x3d, 0x5c, 0xc5, 0xc6, + 0xc3, 0x55, 0x33, 0x70, 0xea, 0x7a, 0xce, 0xff, 0xf9, 0xbf, 0x25, 0xe9, 0x4b, 0xb1, 0xf8, 0xc2, + 0x5a, 0xf1, 0xab, 0xb1, 0xfc, 0x02, 0xeb, 0x6e, 0x4d, 0x98, 0x47, 0xc1, 0x5b, 0x35, 0xac, 0x11, + 0x95, 0xe1, 0xfb, 0x0f, 0xc2, 0x58, 0xd5, 0xac, 0x9a, 0x94, 0xe3, 0x0c, 0xf9, 0xc5, 0x4f, 0x6e, + 0xd3, 0x1e, 0x34, 0x1f, 0x79, 0xcc, 0x5b, 0x58, 0x81, 0x51, 0x8e, 0x5c, 0xa6, 0x47, 0x47, 0x6c, + 0x61, 0x83, 0xf6, 0xdc, 0x55, 0xcb, 0xfd, 0xf2, 0xf7, 0xe8, 0x84, 0xae, 0x8c, 0x70, 0x52, 0xf2, + 0x8c, 0xad, 0x7d, 0x0a, 0x0a, 0x1c, 0x0c, 0xf1, 0x63, 0x61, 0x8b, 0xed, 0x08, 0x8e, 0xbf, 0xc9, + 0x39, 0x8e, 0x06, 0x38, 0xae, 0x73, 0xd2, 0xc2, 0x1c, 0x0c, 0xf6, 0xc2, 0xeb, 0xb7, 0x38, 0xaf, + 0x01, 0x1c, 0x64, 0xb2, 0x00, 0xc3, 0x94, 0x89, 0xd6, 0x70, 0x5c, 0xb3, 0x4e, 0x73, 0xe2, 0xde, + 0x6c, 0x7e, 0xfb, 0x7b, 0x2c, 0x8e, 0x86, 0x08, 0xd9, 0x9c, 0x47, 0x55, 0x28, 0x00, 0x3d, 0x2d, + 0xab, 0x60, 0xad, 0x16, 0xc1, 0xe1, 0x5b, 0x5c, 0x10, 0x0f, 0xbf, 0x70, 0x05, 0xc6, 0xc8, 0x6f, + 0x9a, 0xb2, 0x82, 0x92, 0x44, 0x6f, 0xc1, 0xe5, 0x5e, 0xf9, 0x28, 0x0b, 0xd5, 0x51, 0x8f, 0x41, + 0x40, 0xa6, 0xc0, 0x28, 0x56, 0xb1, 0xeb, 0x62, 0xdb, 0x29, 0xab, 0xb5, 0x76, 0xe2, 0x05, 0xf6, + 0x30, 0x72, 0x9f, 0xfb, 0x41, 0x78, 0x14, 0x17, 0x18, 0xe5, 0x6c, 0xad, 0x56, 0xb8, 0x0c, 0x77, + 0xb5, 0xf1, 0x8a, 0x2e, 0x78, 0xbe, 0xc0, 0x79, 0x8e, 0xb5, 0x78, 0x06, 0x61, 0xbb, 0x06, 0x02, + 0xee, 0x8d, 0x65, 0x17, 0x3c, 0xff, 0x2a, 0xe7, 0x89, 0x38, 0xad, 0x18, 0x52, 0xc2, 0xf1, 0x22, + 0x8c, 0x5c, 0xc3, 0xf6, 0xa6, 0xe9, 0xf0, 0x7d, 0xa3, 0x2e, 0xd8, 0x7d, 0x9e, 0xb3, 0x1b, 0xe6, + 0x84, 0x74, 0x23, 0x89, 0xf0, 0x3a, 0x0b, 0xa9, 0x2d, 0x55, 0xc3, 0x5d, 0xb0, 0x78, 0x91, 0xb3, + 0xe8, 0x27, 0xf8, 0x84, 0x74, 0x16, 0x06, 0xaa, 0x26, 0x9f, 0xb5, 0xa2, 0xc9, 0xbf, 0xc0, 0xc9, + 0x33, 0x82, 0x86, 0xb3, 0xb0, 0x4c, 0xab, 0x51, 0x23, 0x53, 0x5a, 0x34, 0x8b, 0xbf, 0x26, 0x58, + 0x08, 0x1a, 0xce, 0xa2, 0x07, 0xb3, 0xbe, 0x24, 0x58, 0x38, 0x01, 0x7b, 0x3e, 0x01, 0x19, 0xd3, + 0xa8, 0xed, 0x9a, 0x46, 0x37, 0x42, 0x7c, 0x91, 0x73, 0x00, 0x4e, 0x42, 0x18, 0x9c, 0x83, 0x74, + 0xb7, 0x03, 0xf1, 0x37, 0x7e, 0x20, 0xc2, 0x43, 0x8c, 0xc0, 0x02, 0x0c, 0x8b, 0x04, 0xa5, 0x9b, + 0x46, 0x17, 0x2c, 0xfe, 0x26, 0x67, 0x31, 0x14, 0x20, 0xe3, 0x6a, 0xb8, 0xd8, 0x71, 0xab, 0xb8, + 0x1b, 0x26, 0x5f, 0x11, 0x6a, 0x70, 0x12, 0x6e, 0xca, 0x4d, 0x6c, 0x68, 0xdb, 0xdd, 0x71, 0xf8, + 0x79, 0x61, 0x4a, 0x41, 0x43, 0x58, 0xcc, 0xc1, 0x60, 0x5d, 0xb5, 0x9d, 0x6d, 0xb5, 0xd6, 0xd5, + 0x70, 0xfc, 0x2d, 0xce, 0x63, 0xc0, 0x23, 0xe2, 0x16, 0x69, 0x18, 0xbd, 0xb0, 0xf9, 0xaa, 0xb0, + 0x48, 0x80, 0x8c, 0x87, 0x9e, 0xe3, 0xd2, 0x4d, 0xb6, 0x5e, 0xb8, 0xfd, 0x82, 0x08, 0x3d, 0x46, + 0xbb, 0x1c, 0xe4, 0x78, 0x0e, 0xd2, 0x8e, 0x7e, 0xa3, 0x2b, 0x36, 0x7f, 0x5b, 0x8c, 0x34, 0x25, + 0x20, 0xc4, 0xef, 0x87, 0x43, 0x6d, 0xa7, 0x89, 0x2e, 0x98, 0xfd, 0x1d, 0xce, 0x6c, 0xbc, 0xcd, + 0x54, 0xc1, 0x53, 0x42, 0xaf, 0x2c, 0xff, 0xae, 0x48, 0x09, 0xb8, 0x89, 0xd7, 0x1a, 0x59, 0x47, + 0x38, 0xea, 0x56, 0x6f, 0x56, 0xfb, 0x45, 0x61, 0x35, 0x46, 0x1b, 0xb2, 0xda, 0x06, 0x8c, 0x73, + 0x8e, 0xbd, 0x8d, 0xeb, 0x2f, 0x89, 0xc4, 0xca, 0xa8, 0x2f, 0x87, 0x47, 0xf7, 0x83, 0x90, 0xf7, + 0xcc, 0x29, 0x0a, 0x56, 0xa7, 0x5c, 0x57, 0xad, 0x2e, 0x38, 0xff, 0x32, 0xe7, 0x2c, 0x32, 0xbe, + 0x57, 0xf1, 0x3a, 0xcb, 0xaa, 0x45, 0x98, 0x3f, 0x0d, 0x39, 0xc1, 0xbc, 0x61, 0xd8, 0x58, 0x33, + 0xab, 0x86, 0x7e, 0x03, 0x57, 0xba, 0x60, 0xfd, 0x2b, 0x4d, 0x43, 0x75, 0x39, 0x40, 0x4e, 0x38, + 0x2f, 0x42, 0xd6, 0xab, 0x55, 0xca, 0x7a, 0xdd, 0x32, 0x6d, 0x37, 0x82, 0xe3, 0xd7, 0xc4, 0x48, + 0x79, 0x74, 0x8b, 0x94, 0xac, 0x50, 0x02, 0x76, 0xf2, 0xdc, 0xad, 0x4b, 0xfe, 0x2a, 0x67, 0x34, + 0xe8, 0x53, 0xf1, 0xc4, 0xa1, 0x99, 0x75, 0x4b, 0xb5, 0xbb, 0xc9, 0x7f, 0x7f, 0x4f, 0x24, 0x0e, + 0x4e, 0xc2, 0x13, 0x87, 0xbb, 0x6b, 0x61, 0x32, 0xdb, 0x77, 0xc1, 0xe1, 0xd7, 0x44, 0xe2, 0x10, + 0x34, 0x9c, 0x85, 0x28, 0x18, 0xba, 0x60, 0xf1, 0xf7, 0x05, 0x0b, 0x41, 0x43, 0x58, 0x3c, 0xe9, + 0x4f, 0xb4, 0x36, 0xae, 0xea, 0x8e, 0x6b, 0xb3, 0x32, 0x79, 0x6f, 0x56, 0xff, 0xe0, 0x07, 0xe1, + 0x22, 0x4c, 0x09, 0x90, 0x92, 0x4c, 0xc4, 0xb7, 0x5d, 0xe9, 0x2a, 0x2a, 0x5a, 0xb0, 0x5f, 0x17, + 0x99, 0x28, 0x40, 0x46, 0x64, 0x0b, 0x54, 0x88, 0xc4, 0xec, 0x1a, 0x59, 0x3b, 0x74, 0xc1, 0xee, + 0x1f, 0x36, 0x09, 0xb7, 0x2e, 0x68, 0x09, 0xcf, 0x40, 0xfd, 0xd3, 0x30, 0xae, 0xe2, 0xdd, 0xae, + 0xbc, 0xf3, 0x1f, 0x35, 0xd5, 0x3f, 0x97, 0x19, 0x25, 0xcb, 0x21, 0xc3, 0x4d, 0xf5, 0x14, 0x8a, + 0xba, 0x67, 0x94, 0xfb, 0x89, 0xd7, 0xb9, 0xbe, 0xe1, 0x72, 0xaa, 0xb0, 0x44, 0x9c, 0x3c, 0x5c, + 0xf4, 0x44, 0x33, 0xfb, 0xe8, 0xeb, 0x9e, 0x9f, 0x87, 0x6a, 0x9e, 0xc2, 0x79, 0x18, 0x0c, 0x15, + 0x3c, 0xd1, 0xac, 0x3e, 0xc6, 0x59, 0x0d, 0x04, 0xeb, 0x9d, 0xc2, 0x29, 0x48, 0x90, 0xe2, 0x25, + 0x9a, 0xfc, 0xe3, 0x9c, 0x9c, 0xa2, 0x17, 0xde, 0x03, 0x29, 0x51, 0xb4, 0x44, 0x93, 0x7e, 0x82, + 0x93, 0x7a, 0x24, 0x84, 0x5c, 0x14, 0x2c, 0xd1, 0xe4, 0xff, 0xbf, 0x20, 0x17, 0x24, 0x84, 0xbc, + 0x7b, 0x13, 0x7e, 0xfd, 0x2f, 0x24, 0xf8, 0xa4, 0x23, 0x6c, 0x77, 0x0e, 0xfa, 0x79, 0xa5, 0x12, + 0x4d, 0xfd, 0x49, 0xde, 0xb9, 0xa0, 0x28, 0x3c, 0x0e, 0xc9, 0x2e, 0x0d, 0xfe, 0xd3, 0x9c, 0x94, + 0xe1, 0x17, 0xe6, 0x20, 0x13, 0xa8, 0x4e, 0xa2, 0xc9, 0xff, 0x12, 0x27, 0x0f, 0x52, 0x11, 0xd1, + 0x79, 0x75, 0x12, 0xcd, 0xe0, 0x53, 0x42, 0x74, 0x4e, 0x41, 0xcc, 0x26, 0x0a, 0x93, 0x68, 0xea, + 0x4f, 0x0b, 0xab, 0x0b, 0x92, 0xc2, 0x13, 0x90, 0xf6, 0x26, 0x9b, 0x68, 0xfa, 0xcf, 0x70, 0x7a, + 0x9f, 0x86, 0x58, 0x20, 0x30, 0xd9, 0x45, 0xb3, 0xf8, 0xcb, 0xc2, 0x02, 0x01, 0x2a, 0x12, 0x46, + 0xcd, 0x05, 0x4c, 0x34, 0xa7, 0x9f, 0x11, 0x61, 0xd4, 0x54, 0xbf, 0x90, 0xd1, 0xa4, 0x39, 0x3f, + 0x9a, 0xc5, 0xcf, 0x8a, 0xd1, 0xa4, 0xf8, 0x44, 0x8c, 0xe6, 0x8a, 0x20, 0x9a, 0xc7, 0x5f, 0x11, + 0x62, 0x34, 0x15, 0x04, 0x85, 0x35, 0x40, 0xad, 0xd5, 0x40, 0x34, 0xbf, 0xcf, 0x72, 0x7e, 0x23, + 0x2d, 0xc5, 0x40, 0xe1, 0x29, 0x18, 0x6f, 0x5f, 0x09, 0x44, 0x73, 0xfd, 0xdc, 0xeb, 0x4d, 0x6b, + 0xb7, 0x60, 0x21, 0x50, 0xd8, 0xf0, 0xa7, 0x94, 0x60, 0x15, 0x10, 0xcd, 0xf6, 0x85, 0xd7, 0xc3, + 0x89, 0x3b, 0x58, 0x04, 0x14, 0x66, 0x01, 0xfc, 0x09, 0x38, 0x9a, 0xd7, 0xe7, 0x39, 0xaf, 0x00, + 0x11, 0x09, 0x0d, 0x3e, 0xff, 0x46, 0xd3, 0xbf, 0x28, 0x42, 0x83, 0x53, 0x90, 0xd0, 0x10, 0x53, + 0x6f, 0x34, 0xf5, 0x17, 0x44, 0x68, 0x08, 0x12, 0xe2, 0xd9, 0x81, 0xd9, 0x2d, 0x9a, 0xc3, 0x17, + 0x85, 0x67, 0x07, 0xa8, 0x0a, 0x2b, 0x30, 0xd2, 0x32, 0x21, 0x46, 0xb3, 0xfa, 0x12, 0x67, 0x95, + 0x6d, 0x9e, 0x0f, 0x83, 0x93, 0x17, 0x9f, 0x0c, 0xa3, 0xb9, 0x7d, 0xb9, 0x69, 0xf2, 0xe2, 0x73, + 0x61, 0xe1, 0x1c, 0xa4, 0x8c, 0x46, 0xad, 0x46, 0x82, 0x07, 0xed, 0x7d, 0x37, 0x30, 0xf7, 0x47, + 0x6f, 0x70, 0xeb, 0x08, 0x82, 0xc2, 0x29, 0x48, 0xe2, 0xfa, 0x26, 0xae, 0x44, 0x51, 0x7e, 0xff, + 0x0d, 0x91, 0x30, 0x09, 0x76, 0xe1, 0x09, 0x00, 0xb6, 0x35, 0x42, 0x8f, 0x07, 0x23, 0x68, 0xff, + 0xcb, 0x1b, 0xfc, 0x32, 0x8e, 0x4f, 0xe2, 0x33, 0x60, 0x57, 0x7b, 0xf6, 0x66, 0xf0, 0x83, 0x30, + 0x03, 0x3a, 0x22, 0x67, 0xa1, 0xff, 0x19, 0xc7, 0x34, 0x5c, 0xb5, 0x1a, 0x45, 0xfd, 0x5f, 0x39, + 0xb5, 0xc0, 0x27, 0x06, 0xab, 0x9b, 0x36, 0x76, 0xd5, 0xaa, 0x13, 0x45, 0xfb, 0xdf, 0x38, 0xad, + 0x47, 0x40, 0x88, 0x35, 0xd5, 0x71, 0xbb, 0xd1, 0xfb, 0x8f, 0x05, 0xb1, 0x20, 0x20, 0x42, 0x93, + 0xdf, 0x57, 0xf1, 0x6e, 0x14, 0xed, 0x9f, 0x08, 0xa1, 0x39, 0x7e, 0xe1, 0x3d, 0x90, 0x26, 0x3f, + 0xd9, 0x0d, 0xbb, 0x08, 0xe2, 0xff, 0xce, 0x89, 0x7d, 0x0a, 0xd2, 0xb3, 0xe3, 0x56, 0x5c, 0x3d, + 0xda, 0xd8, 0xb7, 0xf8, 0x48, 0x0b, 0xfc, 0xc2, 0x2c, 0x64, 0x1c, 0xb7, 0x52, 0x69, 0xf0, 0xfa, + 0x34, 0x82, 0xfc, 0x7f, 0xbc, 0xe1, 0x6d, 0x59, 0x78, 0x34, 0x64, 0xb4, 0xaf, 0x5f, 0x75, 0x2d, + 0x93, 0x1e, 0x81, 0x44, 0x71, 0x78, 0x9d, 0x73, 0x08, 0x90, 0x14, 0xe6, 0x60, 0x80, 0xe8, 0x62, + 0x63, 0x0b, 0xd3, 0xf3, 0xaa, 0x08, 0x16, 0xff, 0x93, 0x1b, 0x20, 0x44, 0x54, 0xfc, 0xf1, 0x6f, + 0xbd, 0x3a, 0x21, 0xbd, 0xfc, 0xea, 0x84, 0xf4, 0x87, 0xaf, 0x4e, 0x48, 0x9f, 0xfe, 0xee, 0xc4, + 0x81, 0x97, 0xbf, 0x3b, 0x71, 0xe0, 0xf7, 0xbe, 0x3b, 0x71, 0xa0, 0xfd, 0xb6, 0x31, 0x2c, 0x98, + 0x0b, 0x26, 0xdb, 0x30, 0xfe, 0x80, 0x1c, 0xda, 0x2e, 0xae, 0x9a, 0xfe, 0x6e, 0xad, 0xb7, 0xc8, + 0x81, 0x8f, 0xc5, 0x61, 0x42, 0x33, 0x9d, 0xba, 0xe9, 0xcc, 0x6c, 0xaa, 0x0e, 0x9e, 0xb9, 0xf6, + 0xe8, 0x26, 0x76, 0xd5, 0x47, 0x67, 0x34, 0x53, 0x37, 0xf8, 0xb6, 0xef, 0x28, 0x7b, 0x3e, 0x4d, + 0x9e, 0x4f, 0xf3, 0xe7, 0xf9, 0xb6, 0x3b, 0xc4, 0xf2, 0x02, 0x24, 0xe6, 0x4c, 0xdd, 0x40, 0x63, + 0x90, 0xac, 0x60, 0xc3, 0xac, 0xf3, 0x0b, 0x60, 0xac, 0x81, 0xee, 0x81, 0x3e, 0xb5, 0x6e, 0x36, + 0x0c, 0x97, 0x6d, 0x97, 0x17, 0x33, 0xdf, 0xba, 0x39, 0x79, 0xe0, 0xf7, 0x6f, 0x4e, 0xc6, 0x17, + 0x0d, 0x57, 0xe1, 0x8f, 0x0a, 0x89, 0xd7, 0x5e, 0x9a, 0x94, 0xe4, 0x8b, 0xd0, 0x3f, 0x8f, 0xb5, + 0xfd, 0xf0, 0x9a, 0xc7, 0x5a, 0x13, 0xaf, 0x07, 0x20, 0xb5, 0x68, 0xb8, 0xec, 0x8a, 0xde, 0x51, + 0x88, 0xeb, 0x06, 0xbb, 0xf5, 0xd1, 0xd4, 0x3f, 0x81, 0x13, 0xd4, 0x79, 0xac, 0x79, 0xa8, 0x15, + 0xac, 0x35, 0xa3, 0x12, 0xf6, 0x04, 0x5e, 0x9c, 0xff, 0xbd, 0xff, 0x38, 0x71, 0xe0, 0xb9, 0x57, + 0x27, 0x0e, 0x74, 0x1a, 0x9f, 0x90, 0xf9, 0xb9, 0x89, 0xd9, 0x9f, 0x87, 0x9d, 0xca, 0xd5, 0x19, + 0x12, 0x5a, 0xce, 0x66, 0x1f, 0xbb, 0xd5, 0x0c, 0x9f, 0x8e, 0xc1, 0x64, 0xf3, 0x96, 0x3a, 0xf1, + 0x63, 0xc7, 0x55, 0xeb, 0x56, 0xa7, 0x17, 0xa7, 0xce, 0x41, 0x7a, 0x43, 0xe0, 0xa0, 0x1c, 0xf4, + 0x3b, 0x58, 0x33, 0x8d, 0x8a, 0x43, 0x45, 0x8e, 0x2b, 0xa2, 0x49, 0x0c, 0x68, 0xa8, 0x86, 0xe9, + 0xf0, 0xeb, 0x9a, 0xac, 0x51, 0xfc, 0x39, 0xa9, 0x37, 0xc7, 0x1a, 0xf2, 0xba, 0xa2, 0xe6, 0x59, + 0x93, 0x3e, 0xf0, 0xe0, 0x5e, 0xa7, 0x11, 0x54, 0x3d, 0x5f, 0x85, 0xc0, 0xd1, 0xc3, 0x44, 0xf3, + 0xd1, 0xc3, 0x53, 0xb8, 0x56, 0xbb, 0x64, 0x98, 0xd7, 0x8d, 0x8d, 0x90, 0x49, 0x7e, 0x57, 0x82, + 0x29, 0x7a, 0x61, 0xdd, 0xae, 0xeb, 0x86, 0x3b, 0x53, 0xd3, 0x37, 0x9d, 0x99, 0x4d, 0xdd, 0x75, + 0x98, 0xe5, 0xb8, 0x4d, 0xc6, 0x7c, 0x8c, 0x69, 0x82, 0x31, 0x4d, 0x30, 0xe4, 0x93, 0x90, 0x2a, + 0xea, 0xee, 0xac, 0x6d, 0xab, 0xbb, 0x08, 0x41, 0x82, 0xc0, 0xb8, 0x51, 0xe8, 0x6f, 0x62, 0x11, + 0x5c, 0xc3, 0x75, 0x87, 0x1e, 0x7a, 0x25, 0x14, 0xd6, 0x28, 0x5e, 0xee, 0x38, 0x92, 0xe7, 0x02, + 0x9a, 0x06, 0x44, 0x0a, 0xfc, 0x64, 0x91, 0xd0, 0x4e, 0x5c, 0x4f, 0x9f, 0xaf, 0x26, 0xe0, 0x68, + 0x00, 0x41, 0xb3, 0x77, 0x2d, 0x97, 0x86, 0xa4, 0xb9, 0xc5, 0x95, 0x19, 0x09, 0x28, 0xc3, 0x1e, + 0x77, 0x08, 0xb3, 0x2d, 0x48, 0xae, 0x11, 0x3a, 0xa2, 0x88, 0x6b, 0xba, 0x6a, 0x8d, 0x6b, 0xc7, + 0x1a, 0x04, 0xca, 0x2e, 0xed, 0xc7, 0x18, 0x54, 0x17, 0xf7, 0xf5, 0x6b, 0x58, 0xdd, 0x62, 0x77, + 0x1f, 0xe3, 0xf4, 0xec, 0x33, 0x45, 0x00, 0xf4, 0x9a, 0xe3, 0x18, 0x24, 0xd5, 0x06, 0x3b, 0xb6, + 0x8b, 0x1f, 0x1b, 0x50, 0x58, 0x43, 0xbe, 0x04, 0xfd, 0xfc, 0xa8, 0x00, 0x65, 0x21, 0x7e, 0x15, + 0xef, 0xd2, 0x7e, 0x06, 0x14, 0xf2, 0x13, 0x4d, 0x43, 0x92, 0x0a, 0xcf, 0x2f, 0x75, 0xe7, 0xa6, + 0x5b, 0xa4, 0x9f, 0xa6, 0x42, 0x2a, 0x0c, 0x4d, 0xbe, 0x08, 0xa9, 0x79, 0xb3, 0xae, 0x1b, 0x66, + 0x98, 0x5b, 0x9a, 0x71, 0xa3, 0x32, 0x5b, 0x0d, 0x1e, 0xce, 0x0a, 0x6b, 0xa0, 0x71, 0xe8, 0x63, + 0x77, 0x61, 0xf9, 0xd1, 0x23, 0x6f, 0xc9, 0x73, 0xd0, 0x4f, 0x79, 0xaf, 0x5a, 0x64, 0x7c, 0xbd, + 0x8b, 0x48, 0x69, 0xfe, 0x66, 0x04, 0x67, 0x1f, 0xf3, 0x85, 0x45, 0x90, 0xa8, 0xa8, 0xae, 0xca, + 0xf5, 0xa6, 0xbf, 0xe5, 0xf7, 0x42, 0x8a, 0x33, 0x71, 0xd0, 0x09, 0x88, 0x9b, 0x96, 0xc3, 0x0f, + 0x0f, 0xf3, 0x9d, 0x54, 0x59, 0xb5, 0x8a, 0x09, 0x92, 0x08, 0x14, 0x82, 0x5c, 0x54, 0x3a, 0xfa, + 0xcb, 0x99, 0xde, 0xfd, 0x85, 0x75, 0xe3, 0x39, 0xcb, 0x17, 0x63, 0x30, 0x11, 0x78, 0x7a, 0x0d, + 0xdb, 0xa4, 0x5e, 0x0e, 0xb9, 0x3e, 0x0a, 0x08, 0xc9, 0x9f, 0x77, 0x70, 0x97, 0xf7, 0x40, 0x7c, + 0xd6, 0xb2, 0x50, 0x1e, 0x52, 0xec, 0x90, 0xd0, 0x64, 0xfe, 0x92, 0x50, 0xbc, 0x36, 0x79, 0xe6, + 0x98, 0x5b, 0xee, 0x75, 0xd5, 0xf6, 0x5e, 0x17, 0x11, 0x6d, 0xf9, 0x2c, 0xa4, 0xe7, 0x4c, 0xc3, + 0xc1, 0x86, 0xd3, 0xa0, 0xa1, 0xb3, 0x59, 0x33, 0xb5, 0xab, 0x9c, 0x03, 0x6b, 0x10, 0x83, 0xab, + 0x96, 0x45, 0x29, 0x13, 0x0a, 0xf9, 0xc9, 0x52, 0x6f, 0x71, 0xbd, 0xa3, 0x89, 0xce, 0xf6, 0x6e, + 0x22, 0xae, 0xa4, 0x67, 0xa3, 0x3f, 0x90, 0xe0, 0x48, 0x6b, 0x40, 0x5d, 0xc5, 0xbb, 0x4e, 0xaf, + 0xf1, 0x74, 0x06, 0xd2, 0x6b, 0xf4, 0x9d, 0xcd, 0x4b, 0x78, 0x17, 0xe5, 0xa1, 0x1f, 0x57, 0x4e, + 0x9c, 0x3a, 0xf5, 0xe8, 0x59, 0xe6, 0xed, 0x17, 0x0e, 0x28, 0x02, 0x50, 0x48, 0x11, 0xad, 0x5e, + 0xfb, 0xe2, 0xa4, 0x54, 0x4c, 0x42, 0xdc, 0x69, 0xd4, 0xef, 0xa8, 0x0f, 0xbc, 0x90, 0x0c, 0x25, + 0x40, 0x96, 0x51, 0xaf, 0xa9, 0x35, 0xbd, 0xa2, 0xfa, 0x6f, 0xd3, 0x66, 0x03, 0x3a, 0x52, 0x8c, + 0xf6, 0x2a, 0xe6, 0xf7, 0xb4, 0x94, 0xfc, 0x2b, 0x12, 0x0c, 0x5c, 0x11, 0x9c, 0xd7, 0xb1, 0x8b, + 0xce, 0x01, 0x78, 0x3d, 0x89, 0xb0, 0x38, 0x3c, 0xdd, 0xdc, 0xd7, 0xb4, 0x47, 0xa3, 0x04, 0xd0, + 0xd1, 0xe3, 0xd4, 0xd1, 0x2c, 0xd3, 0xe1, 0xaf, 0x08, 0x44, 0x90, 0x7a, 0xc8, 0xe8, 0x21, 0x40, + 0x34, 0x83, 0x95, 0xaf, 0x99, 0xae, 0x6e, 0x54, 0xcb, 0x96, 0x79, 0x9d, 0xbf, 0x78, 0x15, 0x57, + 0xb2, 0xf4, 0xc9, 0x15, 0xfa, 0x60, 0x8d, 0xc0, 0x89, 0xd0, 0x69, 0x8f, 0x0b, 0x99, 0xff, 0xd4, + 0x4a, 0xc5, 0xc6, 0x8e, 0xc3, 0x93, 0x94, 0x68, 0xa2, 0x73, 0xd0, 0x6f, 0x35, 0x36, 0xcb, 0x22, + 0x23, 0x64, 0x4e, 0x1c, 0x69, 0x17, 0xdf, 0x62, 0xfc, 0x79, 0x84, 0xf7, 0x59, 0x8d, 0x4d, 0xe2, + 0x0d, 0x77, 0xc3, 0x40, 0x1b, 0x61, 0x32, 0xd7, 0x7c, 0x39, 0xe8, 0xab, 0xc0, 0x5c, 0x83, 0xb2, + 0x65, 0xeb, 0xa6, 0xad, 0xbb, 0xbb, 0xf4, 0x84, 0x3f, 0xae, 0x64, 0xc5, 0x83, 0x35, 0x0e, 0x97, + 0xaf, 0xc2, 0xf0, 0xba, 0x5e, 0xb7, 0xe8, 0x9d, 0x14, 0x2e, 0xf9, 0x29, 0x5f, 0x3e, 0x29, 0x5a, + 0xbe, 0x8e, 0x92, 0xc5, 0x5a, 0x24, 0x2b, 0x3e, 0xd9, 0xd1, 0x3b, 0x1f, 0xef, 0xdd, 0x3b, 0xc3, + 0x05, 0xcb, 0x9f, 0xe6, 0x43, 0xc1, 0xc7, 0xa7, 0xfb, 0x40, 0x7a, 0xea, 0xd6, 0x31, 0xa3, 0xca, + 0x9e, 0x7c, 0x64, 0x11, 0x90, 0xdf, 0x7b, 0x5a, 0xcd, 0x47, 0x24, 0xd2, 0x7c, 0x64, 0x90, 0xc9, + 0x67, 0x61, 0x70, 0x4d, 0xb5, 0xdd, 0x75, 0xec, 0x5e, 0xc0, 0x6a, 0x05, 0xdb, 0xe1, 0x79, 0x77, + 0x50, 0xcc, 0xbb, 0x08, 0x12, 0x74, 0x72, 0x65, 0xf3, 0x0e, 0xfd, 0x2d, 0x6f, 0x43, 0x82, 0xde, + 0x03, 0xf2, 0xe6, 0x64, 0x4e, 0xc1, 0xe6, 0x64, 0x92, 0x4d, 0x77, 0x5d, 0xec, 0x70, 0x12, 0xd6, + 0x40, 0x27, 0xc5, 0xcc, 0x1a, 0xdf, 0x7b, 0x66, 0xe5, 0xae, 0xca, 0xe7, 0xd7, 0x1a, 0xf4, 0x17, + 0x49, 0x32, 0x5e, 0x9c, 0xf7, 0x04, 0x91, 0x7c, 0x41, 0xd0, 0x32, 0x0c, 0x5b, 0xaa, 0xed, 0xd2, + 0x0b, 0xd0, 0xdb, 0x54, 0x0b, 0x1e, 0x0d, 0x93, 0xad, 0xb1, 0x19, 0x52, 0x96, 0xf7, 0x32, 0x68, + 0x05, 0x81, 0xf2, 0x7f, 0x4a, 0x40, 0x1f, 0x37, 0xc6, 0x7b, 0xa0, 0x9f, 0x9b, 0x95, 0xfb, 0xef, + 0xd1, 0xe9, 0xd6, 0xa9, 0x69, 0xda, 0x9b, 0x42, 0x38, 0x3f, 0x41, 0x83, 0xee, 0x83, 0x94, 0xb6, + 0xad, 0xea, 0x46, 0x59, 0xaf, 0x88, 0x5a, 0xfe, 0xd5, 0x9b, 0x93, 0xfd, 0x73, 0x04, 0xb6, 0x38, + 0xaf, 0xf4, 0xd3, 0x87, 0x8b, 0x15, 0x52, 0x0b, 0x6c, 0x63, 0xbd, 0xba, 0xed, 0xf2, 0x18, 0xe4, + 0x2d, 0x74, 0x06, 0x12, 0xc4, 0x65, 0xf8, 0xeb, 0x31, 0xf9, 0x96, 0x35, 0x96, 0x57, 0xb7, 0x16, + 0x53, 0xa4, 0xe3, 0x4f, 0x7f, 0x67, 0x52, 0x52, 0x28, 0x05, 0x9a, 0x83, 0xc1, 0x9a, 0xea, 0xb8, + 0x65, 0x3a, 0x87, 0x91, 0xee, 0x93, 0x94, 0xc5, 0xa1, 0x56, 0x83, 0x70, 0xc3, 0x72, 0xd1, 0x33, + 0x84, 0x8a, 0x81, 0x2a, 0xe8, 0x18, 0x64, 0x29, 0x13, 0xcd, 0xac, 0xd7, 0x75, 0x97, 0x55, 0x57, + 0x7d, 0xd4, 0xee, 0x43, 0x04, 0x3e, 0x47, 0xc1, 0xb4, 0xc6, 0x3a, 0x0c, 0x69, 0x7a, 0x21, 0x9f, + 0xa2, 0xb0, 0xcb, 0x67, 0x29, 0x02, 0xa0, 0x0f, 0xef, 0x87, 0x61, 0x3f, 0x83, 0x32, 0x94, 0x14, + 0xe3, 0xe2, 0x83, 0x29, 0xe2, 0x23, 0x30, 0x66, 0xe0, 0x1d, 0x7a, 0x1d, 0x2e, 0x84, 0x9d, 0xa6, + 0xd8, 0x88, 0x3c, 0xbb, 0x12, 0xa6, 0x78, 0x17, 0x0c, 0x69, 0xc2, 0xf8, 0x0c, 0x17, 0x28, 0xee, + 0xa0, 0x07, 0xa5, 0x68, 0x87, 0x20, 0xa5, 0x5a, 0x16, 0x43, 0xc8, 0xf0, 0x0c, 0x6a, 0x59, 0xf4, + 0xd1, 0x71, 0x18, 0xa1, 0x3a, 0xda, 0xd8, 0x69, 0xd4, 0x5c, 0xce, 0x64, 0x80, 0xe2, 0x0c, 0x93, + 0x07, 0x0a, 0x83, 0x53, 0xdc, 0x7b, 0x60, 0x10, 0x5f, 0xd3, 0x2b, 0xd8, 0xd0, 0x30, 0xc3, 0x1b, + 0xa4, 0x78, 0x03, 0x02, 0x48, 0x91, 0x1e, 0x00, 0x2f, 0x33, 0x96, 0x45, 0xd6, 0x1e, 0x62, 0xfc, + 0x04, 0x7c, 0x96, 0x81, 0xe5, 0x87, 0x20, 0x31, 0xaf, 0xba, 0x2a, 0x29, 0x31, 0xdc, 0x1d, 0x36, + 0x15, 0x0d, 0x28, 0xe4, 0x67, 0xdb, 0x70, 0x7b, 0x2d, 0x06, 0x89, 0x2b, 0xa6, 0x8b, 0xd1, 0x63, + 0x81, 0xb2, 0x70, 0xa8, 0x9d, 0x8f, 0xaf, 0xeb, 0x55, 0x03, 0x57, 0x96, 0x9d, 0x6a, 0xe0, 0x8d, + 0x5a, 0xdf, 0xc5, 0x62, 0x21, 0x17, 0x1b, 0x83, 0xa4, 0x6d, 0x36, 0x8c, 0x8a, 0xb8, 0xcb, 0x45, + 0x1b, 0xa8, 0x04, 0x29, 0xcf, 0x73, 0x12, 0x51, 0x9e, 0x33, 0x4c, 0x3c, 0x87, 0xf8, 0x35, 0x07, + 0x28, 0xfd, 0x9b, 0xdc, 0x81, 0x8a, 0x90, 0xf6, 0x52, 0x1e, 0xf7, 0xc0, 0xee, 0x9c, 0xd8, 0x27, + 0x23, 0x53, 0x90, 0xe7, 0x0f, 0x9e, 0x41, 0x99, 0x17, 0x66, 0xbd, 0x07, 0xdc, 0xa2, 0x21, 0x57, + 0xe3, 0x6f, 0xf7, 0xf6, 0x53, 0xbd, 0x7c, 0x57, 0x63, 0x6f, 0xf8, 0x1e, 0x81, 0xb4, 0xa3, 0x57, + 0x0d, 0xd5, 0x6d, 0xd8, 0x98, 0x7b, 0xa3, 0x0f, 0x90, 0x3f, 0x13, 0x83, 0x3e, 0xe6, 0xdd, 0x01, + 0xbb, 0x49, 0xed, 0xed, 0x16, 0xeb, 0x64, 0xb7, 0xf8, 0xfe, 0xed, 0x36, 0x0b, 0xe0, 0x09, 0xe3, + 0xf0, 0x97, 0x2e, 0xdb, 0xd4, 0x19, 0x4c, 0xc4, 0x75, 0xbd, 0xca, 0x83, 0x37, 0x40, 0xe4, 0x79, + 0x50, 0x32, 0x90, 0x27, 0xcf, 0x41, 0x7a, 0x53, 0x77, 0xcb, 0x2a, 0x59, 0x3c, 0x52, 0x13, 0x66, + 0x4e, 0x4c, 0x4c, 0xb7, 0x5b, 0x65, 0x4e, 0x8b, 0x25, 0xa6, 0x92, 0xda, 0xe4, 0xbf, 0xe4, 0x3f, + 0x90, 0x48, 0xad, 0xcc, 0x3b, 0x44, 0xb3, 0x30, 0x28, 0x14, 0x2d, 0x6f, 0xd5, 0xd4, 0x2a, 0x77, + 0xc6, 0xa3, 0x1d, 0xb5, 0x3d, 0x5f, 0x53, 0xab, 0x4a, 0x86, 0x2b, 0x48, 0x1a, 0xed, 0x07, 0x36, + 0xd6, 0x61, 0x60, 0x43, 0x9e, 0x14, 0xdf, 0x9f, 0x27, 0x85, 0xc6, 0x3c, 0xd1, 0x3c, 0xe6, 0x5f, + 0x8b, 0xd1, 0x35, 0x93, 0x65, 0x3a, 0x6a, 0xed, 0xad, 0x08, 0xb1, 0xc3, 0x90, 0xb6, 0xcc, 0x5a, + 0x99, 0x3d, 0x61, 0x97, 0x26, 0x53, 0x96, 0x59, 0x53, 0x5a, 0xfc, 0x28, 0x79, 0x9b, 0xe2, 0xaf, + 0xef, 0x36, 0x58, 0xad, 0xbf, 0xd9, 0x6a, 0x36, 0x0c, 0x30, 0x53, 0xf0, 0x09, 0xf3, 0x11, 0x62, + 0x03, 0x3a, 0x03, 0x4b, 0xad, 0x13, 0x3c, 0x13, 0x9b, 0x61, 0x2a, 0x1c, 0x8f, 0x50, 0xb0, 0xf9, + 0xa5, 0xdd, 0x62, 0x3b, 0xe8, 0xe7, 0x0a, 0xc7, 0x93, 0x7f, 0x4e, 0x02, 0x58, 0x22, 0x96, 0xa5, + 0xfa, 0x92, 0xa9, 0xce, 0xa1, 0x22, 0x94, 0x43, 0x3d, 0x4f, 0x74, 0x1a, 0x34, 0xde, 0xff, 0x80, + 0x13, 0x94, 0x7b, 0x0e, 0x06, 0x7d, 0x67, 0x74, 0xb0, 0x10, 0x66, 0x62, 0x8f, 0xe2, 0x7e, 0x1d, + 0xbb, 0xca, 0xc0, 0xb5, 0x40, 0x4b, 0xfe, 0x67, 0x12, 0xa4, 0xa9, 0x4c, 0xcb, 0xd8, 0x55, 0x43, + 0x63, 0x28, 0xed, 0x7f, 0x0c, 0x8f, 0x02, 0x30, 0x36, 0x8e, 0x7e, 0x03, 0x73, 0xcf, 0x4a, 0x53, + 0xc8, 0xba, 0x7e, 0x03, 0xa3, 0xd3, 0x9e, 0xc1, 0xe3, 0x7b, 0x1b, 0x5c, 0x14, 0xff, 0xdc, 0xec, + 0x77, 0x41, 0x3f, 0xfd, 0xea, 0xc9, 0x8e, 0xc3, 0xeb, 0xf9, 0x3e, 0xa3, 0x51, 0xdf, 0xd8, 0x71, + 0xe4, 0x67, 0xa0, 0x7f, 0x63, 0x87, 0x6d, 0xc1, 0x1c, 0x86, 0xb4, 0x6d, 0x9a, 0x7c, 0xe2, 0x67, + 0x05, 0x57, 0x8a, 0x00, 0xe8, 0x3c, 0x27, 0xb6, 0x1d, 0x62, 0xfe, 0xb6, 0x83, 0xbf, 0x6f, 0x12, + 0xef, 0x6a, 0xdf, 0xe4, 0xf8, 0xbf, 0x93, 0x20, 0x13, 0xc8, 0x0f, 0xe8, 0x51, 0x38, 0x58, 0x5c, + 0x5a, 0x9d, 0xbb, 0x54, 0x5e, 0x9c, 0x2f, 0x9f, 0x5f, 0x9a, 0x5d, 0xf0, 0x5f, 0x0b, 0xc8, 0x8f, + 0x3f, 0xff, 0xe2, 0x14, 0x0a, 0xe0, 0x5e, 0x36, 0xae, 0x1a, 0xe6, 0x75, 0x03, 0xcd, 0xc0, 0x58, + 0x98, 0x64, 0xb6, 0xb8, 0x5e, 0x5a, 0xd9, 0xc8, 0x4a, 0xf9, 0x83, 0xcf, 0xbf, 0x38, 0x35, 0x12, + 0xa0, 0x98, 0xdd, 0x74, 0xb0, 0xe1, 0xb6, 0x12, 0xcc, 0xad, 0x2e, 0x2f, 0x2f, 0x6e, 0x64, 0x63, + 0x2d, 0x04, 0x7c, 0x06, 0x78, 0x00, 0x46, 0xc2, 0x04, 0x2b, 0x8b, 0x4b, 0xd9, 0x78, 0x1e, 0x3d, + 0xff, 0xe2, 0xd4, 0x50, 0x00, 0x7b, 0x45, 0xaf, 0xe5, 0x53, 0x3f, 0xf5, 0xe5, 0x89, 0x03, 0x3f, + 0xff, 0xd7, 0x27, 0x24, 0xa2, 0xd9, 0x60, 0x28, 0x47, 0xa0, 0x87, 0xe0, 0xae, 0xf5, 0xc5, 0x85, + 0x95, 0xd2, 0x7c, 0x79, 0x79, 0x7d, 0xa1, 0xcc, 0x3e, 0x87, 0xe0, 0x69, 0x37, 0xfc, 0xfc, 0x8b, + 0x53, 0x19, 0xae, 0x52, 0x27, 0xec, 0x35, 0xa5, 0x74, 0x65, 0x75, 0xa3, 0x94, 0x95, 0x18, 0xf6, + 0x9a, 0x8d, 0xaf, 0x99, 0x2e, 0xfb, 0x2c, 0xd2, 0x23, 0x70, 0xa8, 0x0d, 0xb6, 0xa7, 0xd8, 0xc8, + 0xf3, 0x2f, 0x4e, 0x0d, 0xae, 0xd9, 0x98, 0xc5, 0x0f, 0xa5, 0x98, 0x86, 0x5c, 0x2b, 0xc5, 0xea, + 0xda, 0xea, 0xfa, 0xec, 0x52, 0x76, 0x2a, 0x9f, 0x7d, 0xfe, 0xc5, 0xa9, 0x01, 0x91, 0x0c, 0x09, + 0xbe, 0xaf, 0xd9, 0x9d, 0x5c, 0x78, 0xfd, 0xc5, 0x18, 0x4c, 0xb4, 0x5c, 0xbe, 0xe6, 0x47, 0x16, + 0x9d, 0x36, 0x8a, 0x0b, 0x90, 0x9a, 0x17, 0x27, 0x21, 0xbd, 0xee, 0x13, 0xff, 0x6c, 0x8f, 0xfb, + 0xc4, 0x83, 0xa2, 0x27, 0xb1, 0x4d, 0x7c, 0x3c, 0x7a, 0x9b, 0x58, 0xc8, 0xbf, 0x8f, 0x5d, 0xe2, + 0x8f, 0x3f, 0x0a, 0xf7, 0xf2, 0xcd, 0x75, 0xc7, 0x55, 0xaf, 0xea, 0x46, 0xd5, 0x3b, 0xc2, 0xe0, + 0x6d, 0x6e, 0x94, 0x71, 0x7e, 0x8a, 0x21, 0xa0, 0x7b, 0x1e, 0x64, 0xe4, 0xf7, 0x5c, 0xdb, 0x46, + 0xaf, 0x59, 0x23, 0x46, 0x28, 0x1f, 0x71, 0xe4, 0x22, 0x7f, 0x52, 0x82, 0xa1, 0x0b, 0xba, 0xe3, + 0x9a, 0xb6, 0xae, 0xa9, 0x35, 0xfa, 0x96, 0xc3, 0xe9, 0x6e, 0x27, 0x8d, 0xa6, 0x1c, 0xf6, 0x04, + 0xf4, 0x5d, 0x53, 0x6b, 0x2c, 0x5b, 0xc7, 0xe9, 0x47, 0x19, 0xda, 0x1b, 0xc2, 0xcf, 0xd9, 0x82, + 0x01, 0x23, 0x93, 0x7f, 0x31, 0x06, 0xc3, 0x34, 0xca, 0x1d, 0xf6, 0xb9, 0x1e, 0xb2, 0x42, 0x2d, + 0x42, 0xc2, 0x56, 0x5d, 0xbe, 0xe9, 0x5a, 0x9c, 0xe6, 0x87, 0x23, 0xf7, 0x45, 0x1f, 0x78, 0x4c, + 0xcf, 0x63, 0x4d, 0xa1, 0xb4, 0xe8, 0xc7, 0x20, 0x55, 0x57, 0x77, 0xca, 0x94, 0x0f, 0x5b, 0xf7, + 0xcd, 0xf6, 0xc6, 0xe7, 0xd6, 0xcd, 0xc9, 0xe1, 0x5d, 0xb5, 0x5e, 0x2b, 0xc8, 0x82, 0x8f, 0xac, + 0xf4, 0xd7, 0xd5, 0x1d, 0x22, 0x22, 0xb2, 0x60, 0x98, 0x40, 0xb5, 0x6d, 0xd5, 0xa8, 0x62, 0xd6, + 0x09, 0xdd, 0x42, 0x2e, 0x5e, 0xe8, 0xb9, 0x93, 0x71, 0xbf, 0x93, 0x00, 0x3b, 0x59, 0x19, 0xac, + 0xab, 0x3b, 0x73, 0x14, 0x40, 0x7a, 0x2c, 0xa4, 0x3e, 0xfb, 0xd2, 0xe4, 0x01, 0x7a, 0xe0, 0xf4, + 0x8a, 0x04, 0xe0, 0x5b, 0x0c, 0xfd, 0x18, 0x64, 0x35, 0xaf, 0x45, 0x69, 0x1d, 0x3e, 0x86, 0xf7, + 0x77, 0x1a, 0x8b, 0x26, 0x7b, 0xb3, 0xa2, 0xe3, 0xe5, 0x9b, 0x93, 0x92, 0x32, 0xac, 0x35, 0x0d, + 0xc5, 0x07, 0x21, 0xd3, 0xb0, 0x2a, 0xaa, 0x8b, 0xcb, 0x74, 0x15, 0x1c, 0x8b, 0x2c, 0x60, 0x26, + 0x08, 0xaf, 0x5b, 0x37, 0x27, 0x11, 0x53, 0x2b, 0x40, 0x2c, 0xd3, 0xb2, 0x06, 0x18, 0x84, 0x10, + 0x04, 0x74, 0xfa, 0x1d, 0x09, 0x32, 0xf3, 0x81, 0xdb, 0x46, 0x39, 0xe8, 0xaf, 0x9b, 0x86, 0x7e, + 0x95, 0xfb, 0x63, 0x5a, 0x11, 0x4d, 0x94, 0x87, 0x14, 0x7b, 0xf1, 0xcb, 0xdd, 0x15, 0x5b, 0xc9, + 0xa2, 0x4d, 0xa8, 0xae, 0xe3, 0x4d, 0x47, 0x17, 0xa3, 0xa1, 0x88, 0x26, 0x3a, 0x0f, 0x59, 0x07, + 0x6b, 0x0d, 0x5b, 0x77, 0x77, 0xcb, 0x9a, 0x69, 0xb8, 0xaa, 0xe6, 0xb2, 0x57, 0x88, 0x8a, 0x87, + 0x6f, 0xdd, 0x9c, 0xbc, 0x8b, 0xc9, 0xda, 0x8c, 0x21, 0x2b, 0xc3, 0x02, 0x34, 0xc7, 0x20, 0xa4, + 0x87, 0x0a, 0x76, 0x55, 0xbd, 0xe6, 0xd0, 0x9a, 0x30, 0xad, 0x88, 0x66, 0x40, 0x97, 0x7f, 0xd2, + 0x1f, 0xdc, 0x38, 0xbc, 0x0e, 0x59, 0xd3, 0xc2, 0x76, 0xa8, 0xc2, 0xa6, 0xf3, 0x78, 0x71, 0xc9, + 0xef, 0xb9, 0x19, 0x43, 0xfe, 0xbf, 0x37, 0x27, 0x1f, 0xee, 0xc2, 0x83, 0xae, 0xa8, 0x35, 0x5e, + 0x9d, 0x2b, 0xc3, 0x82, 0x87, 0x28, 0xd7, 0xcf, 0x13, 0xbf, 0x10, 0xeb, 0x72, 0xab, 0xb1, 0x29, + 0x36, 0x28, 0x43, 0x2a, 0x37, 0x63, 0xc8, 0xc4, 0x03, 0x38, 0x68, 0x8d, 0x42, 0x48, 0x49, 0xfd, + 0x8c, 0xaa, 0xd7, 0xc4, 0xdb, 0xb0, 0x0a, 0x6f, 0xa1, 0x45, 0xe8, 0x73, 0x5c, 0xd5, 0x6d, 0xb0, + 0xe2, 0x25, 0x59, 0x7c, 0xb4, 0x4b, 0x99, 0x8b, 0xa6, 0x51, 0x59, 0xa7, 0x84, 0x0a, 0x67, 0x80, + 0xce, 0x43, 0x9f, 0x6b, 0x5e, 0xc5, 0x06, 0x37, 0x6a, 0x4f, 0x11, 0x4f, 0x0f, 0x77, 0x19, 0x35, + 0x72, 0x21, 0x5b, 0xc1, 0x35, 0x5c, 0x65, 0x15, 0xe4, 0xb6, 0x4a, 0x56, 0x6e, 0xf4, 0xcb, 0x55, + 0xc5, 0xc5, 0x9e, 0xc3, 0x92, 0x1b, 0xa8, 0x99, 0x9f, 0xac, 0x0c, 0x7b, 0xa0, 0x75, 0x0a, 0x41, + 0x97, 0x42, 0x17, 0xe5, 0xf8, 0xe7, 0xdd, 0xee, 0xe9, 0x14, 0x7b, 0x01, 0x2f, 0x17, 0xfb, 0x3d, + 0xc1, 0x6b, 0x76, 0xe7, 0x21, 0xdb, 0x30, 0x36, 0x4d, 0x83, 0xbe, 0xc1, 0xc6, 0x97, 0x32, 0x64, + 0x6d, 0x1c, 0x0f, 0x8e, 0x5a, 0x33, 0x86, 0xac, 0x0c, 0x7b, 0xa0, 0x0b, 0x6c, 0xc1, 0x53, 0x81, + 0x21, 0x1f, 0x8b, 0x86, 0x6e, 0x3a, 0x32, 0x74, 0xef, 0xe6, 0xa1, 0x7b, 0xb0, 0xb9, 0x17, 0x3f, + 0x7a, 0x07, 0x3d, 0x20, 0x21, 0x43, 0x17, 0x00, 0xfc, 0x84, 0x41, 0xf7, 0x7d, 0x32, 0x27, 0xe4, + 0xe8, 0xac, 0x23, 0xd6, 0xca, 0x3e, 0x2d, 0xfa, 0x30, 0x8c, 0xd6, 0x75, 0xa3, 0xec, 0xe0, 0xda, + 0x56, 0x99, 0x1b, 0x98, 0xb0, 0xa4, 0x1f, 0x20, 0x29, 0x2e, 0xf5, 0xe6, 0x0f, 0xb7, 0x6e, 0x4e, + 0xe6, 0x79, 0x52, 0x6d, 0x65, 0x29, 0x2b, 0x23, 0x75, 0xdd, 0x58, 0xc7, 0xb5, 0xad, 0x79, 0x0f, + 0x56, 0x18, 0xf8, 0xa9, 0x97, 0x26, 0x0f, 0x78, 0x01, 0xac, 0xd3, 0xd3, 0x0a, 0x1e, 0x47, 0xd8, + 0x41, 0xab, 0x90, 0x56, 0x45, 0x83, 0xed, 0x10, 0x75, 0xed, 0xec, 0x81, 0x00, 0xf5, 0x79, 0xb0, + 0x5c, 0xf1, 0xdc, 0x7f, 0x98, 0x92, 0xe4, 0xe7, 0x63, 0xd0, 0x37, 0x7f, 0x65, 0x4d, 0xd5, 0x6d, + 0x74, 0x03, 0x46, 0x7c, 0x67, 0x0b, 0x67, 0x8a, 0xe5, 0x5b, 0x37, 0x27, 0x73, 0xcd, 0xfe, 0xd8, + 0x63, 0xaa, 0x98, 0xd5, 0x34, 0x21, 0x89, 0x1f, 0x24, 0x22, 0x57, 0xdc, 0xe8, 0xb8, 0x0f, 0x10, + 0xec, 0xbb, 0x05, 0x65, 0x1f, 0x69, 0xaa, 0x65, 0x5b, 0x21, 0x90, 0x38, 0x4b, 0xd0, 0xcf, 0x6c, + 0xe1, 0xa0, 0x02, 0x24, 0x2d, 0xf2, 0x83, 0x9f, 0x0d, 0x4d, 0x74, 0x8c, 0x26, 0x8a, 0xef, 0xed, + 0x54, 0x13, 0x12, 0xf9, 0x4b, 0x71, 0x80, 0xf9, 0x2b, 0x57, 0x36, 0x6c, 0xdd, 0xaa, 0x61, 0xf7, + 0x87, 0x6a, 0xd7, 0x8f, 0x4b, 0x70, 0x30, 0xb0, 0xa6, 0xb5, 0xb5, 0x26, 0xe3, 0x3e, 0x79, 0xeb, + 0xe6, 0xe4, 0x91, 0x66, 0xe3, 0x06, 0xd0, 0xf6, 0x61, 0xe0, 0x51, 0x7f, 0x39, 0x6c, 0x6b, 0xed, + 0xe5, 0xa8, 0x38, 0xae, 0x27, 0x47, 0xbc, 0xb3, 0x1c, 0x01, 0xb4, 0x37, 0x25, 0xc7, 0xbc, 0xe3, + 0xb6, 0x8e, 0xf5, 0x3a, 0x64, 0xfc, 0x31, 0x72, 0xd0, 0x3c, 0xa4, 0x5c, 0xfe, 0x9b, 0x0f, 0xb9, + 0xdc, 0x79, 0xc8, 0x05, 0x19, 0x1f, 0x76, 0x8f, 0x52, 0xfe, 0xb7, 0x31, 0x00, 0x3f, 0xaa, 0xff, + 0xbc, 0x46, 0x14, 0x99, 0x4e, 0xf9, 0xe4, 0x17, 0xdf, 0x57, 0x01, 0xcd, 0xa9, 0x03, 0xa3, 0xf5, + 0x47, 0x31, 0x18, 0xbd, 0x2c, 0x32, 0xff, 0x3b, 0x16, 0x46, 0x6b, 0xd0, 0x8f, 0x0d, 0xd7, 0xd6, + 0xa9, 0x89, 0x89, 0xb7, 0x3e, 0xd2, 0xc9, 0x5b, 0xdb, 0x58, 0x8d, 0x7e, 0x64, 0x47, 0x1c, 0x53, + 0x71, 0x36, 0x01, 0x5b, 0x7f, 0x2a, 0x0e, 0xb9, 0x4e, 0x54, 0x68, 0x0e, 0x86, 0x35, 0x1b, 0x53, + 0x40, 0x39, 0xb8, 0x27, 0x5e, 0xcc, 0xfb, 0x2b, 0x89, 0x26, 0x04, 0x59, 0x19, 0x12, 0x10, 0x5e, + 0x1b, 0x54, 0x81, 0x94, 0xf9, 0x24, 0x64, 0x08, 0x56, 0x97, 0x75, 0xbd, 0xcc, 0x8b, 0x03, 0xd1, + 0x49, 0x98, 0x01, 0xab, 0x0e, 0x86, 0x7c, 0x28, 0x2d, 0x0f, 0x9e, 0x85, 0x61, 0xdd, 0xd0, 0x5d, + 0x5d, 0xad, 0x95, 0x37, 0xd5, 0x9a, 0x6a, 0x68, 0xfb, 0x59, 0x25, 0xb1, 0x09, 0x9d, 0x77, 0xdb, + 0xc4, 0x4e, 0x56, 0x86, 0x38, 0xa4, 0xc8, 0x00, 0xe8, 0x02, 0xf4, 0x8b, 0xae, 0x12, 0xfb, 0xaa, + 0x25, 0x05, 0x79, 0x60, 0x44, 0x7e, 0x3a, 0x0e, 0x23, 0x0a, 0xae, 0xbc, 0x33, 0x14, 0xbd, 0x0d, + 0xc5, 0x32, 0x00, 0x4b, 0x24, 0x64, 0x26, 0xd9, 0xc7, 0x68, 0x90, 0x54, 0x94, 0x66, 0x1c, 0xe6, + 0x1d, 0x37, 0x30, 0x1e, 0x7f, 0x1c, 0x87, 0x81, 0xe0, 0x78, 0xbc, 0x33, 0xc5, 0xff, 0xe8, 0x4c, + 0xf1, 0x68, 0xd1, 0x4f, 0x8d, 0x09, 0xfe, 0xad, 0xd4, 0x0e, 0xa9, 0xb1, 0x25, 0xa4, 0x3a, 0xe7, + 0xc4, 0x3f, 0x8d, 0x41, 0xdf, 0x9a, 0x6a, 0xab, 0x75, 0x07, 0x69, 0x2d, 0x0b, 0x1b, 0xb1, 0xb1, + 0xdf, 0xf2, 0x35, 0x6c, 0xbe, 0x29, 0x16, 0xb1, 0xae, 0xf9, 0x6c, 0x9b, 0x75, 0xcd, 0xfb, 0x60, + 0xa8, 0xae, 0xee, 0x04, 0x0e, 0xc1, 0xe9, 0x60, 0x0e, 0x16, 0x0f, 0xf9, 0x5c, 0xc2, 0xcf, 0xd9, + 0x76, 0xcd, 0x95, 0xe0, 0x25, 0xa5, 0x0c, 0xc1, 0xf0, 0x67, 0x09, 0x42, 0x3e, 0xee, 0xef, 0x8b, + 0x04, 0x1e, 0xca, 0x0a, 0xd4, 0xd5, 0x9d, 0x12, 0x6b, 0xa0, 0x25, 0x40, 0xdb, 0xde, 0xd6, 0x5c, + 0xd9, 0x37, 0x25, 0xa1, 0x3f, 0x7a, 0xeb, 0xe6, 0xe4, 0x21, 0x46, 0xdf, 0x8a, 0x23, 0x2b, 0x23, + 0x3e, 0x50, 0x70, 0x3b, 0x09, 0x40, 0xf4, 0x2a, 0xb3, 0x2b, 0xce, 0x6c, 0x75, 0x7d, 0xf0, 0xd6, + 0xcd, 0xc9, 0x11, 0xc6, 0xc5, 0x7f, 0x26, 0x2b, 0x69, 0xd2, 0x98, 0x27, 0xbf, 0x03, 0x86, 0xff, + 0xb2, 0x04, 0xc8, 0x9f, 0x83, 0x14, 0xec, 0x58, 0xa6, 0xe1, 0xd0, 0x75, 0x5f, 0x60, 0x91, 0x26, + 0xed, 0xbd, 0xee, 0xf3, 0xe9, 0xc5, 0xba, 0x2f, 0x10, 0xba, 0x67, 0xfd, 0x7c, 0x1d, 0xe3, 0xe3, + 0xd8, 0xe6, 0x3e, 0xf8, 0xf4, 0x9c, 0xa9, 0x0b, 0xea, 0x36, 0x09, 0xfa, 0x5f, 0x48, 0x70, 0xa8, + 0xc5, 0x9b, 0x3c, 0x61, 0xff, 0x3f, 0x40, 0x76, 0xe0, 0x21, 0xff, 0xe8, 0x1d, 0x13, 0xba, 0x67, + 0xe7, 0x1c, 0xb1, 0x5b, 0x26, 0x82, 0xdb, 0x37, 0xe5, 0xb0, 0x0b, 0xe5, 0xff, 0x54, 0x82, 0xb1, + 0x60, 0xf7, 0x9e, 0x22, 0x2b, 0x30, 0x10, 0xec, 0x9d, 0xab, 0x70, 0x6f, 0x37, 0x2a, 0x70, 0xe9, + 0x43, 0xf4, 0xe8, 0x49, 0x3f, 0x54, 0xd9, 0xe6, 0xed, 0xa3, 0x5d, 0x5b, 0x43, 0xc8, 0xd4, 0x1c, + 0xb2, 0x4c, 0x83, 0x3f, 0x93, 0x20, 0xb1, 0x66, 0x9a, 0x35, 0x64, 0xc2, 0x88, 0x61, 0xba, 0x65, + 0xe2, 0x59, 0xb8, 0x52, 0xe6, 0x7b, 0x3c, 0x6c, 0x57, 0x77, 0xae, 0x37, 0x23, 0x7d, 0xff, 0xe6, + 0x64, 0x2b, 0x2b, 0x65, 0xd8, 0x30, 0xdd, 0x22, 0x85, 0x6c, 0xb0, 0x1d, 0xa0, 0x0f, 0xc3, 0x60, + 0xb8, 0x33, 0xb6, 0xe3, 0xf5, 0x54, 0xcf, 0x9d, 0x85, 0xd9, 0xdc, 0xba, 0x39, 0x39, 0xe6, 0x47, + 0x8c, 0x07, 0x96, 0x95, 0x81, 0xcd, 0x40, 0xef, 0xec, 0xfe, 0xe6, 0x9f, 0xbc, 0x34, 0x29, 0x15, + 0xcf, 0x77, 0x3c, 0xa1, 0x79, 0x68, 0x4f, 0x11, 0x76, 0xbc, 0x63, 0x86, 0xf0, 0xb1, 0xcc, 0x67, + 0x47, 0x61, 0xb2, 0xc3, 0x39, 0x84, 0xbb, 0xb3, 0xaf, 0x23, 0x88, 0x88, 0x33, 0x82, 0x7c, 0x57, + 0xc7, 0x1e, 0xf2, 0x1b, 0x09, 0x40, 0xcb, 0x4e, 0x75, 0x8e, 0x54, 0x35, 0x81, 0x3b, 0x87, 0x4d, + 0x5b, 0x62, 0xd2, 0x9b, 0xda, 0x12, 0x5b, 0x0e, 0x6d, 0x32, 0xc5, 0x7a, 0xdb, 0xda, 0xee, 0x7a, + 0xa7, 0x29, 0xfe, 0x96, 0xec, 0x34, 0xb5, 0x2f, 0x55, 0x12, 0x3f, 0xc4, 0x15, 0x53, 0xf2, 0xad, + 0x59, 0x31, 0x8d, 0x43, 0x1f, 0xdf, 0x83, 0x66, 0xff, 0x4a, 0x80, 0xb7, 0xd0, 0x29, 0xf1, 0x61, + 0xf5, 0xfe, 0xee, 0xb2, 0x3f, 0xc3, 0xe6, 0x79, 0xe6, 0xeb, 0x71, 0xc8, 0x2e, 0x3b, 0xd5, 0x52, + 0x45, 0x77, 0xef, 0x90, 0xef, 0x59, 0x9d, 0x17, 0x99, 0x73, 0xb7, 0x6e, 0x4e, 0x0e, 0x31, 0x93, + 0xdd, 0x4e, 0x43, 0xd5, 0x61, 0xb8, 0xe9, 0x38, 0x87, 0xbb, 0xe6, 0xfc, 0x7e, 0x4e, 0x95, 0x9a, + 0x58, 0xc9, 0x74, 0x5d, 0x10, 0x08, 0x10, 0xb4, 0xd3, 0x3e, 0x1a, 0xd8, 0x44, 0x76, 0xe1, 0x4e, + 0xee, 0xb9, 0xb2, 0x21, 0xfc, 0x66, 0x0c, 0x32, 0xcb, 0x8e, 0x58, 0xe7, 0xe2, 0x3f, 0xb7, 0x3b, + 0x0a, 0x8f, 0x7b, 0x2f, 0x9c, 0xc5, 0xbb, 0x0b, 0x84, 0xf0, 0x4b, 0x68, 0xdf, 0x89, 0xd3, 0x3c, + 0x5c, 0xc4, 0x55, 0xdd, 0xf0, 0x26, 0x6b, 0xfc, 0xce, 0xc2, 0xe8, 0x47, 0x68, 0x61, 0xe4, 0x8f, + 0x70, 0x62, 0x3f, 0x23, 0xfc, 0x5b, 0x31, 0x18, 0x5c, 0x76, 0xaa, 0x97, 0x8d, 0xca, 0x3b, 0xa1, + 0xf2, 0x66, 0x42, 0xe5, 0xb6, 0x97, 0x66, 0xdf, 0x8c, 0xc1, 0xf1, 0x60, 0x2d, 0xf5, 0x6c, 0x03, + 0xdb, 0xbb, 0x5e, 0xb9, 0x64, 0xa9, 0x55, 0xdd, 0x08, 0xde, 0x9e, 0x39, 0x14, 0x14, 0x96, 0xe2, + 0x0a, 0x91, 0x65, 0x03, 0x32, 0x6b, 0x6a, 0x15, 0x2b, 0xf8, 0xd9, 0x06, 0x76, 0xdc, 0x36, 0xef, + 0xc4, 0x8d, 0x43, 0x9f, 0xb9, 0xb5, 0x25, 0xae, 0xc6, 0x25, 0x14, 0xde, 0x42, 0x63, 0x90, 0xac, + 0xe9, 0x75, 0x9d, 0x19, 0x24, 0xa1, 0xb0, 0x06, 0x9a, 0x84, 0x8c, 0x46, 0xf4, 0x2e, 0xb3, 0x77, + 0x09, 0x12, 0xe2, 0x9b, 0x3f, 0x0d, 0xc3, 0xdd, 0x20, 0x10, 0xf9, 0x09, 0x18, 0x60, 0xfd, 0xf1, + 0xf5, 0xc5, 0x21, 0x48, 0xd1, 0xbb, 0xdf, 0x7e, 0xaf, 0xfd, 0xa4, 0x7d, 0x89, 0xbd, 0x3f, 0xc7, + 0xb8, 0xb0, 0x8e, 0x59, 0xa3, 0x58, 0xec, 0x68, 0xca, 0x63, 0xd1, 0x83, 0xcc, 0x0c, 0xe5, 0x99, + 0xf1, 0x37, 0x93, 0x70, 0x90, 0x5f, 0x6b, 0x51, 0x2d, 0x7d, 0x66, 0xdb, 0x75, 0xc5, 0x8b, 0xa9, + 0xc0, 0x17, 0xf6, 0xaa, 0xa5, 0xcb, 0xbb, 0x90, 0xb8, 0xe0, 0xba, 0x16, 0x3a, 0x0e, 0x49, 0xbb, + 0x51, 0xc3, 0xe2, 0xb0, 0x60, 0x6c, 0xda, 0xc7, 0x99, 0x26, 0x08, 0x4a, 0xa3, 0x86, 0x15, 0x86, + 0x82, 0x4a, 0x30, 0xb9, 0xd5, 0xa8, 0xd5, 0x76, 0xcb, 0x15, 0x4c, 0xff, 0x5d, 0x9b, 0xf7, 0x0f, + 0x4f, 0xf0, 0x8e, 0xa5, 0x1a, 0x5e, 0x51, 0x99, 0x52, 0x8e, 0x50, 0xb4, 0x79, 0x8a, 0x25, 0xfe, + 0xd9, 0x49, 0x49, 0xe0, 0xc8, 0xbf, 0x1f, 0x83, 0x94, 0x60, 0x4d, 0x5f, 0x68, 0xc3, 0x35, 0xac, + 0xb9, 0xa6, 0xb8, 0xa0, 0xe0, 0xb5, 0x11, 0x82, 0x78, 0x95, 0x0f, 0x51, 0xfa, 0xc2, 0x01, 0x85, + 0x34, 0x08, 0xcc, 0x7b, 0xcd, 0x90, 0xc0, 0xac, 0x06, 0x19, 0xb5, 0x84, 0x65, 0x8a, 0x9d, 0xb1, + 0x0b, 0x07, 0x14, 0xda, 0x42, 0x39, 0xe8, 0x23, 0xd1, 0xe6, 0xb2, 0x6f, 0xd1, 0x12, 0x38, 0x6f, + 0xa3, 0x71, 0x48, 0x5a, 0xaa, 0xab, 0xb1, 0xfb, 0xff, 0xe4, 0x01, 0x6b, 0x92, 0x78, 0x60, 0xdf, + 0x00, 0x68, 0xfe, 0x5f, 0x48, 0xc4, 0x18, 0xec, 0x63, 0x8b, 0x44, 0xee, 0x35, 0xd5, 0x75, 0xb1, + 0x6d, 0x10, 0x86, 0x0c, 0x9d, 0xbe, 0xbb, 0x6a, 0x56, 0x76, 0xf9, 0xff, 0x67, 0xa2, 0xbf, 0xf9, + 0x3f, 0x84, 0xa1, 0xfe, 0x50, 0xa6, 0x0f, 0xd9, 0xbf, 0xa5, 0x1b, 0x10, 0xc0, 0x22, 0x41, 0x2a, + 0xc1, 0xa8, 0x5a, 0xa9, 0xe8, 0xec, 0x5f, 0x25, 0x95, 0x37, 0x75, 0xba, 0x71, 0xe2, 0xd0, 0x7f, + 0x3a, 0xd8, 0x69, 0x2c, 0x90, 0x4f, 0x50, 0xe4, 0xf8, 0xc5, 0x34, 0xf4, 0x5b, 0x4c, 0x28, 0xf9, + 0x1c, 0x8c, 0xb4, 0x48, 0x4a, 0xe4, 0xbb, 0xaa, 0x1b, 0x15, 0xf1, 0xee, 0x25, 0xf9, 0x4d, 0x60, + 0xf4, 0x83, 0xa9, 0xec, 0xea, 0x07, 0xfd, 0x5d, 0xfc, 0xc9, 0xce, 0x77, 0xc8, 0x86, 0x02, 0x77, + 0xc8, 0x54, 0x4b, 0x2f, 0xa6, 0x29, 0x7f, 0x7e, 0x75, 0x6c, 0x96, 0x3f, 0x60, 0xd7, 0xc6, 0xa6, + 0x4d, 0xbb, 0x3a, 0x53, 0xc5, 0x86, 0x58, 0x29, 0x91, 0x47, 0xaa, 0xa5, 0x3b, 0xd4, 0x1d, 0xfd, + 0x0f, 0xb8, 0x3a, 0xe7, 0x02, 0xbf, 0xe9, 0x8d, 0xb2, 0xc4, 0xc2, 0xec, 0xda, 0xa2, 0xe7, 0xc7, + 0xdf, 0x88, 0xc1, 0x91, 0x80, 0x1f, 0x07, 0x90, 0x5b, 0xdd, 0x39, 0xdf, 0xde, 0xe3, 0xbb, 0xf8, + 0xfc, 0xe9, 0x25, 0x48, 0x10, 0x7c, 0x14, 0xf1, 0xef, 0x5a, 0x72, 0xbf, 0xf4, 0xcf, 0xff, 0xb1, + 0x4c, 0x9d, 0xa2, 0xfd, 0xa8, 0x50, 0x26, 0xc5, 0x4f, 0x74, 0x6f, 0xbf, 0xac, 0xff, 0xed, 0x5a, + 0xe7, 0xf6, 0x99, 0xb1, 0xd9, 0x86, 0x5f, 0x38, 0x07, 0x72, 0x87, 0xe5, 0x27, 0xcb, 0x98, 0x7b, + 0x2f, 0x78, 0x7b, 0x48, 0xc7, 0x9d, 0xee, 0xe7, 0xed, 0x35, 0x82, 0x5d, 0x2e, 0x8d, 0x77, 0x60, + 0xfc, 0x49, 0xd2, 0xb7, 0xbf, 0x29, 0x28, 0x12, 0xfb, 0xb8, 0x77, 0x73, 0x46, 0xe2, 0xff, 0xf3, + 0x51, 0x5c, 0x83, 0x01, 0x5f, 0x3e, 0xbe, 0xd0, 0xbd, 0x6f, 0xba, 0xe3, 0x7c, 0x31, 0x1d, 0x98, + 0x2c, 0x94, 0x00, 0xa5, 0xfc, 0x0b, 0x12, 0xdc, 0xd5, 0xd2, 0x35, 0xcf, 0xf1, 0x0b, 0x6d, 0xde, + 0xbc, 0xec, 0xfa, 0xce, 0x5e, 0xf0, 0x2d, 0xcc, 0x85, 0x36, 0xc2, 0xde, 0x1f, 0x29, 0x2c, 0x93, + 0x22, 0x24, 0xed, 0xb3, 0x70, 0x30, 0x2c, 0xac, 0x30, 0xd3, 0xd3, 0x30, 0x14, 0x2e, 0x20, 0x78, + 0x71, 0xb3, 0x8f, 0xbb, 0x17, 0x83, 0xa1, 0x22, 0x42, 0x2e, 0x37, 0x0f, 0x8d, 0x67, 0x9e, 0x12, + 0xa4, 0x3d, 0x54, 0xbe, 0x74, 0xec, 0xda, 0x3a, 0x3e, 0xa5, 0xfc, 0x4d, 0x09, 0xa6, 0xc2, 0x3d, + 0xf8, 0x0b, 0x1f, 0xe7, 0x8e, 0xeb, 0x77, 0xdb, 0x1c, 0xe9, 0x35, 0x09, 0xee, 0xde, 0x43, 0x0d, + 0x6e, 0xb3, 0x1b, 0x30, 0x16, 0xd8, 0x5d, 0x15, 0x13, 0x85, 0x70, 0xae, 0xe3, 0xd1, 0xdb, 0xc2, + 0xde, 0x66, 0xe2, 0x61, 0x62, 0xc7, 0xaf, 0x7e, 0x67, 0x72, 0xb4, 0xf5, 0x99, 0xa3, 0x8c, 0xb6, + 0xee, 0x88, 0xde, 0x46, 0x2f, 0xfc, 0x5d, 0x09, 0x1e, 0x08, 0xab, 0xda, 0xe6, 0x0c, 0xf6, 0x6d, + 0x34, 0x74, 0xff, 0x5e, 0x82, 0xe3, 0xdd, 0xe8, 0xc3, 0xc7, 0x70, 0x13, 0x46, 0xfd, 0x63, 0x91, + 0xe6, 0x21, 0x7c, 0xb0, 0x87, 0xc3, 0x6d, 0x1e, 0x0b, 0xc8, 0xe3, 0x76, 0x07, 0xc6, 0xea, 0x5f, + 0x4a, 0x3c, 0x7e, 0x83, 0x6e, 0xe2, 0x0d, 0x4c, 0x78, 0xc1, 0xd3, 0xe3, 0xc0, 0x04, 0x16, 0x3d, + 0x83, 0xa1, 0x45, 0x4f, 0x9b, 0x21, 0x8f, 0xdd, 0xa6, 0x6c, 0x74, 0x8d, 0x67, 0xeb, 0x36, 0xe7, + 0x2c, 0x1f, 0x84, 0xd1, 0x36, 0xa1, 0xc5, 0x13, 0x53, 0x0f, 0x91, 0xa5, 0xa0, 0xd6, 0xe0, 0x91, + 0xff, 0x8d, 0x04, 0x93, 0xb4, 0xe3, 0x36, 0xc3, 0xf8, 0x76, 0xb6, 0x67, 0x9d, 0xe7, 0xde, 0xb6, + 0x6a, 0x71, 0xc3, 0x2e, 0x42, 0x1f, 0xf3, 0x50, 0x6e, 0xcb, 0x7d, 0xb8, 0x38, 0x67, 0xe0, 0xe7, + 0xfa, 0x79, 0xa1, 0x5f, 0xfb, 0x84, 0x71, 0x87, 0xec, 0x78, 0xbb, 0x12, 0xc6, 0x2b, 0x22, 0xd7, + 0xb7, 0x57, 0x83, 0xdb, 0x4d, 0xbb, 0x6d, 0xb9, 0x9e, 0x19, 0xf1, 0x2d, 0x4a, 0xea, 0x9e, 0x4e, + 0x11, 0x49, 0xfd, 0x47, 0x7c, 0x8c, 0xbc, 0xa4, 0x1e, 0xa1, 0xcf, 0xdb, 0x31, 0xa9, 0xff, 0x59, + 0x0c, 0x0e, 0x51, 0xdd, 0x82, 0x67, 0x8d, 0x6f, 0xc1, 0xd8, 0x94, 0x01, 0x39, 0xb6, 0x56, 0xbe, + 0x5d, 0xb9, 0x28, 0xeb, 0xd8, 0xda, 0x95, 0xd0, 0x8c, 0x5e, 0x06, 0x54, 0x71, 0xdc, 0xe6, 0x0e, + 0xe2, 0xfb, 0xee, 0xa0, 0xe2, 0xb8, 0x57, 0xf6, 0x28, 0x19, 0x12, 0xfb, 0xf6, 0xae, 0x97, 0x25, + 0xc8, 0xb7, 0x1b, 0x01, 0xee, 0x4d, 0x3a, 0x8c, 0x87, 0x8e, 0xd1, 0x9b, 0x1d, 0xea, 0xa1, 0x6e, + 0x0e, 0x8f, 0x9b, 0xc2, 0xff, 0xa0, 0x8d, 0xef, 0x68, 0x02, 0xf8, 0x0d, 0x31, 0xc5, 0x79, 0x01, + 0xd3, 0xba, 0x1a, 0xfb, 0xd1, 0x0f, 0xfb, 0x5f, 0x6d, 0x99, 0x61, 0xde, 0x16, 0x0b, 0xbb, 0x6f, + 0x4b, 0x30, 0xd1, 0x41, 0xec, 0xb7, 0x73, 0x79, 0xb1, 0xdd, 0xd1, 0xa5, 0x6e, 0xf7, 0x2a, 0xf2, + 0x24, 0x8f, 0xc7, 0xf0, 0xab, 0x7a, 0x81, 0x5d, 0x84, 0x76, 0x5f, 0x45, 0x90, 0xdf, 0x0f, 0x87, + 0xdb, 0x52, 0x71, 0xd9, 0x0a, 0x90, 0xd8, 0xd6, 0x1d, 0x97, 0x8b, 0x75, 0x5f, 0x27, 0xb1, 0x9a, + 0xa8, 0x29, 0x8d, 0x8c, 0x20, 0x4b, 0x59, 0xaf, 0x99, 0x66, 0x8d, 0x8b, 0x21, 0x5f, 0x82, 0x91, + 0x00, 0x8c, 0x77, 0x72, 0x1a, 0x12, 0x96, 0xc9, 0xbf, 0x03, 0x96, 0x39, 0x71, 0xa4, 0x53, 0x27, + 0x84, 0x86, 0xab, 0x4d, 0xf1, 0xe5, 0x31, 0x40, 0x8c, 0x19, 0xbd, 0xeb, 0x25, 0xba, 0x58, 0x87, + 0xd1, 0x10, 0x94, 0x77, 0xf2, 0x6e, 0xe8, 0xb3, 0x28, 0xc4, 0x7b, 0xdb, 0xbc, 0x53, 0x37, 0x14, + 0xcb, 0xfb, 0xf2, 0x12, 0x6d, 0x9d, 0xf8, 0xfe, 0x41, 0x48, 0x52, 0xae, 0xe8, 0x73, 0x12, 0x40, + 0xe0, 0xe6, 0xd6, 0x74, 0x27, 0x36, 0xed, 0x77, 0x73, 0xf2, 0x33, 0x5d, 0xe3, 0xf3, 0xba, 0xfb, + 0xf8, 0x4f, 0xfe, 0xeb, 0xef, 0xfd, 0x4c, 0xec, 0x5e, 0x24, 0xcf, 0x74, 0xd8, 0x47, 0x0a, 0x04, + 0xe3, 0x57, 0x42, 0x1f, 0xa1, 0x7a, 0xb8, 0xbb, 0xae, 0x84, 0x64, 0xd3, 0xdd, 0xa2, 0x73, 0xc1, + 0xce, 0x51, 0xc1, 0x4e, 0xa1, 0xc7, 0xa2, 0x05, 0x9b, 0xf9, 0x50, 0x38, 0xba, 0x3e, 0x82, 0xbe, + 0x2d, 0xc1, 0x58, 0xbb, 0x6d, 0x02, 0x74, 0xa6, 0x3b, 0x29, 0x5a, 0x0b, 0xb2, 0xfc, 0xd9, 0x7d, + 0x50, 0x72, 0x55, 0x16, 0xa8, 0x2a, 0xb3, 0xe8, 0x89, 0x7d, 0xa8, 0x32, 0x13, 0x98, 0xfd, 0xd0, + 0xff, 0x91, 0xe0, 0xe8, 0x9e, 0x4b, 0x68, 0x34, 0xdb, 0x9d, 0x94, 0x7b, 0x54, 0x9e, 0xf9, 0xe2, + 0x9b, 0x61, 0xc1, 0x35, 0x7e, 0x92, 0x6a, 0x7c, 0x09, 0x2d, 0xee, 0x47, 0x63, 0xbf, 0x4c, 0x0c, + 0xea, 0xfe, 0xdb, 0x52, 0xe8, 0x75, 0x8a, 0xbd, 0xdd, 0xa9, 0x65, 0xed, 0x18, 0x11, 0x18, 0xad, + 0x4b, 0x02, 0xf9, 0x69, 0xaa, 0x82, 0x82, 0xd6, 0xde, 0xe4, 0xa0, 0xcd, 0x7c, 0x28, 0x3c, 0xa9, + 0x7c, 0x04, 0xfd, 0x2f, 0xa9, 0xfd, 0xfb, 0x0b, 0x8f, 0xef, 0x29, 0x62, 0xe7, 0x75, 0x71, 0xfe, + 0x4c, 0xef, 0x84, 0x5c, 0xc9, 0x3a, 0x55, 0xb2, 0x8a, 0xf0, 0xed, 0x56, 0xb2, 0xed, 0x20, 0xa2, + 0xdf, 0x91, 0x60, 0xac, 0xdd, 0x8a, 0x2e, 0x22, 0x2c, 0xf7, 0x58, 0xcb, 0x46, 0x84, 0xe5, 0x5e, + 0xcb, 0x47, 0xf9, 0xdd, 0x54, 0xf9, 0xd3, 0xe8, 0x64, 0x27, 0xe5, 0xf7, 0x1c, 0x45, 0x12, 0x8b, + 0x7b, 0xae, 0x7c, 0x22, 0x62, 0xb1, 0x9b, 0x55, 0x60, 0x44, 0x2c, 0x76, 0xb5, 0xf0, 0x8a, 0x8e, + 0x45, 0x4f, 0xb3, 0x2e, 0x87, 0xd1, 0x41, 0xdf, 0x90, 0x60, 0x30, 0x54, 0x97, 0xa3, 0x47, 0xf7, + 0x14, 0xb4, 0xdd, 0x2a, 0x2a, 0x7f, 0xa2, 0x17, 0x12, 0xae, 0xcb, 0x22, 0xd5, 0x65, 0x0e, 0xcd, + 0xee, 0x47, 0x17, 0x3b, 0x24, 0xf1, 0xcb, 0x12, 0x8c, 0xb6, 0x29, 0x61, 0x23, 0xa2, 0xb0, 0x73, + 0xe9, 0x9e, 0x3f, 0xd3, 0x3b, 0x21, 0xd7, 0xea, 0x3c, 0xd5, 0xea, 0x7d, 0xe8, 0xbd, 0xfb, 0xd1, + 0x2a, 0x30, 0x3f, 0xdf, 0xf4, 0xef, 0x47, 0x07, 0xfa, 0x41, 0xa7, 0x7b, 0x14, 0x4c, 0x28, 0xf4, + 0x78, 0xcf, 0x74, 0x5c, 0x9f, 0xa7, 0xa8, 0x3e, 0x4f, 0xa2, 0xd5, 0x37, 0xa7, 0x4f, 0xeb, 0xb4, + 0xfe, 0xb5, 0xd6, 0x4f, 0x45, 0xec, 0xed, 0x45, 0x6d, 0x8b, 0xd5, 0xfc, 0x63, 0x3d, 0xd1, 0x70, + 0xa5, 0xce, 0x50, 0xa5, 0x4e, 0xa0, 0x47, 0x3a, 0x29, 0x15, 0xb8, 0x04, 0xaf, 0x1b, 0x5b, 0xe6, + 0xcc, 0x87, 0x58, 0x09, 0xfc, 0x11, 0xf4, 0x13, 0xe2, 0x02, 0xf2, 0xb1, 0x3d, 0xfb, 0x0d, 0xd4, + 0xb1, 0xf9, 0x07, 0xba, 0xc0, 0xe4, 0x72, 0xdd, 0x4b, 0xe5, 0x9a, 0x40, 0x47, 0x3a, 0xc9, 0x45, + 0x6a, 0x59, 0xf4, 0x49, 0xc9, 0x7b, 0x67, 0xe1, 0xf8, 0xde, 0xbc, 0x83, 0xc5, 0x6e, 0xfe, 0xc1, + 0xae, 0x70, 0xb9, 0x24, 0xf7, 0x51, 0x49, 0xa6, 0xd0, 0x44, 0x47, 0x49, 0x58, 0xe9, 0x7b, 0xbb, + 0xef, 0xbc, 0xbc, 0x90, 0xea, 0xf8, 0x59, 0x94, 0x2a, 0x36, 0xb0, 0xa3, 0x3b, 0xfb, 0xba, 0x93, + 0xdc, 0xdd, 0xc1, 0xea, 0xb7, 0x93, 0x30, 0xb0, 0xc0, 0x7a, 0x59, 0x77, 0x55, 0xf7, 0x4d, 0x2e, + 0x04, 0x90, 0xc3, 0xbf, 0xb0, 0xc8, 0x3e, 0x0d, 0xeb, 0x7f, 0xec, 0x74, 0xa0, 0xa7, 0x8f, 0x06, + 0xb0, 0x2b, 0x90, 0xfc, 0xfd, 0xfc, 0x66, 0x7e, 0x32, 0xfb, 0x58, 0x23, 0xbd, 0x75, 0xc3, 0x3e, + 0xea, 0xfa, 0x31, 0x09, 0x0e, 0x52, 0x2c, 0x3f, 0xde, 0x28, 0xa6, 0x78, 0x9f, 0xb0, 0xa3, 0xc7, + 0x2c, 0xa9, 0x81, 0xed, 0x1f, 0xf6, 0x19, 0xd6, 0x7b, 0xf9, 0xeb, 0x2d, 0x47, 0x02, 0x9d, 0x37, + 0xb3, 0x95, 0x95, 0xd1, 0x5a, 0x0b, 0xa5, 0xd3, 0xb4, 0x69, 0x90, 0xd8, 0xff, 0xa6, 0xc1, 0x45, + 0xc8, 0x04, 0x32, 0x7d, 0x2e, 0x19, 0xf1, 0x0a, 0x6f, 0xf3, 0xce, 0x62, 0x90, 0x18, 0x7d, 0x42, + 0x82, 0x83, 0x6d, 0x27, 0x41, 0xfa, 0xff, 0x7b, 0x7b, 0xdc, 0xb9, 0x6c, 0x32, 0x4e, 0x5b, 0xbe, + 0xb2, 0x32, 0xd6, 0x68, 0x57, 0x4d, 0xac, 0xc1, 0x60, 0x68, 0x02, 0xcb, 0x89, 0xff, 0xc2, 0xdd, + 0xfd, 0x0b, 0x17, 0x61, 0x06, 0x28, 0x0f, 0x29, 0xbc, 0x63, 0x99, 0xb6, 0x8b, 0x2b, 0xf4, 0xb2, + 0x4e, 0x4a, 0xf1, 0xda, 0xf2, 0x75, 0x40, 0xad, 0x83, 0x8b, 0x2e, 0x35, 0x7d, 0x77, 0x78, 0x3f, + 0x1b, 0x18, 0xde, 0xa7, 0x8a, 0xc7, 0x20, 0x19, 0xfc, 0x98, 0x2f, 0x6b, 0xdc, 0xee, 0xe4, 0xf0, + 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xaa, 0x53, 0x6b, 0xa7, 0x95, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r)