1 // Code generated by protoc-gen-go. DO NOT EDIT.
2 // source: google/devtools/remoteexecution/v1test/remote_execution.proto
5 Package remoteexecution is a generated protocol buffer package.
7 It is generated from these files:
8 google/devtools/remoteexecution/v1test/remote_execution.proto
10 It has these top-level messages:
23 ExecuteOperationMetadata
24 GetActionResultRequest
25 UpdateActionResultRequest
26 FindMissingBlobsRequest
27 FindMissingBlobsResponse
29 BatchUpdateBlobsRequest
30 BatchUpdateBlobsResponse
34 package remoteexecution
36 import proto "github.com/golang/protobuf/proto"
39 import _ "google.golang.org/genproto/googleapis/api/annotations"
40 import google_longrunning "google.golang.org/genproto/googleapis/longrunning"
41 import google_protobuf3 "github.com/golang/protobuf/ptypes/duration"
42 import google_rpc "google.golang.org/genproto/googleapis/rpc/status"
45 context "golang.org/x/net/context"
46 grpc "google.golang.org/grpc"
49 // Reference imports to suppress errors if they are not otherwise used.
54 // This is a compile-time assertion to ensure that this generated file
55 // is compatible with the proto package it is being compiled against.
56 // A compilation error at this line likely means your copy of the
57 // proto package needs to be updated.
58 const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
60 // The current stage of execution.
61 type ExecuteOperationMetadata_Stage int32
64 ExecuteOperationMetadata_UNKNOWN ExecuteOperationMetadata_Stage = 0
65 // Checking the result against the cache.
66 ExecuteOperationMetadata_CACHE_CHECK ExecuteOperationMetadata_Stage = 1
67 // Currently idle, awaiting a free machine to execute.
68 ExecuteOperationMetadata_QUEUED ExecuteOperationMetadata_Stage = 2
69 // Currently being executed by a worker.
70 ExecuteOperationMetadata_EXECUTING ExecuteOperationMetadata_Stage = 3
71 // Finished execution.
72 ExecuteOperationMetadata_COMPLETED ExecuteOperationMetadata_Stage = 4
75 var ExecuteOperationMetadata_Stage_name = map[int32]string{
82 var ExecuteOperationMetadata_Stage_value = map[string]int32{
90 func (x ExecuteOperationMetadata_Stage) String() string {
91 return proto.EnumName(ExecuteOperationMetadata_Stage_name, int32(x))
93 func (ExecuteOperationMetadata_Stage) EnumDescriptor() ([]byte, []int) {
94 return fileDescriptor0, []int{12, 0}
97 // An `Action` captures all the information about an execution which is required
100 // `Action`s are the core component of the [Execution] service. A single
101 // `Action` represents a repeatable action that can be performed by the
102 // execution service. `Action`s can be succinctly identified by the digest of
103 // their wire format encoding and, once an `Action` has been executed, will be
104 // cached in the action cache. Future requests can then use the cached result
105 // rather than needing to run afresh.
107 // When a server completes execution of an [Action][google.devtools.remoteexecution.v1test.Action],
108 // it MAY choose to cache the [result][google.devtools.remoteexecution.v1test.ActionResult]
109 // in the [ActionCache][google.devtools.remoteexecution.v1test.ActionCache]
110 // unless `do_not_cache` is `true`. Clients SHOULD expect the server to do so.
111 // By default, future calls to [Execute][] the same `Action` will also serve
112 // their results from the cache. Clients must take care to understand the
113 // caching behaviour. Ideally, all `Action`s will be reproducible so that
114 // serving a result from cache is always desirable and correct.
116 // The digest of the [Command][google.devtools.remoteexecution.v1test.Command]
117 // to run, which MUST be present in the
118 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage].
119 CommandDigest *Digest `protobuf:"bytes,1,opt,name=command_digest,json=commandDigest" json:"command_digest,omitempty"`
120 // The digest of the root [Directory][google.devtools.remoteexecution.v1test.Directory]
121 // for the input files. The files in the directory tree are available in the
122 // correct location on the build machine before the command is executed. The
123 // root directory, as well as every subdirectory and content blob referred to,
124 // MUST be in the [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage].
125 InputRootDigest *Digest `protobuf:"bytes,2,opt,name=input_root_digest,json=inputRootDigest" json:"input_root_digest,omitempty"`
126 // A list of the output files that the client expects to retrieve from the
127 // action. Only the listed files, as well as directories listed in
128 // `output_directories`, will be returned to the client as output.
129 // Other files that may be created during command execution are discarded.
131 // The paths are specified using forward slashes (`/`) as path separators,
132 // even if the execution platform natively uses a different separator. The
133 // path MUST NOT include a trailing slash.
135 // In order to ensure consistent hashing of the same Action, the output paths
136 // MUST be sorted lexicographically by code point (or, equivalently, by UTF-8
138 OutputFiles []string `protobuf:"bytes,3,rep,name=output_files,json=outputFiles" json:"output_files,omitempty"`
139 // A list of the output directories that the client expects to retrieve from
140 // the action. Only the contents of the indicated directories (recursively
141 // including the contents of their subdirectories) will be
142 // returned, as well as files listed in `output_files`. Other files that may
143 // be created during command execution are discarded.
145 // The paths are specified using forward slashes (`/`) as path separators,
146 // even if the execution platform natively uses a different separator. The
147 // path MUST NOT include a trailing slash, unless the path is `"/"` (which,
148 // although not recommended, can be used to capture the entire working
149 // directory tree, including inputs).
151 // In order to ensure consistent hashing of the same Action, the output paths
152 // MUST be sorted lexicographically by code point (or, equivalently, by UTF-8
154 OutputDirectories []string `protobuf:"bytes,4,rep,name=output_directories,json=outputDirectories" json:"output_directories,omitempty"`
155 // The platform requirements for the execution environment. The server MAY
156 // choose to execute the action on any worker satisfying the requirements, so
157 // the client SHOULD ensure that running the action on any such worker will
158 // have the same result.
159 Platform *Platform `protobuf:"bytes,5,opt,name=platform" json:"platform,omitempty"`
160 // A timeout after which the execution should be killed. If the timeout is
161 // absent, then the client is specifying that the execution should continue
162 // as long as the server will let it. The server SHOULD impose a timeout if
163 // the client does not specify one, however, if the client does specify a
164 // timeout that is longer than the server's maximum timeout, the server MUST
165 // reject the request.
167 // The timeout is a part of the
168 // [Action][google.devtools.remoteexecution.v1test.Action] message, and
169 // therefore two `Actions` with different timeouts are different, even if they
170 // are otherwise identical. This is because, if they were not, running an
171 // `Action` with a lower timeout than is required might result in a cache hit
172 // from an execution run with a longer timeout, hiding the fact that the
173 // timeout is too short. By encoding it directly in the `Action`, a lower
174 // timeout will result in a cache miss and the execution timeout will fail
175 // immediately, rather than whenever the cache entry gets evicted.
176 Timeout *google_protobuf3.Duration `protobuf:"bytes,6,opt,name=timeout" json:"timeout,omitempty"`
177 // If true, then the `Action`'s result cannot be cached.
178 DoNotCache bool `protobuf:"varint,7,opt,name=do_not_cache,json=doNotCache" json:"do_not_cache,omitempty"`
181 func (m *Action) Reset() { *m = Action{} }
182 func (m *Action) String() string { return proto.CompactTextString(m) }
183 func (*Action) ProtoMessage() {}
184 func (*Action) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
186 func (m *Action) GetCommandDigest() *Digest {
188 return m.CommandDigest
193 func (m *Action) GetInputRootDigest() *Digest {
195 return m.InputRootDigest
200 func (m *Action) GetOutputFiles() []string {
207 func (m *Action) GetOutputDirectories() []string {
209 return m.OutputDirectories
214 func (m *Action) GetPlatform() *Platform {
221 func (m *Action) GetTimeout() *google_protobuf3.Duration {
228 func (m *Action) GetDoNotCache() bool {
235 // A `Command` is the actual command executed by a worker running an
236 // [Action][google.devtools.remoteexecution.v1test.Action].
238 // Except as otherwise required, the environment (such as which system
239 // libraries or binaries are available, and what filesystems are mounted where)
240 // is defined by and specific to the implementation of the remote execution API.
241 type Command struct {
242 // The arguments to the command. The first argument must be the path to the
243 // executable, which must be either a relative path, in which case it is
244 // evaluated with respect to the input root, or an absolute path. The `PATH`
245 // environment variable, or similar functionality on other systems, is not
246 // used to determine which executable to run.
248 // The working directory will always be the input root.
249 Arguments []string `protobuf:"bytes,1,rep,name=arguments" json:"arguments,omitempty"`
250 // The environment variables to set when running the program. The worker may
251 // provide its own default environment variables; these defaults can be
252 // overridden using this field. Additional variables can also be specified.
254 // In order to ensure that equivalent `Command`s always hash to the same
255 // value, the environment variables MUST be lexicographically sorted by name.
256 // Sorting of strings is done by code point, equivalently, by the UTF-8 bytes.
257 EnvironmentVariables []*Command_EnvironmentVariable `protobuf:"bytes,2,rep,name=environment_variables,json=environmentVariables" json:"environment_variables,omitempty"`
260 func (m *Command) Reset() { *m = Command{} }
261 func (m *Command) String() string { return proto.CompactTextString(m) }
262 func (*Command) ProtoMessage() {}
263 func (*Command) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
265 func (m *Command) GetArguments() []string {
272 func (m *Command) GetEnvironmentVariables() []*Command_EnvironmentVariable {
274 return m.EnvironmentVariables
279 // An `EnvironmentVariable` is one variable to set in the running program's
281 type Command_EnvironmentVariable struct {
282 // The variable name.
283 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
284 // The variable value.
285 Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
288 func (m *Command_EnvironmentVariable) Reset() { *m = Command_EnvironmentVariable{} }
289 func (m *Command_EnvironmentVariable) String() string { return proto.CompactTextString(m) }
290 func (*Command_EnvironmentVariable) ProtoMessage() {}
291 func (*Command_EnvironmentVariable) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} }
293 func (m *Command_EnvironmentVariable) GetName() string {
300 func (m *Command_EnvironmentVariable) GetValue() string {
307 // A `Platform` is a set of requirements, such as hardware, operation system, or
308 // compiler toolchain, for an
309 // [Action][google.devtools.remoteexecution.v1test.Action]'s execution
310 // environment. A `Platform` is represented as a series of key-value pairs
311 // representing the properties that are required of the platform.
313 // This message is currently being redeveloped since it is an overly simplistic
314 // model of platforms.
315 type Platform struct {
316 // The properties that make up this platform. In order to ensure that
317 // equivalent `Platform`s always hash to the same value, the properties MUST
318 // be lexicographically sorted by name, and then by value. Sorting of strings
319 // is done by code point, equivalently, by the UTF-8 bytes.
320 Properties []*Platform_Property `protobuf:"bytes,1,rep,name=properties" json:"properties,omitempty"`
323 func (m *Platform) Reset() { *m = Platform{} }
324 func (m *Platform) String() string { return proto.CompactTextString(m) }
325 func (*Platform) ProtoMessage() {}
326 func (*Platform) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
328 func (m *Platform) GetProperties() []*Platform_Property {
335 // A single property for the environment. The server is responsible for
336 // specifying the property `name`s that it accepts. If an unknown `name` is
337 // provided in the requirements for an
338 // [Action][google.devtools.remoteexecution.v1test.Action], the server SHOULD
339 // reject the execution request. If permitted by the server, the same `name`
340 // may occur multiple times.
342 // The server is also responsible for specifying the interpretation of
343 // property `value`s. For instance, a property describing how much RAM must be
344 // available may be interpreted as allowing a worker with 16GB to fulfill a
345 // request for 8GB, while a property describing the OS environment on which
346 // the action must be performed may require an exact match with the worker's
349 // The server MAY use the `value` of one or more properties to determine how
350 // it sets up the execution environment, such as by making specific system
351 // files available to the worker.
352 type Platform_Property struct {
353 // The property name.
354 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
355 // The property value.
356 Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
359 func (m *Platform_Property) Reset() { *m = Platform_Property{} }
360 func (m *Platform_Property) String() string { return proto.CompactTextString(m) }
361 func (*Platform_Property) ProtoMessage() {}
362 func (*Platform_Property) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
364 func (m *Platform_Property) GetName() string {
371 func (m *Platform_Property) GetValue() string {
378 // A `Directory` represents a directory node in a file tree, containing zero or
379 // more children [FileNodes][google.devtools.remoteexecution.v1test.FileNode] and
380 // [DirectoryNodes][google.devtools.remoteexecution.v1test.DirectoryNode].
381 // Each `Node` contains its name in the directory, the digest of its content
382 // (either a file blob or a `Directory` proto), as well as possibly some
383 // metadata about the file or directory.
385 // In order to ensure that two equivalent directory trees hash to the same
386 // value, the following restrictions MUST be obeyed when constructing a
388 // - Every child in the directory must have a path of exactly one segment.
389 // Multiple levels of directory hierarchy may not be collapsed.
390 // - Each child in the directory must have a unique path segment (file name).
391 // - The files and directories in the directory must each be sorted in
392 // lexicographical order by path. The path strings must be sorted by code
393 // point, equivalently, by UTF-8 bytes.
395 // A `Directory` that obeys the restrictions is said to be in canonical form.
397 // As an example, the following could be used for a file named `bar` and a
398 // directory named `foo` with an executable file named `baz` (hashes shortened
402 // // (Directory proto)
408 // hash: "4a73bc9d03...",
417 // hash: "4cf2eda940...",
424 // // (Directory proto with hash "4cf2eda940..." and size 43)
430 // hash: "b2c941073e...",
433 // is_executable: true
438 type Directory struct {
439 // The files in the directory.
440 Files []*FileNode `protobuf:"bytes,1,rep,name=files" json:"files,omitempty"`
441 // The subdirectories in the directory.
442 Directories []*DirectoryNode `protobuf:"bytes,2,rep,name=directories" json:"directories,omitempty"`
445 func (m *Directory) Reset() { *m = Directory{} }
446 func (m *Directory) String() string { return proto.CompactTextString(m) }
447 func (*Directory) ProtoMessage() {}
448 func (*Directory) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
450 func (m *Directory) GetFiles() []*FileNode {
457 func (m *Directory) GetDirectories() []*DirectoryNode {
464 // A `FileNode` represents a single file and associated metadata.
465 type FileNode struct {
466 // The name of the file.
467 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
468 // The digest of the file's content.
469 Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"`
470 // True if file is executable, false otherwise.
471 IsExecutable bool `protobuf:"varint,4,opt,name=is_executable,json=isExecutable" json:"is_executable,omitempty"`
474 func (m *FileNode) Reset() { *m = FileNode{} }
475 func (m *FileNode) String() string { return proto.CompactTextString(m) }
476 func (*FileNode) ProtoMessage() {}
477 func (*FileNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
479 func (m *FileNode) GetName() string {
486 func (m *FileNode) GetDigest() *Digest {
493 func (m *FileNode) GetIsExecutable() bool {
495 return m.IsExecutable
500 // A `DirectoryNode` represents a child of a
501 // [Directory][google.devtools.remoteexecution.v1test.Directory] which is itself
502 // a `Directory` and its associated metadata.
503 type DirectoryNode struct {
504 // The name of the directory.
505 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
506 // The digest of the [Directory][google.devtools.remoteexecution.v1test.Directory]
507 // object represented. See [Digest][google.devtools.remoteexecution.v1test.Digest]
508 // for information about how to take the digest of a proto message.
509 Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"`
512 func (m *DirectoryNode) Reset() { *m = DirectoryNode{} }
513 func (m *DirectoryNode) String() string { return proto.CompactTextString(m) }
514 func (*DirectoryNode) ProtoMessage() {}
515 func (*DirectoryNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
517 func (m *DirectoryNode) GetName() string {
524 func (m *DirectoryNode) GetDigest() *Digest {
531 // A content digest. A digest for a given blob consists of the size of the blob
532 // and its hash. The hash algorithm to use is defined by the server, but servers
533 // SHOULD use SHA-256.
535 // The size is considered to be an integral part of the digest and cannot be
536 // separated. That is, even if the `hash` field is correctly specified but
537 // `size_bytes` is not, the server MUST reject the request.
539 // The reason for including the size in the digest is as follows: in a great
540 // many cases, the server needs to know the size of the blob it is about to work
541 // with prior to starting an operation with it, such as flattening Merkle tree
542 // structures or streaming it to a worker. Technically, the server could
543 // implement a separate metadata store, but this results in a significantly more
544 // complicated implementation as opposed to having the client specify the size
545 // up-front (or storing the size along with the digest in every message where
546 // digests are embedded). This does mean that the API leaks some implementation
547 // details of (what we consider to be) a reasonable server implementation, but
548 // we consider this to be a worthwhile tradeoff.
550 // When a `Digest` is used to refer to a proto message, it always refers to the
551 // message in binary encoded form. To ensure consistent hashing, clients and
552 // servers MUST ensure that they serialize messages according to the following
553 // rules, even if there are alternate valid encodings for the same message.
554 // - Fields are serialized in tag order.
555 // - There are no unknown fields.
556 // - There are no duplicate fields.
557 // - Fields are serialized according to the default semantics for their type.
559 // Most protocol buffer implementations will always follow these rules when
560 // serializing, but care should be taken to avoid shortcuts. For instance,
561 // concatenating two messages to merge them may produce duplicate fields.
563 // The hash. In the case of SHA-256, it will always be a lowercase hex string
564 // exactly 64 characters long.
565 Hash string `protobuf:"bytes,1,opt,name=hash" json:"hash,omitempty"`
566 // The size of the blob, in bytes.
567 SizeBytes int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes" json:"size_bytes,omitempty"`
570 func (m *Digest) Reset() { *m = Digest{} }
571 func (m *Digest) String() string { return proto.CompactTextString(m) }
572 func (*Digest) ProtoMessage() {}
573 func (*Digest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
575 func (m *Digest) GetHash() string {
582 func (m *Digest) GetSizeBytes() int64 {
589 // An ActionResult represents the result of an
590 // [Action][google.devtools.remoteexecution.v1test.Action] being run.
591 type ActionResult struct {
592 // The output files of the action. For each output file requested, if the
593 // corresponding file existed after the action completed, a single entry will
594 // be present in the output list.
596 // If the action does not produce the requested output, or produces a
597 // directory where a regular file is expected or vice versa, then that output
598 // will be omitted from the list. The server is free to arrange the output
599 // list as desired; clients MUST NOT assume that the output list is sorted.
600 OutputFiles []*OutputFile `protobuf:"bytes,2,rep,name=output_files,json=outputFiles" json:"output_files,omitempty"`
601 // The output directories of the action. For each output directory requested,
602 // if the corresponding directory existed after the action completed, a single
603 // entry will be present in the output list. The client can retrieve the full
604 // [Directory][google.devtools.remoteexecution.v1test.Directory] structure
605 // using [ContentAddressableStorage.GetTree][google.devtools.remoteexecution.v1test.ContentAddressableStorage.GetTree].
607 // If the action does not produce the requested output, or produces a
608 // directory where a regular file is expected or vice versa, then that output
609 // will be omitted from the list. The server is free to arrange the output
610 // list as desired; clients MUST NOT assume that the output list is sorted.
611 OutputDirectories []*OutputDirectory `protobuf:"bytes,3,rep,name=output_directories,json=outputDirectories" json:"output_directories,omitempty"`
612 // The exit code of the command.
613 ExitCode int32 `protobuf:"varint,4,opt,name=exit_code,json=exitCode" json:"exit_code,omitempty"`
614 // The standard output buffer of the action. The server will determine, based
615 // on the size of the buffer, whether to return it in raw form or to return
616 // a digest in `stdout_digest` that points to the buffer. If neither is set,
617 // then the buffer is empty. The client SHOULD NOT assume it will get one of
618 // the raw buffer or a digest on any given request and should be prepared to
620 StdoutRaw []byte `protobuf:"bytes,5,opt,name=stdout_raw,json=stdoutRaw,proto3" json:"stdout_raw,omitempty"`
621 // The digest for a blob containing the standard output of the action, which
622 // can be retrieved from the
623 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage].
624 // See `stdout_raw` for when this will be set.
625 StdoutDigest *Digest `protobuf:"bytes,6,opt,name=stdout_digest,json=stdoutDigest" json:"stdout_digest,omitempty"`
626 // The standard error buffer of the action. The server will determine, based
627 // on the size of the buffer, whether to return it in raw form or to return
628 // a digest in `stderr_digest` that points to the buffer. If neither is set,
629 // then the buffer is empty. The client SHOULD NOT assume it will get one of
630 // the raw buffer or a digest on any given request and should be prepared to
632 StderrRaw []byte `protobuf:"bytes,7,opt,name=stderr_raw,json=stderrRaw,proto3" json:"stderr_raw,omitempty"`
633 // The digest for a blob containing the standard error of the action, which
634 // can be retrieved from the
635 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage].
636 // See `stderr_raw` for when this will be set.
637 StderrDigest *Digest `protobuf:"bytes,8,opt,name=stderr_digest,json=stderrDigest" json:"stderr_digest,omitempty"`
640 func (m *ActionResult) Reset() { *m = ActionResult{} }
641 func (m *ActionResult) String() string { return proto.CompactTextString(m) }
642 func (*ActionResult) ProtoMessage() {}
643 func (*ActionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
645 func (m *ActionResult) GetOutputFiles() []*OutputFile {
652 func (m *ActionResult) GetOutputDirectories() []*OutputDirectory {
654 return m.OutputDirectories
659 func (m *ActionResult) GetExitCode() int32 {
666 func (m *ActionResult) GetStdoutRaw() []byte {
673 func (m *ActionResult) GetStdoutDigest() *Digest {
675 return m.StdoutDigest
680 func (m *ActionResult) GetStderrRaw() []byte {
687 func (m *ActionResult) GetStderrDigest() *Digest {
689 return m.StderrDigest
694 // An `OutputFile` is similar to a
695 // [FileNode][google.devtools.remoteexecution.v1test.FileNode], but it is
696 // tailored for output as part of an `ActionResult`. It allows a full file path
697 // rather than only a name, and allows the server to include content inline.
699 // `OutputFile` is binary-compatible with `FileNode`.
700 type OutputFile struct {
701 // The full path of the file relative to the input root, including the
702 // filename. The path separator is a forward slash `/`.
703 Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"`
704 // The digest of the file's content.
705 Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"`
706 // The raw content of the file.
708 // This field may be used by the server to provide the content of a file
709 // inline in an [ActionResult][google.devtools.remoteexecution.v1test.ActionResult]
710 // and avoid requiring that the client make a separate call to
711 // [ContentAddressableStorage.GetBlob] to retrieve it.
713 // The client SHOULD NOT assume that it will get raw content with any request,
714 // and always be prepared to retrieve it via `digest`.
715 Content []byte `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"`
716 // True if file is executable, false otherwise.
717 IsExecutable bool `protobuf:"varint,4,opt,name=is_executable,json=isExecutable" json:"is_executable,omitempty"`
720 func (m *OutputFile) Reset() { *m = OutputFile{} }
721 func (m *OutputFile) String() string { return proto.CompactTextString(m) }
722 func (*OutputFile) ProtoMessage() {}
723 func (*OutputFile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
725 func (m *OutputFile) GetPath() string {
732 func (m *OutputFile) GetDigest() *Digest {
739 func (m *OutputFile) GetContent() []byte {
746 func (m *OutputFile) GetIsExecutable() bool {
748 return m.IsExecutable
753 // An `OutputDirectory` is similar to a
754 // [DirectoryNode][google.devtools.remoteexecution.v1test.DirectoryNode],
755 // but it is tailored for output as part of an `ActionResult`. It allows a full
756 // file path rather than only a name. It contains the digest of a
757 // [Directory][google.devtools.remoteexecution.v1test.Directory] which will meet
758 // all the usual requirements for a `Directory`.
760 // `OutputDirectory` is binary-compatible with `DirectoryNode`.
761 type OutputDirectory struct {
762 // The full path of the directory relative to the input root, including the
763 // filename. The path separator is a forward slash `/`.
764 Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"`
765 // The digest of the [Directory][google.devtools.remoteexecution.v1test.Directory]
766 // proto describing the directory's contents.
767 Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"`
770 func (m *OutputDirectory) Reset() { *m = OutputDirectory{} }
771 func (m *OutputDirectory) String() string { return proto.CompactTextString(m) }
772 func (*OutputDirectory) ProtoMessage() {}
773 func (*OutputDirectory) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
775 func (m *OutputDirectory) GetPath() string {
782 func (m *OutputDirectory) GetDigest() *Digest {
789 // A request message for
790 // [Execution.Execute][google.devtools.remoteexecution.v1test.Execution.Execute].
791 type ExecuteRequest struct {
792 // The instance of the execution system to operate against. A server may
793 // support multiple instances of the execution system (with their own workers,
794 // storage, caches, etc.). The server MAY require use of this field to select
795 // between them in an implementation-defined fashion, otherwise it can be
797 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"`
798 // The action to be performed.
799 Action *Action `protobuf:"bytes,2,opt,name=action" json:"action,omitempty"`
800 // If true, the action will be executed anew even if its result was already
801 // present in the cache. If false, the result may be served from the
802 // [ActionCache][google.devtools.remoteexecution.v1test.ActionCache].
803 SkipCacheLookup bool `protobuf:"varint,3,opt,name=skip_cache_lookup,json=skipCacheLookup" json:"skip_cache_lookup,omitempty"`
804 // The total count of input files, not counting directories. This must be
805 // provided so that the server can do resource allocation and, on servers with
806 // quotas, quota checking. It is also used as a safety check: servers MUST
807 // return an error if the total number of input files described in the
808 // `action` is different.
809 TotalInputFileCount int32 `protobuf:"varint,4,opt,name=total_input_file_count,json=totalInputFileCount" json:"total_input_file_count,omitempty"`
810 // The total size of input file content, provided as a hint and check. This
811 // must be provided so that the server can do resource allocation and, on
812 // servers with quotas, quota checking. It is also used as a safety check:
813 // servers MUST return an error if the total size of input files described in
814 // the `action` is different.
815 TotalInputFileBytes int64 `protobuf:"varint,5,opt,name=total_input_file_bytes,json=totalInputFileBytes" json:"total_input_file_bytes,omitempty"`
818 func (m *ExecuteRequest) Reset() { *m = ExecuteRequest{} }
819 func (m *ExecuteRequest) String() string { return proto.CompactTextString(m) }
820 func (*ExecuteRequest) ProtoMessage() {}
821 func (*ExecuteRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
823 func (m *ExecuteRequest) GetInstanceName() string {
825 return m.InstanceName
830 func (m *ExecuteRequest) GetAction() *Action {
837 func (m *ExecuteRequest) GetSkipCacheLookup() bool {
839 return m.SkipCacheLookup
844 func (m *ExecuteRequest) GetTotalInputFileCount() int32 {
846 return m.TotalInputFileCount
851 func (m *ExecuteRequest) GetTotalInputFileBytes() int64 {
853 return m.TotalInputFileBytes
858 // The response message for
859 // [Execution.Execute][google.devtools.remoteexecution.v1test.Execution.Execute],
860 // which will be contained in the [response field][google.longrunning.Operation.response] of the
861 // [Operation][google.longrunning.Operation].
862 type ExecuteResponse struct {
863 // The result of the action.
864 Result *ActionResult `protobuf:"bytes,1,opt,name=result" json:"result,omitempty"`
865 // True if the result was served from cache, false if it was executed.
866 CachedResult bool `protobuf:"varint,2,opt,name=cached_result,json=cachedResult" json:"cached_result,omitempty"`
869 func (m *ExecuteResponse) Reset() { *m = ExecuteResponse{} }
870 func (m *ExecuteResponse) String() string { return proto.CompactTextString(m) }
871 func (*ExecuteResponse) ProtoMessage() {}
872 func (*ExecuteResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
874 func (m *ExecuteResponse) GetResult() *ActionResult {
881 func (m *ExecuteResponse) GetCachedResult() bool {
883 return m.CachedResult
888 // Metadata about an ongoing [execution][google.devtools.remoteexecution.v1test.Execution.Execute],
890 // contained in the [metadata field][google.longrunning.Operation.response] of
891 // the [Operation][google.longrunning.Operation].
892 type ExecuteOperationMetadata struct {
893 Stage ExecuteOperationMetadata_Stage `protobuf:"varint,1,opt,name=stage,enum=google.devtools.remoteexecution.v1test.ExecuteOperationMetadata_Stage" json:"stage,omitempty"`
894 // The digest of the [Action][google.devtools.remoteexecution.v1test.Action]
896 ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest" json:"action_digest,omitempty"`
897 // If set, the client can use this name with
898 // [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the
900 StdoutStreamName string `protobuf:"bytes,3,opt,name=stdout_stream_name,json=stdoutStreamName" json:"stdout_stream_name,omitempty"`
901 // If set, the client can use this name with
902 // [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the
904 StderrStreamName string `protobuf:"bytes,4,opt,name=stderr_stream_name,json=stderrStreamName" json:"stderr_stream_name,omitempty"`
907 func (m *ExecuteOperationMetadata) Reset() { *m = ExecuteOperationMetadata{} }
908 func (m *ExecuteOperationMetadata) String() string { return proto.CompactTextString(m) }
909 func (*ExecuteOperationMetadata) ProtoMessage() {}
910 func (*ExecuteOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
912 func (m *ExecuteOperationMetadata) GetStage() ExecuteOperationMetadata_Stage {
916 return ExecuteOperationMetadata_UNKNOWN
919 func (m *ExecuteOperationMetadata) GetActionDigest() *Digest {
921 return m.ActionDigest
926 func (m *ExecuteOperationMetadata) GetStdoutStreamName() string {
928 return m.StdoutStreamName
933 func (m *ExecuteOperationMetadata) GetStderrStreamName() string {
935 return m.StderrStreamName
940 // A request message for
941 // [ActionCache.GetActionResult][google.devtools.remoteexecution.v1test.ActionCache.GetActionResult].
942 type GetActionResultRequest struct {
943 // The instance of the execution system to operate against. A server may
944 // support multiple instances of the execution system (with their own workers,
945 // storage, caches, etc.). The server MAY require use of this field to select
946 // between them in an implementation-defined fashion, otherwise it can be
948 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"`
949 // The digest of the [Action][google.devtools.remoteexecution.v1test.Action]
950 // whose result is requested.
951 ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest" json:"action_digest,omitempty"`
954 func (m *GetActionResultRequest) Reset() { *m = GetActionResultRequest{} }
955 func (m *GetActionResultRequest) String() string { return proto.CompactTextString(m) }
956 func (*GetActionResultRequest) ProtoMessage() {}
957 func (*GetActionResultRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
959 func (m *GetActionResultRequest) GetInstanceName() string {
961 return m.InstanceName
966 func (m *GetActionResultRequest) GetActionDigest() *Digest {
968 return m.ActionDigest
973 // A request message for
974 // [ActionCache.UpdateActionResult][google.devtools.remoteexecution.v1test.ActionCache.UpdateActionResult].
975 type UpdateActionResultRequest struct {
976 // The instance of the execution system to operate against. A server may
977 // support multiple instances of the execution system (with their own workers,
978 // storage, caches, etc.). The server MAY require use of this field to select
979 // between them in an implementation-defined fashion, otherwise it can be
981 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"`
982 // The digest of the [Action][google.devtools.remoteexecution.v1test.Action]
983 // whose result is being uploaded.
984 ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest" json:"action_digest,omitempty"`
985 // The [ActionResult][google.devtools.remoteexecution.v1test.ActionResult]
986 // to store in the cache.
987 ActionResult *ActionResult `protobuf:"bytes,3,opt,name=action_result,json=actionResult" json:"action_result,omitempty"`
990 func (m *UpdateActionResultRequest) Reset() { *m = UpdateActionResultRequest{} }
991 func (m *UpdateActionResultRequest) String() string { return proto.CompactTextString(m) }
992 func (*UpdateActionResultRequest) ProtoMessage() {}
993 func (*UpdateActionResultRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
995 func (m *UpdateActionResultRequest) GetInstanceName() string {
997 return m.InstanceName
1002 func (m *UpdateActionResultRequest) GetActionDigest() *Digest {
1004 return m.ActionDigest
1009 func (m *UpdateActionResultRequest) GetActionResult() *ActionResult {
1011 return m.ActionResult
1016 // A request message for
1017 // [ContentAddressableStorage.FindMissingBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.FindMissingBlobs].
1018 type FindMissingBlobsRequest struct {
1019 // The instance of the execution system to operate against. A server may
1020 // support multiple instances of the execution system (with their own workers,
1021 // storage, caches, etc.). The server MAY require use of this field to select
1022 // between them in an implementation-defined fashion, otherwise it can be
1024 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"`
1025 // A list of the blobs to check.
1026 BlobDigests []*Digest `protobuf:"bytes,2,rep,name=blob_digests,json=blobDigests" json:"blob_digests,omitempty"`
1029 func (m *FindMissingBlobsRequest) Reset() { *m = FindMissingBlobsRequest{} }
1030 func (m *FindMissingBlobsRequest) String() string { return proto.CompactTextString(m) }
1031 func (*FindMissingBlobsRequest) ProtoMessage() {}
1032 func (*FindMissingBlobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
1034 func (m *FindMissingBlobsRequest) GetInstanceName() string {
1036 return m.InstanceName
1041 func (m *FindMissingBlobsRequest) GetBlobDigests() []*Digest {
1043 return m.BlobDigests
1048 // A response message for
1049 // [ContentAddressableStorage.FindMissingBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.FindMissingBlobs].
1050 type FindMissingBlobsResponse struct {
1051 // A list of the blobs requested *not* present in the storage.
1052 MissingBlobDigests []*Digest `protobuf:"bytes,2,rep,name=missing_blob_digests,json=missingBlobDigests" json:"missing_blob_digests,omitempty"`
1055 func (m *FindMissingBlobsResponse) Reset() { *m = FindMissingBlobsResponse{} }
1056 func (m *FindMissingBlobsResponse) String() string { return proto.CompactTextString(m) }
1057 func (*FindMissingBlobsResponse) ProtoMessage() {}
1058 func (*FindMissingBlobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
1060 func (m *FindMissingBlobsResponse) GetMissingBlobDigests() []*Digest {
1062 return m.MissingBlobDigests
1067 // A single request message for
1068 // [ContentAddressableStorage.BatchUpdateBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.BatchUpdateBlobs].
1069 type UpdateBlobRequest struct {
1070 // The digest of the blob. This MUST be the digest of `data`.
1071 ContentDigest *Digest `protobuf:"bytes,1,opt,name=content_digest,json=contentDigest" json:"content_digest,omitempty"`
1072 // The raw binary data.
1073 Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
1076 func (m *UpdateBlobRequest) Reset() { *m = UpdateBlobRequest{} }
1077 func (m *UpdateBlobRequest) String() string { return proto.CompactTextString(m) }
1078 func (*UpdateBlobRequest) ProtoMessage() {}
1079 func (*UpdateBlobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
1081 func (m *UpdateBlobRequest) GetContentDigest() *Digest {
1083 return m.ContentDigest
1088 func (m *UpdateBlobRequest) GetData() []byte {
1095 // A request message for
1096 // [ContentAddressableStorage.BatchUpdateBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.BatchUpdateBlobs].
1097 type BatchUpdateBlobsRequest struct {
1098 // The instance of the execution system to operate against. A server may
1099 // support multiple instances of the execution system (with their own workers,
1100 // storage, caches, etc.). The server MAY require use of this field to select
1101 // between them in an implementation-defined fashion, otherwise it can be
1103 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"`
1104 // The individual upload requests.
1105 Requests []*UpdateBlobRequest `protobuf:"bytes,2,rep,name=requests" json:"requests,omitempty"`
1108 func (m *BatchUpdateBlobsRequest) Reset() { *m = BatchUpdateBlobsRequest{} }
1109 func (m *BatchUpdateBlobsRequest) String() string { return proto.CompactTextString(m) }
1110 func (*BatchUpdateBlobsRequest) ProtoMessage() {}
1111 func (*BatchUpdateBlobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
1113 func (m *BatchUpdateBlobsRequest) GetInstanceName() string {
1115 return m.InstanceName
1120 func (m *BatchUpdateBlobsRequest) GetRequests() []*UpdateBlobRequest {
1127 // A response message for
1128 // [ContentAddressableStorage.BatchUpdateBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.BatchUpdateBlobs].
1129 type BatchUpdateBlobsResponse struct {
1130 // The responses to the requests.
1131 Responses []*BatchUpdateBlobsResponse_Response `protobuf:"bytes,1,rep,name=responses" json:"responses,omitempty"`
1134 func (m *BatchUpdateBlobsResponse) Reset() { *m = BatchUpdateBlobsResponse{} }
1135 func (m *BatchUpdateBlobsResponse) String() string { return proto.CompactTextString(m) }
1136 func (*BatchUpdateBlobsResponse) ProtoMessage() {}
1137 func (*BatchUpdateBlobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
1139 func (m *BatchUpdateBlobsResponse) GetResponses() []*BatchUpdateBlobsResponse_Response {
1146 // A response corresponding to a single blob that the client tried to upload.
1147 type BatchUpdateBlobsResponse_Response struct {
1148 // The digest to which this response corresponds.
1149 BlobDigest *Digest `protobuf:"bytes,1,opt,name=blob_digest,json=blobDigest" json:"blob_digest,omitempty"`
1150 // The result of attempting to upload that blob.
1151 Status *google_rpc.Status `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"`
1154 func (m *BatchUpdateBlobsResponse_Response) Reset() { *m = BatchUpdateBlobsResponse_Response{} }
1155 func (m *BatchUpdateBlobsResponse_Response) String() string { return proto.CompactTextString(m) }
1156 func (*BatchUpdateBlobsResponse_Response) ProtoMessage() {}
1157 func (*BatchUpdateBlobsResponse_Response) Descriptor() ([]byte, []int) {
1158 return fileDescriptor0, []int{19, 0}
1161 func (m *BatchUpdateBlobsResponse_Response) GetBlobDigest() *Digest {
1168 func (m *BatchUpdateBlobsResponse_Response) GetStatus() *google_rpc.Status {
1175 // A request message for
1176 // [ContentAddressableStorage.GetTree][google.devtools.remoteexecution.v1test.ContentAddressableStorage.GetTree].
1177 type GetTreeRequest struct {
1178 // The instance of the execution system to operate against. A server may
1179 // support multiple instances of the execution system (with their own workers,
1180 // storage, caches, etc.). The server MAY require use of this field to select
1181 // between them in an implementation-defined fashion, otherwise it can be
1183 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"`
1184 // The digest of the root, which must be an encoded
1185 // [Directory][google.devtools.remoteexecution.v1test.Directory] message
1186 // stored in the [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage].
1187 RootDigest *Digest `protobuf:"bytes,2,opt,name=root_digest,json=rootDigest" json:"root_digest,omitempty"`
1188 // A maximum page size to request. If present, the server will request no more
1189 // than this many items. Regardless of whether a page size is specified, the
1190 // server may place its own limit on the number of items to be returned and
1191 // require the client to retrieve more items using a subsequent request.
1192 PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"`
1193 // A page token, which must be a value received in a previous
1194 // [GetTreeResponse][google.devtools.remoteexecution.v1test.GetTreeResponse].
1195 // If present, the server will use it to return the following page of results.
1196 PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"`
1199 func (m *GetTreeRequest) Reset() { *m = GetTreeRequest{} }
1200 func (m *GetTreeRequest) String() string { return proto.CompactTextString(m) }
1201 func (*GetTreeRequest) ProtoMessage() {}
1202 func (*GetTreeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
1204 func (m *GetTreeRequest) GetInstanceName() string {
1206 return m.InstanceName
1211 func (m *GetTreeRequest) GetRootDigest() *Digest {
1218 func (m *GetTreeRequest) GetPageSize() int32 {
1225 func (m *GetTreeRequest) GetPageToken() string {
1232 // A response message for
1233 // [ContentAddressableStorage.GetTree][google.devtools.remoteexecution.v1test.ContentAddressableStorage.GetTree].
1234 type GetTreeResponse struct {
1235 // The directories descended from the requested root.
1236 Directories []*Directory `protobuf:"bytes,1,rep,name=directories" json:"directories,omitempty"`
1237 // If present, signifies that there are more results which the client can
1238 // retrieve by passing this as the page_token in a subsequent
1239 // [request][google.devtools.remoteexecution.v1test.GetTreeRequest].
1240 // If empty, signifies that this is the last page of results.
1241 NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"`
1244 func (m *GetTreeResponse) Reset() { *m = GetTreeResponse{} }
1245 func (m *GetTreeResponse) String() string { return proto.CompactTextString(m) }
1246 func (*GetTreeResponse) ProtoMessage() {}
1247 func (*GetTreeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
1249 func (m *GetTreeResponse) GetDirectories() []*Directory {
1251 return m.Directories
1256 func (m *GetTreeResponse) GetNextPageToken() string {
1258 return m.NextPageToken
1264 proto.RegisterType((*Action)(nil), "google.devtools.remoteexecution.v1test.Action")
1265 proto.RegisterType((*Command)(nil), "google.devtools.remoteexecution.v1test.Command")
1266 proto.RegisterType((*Command_EnvironmentVariable)(nil), "google.devtools.remoteexecution.v1test.Command.EnvironmentVariable")
1267 proto.RegisterType((*Platform)(nil), "google.devtools.remoteexecution.v1test.Platform")
1268 proto.RegisterType((*Platform_Property)(nil), "google.devtools.remoteexecution.v1test.Platform.Property")
1269 proto.RegisterType((*Directory)(nil), "google.devtools.remoteexecution.v1test.Directory")
1270 proto.RegisterType((*FileNode)(nil), "google.devtools.remoteexecution.v1test.FileNode")
1271 proto.RegisterType((*DirectoryNode)(nil), "google.devtools.remoteexecution.v1test.DirectoryNode")
1272 proto.RegisterType((*Digest)(nil), "google.devtools.remoteexecution.v1test.Digest")
1273 proto.RegisterType((*ActionResult)(nil), "google.devtools.remoteexecution.v1test.ActionResult")
1274 proto.RegisterType((*OutputFile)(nil), "google.devtools.remoteexecution.v1test.OutputFile")
1275 proto.RegisterType((*OutputDirectory)(nil), "google.devtools.remoteexecution.v1test.OutputDirectory")
1276 proto.RegisterType((*ExecuteRequest)(nil), "google.devtools.remoteexecution.v1test.ExecuteRequest")
1277 proto.RegisterType((*ExecuteResponse)(nil), "google.devtools.remoteexecution.v1test.ExecuteResponse")
1278 proto.RegisterType((*ExecuteOperationMetadata)(nil), "google.devtools.remoteexecution.v1test.ExecuteOperationMetadata")
1279 proto.RegisterType((*GetActionResultRequest)(nil), "google.devtools.remoteexecution.v1test.GetActionResultRequest")
1280 proto.RegisterType((*UpdateActionResultRequest)(nil), "google.devtools.remoteexecution.v1test.UpdateActionResultRequest")
1281 proto.RegisterType((*FindMissingBlobsRequest)(nil), "google.devtools.remoteexecution.v1test.FindMissingBlobsRequest")
1282 proto.RegisterType((*FindMissingBlobsResponse)(nil), "google.devtools.remoteexecution.v1test.FindMissingBlobsResponse")
1283 proto.RegisterType((*UpdateBlobRequest)(nil), "google.devtools.remoteexecution.v1test.UpdateBlobRequest")
1284 proto.RegisterType((*BatchUpdateBlobsRequest)(nil), "google.devtools.remoteexecution.v1test.BatchUpdateBlobsRequest")
1285 proto.RegisterType((*BatchUpdateBlobsResponse)(nil), "google.devtools.remoteexecution.v1test.BatchUpdateBlobsResponse")
1286 proto.RegisterType((*BatchUpdateBlobsResponse_Response)(nil), "google.devtools.remoteexecution.v1test.BatchUpdateBlobsResponse.Response")
1287 proto.RegisterType((*GetTreeRequest)(nil), "google.devtools.remoteexecution.v1test.GetTreeRequest")
1288 proto.RegisterType((*GetTreeResponse)(nil), "google.devtools.remoteexecution.v1test.GetTreeResponse")
1289 proto.RegisterEnum("google.devtools.remoteexecution.v1test.ExecuteOperationMetadata_Stage", ExecuteOperationMetadata_Stage_name, ExecuteOperationMetadata_Stage_value)
1292 // Reference imports to suppress errors if they are not otherwise used.
1293 var _ context.Context
1294 var _ grpc.ClientConn
1296 // This is a compile-time assertion to ensure that this generated file
1297 // is compatible with the grpc package it is being compiled against.
1298 const _ = grpc.SupportPackageIsVersion4
1300 // Client API for Execution service
1302 type ExecutionClient interface {
1303 // Execute an action remotely.
1305 // In order to execute an action, the client must first upload all of the
1306 // inputs, as well as the [Command][google.devtools.remoteexecution.v1test.Command]
1307 // to run, into the [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage].
1308 // It then calls `Execute` with an [Action][google.devtools.remoteexecution.v1test.Action]
1309 // referring to them. The server will run the action and eventually return the
1312 // The input `Action`'s fields MUST meet the various canonicalization
1313 // requirements specified in the documentation for their types so that it has
1314 // the same digest as other logically equivalent `Action`s. The server MAY
1315 // enforce the requirements and return errors if a non-canonical input is
1316 // received. It MAY also proceed without verifying some or all of the
1317 // requirements, such as for performance reasons. If the server does not
1318 // verify the requirement, then it will treat the `Action` as distinct from
1319 // another logically equivalent action if they hash differently.
1321 // Returns a [google.longrunning.Operation][google.longrunning.Operation]
1322 // describing the resulting execution, with eventual `response`
1323 // [ExecuteResponse][google.devtools.remoteexecution.v1test.ExecuteResponse].
1324 // The `metadata` on the operation is of type
1325 // [ExecuteOperationMetadata][google.devtools.remoteexecution.v1test.ExecuteOperationMetadata].
1327 // To query the operation, you can use the
1328 // [Operations API][google.longrunning.Operations.GetOperation]. If you wish
1329 // to allow the server to stream operations updates, rather than requiring
1330 // client polling, you can use the
1331 // [Watcher API][google.watcher.v1.Watcher.Watch] with the Operation's `name`
1334 // When using the Watcher API, the initial `data` will be the `Operation` at
1335 // the time of the request. Updates will be provided periodically by the
1336 // server until the `Operation` completes, at which point the response message
1337 // will (assuming no error) be at `data.response`.
1339 // The server NEED NOT implement other methods or functionality of the
1340 // Operation and Watcher APIs.
1342 // Errors discovered during creation of the `Operation` will be reported
1343 // as gRPC Status errors, while errors that occurred while running the
1344 // `Operation` will be reported in the `Operation` error field.
1345 // The possible errors include:
1346 // * `INVALID_ARGUMENT`: One or more arguments are invalid.
1347 // * `FAILED_PRECONDITION`: One or more errors occurred in setting up the
1348 // action requested, such as a missing input or no worker being available.
1349 // The client may be able to fix the errors and retry.
1350 // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run
1352 // * `UNAVAILABLE`: Due to a transient condition, such as all workers being
1353 // occupied (and the server does not support a queue), the action could not
1354 // be started. The client should retry.
1355 // * `INTERNAL`: An internal error occurred in the execution engine or the
1357 // * `DEADLINE_EXCEEDED`: The execution timed out.
1358 Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error)
1361 type executionClient struct {
1365 func NewExecutionClient(cc *grpc.ClientConn) ExecutionClient {
1366 return &executionClient{cc}
1369 func (c *executionClient) Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) {
1370 out := new(google_longrunning.Operation)
1371 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.Execution/Execute", in, out, c.cc, opts...)
1378 // Server API for Execution service
1380 type ExecutionServer interface {
1381 // Execute an action remotely.
1383 // In order to execute an action, the client must first upload all of the
1384 // inputs, as well as the [Command][google.devtools.remoteexecution.v1test.Command]
1385 // to run, into the [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage].
1386 // It then calls `Execute` with an [Action][google.devtools.remoteexecution.v1test.Action]
1387 // referring to them. The server will run the action and eventually return the
1390 // The input `Action`'s fields MUST meet the various canonicalization
1391 // requirements specified in the documentation for their types so that it has
1392 // the same digest as other logically equivalent `Action`s. The server MAY
1393 // enforce the requirements and return errors if a non-canonical input is
1394 // received. It MAY also proceed without verifying some or all of the
1395 // requirements, such as for performance reasons. If the server does not
1396 // verify the requirement, then it will treat the `Action` as distinct from
1397 // another logically equivalent action if they hash differently.
1399 // Returns a [google.longrunning.Operation][google.longrunning.Operation]
1400 // describing the resulting execution, with eventual `response`
1401 // [ExecuteResponse][google.devtools.remoteexecution.v1test.ExecuteResponse].
1402 // The `metadata` on the operation is of type
1403 // [ExecuteOperationMetadata][google.devtools.remoteexecution.v1test.ExecuteOperationMetadata].
1405 // To query the operation, you can use the
1406 // [Operations API][google.longrunning.Operations.GetOperation]. If you wish
1407 // to allow the server to stream operations updates, rather than requiring
1408 // client polling, you can use the
1409 // [Watcher API][google.watcher.v1.Watcher.Watch] with the Operation's `name`
1412 // When using the Watcher API, the initial `data` will be the `Operation` at
1413 // the time of the request. Updates will be provided periodically by the
1414 // server until the `Operation` completes, at which point the response message
1415 // will (assuming no error) be at `data.response`.
1417 // The server NEED NOT implement other methods or functionality of the
1418 // Operation and Watcher APIs.
1420 // Errors discovered during creation of the `Operation` will be reported
1421 // as gRPC Status errors, while errors that occurred while running the
1422 // `Operation` will be reported in the `Operation` error field.
1423 // The possible errors include:
1424 // * `INVALID_ARGUMENT`: One or more arguments are invalid.
1425 // * `FAILED_PRECONDITION`: One or more errors occurred in setting up the
1426 // action requested, such as a missing input or no worker being available.
1427 // The client may be able to fix the errors and retry.
1428 // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run
1430 // * `UNAVAILABLE`: Due to a transient condition, such as all workers being
1431 // occupied (and the server does not support a queue), the action could not
1432 // be started. The client should retry.
1433 // * `INTERNAL`: An internal error occurred in the execution engine or the
1435 // * `DEADLINE_EXCEEDED`: The execution timed out.
1436 Execute(context.Context, *ExecuteRequest) (*google_longrunning.Operation, error)
1439 func RegisterExecutionServer(s *grpc.Server, srv ExecutionServer) {
1440 s.RegisterService(&_Execution_serviceDesc, srv)
1443 func _Execution_Execute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
1444 in := new(ExecuteRequest)
1445 if err := dec(in); err != nil {
1448 if interceptor == nil {
1449 return srv.(ExecutionServer).Execute(ctx, in)
1451 info := &grpc.UnaryServerInfo{
1453 FullMethod: "/google.devtools.remoteexecution.v1test.Execution/Execute",
1455 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1456 return srv.(ExecutionServer).Execute(ctx, req.(*ExecuteRequest))
1458 return interceptor(ctx, in, info, handler)
1461 var _Execution_serviceDesc = grpc.ServiceDesc{
1462 ServiceName: "google.devtools.remoteexecution.v1test.Execution",
1463 HandlerType: (*ExecutionServer)(nil),
1464 Methods: []grpc.MethodDesc{
1466 MethodName: "Execute",
1467 Handler: _Execution_Execute_Handler,
1470 Streams: []grpc.StreamDesc{},
1471 Metadata: "google/devtools/remoteexecution/v1test/remote_execution.proto",
1474 // Client API for ActionCache service
1476 type ActionCacheClient interface {
1477 // Retrieve a cached execution result.
1480 // * `NOT_FOUND`: The requested `ActionResult` is not in the cache.
1481 GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error)
1482 // Upload a new execution result.
1484 // This method is intended for servers which implement the distributed cache
1485 // independently of the [Execution][google.devtools.remoteexecution.v1test.Execution]
1486 // API. As a result, it is OPTIONAL for servers to implement.
1489 // * `NOT_IMPLEMENTED`: This method is not supported by the server.
1490 // * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the
1491 // entry to the cache.
1492 UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error)
1495 type actionCacheClient struct {
1499 func NewActionCacheClient(cc *grpc.ClientConn) ActionCacheClient {
1500 return &actionCacheClient{cc}
1503 func (c *actionCacheClient) GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) {
1504 out := new(ActionResult)
1505 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ActionCache/GetActionResult", in, out, c.cc, opts...)
1512 func (c *actionCacheClient) UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) {
1513 out := new(ActionResult)
1514 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ActionCache/UpdateActionResult", in, out, c.cc, opts...)
1521 // Server API for ActionCache service
1523 type ActionCacheServer interface {
1524 // Retrieve a cached execution result.
1527 // * `NOT_FOUND`: The requested `ActionResult` is not in the cache.
1528 GetActionResult(context.Context, *GetActionResultRequest) (*ActionResult, error)
1529 // Upload a new execution result.
1531 // This method is intended for servers which implement the distributed cache
1532 // independently of the [Execution][google.devtools.remoteexecution.v1test.Execution]
1533 // API. As a result, it is OPTIONAL for servers to implement.
1536 // * `NOT_IMPLEMENTED`: This method is not supported by the server.
1537 // * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the
1538 // entry to the cache.
1539 UpdateActionResult(context.Context, *UpdateActionResultRequest) (*ActionResult, error)
1542 func RegisterActionCacheServer(s *grpc.Server, srv ActionCacheServer) {
1543 s.RegisterService(&_ActionCache_serviceDesc, srv)
1546 func _ActionCache_GetActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
1547 in := new(GetActionResultRequest)
1548 if err := dec(in); err != nil {
1551 if interceptor == nil {
1552 return srv.(ActionCacheServer).GetActionResult(ctx, in)
1554 info := &grpc.UnaryServerInfo{
1556 FullMethod: "/google.devtools.remoteexecution.v1test.ActionCache/GetActionResult",
1558 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1559 return srv.(ActionCacheServer).GetActionResult(ctx, req.(*GetActionResultRequest))
1561 return interceptor(ctx, in, info, handler)
1564 func _ActionCache_UpdateActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
1565 in := new(UpdateActionResultRequest)
1566 if err := dec(in); err != nil {
1569 if interceptor == nil {
1570 return srv.(ActionCacheServer).UpdateActionResult(ctx, in)
1572 info := &grpc.UnaryServerInfo{
1574 FullMethod: "/google.devtools.remoteexecution.v1test.ActionCache/UpdateActionResult",
1576 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1577 return srv.(ActionCacheServer).UpdateActionResult(ctx, req.(*UpdateActionResultRequest))
1579 return interceptor(ctx, in, info, handler)
1582 var _ActionCache_serviceDesc = grpc.ServiceDesc{
1583 ServiceName: "google.devtools.remoteexecution.v1test.ActionCache",
1584 HandlerType: (*ActionCacheServer)(nil),
1585 Methods: []grpc.MethodDesc{
1587 MethodName: "GetActionResult",
1588 Handler: _ActionCache_GetActionResult_Handler,
1591 MethodName: "UpdateActionResult",
1592 Handler: _ActionCache_UpdateActionResult_Handler,
1595 Streams: []grpc.StreamDesc{},
1596 Metadata: "google/devtools/remoteexecution/v1test/remote_execution.proto",
1599 // Client API for ContentAddressableStorage service
1601 type ContentAddressableStorageClient interface {
1602 // Determine if blobs are present in the CAS.
1604 // Clients can use this API before uploading blobs to determine which ones are
1605 // already present in the CAS and do not need to be uploaded again.
1607 // There are no method-specific errors.
1608 FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error)
1609 // Upload many blobs at once.
1611 // The client MUST NOT upload blobs with a combined total size of more than 10
1612 // MiB using this API. Such requests should either be split into smaller
1613 // chunks or uploaded using the
1614 // [ByteStream API][google.bytestream.ByteStream], as appropriate.
1616 // This request is equivalent to calling [UpdateBlob][] on each individual
1617 // blob, in parallel. The requests may succeed or fail independently.
1620 // * `INVALID_ARGUMENT`: The client attempted to upload more than 10 MiB of
1623 // Individual requests may return the following errors, additionally:
1624 // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob.
1625 // * `INVALID_ARGUMENT`: The [Digest][google.devtools.remoteexecution.v1test.Digest]
1626 // does not match the provided data.
1627 BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error)
1628 // Fetch the entire directory tree rooted at a node.
1630 // This request must be targeted at a
1631 // [Directory][google.devtools.remoteexecution.v1test.Directory] stored in the
1632 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]
1633 // (CAS). The server will enumerate the `Directory` tree recursively and
1634 // return every node descended from the root.
1635 // The exact traversal order is unspecified and, unless retrieving subsequent
1636 // pages from an earlier request, is not guaranteed to be stable across
1637 // multiple invocations of `GetTree`.
1639 // If part of the tree is missing from the CAS, the server will return the
1640 // portion present and omit the rest.
1642 // * `NOT_FOUND`: The requested tree root is not present in the CAS.
1643 GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (*GetTreeResponse, error)
1646 type contentAddressableStorageClient struct {
1650 func NewContentAddressableStorageClient(cc *grpc.ClientConn) ContentAddressableStorageClient {
1651 return &contentAddressableStorageClient{cc}
1654 func (c *contentAddressableStorageClient) FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) {
1655 out := new(FindMissingBlobsResponse)
1656 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/FindMissingBlobs", in, out, c.cc, opts...)
1663 func (c *contentAddressableStorageClient) BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) {
1664 out := new(BatchUpdateBlobsResponse)
1665 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/BatchUpdateBlobs", in, out, c.cc, opts...)
1672 func (c *contentAddressableStorageClient) GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (*GetTreeResponse, error) {
1673 out := new(GetTreeResponse)
1674 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/GetTree", in, out, c.cc, opts...)
1681 // Server API for ContentAddressableStorage service
1683 type ContentAddressableStorageServer interface {
1684 // Determine if blobs are present in the CAS.
1686 // Clients can use this API before uploading blobs to determine which ones are
1687 // already present in the CAS and do not need to be uploaded again.
1689 // There are no method-specific errors.
1690 FindMissingBlobs(context.Context, *FindMissingBlobsRequest) (*FindMissingBlobsResponse, error)
1691 // Upload many blobs at once.
1693 // The client MUST NOT upload blobs with a combined total size of more than 10
1694 // MiB using this API. Such requests should either be split into smaller
1695 // chunks or uploaded using the
1696 // [ByteStream API][google.bytestream.ByteStream], as appropriate.
1698 // This request is equivalent to calling [UpdateBlob][] on each individual
1699 // blob, in parallel. The requests may succeed or fail independently.
1702 // * `INVALID_ARGUMENT`: The client attempted to upload more than 10 MiB of
1705 // Individual requests may return the following errors, additionally:
1706 // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob.
1707 // * `INVALID_ARGUMENT`: The [Digest][google.devtools.remoteexecution.v1test.Digest]
1708 // does not match the provided data.
1709 BatchUpdateBlobs(context.Context, *BatchUpdateBlobsRequest) (*BatchUpdateBlobsResponse, error)
1710 // Fetch the entire directory tree rooted at a node.
1712 // This request must be targeted at a
1713 // [Directory][google.devtools.remoteexecution.v1test.Directory] stored in the
1714 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]
1715 // (CAS). The server will enumerate the `Directory` tree recursively and
1716 // return every node descended from the root.
1717 // The exact traversal order is unspecified and, unless retrieving subsequent
1718 // pages from an earlier request, is not guaranteed to be stable across
1719 // multiple invocations of `GetTree`.
1721 // If part of the tree is missing from the CAS, the server will return the
1722 // portion present and omit the rest.
1724 // * `NOT_FOUND`: The requested tree root is not present in the CAS.
1725 GetTree(context.Context, *GetTreeRequest) (*GetTreeResponse, error)
1728 func RegisterContentAddressableStorageServer(s *grpc.Server, srv ContentAddressableStorageServer) {
1729 s.RegisterService(&_ContentAddressableStorage_serviceDesc, srv)
1732 func _ContentAddressableStorage_FindMissingBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
1733 in := new(FindMissingBlobsRequest)
1734 if err := dec(in); err != nil {
1737 if interceptor == nil {
1738 return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, in)
1740 info := &grpc.UnaryServerInfo{
1742 FullMethod: "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/FindMissingBlobs",
1744 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1745 return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, req.(*FindMissingBlobsRequest))
1747 return interceptor(ctx, in, info, handler)
1750 func _ContentAddressableStorage_BatchUpdateBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
1751 in := new(BatchUpdateBlobsRequest)
1752 if err := dec(in); err != nil {
1755 if interceptor == nil {
1756 return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, in)
1758 info := &grpc.UnaryServerInfo{
1760 FullMethod: "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/BatchUpdateBlobs",
1762 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1763 return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, req.(*BatchUpdateBlobsRequest))
1765 return interceptor(ctx, in, info, handler)
1768 func _ContentAddressableStorage_GetTree_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
1769 in := new(GetTreeRequest)
1770 if err := dec(in); err != nil {
1773 if interceptor == nil {
1774 return srv.(ContentAddressableStorageServer).GetTree(ctx, in)
1776 info := &grpc.UnaryServerInfo{
1778 FullMethod: "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/GetTree",
1780 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1781 return srv.(ContentAddressableStorageServer).GetTree(ctx, req.(*GetTreeRequest))
1783 return interceptor(ctx, in, info, handler)
1786 var _ContentAddressableStorage_serviceDesc = grpc.ServiceDesc{
1787 ServiceName: "google.devtools.remoteexecution.v1test.ContentAddressableStorage",
1788 HandlerType: (*ContentAddressableStorageServer)(nil),
1789 Methods: []grpc.MethodDesc{
1791 MethodName: "FindMissingBlobs",
1792 Handler: _ContentAddressableStorage_FindMissingBlobs_Handler,
1795 MethodName: "BatchUpdateBlobs",
1796 Handler: _ContentAddressableStorage_BatchUpdateBlobs_Handler,
1799 MethodName: "GetTree",
1800 Handler: _ContentAddressableStorage_GetTree_Handler,
1803 Streams: []grpc.StreamDesc{},
1804 Metadata: "google/devtools/remoteexecution/v1test/remote_execution.proto",
1808 proto.RegisterFile("google/devtools/remoteexecution/v1test/remote_execution.proto", fileDescriptor0)
1811 var fileDescriptor0 = []byte{
1812 // 1747 bytes of a gzipped FileDescriptorProto
1813 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcb, 0x6f, 0x1c, 0x49,
1814 0x19, 0xa7, 0x67, 0x3c, 0xaf, 0x6f, 0xc6, 0xaf, 0x5a, 0xb3, 0x99, 0xcc, 0x6e, 0x90, 0xe9, 0x95,
1815 0x56, 0xd6, 0x68, 0xb7, 0x07, 0x3b, 0xbb, 0x44, 0x78, 0x15, 0x82, 0x3d, 0x1e, 0x3b, 0x51, 0x1c,
1816 0xdb, 0x69, 0x7b, 0xf2, 0x22, 0x52, 0xd3, 0x33, 0x5d, 0x1e, 0x37, 0x9e, 0xe9, 0x6a, 0xaa, 0x6a,
1817 0x1c, 0x27, 0x21, 0x1c, 0x10, 0x12, 0x07, 0x04, 0x12, 0x44, 0x08, 0x24, 0x6e, 0x48, 0x08, 0x09,
1818 0x71, 0xe2, 0x3f, 0x80, 0x3f, 0x80, 0x03, 0x5c, 0x38, 0x23, 0x4e, 0x9c, 0x38, 0x23, 0x24, 0x50,
1819 0x3d, 0x7a, 0x5e, 0xb6, 0x49, 0x8f, 0x1d, 0x4b, 0x7b, 0xeb, 0xfa, 0xaa, 0xbe, 0xdf, 0xf7, 0xfe,
1820 0xbe, 0xaa, 0x86, 0x9b, 0x2d, 0x42, 0x5a, 0x6d, 0x5c, 0xf1, 0xf0, 0x11, 0x27, 0xa4, 0xcd, 0x2a,
1821 0x14, 0x77, 0x08, 0xc7, 0xf8, 0x18, 0x37, 0xbb, 0xdc, 0x27, 0x41, 0xe5, 0x68, 0x91, 0x63, 0xc6,
1822 0x35, 0xd9, 0xe9, 0xd1, 0xad, 0x90, 0x12, 0x4e, 0xd0, 0x87, 0x8a, 0xdd, 0x8a, 0xd8, 0xad, 0x11,
1823 0x76, 0x4b, 0xb1, 0x97, 0xde, 0xd7, 0x62, 0xdc, 0xd0, 0xaf, 0xb8, 0x41, 0x40, 0xb8, 0x2b, 0x76,
1824 0x99, 0x42, 0x29, 0x7d, 0xa0, 0x77, 0xdb, 0x24, 0x68, 0xd1, 0x6e, 0x10, 0xf8, 0x41, 0xab, 0x42,
1825 0x42, 0x4c, 0x87, 0x0e, 0x7d, 0x49, 0x1f, 0x92, 0xab, 0x46, 0x77, 0xbf, 0xe2, 0x75, 0xd5, 0x01,
1826 0xbd, 0x7f, 0x45, 0xef, 0xd3, 0xb0, 0x59, 0x61, 0xdc, 0xe5, 0x5d, 0xcd, 0x68, 0xfe, 0x21, 0x09,
1827 0xe9, 0x95, 0xa6, 0x38, 0x89, 0xea, 0x30, 0xd5, 0x24, 0x9d, 0x8e, 0x1b, 0x78, 0x8e, 0xe7, 0xb7,
1828 0x30, 0xe3, 0x45, 0x63, 0xde, 0x58, 0xc8, 0x2f, 0x59, 0x56, 0x3c, 0x3b, 0xac, 0x35, 0xc9, 0x65,
1829 0x4f, 0x6a, 0x14, 0xb5, 0x44, 0x4f, 0x60, 0xd6, 0x0f, 0xc2, 0x2e, 0x77, 0x28, 0x21, 0x3c, 0x42,
1830 0x4e, 0x9c, 0x0b, 0x79, 0x5a, 0x02, 0xd9, 0x84, 0x70, 0x8d, 0xfd, 0x65, 0x28, 0x90, 0x2e, 0x17,
1831 0xe0, 0xfb, 0x7e, 0x1b, 0xb3, 0x62, 0x72, 0x3e, 0xb9, 0x90, 0xb3, 0xf3, 0x8a, 0xb6, 0x2e, 0x48,
1832 0xe8, 0x63, 0x40, 0xfa, 0x88, 0xe7, 0x53, 0xdc, 0xe4, 0x84, 0xfa, 0x98, 0x15, 0x27, 0xe4, 0xc1,
1833 0x59, 0xb5, 0xb3, 0xd6, 0xdf, 0x40, 0x9b, 0x90, 0x0d, 0xdb, 0x2e, 0xdf, 0x27, 0xb4, 0x53, 0x4c,
1834 0x49, 0x25, 0xbf, 0x12, 0x57, 0xc9, 0x1d, 0xcd, 0x67, 0xf7, 0x10, 0xd0, 0x75, 0xc8, 0x70, 0xbf,
1835 0x83, 0x49, 0x97, 0x17, 0xd3, 0x12, 0xec, 0x6a, 0x04, 0x16, 0x05, 0xca, 0x5a, 0xd3, 0x81, 0xb2,
1836 0xa3, 0x93, 0x68, 0x1e, 0x0a, 0x1e, 0x71, 0x02, 0xc2, 0x9d, 0xa6, 0xdb, 0x3c, 0xc0, 0xc5, 0xcc,
1837 0xbc, 0xb1, 0x90, 0xb5, 0xc1, 0x23, 0x5b, 0x84, 0x57, 0x05, 0xc5, 0xfc, 0xbb, 0x01, 0x99, 0xaa,
1838 0x72, 0x32, 0x7a, 0x1f, 0x72, 0x2e, 0x6d, 0x75, 0x3b, 0x38, 0xe0, 0xac, 0x68, 0x48, 0xb3, 0xfa,
1839 0x04, 0x74, 0x0c, 0x5f, 0xc4, 0xc1, 0x91, 0x4f, 0x49, 0x20, 0xd6, 0xce, 0x91, 0x4b, 0x7d, 0xb7,
1840 0x21, 0x3c, 0x95, 0x98, 0x4f, 0x2e, 0xe4, 0x97, 0xaa, 0x71, 0x6d, 0xd3, 0xd2, 0xac, 0x5a, 0x1f,
1841 0xec, 0x81, 0xc6, 0xb2, 0xe7, 0xf0, 0x49, 0x22, 0x2b, 0xdd, 0x82, 0x77, 0x4e, 0x39, 0x8c, 0x10,
1842 0x4c, 0x04, 0x6e, 0x07, 0xcb, 0xd4, 0xca, 0xd9, 0xf2, 0x1b, 0xcd, 0x41, 0xea, 0xc8, 0x6d, 0x77,
1843 0xb1, 0xcc, 0x8a, 0x9c, 0xad, 0x16, 0xe6, 0xaf, 0x0c, 0xc8, 0x46, 0x2e, 0x45, 0x8f, 0x01, 0x42,
1844 0x2a, 0xb2, 0x9e, 0x8b, 0xe8, 0x19, 0x52, 0xf9, 0xaf, 0x8d, 0x1b, 0x18, 0x6b, 0x47, 0x41, 0x3c,
1845 0xb7, 0x07, 0xc0, 0x4a, 0x9f, 0x40, 0x36, 0xa2, 0x8f, 0xa1, 0xdd, 0xef, 0x0d, 0xc8, 0x45, 0x79,
1846 0xf3, 0x1c, 0xad, 0x43, 0x4a, 0x25, 0xa0, 0xd2, 0x2c, 0x76, 0xca, 0x88, 0x14, 0xdd, 0x22, 0x1e,
1847 0xb6, 0x15, 0x3b, 0x7a, 0x08, 0xf9, 0xc1, 0x2c, 0x55, 0x41, 0xfa, 0x34, 0x7e, 0x95, 0x68, 0x7d,
1848 0x24, 0xe4, 0x20, 0x92, 0xf9, 0x23, 0x03, 0xb2, 0x91, 0xb0, 0x53, 0xad, 0x5c, 0x87, 0xf4, 0x85,
1849 0x4a, 0x53, 0x73, 0xa3, 0x0f, 0x60, 0xd2, 0x67, 0xba, 0x13, 0x8a, 0x80, 0x17, 0x27, 0x64, 0xf6,
1850 0x16, 0x7c, 0x56, 0xeb, 0xd1, 0xcc, 0x43, 0x98, 0x1c, 0xd2, 0xf5, 0x32, 0x35, 0x32, 0x3f, 0x83,
1851 0xb4, 0xee, 0x16, 0x08, 0x26, 0x0e, 0x5c, 0x76, 0x10, 0x49, 0x11, 0xdf, 0xe8, 0x1a, 0x00, 0xf3,
1852 0x5f, 0x60, 0xa7, 0xf1, 0x9c, 0x4b, 0x87, 0x1b, 0x0b, 0x49, 0x3b, 0x27, 0x28, 0xab, 0x82, 0x60,
1853 0xfe, 0x25, 0x09, 0x05, 0xd5, 0x1e, 0x6d, 0xcc, 0xba, 0x6d, 0x8e, 0xea, 0x23, 0x1d, 0x47, 0x85,
1854 0x68, 0x29, 0xae, 0x6e, 0xdb, 0xbd, 0xce, 0x34, 0xdc, 0xa5, 0xf6, 0x4f, 0xed, 0x52, 0x49, 0x09,
1855 0x7e, 0x63, 0x3c, 0xf0, 0x9e, 0x67, 0x4f, 0x6b, 0x6f, 0xef, 0x41, 0x0e, 0x1f, 0xfb, 0xdc, 0x69,
1856 0x12, 0x4f, 0x85, 0x26, 0x65, 0x67, 0x05, 0xa1, 0x2a, 0xa2, 0x20, 0x7c, 0xc1, 0x3d, 0x22, 0x5a,
1857 0xb5, 0xfb, 0x4c, 0x76, 0xbf, 0x82, 0x9d, 0x53, 0x14, 0xdb, 0x7d, 0x86, 0x76, 0x61, 0x52, 0x6f,
1858 0xeb, 0xb8, 0xa4, 0xcf, 0x15, 0x97, 0x82, 0x02, 0xd1, 0x31, 0x51, 0x32, 0x31, 0xa5, 0x52, 0x66,
1859 0xa6, 0x27, 0x13, 0x53, 0xda, 0x97, 0x29, 0xb6, 0xb5, 0xcc, 0xec, 0xb9, 0x65, 0x62, 0x4a, 0xd5,
1860 0xca, 0xfc, 0xad, 0x01, 0xd0, 0x0f, 0x84, 0x48, 0x8b, 0xd0, 0xe5, 0xbd, 0xb4, 0x10, 0xdf, 0x6f,
1861 0xad, 0x1c, 0x8a, 0x90, 0x69, 0x92, 0x80, 0xe3, 0x80, 0x17, 0x93, 0xd2, 0xb6, 0x68, 0x19, 0xaf,
1862 0x50, 0x3a, 0x30, 0x3d, 0x12, 0xd4, 0xcb, 0xd4, 0xd6, 0x7c, 0x9d, 0x80, 0x29, 0x25, 0x1d, 0xdb,
1863 0xf8, 0x3b, 0xdd, 0xa8, 0x9e, 0x03, 0xc6, 0xdd, 0xa0, 0x89, 0x9d, 0x81, 0x12, 0x2d, 0x44, 0xc4,
1864 0x2d, 0x5d, 0xaa, 0xae, 0x2c, 0x92, 0x71, 0xe5, 0xeb, 0xd2, 0xd2, 0xdc, 0xa8, 0x0c, 0xb3, 0xec,
1865 0xd0, 0x0f, 0xd5, 0xdc, 0x73, 0xda, 0x84, 0x1c, 0x76, 0x43, 0xe9, 0xb7, 0xac, 0x3d, 0x2d, 0x36,
1866 0xe4, 0xf4, 0xdb, 0x94, 0x64, 0x74, 0x1d, 0xde, 0xe5, 0x84, 0xbb, 0x6d, 0x47, 0x5d, 0x2e, 0x44,
1867 0x35, 0x3a, 0x4d, 0xd2, 0x0d, 0xb8, 0x4e, 0xeb, 0x77, 0xe4, 0xee, 0x9d, 0x40, 0x47, 0xb9, 0x2a,
1868 0xb6, 0x4e, 0x65, 0x52, 0x95, 0x9f, 0x92, 0x95, 0x3f, 0xc2, 0xa4, 0x7a, 0xc0, 0x0f, 0x0c, 0x98,
1869 0xee, 0x79, 0x85, 0x85, 0x24, 0x60, 0x18, 0x6d, 0x42, 0x9a, 0xca, 0x86, 0xa0, 0xef, 0x48, 0x9f,
1870 0x8c, 0x69, 0xb1, 0xe4, 0xb5, 0x35, 0x86, 0x70, 0xb2, 0x34, 0xd9, 0x73, 0x34, 0x68, 0x42, 0xe5,
1871 0x82, 0x22, 0xaa, 0xc3, 0xe6, 0xbf, 0x13, 0x50, 0xd4, 0x6a, 0x6c, 0x47, 0xd7, 0xbf, 0x7b, 0x98,
1872 0xbb, 0x9e, 0xcb, 0x5d, 0xf4, 0x14, 0x52, 0x8c, 0xbb, 0x2d, 0x15, 0x9e, 0xa9, 0xa5, 0xf5, 0xb8,
1873 0xea, 0x9c, 0x05, 0x68, 0xed, 0x0a, 0x34, 0x5b, 0x81, 0x8a, 0x2a, 0x54, 0x11, 0xba, 0xd8, 0xf5,
1874 0xad, 0xa0, 0x40, 0x74, 0xe5, 0x7f, 0x04, 0x48, 0xb7, 0x13, 0xc6, 0x29, 0x76, 0x3b, 0x2a, 0xbd,
1875 0x92, 0x32, 0xbd, 0x66, 0xd4, 0xce, 0xae, 0xdc, 0x90, 0x29, 0xa6, 0x4e, 0x8b, 0x46, 0x30, 0x78,
1876 0x7a, 0xa2, 0x77, 0x1a, 0x53, 0xda, 0x3f, 0x6d, 0x6e, 0x43, 0x4a, 0x1a, 0x80, 0xf2, 0x90, 0xa9,
1877 0x6f, 0xdd, 0xdd, 0xda, 0x7e, 0xb8, 0x35, 0xf3, 0x05, 0x34, 0x0d, 0xf9, 0xea, 0x4a, 0xf5, 0x76,
1878 0xcd, 0xa9, 0xde, 0xae, 0x55, 0xef, 0xce, 0x18, 0x08, 0x20, 0x7d, 0xbf, 0x5e, 0xab, 0xd7, 0xd6,
1879 0x66, 0x12, 0x68, 0x12, 0x72, 0xb5, 0x47, 0xb5, 0x6a, 0x7d, 0xef, 0xce, 0xd6, 0xc6, 0x4c, 0x52,
1880 0x2c, 0xab, 0xdb, 0xf7, 0x76, 0x36, 0x6b, 0x7b, 0xb5, 0xb5, 0x99, 0x09, 0xf3, 0x67, 0x06, 0xbc,
1881 0xbb, 0x81, 0xf9, 0x50, 0xf4, 0xc6, 0xa9, 0x90, 0xcb, 0xf0, 0xa0, 0xf9, 0x2f, 0x03, 0xae, 0xd6,
1882 0x43, 0xcf, 0xe5, 0xf8, 0x73, 0xa5, 0x17, 0x7a, 0xdc, 0x03, 0xd5, 0xe9, 0x9c, 0xbc, 0x40, 0x8d,
1883 0x68, 0x68, 0x5d, 0x04, 0x3f, 0x35, 0xe0, 0xca, 0xba, 0x1f, 0x78, 0xf7, 0x7c, 0xc6, 0xfc, 0xa0,
1884 0xb5, 0xda, 0x26, 0x0d, 0x36, 0x96, 0xc1, 0xf7, 0xa1, 0xd0, 0x68, 0x93, 0x86, 0x36, 0x37, 0x9a,
1885 0xdf, 0xe3, 0xda, 0x9b, 0x17, 0x18, 0xea, 0x9b, 0x99, 0xdf, 0x85, 0xe2, 0x49, 0x95, 0x74, 0x9f,
1886 0xf8, 0x16, 0xcc, 0x75, 0x14, 0xdd, 0x79, 0x0b, 0x62, 0x51, 0xa7, 0x2f, 0x23, 0x92, 0xfe, 0x3d,
1887 0x98, 0x55, 0x39, 0x20, 0x88, 0x91, 0x2b, 0xe4, 0x53, 0x4e, 0xce, 0x99, 0x0b, 0x3f, 0xe5, 0x24,
1888 0x4a, 0xff, 0x02, 0x25, 0x9a, 0x83, 0x4c, 0x92, 0x82, 0x2d, 0xbf, 0xcd, 0x9f, 0x1b, 0x70, 0x65,
1889 0xd5, 0xe5, 0xcd, 0x83, 0xbe, 0x16, 0xe3, 0x45, 0xa4, 0x0e, 0x59, 0xaa, 0xce, 0x47, 0x6e, 0x89,
1890 0x7d, 0xb1, 0x3f, 0x61, 0xb8, 0xdd, 0x83, 0x32, 0x7f, 0x9c, 0x80, 0xe2, 0x49, 0xbd, 0x74, 0x58,
1891 0x5a, 0x90, 0xa3, 0xfa, 0x3b, 0xba, 0xb3, 0xdf, 0x89, 0x2b, 0xf4, 0x2c, 0x50, 0x2b, 0xfa, 0xb0,
1892 0xfb, 0xd8, 0xa5, 0x1f, 0x1a, 0x90, 0xed, 0x49, 0xdd, 0x86, 0xfc, 0x40, 0x12, 0x9c, 0x33, 0x24,
1893 0xd0, 0x4f, 0x3d, 0x54, 0x86, 0xb4, 0x7a, 0xcc, 0xeb, 0xb2, 0x45, 0x11, 0x16, 0x0d, 0x9b, 0xa2,
1894 0x83, 0xf3, 0x2e, 0xb3, 0xf5, 0x09, 0xf3, 0x4f, 0x06, 0x4c, 0x6d, 0x60, 0xbe, 0x47, 0xf1, 0x78,
1895 0xb3, 0x7d, 0x1b, 0xf2, 0x17, 0x7f, 0xb8, 0x03, 0xed, 0xbf, 0xd9, 0xdf, 0x83, 0x5c, 0xe8, 0xb6,
1896 0xb0, 0x23, 0x2e, 0xd9, 0xb2, 0x33, 0xa4, 0xec, 0xac, 0x20, 0xec, 0xfa, 0x2f, 0xe4, 0x15, 0x54,
1897 0x6e, 0x72, 0x72, 0x88, 0x03, 0xdd, 0xde, 0xe5, 0xf1, 0x3d, 0x41, 0x30, 0x7f, 0x62, 0xc0, 0x74,
1898 0xcf, 0x08, 0xed, 0xd5, 0xdd, 0xe1, 0x37, 0x93, 0x8a, 0xe6, 0xe2, 0xd8, 0x6f, 0xa6, 0xa1, 0xf7,
1899 0x12, 0xfa, 0x10, 0xa6, 0x03, 0x7c, 0xcc, 0x9d, 0x01, 0x65, 0xd4, 0xf3, 0x6f, 0x52, 0x90, 0x77,
1900 0x22, 0x85, 0x96, 0x7e, 0x63, 0x40, 0xae, 0x16, 0x61, 0xa2, 0x5f, 0x18, 0x90, 0xd1, 0x13, 0x15,
1901 0x7d, 0x75, 0xcc, 0x11, 0xac, 0x83, 0x52, 0xba, 0x16, 0xf1, 0x0d, 0xfc, 0xef, 0xb1, 0x7a, 0xf3,
1902 0xd9, 0xfc, 0xf4, 0xfb, 0x7f, 0xfd, 0xc7, 0xeb, 0x44, 0xc5, 0x2c, 0x47, 0xff, 0x9e, 0x5e, 0x0e,
1903 0x85, 0xf0, 0x66, 0xb9, 0xfc, 0xaa, 0xa2, 0x3a, 0x26, 0x5b, 0x56, 0xa2, 0xf0, 0xb2, 0x51, 0x5e,
1904 0xfa, 0x4f, 0x12, 0xf2, 0xaa, 0xad, 0xca, 0x3b, 0x14, 0xfa, 0xa7, 0x72, 0xe4, 0xd0, 0xd3, 0xe6,
1905 0xeb, 0x71, 0x35, 0x3e, 0x7d, 0x10, 0x96, 0xce, 0xd5, 0xdf, 0x4d, 0x57, 0x1a, 0xf4, 0x4d, 0xf4,
1906 0xf8, 0x8d, 0x06, 0x7d, 0xac, 0xa6, 0x09, 0xab, 0xbc, 0x1c, 0x1a, 0x59, 0x96, 0x78, 0xc7, 0xbd,
1907 0x1a, 0x25, 0xf6, 0x1f, 0x75, 0xaf, 0xd0, 0x7f, 0x0d, 0x40, 0x27, 0xe7, 0x24, 0x5a, 0x19, 0xaf,
1908 0xcd, 0xbc, 0x3d, 0x93, 0x43, 0x69, 0xf2, 0xb7, 0x4b, 0x97, 0x67, 0xf2, 0xf2, 0xf0, 0x00, 0x5e,
1909 0xfa, 0x65, 0x0a, 0xae, 0x56, 0x55, 0x2b, 0x5f, 0xf1, 0x3c, 0x8a, 0x19, 0x13, 0xcf, 0x8b, 0x5d,
1910 0x4e, 0xa8, 0xb8, 0x24, 0xfd, 0xd9, 0x80, 0x99, 0xd1, 0x09, 0x86, 0x6e, 0xc5, 0xff, 0x87, 0x71,
1911 0xea, 0x38, 0x2e, 0x7d, 0xe3, 0xfc, 0x00, 0xaa, 0xb2, 0xcd, 0x1b, 0xd2, 0x4f, 0x8b, 0xe6, 0x47,
1912 0xff, 0xc7, 0x4f, 0xa2, 0x1b, 0xb2, 0xe5, 0xfd, 0x3e, 0xc4, 0xb2, 0x51, 0x96, 0x06, 0x8d, 0xb6,
1913 0xe9, 0xf8, 0x06, 0x9d, 0x31, 0xcd, 0xe2, 0x1b, 0x74, 0xd6, 0x84, 0x18, 0xc3, 0xa0, 0x46, 0x1f,
1914 0x42, 0x18, 0xf4, 0x37, 0x03, 0x32, 0xba, 0xef, 0xc5, 0x6f, 0x2c, 0xc3, 0xdd, 0xbe, 0x74, 0x63,
1915 0x6c, 0x3e, 0xad, 0xf5, 0x53, 0xa9, 0xf5, 0x03, 0xb4, 0xf7, 0x26, 0xad, 0x2b, 0x2f, 0x07, 0x26,
1916 0x45, 0x94, 0xa3, 0x83, 0xa4, 0xc1, 0x0c, 0x6d, 0x29, 0x29, 0xab, 0x7f, 0x34, 0xa0, 0xdc, 0x24,
1917 0x9d, 0x98, 0xca, 0xad, 0xce, 0xd9, 0x92, 0xde, 0xeb, 0xb9, 0x3b, 0x94, 0x70, 0xb2, 0x63, 0x3c,
1918 0xa9, 0x6b, 0xfe, 0x16, 0x69, 0xbb, 0x41, 0xcb, 0x22, 0xb4, 0x55, 0x69, 0xe1, 0x40, 0xfe, 0x65,
1919 0xad, 0xa8, 0x2d, 0x37, 0xf4, 0xd9, 0x9b, 0xfe, 0xe4, 0x7f, 0x36, 0x42, 0xfe, 0x75, 0x22, 0x69,
1920 0xd7, 0x1e, 0xfd, 0x2e, 0x71, 0x6d, 0x43, 0xa1, 0x8f, 0x08, 0xb7, 0x1e, 0x2c, 0xee, 0x61, 0xc6,
1921 0x1b, 0x69, 0x29, 0xe7, 0xfa, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xde, 0xd9, 0x80, 0xd0, 0x30,