diff --git a/.gitignore b/.gitignore index 852ac7147..3ff1075e8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ # Gradle temp files protobuf/.gradle protobuf/build + +# agent plans +/docs/plans \ No newline at end of file diff --git a/openapi/access.yaml b/openapi/access.yaml index 586436eb8..7d7e01d26 100644 --- a/openapi/access.yaml +++ b/openapi/access.yaml @@ -428,6 +428,66 @@ paths: $ref: '#/components/responses/404NotFound' '500': $ref: '#/components/responses/500InternalServerError' + /execution_receipts: + get: + summary: Get Execution Receipts by Block ID + description: Get all execution receipts for the provided block ID. + tags: + - Execution Receipts + parameters: + - name: block_id + in: query + schema: + $ref: '#/components/schemas/Identifier' + required: true + description: The ID of the block. + - $ref: '#/components/parameters/expandParam' + - $ref: '#/components/parameters/selectParam' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ExecutionReceipt' + '400': + $ref: '#/components/responses/400BadRequest' + '404': + $ref: '#/components/responses/404NotFound' + '500': + $ref: '#/components/responses/500InternalServerError' + /execution_receipts/results/{id}: + get: + summary: Get Execution Receipts by Result ID + description: Get all execution receipts for the provided execution result ID. + tags: + - Execution Receipts + parameters: + - name: id + in: path + schema: + $ref: '#/components/schemas/Identifier' + required: true + description: The ID of the execution result. + - $ref: '#/components/parameters/expandParam' + - $ref: '#/components/parameters/selectParam' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ExecutionReceipt' + '400': + $ref: '#/components/responses/400BadRequest' + '404': + $ref: '#/components/responses/404NotFound' + '500': + $ref: '#/components/responses/500InternalServerError' /accounts/{address}: get: summary: Get an Account By Address @@ -1333,6 +1393,37 @@ components: $ref: '#/components/schemas/Metadata' _links: $ref: '#/components/schemas/Links' + ExecutionReceipt: + type: object + required: + - executor_id + - result_id + - executor_signature + - _expandable + properties: + executor_id: + description: Node ID of the execution node who produced the receipt. + $ref: '#/components/schemas/Identifier' + result_id: + $ref: '#/components/schemas/Identifier' + spocks: + type: array + items: + type: string + format: byte + executor_signature: + type: string + format: byte + execution_result: + $ref: '#/components/schemas/ExecutionResult' + _expandable: + type: object + properties: + execution_result: + type: string + format: uri + metadata: + $ref: '#/components/schemas/Metadata' BlockEvents: type: object properties: diff --git a/openapi/go-client-generated/.swagger-codegen/VERSION b/openapi/go-client-generated/.swagger-codegen/VERSION index c6e7ea918..caa50679b 100644 --- a/openapi/go-client-generated/.swagger-codegen/VERSION +++ b/openapi/go-client-generated/.swagger-codegen/VERSION @@ -1 +1 @@ -3.0.75 \ No newline at end of file +3.0.78 \ No newline at end of file diff --git a/openapi/go-client-generated/README.md b/openapi/go-client-generated/README.md index dea02883f..6ebe16436 100644 --- a/openapi/go-client-generated/README.md +++ b/openapi/go-client-generated/README.md @@ -30,6 +30,8 @@ Class | Method | HTTP request | Description *BlocksApi* | [**BlocksIdPayloadGet**](docs/BlocksApi.md#blocksidpayloadget) | **Get** /blocks/{id}/payload | Get Block Payload by Block ID. *CollectionsApi* | [**CollectionsIdGet**](docs/CollectionsApi.md#collectionsidget) | **Get** /collections/{id} | Gets a Collection by ID *EventsApi* | [**EventsGet**](docs/EventsApi.md#eventsget) | **Get** /events | Get Events +*ExecutionReceiptsApi* | [**ExecutionReceiptsGet**](docs/ExecutionReceiptsApi.md#executionreceiptsget) | **Get** /execution_receipts | Get Execution Receipts by Block ID +*ExecutionReceiptsApi* | [**ExecutionReceiptsResultsIdGet**](docs/ExecutionReceiptsApi.md#executionreceiptsresultsidget) | **Get** /execution_receipts/results/{id} | Get Execution Receipts by Result ID *ExecutionResultsApi* | [**ExecutionResultsGet**](docs/ExecutionResultsApi.md#executionresultsget) | **Get** /execution_results | Get Execution Results by Block ID *ExecutionResultsApi* | [**ExecutionResultsIdGet**](docs/ExecutionResultsApi.md#executionresultsidget) | **Get** /execution_results/{id} | Get Execution Result by ID *NetworkApi* | [**NetworkParametersGet**](docs/NetworkApi.md#networkparametersget) | **Get** /network/parameters | Get Network Parameters @@ -65,6 +67,8 @@ Class | Method | HTTP request | Description - [CompatibleRange](docs/CompatibleRange.md) - [Event](docs/Event.md) - [ExecuteScriptResponse](docs/ExecuteScriptResponse.md) + - [ExecutionReceipt](docs/ExecutionReceipt.md) + - [ExecutionReceiptExpandable](docs/ExecutionReceiptExpandable.md) - [ExecutionResult](docs/ExecutionResult.md) - [ExecutorMetadata](docs/ExecutorMetadata.md) - [HashingAlgorithm](docs/HashingAlgorithm.md) diff --git a/openapi/go-client-generated/api/swagger.yaml b/openapi/go-client-generated/api/swagger.yaml index 7a143d4c7..12556bafc 100644 --- a/openapi/go-client-generated/api/swagger.yaml +++ b/openapi/go-client-generated/api/swagger.yaml @@ -929,6 +929,144 @@ paths: application/json: schema: $ref: "#/components/schemas/Error" + /execution_receipts: + get: + tags: + - Execution Receipts + summary: Get Execution Receipts by Block ID + description: Get all execution receipts for the provided block ID. + parameters: + - name: block_id + in: query + description: The ID of the block. + required: true + style: form + explode: true + schema: + $ref: "#/components/schemas/Identifier" + - name: expand + in: query + description: A comma-separated list indicating which properties of the content + to expand. + required: false + style: form + explode: false + schema: + minItems: 1 + uniqueItems: true + type: array + items: + type: string + - name: select + in: query + description: A comma-separated list indicating which properties of the content + to return. + required: false + style: form + explode: false + schema: + minItems: 1 + uniqueItems: true + type: array + items: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ExecutionReceipt" + x-content-type: application/json + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Not Found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /execution_receipts/results/{id}: + get: + tags: + - Execution Receipts + summary: Get Execution Receipts by Result ID + description: Get all execution receipts for the provided execution result ID. + parameters: + - name: id + in: path + description: The ID of the execution result. + required: true + style: simple + explode: false + schema: + $ref: "#/components/schemas/Identifier" + - name: expand + in: query + description: A comma-separated list indicating which properties of the content + to expand. + required: false + style: form + explode: false + schema: + minItems: 1 + uniqueItems: true + type: array + items: + type: string + - name: select + in: query + description: A comma-separated list indicating which properties of the content + to return. + required: false + style: form + explode: false + schema: + minItems: 1 + uniqueItems: true + type: array + items: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ExecutionReceipt" + x-content-type: application/json + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Not Found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" /accounts/{address}: get: tags: @@ -2713,6 +2851,87 @@ components: transaction_index: transaction_index type: type event_index: event_index + ExecutionReceipt: + required: + - _expandable + - executor_id + - executor_signature + - result_id + type: object + properties: + executor_id: + $ref: "#/components/schemas/Identifier" + result_id: + $ref: "#/components/schemas/Identifier" + spocks: + type: array + items: + type: string + format: byte + executor_signature: + type: string + format: byte + execution_result: + $ref: "#/components/schemas/ExecutionResult" + _expandable: + $ref: "#/components/schemas/ExecutionReceipt__expandable" + metadata: + $ref: "#/components/schemas/Metadata" + example: + executor_signature: "" + spocks: + - "" + - "" + metadata: + executor_metadata: + execution_result_id: null + executor_ids: + - null + - null + result_id: null + execution_result: + metadata: + executor_metadata: + execution_result_id: null + executor_ids: + - null + - null + _links: + _self: _self + chunks: + - start_state: "" + index: index + number_of_transactions: number_of_transactions + collection_index: collection_index + end_state: "" + event_collection: "" + block_id: null + total_computation_used: total_computation_used + - start_state: "" + index: index + number_of_transactions: number_of_transactions + collection_index: collection_index + end_state: "" + event_collection: "" + block_id: null + total_computation_used: total_computation_used + id: null + previous_result_id: null + block_id: null + events: + - transaction_id: null + payload: "" + transaction_index: transaction_index + type: type + event_index: event_index + - transaction_id: null + payload: "" + transaction_index: transaction_index + type: type + event_index: event_index + _expandable: + execution_result: http://example.com/aeiou + executor_id: executor_id BlockEvents: type: object properties: @@ -3080,6 +3299,14 @@ components: example: payload: payload execution_result: http://example.com/aeiou + ExecutionReceipt__expandable: + type: object + properties: + execution_result: + type: string + format: uri + example: + execution_result: http://example.com/aeiou responses: "400BadRequest": description: Bad Request diff --git a/openapi/go-client-generated/api_execution_receipts.go b/openapi/go-client-generated/api_execution_receipts.go new file mode 100644 index 000000000..c51a3c50f --- /dev/null +++ b/openapi/go-client-generated/api_execution_receipts.go @@ -0,0 +1,287 @@ + +/* + * Access API + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0.0 + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ +package swagger + +import ( + "context" + "io/ioutil" + "net/http" + "net/url" + "strings" + "fmt" + "github.com/antihax/optional" +) + +// Linger please +var ( + _ context.Context +) + +type ExecutionReceiptsApiService service +/* +ExecutionReceiptsApiService Get Execution Receipts by Block ID +Get all execution receipts for the provided block ID. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param blockId The ID of the block. + * @param optional nil or *ExecutionReceiptsApiExecutionReceiptsGetOpts - Optional Parameters: + * @param "Expand" (optional.Interface of []string) - A comma-separated list indicating which properties of the content to expand. + * @param "Select_" (optional.Interface of []string) - A comma-separated list indicating which properties of the content to return. +@return []ExecutionReceipt +*/ + +type ExecutionReceiptsApiExecutionReceiptsGetOpts struct { + Expand optional.Interface + Select_ optional.Interface +} + +func (a *ExecutionReceiptsApiService) ExecutionReceiptsGet(ctx context.Context, blockId string, localVarOptionals *ExecutionReceiptsApiExecutionReceiptsGetOpts) ([]ExecutionReceipt, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue []ExecutionReceipt + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/execution_receipts" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + localVarQueryParams.Add("block_id", parameterToString(blockId, "")) + if localVarOptionals != nil && localVarOptionals.Expand.IsSet() { + localVarQueryParams.Add("expand", parameterToString(localVarOptionals.Expand.Value(), "csv")) + } + if localVarOptionals != nil && localVarOptionals.Select_.IsSet() { + localVarQueryParams.Add("select", parameterToString(localVarOptionals.Select_.Value(), "csv")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + if localVarHttpResponse.StatusCode == 200 { + var v []ExecutionReceipt + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 400 { + var v ModelError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 404 { + var v ModelError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 500 { + var v ModelError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} +/* +ExecutionReceiptsApiService Get Execution Receipts by Result ID +Get all execution receipts for the provided execution result ID. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param id The ID of the execution result. + * @param optional nil or *ExecutionReceiptsApiExecutionReceiptsResultsIdGetOpts - Optional Parameters: + * @param "Expand" (optional.Interface of []string) - A comma-separated list indicating which properties of the content to expand. + * @param "Select_" (optional.Interface of []string) - A comma-separated list indicating which properties of the content to return. +@return []ExecutionReceipt +*/ + +type ExecutionReceiptsApiExecutionReceiptsResultsIdGetOpts struct { + Expand optional.Interface + Select_ optional.Interface +} + +func (a *ExecutionReceiptsApiService) ExecutionReceiptsResultsIdGet(ctx context.Context, id string, localVarOptionals *ExecutionReceiptsApiExecutionReceiptsResultsIdGetOpts) ([]ExecutionReceipt, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue []ExecutionReceipt + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/execution_receipts/results/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Expand.IsSet() { + localVarQueryParams.Add("expand", parameterToString(localVarOptionals.Expand.Value(), "csv")) + } + if localVarOptionals != nil && localVarOptionals.Select_.IsSet() { + localVarQueryParams.Add("select", parameterToString(localVarOptionals.Select_.Value(), "csv")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + if localVarHttpResponse.StatusCode == 200 { + var v []ExecutionReceipt + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 400 { + var v ModelError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 404 { + var v ModelError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 500 { + var v ModelError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} diff --git a/openapi/go-client-generated/client.go b/openapi/go-client-generated/client.go index a0bdf493a..75a443834 100644 --- a/openapi/go-client-generated/client.go +++ b/openapi/go-client-generated/client.go @@ -52,6 +52,8 @@ type APIClient struct { EventsApi *EventsApiService + ExecutionReceiptsApi *ExecutionReceiptsApiService + ExecutionResultsApi *ExecutionResultsApiService NetworkApi *NetworkApiService @@ -85,6 +87,7 @@ func NewAPIClient(cfg *Configuration) *APIClient { c.BlocksApi = (*BlocksApiService)(&c.common) c.CollectionsApi = (*CollectionsApiService)(&c.common) c.EventsApi = (*EventsApiService)(&c.common) + c.ExecutionReceiptsApi = (*ExecutionReceiptsApiService)(&c.common) c.ExecutionResultsApi = (*ExecutionResultsApiService)(&c.common) c.NetworkApi = (*NetworkApiService)(&c.common) c.NodeVersionInfoApi = (*NodeVersionInfoApiService)(&c.common) diff --git a/openapi/go-client-generated/docs/ExecutionReceipt.md b/openapi/go-client-generated/docs/ExecutionReceipt.md new file mode 100644 index 000000000..150e8306f --- /dev/null +++ b/openapi/go-client-generated/docs/ExecutionReceipt.md @@ -0,0 +1,15 @@ +# ExecutionReceipt + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ExecutorId** | **string** | | [default to null] +**ResultId** | **string** | | [default to null] +**Spocks** | **[]string** | | [optional] [default to null] +**ExecutorSignature** | **string** | | [default to null] +**ExecutionResult** | [***ExecutionResult**](ExecutionResult.md) | | [optional] [default to null] +**Expandable** | [***ExecutionReceiptExpandable**](ExecutionReceipt__expandable.md) | | [default to null] +**Metadata** | [***Metadata**](Metadata.md) | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/openapi/go-client-generated/docs/ExecutionReceiptExpandable.md b/openapi/go-client-generated/docs/ExecutionReceiptExpandable.md new file mode 100644 index 000000000..48534d375 --- /dev/null +++ b/openapi/go-client-generated/docs/ExecutionReceiptExpandable.md @@ -0,0 +1,9 @@ +# ExecutionReceiptExpandable + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ExecutionResult** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/openapi/go-client-generated/docs/ExecutionReceiptsApi.md b/openapi/go-client-generated/docs/ExecutionReceiptsApi.md new file mode 100644 index 000000000..cb33d825b --- /dev/null +++ b/openapi/go-client-generated/docs/ExecutionReceiptsApi.md @@ -0,0 +1,83 @@ +# {{classname}} + +All URIs are relative to *https://rest-testnet.onflow.org/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**ExecutionReceiptsGet**](ExecutionReceiptsApi.md#ExecutionReceiptsGet) | **Get** /execution_receipts | Get Execution Receipts by Block ID +[**ExecutionReceiptsResultsIdGet**](ExecutionReceiptsApi.md#ExecutionReceiptsResultsIdGet) | **Get** /execution_receipts/results/{id} | Get Execution Receipts by Result ID + +# **ExecutionReceiptsGet** +> []ExecutionReceipt ExecutionReceiptsGet(ctx, blockId, optional) +Get Execution Receipts by Block ID + +Get all execution receipts for the provided block ID. + +### Required Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. + **blockId** | [**string**](.md)| The ID of the block. | + **optional** | ***ExecutionReceiptsApiExecutionReceiptsGetOpts** | optional parameters | nil if no parameters + +### Optional Parameters +Optional parameters are passed through a pointer to a ExecutionReceiptsApiExecutionReceiptsGetOpts struct +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + + **expand** | [**optional.Interface of []string**](string.md)| A comma-separated list indicating which properties of the content to expand. | + **select_** | [**optional.Interface of []string**](string.md)| A comma-separated list indicating which properties of the content to return. | + +### Return type + +[**[]ExecutionReceipt**](ExecutionReceipt.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **ExecutionReceiptsResultsIdGet** +> []ExecutionReceipt ExecutionReceiptsResultsIdGet(ctx, id, optional) +Get Execution Receipts by Result ID + +Get all execution receipts for the provided execution result ID. + +### Required Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. + **id** | [**string**](.md)| The ID of the execution result. | + **optional** | ***ExecutionReceiptsApiExecutionReceiptsResultsIdGetOpts** | optional parameters | nil if no parameters + +### Optional Parameters +Optional parameters are passed through a pointer to a ExecutionReceiptsApiExecutionReceiptsResultsIdGetOpts struct +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + + **expand** | [**optional.Interface of []string**](string.md)| A comma-separated list indicating which properties of the content to expand. | + **select_** | [**optional.Interface of []string**](string.md)| A comma-separated list indicating which properties of the content to return. | + +### Return type + +[**[]ExecutionReceipt**](ExecutionReceipt.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/openapi/go-client-generated/model_execution_receipt.go b/openapi/go-client-generated/model_execution_receipt.go new file mode 100644 index 000000000..77f5d46d7 --- /dev/null +++ b/openapi/go-client-generated/model_execution_receipt.go @@ -0,0 +1,19 @@ +/* + * Access API + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0.0 + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ +package swagger + +type ExecutionReceipt struct { + ExecutorId string `json:"executor_id"` + ResultId string `json:"result_id"` + Spocks []string `json:"spocks,omitempty"` + ExecutorSignature string `json:"executor_signature"` + ExecutionResult *ExecutionResult `json:"execution_result,omitempty"` + Expandable *ExecutionReceiptExpandable `json:"_expandable"` + Metadata *Metadata `json:"metadata,omitempty"` +} diff --git a/openapi/go-client-generated/model_execution_receipt__expandable.go b/openapi/go-client-generated/model_execution_receipt__expandable.go new file mode 100644 index 000000000..1e20a2664 --- /dev/null +++ b/openapi/go-client-generated/model_execution_receipt__expandable.go @@ -0,0 +1,13 @@ +/* + * Access API + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0.0 + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ +package swagger + +type ExecutionReceiptExpandable struct { + ExecutionResult string `json:"execution_result,omitempty"` +} diff --git a/protobuf/flow/access/access.proto b/protobuf/flow/access/access.proto index 737d56312..7f1b220f6 100644 --- a/protobuf/flow/access/access.proto +++ b/protobuf/flow/access/access.proto @@ -200,6 +200,17 @@ service AccessAPI { rpc GetExecutionResultByID(GetExecutionResultByIDRequest) returns (ExecutionResultByIDResponse); + // GetExecutionReceiptsByBlockID returns all execution receipts for a given + // block ID. Optionally includes the full ExecutionResult in each receipt. + rpc GetExecutionReceiptsByBlockID(GetExecutionReceiptsByBlockIDRequest) + returns (ExecutionReceiptsResponse); + + // GetExecutionReceiptsByResultID returns all execution receipts for a given + // execution result ID. Optionally includes the full ExecutionResult in each + // receipt. + rpc GetExecutionReceiptsByResultID(GetExecutionReceiptsByResultIDRequest) + returns (ExecutionReceiptsResponse); + // Subscriptions // Subscribe blocks @@ -689,6 +700,25 @@ message ExecutionResultByIDResponse { entities.Metadata metadata = 2; } +// Execution Receipts + +message GetExecutionReceiptsByBlockIDRequest { + bytes block_id = 1; + // If true, each receipt will include the full ExecutionResult. + bool include_result = 2; +} + +message GetExecutionReceiptsByResultIDRequest { + bytes result_id = 1; + // If true, each receipt will include the full ExecutionResult. + bool include_result = 2; +} + +message ExecutionReceiptsResponse { + repeated entities.ExecutionReceipt receipts = 1; + entities.Metadata metadata = 2; +} + // Subscriptions // Subscribe blocks diff --git a/protobuf/flow/entities/execution_result.proto b/protobuf/flow/entities/execution_result.proto index 6d9038f8a..4e1172fd5 100644 --- a/protobuf/flow/entities/execution_result.proto +++ b/protobuf/flow/entities/execution_result.proto @@ -44,8 +44,13 @@ message ServiceEvent { } message ExecutionReceiptMeta { - bytes executor_id = 1; - bytes result_id = 2; - repeated bytes spocks = 3; - bytes executor_signature = 4; + bytes executor_id = 1; // Node ID of the execution node who produced the receipt. + bytes result_id = 2; // ID of the execution result. + repeated bytes spocks = 3; // Spocks of the execution result. + bytes executor_signature = 4; // Signature from the execution node who produced the receipt. +} + +message ExecutionReceipt { + ExecutionReceiptMeta meta = 1; + ExecutionResult execution_result = 2; // optional; only set if requested } diff --git a/protobuf/go/flow/access/access.pb.go b/protobuf/go/flow/access/access.pb.go index ba3183cdb..149d08c0d 100644 --- a/protobuf/go/flow/access/access.pb.go +++ b/protobuf/go/flow/access/access.pb.go @@ -3087,6 +3087,149 @@ func (m *ExecutionResultByIDResponse) GetMetadata() *entities.Metadata { return nil } +type GetExecutionReceiptsByBlockIDRequest struct { + BlockId []byte `protobuf:"bytes,1,opt,name=block_id,json=blockId,proto3" json:"block_id,omitempty"` + // If true, each receipt will include the full ExecutionResult. + IncludeResult bool `protobuf:"varint,2,opt,name=include_result,json=includeResult,proto3" json:"include_result,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetExecutionReceiptsByBlockIDRequest) Reset() { *m = GetExecutionReceiptsByBlockIDRequest{} } +func (m *GetExecutionReceiptsByBlockIDRequest) String() string { return proto.CompactTextString(m) } +func (*GetExecutionReceiptsByBlockIDRequest) ProtoMessage() {} +func (*GetExecutionReceiptsByBlockIDRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_4382e32bb8e3e8e5, []int{60} +} + +func (m *GetExecutionReceiptsByBlockIDRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetExecutionReceiptsByBlockIDRequest.Unmarshal(m, b) +} +func (m *GetExecutionReceiptsByBlockIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetExecutionReceiptsByBlockIDRequest.Marshal(b, m, deterministic) +} +func (m *GetExecutionReceiptsByBlockIDRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetExecutionReceiptsByBlockIDRequest.Merge(m, src) +} +func (m *GetExecutionReceiptsByBlockIDRequest) XXX_Size() int { + return xxx_messageInfo_GetExecutionReceiptsByBlockIDRequest.Size(m) +} +func (m *GetExecutionReceiptsByBlockIDRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetExecutionReceiptsByBlockIDRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetExecutionReceiptsByBlockIDRequest proto.InternalMessageInfo + +func (m *GetExecutionReceiptsByBlockIDRequest) GetBlockId() []byte { + if m != nil { + return m.BlockId + } + return nil +} + +func (m *GetExecutionReceiptsByBlockIDRequest) GetIncludeResult() bool { + if m != nil { + return m.IncludeResult + } + return false +} + +type GetExecutionReceiptsByResultIDRequest struct { + ResultId []byte `protobuf:"bytes,1,opt,name=result_id,json=resultId,proto3" json:"result_id,omitempty"` + // If true, each receipt will include the full ExecutionResult. + IncludeResult bool `protobuf:"varint,2,opt,name=include_result,json=includeResult,proto3" json:"include_result,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetExecutionReceiptsByResultIDRequest) Reset() { *m = GetExecutionReceiptsByResultIDRequest{} } +func (m *GetExecutionReceiptsByResultIDRequest) String() string { return proto.CompactTextString(m) } +func (*GetExecutionReceiptsByResultIDRequest) ProtoMessage() {} +func (*GetExecutionReceiptsByResultIDRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_4382e32bb8e3e8e5, []int{61} +} + +func (m *GetExecutionReceiptsByResultIDRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetExecutionReceiptsByResultIDRequest.Unmarshal(m, b) +} +func (m *GetExecutionReceiptsByResultIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetExecutionReceiptsByResultIDRequest.Marshal(b, m, deterministic) +} +func (m *GetExecutionReceiptsByResultIDRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetExecutionReceiptsByResultIDRequest.Merge(m, src) +} +func (m *GetExecutionReceiptsByResultIDRequest) XXX_Size() int { + return xxx_messageInfo_GetExecutionReceiptsByResultIDRequest.Size(m) +} +func (m *GetExecutionReceiptsByResultIDRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetExecutionReceiptsByResultIDRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetExecutionReceiptsByResultIDRequest proto.InternalMessageInfo + +func (m *GetExecutionReceiptsByResultIDRequest) GetResultId() []byte { + if m != nil { + return m.ResultId + } + return nil +} + +func (m *GetExecutionReceiptsByResultIDRequest) GetIncludeResult() bool { + if m != nil { + return m.IncludeResult + } + return false +} + +type ExecutionReceiptsResponse struct { + Receipts []*entities.ExecutionReceipt `protobuf:"bytes,1,rep,name=receipts,proto3" json:"receipts,omitempty"` + Metadata *entities.Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ExecutionReceiptsResponse) Reset() { *m = ExecutionReceiptsResponse{} } +func (m *ExecutionReceiptsResponse) String() string { return proto.CompactTextString(m) } +func (*ExecutionReceiptsResponse) ProtoMessage() {} +func (*ExecutionReceiptsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_4382e32bb8e3e8e5, []int{62} +} + +func (m *ExecutionReceiptsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ExecutionReceiptsResponse.Unmarshal(m, b) +} +func (m *ExecutionReceiptsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ExecutionReceiptsResponse.Marshal(b, m, deterministic) +} +func (m *ExecutionReceiptsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExecutionReceiptsResponse.Merge(m, src) +} +func (m *ExecutionReceiptsResponse) XXX_Size() int { + return xxx_messageInfo_ExecutionReceiptsResponse.Size(m) +} +func (m *ExecutionReceiptsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ExecutionReceiptsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ExecutionReceiptsResponse proto.InternalMessageInfo + +func (m *ExecutionReceiptsResponse) GetReceipts() []*entities.ExecutionReceipt { + if m != nil { + return m.Receipts + } + return nil +} + +func (m *ExecutionReceiptsResponse) GetMetadata() *entities.Metadata { + if m != nil { + return m.Metadata + } + return nil +} + // The request for SubscribeBlocksFromStartBlockID type SubscribeBlocksFromStartBlockIDRequest struct { // Block ID of the first block to subscribe. @@ -3110,7 +3253,7 @@ func (m *SubscribeBlocksFromStartBlockIDRequest) Reset() { func (m *SubscribeBlocksFromStartBlockIDRequest) String() string { return proto.CompactTextString(m) } func (*SubscribeBlocksFromStartBlockIDRequest) ProtoMessage() {} func (*SubscribeBlocksFromStartBlockIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{60} + return fileDescriptor_4382e32bb8e3e8e5, []int{63} } func (m *SubscribeBlocksFromStartBlockIDRequest) XXX_Unmarshal(b []byte) error { @@ -3173,7 +3316,7 @@ func (m *SubscribeBlocksFromStartHeightRequest) Reset() { *m = Subscribe func (m *SubscribeBlocksFromStartHeightRequest) String() string { return proto.CompactTextString(m) } func (*SubscribeBlocksFromStartHeightRequest) ProtoMessage() {} func (*SubscribeBlocksFromStartHeightRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{61} + return fileDescriptor_4382e32bb8e3e8e5, []int{64} } func (m *SubscribeBlocksFromStartHeightRequest) XXX_Unmarshal(b []byte) error { @@ -3234,7 +3377,7 @@ func (m *SubscribeBlocksFromLatestRequest) Reset() { *m = SubscribeBlock func (m *SubscribeBlocksFromLatestRequest) String() string { return proto.CompactTextString(m) } func (*SubscribeBlocksFromLatestRequest) ProtoMessage() {} func (*SubscribeBlocksFromLatestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{62} + return fileDescriptor_4382e32bb8e3e8e5, []int{65} } func (m *SubscribeBlocksFromLatestRequest) XXX_Unmarshal(b []byte) error { @@ -3284,7 +3427,7 @@ func (m *SubscribeBlocksResponse) Reset() { *m = SubscribeBlocksResponse func (m *SubscribeBlocksResponse) String() string { return proto.CompactTextString(m) } func (*SubscribeBlocksResponse) ProtoMessage() {} func (*SubscribeBlocksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{63} + return fileDescriptor_4382e32bb8e3e8e5, []int{66} } func (m *SubscribeBlocksResponse) XXX_Unmarshal(b []byte) error { @@ -3334,7 +3477,7 @@ func (m *SubscribeBlockHeadersFromStartBlockIDRequest) String() string { } func (*SubscribeBlockHeadersFromStartBlockIDRequest) ProtoMessage() {} func (*SubscribeBlockHeadersFromStartBlockIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{64} + return fileDescriptor_4382e32bb8e3e8e5, []int{67} } func (m *SubscribeBlockHeadersFromStartBlockIDRequest) XXX_Unmarshal(b []byte) error { @@ -3391,7 +3534,7 @@ func (m *SubscribeBlockHeadersFromStartHeightRequest) String() string { } func (*SubscribeBlockHeadersFromStartHeightRequest) ProtoMessage() {} func (*SubscribeBlockHeadersFromStartHeightRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{65} + return fileDescriptor_4382e32bb8e3e8e5, []int{68} } func (m *SubscribeBlockHeadersFromStartHeightRequest) XXX_Unmarshal(b []byte) error { @@ -3444,7 +3587,7 @@ func (m *SubscribeBlockHeadersFromLatestRequest) Reset() { func (m *SubscribeBlockHeadersFromLatestRequest) String() string { return proto.CompactTextString(m) } func (*SubscribeBlockHeadersFromLatestRequest) ProtoMessage() {} func (*SubscribeBlockHeadersFromLatestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{66} + return fileDescriptor_4382e32bb8e3e8e5, []int{69} } func (m *SubscribeBlockHeadersFromLatestRequest) XXX_Unmarshal(b []byte) error { @@ -3487,7 +3630,7 @@ func (m *SubscribeBlockHeadersResponse) Reset() { *m = SubscribeBlockHea func (m *SubscribeBlockHeadersResponse) String() string { return proto.CompactTextString(m) } func (*SubscribeBlockHeadersResponse) ProtoMessage() {} func (*SubscribeBlockHeadersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{67} + return fileDescriptor_4382e32bb8e3e8e5, []int{70} } func (m *SubscribeBlockHeadersResponse) XXX_Unmarshal(b []byte) error { @@ -3537,7 +3680,7 @@ func (m *SubscribeBlockDigestsFromStartBlockIDRequest) String() string { } func (*SubscribeBlockDigestsFromStartBlockIDRequest) ProtoMessage() {} func (*SubscribeBlockDigestsFromStartBlockIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{68} + return fileDescriptor_4382e32bb8e3e8e5, []int{71} } func (m *SubscribeBlockDigestsFromStartBlockIDRequest) XXX_Unmarshal(b []byte) error { @@ -3594,7 +3737,7 @@ func (m *SubscribeBlockDigestsFromStartHeightRequest) String() string { } func (*SubscribeBlockDigestsFromStartHeightRequest) ProtoMessage() {} func (*SubscribeBlockDigestsFromStartHeightRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{69} + return fileDescriptor_4382e32bb8e3e8e5, []int{72} } func (m *SubscribeBlockDigestsFromStartHeightRequest) XXX_Unmarshal(b []byte) error { @@ -3647,7 +3790,7 @@ func (m *SubscribeBlockDigestsFromLatestRequest) Reset() { func (m *SubscribeBlockDigestsFromLatestRequest) String() string { return proto.CompactTextString(m) } func (*SubscribeBlockDigestsFromLatestRequest) ProtoMessage() {} func (*SubscribeBlockDigestsFromLatestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{70} + return fileDescriptor_4382e32bb8e3e8e5, []int{73} } func (m *SubscribeBlockDigestsFromLatestRequest) XXX_Unmarshal(b []byte) error { @@ -3696,7 +3839,7 @@ func (m *SubscribeBlockDigestsResponse) Reset() { *m = SubscribeBlockDig func (m *SubscribeBlockDigestsResponse) String() string { return proto.CompactTextString(m) } func (*SubscribeBlockDigestsResponse) ProtoMessage() {} func (*SubscribeBlockDigestsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{71} + return fileDescriptor_4382e32bb8e3e8e5, []int{74} } func (m *SubscribeBlockDigestsResponse) XXX_Unmarshal(b []byte) error { @@ -3759,7 +3902,7 @@ func (m *SendAndSubscribeTransactionStatusesRequest) String() string { } func (*SendAndSubscribeTransactionStatusesRequest) ProtoMessage() {} func (*SendAndSubscribeTransactionStatusesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{72} + return fileDescriptor_4382e32bb8e3e8e5, []int{75} } func (m *SendAndSubscribeTransactionStatusesRequest) XXX_Unmarshal(b []byte) error { @@ -3821,7 +3964,7 @@ func (m *SendAndSubscribeTransactionStatusesResponse) String() string { } func (*SendAndSubscribeTransactionStatusesResponse) ProtoMessage() {} func (*SendAndSubscribeTransactionStatusesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4382e32bb8e3e8e5, []int{73} + return fileDescriptor_4382e32bb8e3e8e5, []int{76} } func (m *SendAndSubscribeTransactionStatusesResponse) XXX_Unmarshal(b []byte) error { @@ -3918,6 +4061,9 @@ func init() { proto.RegisterType((*ExecutionResultForBlockIDResponse)(nil), "flow.access.ExecutionResultForBlockIDResponse") proto.RegisterType((*GetExecutionResultByIDRequest)(nil), "flow.access.GetExecutionResultByIDRequest") proto.RegisterType((*ExecutionResultByIDResponse)(nil), "flow.access.ExecutionResultByIDResponse") + proto.RegisterType((*GetExecutionReceiptsByBlockIDRequest)(nil), "flow.access.GetExecutionReceiptsByBlockIDRequest") + proto.RegisterType((*GetExecutionReceiptsByResultIDRequest)(nil), "flow.access.GetExecutionReceiptsByResultIDRequest") + proto.RegisterType((*ExecutionReceiptsResponse)(nil), "flow.access.ExecutionReceiptsResponse") proto.RegisterType((*SubscribeBlocksFromStartBlockIDRequest)(nil), "flow.access.SubscribeBlocksFromStartBlockIDRequest") proto.RegisterType((*SubscribeBlocksFromStartHeightRequest)(nil), "flow.access.SubscribeBlocksFromStartHeightRequest") proto.RegisterType((*SubscribeBlocksFromLatestRequest)(nil), "flow.access.SubscribeBlocksFromLatestRequest") @@ -3937,183 +4083,189 @@ func init() { func init() { proto.RegisterFile("flow/access/access.proto", fileDescriptor_4382e32bb8e3e8e5) } var fileDescriptor_4382e32bb8e3e8e5 = []byte{ - // 2839 bytes of a gzipped FileDescriptorProto + // 2944 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1c, 0x4d, 0x6f, 0xdc, 0xc6, - 0x15, 0xb3, 0x2b, 0xeb, 0xe3, 0xe9, 0xc3, 0xce, 0x48, 0x96, 0x57, 0x94, 0x65, 0xad, 0x29, 0x39, - 0x56, 0x6c, 0x77, 0xe5, 0xda, 0x2d, 0x62, 0xa7, 0x1f, 0x80, 0xe5, 0xd8, 0x8a, 0x10, 0x3b, 0x50, - 0x29, 0xc7, 0x45, 0xbf, 0xb2, 0xa0, 0x96, 0xa3, 0x15, 0xe1, 0x5d, 0x52, 0x21, 0xb9, 0xb6, 0x95, - 0x16, 0x45, 0x12, 0x38, 0x6e, 0x80, 0xa2, 0xdf, 0x40, 0xd1, 0x1a, 0x08, 0x50, 0xb4, 0xa7, 0x36, - 0x40, 0x8b, 0x1e, 0x72, 0x08, 0xda, 0xa2, 0x97, 0x1e, 0x7a, 0xea, 0xa9, 0x7f, 0xa2, 0xa7, 0xfe, - 0x85, 0x82, 0xc3, 0xe1, 0xee, 0x70, 0x38, 0xc3, 0xe5, 0xae, 0xac, 0x48, 0xea, 0xc5, 0x16, 0x67, - 0xde, 0xbc, 0xef, 0x79, 0xf3, 0x66, 0xde, 0x93, 0xa0, 0xb4, 0xd5, 0x70, 0x1f, 0x2d, 0x9b, 0xb5, - 0x1a, 0xf1, 0x7d, 0xf6, 0x5f, 0x65, 0xc7, 0x73, 0x03, 0x17, 0x8f, 0x86, 0x33, 0x95, 0x68, 0x48, - 0x9b, 0xa5, 0x60, 0xc4, 0x09, 0xec, 0xc0, 0x26, 0x14, 0xd0, 0x6d, 0x39, 0x41, 0x04, 0xa9, 0x95, - 0x93, 0x93, 0x9b, 0x0d, 0xb7, 0xf6, 0xa0, 0xba, 0x4d, 0x4c, 0x8b, 0x78, 0x0c, 0x62, 0x46, 0x02, - 0xc1, 0xa6, 0xce, 0x24, 0xa7, 0x6a, 0x6e, 0xa3, 0x41, 0x6a, 0x81, 0xed, 0x3a, 0xf2, 0xa5, 0xe4, - 0x21, 0x69, 0xd3, 0x5d, 0x14, 0xa6, 0x1e, 0x93, 0x5a, 0x2b, 0x5c, 0x59, 0xf5, 0x88, 0xdf, 0x6a, - 0xc4, 0x50, 0x0b, 0x2a, 0x28, 0x3f, 0x30, 0x03, 0xc2, 0x80, 0x4e, 0x27, 0x81, 0x9a, 0x24, 0x30, - 0x2d, 0x33, 0x30, 0xd9, 0xec, 0xb9, 0xe4, 0xac, 0xe3, 0x5a, 0xa4, 0xfa, 0x90, 0x78, 0x7e, 0x88, - 0xc5, 0x76, 0xb6, 0x5c, 0x06, 0x36, 0x9f, 0x04, 0x0b, 0x3c, 0xd3, 0xf1, 0x4d, 0x5e, 0x96, 0xf9, - 0xba, 0xeb, 0xd6, 0x1b, 0x64, 0x99, 0x7e, 0x6d, 0xb6, 0xb6, 0x96, 0x03, 0xbb, 0x49, 0xfc, 0xc0, - 0x6c, 0xee, 0x44, 0x00, 0xfa, 0x38, 0x8c, 0xae, 0xdb, 0x4e, 0xdd, 0x20, 0x6f, 0xb7, 0x88, 0x1f, - 0xe8, 0x13, 0x30, 0x16, 0x7d, 0xfa, 0x3b, 0xae, 0xe3, 0x13, 0x7d, 0x16, 0x66, 0x56, 0x49, 0xf0, - 0x86, 0x6b, 0x91, 0xfb, 0x11, 0xf5, 0x35, 0x67, 0xcb, 0x8d, 0x81, 0xd7, 0x41, 0x93, 0x4d, 0x46, - 0x4b, 0xf1, 0x15, 0x18, 0x08, 0x39, 0x2d, 0xa1, 0x32, 0x5a, 0x1a, 0xbd, 0x72, 0xa6, 0x42, 0x8d, - 0x1b, 0xb3, 0x5a, 0x11, 0x57, 0x51, 0x58, 0xfd, 0x15, 0x98, 0x5d, 0x25, 0xc1, 0x1d, 0x33, 0x20, - 0x7e, 0xb0, 0x12, 0x9a, 0xec, 0x35, 0x6a, 0x53, 0x46, 0x10, 0xcf, 0xc2, 0x88, 0xed, 0x57, 0x7d, - 0x62, 0x36, 0x88, 0x45, 0xf1, 0x0e, 0x1b, 0xc3, 0xb6, 0xbf, 0x41, 0xbf, 0xf5, 0x8b, 0x94, 0x55, - 0x6e, 0xd5, 0xca, 0xee, 0xda, 0xab, 0xf1, 0xca, 0x09, 0x28, 0xd8, 0xd1, 0x92, 0x31, 0xa3, 0x60, - 0x5b, 0xfa, 0xcb, 0x30, 0x27, 0x02, 0xbf, 0x46, 0xec, 0xfa, 0x76, 0x10, 0x2f, 0x98, 0x86, 0xc1, - 0x6d, 0x3a, 0x40, 0x17, 0x0d, 0x18, 0xec, 0x4b, 0xff, 0x0b, 0x82, 0xc9, 0x04, 0x67, 0x4c, 0xda, - 0xcb, 0x70, 0x8c, 0xfa, 0x18, 0x13, 0x57, 0x13, 0xc4, 0xe5, 0x97, 0x44, 0x80, 0xf8, 0x2b, 0x30, - 0x16, 0xf9, 0x6d, 0xe8, 0x15, 0x2d, 0xbf, 0x54, 0x28, 0xa3, 0xa5, 0x09, 0xf9, 0xc2, 0x0d, 0x0a, - 0x61, 0x8c, 0x6e, 0x76, 0x3e, 0xf0, 0x55, 0x18, 0x8e, 0x7d, 0xa6, 0x54, 0xa4, 0x34, 0x4f, 0x09, - 0x4b, 0xef, 0xb2, 0x69, 0xa3, 0x0d, 0xa8, 0x5b, 0x70, 0x32, 0xa9, 0xdf, 0x3c, 0x9a, 0xc5, 0x15, - 0x98, 0xdc, 0x6a, 0x35, 0x1a, 0xd5, 0x88, 0x5d, 0x8f, 0x89, 0x4c, 0x19, 0x1e, 0x36, 0x5e, 0x08, - 0xa7, 0x18, 0x2e, 0xe6, 0x34, 0x6f, 0xc2, 0x64, 0xac, 0xdc, 0x0c, 0x1b, 0xf4, 0x8c, 0xd6, 0x84, - 0x53, 0x1d, 0xb4, 0xb9, 0xac, 0xd5, 0x33, 0x89, 0x3f, 0x21, 0x18, 0x4f, 0x8c, 0xe0, 0x0b, 0x49, - 0xbb, 0x4e, 0xc9, 0xcc, 0x73, 0x90, 0x16, 0x7d, 0x1f, 0x41, 0x69, 0x95, 0x04, 0x37, 0xdb, 0x41, - 0x2c, 0x4b, 0xe3, 0xf7, 0xe1, 0xa4, 0x10, 0x8c, 0xaa, 0x6f, 0xb7, 0x88, 0xb7, 0x4b, 0x39, 0x1d, - 0xbd, 0xa2, 0x0b, 0xe4, 0x6e, 0xc5, 0xb0, 0x21, 0x83, 0xe4, 0x6b, 0x21, 0xa4, 0x31, 0x49, 0xd2, - 0x83, 0xfa, 0x53, 0x04, 0xa7, 0x57, 0x49, 0x70, 0xbb, 0xd5, 0x68, 0x1c, 0x2c, 0x23, 0x4f, 0x10, - 0xe0, 0x0e, 0x07, 0x6d, 0x23, 0x5e, 0x07, 0xe8, 0x44, 0x79, 0x66, 0xc9, 0x19, 0x81, 0x06, 0xb7, - 0x8c, 0x03, 0x4e, 0x18, 0xa5, 0x90, 0xd7, 0x28, 0x3f, 0x42, 0x30, 0x9d, 0x54, 0x46, 0x9b, 0x95, - 0xaf, 0xc2, 0x18, 0x17, 0xa5, 0xfd, 0x12, 0x2a, 0x17, 0x25, 0xe1, 0xe2, 0x5e, 0x07, 0xc4, 0x48, - 0xc0, 0xf7, 0xc7, 0xcf, 0x1f, 0x11, 0x4c, 0x6f, 0x10, 0xc7, 0xe2, 0xd1, 0x32, 0xcb, 0x7c, 0x19, - 0x46, 0x39, 0xfc, 0x8a, 0xe8, 0xc5, 0xaf, 0xe3, 0xc1, 0xf7, 0xcd, 0x8e, 0x6f, 0xc1, 0xa9, 0x14, - 0xbf, 0x4c, 0x81, 0xa2, 0x2b, 0xf5, 0xa5, 0x90, 0x67, 0x05, 0x1a, 0x08, 0x25, 0xfa, 0x10, 0xd1, - 0xcf, 0xc0, 0x70, 0xb4, 0xa7, 0x6d, 0x8b, 0xa2, 0x1f, 0x33, 0x86, 0xe8, 0xf7, 0x9a, 0x85, 0x17, - 0x60, 0xbc, 0xe3, 0x28, 0xe1, 0x7c, 0x91, 0xce, 0x8f, 0x75, 0x06, 0xd7, 0x2c, 0xfc, 0x0d, 0x98, - 0xa6, 0x09, 0x44, 0x95, 0x38, 0x35, 0xd7, 0xb2, 0x9d, 0x7a, 0x7c, 0x8c, 0x97, 0x06, 0x68, 0x74, - 0x58, 0x10, 0x55, 0x14, 0x02, 0xdf, 0x62, 0xb0, 0xec, 0x80, 0x34, 0xa6, 0x88, 0x64, 0x54, 0xad, - 0xfc, 0x63, 0x7b, 0x53, 0xfe, 0x6f, 0x10, 0x3d, 0x85, 0x37, 0x76, 0xfd, 0x80, 0x34, 0x25, 0x2a, - 0xe2, 0x55, 0x82, 0x92, 0x2a, 0x89, 0xb4, 0x57, 0xe8, 0xbe, 0xcf, 0x8b, 0x7b, 0x63, 0xf1, 0xbd, - 0x02, 0x9c, 0x95, 0xb3, 0x18, 0xa6, 0x61, 0x39, 0x18, 0x55, 0x9b, 0xa5, 0xb0, 0x6f, 0x66, 0xd9, - 0x9b, 0xcc, 0x4c, 0xb7, 0x03, 0xed, 0x14, 0xe6, 0x43, 0x04, 0x67, 0x42, 0x1d, 0xd4, 0xb6, 0x89, - 0xd5, 0x6a, 0x10, 0x2b, 0xd3, 0x99, 0x07, 0xf6, 0x35, 0xec, 0xfe, 0x07, 0xc1, 0xa2, 0x92, 0x15, - 0xde, 0x22, 0x22, 0x43, 0x47, 0xcf, 0x0c, 0xfa, 0xfb, 0x05, 0x7a, 0xd6, 0x71, 0x22, 0xae, 0xec, - 0xae, 0x39, 0x16, 0x79, 0x9c, 0xc3, 0xeb, 0xa6, 0xe0, 0x98, 0x1d, 0x82, 0x52, 0xe9, 0xc6, 0x8d, - 0xe8, 0x23, 0x43, 0x09, 0xc5, 0x7d, 0x53, 0xc2, 0xc0, 0xde, 0x94, 0xf0, 0x5f, 0x04, 0xf3, 0x49, - 0x25, 0xf8, 0x2b, 0xbb, 0x34, 0xb1, 0xe9, 0x9c, 0xf9, 0xff, 0x57, 0xbb, 0x4f, 0xff, 0x03, 0x02, - 0x2d, 0xe5, 0xd6, 0x7e, 0xfb, 0x54, 0xfa, 0x3a, 0x4c, 0x72, 0xe7, 0x22, 0xbb, 0x0e, 0xc6, 0xa7, - 0xfb, 0x8b, 0x15, 0xee, 0x62, 0x5b, 0x91, 0x6c, 0x8e, 0x08, 0x89, 0x81, 0x83, 0x14, 0x81, 0xfe, - 0x8e, 0xb7, 0x1f, 0x22, 0x98, 0xe2, 0x6d, 0x73, 0xb0, 0xd9, 0xc7, 0x87, 0x08, 0x26, 0x65, 0x27, - 0xf9, 0xde, 0x52, 0x8f, 0xbe, 0x58, 0xf9, 0xa4, 0x08, 0x33, 0x4a, 0xfd, 0xe3, 0x6b, 0x30, 0xc8, - 0x32, 0x77, 0x44, 0xdd, 0xb0, 0xac, 0xe6, 0x85, 0xe5, 0xef, 0x0c, 0x1e, 0xcf, 0xc3, 0x68, 0xf4, - 0x53, 0xb5, 0xe6, 0x5a, 0x84, 0x6d, 0x6f, 0x88, 0x86, 0x6e, 0xba, 0x16, 0x09, 0x73, 0x05, 0xe2, - 0x79, 0xae, 0x57, 0x6d, 0x12, 0xdf, 0x37, 0xeb, 0x84, 0xba, 0xe3, 0x88, 0x31, 0x46, 0x07, 0xef, - 0x46, 0x63, 0xf8, 0x12, 0x0c, 0x52, 0x9f, 0xf6, 0x4b, 0x03, 0xd4, 0x2e, 0x53, 0xb2, 0x6d, 0x60, - 0x30, 0x98, 0xc4, 0xfe, 0x3a, 0x96, 0xdc, 0x5f, 0xe7, 0x60, 0x82, 0xf7, 0x46, 0xdb, 0x2a, 0x0d, - 0x52, 0x80, 0x71, 0x6e, 0x54, 0x96, 0xc0, 0x0c, 0x49, 0x12, 0x98, 0xb3, 0xf1, 0xa5, 0x86, 0x5d, - 0xb0, 0x86, 0x69, 0xf0, 0x8e, 0x2e, 0x2e, 0xd1, 0x25, 0x2c, 0x61, 0x8a, 0x91, 0x9c, 0xa6, 0xc0, - 0x17, 0xe1, 0x85, 0x9a, 0xdb, 0xdc, 0x69, 0x05, 0x26, 0xa5, 0xde, 0xa2, 0x5a, 0x01, 0x8a, 0xfc, - 0x04, 0x37, 0xf1, 0x66, 0x38, 0xae, 0x7f, 0x80, 0xe0, 0x85, 0x55, 0x12, 0xdc, 0x88, 0x1e, 0x81, - 0xe2, 0x08, 0x53, 0x82, 0x21, 0xd3, 0xb2, 0x3c, 0xe2, 0xfb, 0x71, 0x80, 0x61, 0x9f, 0xfb, 0x76, - 0xd0, 0x7d, 0x17, 0x30, 0xcf, 0x46, 0xfb, 0xee, 0x3f, 0xc4, 0x9e, 0xa7, 0x98, 0x13, 0x4f, 0x0b, - 0xf8, 0xe3, 0x05, 0x31, 0x58, 0x7f, 0xce, 0xfb, 0xf3, 0xe8, 0xc0, 0x67, 0xc8, 0x6e, 0xc8, 0xae, - 0xf1, 0x9f, 0xbd, 0x46, 0x1e, 0xc3, 0xf1, 0x03, 0x52, 0xc7, 0x27, 0x82, 0x3a, 0x56, 0x3a, 0x1e, - 0xd9, 0x5d, 0x1d, 0xa2, 0x57, 0x17, 0xd2, 0x5e, 0xbd, 0x5f, 0x27, 0xc9, 0xaf, 0x11, 0x9c, 0xeb, - 0xf0, 0xbd, 0x62, 0x36, 0x4c, 0xa7, 0x46, 0x0e, 0x89, 0x35, 0xff, 0x2a, 0xe7, 0xed, 0xa8, 0xa8, - 0xb6, 0x0e, 0xd3, 0x49, 0xd6, 0xdb, 0x3e, 0x59, 0x82, 0xa1, 0xcd, 0x68, 0x88, 0x65, 0x9f, 0xf1, - 0x67, 0x7f, 0xbe, 0xf7, 0x4b, 0x04, 0x7a, 0x47, 0x4f, 0xaf, 0x93, 0x5d, 0xff, 0x90, 0x18, 0xf0, - 0x63, 0x44, 0x2f, 0x46, 0x1d, 0xc6, 0x7a, 0xe4, 0x4b, 0x9e, 0xa1, 0xee, 0x97, 0xbd, 0x3e, 0x95, - 0xa8, 0xf1, 0xa8, 0xf8, 0xda, 0xbf, 0xd2, 0x9a, 0x7e, 0xde, 0xac, 0xb7, 0x8d, 0x51, 0xcc, 0x65, - 0x8c, 0x3d, 0xe6, 0xf4, 0x61, 0x9a, 0xc6, 0x59, 0x82, 0x4b, 0xd3, 0xc6, 0x58, 0x9c, 0xae, 0x3e, - 0x20, 0xbb, 0x71, 0xce, 0x38, 0x23, 0x8f, 0xe9, 0xaf, 0x93, 0x5d, 0x63, 0xd4, 0xec, 0x60, 0xe9, - 0x6f, 0x7b, 0x7d, 0x80, 0x00, 0x73, 0x08, 0x63, 0x4e, 0x5e, 0x81, 0x51, 0x8e, 0x13, 0xc5, 0x3b, - 0x1e, 0xb7, 0x0e, 0x3a, 0x8c, 0xf4, 0xc7, 0xc7, 0x9f, 0x11, 0x9c, 0x8d, 0xf4, 0x47, 0x36, 0x6a, - 0x9e, 0xbd, 0x23, 0x3f, 0x74, 0xa7, 0x61, 0xd0, 0xa7, 0xb3, 0xcc, 0xc4, 0xec, 0x0b, 0x9f, 0x86, - 0x11, 0xd3, 0xab, 0xb7, 0x9a, 0x34, 0xa3, 0x2b, 0x94, 0x8b, 0x4b, 0x63, 0x46, 0x67, 0x60, 0xdf, - 0xfc, 0xf2, 0x9f, 0x08, 0xe6, 0x04, 0x9e, 0xf3, 0x5f, 0xcc, 0x3a, 0xa2, 0x14, 0xd4, 0xa2, 0x14, - 0x73, 0x8b, 0xb2, 0x47, 0x8f, 0xfc, 0x77, 0x5a, 0xfd, 0x92, 0x2d, 0x26, 0x6e, 0x24, 0x94, 0xde, - 0x48, 0x87, 0x4b, 0xac, 0x9f, 0x20, 0x38, 0x99, 0x10, 0xab, 0xed, 0xe0, 0x53, 0x70, 0xec, 0xa1, - 0xd9, 0x68, 0x11, 0x66, 0x96, 0xe8, 0xa3, 0x2f, 0xd7, 0x95, 0xa7, 0xd7, 0x45, 0x45, 0x7a, 0xfd, - 0xfb, 0x02, 0x4d, 0xa5, 0xe8, 0xfd, 0xc2, 0xbf, 0xed, 0x7a, 0x4c, 0xc1, 0xa6, 0x53, 0x27, 0xb1, - 0x96, 0x31, 0x0c, 0x04, 0xbb, 0x3b, 0x11, 0x67, 0x23, 0x06, 0xfd, 0x39, 0xd4, 0xbc, 0x1f, 0x98, - 0x5e, 0x20, 0x84, 0x30, 0x3a, 0xc6, 0x34, 0x3f, 0x07, 0x40, 0x1c, 0x2b, 0x06, 0x88, 0xe8, 0x8f, - 0x10, 0xc7, 0x62, 0xd3, 0x47, 0xf0, 0x75, 0xf4, 0xbd, 0x02, 0x7d, 0x1d, 0x6d, 0xeb, 0x8a, 0x6d, - 0x2e, 0x3f, 0x4b, 0x51, 0xb3, 0x30, 0x12, 0xef, 0xb8, 0x38, 0x12, 0x0c, 0xb3, 0x2d, 0xe7, 0x1f, - 0xc5, 0xe7, 0x9f, 0xbf, 0x17, 0x60, 0x22, 0x52, 0x00, 0x77, 0x4a, 0x0c, 0x25, 0x1f, 0x3d, 0xf4, - 0xc4, 0xa3, 0x47, 0x12, 0xba, 0xc2, 0x2e, 0xde, 0xf1, 0x92, 0xbe, 0x5c, 0x5c, 0xfb, 0x14, 0xc1, - 0x60, 0x84, 0x28, 0x2b, 0xa4, 0xe5, 0x38, 0x67, 0x3b, 0xf7, 0xee, 0x62, 0x8e, 0x7b, 0xf7, 0x4d, - 0x38, 0x1e, 0x21, 0x6c, 0x97, 0xd2, 0x99, 0x3a, 0xb5, 0x4a, 0x54, 0x6c, 0xaf, 0xc4, 0xc5, 0xf6, - 0xca, 0xbd, 0x18, 0xc2, 0x98, 0xa0, 0x4b, 0xda, 0xdf, 0xfa, 0x1c, 0x75, 0xa2, 0x37, 0x48, 0xf0, - 0xc8, 0xf5, 0x1e, 0xac, 0x9b, 0x9e, 0xd9, 0x24, 0x01, 0xf1, 0x62, 0x27, 0xd2, 0xaf, 0xd3, 0x37, - 0x46, 0xc9, 0x34, 0xd3, 0xf6, 0x0c, 0x0c, 0xd7, 0xb6, 0x4d, 0xdb, 0x89, 0xe5, 0x1d, 0x31, 0x86, - 0xe8, 0xf7, 0x9a, 0xa5, 0x9f, 0xa7, 0x19, 0x7c, 0x74, 0x4c, 0xad, 0x87, 0x8c, 0xd4, 0xdc, 0x06, - 0x35, 0xdd, 0x86, 0x63, 0xee, 0xf8, 0xdb, 0x6e, 0x1c, 0x37, 0xf5, 0x5b, 0xb0, 0xb4, 0x4a, 0xe4, - 0x20, 0x3d, 0xbc, 0xe5, 0xe9, 0x77, 0xe0, 0xbc, 0x1a, 0x4d, 0xaf, 0x91, 0x5a, 0x7f, 0x82, 0x60, - 0x4e, 0xc1, 0x35, 0x13, 0xbd, 0x02, 0xd8, 0x27, 0x9e, 0x6d, 0x36, 0xec, 0x77, 0x88, 0x15, 0xcf, - 0x32, 0xa6, 0x24, 0x33, 0xfd, 0x1d, 0xfc, 0xbf, 0x42, 0xb0, 0x10, 0x6e, 0xf2, 0xd8, 0xf7, 0x23, - 0x37, 0xeb, 0xec, 0xf6, 0x1c, 0x47, 0xe9, 0x7e, 0x65, 0xf8, 0xbf, 0x6b, 0x1f, 0x8a, 0x52, 0xbe, - 0x98, 0x96, 0xd6, 0xe0, 0x84, 0xd8, 0x9c, 0xa2, 0x68, 0xc4, 0x10, 0x70, 0x19, 0xc7, 0x49, 0x72, - 0xa0, 0x3f, 0x05, 0xfe, 0x00, 0xd1, 0x06, 0x0b, 0x01, 0xf9, 0x41, 0x94, 0x84, 0x3f, 0x42, 0x30, - 0x2b, 0x65, 0xe3, 0x90, 0x68, 0xea, 0x6f, 0x08, 0x5e, 0xdc, 0x68, 0x6d, 0x86, 0x19, 0xc9, 0x26, - 0xa1, 0x66, 0xf4, 0x6f, 0x7b, 0x6e, 0x73, 0x23, 0x3c, 0x44, 0x05, 0x6f, 0x5b, 0x84, 0x89, 0xe8, - 0xbc, 0x15, 0x7c, 0x2e, 0x3a, 0x85, 0x57, 0x98, 0xe3, 0xed, 0xb1, 0x0b, 0x41, 0xd1, 0x32, 0x51, - 0x54, 0xb5, 0x4c, 0xfc, 0x03, 0xc1, 0x39, 0x15, 0xff, 0xc9, 0xed, 0x7f, 0x09, 0x30, 0xcf, 0x7e, - 0x22, 0x08, 0x9c, 0xe8, 0x88, 0xc0, 0x82, 0xf2, 0x67, 0x2c, 0xc6, 0xcf, 0x10, 0x94, 0x25, 0x62, - 0x44, 0x71, 0x34, 0x96, 0x40, 0xe4, 0x09, 0x3d, 0x17, 0x9e, 0x94, 0xdd, 0x28, 0xb7, 0xe0, 0x94, - 0xc0, 0x52, 0x3f, 0x6d, 0x29, 0xfa, 0x2f, 0x10, 0x5c, 0x4a, 0xe2, 0x89, 0x1a, 0x91, 0x0e, 0xd4, - 0xcf, 0xf4, 0x67, 0x08, 0x2e, 0x66, 0x73, 0x75, 0x70, 0xde, 0xa3, 0xd7, 0xc5, 0x3d, 0xc9, 0xf1, - 0xf6, 0x3c, 0x5d, 0x42, 0xdf, 0x80, 0x39, 0x29, 0x21, 0xae, 0x8b, 0x6e, 0x30, 0xea, 0x6b, 0xcc, - 0xd1, 0x58, 0xc6, 0x20, 0x25, 0x06, 0x7f, 0xd5, 0xae, 0x13, 0x3f, 0x38, 0x6c, 0x06, 0x17, 0xb9, - 0x3a, 0x4c, 0x06, 0xe7, 0x78, 0x7b, 0xae, 0x06, 0xff, 0x2d, 0x12, 0x2d, 0xce, 0x28, 0xf1, 0xb9, - 0xdd, 0x1e, 0x72, 0x59, 0x49, 0x76, 0x5a, 0xec, 0x39, 0x3b, 0xfd, 0xa8, 0x00, 0x17, 0x36, 0x88, - 0x63, 0xdd, 0x70, 0xac, 0x36, 0xaf, 0xa9, 0xe2, 0x17, 0xf1, 0x9f, 0x4f, 0x0f, 0xd1, 0x11, 0x2c, - 0x06, 0x7f, 0x1c, 0xba, 0x72, 0x1e, 0xfd, 0x74, 0xab, 0x0e, 0xa3, 0x3d, 0x56, 0x87, 0x17, 0x60, - 0x9c, 0x15, 0x14, 0xab, 0x9d, 0x67, 0xdb, 0x01, 0x63, 0x8c, 0x0d, 0xd2, 0xbe, 0x84, 0x2b, 0x4f, - 0x2f, 0xc1, 0xc8, 0x0d, 0x8a, 0xfd, 0xc6, 0xfa, 0x1a, 0xfe, 0x12, 0x0c, 0xac, 0xdb, 0x4e, 0x1d, - 0x97, 0x12, 0x64, 0xb9, 0x1e, 0x60, 0x6d, 0x46, 0x32, 0xc3, 0x04, 0x21, 0xb4, 0xfe, 0x25, 0xf4, - 0xee, 0xe2, 0xa4, 0x04, 0xca, 0x7e, 0x61, 0xed, 0x7c, 0x57, 0x38, 0x46, 0x66, 0x13, 0xa6, 0x64, - 0x6d, 0xc0, 0x78, 0x49, 0x44, 0xa0, 0xea, 0x14, 0xd6, 0xca, 0x09, 0x48, 0x59, 0xc3, 0xee, 0x5b, - 0x54, 0x14, 0xa1, 0x5d, 0x38, 0x2d, 0x8a, 0xbc, 0x9f, 0x38, 0x07, 0xfe, 0x2d, 0x98, 0x96, 0x77, - 0x18, 0xe3, 0x0b, 0x99, 0x34, 0x12, 0x41, 0x30, 0x07, 0x9d, 0x75, 0x98, 0x48, 0x2a, 0x02, 0xeb, - 0x19, 0x5a, 0x8a, 0xf1, 0x6a, 0x69, 0xbc, 0x6d, 0x8c, 0x77, 0x60, 0x8c, 0x6f, 0xdf, 0xc5, 0x65, - 0x29, 0xbf, 0xbc, 0x36, 0xb2, 0xb0, 0xdd, 0x83, 0x13, 0x62, 0xd7, 0x2e, 0x5e, 0x54, 0x60, 0x4c, - 0xca, 0x9e, 0x85, 0xf5, 0x5b, 0xb4, 0x1e, 0x9c, 0x6c, 0x36, 0xc5, 0xe7, 0x44, 0xb4, 0xd2, 0x66, - 0x54, 0x6d, 0x3e, 0x01, 0x26, 0xe9, 0xd1, 0xac, 0xd3, 0xe6, 0xc0, 0x74, 0x37, 0x2b, 0x7e, 0x49, - 0x24, 0xa0, 0xec, 0x78, 0xd5, 0x16, 0x12, 0xa0, 0x8a, 0x66, 0xd0, 0x6f, 0xc3, 0x71, 0xa1, 0xcd, - 0x11, 0x27, 0xd7, 0xc9, 0x9b, 0x36, 0xb5, 0xc5, 0x6c, 0x20, 0x86, 0xfd, 0x3e, 0xf5, 0x0c, 0x1e, - 0x79, 0xca, 0x33, 0x24, 0xb8, 0xcb, 0x19, 0xe1, 0x88, 0xdf, 0x9d, 0xa9, 0x40, 0x95, 0x0b, 0x7b, - 0xce, 0x60, 0x87, 0x77, 0xe8, 0xfb, 0x48, 0x6a, 0x9e, 0xb5, 0x5a, 0xa5, 0x0d, 0xa1, 0x6c, 0xc7, - 0xca, 0x4d, 0xf1, 0x11, 0x7d, 0x02, 0x4d, 0xb7, 0xf8, 0xb4, 0xdf, 0x42, 0xf0, 0xa5, 0x0c, 0xa2, - 0xa9, 0xf6, 0x27, 0x21, 0xd8, 0x65, 0xb4, 0x0e, 0x3d, 0xa0, 0x0d, 0xdc, 0x52, 0x5c, 0x3d, 0x92, - 0x3c, 0xab, 0x22, 0xe9, 0x0b, 0xb6, 0x4b, 0xf5, 0x4d, 0xa6, 0x23, 0xab, 0xaa, 0xfb, 0x33, 0x87, - 0x7f, 0x04, 0xf4, 0xd7, 0x42, 0x14, 0xbd, 0x99, 0xb8, 0x92, 0x83, 0x12, 0xd7, 0x32, 0x98, 0xdb, - 0x7e, 0xdb, 0xf4, 0xb7, 0x03, 0x64, 0x2d, 0x88, 0xf8, 0x62, 0x8a, 0xa4, 0xba, 0x67, 0x32, 0x87, - 0x7c, 0xef, 0xd0, 0xa7, 0x0d, 0x75, 0xb3, 0x23, 0xfe, 0x7c, 0x3e, 0x7a, 0xfd, 0x48, 0x79, 0x17, - 0xa0, 0x53, 0x74, 0xc4, 0x67, 0x44, 0x42, 0xc9, 0x06, 0x19, 0x21, 0xd2, 0x49, 0x3a, 0x57, 0x2c, - 0xaa, 0x34, 0x59, 0x47, 0x49, 0x5a, 0x69, 0x19, 0x7d, 0x27, 0xda, 0xe9, 0x04, 0x70, 0x17, 0x2a, - 0x7c, 0xda, 0xae, 0xa6, 0x92, 0xae, 0xf4, 0x74, 0xa1, 0xb2, 0xcb, 0xb7, 0x83, 0xc8, 0xda, 0x2a, - 0xf0, 0x15, 0x05, 0xb1, 0x8c, 0x1e, 0x0c, 0x21, 0x8e, 0x2b, 0xba, 0x0b, 0xe4, 0xa4, 0x79, 0x39, - 0xbb, 0x92, 0x96, 0x88, 0x9b, 0x8b, 0x74, 0x14, 0x28, 0x55, 0x8d, 0x08, 0x78, 0x59, 0x41, 0x57, - 0xd5, 0xb2, 0x20, 0xb8, 0xbf, 0xac, 0x1e, 0x2c, 0xa1, 0xc8, 0x4b, 0x9a, 0x4d, 0x51, 0x22, 0x66, - 0x77, 0x8a, 0x4d, 0x1a, 0x50, 0x14, 0x3d, 0x0d, 0xe9, 0x80, 0x92, 0xdd, 0xfc, 0x20, 0x6c, 0x0a, - 0x49, 0x99, 0x39, 0x4d, 0x8e, 0x97, 0x2f, 0x93, 0x9c, 0x44, 0xbc, 0xae, 0xe4, 0x76, 0x40, 0x53, - 0xd7, 0x98, 0x05, 0x72, 0x5d, 0x8b, 0xd1, 0x9a, 0xae, 0x86, 0xe7, 0x42, 0xe5, 0xb4, 0xbc, 0x42, - 0x2c, 0xa4, 0xa6, 0x99, 0x65, 0xe4, 0x5c, 0x94, 0xd2, 0xb2, 0xa9, 0x55, 0xd9, 0xb5, 0xd2, 0x9b, - 0x8b, 0x62, 0x8d, 0xc6, 0x1a, 0x59, 0x25, 0x33, 0x1d, 0x6b, 0x32, 0xea, 0x9d, 0xda, 0x6c, 0x46, - 0xf9, 0x0a, 0x7f, 0x87, 0x9e, 0xa2, 0xa9, 0x12, 0x60, 0xfa, 0x14, 0x55, 0x55, 0x09, 0xb3, 0xd1, - 0x3f, 0xa0, 0xe8, 0x53, 0xd5, 0x9f, 0x34, 0x7a, 0x55, 0xfd, 0x48, 0x7b, 0x29, 0x07, 0x24, 0x23, - 0xf6, 0x6e, 0xd4, 0x46, 0x97, 0x51, 0x30, 0x4a, 0x07, 0xaf, 0xee, 0xd5, 0x25, 0x2d, 0xe9, 0x49, - 0xd9, 0x25, 0x9d, 0xa7, 0x51, 0x2b, 0x4d, 0x76, 0x29, 0x0a, 0x7f, 0x51, 0xe4, 0x22, 0x57, 0xe9, - 0xaa, 0x27, 0x46, 0x9e, 0x20, 0x28, 0x77, 0x2b, 0x66, 0xe1, 0x2f, 0xe4, 0xe4, 0x23, 0xe9, 0xbb, - 0xbd, 0xb0, 0xf1, 0x6e, 0xf4, 0xeb, 0x74, 0xca, 0x2a, 0x0f, 0xbe, 0x9c, 0xf2, 0xb3, 0x2e, 0x85, - 0x2a, 0x4d, 0xb6, 0xd5, 0xb2, 0xea, 0x47, 0x0e, 0xbd, 0xbd, 0x4a, 0xea, 0x26, 0xe9, 0xdb, 0xab, - 0xba, 0xc6, 0xa3, 0x2d, 0x65, 0x51, 0x4d, 0x54, 0x61, 0xbe, 0x0f, 0xf3, 0x5d, 0x8a, 0x20, 0xf8, - 0x6a, 0xf2, 0xd2, 0x93, 0xab, 0x64, 0x22, 0xde, 0x94, 0xe4, 0xaf, 0xe9, 0x97, 0x11, 0xfe, 0x1e, - 0x9c, 0xc9, 0x2e, 0x62, 0x08, 0x9b, 0x20, 0x57, 0xc5, 0x23, 0x37, 0x75, 0x0f, 0x66, 0x94, 0xb5, - 0x07, 0xfc, 0xb9, 0x6e, 0x84, 0x13, 0xef, 0x93, 0xb9, 0x69, 0xfe, 0x34, 0x55, 0xb7, 0x51, 0x54, - 0x05, 0xf0, 0xf5, 0x0c, 0x8c, 0xd9, 0x95, 0x04, 0xc1, 0xeb, 0x33, 0x5f, 0xba, 0x2f, 0x23, 0xfc, - 0x63, 0x04, 0x8b, 0x79, 0x4a, 0x02, 0xf8, 0x5a, 0x0f, 0x1c, 0x65, 0x6d, 0xc3, 0x6e, 0x0c, 0x3d, - 0x41, 0xa2, 0x5b, 0xa6, 0xea, 0x00, 0x99, 0x6e, 0xa9, 0xaa, 0x1a, 0xf4, 0xc8, 0x46, 0xda, 0x54, - 0x8a, 0xf7, 0xfc, 0x4c, 0x53, 0x65, 0xd7, 0x00, 0x32, 0x59, 0x12, 0x9e, 0xa8, 0xa5, 0xa6, 0x92, - 0x3f, 0xe6, 0x67, 0x9a, 0x2a, 0xf3, 0xfd, 0xbf, 0x47, 0x86, 0xd2, 0xa6, 0x4a, 0xbd, 0xe0, 0x67, - 0x9a, 0x4a, 0xf5, 0xde, 0xdf, 0x23, 0x1b, 0xcf, 0x10, 0x2c, 0xe4, 0x78, 0x19, 0xc6, 0x2f, 0xa7, - 0x5e, 0x70, 0xf2, 0xbd, 0xb5, 0x6b, 0xd7, 0x7a, 0x5f, 0x18, 0x33, 0xb7, 0x72, 0x07, 0x34, 0xd7, - 0xab, 0x57, 0x5c, 0x87, 0xa2, 0x68, 0xd7, 0x01, 0x22, 0x5c, 0xdf, 0xac, 0xd4, 0xed, 0x60, 0xbb, - 0xb5, 0x59, 0xa9, 0xb9, 0xcd, 0xe5, 0x08, 0x64, 0x99, 0xfe, 0xd3, 0xfe, 0xd3, 0x11, 0x75, 0x77, - 0x99, 0xfb, 0xd3, 0x1d, 0x9b, 0x83, 0x74, 0xe2, 0xea, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xf1, - 0xcf, 0xfe, 0x26, 0xd0, 0x43, 0x00, 0x00, + 0x15, 0xb3, 0x2b, 0xeb, 0xe3, 0xe9, 0xc3, 0xce, 0x48, 0x91, 0x57, 0x94, 0x65, 0xc9, 0x94, 0x94, + 0x28, 0xb6, 0xbb, 0x72, 0xed, 0x16, 0xb1, 0x93, 0xb6, 0x80, 0xe5, 0xd8, 0x8a, 0x10, 0x3b, 0x50, + 0x29, 0xc7, 0x45, 0xbf, 0x22, 0x50, 0xcb, 0xd1, 0x8a, 0xd0, 0x8a, 0x54, 0x48, 0xae, 0x6d, 0xb9, + 0x45, 0xe1, 0x04, 0x4e, 0x1a, 0xa0, 0x48, 0x3f, 0x81, 0xa2, 0x35, 0x10, 0xa0, 0x68, 0x4f, 0x6d, + 0x80, 0x16, 0x3d, 0xe4, 0x10, 0xb4, 0x45, 0x2f, 0x3d, 0xf4, 0xd4, 0x53, 0xff, 0x44, 0x4f, 0xfd, + 0x0b, 0x05, 0x67, 0x86, 0x4b, 0x72, 0x38, 0xc3, 0xe5, 0xae, 0xac, 0x48, 0xea, 0xc5, 0x16, 0x67, + 0xde, 0xbc, 0xef, 0x79, 0xf3, 0x66, 0xde, 0x93, 0xa0, 0xb2, 0xd9, 0x70, 0x1f, 0x2c, 0x9a, 0xb5, + 0x1a, 0xf1, 0x7d, 0xfe, 0x5f, 0x75, 0xd7, 0x73, 0x03, 0x17, 0x0f, 0x86, 0x33, 0x55, 0x36, 0xa4, + 0x4d, 0x52, 0x30, 0xe2, 0x04, 0x76, 0x60, 0x13, 0x0a, 0xe8, 0x36, 0x9d, 0x80, 0x41, 0x6a, 0x33, + 0xe9, 0xc9, 0x8d, 0x86, 0x5b, 0xdb, 0x5e, 0xdf, 0x22, 0xa6, 0x45, 0x3c, 0x0e, 0x31, 0x21, 0x81, + 0xe0, 0x53, 0x67, 0xd3, 0x53, 0x35, 0xb7, 0xd1, 0x20, 0xb5, 0xc0, 0x76, 0x1d, 0xf9, 0x52, 0x72, + 0x9f, 0xb4, 0xe8, 0xce, 0x09, 0x53, 0x0f, 0x49, 0xad, 0x19, 0xae, 0x5c, 0xf7, 0x88, 0xdf, 0x6c, + 0x44, 0x50, 0xb3, 0x2a, 0x28, 0x3f, 0x30, 0x03, 0xc2, 0x81, 0xce, 0xa4, 0x81, 0x76, 0x48, 0x60, + 0x5a, 0x66, 0x60, 0xf2, 0xd9, 0xf9, 0xf4, 0xac, 0xe3, 0x5a, 0x64, 0xfd, 0x3e, 0xf1, 0xfc, 0x10, + 0x8b, 0xed, 0x6c, 0xba, 0x1c, 0x6c, 0x3a, 0x0d, 0x16, 0x78, 0xa6, 0xe3, 0x9b, 0x49, 0x59, 0xa6, + 0xeb, 0xae, 0x5b, 0x6f, 0x90, 0x45, 0xfa, 0xb5, 0xd1, 0xdc, 0x5c, 0x0c, 0xec, 0x1d, 0xe2, 0x07, + 0xe6, 0xce, 0x2e, 0x03, 0xd0, 0x87, 0x61, 0x70, 0xd5, 0x76, 0xea, 0x06, 0x79, 0xa7, 0x49, 0xfc, + 0x40, 0x1f, 0x81, 0x21, 0xf6, 0xe9, 0xef, 0xba, 0x8e, 0x4f, 0xf4, 0x49, 0x98, 0x58, 0x26, 0xc1, + 0x9b, 0xae, 0x45, 0xee, 0x31, 0xea, 0x2b, 0xce, 0xa6, 0x1b, 0x01, 0xaf, 0x82, 0x26, 0x9b, 0x64, + 0x4b, 0xf1, 0x65, 0xe8, 0x09, 0x39, 0xad, 0xa0, 0x19, 0xb4, 0x30, 0x78, 0xf9, 0x6c, 0x95, 0x1a, + 0x37, 0x62, 0xb5, 0x2a, 0xae, 0xa2, 0xb0, 0xfa, 0x2b, 0x30, 0xb9, 0x4c, 0x82, 0xdb, 0x66, 0x40, + 0xfc, 0x60, 0x29, 0x34, 0xd9, 0xeb, 0xd4, 0xa6, 0x9c, 0x20, 0x9e, 0x84, 0x01, 0xdb, 0x5f, 0xf7, + 0x89, 0xd9, 0x20, 0x16, 0xc5, 0xdb, 0x6f, 0xf4, 0xdb, 0xfe, 0x1a, 0xfd, 0xd6, 0x2f, 0x50, 0x56, + 0x13, 0xab, 0x96, 0xf6, 0x56, 0x5e, 0x8b, 0x56, 0x8e, 0x40, 0xc9, 0x66, 0x4b, 0x86, 0x8c, 0x92, + 0x6d, 0xe9, 0x2f, 0xc3, 0x94, 0x08, 0xfc, 0x3a, 0xb1, 0xeb, 0x5b, 0x41, 0xb4, 0x60, 0x1c, 0x7a, + 0xb7, 0xe8, 0x00, 0x5d, 0xd4, 0x63, 0xf0, 0x2f, 0xfd, 0x2f, 0x08, 0x46, 0x53, 0x9c, 0x71, 0x69, + 0x2f, 0xc1, 0x09, 0xea, 0x63, 0x5c, 0x5c, 0x4d, 0x10, 0x37, 0xb9, 0x84, 0x01, 0xe2, 0xaf, 0xc2, + 0x10, 0xf3, 0xdb, 0xd0, 0x2b, 0x9a, 0x7e, 0xa5, 0x34, 0x83, 0x16, 0x46, 0xe4, 0x0b, 0xd7, 0x28, + 0x84, 0x31, 0xb8, 0x11, 0x7f, 0xe0, 0x2b, 0xd0, 0x1f, 0xf9, 0x4c, 0xa5, 0x4c, 0x69, 0x9e, 0x16, + 0x96, 0xde, 0xe1, 0xd3, 0x46, 0x0b, 0x50, 0xb7, 0xe0, 0xf9, 0xb4, 0x7e, 0x8b, 0x68, 0x16, 0x57, + 0x61, 0x74, 0xb3, 0xd9, 0x68, 0xac, 0x33, 0x76, 0x3d, 0x2e, 0x32, 0x65, 0xb8, 0xdf, 0x78, 0x2e, + 0x9c, 0xe2, 0xb8, 0xb8, 0xd3, 0xbc, 0x05, 0xa3, 0x91, 0x72, 0x73, 0x6c, 0xd0, 0x31, 0x5a, 0x13, + 0x4e, 0xc7, 0x68, 0x0b, 0x59, 0xab, 0x63, 0x12, 0x7f, 0x42, 0x30, 0x9c, 0x1a, 0xc1, 0xe7, 0xd3, + 0x76, 0x1d, 0x93, 0x99, 0xe7, 0x30, 0x2d, 0xfa, 0x1e, 0x82, 0xca, 0x32, 0x09, 0x6e, 0xb4, 0x82, + 0x58, 0x9e, 0xc6, 0xef, 0xc1, 0xf3, 0x42, 0x30, 0x5a, 0x7f, 0xa7, 0x49, 0xbc, 0x3d, 0xca, 0xe9, + 0xe0, 0x65, 0x5d, 0x20, 0x77, 0x33, 0x82, 0x0d, 0x19, 0x24, 0x5f, 0x0f, 0x21, 0x8d, 0x51, 0x92, + 0x1d, 0xd4, 0x3f, 0x40, 0x70, 0x66, 0x99, 0x04, 0xb7, 0x9a, 0x8d, 0xc6, 0xe1, 0x32, 0xf2, 0x04, + 0x01, 0x8e, 0x39, 0x68, 0x19, 0xf1, 0x1a, 0x40, 0x1c, 0xe5, 0xb9, 0x25, 0x27, 0x04, 0x1a, 0x89, + 0x65, 0x09, 0xe0, 0x94, 0x51, 0x4a, 0x45, 0x8d, 0xf2, 0x11, 0x82, 0xf1, 0xb4, 0x32, 0x5a, 0xac, + 0x7c, 0x0d, 0x86, 0x12, 0x51, 0xda, 0xaf, 0xa0, 0x99, 0xb2, 0x24, 0x5c, 0xdc, 0x8d, 0x41, 0x8c, + 0x14, 0x7c, 0x77, 0xfc, 0xfc, 0x11, 0xc1, 0xf8, 0x1a, 0x71, 0xac, 0x24, 0x5a, 0x6e, 0x99, 0xaf, + 0xc0, 0x60, 0x02, 0xbf, 0x22, 0x7a, 0x25, 0xd7, 0x25, 0xc1, 0x0f, 0xcc, 0x8e, 0x6f, 0xc3, 0xe9, + 0x0c, 0xbf, 0x5c, 0x81, 0xa2, 0x2b, 0x75, 0xa5, 0x90, 0xa7, 0x25, 0x1a, 0x08, 0x25, 0xfa, 0x10, + 0xd1, 0x4f, 0x40, 0x3f, 0xdb, 0xd3, 0xb6, 0x45, 0xd1, 0x0f, 0x19, 0x7d, 0xf4, 0x7b, 0xc5, 0xc2, + 0xb3, 0x30, 0x1c, 0x3b, 0x4a, 0x38, 0x5f, 0xa6, 0xf3, 0x43, 0xf1, 0xe0, 0x8a, 0x85, 0xbf, 0x09, + 0xe3, 0x34, 0x81, 0x58, 0x27, 0x4e, 0xcd, 0xb5, 0x6c, 0xa7, 0x1e, 0x1d, 0xe3, 0x95, 0x1e, 0x1a, + 0x1d, 0x66, 0x45, 0x15, 0x85, 0xc0, 0x37, 0x39, 0x2c, 0x3f, 0x20, 0x8d, 0x31, 0x22, 0x19, 0x55, + 0x2b, 0xff, 0xc4, 0xfe, 0x94, 0xff, 0x1b, 0x44, 0x4f, 0xe1, 0xb5, 0x3d, 0x3f, 0x20, 0x3b, 0x12, + 0x15, 0x25, 0x55, 0x82, 0xd2, 0x2a, 0x61, 0xda, 0x2b, 0xb5, 0xdf, 0xe7, 0xe5, 0xfd, 0xb1, 0xf8, + 0x6e, 0x09, 0xce, 0xc9, 0x59, 0x0c, 0xd3, 0xb0, 0x02, 0x8c, 0xaa, 0xcd, 0x52, 0x3a, 0x30, 0xb3, + 0xec, 0x4f, 0x66, 0xae, 0xdb, 0x9e, 0x56, 0x0a, 0xf3, 0x21, 0x82, 0xb3, 0xa1, 0x0e, 0x6a, 0x5b, + 0xc4, 0x6a, 0x36, 0x88, 0x95, 0xeb, 0xcc, 0x3d, 0x07, 0x1a, 0x76, 0xff, 0x83, 0x60, 0x4e, 0xc9, + 0x4a, 0xd2, 0x22, 0x22, 0x43, 0xc7, 0xcf, 0x0c, 0xfa, 0x7b, 0x25, 0x7a, 0xd6, 0x25, 0x44, 0x5c, + 0xda, 0x5b, 0x71, 0x2c, 0xf2, 0xb0, 0x80, 0xd7, 0x8d, 0xc1, 0x09, 0x3b, 0x04, 0xa5, 0xd2, 0x0d, + 0x1b, 0xec, 0x23, 0x47, 0x09, 0xe5, 0x03, 0x53, 0x42, 0xcf, 0xfe, 0x94, 0xf0, 0x5f, 0x04, 0xd3, + 0x69, 0x25, 0xf8, 0x4b, 0x7b, 0x34, 0xb1, 0x89, 0xcf, 0xfc, 0xff, 0xab, 0xdd, 0xa7, 0xff, 0x01, + 0x81, 0x96, 0x71, 0x6b, 0xbf, 0x75, 0x2a, 0x7d, 0x03, 0x46, 0x13, 0xe7, 0x22, 0xbf, 0x0e, 0x46, + 0xa7, 0xfb, 0x0b, 0xd5, 0xc4, 0xc5, 0xb6, 0x2a, 0xd9, 0x1c, 0x0c, 0x89, 0x81, 0x83, 0x0c, 0x81, + 0xee, 0x8e, 0xb7, 0x1f, 0x21, 0x18, 0x4b, 0xda, 0xe6, 0x70, 0xb3, 0x8f, 0x0f, 0x11, 0x8c, 0xca, + 0x4e, 0xf2, 0xfd, 0xa5, 0x1e, 0x5d, 0xb1, 0xf2, 0x69, 0x19, 0x26, 0x94, 0xfa, 0xc7, 0x57, 0xa1, + 0x97, 0x67, 0xee, 0x88, 0xba, 0xe1, 0x8c, 0x9a, 0x17, 0x9e, 0xbf, 0x73, 0x78, 0x3c, 0x0d, 0x83, + 0xec, 0xa7, 0xf5, 0x9a, 0x6b, 0x11, 0xbe, 0xbd, 0x81, 0x0d, 0xdd, 0x70, 0x2d, 0x12, 0xe6, 0x0a, + 0xc4, 0xf3, 0x5c, 0x6f, 0x7d, 0x87, 0xf8, 0xbe, 0x59, 0x27, 0xd4, 0x1d, 0x07, 0x8c, 0x21, 0x3a, + 0x78, 0x87, 0x8d, 0xe1, 0x8b, 0xd0, 0x4b, 0x7d, 0xda, 0xaf, 0xf4, 0x50, 0xbb, 0x8c, 0xc9, 0xb6, + 0x81, 0xc1, 0x61, 0x52, 0xfb, 0xeb, 0x44, 0x7a, 0x7f, 0xcd, 0xc3, 0x48, 0xd2, 0x1b, 0x6d, 0xab, + 0xd2, 0x4b, 0x01, 0x86, 0x13, 0xa3, 0xb2, 0x04, 0xa6, 0x4f, 0x92, 0xc0, 0x9c, 0x8b, 0x2e, 0x35, + 0xfc, 0x82, 0xd5, 0x4f, 0x83, 0x37, 0xbb, 0xb8, 0xb0, 0x4b, 0x58, 0xca, 0x14, 0x03, 0x05, 0x4d, + 0x81, 0x2f, 0xc0, 0x73, 0x35, 0x77, 0x67, 0xb7, 0x19, 0x98, 0x94, 0x7a, 0x93, 0x6a, 0x05, 0x28, + 0xf2, 0x53, 0x89, 0x89, 0xb7, 0xc2, 0x71, 0xfd, 0x7d, 0x04, 0xcf, 0x2d, 0x93, 0xe0, 0x3a, 0x7b, + 0x04, 0x8a, 0x22, 0x4c, 0x05, 0xfa, 0x4c, 0xcb, 0xf2, 0x88, 0xef, 0x47, 0x01, 0x86, 0x7f, 0x1e, + 0xd8, 0x41, 0xf7, 0x3d, 0xc0, 0x49, 0x36, 0x5a, 0x77, 0xff, 0x3e, 0xfe, 0x3c, 0xc5, 0x9d, 0x78, + 0x5c, 0xc0, 0x1f, 0x2d, 0x88, 0xc0, 0xba, 0x73, 0xde, 0x9f, 0xb3, 0x03, 0x9f, 0x23, 0xbb, 0x2e, + 0xbb, 0xc6, 0x7f, 0xfe, 0x1a, 0x79, 0x08, 0x27, 0x0f, 0x49, 0x1d, 0x9f, 0x0a, 0xea, 0x58, 0x8a, + 0x3d, 0xb2, 0xbd, 0x3a, 0x44, 0xaf, 0x2e, 0x65, 0xbd, 0xfa, 0xa0, 0x4e, 0x92, 0x5f, 0x23, 0x98, + 0x8f, 0xf9, 0x5e, 0x32, 0x1b, 0xa6, 0x53, 0x23, 0x47, 0xc4, 0x9a, 0x7f, 0x95, 0xf3, 0x76, 0x5c, + 0x54, 0x5b, 0x87, 0xf1, 0x34, 0xeb, 0x2d, 0x9f, 0xac, 0x40, 0xdf, 0x06, 0x1b, 0xe2, 0xd9, 0x67, + 0xf4, 0xd9, 0x9d, 0xef, 0xfd, 0x12, 0x81, 0x1e, 0xeb, 0xe9, 0x0d, 0xb2, 0xe7, 0x1f, 0x11, 0x03, + 0x7e, 0x82, 0xe8, 0xc5, 0x28, 0x66, 0xac, 0x43, 0xbe, 0xe4, 0x19, 0xea, 0x41, 0xd9, 0xeb, 0x33, + 0x89, 0x1a, 0x8f, 0x8b, 0xaf, 0xfd, 0x2b, 0xab, 0xe9, 0x67, 0xcd, 0x7a, 0xcb, 0x18, 0xe5, 0x42, + 0xc6, 0xd8, 0x67, 0x4e, 0x1f, 0xa6, 0x69, 0x09, 0x4b, 0x24, 0xd2, 0xb4, 0x21, 0x1e, 0xa7, 0xd7, + 0xb7, 0xc9, 0x5e, 0x94, 0x33, 0x4e, 0xc8, 0x63, 0xfa, 0x1b, 0x64, 0xcf, 0x18, 0x34, 0x63, 0x2c, + 0xdd, 0x6d, 0xaf, 0xf7, 0x11, 0xe0, 0x04, 0xc2, 0x88, 0x93, 0x57, 0x60, 0x30, 0xc1, 0x89, 0xe2, + 0x1d, 0x2f, 0xb1, 0x0e, 0x62, 0x46, 0xba, 0xe3, 0xe3, 0xcf, 0x08, 0xce, 0x31, 0xfd, 0x91, 0xb5, + 0x9a, 0x67, 0xef, 0xca, 0x0f, 0xdd, 0x71, 0xe8, 0xf5, 0xe9, 0x2c, 0x37, 0x31, 0xff, 0xc2, 0x67, + 0x60, 0xc0, 0xf4, 0xea, 0xcd, 0x1d, 0x9a, 0xd1, 0x95, 0x66, 0xca, 0x0b, 0x43, 0x46, 0x3c, 0x70, + 0x60, 0x7e, 0xf9, 0x4f, 0x04, 0x53, 0x02, 0xcf, 0xc5, 0x2f, 0x66, 0xb1, 0x28, 0x25, 0xb5, 0x28, + 0xe5, 0xc2, 0xa2, 0xec, 0xd3, 0x23, 0xff, 0x9d, 0x55, 0xbf, 0x64, 0x8b, 0x89, 0x1b, 0x09, 0x65, + 0x37, 0xd2, 0xd1, 0x12, 0xeb, 0x27, 0x08, 0x9e, 0x4f, 0x89, 0xd5, 0x72, 0xf0, 0x31, 0x38, 0x71, + 0xdf, 0x6c, 0x34, 0x09, 0x37, 0x0b, 0xfb, 0xe8, 0xca, 0x75, 0xe5, 0xe9, 0x75, 0x59, 0x91, 0x5e, + 0xff, 0xbe, 0x44, 0x53, 0x29, 0x7a, 0xbf, 0xf0, 0x6f, 0xb9, 0x1e, 0x57, 0xb0, 0xe9, 0xd4, 0x49, + 0xa4, 0x65, 0x0c, 0x3d, 0xc1, 0xde, 0x2e, 0xe3, 0x6c, 0xc0, 0xa0, 0x3f, 0x87, 0x9a, 0xf7, 0x03, + 0xd3, 0x0b, 0x84, 0x10, 0x46, 0xc7, 0xb8, 0xe6, 0xa7, 0x00, 0x88, 0x63, 0x45, 0x00, 0x8c, 0xfe, + 0x00, 0x71, 0x2c, 0x3e, 0x7d, 0x0c, 0x5f, 0x47, 0xdf, 0x2d, 0xd1, 0xd7, 0xd1, 0x96, 0xae, 0xf8, + 0xe6, 0xf2, 0xf3, 0x14, 0x35, 0x09, 0x03, 0xd1, 0x8e, 0x8b, 0x22, 0x41, 0x3f, 0xdf, 0x72, 0xfe, + 0x71, 0x7c, 0xfe, 0xf9, 0x7b, 0x09, 0x46, 0x98, 0x02, 0x12, 0xa7, 0x44, 0x5f, 0xfa, 0xd1, 0x43, + 0x4f, 0x3d, 0x7a, 0xa4, 0xa1, 0xab, 0xfc, 0xe2, 0x1d, 0x2d, 0xe9, 0xca, 0xc5, 0xb5, 0xcf, 0x10, + 0xf4, 0x32, 0x44, 0x79, 0x21, 0xad, 0xc0, 0x39, 0x1b, 0xdf, 0xbb, 0xcb, 0x05, 0xee, 0xdd, 0x37, + 0xe0, 0x24, 0x43, 0xd8, 0x2a, 0xa5, 0x73, 0x75, 0x6a, 0x55, 0x56, 0x6c, 0xaf, 0x46, 0xc5, 0xf6, + 0xea, 0xdd, 0x08, 0xc2, 0x18, 0xa1, 0x4b, 0x5a, 0xdf, 0xfa, 0x14, 0x75, 0xa2, 0x37, 0x49, 0xf0, + 0xc0, 0xf5, 0xb6, 0x57, 0x4d, 0xcf, 0xdc, 0x21, 0x01, 0xf1, 0x22, 0x27, 0xd2, 0xaf, 0xd1, 0x37, + 0x46, 0xc9, 0x34, 0xd7, 0xf6, 0x04, 0xf4, 0xd7, 0xb6, 0x4c, 0xdb, 0x89, 0xe4, 0x1d, 0x30, 0xfa, + 0xe8, 0xf7, 0x8a, 0xa5, 0xbf, 0x48, 0x33, 0x78, 0x76, 0x4c, 0xad, 0x86, 0x8c, 0xd4, 0xdc, 0x06, + 0x35, 0xdd, 0x9a, 0x63, 0xee, 0xfa, 0x5b, 0x6e, 0x14, 0x37, 0xf5, 0x9b, 0xb0, 0xb0, 0x4c, 0xe4, + 0x20, 0x1d, 0xbc, 0xe5, 0xe9, 0xb7, 0xe1, 0x45, 0x35, 0x9a, 0x4e, 0x23, 0xb5, 0xfe, 0x04, 0xc1, + 0x94, 0x82, 0x6b, 0x2e, 0x7a, 0x15, 0xb0, 0x4f, 0x3c, 0xdb, 0x6c, 0xd8, 0x8f, 0x88, 0x15, 0xcd, + 0x72, 0xa6, 0x24, 0x33, 0xdd, 0x1d, 0xfc, 0xbf, 0x42, 0x30, 0x1b, 0x6e, 0xf2, 0xc8, 0xf7, 0x99, + 0x9b, 0xc5, 0xbb, 0xbd, 0xc0, 0x51, 0x7a, 0x50, 0x19, 0xfe, 0xef, 0x5a, 0x87, 0xa2, 0x94, 0x2f, + 0xae, 0xa5, 0x15, 0x38, 0x25, 0x36, 0xa7, 0x28, 0x1a, 0x31, 0x04, 0x5c, 0xc6, 0x49, 0x92, 0x1e, + 0xe8, 0x4e, 0x81, 0x3f, 0x44, 0xb4, 0xc1, 0x42, 0x40, 0x7e, 0x18, 0x25, 0xe1, 0x8f, 0x11, 0x4c, + 0x4a, 0xd9, 0x38, 0x22, 0x9a, 0xda, 0xa2, 0xa5, 0x93, 0x04, 0xee, 0x1a, 0xb1, 0x77, 0x83, 0x8e, + 0x9e, 0xd3, 0xe7, 0x61, 0xc4, 0x76, 0x6a, 0x8d, 0xa6, 0x45, 0x22, 0x01, 0x58, 0x83, 0xc3, 0x30, + 0x1f, 0x65, 0xec, 0xe9, 0xdb, 0x34, 0x32, 0x48, 0x28, 0xb1, 0xf9, 0x98, 0xd4, 0x24, 0x0c, 0x30, + 0x3c, 0x31, 0xad, 0x7e, 0x36, 0x50, 0x9c, 0xd8, 0x47, 0x08, 0x26, 0x32, 0xa4, 0x5a, 0x4a, 0x7f, + 0x15, 0xfa, 0x3d, 0x3e, 0xc6, 0x8f, 0x8b, 0x69, 0xb5, 0xb2, 0x29, 0x9c, 0xd1, 0x5a, 0xd0, 0x9d, + 0x9a, 0xff, 0x86, 0xe0, 0x85, 0xb5, 0xe6, 0x46, 0x98, 0xf8, 0x6d, 0x10, 0xaa, 0x5a, 0xff, 0x96, + 0xe7, 0xee, 0xac, 0x85, 0xb9, 0x8a, 0xa0, 0xe9, 0x39, 0x18, 0x61, 0x69, 0x8d, 0xa0, 0x6f, 0x96, + 0xec, 0x2c, 0x71, 0xa5, 0xef, 0xb3, 0xd9, 0x43, 0xd1, 0x99, 0x52, 0x56, 0x75, 0xa6, 0xfc, 0x03, + 0xc1, 0xbc, 0x8a, 0xff, 0x74, 0x94, 0xbd, 0x08, 0x38, 0xc9, 0x7e, 0x2a, 0xd6, 0x9e, 0x8a, 0x45, + 0xe0, 0x67, 0xdf, 0xe7, 0x2c, 0xc6, 0xcf, 0x10, 0xcc, 0x48, 0xc4, 0x60, 0xc7, 0x55, 0x24, 0x81, + 0xc8, 0x13, 0x7a, 0x26, 0x3c, 0x29, 0x9b, 0x7e, 0x6e, 0xc2, 0x69, 0x81, 0xa5, 0x6e, 0xba, 0x7f, + 0xf4, 0x5f, 0x20, 0xb8, 0x98, 0xc6, 0xc3, 0xfa, 0xbd, 0x0e, 0xd5, 0xcf, 0xf4, 0xa7, 0x08, 0x2e, + 0xe4, 0x73, 0x75, 0x78, 0xde, 0xa3, 0xd7, 0xc5, 0x3d, 0x99, 0xe0, 0xed, 0x59, 0xba, 0x84, 0xbe, + 0x06, 0x53, 0x52, 0x42, 0x89, 0x66, 0xc5, 0x5e, 0xd6, 0x3e, 0x5a, 0xa0, 0x7f, 0x8f, 0x43, 0x4a, + 0x0c, 0xfe, 0x9a, 0x5d, 0x27, 0x7e, 0x70, 0xd4, 0x0c, 0x2e, 0x72, 0x75, 0x94, 0x0c, 0x9e, 0xe0, + 0xed, 0x99, 0x1a, 0xfc, 0xb7, 0x48, 0xb4, 0x38, 0xa7, 0x94, 0x4c, 0xa1, 0xf7, 0x71, 0x65, 0x90, + 0x5c, 0x02, 0xca, 0x1d, 0x5f, 0x02, 0x3e, 0x2e, 0xc1, 0xf9, 0x35, 0xe2, 0x58, 0xd7, 0x1d, 0xab, + 0xc5, 0x6b, 0xa6, 0xc6, 0x48, 0xfc, 0x67, 0xd3, 0xaa, 0x75, 0x0c, 0x6b, 0xee, 0x9f, 0x84, 0xae, + 0x5c, 0x44, 0x3f, 0xed, 0x8a, 0xf0, 0x68, 0x9f, 0x45, 0xf8, 0x59, 0x18, 0xe6, 0x75, 0xdb, 0xf5, + 0xf8, 0x75, 0xbc, 0xc7, 0x18, 0xe2, 0x83, 0xb4, 0xfd, 0xe3, 0xf2, 0xe3, 0x2a, 0x0c, 0x5c, 0xa7, + 0xd8, 0xaf, 0xaf, 0xae, 0xe0, 0x57, 0xa1, 0x67, 0xd5, 0x76, 0xea, 0xb8, 0x92, 0x22, 0x9b, 0x68, + 0xb5, 0xd6, 0x26, 0x24, 0x33, 0x5c, 0x10, 0x42, 0xcb, 0x8c, 0x42, 0x8b, 0x34, 0x4e, 0x4b, 0xa0, + 0x6c, 0xcb, 0xd6, 0x5e, 0x6c, 0x0b, 0xc7, 0xc9, 0x6c, 0xc0, 0x98, 0xac, 0xdb, 0x1a, 0x2f, 0x88, + 0x08, 0x54, 0x0d, 0xd9, 0xda, 0x4c, 0x0a, 0x52, 0xd6, 0x17, 0xfd, 0x36, 0x15, 0x45, 0xe8, 0xca, + 0xce, 0x8a, 0x22, 0x6f, 0xdb, 0x2e, 0x80, 0x7f, 0x13, 0xc6, 0xe5, 0x8d, 0xdc, 0xf8, 0x7c, 0x2e, + 0x8d, 0x54, 0x10, 0x2c, 0x40, 0x67, 0x15, 0x46, 0xd2, 0x8a, 0xc0, 0x7a, 0x8e, 0x96, 0x22, 0xbc, + 0x5a, 0x16, 0x6f, 0x0b, 0xe3, 0x6d, 0x18, 0x4a, 0x76, 0x49, 0xe3, 0x19, 0x29, 0xbf, 0x49, 0x6d, + 0xe4, 0x61, 0xbb, 0x0b, 0xa7, 0xc4, 0xe6, 0x68, 0x3c, 0xa7, 0xc0, 0x98, 0x96, 0x3d, 0x0f, 0xeb, + 0xb7, 0x69, 0xd9, 0x3d, 0xdd, 0xd3, 0x8b, 0xe7, 0x45, 0xb4, 0xd2, 0x9e, 0x5f, 0x6d, 0x3a, 0x05, + 0x26, 0x69, 0x85, 0xad, 0xd3, 0x1e, 0xcc, 0x6c, 0xd3, 0x30, 0x7e, 0x49, 0x24, 0xa0, 0x6c, 0x2c, + 0xd6, 0x66, 0x53, 0xa0, 0x8a, 0x9e, 0xdb, 0xef, 0xc0, 0x49, 0xa1, 0x9b, 0x14, 0xa7, 0xd7, 0xc9, + 0x7b, 0x63, 0xb5, 0xb9, 0x7c, 0x20, 0x8e, 0xfd, 0x1e, 0xf5, 0x8c, 0x24, 0xf2, 0x8c, 0x67, 0x48, + 0x70, 0xcf, 0xe4, 0x84, 0xa3, 0xe4, 0xee, 0xcc, 0x04, 0xaa, 0x42, 0xd8, 0x0b, 0x06, 0x3b, 0xbc, + 0x4b, 0x9f, 0xa1, 0x32, 0xf3, 0xbc, 0xa3, 0x2d, 0x6b, 0x08, 0x65, 0xd7, 0x5b, 0x61, 0x8a, 0x0f, + 0xe8, 0x4b, 0x73, 0xb6, 0x93, 0xaa, 0x75, 0xdf, 0xc5, 0x17, 0x73, 0x88, 0x66, 0xae, 0xc5, 0x42, + 0xb0, 0xcb, 0xe9, 0xd0, 0xda, 0xa6, 0x7d, 0xf2, 0x52, 0x5c, 0x1d, 0x92, 0x3c, 0xa7, 0x22, 0xe9, + 0x0b, 0xb6, 0xcb, 0xb4, 0xa7, 0x66, 0x23, 0xab, 0xaa, 0xc9, 0xb6, 0x80, 0x7f, 0x04, 0xf4, 0xb7, + 0x6f, 0x14, 0x2d, 0xb0, 0xb8, 0x5a, 0x80, 0x52, 0xa2, 0x33, 0xb3, 0xb0, 0xfd, 0xb6, 0xe8, 0x2f, + 0x61, 0xc8, 0x3a, 0x3d, 0xf1, 0x85, 0x0c, 0x49, 0x75, 0x6b, 0x6a, 0x01, 0xf9, 0x1e, 0xd1, 0x17, + 0x24, 0x75, 0x4f, 0x29, 0xfe, 0x62, 0x31, 0x7a, 0xdd, 0x48, 0x79, 0x07, 0x20, 0xae, 0xed, 0xe2, + 0xb3, 0x22, 0xa1, 0x74, 0x1f, 0x92, 0x10, 0xe9, 0x24, 0x0d, 0x42, 0x16, 0x55, 0x9a, 0xac, 0x71, + 0x27, 0xab, 0xb4, 0x9c, 0xf6, 0x1e, 0xed, 0x4c, 0x0a, 0xb8, 0x0d, 0x95, 0x64, 0xda, 0xae, 0xa6, + 0x92, 0x2d, 0xa8, 0xb5, 0xa1, 0xb2, 0x97, 0xec, 0xba, 0x91, 0x75, 0xaf, 0xe0, 0xcb, 0x0a, 0x62, + 0x39, 0xad, 0x2e, 0x42, 0x1c, 0x57, 0x34, 0x71, 0xc8, 0x49, 0x27, 0xe5, 0x6c, 0x4b, 0x5a, 0x22, + 0x6e, 0x21, 0xd2, 0x2c, 0x50, 0xaa, 0xfa, 0x3d, 0xf0, 0xa2, 0x82, 0xae, 0xaa, 0x33, 0x44, 0x70, + 0x7f, 0x59, 0xd9, 0x5d, 0x42, 0x31, 0x29, 0x69, 0x3e, 0x45, 0x89, 0x98, 0xed, 0x29, 0xee, 0xd0, + 0x80, 0xa2, 0x68, 0x1d, 0xc9, 0x06, 0x94, 0xfc, 0x1e, 0x13, 0x61, 0x53, 0x48, 0xaa, 0xf9, 0x59, + 0x72, 0x49, 0xf9, 0x72, 0xc9, 0x49, 0xc4, 0x6b, 0x4b, 0x6e, 0x17, 0x34, 0x75, 0x29, 0x5f, 0x20, + 0xd7, 0xb6, 0xe6, 0xaf, 0xe9, 0x6a, 0xf8, 0x44, 0xa8, 0x1c, 0x97, 0x17, 0xe2, 0x85, 0xd4, 0x34, + 0xb7, 0x5a, 0x5f, 0x88, 0x52, 0x56, 0x36, 0xb5, 0x2a, 0xdb, 0x16, 0xd4, 0x0b, 0x51, 0xac, 0xd1, + 0x58, 0x23, 0x2b, 0x18, 0x67, 0x63, 0x4d, 0x4e, 0x59, 0x59, 0x9b, 0xcc, 0xa9, 0x12, 0xe2, 0xef, + 0xd2, 0x53, 0x34, 0x53, 0x69, 0xcd, 0x9e, 0xa2, 0xaa, 0x62, 0x6c, 0x3e, 0xfa, 0x6d, 0x8a, 0x3e, + 0x53, 0x64, 0xcb, 0xa2, 0x57, 0x95, 0xe9, 0xb4, 0x97, 0x0a, 0x40, 0x72, 0x62, 0x8f, 0x59, 0xb7, + 0x62, 0x4e, 0x5d, 0x2e, 0x1b, 0xbc, 0xda, 0x17, 0xf1, 0xb4, 0xb4, 0x27, 0xe5, 0x57, 0xce, 0x3e, + 0x60, 0x1d, 0x4b, 0xf9, 0x15, 0x3f, 0xfc, 0x65, 0x91, 0x8b, 0x42, 0x15, 0xc2, 0x8e, 0x18, 0x79, + 0x82, 0x60, 0xa6, 0x5d, 0xcd, 0x10, 0x7f, 0xa9, 0x20, 0x1f, 0x69, 0xdf, 0xed, 0x84, 0x8d, 0xc7, + 0xec, 0xb7, 0x16, 0x95, 0xc5, 0x34, 0x7c, 0x29, 0xe3, 0x67, 0x6d, 0xea, 0x81, 0x9a, 0x6c, 0xab, + 0xe5, 0x95, 0xe9, 0x1c, 0x7a, 0x7b, 0x95, 0x94, 0xa7, 0xb2, 0xb7, 0x57, 0x75, 0x29, 0x4d, 0x5b, + 0xc8, 0xa3, 0x9a, 0x2a, 0x76, 0x3d, 0x12, 0xab, 0x72, 0x42, 0xb1, 0x29, 0x9b, 0x53, 0xb5, 0x2d, + 0x4c, 0x09, 0x39, 0x95, 0xba, 0xe6, 0xf3, 0x7d, 0xd6, 0x63, 0xa2, 0x2e, 0x3f, 0x65, 0x37, 0x40, + 0xfb, 0x5a, 0x55, 0x61, 0xea, 0x3f, 0x80, 0xe9, 0x36, 0xe5, 0x1f, 0x7c, 0x25, 0x7d, 0xdd, 0x2b, + 0x54, 0x2c, 0x12, 0xef, 0x88, 0xf2, 0x3a, 0xc2, 0x25, 0x14, 0x4a, 0x9f, 0x5f, 0xbe, 0x11, 0xa4, + 0x2f, 0x54, 0xeb, 0x29, 0x4c, 0xdd, 0x83, 0x09, 0x65, 0xd5, 0x05, 0x7f, 0xa1, 0x1d, 0xe1, 0xd4, + 0xcb, 0x6c, 0x61, 0x9a, 0x3f, 0xcd, 0x54, 0xac, 0x14, 0xf5, 0x10, 0x7c, 0x2d, 0x07, 0x63, 0x7e, + 0x0d, 0x45, 0xd8, 0xef, 0xb9, 0x6f, 0xfc, 0x97, 0x10, 0xfe, 0x31, 0x82, 0xb9, 0x22, 0xc5, 0x10, + 0x7c, 0xb5, 0x03, 0x8e, 0xf2, 0x02, 0x50, 0x3b, 0x86, 0x9e, 0x20, 0xd1, 0x2d, 0x33, 0x15, 0x90, + 0x5c, 0xb7, 0x54, 0xd5, 0x4b, 0x3a, 0x64, 0x23, 0x6b, 0x2a, 0x45, 0x25, 0x23, 0xd7, 0x54, 0xf9, + 0xd5, 0x8f, 0x5c, 0x96, 0x84, 0xc7, 0x79, 0xa9, 0xa9, 0xe4, 0x65, 0x8c, 0x5c, 0x53, 0xe5, 0x56, + 0x3e, 0x3a, 0x64, 0x28, 0x6b, 0xaa, 0x4c, 0xed, 0x22, 0xd7, 0x54, 0xaa, 0x4a, 0x47, 0x87, 0x6c, + 0x3c, 0x45, 0x30, 0x5b, 0xe0, 0x4d, 0x1c, 0xbf, 0x9c, 0x79, 0xbb, 0x2a, 0x56, 0x65, 0xd0, 0xae, + 0x76, 0xbe, 0x30, 0x62, 0x6e, 0xe9, 0x36, 0x68, 0xae, 0x57, 0xaf, 0xba, 0x0e, 0x45, 0xd1, 0xaa, + 0x80, 0x30, 0x5c, 0xdf, 0xaa, 0xd6, 0xed, 0x60, 0xab, 0xb9, 0x51, 0xad, 0xb9, 0x3b, 0x8b, 0x0c, + 0x64, 0x91, 0xfe, 0xd3, 0xfa, 0xdb, 0x24, 0x75, 0x77, 0x31, 0xf1, 0xb7, 0x61, 0x36, 0x7a, 0xe9, + 0xc4, 0x95, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xf5, 0x4a, 0xe2, 0x31, 0x46, 0x00, 0x00, } diff --git a/protobuf/go/flow/access/access_grpc.pb.go b/protobuf/go/flow/access/access_grpc.pb.go index 9a485a84c..a776ae74d 100644 --- a/protobuf/go/flow/access/access_grpc.pb.go +++ b/protobuf/go/flow/access/access_grpc.pb.go @@ -59,6 +59,8 @@ const ( AccessAPI_GetProtocolStateSnapshotByHeight_FullMethodName = "/flow.access.AccessAPI/GetProtocolStateSnapshotByHeight" AccessAPI_GetExecutionResultForBlockID_FullMethodName = "/flow.access.AccessAPI/GetExecutionResultForBlockID" AccessAPI_GetExecutionResultByID_FullMethodName = "/flow.access.AccessAPI/GetExecutionResultByID" + AccessAPI_GetExecutionReceiptsByBlockID_FullMethodName = "/flow.access.AccessAPI/GetExecutionReceiptsByBlockID" + AccessAPI_GetExecutionReceiptsByResultID_FullMethodName = "/flow.access.AccessAPI/GetExecutionReceiptsByResultID" AccessAPI_SubscribeBlocksFromStartBlockID_FullMethodName = "/flow.access.AccessAPI/SubscribeBlocksFromStartBlockID" AccessAPI_SubscribeBlocksFromStartHeight_FullMethodName = "/flow.access.AccessAPI/SubscribeBlocksFromStartHeight" AccessAPI_SubscribeBlocksFromLatest_FullMethodName = "/flow.access.AccessAPI/SubscribeBlocksFromLatest" @@ -184,6 +186,13 @@ type AccessAPIClient interface { GetExecutionResultForBlockID(ctx context.Context, in *GetExecutionResultForBlockIDRequest, opts ...grpc.CallOption) (*ExecutionResultForBlockIDResponse, error) // GetExecutionResultByID returns Execution Result by its ID. GetExecutionResultByID(ctx context.Context, in *GetExecutionResultByIDRequest, opts ...grpc.CallOption) (*ExecutionResultByIDResponse, error) + // GetExecutionReceiptsByBlockID returns all execution receipts for a given + // block ID. Optionally includes the full ExecutionResult in each receipt. + GetExecutionReceiptsByBlockID(ctx context.Context, in *GetExecutionReceiptsByBlockIDRequest, opts ...grpc.CallOption) (*ExecutionReceiptsResponse, error) + // GetExecutionReceiptsByResultID returns all execution receipts for a given + // execution result ID. Optionally includes the full ExecutionResult in each + // receipt. + GetExecutionReceiptsByResultID(ctx context.Context, in *GetExecutionReceiptsByResultIDRequest, opts ...grpc.CallOption) (*ExecutionReceiptsResponse, error) // SubscribeBlocksFromStartBlockID streams finalized or sealed blocks starting // at the requested start block id, up until the latest available block. Once // the latest is reached, the stream will remain open and responses are sent @@ -640,6 +649,24 @@ func (c *accessAPIClient) GetExecutionResultByID(ctx context.Context, in *GetExe return out, nil } +func (c *accessAPIClient) GetExecutionReceiptsByBlockID(ctx context.Context, in *GetExecutionReceiptsByBlockIDRequest, opts ...grpc.CallOption) (*ExecutionReceiptsResponse, error) { + out := new(ExecutionReceiptsResponse) + err := c.cc.Invoke(ctx, AccessAPI_GetExecutionReceiptsByBlockID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *accessAPIClient) GetExecutionReceiptsByResultID(ctx context.Context, in *GetExecutionReceiptsByResultIDRequest, opts ...grpc.CallOption) (*ExecutionReceiptsResponse, error) { + out := new(ExecutionReceiptsResponse) + err := c.cc.Invoke(ctx, AccessAPI_GetExecutionReceiptsByResultID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *accessAPIClient) SubscribeBlocksFromStartBlockID(ctx context.Context, in *SubscribeBlocksFromStartBlockIDRequest, opts ...grpc.CallOption) (AccessAPI_SubscribeBlocksFromStartBlockIDClient, error) { stream, err := c.cc.NewStream(ctx, &AccessAPI_ServiceDesc.Streams[0], AccessAPI_SubscribeBlocksFromStartBlockID_FullMethodName, opts...) if err != nil { @@ -1073,6 +1100,13 @@ type AccessAPIServer interface { GetExecutionResultForBlockID(context.Context, *GetExecutionResultForBlockIDRequest) (*ExecutionResultForBlockIDResponse, error) // GetExecutionResultByID returns Execution Result by its ID. GetExecutionResultByID(context.Context, *GetExecutionResultByIDRequest) (*ExecutionResultByIDResponse, error) + // GetExecutionReceiptsByBlockID returns all execution receipts for a given + // block ID. Optionally includes the full ExecutionResult in each receipt. + GetExecutionReceiptsByBlockID(context.Context, *GetExecutionReceiptsByBlockIDRequest) (*ExecutionReceiptsResponse, error) + // GetExecutionReceiptsByResultID returns all execution receipts for a given + // execution result ID. Optionally includes the full ExecutionResult in each + // receipt. + GetExecutionReceiptsByResultID(context.Context, *GetExecutionReceiptsByResultIDRequest) (*ExecutionReceiptsResponse, error) // SubscribeBlocksFromStartBlockID streams finalized or sealed blocks starting // at the requested start block id, up until the latest available block. Once // the latest is reached, the stream will remain open and responses are sent @@ -1285,6 +1319,12 @@ func (UnimplementedAccessAPIServer) GetExecutionResultForBlockID(context.Context func (UnimplementedAccessAPIServer) GetExecutionResultByID(context.Context, *GetExecutionResultByIDRequest) (*ExecutionResultByIDResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetExecutionResultByID not implemented") } +func (UnimplementedAccessAPIServer) GetExecutionReceiptsByBlockID(context.Context, *GetExecutionReceiptsByBlockIDRequest) (*ExecutionReceiptsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetExecutionReceiptsByBlockID not implemented") +} +func (UnimplementedAccessAPIServer) GetExecutionReceiptsByResultID(context.Context, *GetExecutionReceiptsByResultIDRequest) (*ExecutionReceiptsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetExecutionReceiptsByResultID not implemented") +} func (UnimplementedAccessAPIServer) SubscribeBlocksFromStartBlockID(*SubscribeBlocksFromStartBlockIDRequest, AccessAPI_SubscribeBlocksFromStartBlockIDServer) error { return status.Errorf(codes.Unimplemented, "method SubscribeBlocksFromStartBlockID not implemented") } @@ -2047,6 +2087,42 @@ func _AccessAPI_GetExecutionResultByID_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _AccessAPI_GetExecutionReceiptsByBlockID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetExecutionReceiptsByBlockIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AccessAPIServer).GetExecutionReceiptsByBlockID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AccessAPI_GetExecutionReceiptsByBlockID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AccessAPIServer).GetExecutionReceiptsByBlockID(ctx, req.(*GetExecutionReceiptsByBlockIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AccessAPI_GetExecutionReceiptsByResultID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetExecutionReceiptsByResultIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AccessAPIServer).GetExecutionReceiptsByResultID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AccessAPI_GetExecutionReceiptsByResultID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AccessAPIServer).GetExecutionReceiptsByResultID(ctx, req.(*GetExecutionReceiptsByResultIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _AccessAPI_SubscribeBlocksFromStartBlockID_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(SubscribeBlocksFromStartBlockIDRequest) if err := stream.RecvMsg(m); err != nil { @@ -2424,6 +2500,14 @@ var AccessAPI_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetExecutionResultByID", Handler: _AccessAPI_GetExecutionResultByID_Handler, }, + { + MethodName: "GetExecutionReceiptsByBlockID", + Handler: _AccessAPI_GetExecutionReceiptsByBlockID_Handler, + }, + { + MethodName: "GetExecutionReceiptsByResultID", + Handler: _AccessAPI_GetExecutionReceiptsByResultID_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/protobuf/go/flow/entities/execution_result.pb.go b/protobuf/go/flow/entities/execution_result.pb.go index 6a17bd2d5..cf30d23b3 100644 --- a/protobuf/go/flow/entities/execution_result.pb.go +++ b/protobuf/go/flow/entities/execution_result.pb.go @@ -323,11 +323,59 @@ func (m *ExecutionReceiptMeta) GetExecutorSignature() []byte { return nil } +type ExecutionReceipt struct { + Meta *ExecutionReceiptMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ExecutionResult *ExecutionResult `protobuf:"bytes,2,opt,name=execution_result,json=executionResult,proto3" json:"execution_result,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ExecutionReceipt) Reset() { *m = ExecutionReceipt{} } +func (m *ExecutionReceipt) String() string { return proto.CompactTextString(m) } +func (*ExecutionReceipt) ProtoMessage() {} +func (*ExecutionReceipt) Descriptor() ([]byte, []int) { + return fileDescriptor_806371cb5e5e336b, []int{4} +} + +func (m *ExecutionReceipt) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ExecutionReceipt.Unmarshal(m, b) +} +func (m *ExecutionReceipt) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ExecutionReceipt.Marshal(b, m, deterministic) +} +func (m *ExecutionReceipt) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExecutionReceipt.Merge(m, src) +} +func (m *ExecutionReceipt) XXX_Size() int { + return xxx_messageInfo_ExecutionReceipt.Size(m) +} +func (m *ExecutionReceipt) XXX_DiscardUnknown() { + xxx_messageInfo_ExecutionReceipt.DiscardUnknown(m) +} + +var xxx_messageInfo_ExecutionReceipt proto.InternalMessageInfo + +func (m *ExecutionReceipt) GetMeta() *ExecutionReceiptMeta { + if m != nil { + return m.Meta + } + return nil +} + +func (m *ExecutionReceipt) GetExecutionResult() *ExecutionResult { + if m != nil { + return m.ExecutionResult + } + return nil +} + func init() { proto.RegisterType((*ExecutionResult)(nil), "flow.entities.ExecutionResult") proto.RegisterType((*Chunk)(nil), "flow.entities.Chunk") proto.RegisterType((*ServiceEvent)(nil), "flow.entities.ServiceEvent") proto.RegisterType((*ExecutionReceiptMeta)(nil), "flow.entities.ExecutionReceiptMeta") + proto.RegisterType((*ExecutionReceipt)(nil), "flow.entities.ExecutionReceipt") } func init() { @@ -335,40 +383,43 @@ func init() { } var fileDescriptor_806371cb5e5e336b = []byte{ - // 556 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x54, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0x56, 0x48, 0x9a, 0xa6, 0x93, 0x84, 0x34, 0x8b, 0x55, 0x19, 0x15, 0x89, 0x2a, 0xe2, 0x10, - 0x50, 0xb1, 0x11, 0x70, 0xe4, 0xd4, 0xb4, 0x87, 0x1c, 0x10, 0xc8, 0x81, 0x0b, 0x17, 0x6b, 0x63, - 0x4f, 0x52, 0xab, 0xce, 0xae, 0xe5, 0x1d, 0x87, 0xf6, 0x59, 0x78, 0x22, 0xde, 0x88, 0x23, 0xda, - 0xf1, 0x4f, 0x92, 0xaa, 0x97, 0x28, 0x33, 0xdf, 0x37, 0xb3, 0xf3, 0xcd, 0x8f, 0xe1, 0xcd, 0x2a, - 0xd5, 0xbf, 0x7d, 0x54, 0x94, 0x50, 0x82, 0xc6, 0xc7, 0x7b, 0x8c, 0x0a, 0x4a, 0xb4, 0x0a, 0x73, - 0x34, 0x45, 0x4a, 0x5e, 0x96, 0x6b, 0xd2, 0x62, 0x68, 0x59, 0x5e, 0xcd, 0x9a, 0xfc, 0x6b, 0xc1, - 0xe8, 0xa6, 0x66, 0x06, 0x4c, 0x14, 0x97, 0x20, 0xb2, 0x1c, 0xb7, 0x89, 0x2e, 0x4c, 0x15, 0x1b, - 0x26, 0xb1, 0xdb, 0xba, 0x68, 0x4d, 0x07, 0xc1, 0x69, 0x8d, 0x94, 0xdc, 0x79, 0x2c, 0x5e, 0x42, - 0x6f, 0x99, 0xea, 0xe8, 0xce, 0x72, 0x9e, 0x31, 0xe7, 0x98, 0xed, 0x79, 0x2c, 0x2e, 0xa1, 0x1b, - 0xdd, 0x16, 0xea, 0xce, 0xb8, 0xed, 0x8b, 0xf6, 0xb4, 0xff, 0xd1, 0xf1, 0x0e, 0x1e, 0xf7, 0x66, - 0x16, 0x0c, 0x2a, 0x8e, 0xb8, 0x82, 0xe7, 0x06, 0xf3, 0x6d, 0x12, 0x61, 0x88, 0x5b, 0x54, 0x64, - 0xdc, 0x0e, 0x47, 0x9d, 0x3f, 0x8a, 0x5a, 0x94, 0xa4, 0x1b, 0xcb, 0x09, 0x86, 0x66, 0xcf, 0x32, - 0xe2, 0x1d, 0x8c, 0x77, 0xba, 0x63, 0x49, 0xd2, 0x56, 0x75, 0xc4, 0x55, 0x8d, 0x1a, 0xe0, 0x5a, - 0x92, 0x9c, 0xc7, 0x93, 0xbf, 0x6d, 0x38, 0xe2, 0x0a, 0xc4, 0x14, 0x46, 0x33, 0x9d, 0xa6, 0x18, - 0x59, 0x74, 0xae, 0x62, 0xbc, 0x67, 0xb5, 0xc3, 0xe0, 0xb1, 0x5b, 0xbc, 0x86, 0xbe, 0x21, 0x99, - 0x53, 0x68, 0x48, 0x12, 0x56, 0x7a, 0x81, 0x5d, 0x0b, 0xeb, 0x11, 0x6f, 0xe1, 0x94, 0x8b, 0x0f, - 0xa3, 0x26, 0xd2, 0x6d, 0x57, 0xef, 0x5b, 0xff, 0x2e, 0xe1, 0x41, 0xe3, 0x3a, 0x87, 0x8d, 0xfb, - 0x0c, 0x67, 0xa4, 0x49, 0xa6, 0x61, 0xa4, 0x37, 0x59, 0x41, 0x92, 0xe5, 0x14, 0x06, 0x4b, 0x2d, - 0x9d, 0xc0, 0x61, 0x74, 0xb6, 0x03, 0x7f, 0x1a, 0xe4, 0x28, 0x55, 0x6c, 0x96, 0x98, 0x87, 0x7a, - 0x15, 0x52, 0x2e, 0x95, 0x91, 0xfc, 0x92, 0x71, 0xbb, 0xac, 0xc6, 0x29, 0xd1, 0x6f, 0xab, 0x1f, - 0x7b, 0x98, 0x70, 0xe0, 0x28, 0x61, 0xc9, 0xc7, 0x9c, 0xba, 0x34, 0xc4, 0x39, 0x9c, 0xa0, 0x8a, - 0x2b, 0x99, 0x3d, 0xae, 0xae, 0x87, 0x2a, 0x2e, 0x45, 0x3e, 0xd9, 0xe5, 0x93, 0x27, 0xbb, 0x6c, - 0x8b, 0xe2, 0x24, 0x61, 0x8c, 0x29, 0x49, 0x2b, 0x68, 0x93, 0xd0, 0x06, 0x15, 0xb9, 0xc0, 0x01, - 0x0e, 0xa3, 0xd7, 0x16, 0x9c, 0x35, 0x98, 0xf0, 0xe0, 0xc5, 0xc1, 0x2e, 0x84, 0x91, 0x2e, 0x14, - 0xb9, 0x7d, 0xd6, 0x31, 0xde, 0x9f, 0xf9, 0xcc, 0x02, 0x93, 0x2f, 0x30, 0xd8, 0x5f, 0x0b, 0x21, - 0xa0, 0x43, 0x0f, 0x19, 0xf2, 0x18, 0x4f, 0x02, 0xfe, 0x2f, 0x5c, 0x38, 0xce, 0xe4, 0x43, 0xaa, - 0x65, 0xb3, 0xa7, 0x95, 0x39, 0xf9, 0xd3, 0x02, 0x67, 0xef, 0x08, 0x22, 0x4c, 0x32, 0xfa, 0x8a, - 0x24, 0xed, 0xb8, 0x4b, 0x3d, 0x3a, 0xdf, 0x9d, 0x00, 0xd4, 0xae, 0x79, 0x6c, 0xdb, 0xb4, 0xbb, - 0x90, 0x32, 0x6b, 0x2f, 0xaf, 0x2f, 0xe3, 0x0c, 0xba, 0x26, 0xd3, 0x51, 0xb5, 0xfe, 0x83, 0xa0, - 0xb2, 0xc4, 0x7b, 0x10, 0x4d, 0x56, 0x93, 0xac, 0x95, 0xa4, 0x22, 0xc7, 0x6a, 0x05, 0xc6, 0x35, - 0xb2, 0xa8, 0x81, 0xab, 0xef, 0xf0, 0x4a, 0xe7, 0x6b, 0x4f, 0x2b, 0x3e, 0x03, 0xbe, 0xe2, 0x65, - 0xb1, 0x6a, 0xee, 0xe1, 0xd7, 0x87, 0x75, 0x42, 0xb7, 0xc5, 0xd2, 0x8b, 0xf4, 0xc6, 0x2f, 0x49, - 0x3e, 0xff, 0xd4, 0x4c, 0x7f, 0xad, 0xfd, 0x83, 0x4f, 0xc3, 0xb2, 0xcb, 0xd0, 0xa7, 0xff, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x3c, 0xd6, 0xae, 0xd9, 0x32, 0x04, 0x00, 0x00, + // 602 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0x56, 0x48, 0x9a, 0xa6, 0x93, 0x96, 0xa6, 0x4b, 0x54, 0x19, 0x15, 0x41, 0x15, 0x38, 0x14, + 0x54, 0x1c, 0x54, 0x90, 0xb8, 0x70, 0x6a, 0xda, 0x83, 0x0f, 0x08, 0xe4, 0xc2, 0x85, 0x8b, 0xb5, + 0xb1, 0x27, 0xa9, 0x55, 0x7b, 0xd7, 0xf2, 0x8e, 0x4b, 0xfb, 0x22, 0x5c, 0x78, 0x22, 0xde, 0x88, + 0x23, 0xda, 0xf1, 0x4f, 0x9c, 0xa8, 0x5c, 0x2c, 0xcf, 0x7c, 0xdf, 0xcc, 0xce, 0x37, 0x3b, 0xb3, + 0xf0, 0x6a, 0x91, 0xe8, 0x9f, 0x53, 0x54, 0x14, 0x53, 0x8c, 0x66, 0x8a, 0x77, 0x18, 0x16, 0x14, + 0x6b, 0x15, 0xe4, 0x68, 0x8a, 0x84, 0xdc, 0x2c, 0xd7, 0xa4, 0xc5, 0x9e, 0x65, 0xb9, 0x35, 0x6b, + 0xf2, 0xb7, 0x03, 0xfb, 0x97, 0x35, 0xd3, 0x67, 0xa2, 0x38, 0x05, 0x91, 0xe5, 0x78, 0x1b, 0xeb, + 0xc2, 0x54, 0xb1, 0x41, 0x1c, 0x39, 0x9d, 0xe3, 0xce, 0xc9, 0xae, 0x3f, 0xaa, 0x91, 0x92, 0xeb, + 0x45, 0xe2, 0x29, 0x0c, 0xe6, 0x89, 0x0e, 0x6f, 0x2c, 0xe7, 0x11, 0x73, 0xb6, 0xd9, 0xf6, 0x22, + 0x71, 0x0a, 0xfd, 0xf0, 0xba, 0x50, 0x37, 0xc6, 0xe9, 0x1e, 0x77, 0x4f, 0x86, 0x67, 0x63, 0x77, + 0xed, 0x70, 0x77, 0x66, 0x41, 0xbf, 0xe2, 0x88, 0x73, 0x78, 0x6c, 0x30, 0xbf, 0x8d, 0x43, 0x0c, + 0xf0, 0x16, 0x15, 0x19, 0xa7, 0xc7, 0x51, 0x47, 0x1b, 0x51, 0x57, 0x25, 0xe9, 0xd2, 0x72, 0xfc, + 0x3d, 0xd3, 0xb2, 0x8c, 0x78, 0x03, 0x07, 0x2b, 0xdd, 0x91, 0x24, 0x69, 0xab, 0xda, 0xe2, 0xaa, + 0xf6, 0x1b, 0xe0, 0x42, 0x92, 0xf4, 0xa2, 0xc9, 0x9f, 0x2e, 0x6c, 0x71, 0x05, 0xe2, 0x04, 0xf6, + 0x67, 0x3a, 0x49, 0x30, 0xb4, 0xa8, 0xa7, 0x22, 0xbc, 0x63, 0xb5, 0x7b, 0xfe, 0xa6, 0x5b, 0xbc, + 0x80, 0xa1, 0x21, 0x99, 0x53, 0x60, 0x48, 0x12, 0x56, 0x7a, 0x81, 0x5d, 0x57, 0xd6, 0x23, 0x5e, + 0xc3, 0x88, 0x8b, 0x0f, 0xc2, 0x26, 0xd2, 0xe9, 0x56, 0xe7, 0x5b, 0xff, 0x2a, 0xe1, 0x5a, 0xe3, + 0x7a, 0xeb, 0x8d, 0xfb, 0x00, 0x87, 0xa4, 0x49, 0x26, 0x41, 0xa8, 0xd3, 0xac, 0x20, 0xc9, 0x72, + 0x0a, 0x83, 0xa5, 0x96, 0x9e, 0x3f, 0x66, 0x74, 0xb6, 0x02, 0xbf, 0x1b, 0xe4, 0x28, 0x55, 0xa4, + 0x73, 0xcc, 0x03, 0xbd, 0x08, 0x28, 0x97, 0xca, 0x48, 0x3e, 0xc9, 0x38, 0x7d, 0x56, 0x33, 0x2e, + 0xd1, 0x2f, 0x8b, 0x6f, 0x2d, 0x4c, 0x8c, 0x61, 0x2b, 0x66, 0xc9, 0xdb, 0x9c, 0xba, 0x34, 0xc4, + 0x11, 0xec, 0xa0, 0x8a, 0x2a, 0x99, 0x03, 0xae, 0x6e, 0x80, 0x2a, 0x2a, 0x45, 0x3e, 0xd8, 0xe5, + 0x9d, 0x07, 0xbb, 0x6c, 0x8b, 0xe2, 0x24, 0x41, 0x84, 0x09, 0x49, 0x2b, 0x28, 0x8d, 0x29, 0x45, + 0x45, 0x0e, 0x70, 0xc0, 0x98, 0xd1, 0x0b, 0x0b, 0xce, 0x1a, 0x4c, 0xb8, 0xf0, 0x64, 0x6d, 0x16, + 0x82, 0x50, 0x17, 0x8a, 0x9c, 0x21, 0xeb, 0x38, 0x68, 0xdf, 0xf9, 0xcc, 0x02, 0x93, 0x4f, 0xb0, + 0xdb, 0x1e, 0x0b, 0x21, 0xa0, 0x47, 0xf7, 0x19, 0xf2, 0x35, 0xee, 0xf8, 0xfc, 0x2f, 0x1c, 0xd8, + 0xce, 0xe4, 0x7d, 0xa2, 0x65, 0x33, 0xa7, 0x95, 0x39, 0xf9, 0xdd, 0x81, 0x71, 0x6b, 0x09, 0x42, + 0x8c, 0x33, 0xfa, 0x8c, 0x24, 0xed, 0x75, 0x97, 0x7a, 0x74, 0xbe, 0x5a, 0x01, 0xa8, 0x5d, 0x5e, + 0x64, 0xdb, 0xb4, 0xda, 0x90, 0x32, 0xeb, 0x20, 0xaf, 0x37, 0xe3, 0x10, 0xfa, 0x26, 0xd3, 0x61, + 0x35, 0xfe, 0xbb, 0x7e, 0x65, 0x89, 0xb7, 0x20, 0x9a, 0xac, 0x26, 0x5e, 0x2a, 0x49, 0x45, 0x8e, + 0xd5, 0x08, 0x1c, 0xd4, 0xc8, 0x55, 0x0d, 0x4c, 0x7e, 0x75, 0x60, 0xb4, 0x59, 0x9d, 0xf8, 0x08, + 0xbd, 0x14, 0x49, 0x72, 0x49, 0xc3, 0xb3, 0x97, 0x1b, 0x2b, 0xf2, 0x90, 0x18, 0x9f, 0x03, 0x84, + 0x07, 0xa3, 0xcd, 0x97, 0x81, 0x0b, 0x1f, 0x9e, 0x3d, 0xff, 0x7f, 0x12, 0xcb, 0x6a, 0x5d, 0x6d, + 0xe9, 0x38, 0xff, 0x0a, 0xcf, 0x74, 0xbe, 0x74, 0xb5, 0xe2, 0x38, 0x7e, 0x5e, 0xe6, 0xc5, 0xa2, + 0x49, 0xf0, 0xe3, 0xdd, 0x32, 0xa6, 0xeb, 0x62, 0xee, 0x86, 0x3a, 0x9d, 0x96, 0xa4, 0x29, 0x7f, + 0x6a, 0xe6, 0x74, 0xa9, 0xa7, 0x6b, 0x6f, 0xd6, 0xbc, 0xcf, 0xd0, 0xfb, 0x7f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0xeb, 0xec, 0x25, 0x11, 0xcb, 0x04, 0x00, 0x00, }